Project

General

Profile

« Previous | Next » 

Revision 2572

Added by Jing Tao over 18 years ago

Persistant timed replication parameter.

View differences:

src/edu/ucsb/nceas/metacat/MetacatReplication.java
29 29

  
30 30
import edu.ucsb.nceas.dbadapter.AbstractDatabase;
31 31
import java.util.*;
32
import java.util.Date;
32 33
import java.io.*;
33 34
import java.sql.*;
34 35
import java.net.*;
......
41 42

  
42 43
public class MetacatReplication extends HttpServlet implements Runnable
43 44
{
44
  private String deltaT;
45
  private long timeInterval;
46
  private Date firstTime;
47
  private boolean timedReplicationIsOn = false;
45 48
  Timer replicationDaemon;
46 49
  private static MetaCatUtil util = new MetaCatUtil();
47 50
  private Vector fileLocks = new Vector();
48 51
  private Thread lockThread = null;
49 52
  private static final AbstractDatabase dbAdapter = MetaCatUtil.dbAdapter;
50 53
  public static final String FORCEREPLICATEDELETE = "forcereplicatedelete";
51

  
54
  private static final String TIMEREPLICATION = "timedreplication";
55
  private static final String TIMEREPLICATIONINTERVAl = "timedreplicationinterval";
56
  private static final String FIRSTTIME  = "firsttimedreplication";
57
  private static final int    TIMEINTERVALLIMIT = 7200000;
58
  
52 59
  /**
53 60
   * Initialize the servlet by creating appropriate database connections
54 61
   */
......
56 63
  {
57 64
     //initialize db connections to handle any update requests
58 65
    MetaCatUtil util = new MetaCatUtil();
59
    deltaT = util.getOption("deltaT");
66
    //deltaT = util.getOption("deltaT");
60 67
    //the default deltaT can be set from metacat.properties
61 68
    //create a thread to do the delta-T check but don't execute it yet
62 69
    replicationDaemon = new Timer(true);
63
    /*java.net.URL.setURLStreamHandlerFactory(
64
       new java.net.URLStreamHandlerFactory()
70
    try
71
    {
72
       timedReplicationIsOn = (new Boolean(util.getOption(TIMEREPLICATION ).trim())).booleanValue();
73
       MetaCatUtil.debugMessage("The timed replication on is"+timedReplicationIsOn, 30);
74
       timeInterval = (new Long(util.getOption(TIMEREPLICATIONINTERVAl).trim())).longValue();
75
       MetaCatUtil.debugMessage("The timed replication time Inerval is "+ timeInterval, 20);
76
       String firstTimeStr = util.getOption(FIRSTTIME);
77
       MetaCatUtil.debugMessage("first replication time form property is "+firstTimeStr, 20);
78
       firstTime = ReplicationHandler.combinateCurrentDateAndGivenTime(firstTimeStr);
79
       MetaCatUtil.debugMessage("After combine current time, the real first time is "
80
                                +firstTime.toString()+" minisec", 20);
81
       // set up time replication if it is on
82
       if (timedReplicationIsOn)
65 83
       {
66
          public java.net.URLStreamHandler createURLStreamHandler(
67
                        final String protocol)
68
          {
69
              if ("http".equals(protocol))
70
              {
71
                 try
72
                 {
73
                    URLStreamHandler urlsh = new HTTPClient.http.Handler();
74
                    MetaCatUtil.debugMessage("Using HttpClient Protocol Handler for http", 45);
75
                    return urlsh;
76
                  }
77
                  catch (Exception e)
78
                  {
79
                     MetaCatUtil.debugMessage(
80
                          "Error setting URL StreamHandler!", 30);
81
                     return null;
82
                  }
83
               }//if
84
               else if ("https".equals(protocol))
85
               {
86
                 try
87
                 {
88
                   URLStreamHandler urlsh = new HTTPClient.https.Handler();
89
                   MetaCatUtil.debugMessage("Using HttpClient Protocol Handler for https", 45);
90
                   return urlsh;
91
                 }
92
                 catch (Exception e)
93
                 {
94
                   MetaCatUtil.debugMessage(
95
                              "Error setting URL StreamHandler!", 30);
96
                   return null;
97
                 }
98
              }
99
              return null;
100
         }//createURLStreamHandler
101
     });*/
102

  
84
           replicationDaemon.scheduleAtFixedRate(new ReplicationHandler(), firstTime, timeInterval);
85
           MetacatReplication.replLog("deltaT handler started with rate=" +
86
                   timeInterval + " mini seconds at " +firstTime.toString());
87
       }
88
    }
89
    catch (Exception e)
