Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
 /// <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);
 }
Beispiel #4
0
//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);
        }
Beispiel #5
0
        protected internal override void configureNextAcquisitionCycle(JobAcquisitionContext acquisitionContext, JobAcquisitionStrategy acquisitionStrategy)
        {
            base.configureNextAcquisitionCycle(acquisitionContext, acquisitionStrategy);

            long timeBetweenCurrentAndNextAcquisition = acquisitionStrategy.WaitTime;

            waitEvents.Add(new RecordedWaitEvent(DateTimeHelper.CurrentUnixTimeMillis(), timeBetweenCurrentAndNextAcquisition));
        }
Beispiel #6
0
 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));
 }