public virtual void run() { lock (this) { LOG.startingToAcquireJobs(jobExecutor.Name); JobAcquisitionStrategy acquisitionStrategy = initializeAcquisitionStrategy(); while (!isInterrupted) { acquisitionContext.reset(); acquisitionContext.AcquisitionTime = DateTimeHelper.CurrentUnixTimeMillis(); IEnumerator <ProcessEngineImpl> engineIterator = jobExecutor.engineIterator(); try { while (engineIterator.MoveNext()) { ProcessEngineImpl currentProcessEngine = engineIterator.Current; if (!jobExecutor.hasRegisteredEngine(currentProcessEngine)) { // if engine has been unregistered meanwhile continue; } AcquiredJobs acquiredJobs = acquireJobs(acquisitionContext, acquisitionStrategy, currentProcessEngine); executeJobs(acquisitionContext, currentProcessEngine, acquiredJobs); } } catch (Exception e) { LOG.exceptionDuringJobAcquisition(e); acquisitionContext.AcquisitionException = e; } acquisitionContext.JobAdded = isJobAdded; configureNextAcquisitionCycle(acquisitionContext, acquisitionStrategy); //The clear had to be done after the configuration, since a hint can be //appear in the suspend and the flag shouldn't be cleaned in this case. //The loop will restart after suspend with the isJobAdded flag and //reconfigure with this flag clearJobAddedNotification(); long waitTime = acquisitionStrategy.WaitTime; // wait the requested wait time minus the time that acquisition itself took // this makes the intervals of job acquisition more constant and therefore predictable waitTime = Math.Max(0, (acquisitionContext.AcquisitionTime + waitTime) - DateTimeHelper.CurrentUnixTimeMillis()); suspendAcquisition(waitTime); } LOG.stoppedJobAcquisition(jobExecutor.Name); } }
protected internal virtual AcquiredJobs acquireJobs(JobAcquisitionContext context, JobAcquisitionStrategy acquisitionStrategy, ProcessEngineImpl currentProcessEngine) { CommandExecutor commandExecutor = currentProcessEngine.ProcessEngineConfiguration.CommandExecutorTxRequired; int numJobsToAcquire = acquisitionStrategy.getNumJobsToAcquire(currentProcessEngine.Name); AcquiredJobs acquiredJobs = null; if (numJobsToAcquire > 0) { jobExecutor.logAcquisitionAttempt(currentProcessEngine); acquiredJobs = commandExecutor.execute(jobExecutor.getAcquireJobsCmd(numJobsToAcquire)); } else { acquiredJobs = new AcquiredJobs(numJobsToAcquire); } context.submitAcquiredJobs(currentProcessEngine.Name, acquiredJobs); jobExecutor.logAcquiredJobs(currentProcessEngine, acquiredJobs.size()); jobExecutor.logAcquisitionFailureJobs(currentProcessEngine, acquiredJobs.NumberOfJobsFailedToLock); LOG.acquiredJobs(currentProcessEngine.Name, acquiredJobs); return(acquiredJobs); }
/// <summary> /// Reconfigure the acquisition strategy based on the current cycle's acquisition context. /// A strategy implementation may update internal data structure to calculate a different wait time /// before the next cycle of acquisition is performed. /// </summary> protected internal virtual void configureNextAcquisitionCycle(JobAcquisitionContext acquisitionContext, JobAcquisitionStrategy acquisitionStrategy) { acquisitionStrategy.reconfigure(acquisitionContext); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Before public void setUp() public virtual void setUp() { strategy = new BackoffJobAcquisitionStrategy(BASE_IDLE_WAIT_TIME, IDLE_INCREASE_FACTOR, MAX_IDLE_TIME, BASE_BACKOFF_WAIT_TIME, BACKOFF_INCREASE_FACTOR, MAX_BACKOFF_TIME, DECREASE_THRESHOLD, NUM_JOBS_TO_ACQUIRE); }
protected internal override void configureNextAcquisitionCycle(JobAcquisitionContext acquisitionContext, JobAcquisitionStrategy acquisitionStrategy) { base.configureNextAcquisitionCycle(acquisitionContext, acquisitionStrategy); long timeBetweenCurrentAndNextAcquisition = acquisitionStrategy.WaitTime; waitEvents.Add(new RecordedWaitEvent(DateTimeHelper.CurrentUnixTimeMillis(), timeBetweenCurrentAndNextAcquisition)); }
protected internal override AcquiredJobs acquireJobs(JobAcquisitionContext context, JobAcquisitionStrategy configuration, ProcessEngineImpl currentProcessEngine) { acquisitionEvents.Add(new RecordedAcquisitionEvent(DateTimeHelper.CurrentUnixTimeMillis(), configuration.getNumJobsToAcquire(currentProcessEngine.Name))); return(base.acquireJobs(context, configuration, currentProcessEngine)); }