Class FixedSizeSlotSupplier<SI extends SlotInfo>

  • Type Parameters:
    SI - The slot info type for this supplier.
    All Implemented Interfaces:
    SlotSupplier<SI>

    public class FixedSizeSlotSupplier<SI extends SlotInfo>
    extends java.lang.Object
    implements SlotSupplier<SI>
    This implementation of SlotSupplier provides a fixed number of slots backed by a semaphore, and is the default behavior when a custom supplier is not explicitly specified.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      java.util.Optional<java.lang.Integer> getMaximumSlots()
      Because we currently use thread pools to execute tasks, there must be *some* defined upper-limit on the size of the thread pool for each kind of task.
      void markSlotUsed​(SlotMarkUsedContext<SI> ctx)
      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.
      void releaseSlot​(SlotReleaseContext<SI> ctx)
      This function is called once a permit is no longer needed.
      SlotPermit reserveSlot​(SlotReserveContext<SI> ctx)
      This function is called before polling for new tasks.
      java.lang.String toString()  
      java.util.Optional<SlotPermit> tryReserveSlot​(SlotReserveContext<SI> ctx)
      This function is called when trying to reserve slots for "eager" workflow and activity tasks.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • FixedSizeSlotSupplier

        public FixedSizeSlotSupplier​(int numSlots)
    • 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.
      • getMaximumSlots

        public java.util.Optional<java.lang.Integer> getMaximumSlots()
        Description copied from interface: SlotSupplier
        Because we currently use thread pools to execute tasks, there must be *some* defined upper-limit on the size of the thread pool for each kind of task. You must not hand out more permits than this number. If unspecified, the default is Integer.MAX_VALUE. Be aware that if your implementation hands out unreasonable numbers of permits, you could easily oversubscribe the worker, and cause it to run out of resources.

        If a non-empty value is returned, it is assumed to be meaningful, and the worker will emit MetricsType.WORKER_TASK_SLOTS_AVAILABLE metrics based on this value.

        This value should never change during the lifetime of the supplier.

        Specified by:
        getMaximumSlots in interface SlotSupplier<SI extends SlotInfo>
        Returns:
        the maximum number of slots that can ever be in use at one type for this slot type.
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object