90
    {
91
        // the timed replication in Metacat.properties file has problem
92
        // so timed replication is setting to false;
93
        MetaCatUtil.debugMessage("Couldn't set up timed replication "+
94
                     " in Metacat replication servlet init because " +
95
                 e.getMessage(), 20);
96
        MetacatReplication.replErrorLog("Couldn't set up timed replication "+
97
                " in Metacat replication servlet init because " +
98
                e.getMessage());
99
        timedReplicationIsOn = false;
100
    }
101
    
103 102
  }
104 103

  
105 104
  public void destroy()
106 105
  {
107 106
    replicationDaemon.cancel();
108
   // System.out.println("Replication daemon cancelled.");
107
   
109 108
  }
110 109

  
111 110
  public void doGet (HttpServletRequest request, HttpServletResponse response)
......
190 189
      //stop the replication server
191 190
      replicationDaemon.cancel();
192 191
      replicationDaemon = new Timer(true);
192
      timedReplicationIsOn = false;
193
      MetaCatUtil.setOption(TIMEREPLICATION, (new Boolean(timedReplicationIsOn)).toString());
193 194
      out.println("Replication Handler Stopped");
194 195
      MetacatReplication.replLog("deltaT handler stopped");
195 196

  
196 197

  
197 198
    } else if ( action.equals("start") ) {
198

  
199
       String firstTimeStr = "";
199 200
      //start the replication server
200
      int rate;
201
      if ( params.containsKey("rate") ) {
202
        rate = new Integer(
203
               new String(((String[])params.get("rate"))[0])).intValue();
204
        if(rate < 30) {
205
            out.println("Replication deltaT rate cannot be less than 30!");
201
       if ( params.containsKey("rate") ) {
202
        timeInterval = new Long(
203
               new String(((String[])params.get("rate"))[0])).longValue();
204
        if(timeInterval < TIMEINTERVALLIMIT) {
205
            out.println("Replication deltaT rate cannot be less than "+
206
                    TIMEINTERVALLIMIT + " millisecs and system automatically setup the rate to "+TIMEINTERVALLIMIT);
206 207
            //deltaT<30 is a timing mess!
207
            rate = 1000;
208
            timeInterval = TIMEINTERVALLIMIT;
208 209
        }
209 210
      } else {
210
        rate = 1000;
211
        timeInterval = TIMEINTERVALLIMIT ;
211 212
      }
212
      out.println("New rate is: " + rate + " seconds.");
213
      MetaCatUtil.debugMessage("New rate is: " + timeInterval + " mini seconds.", 30);
214
      if ( params.containsKey("firsttime"))
215
      {
216
         firstTimeStr = ((String[])params.get("firsttime"))[0];
217
         try
218
         {
219
           firstTime = ReplicationHandler.combinateCurrentDateAndGivenTime(firstTimeStr);
220
           MetaCatUtil.debugMessage("The first time setting is "+firstTime.toString(), 30);
221
         }
222
         catch (Exception e)
223
         {
224
            throw new ServletException(e.getMessage());
225
         }
226
         MetaCatUtil.debugMessage("After combine current time, the real first time is "
227
                                  +firstTime.toString()+" minisec", 20);
228
      }
229
      else
230
      {
231
          MetacatReplication.replErrorLog("You should specify the first time " +
232
                                          "to start a time replication");
233
          MetaCatUtil.debugMessage("You should specify the first time " +
234
                                  "to start a time replication", 30);
235
          return;
236
      }
237
      
238
      timedReplicationIsOn = true;
239
      // save settings to property file
240
      MetaCatUtil.setOption(TIMEREPLICATION, (new Boolean(timedReplicationIsOn)).toString());
241
      // note we couldn't use firstTime object because it has date info
242
      // we only need time info such as 10:00 PM
243
      MetaCatUtil.setOption(FIRSTTIME, firstTimeStr);
244
      MetaCatUtil.setOption(TIMEREPLICATIONINTERVAl, (new Long(timeInterval)).toString());
213 245
      replicationDaemon.cancel();
214 246
      replicationDaemon = new Timer(true);
215
      replicationDaemon.scheduleAtFixedRate(new ReplicationHandler(out), 0,
216
                                            rate * 1000);
247
      replicationDaemon.scheduleAtFixedRate(new ReplicationHandler(), firstTime,
248
                                            timeInterval);
217 249
      out.println("Replication Handler Started");
218 250
      MetacatReplication.replLog("deltaT handler started with rate=" +
219
                                    rate + " seconds");
251
                                    timeInterval + " milliseconds at " +firstTime.toString());
220 252

  
221 253

  
222 254
    } else if ( action.equals("getall") ) {
223 255
      //updates this server exactly once
224
      replicationDaemon.schedule(new ReplicationHandler(out), 0);
256
      replicationDaemon.schedule(new ReplicationHandler(), 0);
225 257
      response.setContentType("text/html");
226 258
      out.println("<html><body>\"Get All\" Done</body></html>");
227 259

  

Also available in: Unified diff