Class ResourceBasedSlotSupplier<SI extends SlotInfo>

  • All Implemented Interfaces:
    SlotSupplier<SI>

    public class ResourceBasedSlotSupplier<SI extends SlotInfo>
    extends java.lang.Object
    implements SlotSupplier<SI>
    Implements a SlotSupplier based on resource usage for a particular slot type.
    • Method Detail

      • reserveSlot

        public SlotPermit reserveSlot​(SlotReserveContext<SI> ctx)
                               throws java.lang.InterruptedException
        Description copied from interface: SlotSupplier
        This function is called before polling for new tasks. Your implementation should block until a slot is available then return a permit to use that slot.
        Specified by:
        reserveSlot in interface SlotSupplier<SI extends SlotInfo>
        Parameters:
        ctx - The context for slot reservation.
        Returns:
        A permit to use the slot which may be populated with your own data.
        Throws:
        java.lang.InterruptedException - The worker may choose to interrupt the thread in order to cancel the reservation, or during shutdown. You may perform cleanup, and then should rethrow the exception.
      • tryReserveSlot

        public java.util.Optional<SlotPermit> tryReserveSlot​(SlotReserveContext<SI> ctx)
        Description copied from interface: SlotSupplier
        This function is called when trying to reserve slots for "eager" workflow and activity tasks. Eager tasks are those which are returned as a result of completing a workflow task, rather than from polling. Your implementation must not block, and If a slot is available, return a permit to use that slot.
        Specified by:
        tryReserveSlot in interface SlotSupplier<SI extends SlotInfo>
        Parameters:
        ctx - The context for slot reservation.
        Returns:
        Maybe a permit to use the slot which may be populated with your own data.
      • markSlotUsed

        public void markSlotUsed​(SlotMarkUsedContext<SI> ctx)
        Description copied from interface: SlotSupplier
        This function is called once a slot is actually being used to process some task, which may be some time after the slot was reserved originally. For example, if there is no work for a worker, a number of slots equal to the number of active pollers may already be reserved, but none of them are being used yet. This call should be non-blocking.
        Specified by:
        markSlotUsed in interface SlotSupplier<SI extends SlotInfo>
        Parameters:
        ctx - The context for marking a slot as used.
      • releaseSlot

        public void releaseSlot​(SlotReleaseContext<SI> ctx)
        Description copied from interface: SlotSupplier
        This function is called once a permit is no longer needed. This could be because the task has finished, whether successfully or not, or because the slot was no longer needed (ex: the number of active pollers decreased). This call should be non-blocking.
        Specified by:
        releaseSlot in interface SlotSupplier<SI extends SlotInfo>
        Parameters:
        ctx - The context for releasing a slot.