Class: Temporalio::Worker::Tuner

Inherits:
Object
  • Object
show all
Defined in:
lib/temporalio/worker/tuner.rb

Overview

Worker tuner that allows for dynamic customization of some aspects of worker configuration.

Defined Under Namespace

Classes: SlotSupplier

Constant Summary collapse

ResourceBasedTunerOptions =
Data.define(
  :target_memory_usage,
  :target_cpu_usage
)
ResourceBasedSlotOptions =

Options for a specific slot type being used with SlotSupplier::ResourceBased.

Data.define(
  :min_slots,
  :max_slots,
  :ramp_throttle
)

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(workflow_slot_supplier:, activity_slot_supplier:, local_activity_slot_supplier:, custom_slot_supplier_thread_pool: ThreadPool.default) ⇒ Tuner

Create a tuner from 3 slot suppliers.

Parameters:

  • workflow_slot_supplier (SlotSupplier)

    Slot supplier for workflows.

  • activity_slot_supplier (SlotSupplier)

    Slot supplier for activities.

  • local_activity_slot_supplier (SlotSupplier)

    Slot supplier for local activities.

  • custom_slot_supplier_thread_pool (ThreadPool, nil) (defaults to: ThreadPool.default)

    Thread pool to make all custom slot supplier calls on. If there are no custom slot suppliers, this parameter is ignored. Technically users may set this to nil which will not use a thread pool to make slot supplier calls, but that is dangerous and not advised because even the slightest blocking call can slow down the system.



332
333
334
335
336
337
338
339
340
341
342
# File 'lib/temporalio/worker/tuner.rb', line 332

def initialize(
  workflow_slot_supplier:,
  activity_slot_supplier:,
  local_activity_slot_supplier:,
  custom_slot_supplier_thread_pool: ThreadPool.default
)
  @workflow_slot_supplier = workflow_slot_supplier
  @activity_slot_supplier = activity_slot_supplier
  @local_activity_slot_supplier = local_activity_slot_supplier
  @custom_slot_supplier_thread_pool = custom_slot_supplier_thread_pool
end

Instance Attribute Details

#activity_slot_supplierSlotSupplier (readonly)

Returns Slot supplier for activities.

Returns:



315
316
317
# File 'lib/temporalio/worker/tuner.rb', line 315

def activity_slot_supplier
  @activity_slot_supplier
end

#custom_slot_supplier_thread_poolThreadPool? (readonly)

Returns Thread pool for custom slot suppliers.

Returns:

  • (ThreadPool, nil)

    Thread pool for custom slot suppliers.



321
322
323
# File 'lib/temporalio/worker/tuner.rb', line 321

def custom_slot_supplier_thread_pool
  @custom_slot_supplier_thread_pool
end

#local_activity_slot_supplierSlotSupplier (readonly)

Returns Slot supplier for local activities.

Returns:



318
319
320
# File 'lib/temporalio/worker/tuner.rb', line 318

def local_activity_slot_supplier
  @local_activity_slot_supplier
end

#max_slotsInteger?

Returns Maximum amount of slots permitted. Defaults to 500.

Returns:

  • (Integer, nil)

    Maximum amount of slots permitted. Defaults to 500.



254
255
256
257
258
# File 'lib/temporalio/worker/tuner.rb', line 254

ResourceBasedSlotOptions = Data.define(
  :min_slots,
  :max_slots,
  :ramp_throttle
)

#min_slotsInteger?

Returns Amount of slots that will be issued regardless of any other checks. Defaults to 5 for workflows and 1 for activities.

Returns:

  • (Integer, nil)

    Amount of slots that will be issued regardless of any other checks. Defaults to 5 for workflows and 1 for activities.



254
255
256
257
258
# File 'lib/temporalio/worker/tuner.rb', line 254

ResourceBasedSlotOptions = Data.define(
  :min_slots,
  :max_slots,
  :ramp_throttle
)

#ramp_throttleFloat?

Returns Minimum time we will wait (after passing the minimum slots number) between handing out new slots in seconds. Defaults to 0 for workflows and 0.05 for activities.

This value matters because how many resources a task will use cannot be determined ahead of time, and thus the system should wait to see how much resources are used before issuing more slots.

Returns:

  • (Float, nil)

    Minimum time we will wait (after passing the minimum slots number) between handing out new slots in seconds. Defaults to 0 for workflows and 0.05 for activities.

    This value matters because how many resources a task will use cannot be determined ahead of time, and thus the system should wait to see how much resources are used before issuing more slots.



254
255
256
257
258
# File 'lib/temporalio/worker/tuner.rb', line 254

ResourceBasedSlotOptions = Data.define(
  :min_slots,
  :max_slots,
  :ramp_throttle
)

#target_cpu_usageFloat

Returns A value between 0 and 1 that represents the target (system) CPU usage. This can be set to 1.0 if desired, but it’s recommended to leave some headroom for other processes.

Returns:

  • (Float)

    A value between 0 and 1 that represents the target (system) CPU usage. This can be set to 1.0 if desired, but it’s recommended to leave some headroom for other processes.



