Class Priority
- Namespace
- Temporalio.Api.Common.V1
- Assembly
- Temporalio.dll
Priority contains metadata that controls relative ordering of task processing when tasks are backed up in a queue. Initially, Priority will be used in matching (workflow and activity) task queues. Later it may be used in history task queues and in rate limiting decisions.
Priority is attached to workflows and activities. By default, activities inherit Priority from the workflow that created them, but may override fields when an activity is started or modified.
Despite being named "Priority", this message also contains fields that control "fairness" mechanisms.
For all fields, the field not present or equal to zero/empty string means to inherit the value from the calling workflow, or if there is no calling workflow, then use the default value.
For all fields other than fairness_key, the zero value isn't meaningful so there's no confusion between inherit/default and a meaningful value. For fairness_key, the empty string will be interpreted as "inherit". This means that if a workflow has a non-empty fairness key, you can't override the fairness key of its activity to the empty string.
The overall semantics of Priority are:
- First, consider "priority": higher priority (lower number) goes first.
- Then, consider fairness: try to dispatch tasks for different fairness keys in proportion to their weight.
Applications may use any subset of mechanisms that are useful to them and leave the other fields to use default values.
Not all queues in the system may support the "full" semantics of all priority fields. (Currently only support in matching task queues is planned.)
public sealed class Priority : IMessage<Priority>, IEquatable<Priority>, IDeepCloneable<Priority>, IBufferMessage, IMessage
- Inheritance
-
Priority
- Inherited Members
Constructors
Priority()
public Priority()
Priority(Priority)
public Priority(Priority other)
Parameters
other
Priority
Fields
FairnessKeyFieldNumber
Field number for the "fairness_key" field.
public const int FairnessKeyFieldNumber = 2
Field Value
FairnessWeightFieldNumber
Field number for the "fairness_weight" field.
public const int FairnessWeightFieldNumber = 3
Field Value
PriorityKeyFieldNumber
Field number for the "priority_key" field.
public const int PriorityKeyFieldNumber = 1
Field Value
Properties
Descriptor
public static MessageDescriptor Descriptor { get; }
Property Value
- MessageDescriptor
FairnessKey
Fairness key is a short string that's used as a key for a fairness balancing mechanism. It may correspond to a tenant id, or to a fixed string like "high" or "low". The default is the empty string.
The fairness mechanism attempts to dispatch tasks for a given key in proportion to its weight. For example, using a thousand distinct tenant ids, each with a weight of 1.0 (the default) will result in each tenant getting a roughly equal share of task dispatch throughput.
(Note: this does not imply equal share of worker capacity! Fairness decisions are made based on queue statistics, not current worker load.)
As another example, using keys "high" and "low" with weight 9.0 and 1.0 respectively will prefer dispatching "high" tasks over "low" tasks at a 9:1 ratio, while allowing either key to use all worker capacity if the other is not present.
All fairness mechanisms, including rate limits, are best-effort and probabilistic. The results may not match what a "perfect" algorithm with infinite resources would produce. The more unique keys are used, the less accurate the results will be.
Fairness keys are limited to 64 bytes.
public string FairnessKey { get; set; }
Property Value
FairnessWeight
Fairness weight for a task can come from multiple sources for flexibility. From highest to lowest precedence:
- Weights for a small set of keys can be overridden in task queue configuration with an API.
- It can be attached to the workflow/activity in this field.
- The default weight of 1.0 will be used.
Weight values are clamped to the range [0.001, 1000].
public float FairnessWeight { get; set; }
Property Value
Parser
public static MessageParser<Priority> Parser { get; }
Property Value
- MessageParser<Priority>
PriorityKey
Priority key is a positive integer from 1 to n, where smaller integers correspond to higher priorities (tasks run sooner). In general, tasks in a queue should be processed in close to priority order, although small deviations are possible.
The maximum priority value (minimum priority) is determined by server configuration, and defaults to 5.
If priority is not present (or zero), then the effective priority will be the default priority, which is is calculated by (min+max)/2. With the default max of 5, and min of 1, that comes out to 3.
public int PriorityKey { get; set; }
Property Value
Methods
CalculateSize()
Calculates the size of this message in Protocol Buffer wire format, in bytes.
public int CalculateSize()
Returns
- int
The number of bytes required to write this message to a coded output stream.
Clone()
Creates a deep clone of this object.
public Priority Clone()
Returns
- Priority
A deep clone of this object.
Equals(object)
Determines whether the specified object is equal to the current object.
public override bool Equals(object other)
Parameters
other
object
Returns
Equals(Priority)
Indicates whether the current object is equal to another object of the same type.
public bool Equals(Priority other)
Parameters
other
PriorityAn object to compare with this object.
Returns
GetHashCode()
Serves as the default hash function.
public override int GetHashCode()
Returns
- int
A hash code for the current object.
MergeFrom(CodedInputStream)
Merges the data from the specified coded input stream with the current message.
public void MergeFrom(CodedInputStream input)
Parameters
input
CodedInputStream
Remarks
See the user guide for precise merge semantics.
MergeFrom(Priority)
Merges the given message into this one.
public void MergeFrom(Priority other)
Parameters
other
Priority
Remarks
See the user guide for precise merge semantics.
ToString()
Returns a string that represents the current object.
public override string ToString()
Returns
- string
A string that represents the current object.
WriteTo(CodedOutputStream)
Writes the data to the given coded output stream.
public void WriteTo(CodedOutputStream output)
Parameters
output
CodedOutputStreamCoded output stream to write the data to. Must not be null.