Rev 820 | Blame | Last modification | View Log | RSS feed
package com.erggroup.buildtool.daemon;import com.erggroup.buildtool.daemon.BuildThread;import com.erggroup.buildtool.ripple.MutableInt;import com.erggroup.buildtool.ripple.MutableString;import com.erggroup.buildtool.ripple.ReleaseManager;import java.sql.SQLException;import org.apache.log4j.Logger;/**Slave Thread sub component*/public class SlaveThreadextends BuildThread{/**Logger* @attribute*/private static final Logger mLogger = Logger.getLogger(SlaveThread.class);/**constructor*/public SlaveThread(int rtag_id, int rcon_id, String gbebuildfilter){mLogger.warn("SlaveThread rtag_id " + rtag_id + " rcon_id " + rcon_id);mRtagId = rtag_id;mRconId = rcon_id;mGbebuildfilter = gbebuildfilter;}/**implements the sequence diagrams consume build files, allowed to proceed, check environment*/public void run(){Integer id = new Integer(mRtagId);setName(id.toString());mLogger.debug("run");boolean exit = false;MutableString buildFileContent = new MutableString();while(!exit){try{if ( Thread.currentThread().isInterrupted() ){mLogger.warn("run is interrupted");// unit test techniquethrow new ExitException();}if ( mGbebuildfilter.compareTo("unit test spawn thread") == 0){throw new Exception();}// allowed to proceedif ( mGbebuildfilter.compareTo("unit test consume build files") != 0){mLogger.warn("run checking allowedToProceed");allowedToProceed();mLogger.info("run allowedToProceed returned");}// consume build filesmLogger.warn("run consume build files");buildFileContent.value = "";boolean logWarning = true;// additional handshake// Master waits for Slave to be in state waiting// wait for the Master to signal we are activeMutableInt rconId = new MutableInt();MutableInt current_run_level = new MutableInt();do{mReleaseManager.querySingleRunLevel(mRconId);mReleaseManager.getFirstRunLevel(rconId, current_run_level);if (current_run_level.value != ReleaseManager.DB_ACTIVE){try{if ( logWarning ){mLogger.warn("run sleep 3 secs waiting for Master to set Slave run level ACTIVE");logWarning = false;}else{mLogger.info("run sleep 3 secs waiting for Master to set Slave run level ACTIVE");}// to do, sleep for periodicMsThread.sleep(3000);mLogger.info("run sleep returned");}catch (InterruptedException e){mLogger.warn("run caught InterruptedException");}}} while (current_run_level.value != ReleaseManager.DB_ACTIVE);mReleaseManager.queryRunLevel(mRconId, buildFileContent);if ( buildFileContent.value.compareTo("") == 0){throw new Exception();}mLogger.info("run consumed build files");if ( mGbebuildfilter.compareTo("unit test consume build files") == 0 ){throw new ExitException();}// set CURRENT_BUILD_FILES to nullmReleaseManager.clearBuildFile(mRconId);// check environmentmLogger.warn("run checkEnvironment");checkEnvironment();mLogger.info("run checkEnvironment returned");mSleep = true;if ( buildFileContent.value.compareTo(mDummyBuildFileContent) != 0 ){// deliver change to product baselinemLogger.warn("run deliverChange");setViewUp(buildFileContent.value, false);deliverChange(null, null, false);tearViewDown();mLogger.info("run deliverChange returned");mSleep = false;}}catch( SQLException e ){// oracle connection issuesmLogger.warn("run oracle connection issues");mSleep = true;}catch( ExitException e ){mLogger.warn("run ExitException");exit = true;}catch( InterruptedException e ){mLogger.warn("run InterruptedException");}catch( Exception e ){mLogger.error("run indefinitePause");try{mReleaseManager.indefinitePause();}catch( Exception f ){mLogger.error("run indefinitePause failed");}}}}/**returns 'S'*/protected char getMode(){mLogger.debug("getMode");return 'S';}}