From 56fd793045139ed192b73d9c7e7261650fbcab24 Mon Sep 17 00:00:00 2001 From: Paul W Oh Date: Tue, 23 Sep 2025 19:53:56 -0400 Subject: [PATCH 1/6] Adding Capacity Structs for Cloud Namespace --- temporal/api/cloud/namespace/v1/message.proto | 118 +++++++++++++++--- 1 file changed, 102 insertions(+), 16 deletions(-) diff --git a/temporal/api/cloud/namespace/v1/message.proto b/temporal/api/cloud/namespace/v1/message.proto index ca5f683..1f69b92 100644 --- a/temporal/api/cloud/namespace/v1/message.proto +++ b/temporal/api/cloud/namespace/v1/message.proto @@ -34,12 +34,13 @@ message MtlsAuthSpec { // This must only be one value, but the CA can have a chain. // // (-- api-linter: core::0140::base64=disabled --) - // Deprecated: Not supported after v0.2.0 api version. Use accepted_client_ca instead. + // Deprecated: Use accepted_client_ca instead. Will be ignored when accepted_client_ca is set. // temporal:versioning:max_version=v0.2.0 string accepted_client_ca_deprecated = 1 [deprecated = true]; // The ca cert(s) in PEM format that the clients can use for authentication and authorization. // This must only be one value, but the CA can have a chain. // temporal:versioning:min_version=v0.2.0 + // temporal:codegen:ignore bytes accepted_client_ca = 4; // Certificate filters which, if specified, only allow connections from client certificates whose distinguished name properties match at least one of the filters. // This allows limiting access to specific end-entity certificates. @@ -57,6 +58,11 @@ message ApiKeyAuthSpec { bool enabled = 1; } +message LifecycleSpec { + // Flag to enable delete protection for the namespace. + bool enable_delete_protection = 1; +} + message CodecServerSpec { // The codec server endpoint. string endpoint = 1; @@ -81,16 +87,78 @@ message CodecServerSpec { } } -message LifecycleSpec { - // Flag to enable delete protection for the namespace. - bool enable_delete_protection = 1; -} - message HighAvailabilitySpec { // Flag to disable managed failover for the namespace. bool disable_managed_failover = 1; } + +// temporal:dev +message CapacitySpec { + oneof spec { + // on-demand capacity (dynamic-envelope) + OnDemand on_demand = 1; + // provisioned capacity + Provisioned provisioned = 2; + } + + message OnDemand { + } + + message Provisioned { + // the unit of the provisioned capacity (Temporal Resource Units) + double value = 1; + } +} + +// temporal:dev +message Capacity { + + // temporal:dev + oneof current_mode { + // the current capacity is on-demand + OnDemand on_demand = 1; + // the current capacity is provisioned + Provisioned provisioned = 2; + } + + // temporal:dev + message OnDemand { + } + + // temporal:dev + message Provisioned { + // the current unit of the provisioned capacity (Temporal Resource Units) + double current_value = 1; + } + + // temporal:dev + message Request { + // the current state of the capacity request (e.g. in-progress, completed, failed) + State state = 1; + // The date and time when the capacity request was created. + google.protobuf.Timestamp start_time = 2; + // The date and time when the capacity request was completed or failed. + google.protobuf.Timestamp end_time = 3; + // The id of the async operation that is creating/updating/deleting the capacity, if any. + string async_operation_id = 4; + // The requested capacity specification. + CapacitySpec spec = 5; + + // temporal:dev + enum State { + STATE_CAPACITY_REQUEST_UNSPECIFIED = 0; + STATE_CAPACITY_REQUEST_COMPLETED = 1; + STATE_CAPACITY_REQUEST_IN_PROGRESS = 2; + STATE_CAPACITY_REQUEST_FAILED = 3; + } + } + + // temporal:dev + // The latest capacity request, if any. + Request latest_request = 3; +} + message NamespaceSpec { // The name to use for the namespace. // This will create a namespace that's available at '..tmprl.cloud:7233'. @@ -121,7 +189,7 @@ message NamespaceSpec { // Supported attribute types: text, keyword, int, double, bool, datetime, keyword_list. // NOTE: currently deleting a search attribute is not supported. // Optional, default is empty. - // Deprecated: Not supported after v0.3.0 api version. Use search_attributes instead. + // Deprecated: Use search_attributes instead. // temporal:versioning:max_version=v0.3.0 map custom_search_attributes = 5 [deprecated = true]; // The custom search attributes to use for the namespace. @@ -134,17 +202,23 @@ message NamespaceSpec { // Codec server spec used by UI to decode payloads for all users interacting with this namespace. // Optional, default is unset. CodecServerSpec codec_server = 6; + // The lifecycle configuration for the namespace. // temporal:versioning:min_version=v0.4.0 LifecycleSpec lifecycle = 9; + // The high availability configuration for the namespace. // temporal:versioning:min_version=v0.4.0 HighAvailabilitySpec high_availability = 10; - // The private connectivity configuration for the namespace. - // This will apply the connectivity rules specified to the namespace. + + // The existing connectivity rule ids for the namespace. // temporal:versioning:min_version=v0.6.0 repeated string connectivity_rule_ids = 11; + // The capacity configuration for the namespace. + // temporal:versioning:min_version=development + // temporal:dev + CapacitySpec capacity_spec = 12; enum SearchAttributeType { SEARCH_ATTRIBUTE_TYPE_UNSPECIFIED = 0; @@ -171,6 +245,12 @@ message Limits { // The number of actions per second (APS) that is currently allowed for the namespace. // The namespace may be throttled if its APS exceeds the limit. int32 actions_per_second_limit = 1; + // The number of requests per second (RPS) that is currently allowed for the namespace. + // temporal:dev + int32 requests_per_second_limit = 2; + // The number of concurrent task pollers allowed for the namespace. + // temporal:dev + int32 concurrent_task_poller_limit = 3; } message AWSPrivateLinkInfo { @@ -198,7 +278,7 @@ message Namespace { // The namespace specification. NamespaceSpec spec = 3; // The current state of the namespace. - // Deprecated: Not supported after v0.3.0 api version. Use state instead. + // Deprecated: Use state instead. // temporal:versioning:max_version=v0.3.0 string state_deprecated = 4 [deprecated = true]; // The current state of the namespace. @@ -224,17 +304,22 @@ message Namespace { // The status of each region where the namespace is available. // The id of the region is the key and the status is the value of the map. map region_status = 12; - // The connectivity rules that are set on this namespace. + // connectivity_rules that set on this namespace repeated temporal.api.cloud.connectivityrule.v1.ConnectivityRule connectivity_rules = 14; + // The tags for the namespace. map tags = 15; + + // The capacity of the namespace. + // temporal:dev + Capacity capacity = 16; } message NamespaceRegionStatus { // The current state of the namespace region. // Possible values: adding, active, passive, removing, failed. // For any failed state, reach out to Temporal Cloud support for remediation. - // Deprecated: Not supported after v0.3.0 api version. Use state instead. + // Deprecated: Use state instead. // temporal:versioning:max_version=v0.3.0 string state_deprecated = 1 [deprecated = true]; // The current state of the namespace region. @@ -255,21 +340,22 @@ message NamespaceRegionStatus { } message ExportSinkSpec { - // The unique name of the export sink, it can't be changed once set. + // The unique name of the export sink. string name = 1; // A flag indicating whether the export sink is enabled or not. bool enabled = 2; - + // The S3 configuration details when destination_type is S3. temporal.api.cloud.sink.v1.S3Spec s3 = 3; - // The GCS configuration details when destination_type is GCS. + // This is a feature under development. We will allow GCS sink support for GCP Namespaces. + // The GCS configuration details when destination_type is GCS. temporal.api.cloud.sink.v1.GCSSpec gcs = 4; } message ExportSink { - // The unique name of the export sink. + // The unique name of the export sink, once set it can't be changed string name = 1; // The version of the export sink resource. From 9bb98892fdb210a6768c8ad39d3bbccb0b97020f Mon Sep 17 00:00:00 2001 From: Paul W Oh Date: Wed, 19 Nov 2025 15:03:48 -0500 Subject: [PATCH 2/6] change --- temporal/api/cloud/namespace/v1/message.proto | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/temporal/api/cloud/namespace/v1/message.proto b/temporal/api/cloud/namespace/v1/message.proto index 1f69b92..f91575f 100644 --- a/temporal/api/cloud/namespace/v1/message.proto +++ b/temporal/api/cloud/namespace/v1/message.proto @@ -93,7 +93,7 @@ message HighAvailabilitySpec { } -// temporal:dev +// temporal:versioning:min_version=v0.10.0 message CapacitySpec { oneof spec { // on-demand capacity (dynamic-envelope) @@ -111,10 +111,10 @@ message CapacitySpec { } } -// temporal:dev +// temporal:versioning:min_version=v0.10.0 message Capacity { - // temporal:dev + // temporal:versioning:min_version=v0.10.0 oneof current_mode { // the current capacity is on-demand OnDemand on_demand = 1; @@ -122,17 +122,17 @@ message Capacity { Provisioned provisioned = 2; } - // temporal:dev + // temporal:versioning:min_version=v0.10.0 message OnDemand { } - // temporal:dev + // temporal:versioning:min_version=v0.10.0 message Provisioned { // the current unit of the provisioned capacity (Temporal Resource Units) double current_value = 1; } - // temporal:dev + // temporal:versioning:min_version=v0.10.0 message Request { // the current state of the capacity request (e.g. in-progress, completed, failed) State state = 1; @@ -145,7 +145,7 @@ message Capacity { // The requested capacity specification. CapacitySpec spec = 5; - // temporal:dev + // temporal:versioning:min_version=v0.10.0 enum State { STATE_CAPACITY_REQUEST_UNSPECIFIED = 0; STATE_CAPACITY_REQUEST_COMPLETED = 1; @@ -154,8 +154,8 @@ message Capacity { } } - // temporal:dev // The latest capacity request, if any. + // temporal:versioning:min_version=v0.10.0 Request latest_request = 3; } @@ -216,8 +216,7 @@ message NamespaceSpec { repeated string connectivity_rule_ids = 11; // The capacity configuration for the namespace. - // temporal:versioning:min_version=development - // temporal:dev + // temporal:versioning:min_version=v0.10.0 CapacitySpec capacity_spec = 12; enum SearchAttributeType { @@ -311,7 +310,7 @@ message Namespace { map tags = 15; // The capacity of the namespace. - // temporal:dev + // temporal:versioning:min_version=v0.10.0 Capacity capacity = 16; } From 28c5ae2bce2948db0677b8adb514563fc04dcb4b Mon Sep 17 00:00:00 2001 From: Paul W Oh Date: Wed, 19 Nov 2025 15:20:37 -0500 Subject: [PATCH 3/6] fix --- temporal/api/cloud/namespace/v1/message.proto | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/temporal/api/cloud/namespace/v1/message.proto b/temporal/api/cloud/namespace/v1/message.proto index f91575f..3695045 100644 --- a/temporal/api/cloud/namespace/v1/message.proto +++ b/temporal/api/cloud/namespace/v1/message.proto @@ -34,13 +34,12 @@ message MtlsAuthSpec { // This must only be one value, but the CA can have a chain. // // (-- api-linter: core::0140::base64=disabled --) - // Deprecated: Use accepted_client_ca instead. Will be ignored when accepted_client_ca is set. + // Deprecated: Not supported after v0.2.0 api version. Use accepted_client_ca instead. // temporal:versioning:max_version=v0.2.0 string accepted_client_ca_deprecated = 1 [deprecated = true]; // The ca cert(s) in PEM format that the clients can use for authentication and authorization. // This must only be one value, but the CA can have a chain. // temporal:versioning:min_version=v0.2.0 - // temporal:codegen:ignore bytes accepted_client_ca = 4; // Certificate filters which, if specified, only allow connections from client certificates whose distinguished name properties match at least one of the filters. // This allows limiting access to specific end-entity certificates. @@ -189,7 +188,7 @@ message NamespaceSpec { // Supported attribute types: text, keyword, int, double, bool, datetime, keyword_list. // NOTE: currently deleting a search attribute is not supported. // Optional, default is empty. - // Deprecated: Use search_attributes instead. + // Deprecated: Not supported after v0.3.0 api version. Use search_attributes instead. // temporal:versioning:max_version=v0.3.0 map custom_search_attributes = 5 [deprecated = true]; // The custom search attributes to use for the namespace. @@ -211,7 +210,8 @@ message NamespaceSpec { // temporal:versioning:min_version=v0.4.0 HighAvailabilitySpec high_availability = 10; - // The existing connectivity rule ids for the namespace. + // The private connectivity configuration for the namespace. + // This will apply the connectivity rules specified to the namespace. // temporal:versioning:min_version=v0.6.0 repeated string connectivity_rule_ids = 11; @@ -277,7 +277,7 @@ message Namespace { // The namespace specification. NamespaceSpec spec = 3; // The current state of the namespace. - // Deprecated: Use state instead. + // Deprecated: Not supported after v0.3.0 api version. Use state instead. // temporal:versioning:max_version=v0.3.0 string state_deprecated = 4 [deprecated = true]; // The current state of the namespace. @@ -303,7 +303,7 @@ message Namespace { // The status of each region where the namespace is available. // The id of the region is the key and the status is the value of the map. map region_status = 12; - // connectivity_rules that set on this namespace + // The connectivity rules that are set on this namespace. repeated temporal.api.cloud.connectivityrule.v1.ConnectivityRule connectivity_rules = 14; // The tags for the namespace. @@ -318,7 +318,7 @@ message NamespaceRegionStatus { // The current state of the namespace region. // Possible values: adding, active, passive, removing, failed. // For any failed state, reach out to Temporal Cloud support for remediation. - // Deprecated: Use state instead. + // Deprecated: Not supported after v0.3.0 api version. Use state instead. // temporal:versioning:max_version=v0.3.0 string state_deprecated = 1 [deprecated = true]; // The current state of the namespace region. @@ -339,7 +339,7 @@ message NamespaceRegionStatus { } message ExportSinkSpec { - // The unique name of the export sink. + // The unique name of the export sink, once set it can't be changed, it can't be changed once set. string name = 1; // A flag indicating whether the export sink is enabled or not. From 842bd1186d7d72d32efe4ac93aa39fb1e7527573 Mon Sep 17 00:00:00 2001 From: Paul W Oh Date: Wed, 19 Nov 2025 15:21:25 -0500 Subject: [PATCH 4/6] fix --- temporal/api/cloud/namespace/v1/message.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/temporal/api/cloud/namespace/v1/message.proto b/temporal/api/cloud/namespace/v1/message.proto index 3695045..75754ad 100644 --- a/temporal/api/cloud/namespace/v1/message.proto +++ b/temporal/api/cloud/namespace/v1/message.proto @@ -339,7 +339,7 @@ message NamespaceRegionStatus { } message ExportSinkSpec { - // The unique name of the export sink, once set it can't be changed, it can't be changed once set. + // The unique name of the export sink, it can't be changed once set. string name = 1; // A flag indicating whether the export sink is enabled or not. From 586afa366def777d96e6b96c2c84520c7fe2bf47 Mon Sep 17 00:00:00 2001 From: Paul W Oh Date: Wed, 19 Nov 2025 15:22:01 -0500 Subject: [PATCH 5/6] fix --- temporal/api/cloud/namespace/v1/message.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/temporal/api/cloud/namespace/v1/message.proto b/temporal/api/cloud/namespace/v1/message.proto index 75754ad..c45ea1e 100644 --- a/temporal/api/cloud/namespace/v1/message.proto +++ b/temporal/api/cloud/namespace/v1/message.proto @@ -277,7 +277,7 @@ message Namespace { // The namespace specification. NamespaceSpec spec = 3; // The current state of the namespace. - // Deprecated: Not supported after v0.3.0 api version. Use state instead. + // Deprecated: Not supported after v0.3.0 api version. Use state instead. // temporal:versioning:max_version=v0.3.0 string state_deprecated = 4 [deprecated = true]; // The current state of the namespace. From f448a4b8580506a0f7f0e4c756f9e660991b6683 Mon Sep 17 00:00:00 2001 From: Paul W Oh Date: Wed, 19 Nov 2025 15:44:09 -0500 Subject: [PATCH 6/6] bump version --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index f979ade..bf057db 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v0.9.0 +v0.10.0