236
237
238
239
# File 'lib/temporalio/worker/tuner.rb', line 236

ResourceBasedTunerOptions = Data.define(
  :target_memory_usage,
  :target_cpu_usage
)

#target_memory_usageFloat

Returns A value between 0 and 1 that represents the target (system) memory usage. It’s not recommended to set this higher than 0.8, since how much memory a workflow may use is not predictable, and you don’t want to encounter OOM errors.

Returns:

  • (Float)

    A value between 0 and 1 that represents the target (system) memory usage. It’s not recommended to set this higher than 0.8, since how much memory a workflow may use is not predictable, and you don’t want to encounter OOM errors.



236
237
238
239
# File 'lib/temporalio/worker/tuner.rb', line 236

ResourceBasedTunerOptions = Data.define(
  :target_memory_usage,
  :target_cpu_usage
)

#workflow_slot_supplierSlotSupplier (readonly)

Returns Slot supplier for workflows.

Returns:



312
313
314
# File 'lib/temporalio/worker/tuner.rb', line 312

def workflow_slot_supplier
  @workflow_slot_supplier
end

Class Method Details

.create_fixed(workflow_slots: 100, activity_slots: 100, local_activity_slots: 100) ⇒ Tuner

Create a fixed-size tuner with the provided number of slots.

Parameters:

  • workflow_slots (Integer) (defaults to: 100)

    Maximum number of workflow task slots.

  • activity_slots (Integer) (defaults to: 100)

    Maximum number of activity slots.

  • local_activity_slots (Integer) (defaults to: 100)

    Maximum number of local activity slots.

Returns:

  • (Tuner)

    Created tuner.



266
267
268
269
270
271
272
273
274
275
276
# File 'lib/temporalio/worker/tuner.rb', line 266

def self.create_fixed(
  workflow_slots: 100,
  activity_slots: 100,
  local_activity_slots: 100
)
  new(
    workflow_slot_supplier: SlotSupplier::Fixed.new(workflow_slots),
    activity_slot_supplier: SlotSupplier::Fixed.new(activity_slots),
    local_activity_slot_supplier: SlotSupplier::Fixed.new(local_activity_slots)
  )
end

.create_resource_based(target_memory_usage:, target_cpu_usage:, workflow_options: ResourceBasedSlotOptions.new(min_slots: 5, max_slots: 500, ramp_throttle: 0.0), activity_options: ResourceBasedSlotOptions.new(min_slots: 1, max_slots: 500, ramp_throttle: 0.05), local_activity_options: ResourceBasedSlotOptions.new(min_slots: 1, max_slots: 500, ramp_throttle: 0.05)) ⇒ Tuner

Create a resource-based tuner with the provided options.

Parameters:

  • target_memory_usage (Float)

    A value between 0 and 1 that represents the target (system) memory usage. It’s not recommended to set this higher than 0.8, since how much memory a workflow may use is not predictable, and you don’t want to encounter OOM errors.

  • target_cpu_usage (Float)

    A value between 0 and 1 that represents the target (system) CPU usage. This can be set to 1.0 if desired, but it’s recommended to leave some headroom for other processes.

  • workflow_options (ResourceBasedSlotOptions) (defaults to: ResourceBasedSlotOptions.new(min_slots: 5, max_slots: 500, ramp_throttle: 0.0))

    Resource-based options for workflow slot supplier.

  • activity_options (ResourceBasedSlotOptions) (defaults to: ResourceBasedSlotOptions.new(min_slots: 1, max_slots: 500, ramp_throttle: 0.05))

    Resource-based options for activity slot supplier.

  • local_activity_options (ResourceBasedSlotOptions) (defaults to: ResourceBasedSlotOptions.new(min_slots: 1, max_slots: 500, ramp_throttle: 0.05))

    Resource-based options for local activity slot supplier.

Returns:

  • (Tuner)

    Created tuner.



290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
# File 'lib/temporalio/worker/tuner.rb', line 290

def self.create_resource_based(
  target_memory_usage:,
  target_cpu_usage:,
  workflow_options: ResourceBasedSlotOptions.new(min_slots: 5, max_slots: 500, ramp_throttle: 0.0),
  activity_options: ResourceBasedSlotOptions.new(min_slots: 1, max_slots: 500, ramp_throttle: 0.05),
  local_activity_options: ResourceBasedSlotOptions.new(min_slots: 1, max_slots: 500, ramp_throttle: 0.05)
)
  tuner_options = ResourceBasedTunerOptions.new(target_memory_usage:, target_cpu_usage:)
  new(
    workflow_slot_supplier: SlotSupplier::ResourceBased.new(
      tuner_options:, slot_options: workflow_options
    ),
    activity_slot_supplier: SlotSupplier::ResourceBased.new(
      tuner_options:, slot_options: activity_options
    ),
    local_activity_slot_supplier: SlotSupplier::ResourceBased.new(
      tuner_options:, slot_options: local_activity_options
    )
  )
end