Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions changelog/added/humming-sticky-teapot.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Added experimental sessions: `Worker(session_config=WorkerSessionConfig(...))` lets a worker serve sessions, optionally dedicated to one workflow with `SingleSessionAdmission(stable_identity=...)`, and activities started inside `workflow.activity_session(ActivitySessionOptions(placement=UseWorkflowSession()))` run on the workflow's worker.
Session workflows replay only on session workers: pass the same `session_config` to `Replayer`.
3 changes: 3 additions & 0 deletions changelog/added/unmanipulative-ettie.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Core: Experimental session workers can poll workflow-affine activity queues; individual activities opt into their workflow's session, while normal activity routing remains the default. This increment supports fixed-size activity slots with capacity of at least two; resource-based and custom activity suppliers are not supported yet.
Core: Experimental worker session options support a single-session policy with a stable destination, dedicating that destination to the first matched workflow for its lifetime with a supporting server. Sticky-only mode may use one fixed activity slot.
Core: A workflow task that schedules a session activity fails on a worker without session support, including during replay.
1 change: 1 addition & 0 deletions changelog/added/unpimpled-flora.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Core: The OTLP metrics exporter can export histograms as OpenTelemetry exponential histograms, which Prometheus-compatible backends store as native histograms, when an SDK enables the option, including through the C bridge. It applies to every histogram, including custom ones, and names each series with a suffix, `_native` by default, so it never shares a name with the fixed-bucket series it replaces. It cannot be combined with histogram bucket overrides. Explicit buckets remain the default.
1 change: 1 addition & 0 deletions changelog/fixed/unmanipulative-ettie.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Core: Session workers drain both activity poll sources during graceful shutdown, avoiding abandoned deliveries when one source finishes before the other.
1 change: 1 addition & 0 deletions changelog/fixed/unpimpled-flora.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Core: Workers now replay workflows paused before a scheduled task starts, allowing those workflows to make progress after unpause.
1 change: 1 addition & 0 deletions changelog/security/unpimpled-flora.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Core: Ephemeral server downloads now use `zip` 9.0 for ZIP extraction, replacing the 8.x dependency [yanked upstream for security issues](https://github.com/zip-rs/zip2/issues/1075#issuecomment-6209381974).
20 changes: 10 additions & 10 deletions temporalio/api/activity/v1/message_pb2.py

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

44 changes: 44 additions & 0 deletions temporalio/api/activity/v1/message_pb2.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,9 @@ class ActivityExecutionInfo(google.protobuf.message.Message):
EXECUTION_TIME_FIELD_NUMBER: builtins.int
PROPAGATED_NEXUS_SERIALIZATION_CONTEXT_FIELD_NUMBER: builtins.int
EAGER_EXECUTION_ACCEPTED_FIELD_NUMBER: builtins.int
STARTED_BY_PRINCIPAL_FIELD_NUMBER: builtins.int
CLOSED_BY_PRINCIPAL_FIELD_NUMBER: builtins.int
LAST_WORKER_PRINCIPAL_FIELD_NUMBER: builtins.int
activity_id: builtins.str
"""Unique identifier of this activity within its namespace along with run ID (below)."""
run_id: builtins.str
Expand Down Expand Up @@ -390,6 +393,29 @@ class ActivityExecutionInfo(google.protobuf.message.Message):
"""Indicates whether eager execution was requested for this activity and accepted by the server
for its first task.
"""
@property
def started_by_principal(
self,
) -> temporalio.api.common.v1.message_pb2.ResolvedPrincipal:
"""Authenticated principal by which this activity execution was started.

(-- api-linter: core::0140::prepositions=disabled
aip.dev/not-precedent: "by" identifies the authenticated actor. --)
"""
@property
def closed_by_principal(
self,
) -> temporalio.api.common.v1.message_pb2.ResolvedPrincipal:
"""Authenticated principal by which this activity execution was closed.

(-- api-linter: core::0140::prepositions=disabled
aip.dev/not-precedent: "by" identifies the authenticated actor. --)
"""
@property
def last_worker_principal(
self,
) -> temporalio.api.common.v1.message_pb2.ResolvedPrincipal:
"""Authenticated principal of the worker that most recently interacted with this activity execution."""
def __init__(
self,
*,
Expand Down Expand Up @@ -440,6 +466,12 @@ class ActivityExecutionInfo(google.protobuf.message.Message):
propagated_nexus_serialization_context: temporalio.api.nexus.v1.message_pb2.PropagatedSerializationContext
| None = ...,
eager_execution_accepted: builtins.bool = ...,
started_by_principal: temporalio.api.common.v1.message_pb2.ResolvedPrincipal
| None = ...,
closed_by_principal: temporalio.api.common.v1.message_pb2.ResolvedPrincipal
| None = ...,
last_worker_principal: temporalio.api.common.v1.message_pb2.ResolvedPrincipal
| None = ...,
) -> None: ...
def HasField(
self,
Expand All @@ -448,6 +480,8 @@ class ActivityExecutionInfo(google.protobuf.message.Message):
b"activity_type",
"close_time",
b"close_time",
"closed_by_principal",
b"closed_by_principal",
"current_retry_interval",
b"current_retry_interval",
"execution_duration",
Expand All @@ -472,6 +506,8 @@ class ActivityExecutionInfo(google.protobuf.message.Message):
b"last_heartbeat_time",
"last_started_time",
b"last_started_time",
"last_worker_principal",
b"last_worker_principal",
"next_attempt_schedule_time",
b"next_attempt_schedule_time",
"priority",
Expand All @@ -492,6 +528,8 @@ class ActivityExecutionInfo(google.protobuf.message.Message):
b"start_delay",
"start_to_close_timeout",
b"start_to_close_timeout",
"started_by_principal",
b"started_by_principal",
"user_metadata",
b"user_metadata",
],
Expand All @@ -509,6 +547,8 @@ class ActivityExecutionInfo(google.protobuf.message.Message):
b"canceled_reason",
"close_time",
b"close_time",
"closed_by_principal",
b"closed_by_principal",
"current_retry_interval",
b"current_retry_interval",
"eager_execution_accepted",
Expand Down Expand Up @@ -537,6 +577,8 @@ class ActivityExecutionInfo(google.protobuf.message.Message):
b"last_started_time",
"last_worker_identity",
b"last_worker_identity",
"last_worker_principal",
b"last_worker_principal",
"links",
b"links",
"next_attempt_schedule_time",
Expand Down Expand Up @@ -567,6 +609,8 @@ class ActivityExecutionInfo(google.protobuf.message.Message):
b"start_delay",
"start_to_close_timeout",
b"start_to_close_timeout",
"started_by_principal",
b"started_by_principal",
"state_size_bytes",
b"state_size_bytes",
"state_transition_count",
Expand Down
Loading