Subversion Repositories DevTools

Rev

Rev 896 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 896 Rev 898
Line 268... Line 268...
268
      }
268
      }
269
    }
269
    }
270
    
270
    
271
    boolean proceed = false;
271
    boolean proceed = false;
272
    
272
    
273
    while ( !proceed )
273
    try
274
    {
274
    {
275
      mReleaseManager.connect();
275
      while ( !proceed )
276
      if ( !mReleaseManager.queryReleaseConfig(mRtagId, mRconId, BuildDaemon.mHostname, getMode()) )
-
 
277
      {
-
 
278
        mReleaseManager.disconnect();
-
 
279
        mLogger.warn("allowedToProceed queryReleaseConfig failed");
-
 
280
        throw new ExitException();
-
 
281
      }
-
 
282
      
-
 
283
      Date resumeTime = new Date( 0 );
-
 
284
      if ( !mReleaseManager.queryRunLevelSchedule(resumeTime, mRecoverable) )
-
 
285
      {
276
      {
286
        mLogger.info("allowedToProceed scheduled downtime");
-
 
287
        mReleaseManager.disconnect();
277
        mReleaseManager.connect();
-
 
278
        if ( !mReleaseManager.queryReleaseConfig(mRtagId, mRconId, BuildDaemon.mHostname, getMode()) )
-
 
279
        {
288
        mRunLevel = RunLevel.PAUSED;
280
          mReleaseManager.disconnect();
289
        mLogger.warn("allowedToProceed changing run level to PAUSED for rcon_id " + mRconId);
281
          mLogger.warn("allowedToProceed queryReleaseConfig failed");
290
        mRunLevel.persist(mReleaseManager, mRconId);
282
          throw new ExitException();
-
 
283
        }
291
        
284
        
292
        synchronized(mSynchroniser)
285
        Date resumeTime = new Date( 0 );
-
 
286
        if ( !mReleaseManager.queryRunLevelSchedule(resumeTime, mRecoverable) )
293
        {
287
        {
294
          // contain the schedule and wait in the same synchronized block to prevent a deadlock
288
          mLogger.info("allowedToProceed scheduled downtime");
-
 
289
          mReleaseManager.disconnect();
-
 
290
          mRunLevel = RunLevel.PAUSED;
295
          // eg this thread calls schedule, timer thread calls notifyall, this thread calls wait (forever)
291
          mLogger.warn("allowedToProceed changing run level to PAUSED for rcon_id " + mRconId);
-
 
292
          mRunLevel.persist(mReleaseManager, mRconId);
296
          try
293
          
-
 
294
          synchronized(mSynchroniser)
297
          {
295
          {
-
 
296
            // contain the schedule and wait in the same synchronized block to prevent a deadlock
298
            if (mResumeTimerTask.isCancelled())
297
            // eg this thread calls schedule, timer thread calls notifyall, this thread calls wait (forever)
-
 
298
            try
299
            {
299
            {
-
 
300
              if (mResumeTimerTask.isCancelled())
-
 
301
              {
300
              mResumeTimerTask = new ResumeTimerTask();
302
                mResumeTimerTask = new ResumeTimerTask();
301
              mTimer = new Timer();
303
                mTimer = new Timer();
302
              mResumeTimerTask.setTimer(mTimer);
304
                mResumeTimerTask.setTimer(mTimer);
-
 
305
              }
-
 
306
              mLogger.warn("allowedToProceed schedule passed " + resumeTime.getTime());
-
 
307
              mTimer.schedule(mResumeTimerTask, resumeTime);
303
            }
308
            }
304
            mLogger.warn("allowedToProceed schedule passed " + resumeTime.getTime());
-
 
305
            mTimer.schedule(mResumeTimerTask, resumeTime);
-
 
306
          }
-
 
307
          catch( IllegalStateException e )
309
            catch( IllegalStateException e )
308
          {
-
 
309
            // this may be thrown by schedule if already scheduled
-
 
310
            // it signifies another BuildThread has already scheduled the ResumeTimerTask
-
 
311
             mLogger.warn("allowedToProceed already scheduled");
-
 
312
          }
-
 
313
 
-
 
314
          try
-
 
315
          {
-
 
316
            mLogger.warn("allowedToProceed wait");
-
 
317
            mSynchroniser.wait();
-
 
318
            mLogger.warn("allowedToProceed wait returned");
-
 
319
             
-
 
320
            if ( mUnitTest.compareTo("unit test not allowed to proceed") == 0 )
-
 
321
            {
310
            {
-
 
311
              // this may be thrown by schedule if already scheduled
-
 
312
              // it signifies another BuildThread has already scheduled the ResumeTimerTask
-
 
313
               mLogger.warn("allowedToProceed already scheduled");
-
 
314
            }
-
 
315
  
-
 
316
            try
-
 
317
            {
-
 
318
              mLogger.warn("allowedToProceed wait");
-
 
319
              mSynchroniser.wait();
-
 
320
              mLogger.warn("allowedToProceed wait returned");
-
 
321
               
-
 
322
              if ( mUnitTest.compareTo("unit test not allowed to proceed") == 0 )
-
 
323
              {
322
              throw new ExitException();
324
                throw new ExitException();
-
 
325
              }
-
 
326
            }
-
 
327
            catch( InterruptedException e )
-
 
328
            {
-
 
329
              mLogger.warn("allowedToProceed caught InterruptedException");
323
            }
330
            }
324
          }
331
          }
325
          catch( InterruptedException e )
-
 
326
          {
332
          
327
            mLogger.warn("allowedToProceed caught InterruptedException");
-
 
328
          }
-
 
329
        }
333
        }
330
        
-
 
331
      }
-
 
332
      else
334
        else
333
      {
-
 
334
        if ( !mReleaseManager.queryDirectedRunLevel(mRconId) )
-
 
335
        {
335
        {
336
          mLogger.info("allowedToProceed downtime");
-
 
337
          mReleaseManager.disconnect();
336
          if ( !mReleaseManager.queryDirectedRunLevel(mRconId) )
338
          mRunLevel = RunLevel.PAUSED;
-
 
339
          mLogger.warn("allowedToProceed changing run level to PAUSED for rcon_id " + mRconId);
-
 
340
          mRunLevel.persist(mReleaseManager, mRconId);
-
 
341
          try
-
 
342
          {
337
          {
-
 
338
            mLogger.info("allowedToProceed downtime");
-
 
339
            mReleaseManager.disconnect();
-
 
340
            mRunLevel = RunLevel.PAUSED;
-
 
341
            mLogger.warn("allowedToProceed changing run level to PAUSED for rcon_id " + mRconId);
-
 
342
            mRunLevel.persist(mReleaseManager, mRconId);
-
 
343
            try
-
 
344
            {
343
            // to do, sleep for periodicMs
345
              // to do, sleep for periodicMs
344
            mLogger.warn("allowedToProceed sleep 5 mins directed downtime");
346
              mLogger.warn("allowedToProceed sleep 5 mins directed downtime");
345
            Thread.sleep(300000);
347
              Thread.sleep(300000);
346
            mLogger.info("allowedToProceed sleep returned");
348
              mLogger.info("allowedToProceed sleep returned");
-
 
349
            }
-
 
350
            catch (InterruptedException e)
-
 
351
            {
-
 
352
              mLogger.warn("allowedToProceed caught InterruptedException");
-
 
353
            }
347
          }
354
          }
348
          catch (InterruptedException e)
355
          else
349
          {
356
          {
350
            mLogger.warn("allowedToProceed caught InterruptedException");
357
            mReleaseManager.disconnect();
-
 
358
            proceed = true;
351
          }
359
          }
352
        }
360
        }
353
        else
-
 
354
        {
-
 
355
          mReleaseManager.disconnect();
-
 
356
          proceed = true;
-
 
357
        }
-
 
358
      }
361
      }
359
    }
362
    }
