OperationKind vs OperationType: identity versus routing#
The pipeline has two orthogonal axes for talking about an operation, and they are easy to confuse because their names look almost alike. They answer different questions, live in different repositories, and — crucially — do not share value strings.
OperationKind— identity. What kind of work is this?OperationType— routing. Which worker queue should run it?
This page is the canonical reference for the distinction. When in doubt, decide whether you are asking about an operation’s identity or its routing, then use the matching axis and the mapping table below — not the words.
OperationKind — the identity axis#
Home |
|
Role |
Identity of a unit of work; the polymorphic discriminator of the uniform |
Drives |
recovery, the circuit breaker, Redis task-state, and the Failure-event key |
OperationKind is the single source of truth for what an operation is. Its
values are byte-identical to the frozen breadcrumb strings already stored in the
failure history, so identity is the same name everywhere — recovery, the circuit
breaker, the operation-row discriminator, and the failure-event key all reference
the enum member, never a free-text literal.
It has six members. Note the deliberate name/value asymmetry on two of
them (PACKAGING and ARCHIVE): the names follow the stage, the values
follow the frozen breadcrumb strings.
Member |
Value |
Stage |
|---|---|---|
|
|
Package raw files at the source |
|
|
Bundle packages for transfer |
|
|
Move bytes between sites |
|
|
Unpack a transferred package |
|
|
Write to long-term storage |
|
|
Stage a package for processing |
For the model itself, see the ops-db operation model reference and Uniform pipeline operation model.
OperationType — the routing axis#
Home |
|
Role |
Routing: selects the worker queue for a task; drives worker queue discovery |
Drives |
|
OperationType is the routing contract. Queue names are built from its values and
workers self-discover their queues at startup, so this axis answers where the
work runs, not what it is. It is a separate, frozen contract from identity.
It has eight members:
Member |
Value |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Two of these routing types — DELETION and MONITORING — are not
OperationKinds. They name work that has no operation-identity row:
deletionis not a unit of work with aStatus. Deletion is aPhysicalCopyStatusstate machine on the artifact (PRESENT → DELETION_* → DELETED), running in the destroy direction. Folding it into theOperationmodel would fabricate an op row for an artifact transition — see Uniform pipeline operation model (decision 6).monitoringis routing-only: it names the per-location monitoring queue, not a pipeline operation that produces or consumes aPhysicalCopy.
The mapping table#
The two axes are orthogonal: a given stage’s identity value and its routing value are different strings, even when they describe the same step. This is the table to rely on.
Stage |
Identity — |
Routing — |
|---|---|---|
Packaging |
|
|
Bundling |
|
|
Transfer |
|
|
Unpack |
|
|
Archive |
|
|
Staging |
|
|
Deletion |
(no kind — artifact state machine) |
|
Monitoring |
(no kind — routing only) |
|
Read across any row and the two value columns differ (the lone exception is
staging, where both happen to read staging). The bottom two rows have a routing
value but no identity — they are not operations.
One honest caveat#
The two axis names (OperationKind / OperationType) and several of their values
are near-synonyms, so rely on the identity-versus-routing distinction and the
mapping table above, not on the words.
See also
Core Concepts — Sites, DataLocations, Operations, Managers, Queues, Routes Routing & Queue Discovery — how work is routed to location-specific queues Uniform pipeline operation model — the uniform operation model and the identity/routing split (decision 6 on deletion)