Class FetchExternalTasksCmd

    • Field Detail

      • workerId

        protected java.lang.String workerId
      • maxResults

        protected int maxResults
      • usePriority

        protected boolean usePriority
      • fetchInstructions

        protected java.util.Map<java.lang.String,​TopicFetchInstruction> fetchInstructions
    • Constructor Detail

      • FetchExternalTasksCmd

        public FetchExternalTasksCmd​(java.lang.String workerId,
                                     int maxResults,
                                     java.util.Map<java.lang.String,​TopicFetchInstruction> instructions)
      • FetchExternalTasksCmd

        public FetchExternalTasksCmd​(java.lang.String workerId,
                                     int maxResults,
                                     java.util.Map<java.lang.String,​TopicFetchInstruction> instructions,
                                     boolean usePriority)
    • Method Detail

      • 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 FetchExternalTasks command only executes internal code, so we are certain that a retry of a failed external task locking will not impact user data, and may be performed multiple times.
        Specified by:
        isRetryable in interface Command<java.util.List<LockedExternalTask>>
        Returns:
        true if the CrdbTransactionRetryInterceptor can make a transparent retry of this command upon failure with a CrdbTransactionRetryException (only used when running on CockroachDB).
      • filterOnOptimisticLockingFailure

        protected void filterOnOptimisticLockingFailure​(CommandContext commandContext,
                                                        java.util.List<LockedExternalTask> tasks)
      • validateInput

        protected void validateInput()