-
 
363
    finally
-
 
364
    {
-
 
365
      // this block is executed regardless of what happens in the try block
-
 
366
      // even if an exception is thrown
-
 
367
      // ensure disconnect
-
 
368
      mReleaseManager.disconnect();
-
 
369
    }
360
    
370
    
361
    mRecoverable = false;
371
    mRecoverable = false;
362
  }
372
  }
363
 
373
 
364
  /**periodically 
374
  /**periodically 
Line 791... Line 801...
791
      // do not run AbtSetUp on slave in metrics gathering mode
801
      // do not run AbtSetUp on slave in metrics gathering mode
792
      return;
802
      return;
793
    }
803
    }
794
    
804
    
795
    MutableString buildFilter = new MutableString();
805
    MutableString buildFilter = new MutableString();
796
    mReleaseManager.connect();
-
 
797
    mReleaseManager.queryBuildFilter(mRconId, buildFilter);
806
    mReleaseManager.queryBuildFilter(mRconId, buildFilter);
798
    mReleaseManager.disconnect();
-
 
799
    mGbebuildfilter = buildFilter.value;
807
    mGbebuildfilter = buildFilter.value;
800
 
808
 
801
    // run ant on the AbtSetUp target
809
    // run ant on the AbtSetUp target
802
    deliverChange(content, "AbtSetUp", master);
810
    deliverChange(content, "AbtSetUp", master);
803
  }
811
  }