Class AcquireJobsCmd

All Implemented Interfaces:
OptimisticLockingListener, Command<AcquiredJobs>

public class AcquireJobsCmd extends Object implements Command<AcquiredJobs>, OptimisticLockingListener
Nick Burch, Daniel Meyer
  • Field Details

    • acquiredJobs

      protected AcquiredJobs acquiredJobs
    • numJobsToAcquire

      protected int numJobsToAcquire
  • Constructor Details

    • AcquireJobsCmd

      public AcquireJobsCmd(JobExecutor jobExecutor)
    • AcquireJobsCmd

      public AcquireJobsCmd(JobExecutor jobExecutor, int numJobsToAcquire)
  • Method Details

    • execute

      public AcquiredJobs execute(CommandContext commandContext)
      Specified by:
      execute in interface Command<AcquiredJobs>
    • isRetryable

      public boolean isRetryable()
      When CockroachDB is used, this command may be retried multiple times until it is successful, or the retries are exhausted. CockroachDB uses a stricter, SERIALIZABLE transaction isolation which ensures a serialized manner of transaction execution. A concurrent transaction that attempts to modify the same data as another transaction is required to abort, rollback and retry. This also makes our use-case of pessimistic locks redundant since we only use them as synchronization barriers, and not to lock actual data which would protect it from concurrent modifications. The AcquireJobs command only executes internal code, so we are certain that a retry of failed job locks will not impact user data, and may be performed multiple times.
      Specified by:
      isRetryable in interface Command<AcquiredJobs>
      true if the CrdbTransactionRetryInterceptor can make a transparent retry of this command upon failure with a CrdbTransactionRetryException (only used when running on CockroachDB).
    • lockJob

      protected void lockJob(AcquirableJobEntity job)
    • getEntityType

      public Class<? extends DbEntity> getEntityType()
      Description copied from interface: OptimisticLockingListener
      The type of the entity for which this listener should be notified. If the implementation returns 'null', the listener is notified for all entity types.
      Specified by:
      getEntityType in interface OptimisticLockingListener
      the entity type for which the listener should be notified.
    • failedOperation

      public OptimisticLockingResult failedOperation(DbOperation operation)
      Description copied from interface: OptimisticLockingListener
      Signifies that an operation failed due to optimistic locking.
      Specified by:
      failedOperation in interface OptimisticLockingListener
      operation - the failed operation.
      OptimisticLockingResult that instructs the caller how to handle the result of the failed operation.
    • isAcquireExclusiveOverProcessHierarchies

      protected boolean isAcquireExclusiveOverProcessHierarchies(CommandContext context)
    • selectProcessInstanceId

      protected String selectProcessInstanceId(AcquirableJobEntity job, boolean isAcquireExclusiveOverProcessHierarchies)