Package io.temporal.worker.tuning
Class ResourceBasedSlotSupplier<SI extends SlotInfo>
- java.lang.Object
-
- io.temporal.worker.tuning.ResourceBasedSlotSupplier<SI>
-
- All Implemented Interfaces:
SlotSupplier<SI>
public class ResourceBasedSlotSupplier<SI extends SlotInfo> extends java.lang.Object implements SlotSupplier<SI>
Implements aSlotSupplier
based on resource usage for a particular slot type.
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static ResourceBasedSlotSupplier<ActivitySlotInfo>
createForActivity(ResourceBasedController resourceBasedController, ResourceBasedSlotOptions options)
Construct a slot supplier for activity tasks with the given resource controller and options.static ResourceBasedSlotSupplier<LocalActivitySlotInfo>
createForLocalActivity(ResourceBasedController resourceBasedController, ResourceBasedSlotOptions options)
Construct a slot supplier for local activities with the given resource controller and options.static ResourceBasedSlotSupplier<NexusSlotInfo>
createForNexus(ResourceBasedController resourceBasedController, ResourceBasedSlotOptions options)
Construct a slot supplier for nexus tasks with the given resource controller and options.static ResourceBasedSlotSupplier<WorkflowSlotInfo>
createForWorkflow(ResourceBasedController resourceBasedController, ResourceBasedSlotOptions options)
Construct a slot supplier for workflow tasks with the given resource controller and options.ResourceBasedController
getResourceController()
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.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, toString, wait, wait, wait
-
Methods inherited from interface io.temporal.worker.tuning.SlotSupplier
getMaximumSlots
-
-
-
-
Method Detail
-
createForWorkflow
public static ResourceBasedSlotSupplier<WorkflowSlotInfo> createForWorkflow(ResourceBasedController resourceBasedController, ResourceBasedSlotOptions options)
Construct a slot supplier for workflow tasks with the given resource controller and options.The resource controller must be the same among all slot suppliers in a worker. If you want to use resource-based tuning for all slot suppliers, prefer
ResourceBasedTuner
.
-
createForActivity
public static ResourceBasedSlotSupplier<ActivitySlotInfo> createForActivity(ResourceBasedController resourceBasedController, ResourceBasedSlotOptions options)
Construct a slot supplier for activity tasks with the given resource controller and options.The resource controller must be the same among all slot suppliers in a worker. If you want to use resource-based tuning for all slot suppliers, prefer
ResourceBasedTuner
.
-
createForLocalActivity
public static ResourceBasedSlotSupplier<LocalActivitySlotInfo> createForLocalActivity(ResourceBasedController resourceBasedController, ResourceBasedSlotOptions options)
Construct a slot supplier for local activities with the given resource controller and options.The resource controller must be the same among all slot suppliers in a worker. If you want to use resource-based tuning for all slot suppliers, prefer
ResourceBasedTuner
.
-
createForNexus
public static ResourceBasedSlotSupplier<NexusSlotInfo> createForNexus(ResourceBasedController resourceBasedController, ResourceBasedSlotOptions options)
Construct a slot supplier for nexus tasks with the given resource controller and options.The resource controller must be the same among all slot suppliers in a worker. If you want to use resource-based tuning for all slot suppliers, prefer
ResourceBasedTuner
.
-
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 interfaceSlotSupplier<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 interfaceSlotSupplier<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 interfaceSlotSupplier<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 interfaceSlotSupplier<SI extends SlotInfo>
- Parameters:
ctx
- The context for releasing a slot.
-
getResourceController
public ResourceBasedController getResourceController()
-
-