Esempio n. 1
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);
        }
Esempio n. 2
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);
            }
        }
Esempio n. 3
0
 public virtual void submitAcquiredJobs(string engineName, AcquiredJobs acquiredJobs)
 {
     acquiredJobsByEngine[engineName] = acquiredJobs;
 }
Esempio n. 4
0
        protected internal virtual void executeJobs(JobAcquisitionContext context, ProcessEngineImpl currentProcessEngine, AcquiredJobs acquiredJobs)
        {
            // submit those jobs that were acquired in previous cycles but could not be scheduled for execution
            IList <IList <string> > additionalJobs = context.AdditionalJobsByEngine[currentProcessEngine.Name];

            if (additionalJobs != null)
            {
                foreach (IList <string> jobBatch in additionalJobs)
                {
                    LOG.executeJobs(currentProcessEngine.Name, jobBatch);

                    jobExecutor.executeJobs(jobBatch, currentProcessEngine);
                }
            }

            // submit those jobs that were acquired in the current cycle
            foreach (IList <string> jobIds in acquiredJobs.JobIdBatches)
            {
                LOG.executeJobs(currentProcessEngine.Name, jobIds);

                jobExecutor.executeJobs(jobIds, currentProcessEngine);
            }
        }
Esempio n. 5
0
 public virtual void acquiredJobs(string processEngine, AcquiredJobs acquiredJobs)
 {
     logDebug("022", "Acquired {} jobs for process engine '{}': {}", acquiredJobs.size(), processEngine, acquiredJobs.JobIdBatches);
 }