From d806a958e6dd7a221ea5af817384e7fd13d347da Mon Sep 17 00:00:00 2001 From: Quanzheng Long Date: Tue, 15 Sep 2026 15:51:34 -0700 Subject: [PATCH 1/8] Compact and scope Blob references --- cli/internal/command/command_integ_test.go | 10 +- cli/internal/command/flow.go | 6 +- .../command/flow_client_operations.go | 4 +- cli/internal/command/flow_operations.go | 8 +- cli/internal/command/values.go | 12 +- docs/content/production/server-operations.mdx | 61 + docs/design/deterministic-blob-identity.md | 31 +- docs/design/plan/go-sdk-rewrite.md | 4 +- .../current/production/server-operations.mdx | 52 + protos/dex.proto | 13 +- sdk-go/README.md | 7 +- sdk-go/dex/client.go | 23 +- sdk-go/dex/client_integration_test.go | 5 +- sdk-go/dex/hydration.go | 65 +- sdk-go/dex/hydration_test.go | 18 +- sdk-go/dex/value.go | 4 +- sdk-go/dex/value_test.go | 3 + sdk-go/dex/worker_integration_test.go | 24 +- sdk-go/dex/worker_service.go | 12 +- sdk-go/gen/dexpb/dex.pb.go | 1922 +++++++++-------- sdk-java/README.md | 4 + .../main/java/io/superdurable/dex/Client.java | 8 +- .../io/superdurable/dex/ValueHydrator.java | 58 +- .../java/io/superdurable/dex/ValueMapper.java | 4 +- .../java/io/superdurable/gen/DexProto.java | 1795 +++++++-------- .../io/superdurable/gen/EncodedObject.java | 28 + .../gen/EncodedObjectOrBuilder.java | 8 + .../gen/LoadBlobRequestEntry.java | 780 +++++++ .../gen/LoadBlobRequestEntryOrBuilder.java | 59 + .../io/superdurable/gen/LoadBlobsRequest.java | 474 ++-- .../gen/LoadBlobsRequestOrBuilder.java | 54 +- .../dex/ClientExceptionIntegrationTest.java | 6 +- .../dex/WorkerServiceIntegrationTest.java | 15 +- sdk-python/README.md | 5 +- sdk-python/dex/_async_value_hydrator.py | 71 +- sdk-python/dex/_value_hydrator.py | 58 +- sdk-python/dex/_value_mapper.py | 4 +- sdk-python/dex/async_client.py | 8 +- sdk-python/dex/client.py | 8 +- sdk-python/dex/dexpb/dex_pb2.py | 712 +++--- sdk-python/dex/dexpb/dex_pb2.pyi | 16 +- sdk-python/tests/test_contracts.py | 6 + sdk-python/tests/test_flow_result.py | 5 +- sdk-rust/README.md | 4 + sdk-rust/crates/dex-sdk/src/client.rs | 24 +- sdk-rust/crates/dex-sdk/src/value_hydrator.rs | 64 +- sdk-rust/crates/dex-sdk/src/value_mapper.rs | 47 +- .../crates/dex-sdk/src/worker_dispatcher.rs | 21 +- sdk-typescript/README.md | 4 + sdk-typescript/src/client.ts | 8 +- sdk-typescript/src/gen/dex.ts | 85 +- sdk-typescript/src/value-mapper.ts | 57 +- sdk-typescript/src/worker-dispatcher.ts | 6 +- .../test/client.integration.test.ts | 10 +- sdk-typescript/test/contracts.test.ts | 19 +- server/Makefile | 2 +- server/config/attribute_store_test.go | 13 +- server/config/config.go | 37 +- server/config/config_template.yaml | 3 +- server/config/development.yaml | 3 +- server/config/development_cadence.yaml | 3 +- server/gen/dexpb/dex.pb.go | 1922 +++++++++-------- server/integ/any_command_close_test.go | 2 +- server/integ/any_command_combination_test.go | 2 +- server/integ/any_timer_signal_test.go | 2 +- server/integ/basic_test.go | 2 +- server/integ/channel_message_queue_test.go | 10 +- .../integ/command_thread_completion_test.go | 2 +- server/integ/greedy_timer_test.go | 4 +- server/integ/headers_test.go | 2 +- server/integ/parallel_test.go | 10 +- server/integ/rpc_external_storage_test.go | 10 +- server/integ/runtime.go | 4 +- server/integ/s3_cleanup_test.go | 7 +- .../s3_get_set_data_attributes_api_test.go | 13 +- server/integ/skip_start_test.go | 2 +- server/integ/start_delay_test.go | 2 +- server/integ/start_with_no_options_test.go | 2 +- server/integ/subflow_test.go | 1 + server/integ/wait_for_attribute_test.go | 2 +- server/integ/web_api_test.go | 68 +- server/integ/wf_timeout_test.go | 2 +- .../command_thread_completion/routers.go | 2 +- server/integ/workflow/common/load_blobs.go | 9 +- .../workflow/conditional_close/routers.go | 4 +- server/integ/workflow/interstate/routers.go | 4 +- server/integ/workflow/locking/routers.go | 4 +- server/integ/workflow/parallel/routers.go | 2 +- server/integ/workflow/persistence/routers.go | 2 +- .../persistence_loading_policy/routers.go | 2 +- server/integ/workflow/reset/routers.go | 4 +- .../workflow/rpc-external-storage/routers.go | 10 +- server/integ/workflow/rpc/routers.go | 2 +- .../s3-get-set-data-attributes/routers.go | 2 +- .../s3-init-data-attributes/routers.go | 18 +- .../integ/workflow/s3-start-input/routers.go | 8 +- .../s3-state-input-optimization/routers.go | 13 +- .../s3-upsert-data-objects/routers.go | 14 +- server/integ/workflow/signal/routers.go | 4 +- .../wait_for_state_completion/routers.go | 2 +- .../routers.go | 2 +- .../routers.go | 2 +- server/script/http/local/home.http | 2 +- server/service/api/service.go | 19 +- server/service/client/temporal/memo_test.go | 2 +- .../service/common/attributestore/manager.go | 2 +- .../attributestore/manager_integ_test.go | 4 +- .../common/attributestore/manager_test.go | 8 +- .../common/blobstore/blob_cache_integ_test.go | 55 +- server/service/common/blobstore/helpers.go | 119 +- server/service/common/blobstore/interfaces.go | 59 +- .../common/blobstore/local_integ_test.go | 64 +- server/service/common/blobstore/store_impl.go | 98 +- .../common/blobstore/store_impl_test.go | 24 +- .../common/blobstore/store_impl_unit_test.go | 42 +- .../service/common/index/searchAttribute.go | 4 +- .../common/index/searchAttribute_test.go | 2 +- server/service/common/rpc/invoke.go | 5 +- server/service/interpreter/activityImpl.go | 117 +- .../service/interpreter/persistence_test.go | 4 +- server/service/interpreter/workflowImpl.go | 2 +- web/api/handlers.go | 10 +- web/api/mapping.go | 2 +- web/api/types.go | 1 + web/app/flows/RunDetailsPage.tsx | 8 +- web/app/flows/details/StreamPanel.tsx | 7 +- web/lib/blobs.test.ts | 7 +- web/lib/blobs.ts | 37 +- web/server_integ_test.go | 13 +- 129 files changed, 5793 insertions(+), 3985 deletions(-) create mode 100644 sdk-java/src/main/java/io/superdurable/gen/LoadBlobRequestEntry.java create mode 100644 sdk-java/src/main/java/io/superdurable/gen/LoadBlobRequestEntryOrBuilder.java diff --git a/cli/internal/command/command_integ_test.go b/cli/internal/command/command_integ_test.go index 5af6f2c4c..6e6b92e6c 100644 --- a/cli/internal/command/command_integ_test.go +++ b/cli/internal/command/command_integ_test.go @@ -32,6 +32,7 @@ type testFlowService struct { mu sync.Mutex loadCalls int + loadRequest *dexpb.LoadBlobsRequest startCalls int stopCalls int streamWriteCalls int @@ -85,11 +86,12 @@ func (s *testFlowService) SearchFlows( } func (s *testFlowService) LoadBlobs( - context.Context, - *dexpb.LoadBlobsRequest, + _ context.Context, + request *dexpb.LoadBlobsRequest, ) (*dexpb.LoadBlobsResponse, error) { s.mu.Lock() s.loadCalls++ + s.loadRequest = request s.mu.Unlock() return &dexpb.LoadBlobsResponse{Values: map[string]*dexpb.Value{ "blob-1": {Kind: &dexpb.Value_StringValue{StringValue: "hydrated"}}, @@ -283,6 +285,10 @@ func TestSearchHydratesByDefaultAndCanReturnReferences(t *testing.T) { if service.loadCalls != 1 { t.Fatalf("expected one hydration call, got %d", service.loadCalls) } + if len(service.loadRequest.GetEntries()) != 1 || + service.loadRequest.GetEntries()[0].GetFlowId() != "flow-1" { + t.Fatalf("unexpected hydration request: %#v", service.loadRequest) + } } func TestMutationRequiresYesBeforeSendingRequest(t *testing.T) { diff --git a/cli/internal/command/flow.go b/cli/internal/command/flow.go index a9c5cd873..1421d7a12 100644 --- a/cli/internal/command/flow.go +++ b/cli/internal/command/flow.go @@ -101,7 +101,7 @@ func (c *flowCommand) channelMessages(ctx context.Context, args []string, option if callErr != nil { return newOperationError("flow channel-messages", callErr) } - mapped, warnings, mapErr := naturalMessage(callCtx, client.service, response, options.noHydrate) + mapped, warnings, mapErr := naturalMessage(callCtx, client.service, flowID, response, options.noHydrate) if mapErr != nil { return newOperationError("flow channel-messages", mapErr) } @@ -177,7 +177,7 @@ func (c *flowCommand) search(ctx context.Context, args []string, options options return newOperationError("flow search", err) } for _, entry := range response.GetFlowRuns() { - mapped, warnings, mapErr := naturalMessage(callCtx, client.service, entry, options.noHydrate) + mapped, warnings, mapErr := naturalMessage(callCtx, client.service, entry.GetFlowId(), entry, options.noHydrate) if mapErr != nil { return newOperationError("flow search", mapErr) } @@ -242,7 +242,7 @@ func (c *flowCommand) state(ctx context.Context, args []string, options options) if callErr != nil { return newOperationError("flow state", callErr) } - mapped, warnings, mapErr := naturalMessage(callCtx, client.service, response, options.noHydrate) + mapped, warnings, mapErr := naturalMessage(callCtx, client.service, flowID, response, options.noHydrate) if mapErr != nil { return newOperationError("flow state", mapErr) } diff --git a/cli/internal/command/flow_client_operations.go b/cli/internal/command/flow_client_operations.go index bcc864bbd..034ce888b 100644 --- a/cli/internal/command/flow_client_operations.go +++ b/cli/internal/command/flow_client_operations.go @@ -126,7 +126,7 @@ func executeWait(c *flowCommand, ctx context.Context, args []string, options opt if callErr != nil { return newOperationError("flow wait", callErr) } - mapped, warnings, mapErr := naturalMessage(callCtx, client.service, response, options.noHydrate) + mapped, warnings, mapErr := naturalMessage(callCtx, client.service, flowID, response, options.noHydrate) if mapErr != nil { return newOperationError("flow wait", mapErr) } @@ -385,7 +385,7 @@ func jsonObjectValue(value any) (*dexpb.Value, error) { if err != nil { return nil, fmt.Errorf("encode JSON value: %w", err) } - return &dexpb.Value{Kind: &dexpb.Value_ObjValue{ObjValue: &dexpb.EncodedObject{Encoding: "json", Payload: payload}}}, nil + return &dexpb.Value{Kind: &dexpb.Value_ObjValue{ObjValue: &dexpb.EncodedObject{Encoding: "j", Payload: payload}}}, nil } func parseInitialAttributes(reader io.Reader, source string) ([]*dexpb.AttributeWrite, error) { diff --git a/cli/internal/command/flow_operations.go b/cli/internal/command/flow_operations.go index 4038b2fcf..db65e70f1 100644 --- a/cli/internal/command/flow_operations.go +++ b/cli/internal/command/flow_operations.go @@ -44,7 +44,7 @@ func loadHistory( return nil, err } for _, event := range response.GetEvents() { - mapped, valueWarnings, mapErr := naturalMessage(ctx, client, event, noHydrate) + mapped, valueWarnings, mapErr := naturalMessage(ctx, client, flowID, event, noHydrate) if mapErr != nil { return nil, mapErr } @@ -179,7 +179,7 @@ func executeInspect(c *flowCommand, ctx context.Context, args []string, options if stateErr != nil { return newOperationError("flow inspect", stateErr) } - state, warnings, mapErr := naturalMessage(callCtx, client.service, stateResponse, options.noHydrate) + state, warnings, mapErr := naturalMessage(callCtx, client.service, flowID, stateResponse, options.noHydrate) if mapErr != nil { return newOperationError("flow inspect", mapErr) } @@ -242,7 +242,7 @@ func watchRun( return newOperationError("flow watch", pageErr) } for _, event := range page.GetEvents() { - mapped, warnings, mapErr := naturalMessage(ctx, client, event, options.noHydrate) + mapped, warnings, mapErr := naturalMessage(ctx, client, flowID, event, options.noHydrate) if mapErr != nil { return newOperationError("flow watch", mapErr) } @@ -287,7 +287,7 @@ func watchRun( if stateErr != nil { return newOperationError("flow watch", stateErr) } - state, warnings, mapErr := naturalMessage(ctx, client, stateResponse, options.noHydrate) + state, warnings, mapErr := naturalMessage(ctx, client, flowID, stateResponse, options.noHydrate) if mapErr != nil { return newOperationError("flow watch", mapErr) } diff --git a/cli/internal/command/values.go b/cli/internal/command/values.go index 92d2d5712..4ad0f948f 100644 --- a/cli/internal/command/values.go +++ b/cli/internal/command/values.go @@ -28,6 +28,7 @@ type blobReference struct { func naturalMessage( ctx context.Context, client dexpb.FlowServiceClient, + flowID string, message proto.Message, noHydrate bool, ) (map[string]any, []string, error) { @@ -40,7 +41,7 @@ func naturalMessage( if noHydrate || len(references) == 0 { return naturalValue(raw, nil, false).(map[string]any), nil, nil } - replacements, warnings := hydrateBlobReferences(ctx, client, references) + replacements, warnings := hydrateBlobReferences(ctx, client, flowID, references) return naturalValue(raw, replacements, true).(map[string]any), warnings, nil } @@ -76,9 +77,10 @@ func collectBlobReferences(value any, references map[string]blobReference) { func hydrateBlobReferences( ctx context.Context, client dexpb.FlowServiceClient, + flowID string, references map[string]blobReference, ) (map[string]any, []string) { - values := make([]*dexpb.Value, 0, len(references)) + entries := make([]*dexpb.LoadBlobRequestEntry, 0, len(references)) for _, reference := range references { value := &dexpb.Value{} if reference.kind == "string" { @@ -90,9 +92,9 @@ func hydrateBlobReferences( InternalBlobIdForObjValue: reference.id, } } - values = append(values, value) + entries = append(entries, &dexpb.LoadBlobRequestEntry{FlowId: flowID, BlobValue: value}) } - response, err := client.LoadBlobs(ctx, &dexpb.LoadBlobsRequest{Values: values}) + response, err := client.LoadBlobs(ctx, &dexpb.LoadBlobsRequest{Entries: entries}) if err != nil { return nil, []string{fmt.Sprintf("stored values unavailable: %v", err)} } @@ -206,7 +208,7 @@ func decodedObject(value map[string]any) any { if current, ok := value["payload"].(string); ok { payload = current } - if encoding == "json" { + if encoding == "j" { decoded, err := base64.StdEncoding.DecodeString(payload) if err == nil { var mapped any diff --git a/docs/content/production/server-operations.mdx b/docs/content/production/server-operations.mdx index aa56e4826..1ef2f6a6b 100644 --- a/docs/content/production/server-operations.mdx +++ b/docs/content/production/server-operations.mdx @@ -91,6 +91,67 @@ Use separate credentials and least-privilege policies for each environment. Monitor write and read failures, then test a recovery procedure that can still read existing objects after a credential rotation. +Dex keeps payloads through 100 bytes inline by default. A 101-byte string or +encoded object is offloaded. Set +**blobStore.thresholdInBytes** to override the default. The comparison uses only +the payload size, not the resulting reference size. + +~~~yaml +blobStore: + thresholdInBytes: 100 + objectIdLength: 10 + supportedStorages: + - status: active + storageId: p1 + storageType: s3 +~~~ + +Keep **storageId** short because every offloaded value stores it in durable +history. For example, use **p1** instead of **production1** when the shorter name +is still operationally clear. + +Blob references are opaque application values. Their wire forms are: + +~~~text +String: |/ +Object: |/| +~~~ + +The standard encodings are **j** for JSON and **r** for raw bytes. Custom +encodings pass through unchanged. The reference keeps the storage ID and UTC +write date, but omits the Flow ID. Dex obtains the owning Flow ID from trusted +request or Worker context. The physical object path is: + +~~~text +/v2/$/ +~~~ + +Internal references belong to exactly one Flow. Dex rehydrates and rewrites a +reference before it crosses a Flow boundary. The destination receives an +inline value or a new object under its own Flow prefix. Deleting the source +Flow therefore cannot corrupt the destination Flow. Public APIs reject +client-supplied internal references. + +Object IDs use deterministic lowercase Base36 characters. Retries with the +same invocation ID and payload overwrite the same object instead of creating +duplicates. Dex does not perform a read-before-write, conditional create, or +collision retry. **blobStore.objectIdLength** defaults to 10 and accepts values +from 10 through 50. Every Server writing the same Blob Store namespace must use +the same value, and the setting must not change while those Servers are +running. Readers accept every supported length, so a deployment can increase +the configured length during a coordinated restart. + +Ten Base36 characters provide about 51.7 bits. Within one Flow and one UTC day, +the approximate probability of at least one collision is 1.4 × 10⁻⁸ for 10,000 +objects, 1.4 × 10⁻⁶ for 100,000 objects, and 1.4 × 10⁻⁴ for 1,000,000 objects. +Use 10 for ordinary deployments. Use 12 or 16 for high-throughput Flows. A +length of 50 can represent the full SHA-256 value. + +Cleanup keeps the UTC date at the start of each Flow prefix. It lists prefixes +in lexical pages, describes the encoded Flow and optional Run, and deletes the +whole prefix only after the execution no longer exists. Continue listing with +the returned continuation token; no manifest is involved. + The optional **blobStore.blobCache** caches S3-backed Attribute objects. A non-empty **directory** enables it and must belong to one Server process. Its default budget is 1 GiB. Oversized or rejected objects bypass the cache and diff --git a/docs/design/deterministic-blob-identity.md b/docs/design/deterministic-blob-identity.md index 9a891f42a..2af62ff20 100644 --- a/docs/design/deterministic-blob-identity.md +++ b/docs/design/deterministic-blob-identity.md @@ -21,33 +21,48 @@ only when the running workflow has the same request ID. `FlowAlreadyStartedOptions.request_id` is removed and its field number and name are reserved. -## Blob UUID +## Blob object ID -Blob object names use deterministic UUIDv8: +Blob object names use a configurable deterministic lowercase Base36 ID: ```text digest = SHA-256(lengthPrefixed( - "dex-blob-v1", + "dex-blob-v2", invocationID, payload, )) -blobUUID = UUIDv8(digest[0:16]) +objectID = fixedWidthBase36(digest mod 36^objectIdLength) ``` Each component is prefixed with its unsigned 64-bit big-endian byte length. The -first 16 digest bytes are copied before setting the UUIDv8 version and RFC -variant bits. +alphabet is `0123456789abcdefghijklmnopqrstuvwxyz`. The configured length defaults +to 10 and accepts 10 through 50. All Servers writing the same namespace use the +same immutable value. -The complete path remains: +Durable History stores a compact locator without the Flow ID: ```text -yyyyMMdd$flowID/ +|/[|] +``` + +The Server combines the locator with the contextual Flow ID: + +```text +/v2/$/ ``` Activity writes use the workflow run ID plus activity ID as `invocationID`. External API writes use the caller-provided request ID. Activity attempt numbers are excluded. +Normal writes overwrite an existing key. There is no conditional create, +read-before-write, collision retry, or fallback key. This accepts the +probabilistic collision risk of the configured truncated hash. + +Internal Blob references belong to one Flow. Before a reference crosses a Flow +boundary, the Server reads it with the source Flow ID and writes any still-large +value under the destination Flow ID. This makes cleanup of the source Flow safe. + The date prefix uses the server's UTC date when the object is written. A retry crossing a UTC date boundary can create another path. diff --git a/docs/design/plan/go-sdk-rewrite.md b/docs/design/plan/go-sdk-rewrite.md index a53ccc60f..e39c25675 100644 --- a/docs/design/plan/go-sdk-rewrite.md +++ b/docs/design/plan/go-sdk-rewrite.md @@ -134,8 +134,8 @@ remains internal. | unsigned integers up to `math.MaxInt64` | `int_value` | | float32 and float64 | `double_value` | | bool and named bools | `bool_value` | -| `[]byte` and named byte slices | `obj_value`, encoding `"rawbytes"` | -| all other JSON-compatible values | `obj_value`, encoding `"json"` | +| `[]byte` and named byte slices | `obj_value`, encoding `"r"` | +| all other JSON-compatible values | `obj_value`, encoding `"j"` | Strings with invalid UTF-8 return an encoding error; arbitrary binary data uses `[]byte`. Raw-byte object payloads contain the bytes directly without JSON or diff --git a/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/production/server-operations.mdx b/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/production/server-operations.mdx index c65ea18f2..f060b06a8 100644 --- a/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/production/server-operations.mdx +++ b/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/production/server-operations.mdx @@ -83,6 +83,58 @@ network path 内。 least-privilege policy。监控 write 和 read failure,并测试 credential rotation 后仍能读取 现有 object 的恢复流程。 +Dex 默认将不超过 100 bytes 的 payload 保留在 history 中。101 bytes 的 string 或 encoded +object 会被 offload。可通过 **blobStore.thresholdInBytes** 覆盖默认值。 +比较时只计算 payload size,不计算最终 reference size。 + +~~~yaml +blobStore: + thresholdInBytes: 100 + objectIdLength: 10 + supportedStorages: + - status: active + storageId: p1 + storageType: s3 +~~~ + +由于每个 offloaded value 都会把 **storageId** 写入 durable history,请保持该值简短。例如, +在含义仍清楚时,用 **p1** 代替 **production1**。 + +应用必须将 Blob reference 视为 opaque value。其 wire format 为: + +~~~text +String: |/ +Object: |/| +~~~ + +标准 encoding 使用 **j** 表示 JSON,使用 **r** 表示 raw bytes。custom encoding 保持透传。 +reference 保留 storage ID 和 UTC write date,但不保存 Flow ID。Dex 从可信的 request 或 +Worker context 获取 owner Flow ID。物理 object path 为: + +~~~text +/v2/$/ +~~~ + +internal reference 只属于一个 Flow。在 reference 跨越 Flow boundary 前,Dex 会先 hydrate, +再为目标 Flow 重写。目标 Flow 会收到 inline value,或收到存储在自身 Flow prefix 下的新 +object。因此,删除源 Flow 不会损坏目标 Flow。public API 会拒绝客户端提交的 internal +reference。 + +object ID 使用确定性的全小写 Base36 字符。同一个 invocation ID 和 payload 的 retry 会覆盖 +同一个 object,不会生成重复 object。Dex 不执行 read-before-write、conditional create 或 +collision retry。**blobStore.objectIdLength** 默认值为 10,有效范围是 10 到 50。写入同一个 +Blob Store namespace 的所有 Server 必须使用相同值,而且 Server 运行期间不能修改该值。 +reader 接受范围内的所有长度,因此 deployment 可在协调重启时提高配置长度。 + +10 位 Base36 提供约 51.7 bits。在单个 Flow 的单个 UTC day partition 内,10,000 个 object +至少发生一次碰撞的近似概率为 1.4 × 10⁻⁸;100,000 个时为 1.4 × 10⁻⁶;1,000,000 个时为 +1.4 × 10⁻⁴。普通 deployment 使用 10。高吞吐 Flow 使用 12 或 16。长度 50 可以表达完整 +SHA-256 值。 + +cleanup 保留每个 Flow prefix 开头的 UTC date。它按字典序分页列出 prefix,describe 已编码 +的 Flow 和可选 Run,并且只在 execution 已不存在时删除整个 prefix。随后使用返回的 +continuation token 继续 list;该过程不使用 manifest。 + 可选的 **blobStore.blobCache** 缓存 S3 支持的 Attribute object。非空 **directory** 会启用 它,并且只能属于一个 Server process。默认 budget 为 1 GiB。过大或被拒绝的 object 会 绕过 cache,继续访问源 Blob Store。损坏的 entry 会被失效并重新填充;初始化、恢复和 diff --git a/protos/dex.proto b/protos/dex.proto index b05ac5057..f7a1819c6 100644 --- a/protos/dex.proto +++ b/protos/dex.proto @@ -132,6 +132,7 @@ message Value { } message EncodedObject { + // "j" is JSON and "r" is raw bytes. Other values are passed through. string encoding = 1; bytes payload = 2; } @@ -446,11 +447,15 @@ message SetAttributesRequest { string request_id = 4; } +message LoadBlobRequestEntry { + // Flow that owns blob_value and supplies the omitted Blob path segment. + string flow_id = 1; + // Must use internal_blob_id_for_string_value or internal_blob_id_for_obj_value. + Value blob_value = 2; +} + message LoadBlobsRequest { - // Each value must be a blob-id only - // (internal_blob_id_for_string_value or internal_blob_id_for_obj_value). - // Concrete payload arms (string_value / obj_value) are rejected. - repeated Value values = 1; + repeated LoadBlobRequestEntry entries = 1; } message LoadBlobsResponse { diff --git a/sdk-go/README.md b/sdk-go/README.md index f4406e82c..49144f99d 100644 --- a/sdk-go/README.md +++ b/sdk-go/README.md @@ -566,9 +566,12 @@ argument and context errors remain ordinary Go errors. Strings, booleans, signed integers, representable unsigned integers, and floating-point values use native Dex value arms. Strings must contain valid UTF-8; use `[]byte` for arbitrary binary data. Byte slices use an object arm -with encoding `"rawbytes"` and store the bytes directly without base64. +with wire encoding `"r"` and store the bytes directly without base64. Structs, maps, other slices, arrays, and JSON-compatible values use an object -arm with encoding `"json"`. +arm with wire encoding `"j"`. + +Internal Blob references are opaque. Hydration sends the owning Flow ID with +each reference, and the local cache is isolated by `(flowID, blobRef)`. Returned dynamic values remain opaque until decoded: diff --git a/sdk-go/dex/client.go b/sdk-go/dex/client.go index 7f6148809..aa6c24177 100644 --- a/sdk-go/dex/client.go +++ b/sdk-go/dex/client.go @@ -193,9 +193,14 @@ func (client *Client) validateFlowCall(ctx context.Context, flowID string) error func (client *Client) hydrateValues( ctx context.Context, + flowID string, valuePointers []**dexpb.Value, ) error { - if err := client.hydrator.HydrateValuesInPlace(ctx, valuePointers); err != nil { + return client.hydrateFlowValues(ctx, valuePointersForFlow(flowID, valuePointers)) +} + +func (client *Client) hydrateFlowValues(ctx context.Context, targets []flowValuePointer) error { + if err := client.hydrator.HydrateValuesInPlace(ctx, targets); err != nil { var failure *workerFailure if errors.As(err, &failure) { return translateRPCError(failure.cause, "LoadBlobs", "", flowTargetNone) @@ -643,7 +648,7 @@ func (client *Client) WaitForFlow( flowTargetExisting, ) } - if err := client.hydrateValues(ctx, waitForFlowValuePointers(response)); err != nil { + if err := client.hydrateValues(ctx, flowID, waitForFlowValuePointers(response)); err != nil { return FlowResult{}, err } result, err := mapFlowResult(response) @@ -690,24 +695,27 @@ func (client *Client) SearchFlows( if err != nil { return SearchFlowsPage{}, translateRPCError(err, "SearchFlows", "", flowTargetNone) } - if err := client.hydrateValues(ctx, searchFlowValuePointers(response)); err != nil { + if err := client.hydrateFlowValues(ctx, searchFlowValuePointers(response)); err != nil { return SearchFlowsPage{}, err } return mapSearchFlowsPage(response) } -func searchFlowValuePointers(response *dexpb.SearchFlowsResponse) []**dexpb.Value { +func searchFlowValuePointers(response *dexpb.SearchFlowsResponse) []flowValuePointer { if response == nil { return nil } - var pointers []**dexpb.Value + var pointers []flowValuePointer for _, flow := range response.FlowRuns { if flow == nil { continue } for _, attribute := range flow.IndexedAttributes { if attribute != nil { - pointers = append(pointers, &attribute.Value) + pointers = append(pointers, flowValuePointer{ + flowID: flow.GetFlowId(), + valuePointer: &attribute.Value, + }) } } } @@ -1069,7 +1077,7 @@ func (client *Client) ListStreamMessages( } valuePointers = append(valuePointers, &message.Value) } - if err := client.hydrateValues(ctx, valuePointers); err != nil { + if err := client.hydrateValues(ctx, flowID, valuePointers); err != nil { return err } messagesTarget := pageTarget.FieldByName("Messages") @@ -1406,6 +1414,7 @@ func (client *Client) InvokeRPC( } if err := client.hydrateValues( ctx, + flowID, []**dexpb.Value{&response.Output}, ); err != nil { return err diff --git a/sdk-go/dex/client_integration_test.go b/sdk-go/dex/client_integration_test.go index 0c568790d..9582013f6 100644 --- a/sdk-go/dex/client_integration_test.go +++ b/sdk-go/dex/client_integration_test.go @@ -216,8 +216,9 @@ func (service *clientTestFlowService) LoadBlobs( _ context.Context, request *dexpb.LoadBlobsRequest, ) (*dexpb.LoadBlobsResponse, error) { - values := make(map[string]*dexpb.Value, len(request.Values)) - for _, value := range request.Values { + values := make(map[string]*dexpb.Value, len(request.Entries)) + for _, entry := range request.Entries { + value := entry.GetBlobValue() blobID, found, err := getBlobID(value) if err != nil { return nil, err diff --git a/sdk-go/dex/hydration.go b/sdk-go/dex/hydration.go index 65e4aa72b..57352ecd3 100644 --- a/sdk-go/dex/hydration.go +++ b/sdk-go/dex/hydration.go @@ -22,7 +22,12 @@ import ( ) type valueHydrator interface { - HydrateValuesInPlace(context.Context, []**dexpb.Value) error + HydrateValuesInPlace(context.Context, []flowValuePointer) error +} + +type flowValuePointer struct { + flowID string + valuePointer **dexpb.Value } type valueHydratorImpl struct { @@ -37,6 +42,7 @@ type blobIDDef struct { } type pendingBlob struct { + flowID string blobID blobIDDef blobIDValue *dexpb.Value hydratedValue *dexpb.Value @@ -63,11 +69,19 @@ func newValueHydrator( func (hydrator *valueHydratorImpl) HydrateValuesInPlace( ctx context.Context, - valuePointers []**dexpb.Value, + flowValuePointers []flowValuePointer, ) error { - pendingBlobs := make([]*pendingBlob, 0, len(valuePointers)) - pendingBlobsByID := make(map[blobIDDef]*pendingBlob, len(valuePointers)) - for index, valuePointer := range valuePointers { + type flowBlobID struct { + flowID string + blobID blobIDDef + } + pendingBlobs := make([]*pendingBlob, 0, len(flowValuePointers)) + pendingBlobsByID := make(map[flowBlobID]*pendingBlob, len(flowValuePointers)) + for index, target := range flowValuePointers { + valuePointer := target.valuePointer + if target.flowID == "" { + return newWorkerFailure(codes.InvalidArgument, fmt.Errorf("dex: Flow ID at index %d is empty", index)) + } if valuePointer == nil { return newWorkerFailure( codes.InvalidArgument, @@ -84,13 +98,15 @@ func (hydrator *valueHydratorImpl) HydrateValuesInPlace( } continue } - pending, found := pendingBlobsByID[blobID] + key := flowBlobID{flowID: target.flowID, blobID: blobID} + pending, found := pendingBlobsByID[key] if !found { pending = &pendingBlob{ + flowID: target.flowID, blobID: blobID, blobIDValue: *valuePointer, } - pendingBlobsByID[blobID] = pending + pendingBlobsByID[key] = pending pendingBlobs = append(pendingBlobs, pending) } pending.valuePointers = append(pending.valuePointers, valuePointer) @@ -116,7 +132,7 @@ func (hydrator *valueHydratorImpl) hydrateBlobValues( ) error { misses := make([]*pendingBlob, 0, len(pendingBlobs)) for _, pending := range pendingBlobs { - cached, found := hydrator.loadCached(pending.blobIDValue, pending.blobID) + cached, found := hydrator.loadCached(pending.flowID, pending.blobIDValue, pending.blobID) if found { pending.hydratedValue = cached continue @@ -129,13 +145,15 @@ func (hydrator *valueHydratorImpl) hydrateBlobValues( if err := ctx.Err(); err != nil { return err } - missValues := make([]*dexpb.Value, 0, len(misses)) + entries := make([]*dexpb.LoadBlobRequestEntry, 0, len(misses)) for _, miss := range misses { - missValues = append(missValues, miss.blobIDValue) + entries = append(entries, &dexpb.LoadBlobRequestEntry{ + FlowId: miss.flowID, + BlobValue: miss.blobIDValue, + }) } - response, err := hydrator.client.LoadBlobs(ctx, &dexpb.LoadBlobsRequest{ - Values: missValues, + Entries: entries, }) if err != nil { if ctxErr := ctx.Err(); ctxErr != nil { @@ -164,16 +182,18 @@ func (hydrator *valueHydratorImpl) hydrateBlobValues( return newWorkerFailure(codes.Internal, err) } miss.hydratedValue = concrete - hydrator.storeCached(miss.blobIDValue, miss.blobID, concrete) + hydrator.storeCached(miss.flowID, miss.blobIDValue, miss.blobID, concrete) } return nil } func (hydrator *valueHydratorImpl) loadCached( + flowID string, request *dexpb.Value, blobID blobIDDef, ) (*dexpb.Value, bool) { - payload, found, err := hydrator.cache.Get(blobID.value) + cacheKey := flowBlobCacheKey(flowID, blobID.value) + payload, found, err := hydrator.cache.Get(cacheKey) if err != nil { hydrator.logger.Warn("read blob cache", "blob_id", blobID.value, "error", err) return nil, false @@ -186,7 +206,7 @@ func (hydrator *valueHydratorImpl) loadCached( return value, true } hydrator.logger.Warn("decode blob cache", "blob_id", blobID.value, "error", err) - if deleteErr := hydrator.cache.Delete(blobID.value); deleteErr != nil { + if deleteErr := hydrator.cache.Delete(cacheKey); deleteErr != nil { hydrator.logger.Warn( "delete blob cache entry", "blob_id", blobID.value, @@ -197,6 +217,7 @@ func (hydrator *valueHydratorImpl) loadCached( } func (hydrator *valueHydratorImpl) storeCached( + flowID string, request *dexpb.Value, blobID blobIDDef, concrete *dexpb.Value, @@ -206,7 +227,7 @@ func (hydrator *valueHydratorImpl) storeCached( hydrator.logger.Warn("encode blob cache", "blob_id", blobID.value, "error", err) return } - cached, err := hydrator.cache.Put(blobID.value, payload) + cached, err := hydrator.cache.Put(flowBlobCacheKey(flowID, blobID.value), payload) if err != nil { hydrator.logger.Warn("write blob cache", "blob_id", blobID.value, "error", err) return @@ -216,6 +237,18 @@ func (hydrator *valueHydratorImpl) storeCached( } } +func flowBlobCacheKey(flowID string, blobID string) string { + return fmt.Sprintf("%d:%s%s", len(flowID), flowID, blobID) +} + +func valuePointersForFlow(flowID string, valuePointers []**dexpb.Value) []flowValuePointer { + targets := make([]flowValuePointer, 0, len(valuePointers)) + for _, valuePointer := range valuePointers { + targets = append(targets, flowValuePointer{flowID: flowID, valuePointer: valuePointer}) + } + return targets +} + func marshalBlobCachePayload( blobIDValue *dexpb.Value, concreteValue *dexpb.Value, diff --git a/sdk-go/dex/hydration_test.go b/sdk-go/dex/hydration_test.go index 3f60f60b8..336a86c9d 100644 --- a/sdk-go/dex/hydration_test.go +++ b/sdk-go/dex/hydration_test.go @@ -24,7 +24,7 @@ import ( type fakeHydrationFlowServiceClient struct { dexpb.FlowServiceClient - requests []*dexpb.Value + requests []*dexpb.LoadBlobRequestEntry values map[string]*dexpb.Value err error } @@ -34,7 +34,7 @@ func (client *fakeHydrationFlowServiceClient) LoadBlobs( request *dexpb.LoadBlobsRequest, _ ...grpc.CallOption, ) (*dexpb.LoadBlobsResponse, error) { - client.requests = request.Values + client.requests = request.Entries if client.err != nil { return nil, client.err } @@ -69,7 +69,7 @@ func TestHydrateValuesDeduplicatesAndPreservesOrder(t *testing.T) { err := hydrator.HydrateValuesInPlace( context.Background(), - valuePointers(values), + valuePointers("flow-1", values), ) require.NoError(t, err) require.Len(t, client.requests, 2) @@ -97,7 +97,7 @@ func TestHydrateValuesValidatesResponses(t *testing.T) { cache, nil, ).HydrateValuesInPlace( - context.Background(), valuePointers(values), + context.Background(), valuePointers("flow-1", values), ) require.ErrorContains(t, err, "omitted blob") require.Same(t, stringBlob, values[0]) @@ -110,7 +110,7 @@ func TestHydrateValuesValidatesResponses(t *testing.T) { cache, nil, ).HydrateValuesInPlace( - context.Background(), valuePointers(values), + context.Background(), valuePointers("flow-1", values), ) require.ErrorContains(t, err, "hydrated to") require.Same(t, stringBlob, values[0]) @@ -121,7 +121,7 @@ func TestHydrateValuesValidatesResponses(t *testing.T) { cache, nil, ).HydrateValuesInPlace( - context.Background(), valuePointers(values), + context.Background(), valuePointers("flow-1", values), ) require.ErrorContains(t, err, "load failed") require.Same(t, stringBlob, values[0]) @@ -166,10 +166,10 @@ func TestBlobCachePayloadRoundTrip(t *testing.T) { require.True(t, proto.Equal(objectValue.GetObjValue(), decoded.GetObjValue())) } -func valuePointers(values []*dexpb.Value) []**dexpb.Value { - pointers := make([]**dexpb.Value, len(values)) +func valuePointers(flowID string, values []*dexpb.Value) []flowValuePointer { + pointers := make([]flowValuePointer, len(values)) for index := range values { - pointers[index] = &values[index] + pointers[index] = flowValuePointer{flowID: flowID, valuePointer: &values[index]} } return pointers } diff --git a/sdk-go/dex/value.go b/sdk-go/dex/value.go index c515d7ec1..341d7ba63 100644 --- a/sdk-go/dex/value.go +++ b/sdk-go/dex/value.go @@ -24,8 +24,8 @@ import ( ) const ( - jsonEncoding = "json" - rawBytesEncoding = "rawbytes" + jsonEncoding = "j" + rawBytesEncoding = "r" dateTimeFormat = time.RFC3339Nano ) diff --git a/sdk-go/dex/value_test.go b/sdk-go/dex/value_test.go index add1d2d42..6f2effdf2 100644 --- a/sdk-go/dex/value_test.go +++ b/sdk-go/dex/value_test.go @@ -34,6 +34,9 @@ type codecInterface interface { } func TestValueCodecNativeAndJSONRoundTrips(t *testing.T) { + require.Equal(t, "j", jsonEncoding) + require.Equal(t, "r", rawBytesEncoding) + testCases := []struct { name string input any diff --git a/sdk-go/dex/worker_integration_test.go b/sdk-go/dex/worker_integration_test.go index 03071aad6..f70ec02a6 100644 --- a/sdk-go/dex/worker_integration_test.go +++ b/sdk-go/dex/worker_integration_test.go @@ -55,9 +55,10 @@ type concreteValueHydrator struct{} func (concreteValueHydrator) HydrateValuesInPlace( _ context.Context, - valuePointers []**dexpb.Value, + flowValuePointers []flowValuePointer, ) error { - for index, valuePointer := range valuePointers { + for index, target := range flowValuePointers { + valuePointer := target.valuePointer if valuePointer == nil { return newWorkerFailure( codes.InvalidArgument, @@ -1037,23 +1038,23 @@ func TestWorkerHydrationUsesLoadBlobsAndDiskCache(t *testing.T) { }} first := request - err = hydrator.HydrateValuesInPlace(context.Background(), []**dexpb.Value{&first}) + err = hydrator.HydrateValuesInPlace(context.Background(), valuePointersForFlow("flow-1", []**dexpb.Value{&first})) require.NoError(t, err) require.Equal(t, "loaded-blob-1", first.GetStringValue()) second := request - err = hydrator.HydrateValuesInPlace(context.Background(), []**dexpb.Value{&second}) + err = hydrator.HydrateValuesInPlace(context.Background(), valuePointersForFlow("flow-1", []**dexpb.Value{&second})) require.NoError(t, err) require.Equal(t, "loaded-blob-1", second.GetStringValue()) require.Equal(t, 1, flowService.callCount()) - cached, err := cache.Put("corrupt", []byte{0xff}) + cached, err := cache.Put(flowBlobCacheKey("flow-1", "corrupt"), []byte{0xff}) require.NoError(t, err) require.True(t, cached) corruptRequest := &dexpb.Value{Kind: &dexpb.Value_InternalBlobIdForStringValue{ InternalBlobIdForStringValue: "corrupt", }} loaded := corruptRequest - err = hydrator.HydrateValuesInPlace(context.Background(), []**dexpb.Value{&loaded}) + err = hydrator.HydrateValuesInPlace(context.Background(), valuePointersForFlow("flow-1", []**dexpb.Value{&loaded})) require.NoError(t, err) require.Equal(t, "loaded-corrupt", loaded.GetStringValue()) require.Equal(t, 2, flowService.callCount()) @@ -1097,7 +1098,7 @@ func TestWorkerHydrationUsesLoadBlobsAndDiskCache(t *testing.T) { InternalBlobIdForStringValue: wrongID, }} wrongValue := wrongRequest - err = hydrator.HydrateValuesInPlace(context.Background(), []**dexpb.Value{&wrongValue}) + err = hydrator.HydrateValuesInPlace(context.Background(), valuePointersForFlow("flow-1", []**dexpb.Value{&wrongValue})) require.ErrorContains(t, err, "hydrated to") require.Same(t, wrongRequest, wrongValue) @@ -1107,7 +1108,7 @@ func TestWorkerHydrationUsesLoadBlobsAndDiskCache(t *testing.T) { InternalBlobIdForStringValue: omittedID, }} omittedValue := omittedRequest - err = hydrator.HydrateValuesInPlace(context.Background(), []**dexpb.Value{&omittedValue}) + err = hydrator.HydrateValuesInPlace(context.Background(), valuePointersForFlow("flow-1", []**dexpb.Value{&omittedValue})) require.ErrorContains(t, err, "omitted blob") require.Same(t, omittedRequest, omittedValue) @@ -1124,7 +1125,7 @@ func TestWorkerHydrationUsesLoadBlobsAndDiskCache(t *testing.T) { uncached := request err = uncachedHydrator.HydrateValuesInPlace( context.Background(), - []**dexpb.Value{&uncached}, + valuePointersForFlow("flow-1", []**dexpb.Value{&uncached}), ) require.NoError(t, err) require.Equal(t, "loaded-blob-1", uncached.GetStringValue()) @@ -1178,8 +1179,9 @@ func (service *workerBlobFlowService) LoadBlobs( service.mu.Lock() service.calls++ service.mu.Unlock() - values := make(map[string]*dexpb.Value, len(request.Values)) - for _, value := range request.Values { + values := make(map[string]*dexpb.Value, len(request.Entries)) + for _, entry := range request.Entries { + value := entry.GetBlobValue() id := value.GetInternalBlobIdForStringValue() if id == "" { id = value.GetInternalBlobIdForObjValue() diff --git a/sdk-go/dex/worker_service.go b/sdk-go/dex/worker_service.go index 9aa7114cd..2a72294a0 100644 --- a/sdk-go/dex/worker_service.go +++ b/sdk-go/dex/worker_service.go @@ -92,7 +92,7 @@ func (service *workerService) invokeWaitForMethod( } if err := service.hydrator.HydrateValuesInPlace( output.stream.Context(), - waitForRequestValuePointers(request), + valuePointersForFlow(request.GetContext().GetFlowId(), waitForRequestValuePointers(request)), ); err != nil { return err } @@ -188,7 +188,9 @@ func (service *workerService) invokeExecuteMethod( if err != nil { return newWorkerFailure(codes.InvalidArgument, err) } - if err := service.hydrator.HydrateValuesInPlace(output.stream.Context(), valuePointers); err != nil { + if err := service.hydrator.HydrateValuesInPlace( + output.stream.Context(), valuePointersForFlow(request.GetContext().GetFlowId(), valuePointers), + ); err != nil { return err } input, err := decodeHandlerInput(request.StepInput, step.inputType) @@ -271,7 +273,9 @@ func (service *workerService) invokeTimeoutHandler( if err != nil { return newWorkerFailure(codes.InvalidArgument, err) } - if err := service.hydrator.HydrateValuesInPlace(output.stream.Context(), valuePointers); err != nil { + if err := service.hydrator.HydrateValuesInPlace( + output.stream.Context(), valuePointersForFlow(request.GetContext().GetFlowId(), valuePointers), + ); err != nil { return err } invocation, err := newInvocationContext( @@ -354,7 +358,7 @@ func (service *workerService) invokeWorkerRPC( } if err := service.hydrator.HydrateValuesInPlace( ctx, - rpcRequestValuePointers(request), + valuePointersForFlow(request.GetContext().GetFlowId(), rpcRequestValuePointers(request)), ); err != nil { return nil, err } diff --git a/sdk-go/gen/dexpb/dex.pb.go b/sdk-go/gen/dexpb/dex.pb.go index e8d5d2e69..4c274e5b2 100644 --- a/sdk-go/gen/dexpb/dex.pb.go +++ b/sdk-go/gen/dexpb/dex.pb.go @@ -1472,9 +1472,10 @@ func (*Value_BoolValue) isValue_Kind() {} func (*Value_NullValue) isValue_Kind() {} type EncodedObject struct { - state protoimpl.MessageState `protogen:"open.v1"` - Encoding string `protobuf:"bytes,1,opt,name=encoding,proto3" json:"encoding,omitempty"` - Payload []byte `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + // "j" is JSON and "r" is raw bytes. Other values are passed through. + Encoding string `protobuf:"bytes,1,opt,name=encoding,proto3" json:"encoding,omitempty"` + Payload []byte `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3848,19 +3849,70 @@ func (x *SetAttributesRequest) GetRequestId() string { return "" } -type LoadBlobsRequest struct { +type LoadBlobRequestEntry struct { state protoimpl.MessageState `protogen:"open.v1"` - // Each value must be a blob-id only - // (internal_blob_id_for_string_value or internal_blob_id_for_obj_value). - // Concrete payload arms (string_value / obj_value) are rejected. - Values []*Value `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` + // Flow that owns blob_value and supplies the omitted Blob path segment. + FlowId string `protobuf:"bytes,1,opt,name=flow_id,json=flowId,proto3" json:"flow_id,omitempty"` + // Must use internal_blob_id_for_string_value or internal_blob_id_for_obj_value. + BlobValue *Value `protobuf:"bytes,2,opt,name=blob_value,json=blobValue,proto3" json:"blob_value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LoadBlobRequestEntry) Reset() { + *x = LoadBlobRequestEntry{} + mi := &file_dex_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LoadBlobRequestEntry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LoadBlobRequestEntry) ProtoMessage() {} + +func (x *LoadBlobRequestEntry) ProtoReflect() protoreflect.Message { + mi := &file_dex_proto_msgTypes[35] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LoadBlobRequestEntry.ProtoReflect.Descriptor instead. +func (*LoadBlobRequestEntry) Descriptor() ([]byte, []int) { + return file_dex_proto_rawDescGZIP(), []int{35} +} + +func (x *LoadBlobRequestEntry) GetFlowId() string { + if x != nil { + return x.FlowId + } + return "" +} + +func (x *LoadBlobRequestEntry) GetBlobValue() *Value { + if x != nil { + return x.BlobValue + } + return nil +} + +type LoadBlobsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Entries []*LoadBlobRequestEntry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *LoadBlobsRequest) Reset() { *x = LoadBlobsRequest{} - mi := &file_dex_proto_msgTypes[35] + mi := &file_dex_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3872,7 +3924,7 @@ func (x *LoadBlobsRequest) String() string { func (*LoadBlobsRequest) ProtoMessage() {} func (x *LoadBlobsRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[35] + mi := &file_dex_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3885,12 +3937,12 @@ func (x *LoadBlobsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LoadBlobsRequest.ProtoReflect.Descriptor instead. func (*LoadBlobsRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{35} + return file_dex_proto_rawDescGZIP(), []int{36} } -func (x *LoadBlobsRequest) GetValues() []*Value { +func (x *LoadBlobsRequest) GetEntries() []*LoadBlobRequestEntry { if x != nil { - return x.Values + return x.Entries } return nil } @@ -3905,7 +3957,7 @@ type LoadBlobsResponse struct { func (x *LoadBlobsResponse) Reset() { *x = LoadBlobsResponse{} - mi := &file_dex_proto_msgTypes[36] + mi := &file_dex_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3917,7 +3969,7 @@ func (x *LoadBlobsResponse) String() string { func (*LoadBlobsResponse) ProtoMessage() {} func (x *LoadBlobsResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[36] + mi := &file_dex_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3930,7 +3982,7 @@ func (x *LoadBlobsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LoadBlobsResponse.ProtoReflect.Descriptor instead. func (*LoadBlobsResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{36} + return file_dex_proto_rawDescGZIP(), []int{37} } func (x *LoadBlobsResponse) GetValues() map[string]*Value { @@ -3953,7 +4005,7 @@ type WaitForFlowRequest struct { func (x *WaitForFlowRequest) Reset() { *x = WaitForFlowRequest{} - mi := &file_dex_proto_msgTypes[37] + mi := &file_dex_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3965,7 +4017,7 @@ func (x *WaitForFlowRequest) String() string { func (*WaitForFlowRequest) ProtoMessage() {} func (x *WaitForFlowRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[37] + mi := &file_dex_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3978,7 +4030,7 @@ func (x *WaitForFlowRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitForFlowRequest.ProtoReflect.Descriptor instead. func (*WaitForFlowRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{37} + return file_dex_proto_rawDescGZIP(), []int{38} } func (x *WaitForFlowRequest) GetFlowId() string { @@ -4020,7 +4072,7 @@ type StepCompletionOutput struct { func (x *StepCompletionOutput) Reset() { *x = StepCompletionOutput{} - mi := &file_dex_proto_msgTypes[38] + mi := &file_dex_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4032,7 +4084,7 @@ func (x *StepCompletionOutput) String() string { func (*StepCompletionOutput) ProtoMessage() {} func (x *StepCompletionOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[38] + mi := &file_dex_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4045,7 +4097,7 @@ func (x *StepCompletionOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use StepCompletionOutput.ProtoReflect.Descriptor instead. func (*StepCompletionOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{38} + return file_dex_proto_rawDescGZIP(), []int{39} } func (x *StepCompletionOutput) GetCompletedStepType() string { @@ -4081,7 +4133,7 @@ type FlowResult struct { func (x *FlowResult) Reset() { *x = FlowResult{} - mi := &file_dex_proto_msgTypes[39] + mi := &file_dex_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4093,7 +4145,7 @@ func (x *FlowResult) String() string { func (*FlowResult) ProtoMessage() {} func (x *FlowResult) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[39] + mi := &file_dex_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4106,7 +4158,7 @@ func (x *FlowResult) ProtoReflect() protoreflect.Message { // Deprecated: Use FlowResult.ProtoReflect.Descriptor instead. func (*FlowResult) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{39} + return file_dex_proto_rawDescGZIP(), []int{40} } func (x *FlowResult) GetFlowStatus() FlowStatus { @@ -4148,7 +4200,7 @@ type SearchFlowsRequest struct { func (x *SearchFlowsRequest) Reset() { *x = SearchFlowsRequest{} - mi := &file_dex_proto_msgTypes[40] + mi := &file_dex_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4160,7 +4212,7 @@ func (x *SearchFlowsRequest) String() string { func (*SearchFlowsRequest) ProtoMessage() {} func (x *SearchFlowsRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[40] + mi := &file_dex_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4173,7 +4225,7 @@ func (x *SearchFlowsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SearchFlowsRequest.ProtoReflect.Descriptor instead. func (*SearchFlowsRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{40} + return file_dex_proto_rawDescGZIP(), []int{41} } func (x *SearchFlowsRequest) GetQuery() string { @@ -4207,7 +4259,7 @@ type SearchFlowsResponse struct { func (x *SearchFlowsResponse) Reset() { *x = SearchFlowsResponse{} - mi := &file_dex_proto_msgTypes[41] + mi := &file_dex_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4219,7 +4271,7 @@ func (x *SearchFlowsResponse) String() string { func (*SearchFlowsResponse) ProtoMessage() {} func (x *SearchFlowsResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[41] + mi := &file_dex_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4232,7 +4284,7 @@ func (x *SearchFlowsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SearchFlowsResponse.ProtoReflect.Descriptor instead. func (*SearchFlowsResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{41} + return file_dex_proto_rawDescGZIP(), []int{42} } func (x *SearchFlowsResponse) GetFlowRuns() []*SearchFlowsResponseEntry { @@ -4264,7 +4316,7 @@ type SearchFlowsResponseEntry struct { func (x *SearchFlowsResponseEntry) Reset() { *x = SearchFlowsResponseEntry{} - mi := &file_dex_proto_msgTypes[42] + mi := &file_dex_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4276,7 +4328,7 @@ func (x *SearchFlowsResponseEntry) String() string { func (*SearchFlowsResponseEntry) ProtoMessage() {} func (x *SearchFlowsResponseEntry) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[42] + mi := &file_dex_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4289,7 +4341,7 @@ func (x *SearchFlowsResponseEntry) ProtoReflect() protoreflect.Message { // Deprecated: Use SearchFlowsResponseEntry.ProtoReflect.Descriptor instead. func (*SearchFlowsResponseEntry) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{42} + return file_dex_proto_rawDescGZIP(), []int{43} } func (x *SearchFlowsResponseEntry) GetFlowId() string { @@ -4350,7 +4402,7 @@ type SyncAttributeIndexRequest struct { func (x *SyncAttributeIndexRequest) Reset() { *x = SyncAttributeIndexRequest{} - mi := &file_dex_proto_msgTypes[43] + mi := &file_dex_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4362,7 +4414,7 @@ func (x *SyncAttributeIndexRequest) String() string { func (*SyncAttributeIndexRequest) ProtoMessage() {} func (x *SyncAttributeIndexRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[43] + mi := &file_dex_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4375,7 +4427,7 @@ func (x *SyncAttributeIndexRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAttributeIndexRequest.ProtoReflect.Descriptor instead. func (*SyncAttributeIndexRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{43} + return file_dex_proto_rawDescGZIP(), []int{44} } func (x *SyncAttributeIndexRequest) GetAttributeIndexes() map[string]IndexType { @@ -4393,7 +4445,7 @@ type SyncAttributeIndexResponse struct { func (x *SyncAttributeIndexResponse) Reset() { *x = SyncAttributeIndexResponse{} - mi := &file_dex_proto_msgTypes[44] + mi := &file_dex_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4405,7 +4457,7 @@ func (x *SyncAttributeIndexResponse) String() string { func (*SyncAttributeIndexResponse) ProtoMessage() {} func (x *SyncAttributeIndexResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[44] + mi := &file_dex_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4418,7 +4470,7 @@ func (x *SyncAttributeIndexResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAttributeIndexResponse.ProtoReflect.Descriptor instead. func (*SyncAttributeIndexResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{44} + return file_dex_proto_rawDescGZIP(), []int{45} } type FlowExecutionID struct { @@ -4431,7 +4483,7 @@ type FlowExecutionID struct { func (x *FlowExecutionID) Reset() { *x = FlowExecutionID{} - mi := &file_dex_proto_msgTypes[45] + mi := &file_dex_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4443,7 +4495,7 @@ func (x *FlowExecutionID) String() string { func (*FlowExecutionID) ProtoMessage() {} func (x *FlowExecutionID) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[45] + mi := &file_dex_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4456,7 +4508,7 @@ func (x *FlowExecutionID) ProtoReflect() protoreflect.Message { // Deprecated: Use FlowExecutionID.ProtoReflect.Descriptor instead. func (*FlowExecutionID) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{45} + return file_dex_proto_rawDescGZIP(), []int{46} } func (x *FlowExecutionID) GetFlowId() string { @@ -4483,7 +4535,7 @@ type GetFlowSummaryRequest struct { func (x *GetFlowSummaryRequest) Reset() { *x = GetFlowSummaryRequest{} - mi := &file_dex_proto_msgTypes[46] + mi := &file_dex_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4495,7 +4547,7 @@ func (x *GetFlowSummaryRequest) String() string { func (*GetFlowSummaryRequest) ProtoMessage() {} func (x *GetFlowSummaryRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[46] + mi := &file_dex_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4508,7 +4560,7 @@ func (x *GetFlowSummaryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlowSummaryRequest.ProtoReflect.Descriptor instead. func (*GetFlowSummaryRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{46} + return file_dex_proto_rawDescGZIP(), []int{47} } func (x *GetFlowSummaryRequest) GetFlowId() string { @@ -4540,7 +4592,7 @@ type GetFlowSummaryResponse struct { func (x *GetFlowSummaryResponse) Reset() { *x = GetFlowSummaryResponse{} - mi := &file_dex_proto_msgTypes[47] + mi := &file_dex_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4552,7 +4604,7 @@ func (x *GetFlowSummaryResponse) String() string { func (*GetFlowSummaryResponse) ProtoMessage() {} func (x *GetFlowSummaryResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[47] + mi := &file_dex_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4565,7 +4617,7 @@ func (x *GetFlowSummaryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlowSummaryResponse.ProtoReflect.Descriptor instead. func (*GetFlowSummaryResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{47} + return file_dex_proto_rawDescGZIP(), []int{48} } func (x *GetFlowSummaryResponse) GetFlowExecutionId() *FlowExecutionID { @@ -4631,7 +4683,7 @@ type InternalAsyncStepInputSnapshot struct { func (x *InternalAsyncStepInputSnapshot) Reset() { *x = InternalAsyncStepInputSnapshot{} - mi := &file_dex_proto_msgTypes[48] + mi := &file_dex_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4643,7 +4695,7 @@ func (x *InternalAsyncStepInputSnapshot) String() string { func (*InternalAsyncStepInputSnapshot) ProtoMessage() {} func (x *InternalAsyncStepInputSnapshot) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[48] + mi := &file_dex_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4656,7 +4708,7 @@ func (x *InternalAsyncStepInputSnapshot) ProtoReflect() protoreflect.Message { // Deprecated: Use InternalAsyncStepInputSnapshot.ProtoReflect.Descriptor instead. func (*InternalAsyncStepInputSnapshot) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{48} + return file_dex_proto_rawDescGZIP(), []int{49} } func (x *InternalAsyncStepInputSnapshot) GetMethodOptions() *StepMethodOptions { @@ -4717,7 +4769,7 @@ type InternalLocalActivityInput struct { func (x *InternalLocalActivityInput) Reset() { *x = InternalLocalActivityInput{} - mi := &file_dex_proto_msgTypes[49] + mi := &file_dex_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4729,7 +4781,7 @@ func (x *InternalLocalActivityInput) String() string { func (*InternalLocalActivityInput) ProtoMessage() {} func (x *InternalLocalActivityInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[49] + mi := &file_dex_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4742,7 +4794,7 @@ func (x *InternalLocalActivityInput) ProtoReflect() protoreflect.Message { // Deprecated: Use InternalLocalActivityInput.ProtoReflect.Descriptor instead. func (*InternalLocalActivityInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{49} + return file_dex_proto_rawDescGZIP(), []int{50} } func (x *InternalLocalActivityInput) GetCurrentRunStartedTimestamp() int64 { @@ -4772,7 +4824,7 @@ type GetHistoryEventsRequest struct { func (x *GetHistoryEventsRequest) Reset() { *x = GetHistoryEventsRequest{} - mi := &file_dex_proto_msgTypes[50] + mi := &file_dex_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4784,7 +4836,7 @@ func (x *GetHistoryEventsRequest) String() string { func (*GetHistoryEventsRequest) ProtoMessage() {} func (x *GetHistoryEventsRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[50] + mi := &file_dex_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4797,7 +4849,7 @@ func (x *GetHistoryEventsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetHistoryEventsRequest.ProtoReflect.Descriptor instead. func (*GetHistoryEventsRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{50} + return file_dex_proto_rawDescGZIP(), []int{51} } func (x *GetHistoryEventsRequest) GetFlowId() string { @@ -4846,7 +4898,7 @@ type GetHistoryEventsResponse struct { func (x *GetHistoryEventsResponse) Reset() { *x = GetHistoryEventsResponse{} - mi := &file_dex_proto_msgTypes[51] + mi := &file_dex_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4858,7 +4910,7 @@ func (x *GetHistoryEventsResponse) String() string { func (*GetHistoryEventsResponse) ProtoMessage() {} func (x *GetHistoryEventsResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[51] + mi := &file_dex_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4871,7 +4923,7 @@ func (x *GetHistoryEventsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetHistoryEventsResponse.ProtoReflect.Descriptor instead. func (*GetHistoryEventsResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{51} + return file_dex_proto_rawDescGZIP(), []int{52} } func (x *GetHistoryEventsResponse) GetEvents() []*FlowHistoryEvent { @@ -4920,7 +4972,7 @@ type FlowHistoryEvent struct { func (x *FlowHistoryEvent) Reset() { *x = FlowHistoryEvent{} - mi := &file_dex_proto_msgTypes[52] + mi := &file_dex_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4932,7 +4984,7 @@ func (x *FlowHistoryEvent) String() string { func (*FlowHistoryEvent) ProtoMessage() {} func (x *FlowHistoryEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[52] + mi := &file_dex_proto_msgTypes[53] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4945,7 +4997,7 @@ func (x *FlowHistoryEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use FlowHistoryEvent.ProtoReflect.Descriptor instead. func (*FlowHistoryEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{52} + return file_dex_proto_rawDescGZIP(), []int{53} } func (x *FlowHistoryEvent) GetEventId() int64 { @@ -5164,7 +5216,7 @@ type TimeTravelForkHistoryEvent struct { func (x *TimeTravelForkHistoryEvent) Reset() { *x = TimeTravelForkHistoryEvent{} - mi := &file_dex_proto_msgTypes[53] + mi := &file_dex_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5176,7 +5228,7 @@ func (x *TimeTravelForkHistoryEvent) String() string { func (*TimeTravelForkHistoryEvent) ProtoMessage() {} func (x *TimeTravelForkHistoryEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[53] + mi := &file_dex_proto_msgTypes[54] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5189,7 +5241,7 @@ func (x *TimeTravelForkHistoryEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use TimeTravelForkHistoryEvent.ProtoReflect.Descriptor instead. func (*TimeTravelForkHistoryEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{53} + return file_dex_proto_rawDescGZIP(), []int{54} } func (x *TimeTravelForkHistoryEvent) GetPreviousRunId() string { @@ -5218,7 +5270,7 @@ type FlowStartedOrContinuedHistoryEvent struct { func (x *FlowStartedOrContinuedHistoryEvent) Reset() { *x = FlowStartedOrContinuedHistoryEvent{} - mi := &file_dex_proto_msgTypes[54] + mi := &file_dex_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5230,7 +5282,7 @@ func (x *FlowStartedOrContinuedHistoryEvent) String() string { func (*FlowStartedOrContinuedHistoryEvent) ProtoMessage() {} func (x *FlowStartedOrContinuedHistoryEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[54] + mi := &file_dex_proto_msgTypes[55] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5243,7 +5295,7 @@ func (x *FlowStartedOrContinuedHistoryEvent) ProtoReflect() protoreflect.Message // Deprecated: Use FlowStartedOrContinuedHistoryEvent.ProtoReflect.Descriptor instead. func (*FlowStartedOrContinuedHistoryEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{54} + return file_dex_proto_rawDescGZIP(), []int{55} } func (x *FlowStartedOrContinuedHistoryEvent) GetFlowExecutionId() *FlowExecutionID { @@ -5343,7 +5395,7 @@ type FlowInitialStart struct { func (x *FlowInitialStart) Reset() { *x = FlowInitialStart{} - mi := &file_dex_proto_msgTypes[55] + mi := &file_dex_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5355,7 +5407,7 @@ func (x *FlowInitialStart) String() string { func (*FlowInitialStart) ProtoMessage() {} func (x *FlowInitialStart) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[55] + mi := &file_dex_proto_msgTypes[56] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5368,7 +5420,7 @@ func (x *FlowInitialStart) ProtoReflect() protoreflect.Message { // Deprecated: Use FlowInitialStart.ProtoReflect.Descriptor instead. func (*FlowInitialStart) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{55} + return file_dex_proto_rawDescGZIP(), []int{56} } func (x *FlowInitialStart) GetStartStepType() string { @@ -5413,7 +5465,7 @@ type FlowContinuedStart struct { func (x *FlowContinuedStart) Reset() { *x = FlowContinuedStart{} - mi := &file_dex_proto_msgTypes[56] + mi := &file_dex_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5425,7 +5477,7 @@ func (x *FlowContinuedStart) String() string { func (*FlowContinuedStart) ProtoMessage() {} func (x *FlowContinuedStart) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[56] + mi := &file_dex_proto_msgTypes[57] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5438,7 +5490,7 @@ func (x *FlowContinuedStart) ProtoReflect() protoreflect.Message { // Deprecated: Use FlowContinuedStart.ProtoReflect.Descriptor instead. func (*FlowContinuedStart) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{56} + return file_dex_proto_rawDescGZIP(), []int{57} } func (x *FlowContinuedStart) GetPreviousRunId() string { @@ -5496,7 +5548,7 @@ type FlowClosedHistoryEvent struct { func (x *FlowClosedHistoryEvent) Reset() { *x = FlowClosedHistoryEvent{} - mi := &file_dex_proto_msgTypes[57] + mi := &file_dex_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5508,7 +5560,7 @@ func (x *FlowClosedHistoryEvent) String() string { func (*FlowClosedHistoryEvent) ProtoMessage() {} func (x *FlowClosedHistoryEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[57] + mi := &file_dex_proto_msgTypes[58] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5521,7 +5573,7 @@ func (x *FlowClosedHistoryEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use FlowClosedHistoryEvent.ProtoReflect.Descriptor instead. func (*FlowClosedHistoryEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{57} + return file_dex_proto_rawDescGZIP(), []int{58} } func (x *FlowClosedHistoryEvent) GetFlowStatus() FlowStatus { @@ -5571,7 +5623,7 @@ type StepMethodPendingEvent struct { func (x *StepMethodPendingEvent) Reset() { *x = StepMethodPendingEvent{} - mi := &file_dex_proto_msgTypes[58] + mi := &file_dex_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5583,7 +5635,7 @@ func (x *StepMethodPendingEvent) String() string { func (*StepMethodPendingEvent) ProtoMessage() {} func (x *StepMethodPendingEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[58] + mi := &file_dex_proto_msgTypes[59] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5596,7 +5648,7 @@ func (x *StepMethodPendingEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use StepMethodPendingEvent.ProtoReflect.Descriptor instead. func (*StepMethodPendingEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{58} + return file_dex_proto_rawDescGZIP(), []int{59} } func (x *StepMethodPendingEvent) GetInput() *StepMethodEventInput { @@ -5631,7 +5683,7 @@ type StepMethodFailure struct { func (x *StepMethodFailure) Reset() { *x = StepMethodFailure{} - mi := &file_dex_proto_msgTypes[59] + mi := &file_dex_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5643,7 +5695,7 @@ func (x *StepMethodFailure) String() string { func (*StepMethodFailure) ProtoMessage() {} func (x *StepMethodFailure) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[59] + mi := &file_dex_proto_msgTypes[60] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5656,7 +5708,7 @@ func (x *StepMethodFailure) ProtoReflect() protoreflect.Message { // Deprecated: Use StepMethodFailure.ProtoReflect.Descriptor instead. func (*StepMethodFailure) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{59} + return file_dex_proto_rawDescGZIP(), []int{60} } func (x *StepMethodFailure) GetBackendError() string { @@ -5691,7 +5743,7 @@ type StepMethodOptions struct { func (x *StepMethodOptions) Reset() { *x = StepMethodOptions{} - mi := &file_dex_proto_msgTypes[60] + mi := &file_dex_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5703,7 +5755,7 @@ func (x *StepMethodOptions) String() string { func (*StepMethodOptions) ProtoMessage() {} func (x *StepMethodOptions) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[60] + mi := &file_dex_proto_msgTypes[61] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5716,7 +5768,7 @@ func (x *StepMethodOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use StepMethodOptions.ProtoReflect.Descriptor instead. func (*StepMethodOptions) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{60} + return file_dex_proto_rawDescGZIP(), []int{61} } func (x *StepMethodOptions) GetTimeoutSeconds() int32 { @@ -5753,7 +5805,7 @@ type StepMethodEventInput struct { func (x *StepMethodEventInput) Reset() { *x = StepMethodEventInput{} - mi := &file_dex_proto_msgTypes[61] + mi := &file_dex_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5765,7 +5817,7 @@ func (x *StepMethodEventInput) String() string { func (*StepMethodEventInput) ProtoMessage() {} func (x *StepMethodEventInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[61] + mi := &file_dex_proto_msgTypes[62] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5778,7 +5830,7 @@ func (x *StepMethodEventInput) ProtoReflect() protoreflect.Message { // Deprecated: Use StepMethodEventInput.ProtoReflect.Descriptor instead. func (*StepMethodEventInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{61} + return file_dex_proto_rawDescGZIP(), []int{62} } func (x *StepMethodEventInput) GetUnavailable() bool { @@ -5833,7 +5885,7 @@ type StepMethodEventContext struct { func (x *StepMethodEventContext) Reset() { *x = StepMethodEventContext{} - mi := &file_dex_proto_msgTypes[62] + mi := &file_dex_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5845,7 +5897,7 @@ func (x *StepMethodEventContext) String() string { func (*StepMethodEventContext) ProtoMessage() {} func (x *StepMethodEventContext) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[62] + mi := &file_dex_proto_msgTypes[63] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5858,7 +5910,7 @@ func (x *StepMethodEventContext) ProtoReflect() protoreflect.Message { // Deprecated: Use StepMethodEventContext.ProtoReflect.Descriptor instead. func (*StepMethodEventContext) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{62} + return file_dex_proto_rawDescGZIP(), []int{63} } func (x *StepMethodEventContext) GetStepExecutionId() string { @@ -5938,7 +5990,7 @@ type StepWaitForCompletedOutput struct { func (x *StepWaitForCompletedOutput) Reset() { *x = StepWaitForCompletedOutput{} - mi := &file_dex_proto_msgTypes[63] + mi := &file_dex_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5950,7 +6002,7 @@ func (x *StepWaitForCompletedOutput) String() string { func (*StepWaitForCompletedOutput) ProtoMessage() {} func (x *StepWaitForCompletedOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[63] + mi := &file_dex_proto_msgTypes[64] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5963,7 +6015,7 @@ func (x *StepWaitForCompletedOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use StepWaitForCompletedOutput.ProtoReflect.Descriptor instead. func (*StepWaitForCompletedOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{63} + return file_dex_proto_rawDescGZIP(), []int{64} } func (x *StepWaitForCompletedOutput) GetWaitForCondition() *WaitingCondition { @@ -6022,7 +6074,7 @@ type StepExecuteCompletedOutput struct { func (x *StepExecuteCompletedOutput) Reset() { *x = StepExecuteCompletedOutput{} - mi := &file_dex_proto_msgTypes[64] + mi := &file_dex_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6034,7 +6086,7 @@ func (x *StepExecuteCompletedOutput) String() string { func (*StepExecuteCompletedOutput) ProtoMessage() {} func (x *StepExecuteCompletedOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[64] + mi := &file_dex_proto_msgTypes[65] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6047,7 +6099,7 @@ func (x *StepExecuteCompletedOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use StepExecuteCompletedOutput.ProtoReflect.Descriptor instead. func (*StepExecuteCompletedOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{64} + return file_dex_proto_rawDescGZIP(), []int{65} } func (x *StepExecuteCompletedOutput) GetStepDecision() *StepDecision { @@ -6101,7 +6153,7 @@ type StepMethodFailedOutput struct { func (x *StepMethodFailedOutput) Reset() { *x = StepMethodFailedOutput{} - mi := &file_dex_proto_msgTypes[65] + mi := &file_dex_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6113,7 +6165,7 @@ func (x *StepMethodFailedOutput) String() string { func (*StepMethodFailedOutput) ProtoMessage() {} func (x *StepMethodFailedOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[65] + mi := &file_dex_proto_msgTypes[66] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6126,7 +6178,7 @@ func (x *StepMethodFailedOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use StepMethodFailedOutput.ProtoReflect.Descriptor instead. func (*StepMethodFailedOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{65} + return file_dex_proto_rawDescGZIP(), []int{66} } func (x *StepMethodFailedOutput) GetFailure() *StepMethodFailure { @@ -6147,7 +6199,7 @@ type StepWaitForCompletedEvent struct { func (x *StepWaitForCompletedEvent) Reset() { *x = StepWaitForCompletedEvent{} - mi := &file_dex_proto_msgTypes[66] + mi := &file_dex_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6159,7 +6211,7 @@ func (x *StepWaitForCompletedEvent) String() string { func (*StepWaitForCompletedEvent) ProtoMessage() {} func (x *StepWaitForCompletedEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[66] + mi := &file_dex_proto_msgTypes[67] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6172,7 +6224,7 @@ func (x *StepWaitForCompletedEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use StepWaitForCompletedEvent.ProtoReflect.Descriptor instead. func (*StepWaitForCompletedEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{66} + return file_dex_proto_rawDescGZIP(), []int{67} } func (x *StepWaitForCompletedEvent) GetInput() *StepMethodEventInput { @@ -6207,7 +6259,7 @@ type StepWaitForFailedEvent struct { func (x *StepWaitForFailedEvent) Reset() { *x = StepWaitForFailedEvent{} - mi := &file_dex_proto_msgTypes[67] + mi := &file_dex_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6219,7 +6271,7 @@ func (x *StepWaitForFailedEvent) String() string { func (*StepWaitForFailedEvent) ProtoMessage() {} func (x *StepWaitForFailedEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[67] + mi := &file_dex_proto_msgTypes[68] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6232,7 +6284,7 @@ func (x *StepWaitForFailedEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use StepWaitForFailedEvent.ProtoReflect.Descriptor instead. func (*StepWaitForFailedEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{67} + return file_dex_proto_rawDescGZIP(), []int{68} } func (x *StepWaitForFailedEvent) GetInput() *StepMethodEventInput { @@ -6267,7 +6319,7 @@ type StepExecuteCompletedEvent struct { func (x *StepExecuteCompletedEvent) Reset() { *x = StepExecuteCompletedEvent{} - mi := &file_dex_proto_msgTypes[68] + mi := &file_dex_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6279,7 +6331,7 @@ func (x *StepExecuteCompletedEvent) String() string { func (*StepExecuteCompletedEvent) ProtoMessage() {} func (x *StepExecuteCompletedEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[68] + mi := &file_dex_proto_msgTypes[69] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6292,7 +6344,7 @@ func (x *StepExecuteCompletedEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use StepExecuteCompletedEvent.ProtoReflect.Descriptor instead. func (*StepExecuteCompletedEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{68} + return file_dex_proto_rawDescGZIP(), []int{69} } func (x *StepExecuteCompletedEvent) GetInput() *StepMethodEventInput { @@ -6327,7 +6379,7 @@ type StepExecuteFailedEvent struct { func (x *StepExecuteFailedEvent) Reset() { *x = StepExecuteFailedEvent{} - mi := &file_dex_proto_msgTypes[69] + mi := &file_dex_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6339,7 +6391,7 @@ func (x *StepExecuteFailedEvent) String() string { func (*StepExecuteFailedEvent) ProtoMessage() {} func (x *StepExecuteFailedEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[69] + mi := &file_dex_proto_msgTypes[70] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6352,7 +6404,7 @@ func (x *StepExecuteFailedEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use StepExecuteFailedEvent.ProtoReflect.Descriptor instead. func (*StepExecuteFailedEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{69} + return file_dex_proto_rawDescGZIP(), []int{70} } func (x *StepExecuteFailedEvent) GetInput() *StepMethodEventInput { @@ -6395,7 +6447,7 @@ type RpcExecutionCompletedEvent struct { func (x *RpcExecutionCompletedEvent) Reset() { *x = RpcExecutionCompletedEvent{} - mi := &file_dex_proto_msgTypes[70] + mi := &file_dex_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6407,7 +6459,7 @@ func (x *RpcExecutionCompletedEvent) String() string { func (*RpcExecutionCompletedEvent) ProtoMessage() {} func (x *RpcExecutionCompletedEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[70] + mi := &file_dex_proto_msgTypes[71] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6420,7 +6472,7 @@ func (x *RpcExecutionCompletedEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use RpcExecutionCompletedEvent.ProtoReflect.Descriptor instead. func (*RpcExecutionCompletedEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{70} + return file_dex_proto_rawDescGZIP(), []int{71} } func (x *RpcExecutionCompletedEvent) GetRpcName() string { @@ -6495,7 +6547,7 @@ type ChannelExternalPublishEvent struct { func (x *ChannelExternalPublishEvent) Reset() { *x = ChannelExternalPublishEvent{} - mi := &file_dex_proto_msgTypes[71] + mi := &file_dex_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6507,7 +6559,7 @@ func (x *ChannelExternalPublishEvent) String() string { func (*ChannelExternalPublishEvent) ProtoMessage() {} func (x *ChannelExternalPublishEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[71] + mi := &file_dex_proto_msgTypes[72] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6520,7 +6572,7 @@ func (x *ChannelExternalPublishEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use ChannelExternalPublishEvent.ProtoReflect.Descriptor instead. func (*ChannelExternalPublishEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{71} + return file_dex_proto_rawDescGZIP(), []int{72} } func (x *ChannelExternalPublishEvent) GetMessages() []*ChannelMessage { @@ -6539,7 +6591,7 @@ type ChannelExternalDeleteEvent struct { func (x *ChannelExternalDeleteEvent) Reset() { *x = ChannelExternalDeleteEvent{} - mi := &file_dex_proto_msgTypes[72] + mi := &file_dex_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6551,7 +6603,7 @@ func (x *ChannelExternalDeleteEvent) String() string { func (*ChannelExternalDeleteEvent) ProtoMessage() {} func (x *ChannelExternalDeleteEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[72] + mi := &file_dex_proto_msgTypes[73] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6564,7 +6616,7 @@ func (x *ChannelExternalDeleteEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use ChannelExternalDeleteEvent.ProtoReflect.Descriptor instead. func (*ChannelExternalDeleteEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{72} + return file_dex_proto_rawDescGZIP(), []int{73} } func (x *ChannelExternalDeleteEvent) GetMessages() []*ChannelMessageDeletion { @@ -6585,7 +6637,7 @@ type WaitForHistoryEventRequest struct { func (x *WaitForHistoryEventRequest) Reset() { *x = WaitForHistoryEventRequest{} - mi := &file_dex_proto_msgTypes[73] + mi := &file_dex_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6597,7 +6649,7 @@ func (x *WaitForHistoryEventRequest) String() string { func (*WaitForHistoryEventRequest) ProtoMessage() {} func (x *WaitForHistoryEventRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[73] + mi := &file_dex_proto_msgTypes[74] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6610,7 +6662,7 @@ func (x *WaitForHistoryEventRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitForHistoryEventRequest.ProtoReflect.Descriptor instead. func (*WaitForHistoryEventRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{73} + return file_dex_proto_rawDescGZIP(), []int{74} } func (x *WaitForHistoryEventRequest) GetFlowId() string { @@ -6645,7 +6697,7 @@ type WaitForHistoryEventResponse struct { func (x *WaitForHistoryEventResponse) Reset() { *x = WaitForHistoryEventResponse{} - mi := &file_dex_proto_msgTypes[74] + mi := &file_dex_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6657,7 +6709,7 @@ func (x *WaitForHistoryEventResponse) String() string { func (*WaitForHistoryEventResponse) ProtoMessage() {} func (x *WaitForHistoryEventResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[74] + mi := &file_dex_proto_msgTypes[75] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6670,7 +6722,7 @@ func (x *WaitForHistoryEventResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitForHistoryEventResponse.ProtoReflect.Descriptor instead. func (*WaitForHistoryEventResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{74} + return file_dex_proto_rawDescGZIP(), []int{75} } func (x *WaitForHistoryEventResponse) GetEventAvailable() bool { @@ -6712,7 +6764,7 @@ type ActiveStepExecutionState struct { func (x *ActiveStepExecutionState) Reset() { *x = ActiveStepExecutionState{} - mi := &file_dex_proto_msgTypes[75] + mi := &file_dex_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6724,7 +6776,7 @@ func (x *ActiveStepExecutionState) String() string { func (*ActiveStepExecutionState) ProtoMessage() {} func (x *ActiveStepExecutionState) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[75] + mi := &file_dex_proto_msgTypes[76] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6737,7 +6789,7 @@ func (x *ActiveStepExecutionState) ProtoReflect() protoreflect.Message { // Deprecated: Use ActiveStepExecutionState.ProtoReflect.Descriptor instead. func (*ActiveStepExecutionState) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{75} + return file_dex_proto_rawDescGZIP(), []int{76} } func (x *ActiveStepExecutionState) GetStepExecutionId() string { @@ -6820,7 +6872,7 @@ type GetFlowStateRequest struct { func (x *GetFlowStateRequest) Reset() { *x = GetFlowStateRequest{} - mi := &file_dex_proto_msgTypes[76] + mi := &file_dex_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6832,7 +6884,7 @@ func (x *GetFlowStateRequest) String() string { func (*GetFlowStateRequest) ProtoMessage() {} func (x *GetFlowStateRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[76] + mi := &file_dex_proto_msgTypes[77] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6845,7 +6897,7 @@ func (x *GetFlowStateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlowStateRequest.ProtoReflect.Descriptor instead. func (*GetFlowStateRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{76} + return file_dex_proto_rawDescGZIP(), []int{77} } func (x *GetFlowStateRequest) GetFlowId() string { @@ -6876,7 +6928,7 @@ type GetFlowStateResponse struct { func (x *GetFlowStateResponse) Reset() { *x = GetFlowStateResponse{} - mi := &file_dex_proto_msgTypes[77] + mi := &file_dex_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6888,7 +6940,7 @@ func (x *GetFlowStateResponse) String() string { func (*GetFlowStateResponse) ProtoMessage() {} func (x *GetFlowStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[77] + mi := &file_dex_proto_msgTypes[78] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6901,7 +6953,7 @@ func (x *GetFlowStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlowStateResponse.ProtoReflect.Descriptor instead. func (*GetFlowStateResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{77} + return file_dex_proto_rawDescGZIP(), []int{78} } func (x *GetFlowStateResponse) GetFlowConfig() *FlowConfig { @@ -6964,7 +7016,7 @@ type ResetFlowRequest struct { func (x *ResetFlowRequest) Reset() { *x = ResetFlowRequest{} - mi := &file_dex_proto_msgTypes[78] + mi := &file_dex_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6976,7 +7028,7 @@ func (x *ResetFlowRequest) String() string { func (*ResetFlowRequest) ProtoMessage() {} func (x *ResetFlowRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[78] + mi := &file_dex_proto_msgTypes[79] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6989,7 +7041,7 @@ func (x *ResetFlowRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetFlowRequest.ProtoReflect.Descriptor instead. func (*ResetFlowRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{78} + return file_dex_proto_rawDescGZIP(), []int{79} } func (x *ResetFlowRequest) GetFlowId() string { @@ -7064,7 +7116,7 @@ type ResetFlowResponse struct { func (x *ResetFlowResponse) Reset() { *x = ResetFlowResponse{} - mi := &file_dex_proto_msgTypes[79] + mi := &file_dex_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7076,7 +7128,7 @@ func (x *ResetFlowResponse) String() string { func (*ResetFlowResponse) ProtoMessage() {} func (x *ResetFlowResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[79] + mi := &file_dex_proto_msgTypes[80] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7089,7 +7141,7 @@ func (x *ResetFlowResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetFlowResponse.ProtoReflect.Descriptor instead. func (*ResetFlowResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{79} + return file_dex_proto_rawDescGZIP(), []int{80} } func (x *ResetFlowResponse) GetRunId() string { @@ -7129,7 +7181,7 @@ type InvokeRPCRequest struct { func (x *InvokeRPCRequest) Reset() { *x = InvokeRPCRequest{} - mi := &file_dex_proto_msgTypes[80] + mi := &file_dex_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7141,7 +7193,7 @@ func (x *InvokeRPCRequest) String() string { func (*InvokeRPCRequest) ProtoMessage() {} func (x *InvokeRPCRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[80] + mi := &file_dex_proto_msgTypes[81] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7154,7 +7206,7 @@ func (x *InvokeRPCRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeRPCRequest.ProtoReflect.Descriptor instead. func (*InvokeRPCRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{80} + return file_dex_proto_rawDescGZIP(), []int{81} } func (x *InvokeRPCRequest) GetFlowId() string { @@ -7243,7 +7295,7 @@ type InvokeRPCResponse struct { func (x *InvokeRPCResponse) Reset() { *x = InvokeRPCResponse{} - mi := &file_dex_proto_msgTypes[81] + mi := &file_dex_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7255,7 +7307,7 @@ func (x *InvokeRPCResponse) String() string { func (*InvokeRPCResponse) ProtoMessage() {} func (x *InvokeRPCResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[81] + mi := &file_dex_proto_msgTypes[82] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7268,7 +7320,7 @@ func (x *InvokeRPCResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeRPCResponse.ProtoReflect.Descriptor instead. func (*InvokeRPCResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{81} + return file_dex_proto_rawDescGZIP(), []int{82} } func (x *InvokeRPCResponse) GetOutput() *Value { @@ -7291,7 +7343,7 @@ type SkipTimerRequest struct { func (x *SkipTimerRequest) Reset() { *x = SkipTimerRequest{} - mi := &file_dex_proto_msgTypes[82] + mi := &file_dex_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7303,7 +7355,7 @@ func (x *SkipTimerRequest) String() string { func (*SkipTimerRequest) ProtoMessage() {} func (x *SkipTimerRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[82] + mi := &file_dex_proto_msgTypes[83] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7316,7 +7368,7 @@ func (x *SkipTimerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SkipTimerRequest.ProtoReflect.Descriptor instead. func (*SkipTimerRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{82} + return file_dex_proto_rawDescGZIP(), []int{83} } func (x *SkipTimerRequest) GetFlowId() string { @@ -7365,7 +7417,7 @@ type UpdateFlowConfigRequest struct { func (x *UpdateFlowConfigRequest) Reset() { *x = UpdateFlowConfigRequest{} - mi := &file_dex_proto_msgTypes[83] + mi := &file_dex_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7377,7 +7429,7 @@ func (x *UpdateFlowConfigRequest) String() string { func (*UpdateFlowConfigRequest) ProtoMessage() {} func (x *UpdateFlowConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[83] + mi := &file_dex_proto_msgTypes[84] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7390,7 +7442,7 @@ func (x *UpdateFlowConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateFlowConfigRequest.ProtoReflect.Descriptor instead. func (*UpdateFlowConfigRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{83} + return file_dex_proto_rawDescGZIP(), []int{84} } func (x *UpdateFlowConfigRequest) GetFlowId() string { @@ -7435,7 +7487,7 @@ type WaitForStepCompletionRequest struct { func (x *WaitForStepCompletionRequest) Reset() { *x = WaitForStepCompletionRequest{} - mi := &file_dex_proto_msgTypes[84] + mi := &file_dex_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7447,7 +7499,7 @@ func (x *WaitForStepCompletionRequest) String() string { func (*WaitForStepCompletionRequest) ProtoMessage() {} func (x *WaitForStepCompletionRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[84] + mi := &file_dex_proto_msgTypes[85] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7460,7 +7512,7 @@ func (x *WaitForStepCompletionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitForStepCompletionRequest.ProtoReflect.Descriptor instead. func (*WaitForStepCompletionRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{84} + return file_dex_proto_rawDescGZIP(), []int{85} } func (x *WaitForStepCompletionRequest) GetFlowId() string { @@ -7506,7 +7558,7 @@ type WaitForStepCompletionResponse struct { func (x *WaitForStepCompletionResponse) Reset() { *x = WaitForStepCompletionResponse{} - mi := &file_dex_proto_msgTypes[85] + mi := &file_dex_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7518,7 +7570,7 @@ func (x *WaitForStepCompletionResponse) String() string { func (*WaitForStepCompletionResponse) ProtoMessage() {} func (x *WaitForStepCompletionResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[85] + mi := &file_dex_proto_msgTypes[86] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7531,7 +7583,7 @@ func (x *WaitForStepCompletionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitForStepCompletionResponse.ProtoReflect.Descriptor instead. func (*WaitForStepCompletionResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{85} + return file_dex_proto_rawDescGZIP(), []int{86} } type WaitForAttributeRequest struct { @@ -7553,7 +7605,7 @@ type WaitForAttributeRequest struct { func (x *WaitForAttributeRequest) Reset() { *x = WaitForAttributeRequest{} - mi := &file_dex_proto_msgTypes[86] + mi := &file_dex_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7565,7 +7617,7 @@ func (x *WaitForAttributeRequest) String() string { func (*WaitForAttributeRequest) ProtoMessage() {} func (x *WaitForAttributeRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[86] + mi := &file_dex_proto_msgTypes[87] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7578,7 +7630,7 @@ func (x *WaitForAttributeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitForAttributeRequest.ProtoReflect.Descriptor instead. func (*WaitForAttributeRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{86} + return file_dex_proto_rawDescGZIP(), []int{87} } func (x *WaitForAttributeRequest) GetFlowId() string { @@ -7618,7 +7670,7 @@ type WaitForAttributeResponse struct { func (x *WaitForAttributeResponse) Reset() { *x = WaitForAttributeResponse{} - mi := &file_dex_proto_msgTypes[87] + mi := &file_dex_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7630,7 +7682,7 @@ func (x *WaitForAttributeResponse) String() string { func (*WaitForAttributeResponse) ProtoMessage() {} func (x *WaitForAttributeResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[87] + mi := &file_dex_proto_msgTypes[88] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7643,7 +7695,7 @@ func (x *WaitForAttributeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitForAttributeResponse.ProtoReflect.Descriptor instead. func (*WaitForAttributeResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{87} + return file_dex_proto_rawDescGZIP(), []int{88} } func (x *WaitForAttributeResponse) GetMatchedValue() *Value { @@ -7664,7 +7716,7 @@ type AttributeMatch struct { func (x *AttributeMatch) Reset() { *x = AttributeMatch{} - mi := &file_dex_proto_msgTypes[88] + mi := &file_dex_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7676,7 +7728,7 @@ func (x *AttributeMatch) String() string { func (*AttributeMatch) ProtoMessage() {} func (x *AttributeMatch) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[88] + mi := &file_dex_proto_msgTypes[89] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7689,7 +7741,7 @@ func (x *AttributeMatch) ProtoReflect() protoreflect.Message { // Deprecated: Use AttributeMatch.ProtoReflect.Descriptor instead. func (*AttributeMatch) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{88} + return file_dex_proto_rawDescGZIP(), []int{89} } func (x *AttributeMatch) GetKey() string { @@ -7723,7 +7775,7 @@ type TriggerContinueAsNewRequest struct { func (x *TriggerContinueAsNewRequest) Reset() { *x = TriggerContinueAsNewRequest{} - mi := &file_dex_proto_msgTypes[89] + mi := &file_dex_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7735,7 +7787,7 @@ func (x *TriggerContinueAsNewRequest) String() string { func (*TriggerContinueAsNewRequest) ProtoMessage() {} func (x *TriggerContinueAsNewRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[89] + mi := &file_dex_proto_msgTypes[90] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7748,7 +7800,7 @@ func (x *TriggerContinueAsNewRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TriggerContinueAsNewRequest.ProtoReflect.Descriptor instead. func (*TriggerContinueAsNewRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{89} + return file_dex_proto_rawDescGZIP(), []int{90} } func (x *TriggerContinueAsNewRequest) GetFlowId() string { @@ -7776,7 +7828,7 @@ type HealthInfo struct { func (x *HealthInfo) Reset() { *x = HealthInfo{} - mi := &file_dex_proto_msgTypes[90] + mi := &file_dex_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7788,7 +7840,7 @@ func (x *HealthInfo) String() string { func (*HealthInfo) ProtoMessage() {} func (x *HealthInfo) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[90] + mi := &file_dex_proto_msgTypes[91] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7801,7 +7853,7 @@ func (x *HealthInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use HealthInfo.ProtoReflect.Descriptor instead. func (*HealthInfo) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{90} + return file_dex_proto_rawDescGZIP(), []int{91} } func (x *HealthInfo) GetCondition() string { @@ -7839,7 +7891,7 @@ type ServiceErrorResponse struct { func (x *ServiceErrorResponse) Reset() { *x = ServiceErrorResponse{} - mi := &file_dex_proto_msgTypes[91] + mi := &file_dex_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7851,7 +7903,7 @@ func (x *ServiceErrorResponse) String() string { func (*ServiceErrorResponse) ProtoMessage() {} func (x *ServiceErrorResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[91] + mi := &file_dex_proto_msgTypes[92] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7864,7 +7916,7 @@ func (x *ServiceErrorResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceErrorResponse.ProtoReflect.Descriptor instead. func (*ServiceErrorResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{91} + return file_dex_proto_rawDescGZIP(), []int{92} } func (x *ServiceErrorResponse) GetDetail() string { @@ -7921,7 +7973,7 @@ type WorkerErrorResponse struct { func (x *WorkerErrorResponse) Reset() { *x = WorkerErrorResponse{} - mi := &file_dex_proto_msgTypes[92] + mi := &file_dex_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7933,7 +7985,7 @@ func (x *WorkerErrorResponse) String() string { func (*WorkerErrorResponse) ProtoMessage() {} func (x *WorkerErrorResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[92] + mi := &file_dex_proto_msgTypes[93] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7946,7 +7998,7 @@ func (x *WorkerErrorResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkerErrorResponse.ProtoReflect.Descriptor instead. func (*WorkerErrorResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{92} + return file_dex_proto_rawDescGZIP(), []int{93} } func (x *WorkerErrorResponse) GetDetail() string { @@ -7988,7 +8040,7 @@ type InternalActivityError struct { func (x *InternalActivityError) Reset() { *x = InternalActivityError{} - mi := &file_dex_proto_msgTypes[93] + mi := &file_dex_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8000,7 +8052,7 @@ func (x *InternalActivityError) String() string { func (*InternalActivityError) ProtoMessage() {} func (x *InternalActivityError) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[93] + mi := &file_dex_proto_msgTypes[94] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8013,7 +8065,7 @@ func (x *InternalActivityError) ProtoReflect() protoreflect.Message { // Deprecated: Use InternalActivityError.ProtoReflect.Descriptor instead. func (*InternalActivityError) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{93} + return file_dex_proto_rawDescGZIP(), []int{94} } func (x *InternalActivityError) GetServerDetail() string { @@ -8048,7 +8100,7 @@ type InternalWorkerError struct { func (x *InternalWorkerError) Reset() { *x = InternalWorkerError{} - mi := &file_dex_proto_msgTypes[94] + mi := &file_dex_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8060,7 +8112,7 @@ func (x *InternalWorkerError) String() string { func (*InternalWorkerError) ProtoMessage() {} func (x *InternalWorkerError) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[94] + mi := &file_dex_proto_msgTypes[95] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8073,7 +8125,7 @@ func (x *InternalWorkerError) ProtoReflect() protoreflect.Message { // Deprecated: Use InternalWorkerError.ProtoReflect.Descriptor instead. func (*InternalWorkerError) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{94} + return file_dex_proto_rawDescGZIP(), []int{95} } func (x *InternalWorkerError) GetDetail() string { @@ -8110,7 +8162,7 @@ type InternalFlowError struct { func (x *InternalFlowError) Reset() { *x = InternalFlowError{} - mi := &file_dex_proto_msgTypes[95] + mi := &file_dex_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8122,7 +8174,7 @@ func (x *InternalFlowError) String() string { func (*InternalFlowError) ProtoMessage() {} func (x *InternalFlowError) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[95] + mi := &file_dex_proto_msgTypes[96] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8135,7 +8187,7 @@ func (x *InternalFlowError) ProtoReflect() protoreflect.Message { // Deprecated: Use InternalFlowError.ProtoReflect.Descriptor instead. func (*InternalFlowError) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{95} + return file_dex_proto_rawDescGZIP(), []int{96} } func (x *InternalFlowError) GetFailure() isInternalFlowError_Failure { @@ -8188,7 +8240,7 @@ type ChannelInfo struct { func (x *ChannelInfo) Reset() { *x = ChannelInfo{} - mi := &file_dex_proto_msgTypes[96] + mi := &file_dex_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8200,7 +8252,7 @@ func (x *ChannelInfo) String() string { func (*ChannelInfo) ProtoMessage() {} func (x *ChannelInfo) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[96] + mi := &file_dex_proto_msgTypes[97] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8213,7 +8265,7 @@ func (x *ChannelInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ChannelInfo.ProtoReflect.Descriptor instead. func (*ChannelInfo) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{96} + return file_dex_proto_rawDescGZIP(), []int{97} } func (x *ChannelInfo) GetSize() int32 { @@ -8241,7 +8293,7 @@ type InvokeWaitForMethodRequest struct { func (x *InvokeWaitForMethodRequest) Reset() { *x = InvokeWaitForMethodRequest{} - mi := &file_dex_proto_msgTypes[97] + mi := &file_dex_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8253,7 +8305,7 @@ func (x *InvokeWaitForMethodRequest) String() string { func (*InvokeWaitForMethodRequest) ProtoMessage() {} func (x *InvokeWaitForMethodRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[97] + mi := &file_dex_proto_msgTypes[98] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8266,7 +8318,7 @@ func (x *InvokeWaitForMethodRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeWaitForMethodRequest.ProtoReflect.Descriptor instead. func (*InvokeWaitForMethodRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{97} + return file_dex_proto_rawDescGZIP(), []int{98} } func (x *InvokeWaitForMethodRequest) GetContext() *Context { @@ -8355,7 +8407,7 @@ type InvokeWaitForMethodResponse struct { func (x *InvokeWaitForMethodResponse) Reset() { *x = InvokeWaitForMethodResponse{} - mi := &file_dex_proto_msgTypes[98] + mi := &file_dex_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8367,7 +8419,7 @@ func (x *InvokeWaitForMethodResponse) String() string { func (*InvokeWaitForMethodResponse) ProtoMessage() {} func (x *InvokeWaitForMethodResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[98] + mi := &file_dex_proto_msgTypes[99] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8380,7 +8432,7 @@ func (x *InvokeWaitForMethodResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeWaitForMethodResponse.ProtoReflect.Descriptor instead. func (*InvokeWaitForMethodResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{98} + return file_dex_proto_rawDescGZIP(), []int{99} } func (x *InvokeWaitForMethodResponse) GetLocalActivityMetadata() *LocalActivityMetadata { @@ -8441,7 +8493,7 @@ type StepMethodHeartbeat struct { func (x *StepMethodHeartbeat) Reset() { *x = StepMethodHeartbeat{} - mi := &file_dex_proto_msgTypes[99] + mi := &file_dex_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8453,7 +8505,7 @@ func (x *StepMethodHeartbeat) String() string { func (*StepMethodHeartbeat) ProtoMessage() {} func (x *StepMethodHeartbeat) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[99] + mi := &file_dex_proto_msgTypes[100] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8466,7 +8518,7 @@ func (x *StepMethodHeartbeat) ProtoReflect() protoreflect.Message { // Deprecated: Use StepMethodHeartbeat.ProtoReflect.Descriptor instead. func (*StepMethodHeartbeat) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{99} + return file_dex_proto_rawDescGZIP(), []int{100} } func (x *StepMethodHeartbeat) GetValue() *Value { @@ -8487,7 +8539,7 @@ type StepStreamWrite struct { func (x *StepStreamWrite) Reset() { *x = StepStreamWrite{} - mi := &file_dex_proto_msgTypes[100] + mi := &file_dex_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8499,7 +8551,7 @@ func (x *StepStreamWrite) String() string { func (*StepStreamWrite) ProtoMessage() {} func (x *StepStreamWrite) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[100] + mi := &file_dex_proto_msgTypes[101] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8512,7 +8564,7 @@ func (x *StepStreamWrite) ProtoReflect() protoreflect.Message { // Deprecated: Use StepStreamWrite.ProtoReflect.Descriptor instead. func (*StepStreamWrite) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{100} + return file_dex_proto_rawDescGZIP(), []int{101} } func (x *StepStreamWrite) GetStreamName() string { @@ -8550,7 +8602,7 @@ type InvokeWaitForMethodOutput struct { func (x *InvokeWaitForMethodOutput) Reset() { *x = InvokeWaitForMethodOutput{} - mi := &file_dex_proto_msgTypes[101] + mi := &file_dex_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8562,7 +8614,7 @@ func (x *InvokeWaitForMethodOutput) String() string { func (*InvokeWaitForMethodOutput) ProtoMessage() {} func (x *InvokeWaitForMethodOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[101] + mi := &file_dex_proto_msgTypes[102] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8575,7 +8627,7 @@ func (x *InvokeWaitForMethodOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeWaitForMethodOutput.ProtoReflect.Descriptor instead. func (*InvokeWaitForMethodOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{101} + return file_dex_proto_rawDescGZIP(), []int{102} } func (x *InvokeWaitForMethodOutput) GetOutput() isInvokeWaitForMethodOutput_Output { @@ -8654,7 +8706,7 @@ type InvokeExecuteMethodRequest struct { func (x *InvokeExecuteMethodRequest) Reset() { *x = InvokeExecuteMethodRequest{} - mi := &file_dex_proto_msgTypes[102] + mi := &file_dex_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8666,7 +8718,7 @@ func (x *InvokeExecuteMethodRequest) String() string { func (*InvokeExecuteMethodRequest) ProtoMessage() {} func (x *InvokeExecuteMethodRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[102] + mi := &file_dex_proto_msgTypes[103] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8679,7 +8731,7 @@ func (x *InvokeExecuteMethodRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeExecuteMethodRequest.ProtoReflect.Descriptor instead. func (*InvokeExecuteMethodRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{102} + return file_dex_proto_rawDescGZIP(), []int{103} } func (x *InvokeExecuteMethodRequest) GetContext() *Context { @@ -8782,7 +8834,7 @@ type InvokeExecuteMethodResponse struct { func (x *InvokeExecuteMethodResponse) Reset() { *x = InvokeExecuteMethodResponse{} - mi := &file_dex_proto_msgTypes[103] + mi := &file_dex_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8794,7 +8846,7 @@ func (x *InvokeExecuteMethodResponse) String() string { func (*InvokeExecuteMethodResponse) ProtoMessage() {} func (x *InvokeExecuteMethodResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[103] + mi := &file_dex_proto_msgTypes[104] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8807,7 +8859,7 @@ func (x *InvokeExecuteMethodResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeExecuteMethodResponse.ProtoReflect.Descriptor instead. func (*InvokeExecuteMethodResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{103} + return file_dex_proto_rawDescGZIP(), []int{104} } func (x *InvokeExecuteMethodResponse) GetLocalActivityMetadata() *LocalActivityMetadata { @@ -8873,7 +8925,7 @@ type InvokeExecuteMethodOutput struct { func (x *InvokeExecuteMethodOutput) Reset() { *x = InvokeExecuteMethodOutput{} - mi := &file_dex_proto_msgTypes[104] + mi := &file_dex_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8885,7 +8937,7 @@ func (x *InvokeExecuteMethodOutput) String() string { func (*InvokeExecuteMethodOutput) ProtoMessage() {} func (x *InvokeExecuteMethodOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[104] + mi := &file_dex_proto_msgTypes[105] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8898,7 +8950,7 @@ func (x *InvokeExecuteMethodOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeExecuteMethodOutput.ProtoReflect.Descriptor instead. func (*InvokeExecuteMethodOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{104} + return file_dex_proto_rawDescGZIP(), []int{105} } func (x *InvokeExecuteMethodOutput) GetOutput() isInvokeExecuteMethodOutput_Output { @@ -8975,7 +9027,7 @@ type InvokeWorkerRPCRequest struct { func (x *InvokeWorkerRPCRequest) Reset() { *x = InvokeWorkerRPCRequest{} - mi := &file_dex_proto_msgTypes[105] + mi := &file_dex_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8987,7 +9039,7 @@ func (x *InvokeWorkerRPCRequest) String() string { func (*InvokeWorkerRPCRequest) ProtoMessage() {} func (x *InvokeWorkerRPCRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[105] + mi := &file_dex_proto_msgTypes[106] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9000,7 +9052,7 @@ func (x *InvokeWorkerRPCRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeWorkerRPCRequest.ProtoReflect.Descriptor instead. func (*InvokeWorkerRPCRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{105} + return file_dex_proto_rawDescGZIP(), []int{106} } func (x *InvokeWorkerRPCRequest) GetContext() *Context { @@ -9087,7 +9139,7 @@ type InvokeWorkerRPCResponse struct { func (x *InvokeWorkerRPCResponse) Reset() { *x = InvokeWorkerRPCResponse{} - mi := &file_dex_proto_msgTypes[106] + mi := &file_dex_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9099,7 +9151,7 @@ func (x *InvokeWorkerRPCResponse) String() string { func (*InvokeWorkerRPCResponse) ProtoMessage() {} func (x *InvokeWorkerRPCResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[106] + mi := &file_dex_proto_msgTypes[107] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9112,7 +9164,7 @@ func (x *InvokeWorkerRPCResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeWorkerRPCResponse.ProtoReflect.Descriptor instead. func (*InvokeWorkerRPCResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{106} + return file_dex_proto_rawDescGZIP(), []int{107} } func (x *InvokeWorkerRPCResponse) GetOutput() *Value { @@ -9169,7 +9221,7 @@ type StepDecision struct { func (x *StepDecision) Reset() { *x = StepDecision{} - mi := &file_dex_proto_msgTypes[107] + mi := &file_dex_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9181,7 +9233,7 @@ func (x *StepDecision) String() string { func (*StepDecision) ProtoMessage() {} func (x *StepDecision) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[107] + mi := &file_dex_proto_msgTypes[108] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9194,7 +9246,7 @@ func (x *StepDecision) ProtoReflect() protoreflect.Message { // Deprecated: Use StepDecision.ProtoReflect.Descriptor instead. func (*StepDecision) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{107} + return file_dex_proto_rawDescGZIP(), []int{108} } func (x *StepDecision) GetNextSteps() []*StepMovement { @@ -9236,7 +9288,7 @@ type CloseDecision struct { func (x *CloseDecision) Reset() { *x = CloseDecision{} - mi := &file_dex_proto_msgTypes[108] + mi := &file_dex_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9248,7 +9300,7 @@ func (x *CloseDecision) String() string { func (*CloseDecision) ProtoMessage() {} func (x *CloseDecision) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[108] + mi := &file_dex_proto_msgTypes[109] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9261,7 +9313,7 @@ func (x *CloseDecision) ProtoReflect() protoreflect.Message { // Deprecated: Use CloseDecision.ProtoReflect.Descriptor instead. func (*CloseDecision) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{108} + return file_dex_proto_rawDescGZIP(), []int{109} } func (x *CloseDecision) GetCloseDecisionType() CloseDecisionType { @@ -9300,7 +9352,7 @@ type StepMovement struct { func (x *StepMovement) Reset() { *x = StepMovement{} - mi := &file_dex_proto_msgTypes[109] + mi := &file_dex_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9312,7 +9364,7 @@ func (x *StepMovement) String() string { func (*StepMovement) ProtoMessage() {} func (x *StepMovement) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[109] + mi := &file_dex_proto_msgTypes[110] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9325,7 +9377,7 @@ func (x *StepMovement) ProtoReflect() protoreflect.Message { // Deprecated: Use StepMovement.ProtoReflect.Descriptor instead. func (*StepMovement) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{109} + return file_dex_proto_rawDescGZIP(), []int{110} } func (x *StepMovement) GetStepType() string { @@ -9372,7 +9424,7 @@ type ConditionCombination struct { func (x *ConditionCombination) Reset() { *x = ConditionCombination{} - mi := &file_dex_proto_msgTypes[110] + mi := &file_dex_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9384,7 +9436,7 @@ func (x *ConditionCombination) String() string { func (*ConditionCombination) ProtoMessage() {} func (x *ConditionCombination) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[110] + mi := &file_dex_proto_msgTypes[111] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9397,7 +9449,7 @@ func (x *ConditionCombination) ProtoReflect() protoreflect.Message { // Deprecated: Use ConditionCombination.ProtoReflect.Descriptor instead. func (*ConditionCombination) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{110} + return file_dex_proto_rawDescGZIP(), []int{111} } func (x *ConditionCombination) GetConditionIds() []string { @@ -9420,7 +9472,7 @@ type WaitingCondition struct { func (x *WaitingCondition) Reset() { *x = WaitingCondition{} - mi := &file_dex_proto_msgTypes[111] + mi := &file_dex_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9432,7 +9484,7 @@ func (x *WaitingCondition) String() string { func (*WaitingCondition) ProtoMessage() {} func (x *WaitingCondition) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[111] + mi := &file_dex_proto_msgTypes[112] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9445,7 +9497,7 @@ func (x *WaitingCondition) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitingCondition.ProtoReflect.Descriptor instead. func (*WaitingCondition) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{111} + return file_dex_proto_rawDescGZIP(), []int{112} } func (x *WaitingCondition) GetWaitingConditionType() WaitingConditionType { @@ -9496,7 +9548,7 @@ type WaitingConditionState struct { func (x *WaitingConditionState) Reset() { *x = WaitingConditionState{} - mi := &file_dex_proto_msgTypes[112] + mi := &file_dex_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9508,7 +9560,7 @@ func (x *WaitingConditionState) String() string { func (*WaitingConditionState) ProtoMessage() {} func (x *WaitingConditionState) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[112] + mi := &file_dex_proto_msgTypes[113] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9521,7 +9573,7 @@ func (x *WaitingConditionState) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitingConditionState.ProtoReflect.Descriptor instead. func (*WaitingConditionState) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{112} + return file_dex_proto_rawDescGZIP(), []int{113} } func (x *WaitingConditionState) GetWaitingConditionType() WaitingConditionType { @@ -9575,7 +9627,7 @@ type SubFlowOptions struct { func (x *SubFlowOptions) Reset() { *x = SubFlowOptions{} - mi := &file_dex_proto_msgTypes[113] + mi := &file_dex_proto_msgTypes[114] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9587,7 +9639,7 @@ func (x *SubFlowOptions) String() string { func (*SubFlowOptions) ProtoMessage() {} func (x *SubFlowOptions) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[113] + mi := &file_dex_proto_msgTypes[114] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9600,7 +9652,7 @@ func (x *SubFlowOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use SubFlowOptions.ProtoReflect.Descriptor instead. func (*SubFlowOptions) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{113} + return file_dex_proto_rawDescGZIP(), []int{114} } func (x *SubFlowOptions) GetReusePolicy() SubFlowReusePolicy { @@ -9675,7 +9727,7 @@ type SubFlowCondition struct { func (x *SubFlowCondition) Reset() { *x = SubFlowCondition{} - mi := &file_dex_proto_msgTypes[114] + mi := &file_dex_proto_msgTypes[115] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9687,7 +9739,7 @@ func (x *SubFlowCondition) String() string { func (*SubFlowCondition) ProtoMessage() {} func (x *SubFlowCondition) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[114] + mi := &file_dex_proto_msgTypes[115] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9700,7 +9752,7 @@ func (x *SubFlowCondition) ProtoReflect() protoreflect.Message { // Deprecated: Use SubFlowCondition.ProtoReflect.Descriptor instead. func (*SubFlowCondition) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{114} + return file_dex_proto_rawDescGZIP(), []int{115} } func (x *SubFlowCondition) GetConditionId() string { @@ -9761,7 +9813,7 @@ type SubFlowConditionState struct { func (x *SubFlowConditionState) Reset() { *x = SubFlowConditionState{} - mi := &file_dex_proto_msgTypes[115] + mi := &file_dex_proto_msgTypes[116] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9773,7 +9825,7 @@ func (x *SubFlowConditionState) String() string { func (*SubFlowConditionState) ProtoMessage() {} func (x *SubFlowConditionState) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[115] + mi := &file_dex_proto_msgTypes[116] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9786,7 +9838,7 @@ func (x *SubFlowConditionState) ProtoReflect() protoreflect.Message { // Deprecated: Use SubFlowConditionState.ProtoReflect.Descriptor instead. func (*SubFlowConditionState) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{115} + return file_dex_proto_rawDescGZIP(), []int{116} } func (x *SubFlowConditionState) GetConditionId() string { @@ -9810,7 +9862,7 @@ type TimerCondition struct { func (x *TimerCondition) Reset() { *x = TimerCondition{} - mi := &file_dex_proto_msgTypes[116] + mi := &file_dex_proto_msgTypes[117] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9822,7 +9874,7 @@ func (x *TimerCondition) String() string { func (*TimerCondition) ProtoMessage() {} func (x *TimerCondition) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[116] + mi := &file_dex_proto_msgTypes[117] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9835,7 +9887,7 @@ func (x *TimerCondition) ProtoReflect() protoreflect.Message { // Deprecated: Use TimerCondition.ProtoReflect.Descriptor instead. func (*TimerCondition) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{116} + return file_dex_proto_rawDescGZIP(), []int{117} } func (x *TimerCondition) GetConditionId() string { @@ -9873,7 +9925,7 @@ type ChannelCondition struct { func (x *ChannelCondition) Reset() { *x = ChannelCondition{} - mi := &file_dex_proto_msgTypes[117] + mi := &file_dex_proto_msgTypes[118] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9885,7 +9937,7 @@ func (x *ChannelCondition) String() string { func (*ChannelCondition) ProtoMessage() {} func (x *ChannelCondition) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[117] + mi := &file_dex_proto_msgTypes[118] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9898,7 +9950,7 @@ func (x *ChannelCondition) ProtoReflect() protoreflect.Message { // Deprecated: Use ChannelCondition.ProtoReflect.Descriptor instead. func (*ChannelCondition) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{117} + return file_dex_proto_rawDescGZIP(), []int{118} } func (x *ChannelCondition) GetConditionId() string { @@ -9941,7 +9993,7 @@ type ConditionResults struct { func (x *ConditionResults) Reset() { *x = ConditionResults{} - mi := &file_dex_proto_msgTypes[118] + mi := &file_dex_proto_msgTypes[119] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9953,7 +10005,7 @@ func (x *ConditionResults) String() string { func (*ConditionResults) ProtoMessage() {} func (x *ConditionResults) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[118] + mi := &file_dex_proto_msgTypes[119] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9966,7 +10018,7 @@ func (x *ConditionResults) ProtoReflect() protoreflect.Message { // Deprecated: Use ConditionResults.ProtoReflect.Descriptor instead. func (*ConditionResults) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{118} + return file_dex_proto_rawDescGZIP(), []int{119} } func (x *ConditionResults) GetChannelResults() []*ChannelResult { @@ -10007,7 +10059,7 @@ type TimerResult struct { func (x *TimerResult) Reset() { *x = TimerResult{} - mi := &file_dex_proto_msgTypes[119] + mi := &file_dex_proto_msgTypes[120] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10019,7 +10071,7 @@ func (x *TimerResult) String() string { func (*TimerResult) ProtoMessage() {} func (x *TimerResult) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[119] + mi := &file_dex_proto_msgTypes[120] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10032,7 +10084,7 @@ func (x *TimerResult) ProtoReflect() protoreflect.Message { // Deprecated: Use TimerResult.ProtoReflect.Descriptor instead. func (*TimerResult) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{119} + return file_dex_proto_rawDescGZIP(), []int{120} } func (x *TimerResult) GetConditionId() string { @@ -10061,7 +10113,7 @@ type ChannelResult struct { func (x *ChannelResult) Reset() { *x = ChannelResult{} - mi := &file_dex_proto_msgTypes[120] + mi := &file_dex_proto_msgTypes[121] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10073,7 +10125,7 @@ func (x *ChannelResult) String() string { func (*ChannelResult) ProtoMessage() {} func (x *ChannelResult) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[120] + mi := &file_dex_proto_msgTypes[121] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10086,7 +10138,7 @@ func (x *ChannelResult) ProtoReflect() protoreflect.Message { // Deprecated: Use ChannelResult.ProtoReflect.Descriptor instead. func (*ChannelResult) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{120} + return file_dex_proto_rawDescGZIP(), []int{121} } func (x *ChannelResult) GetConditionId() string { @@ -10129,7 +10181,7 @@ type ContinueAsNewDumpRequest struct { func (x *ContinueAsNewDumpRequest) Reset() { *x = ContinueAsNewDumpRequest{} - mi := &file_dex_proto_msgTypes[121] + mi := &file_dex_proto_msgTypes[122] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10141,7 +10193,7 @@ func (x *ContinueAsNewDumpRequest) String() string { func (*ContinueAsNewDumpRequest) ProtoMessage() {} func (x *ContinueAsNewDumpRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[121] + mi := &file_dex_proto_msgTypes[122] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10154,7 +10206,7 @@ func (x *ContinueAsNewDumpRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ContinueAsNewDumpRequest.ProtoReflect.Descriptor instead. func (*ContinueAsNewDumpRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{121} + return file_dex_proto_rawDescGZIP(), []int{122} } func (x *ContinueAsNewDumpRequest) GetFlowId() string { @@ -10199,7 +10251,7 @@ type ContinueAsNewDumpResponse struct { func (x *ContinueAsNewDumpResponse) Reset() { *x = ContinueAsNewDumpResponse{} - mi := &file_dex_proto_msgTypes[122] + mi := &file_dex_proto_msgTypes[123] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10211,7 +10263,7 @@ func (x *ContinueAsNewDumpResponse) String() string { func (*ContinueAsNewDumpResponse) ProtoMessage() {} func (x *ContinueAsNewDumpResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[122] + mi := &file_dex_proto_msgTypes[123] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10224,7 +10276,7 @@ func (x *ContinueAsNewDumpResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ContinueAsNewDumpResponse.ProtoReflect.Descriptor instead. func (*ContinueAsNewDumpResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{122} + return file_dex_proto_rawDescGZIP(), []int{123} } func (x *ContinueAsNewDumpResponse) GetPageContent() []byte { @@ -10264,7 +10316,7 @@ type ChannelValues struct { func (x *ChannelValues) Reset() { *x = ChannelValues{} - mi := &file_dex_proto_msgTypes[123] + mi := &file_dex_proto_msgTypes[124] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10276,7 +10328,7 @@ func (x *ChannelValues) String() string { func (*ChannelValues) ProtoMessage() {} func (x *ChannelValues) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[123] + mi := &file_dex_proto_msgTypes[124] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10289,7 +10341,7 @@ func (x *ChannelValues) ProtoReflect() protoreflect.Message { // Deprecated: Use ChannelValues.ProtoReflect.Descriptor instead. func (*ChannelValues) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{123} + return file_dex_proto_rawDescGZIP(), []int{124} } func (x *ChannelValues) GetMessages() []*ChannelMessage { @@ -10309,7 +10361,7 @@ type StepExecutionCompletedConditions struct { func (x *StepExecutionCompletedConditions) Reset() { *x = StepExecutionCompletedConditions{} - mi := &file_dex_proto_msgTypes[124] + mi := &file_dex_proto_msgTypes[125] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10321,7 +10373,7 @@ func (x *StepExecutionCompletedConditions) String() string { func (*StepExecutionCompletedConditions) ProtoMessage() {} func (x *StepExecutionCompletedConditions) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[124] + mi := &file_dex_proto_msgTypes[125] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10334,7 +10386,7 @@ func (x *StepExecutionCompletedConditions) ProtoReflect() protoreflect.Message { // Deprecated: Use StepExecutionCompletedConditions.ProtoReflect.Descriptor instead. func (*StepExecutionCompletedConditions) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{124} + return file_dex_proto_rawDescGZIP(), []int{125} } func (x *StepExecutionCompletedConditions) GetCompletedTimerConditions() map[int32]InternalTimerStatus { @@ -10364,7 +10416,7 @@ type StepExecutionResumeInfo struct { func (x *StepExecutionResumeInfo) Reset() { *x = StepExecutionResumeInfo{} - mi := &file_dex_proto_msgTypes[125] + mi := &file_dex_proto_msgTypes[126] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10376,7 +10428,7 @@ func (x *StepExecutionResumeInfo) String() string { func (*StepExecutionResumeInfo) ProtoMessage() {} func (x *StepExecutionResumeInfo) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[125] + mi := &file_dex_proto_msgTypes[126] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10389,7 +10441,7 @@ func (x *StepExecutionResumeInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use StepExecutionResumeInfo.ProtoReflect.Descriptor instead. func (*StepExecutionResumeInfo) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{125} + return file_dex_proto_rawDescGZIP(), []int{126} } func (x *StepExecutionResumeInfo) GetStepExecutionId() string { @@ -10439,7 +10491,7 @@ type StepExecutionCounterInfo struct { func (x *StepExecutionCounterInfo) Reset() { *x = StepExecutionCounterInfo{} - mi := &file_dex_proto_msgTypes[126] + mi := &file_dex_proto_msgTypes[127] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10451,7 +10503,7 @@ func (x *StepExecutionCounterInfo) String() string { func (*StepExecutionCounterInfo) ProtoMessage() {} func (x *StepExecutionCounterInfo) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[126] + mi := &file_dex_proto_msgTypes[127] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10464,7 +10516,7 @@ func (x *StepExecutionCounterInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use StepExecutionCounterInfo.ProtoReflect.Descriptor instead. func (*StepExecutionCounterInfo) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{126} + return file_dex_proto_rawDescGZIP(), []int{127} } func (x *StepExecutionCounterInfo) GetStepTypeStartedCount() map[string]int32 { @@ -10506,7 +10558,7 @@ type StaleSkipTimer struct { func (x *StaleSkipTimer) Reset() { *x = StaleSkipTimer{} - mi := &file_dex_proto_msgTypes[127] + mi := &file_dex_proto_msgTypes[128] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10518,7 +10570,7 @@ func (x *StaleSkipTimer) String() string { func (*StaleSkipTimer) ProtoMessage() {} func (x *StaleSkipTimer) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[127] + mi := &file_dex_proto_msgTypes[128] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10531,7 +10583,7 @@ func (x *StaleSkipTimer) ProtoReflect() protoreflect.Message { // Deprecated: Use StaleSkipTimer.ProtoReflect.Descriptor instead. func (*StaleSkipTimer) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{127} + return file_dex_proto_rawDescGZIP(), []int{128} } func (x *StaleSkipTimer) GetStepExecutionId() string { @@ -10572,7 +10624,7 @@ type ContinueAsNewDump struct { func (x *ContinueAsNewDump) Reset() { *x = ContinueAsNewDump{} - mi := &file_dex_proto_msgTypes[128] + mi := &file_dex_proto_msgTypes[129] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10584,7 +10636,7 @@ func (x *ContinueAsNewDump) String() string { func (*ContinueAsNewDump) ProtoMessage() {} func (x *ContinueAsNewDump) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[128] + mi := &file_dex_proto_msgTypes[129] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10597,7 +10649,7 @@ func (x *ContinueAsNewDump) ProtoReflect() protoreflect.Message { // Deprecated: Use ContinueAsNewDump.ProtoReflect.Descriptor instead. func (*ContinueAsNewDump) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{128} + return file_dex_proto_rawDescGZIP(), []int{129} } func (x *ContinueAsNewDump) GetStepsToStartFromBeginning() []*StepMovement { @@ -10665,7 +10717,7 @@ type ContinueAsNewInput struct { func (x *ContinueAsNewInput) Reset() { *x = ContinueAsNewInput{} - mi := &file_dex_proto_msgTypes[129] + mi := &file_dex_proto_msgTypes[130] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10677,7 +10729,7 @@ func (x *ContinueAsNewInput) String() string { func (*ContinueAsNewInput) ProtoMessage() {} func (x *ContinueAsNewInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[129] + mi := &file_dex_proto_msgTypes[130] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10690,7 +10742,7 @@ func (x *ContinueAsNewInput) ProtoReflect() protoreflect.Message { // Deprecated: Use ContinueAsNewInput.ProtoReflect.Descriptor instead. func (*ContinueAsNewInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{129} + return file_dex_proto_rawDescGZIP(), []int{130} } func (x *ContinueAsNewInput) GetPreviousInternalRunId() string { @@ -10720,7 +10772,7 @@ type InterpreterWorkflowInput struct { func (x *InterpreterWorkflowInput) Reset() { *x = InterpreterWorkflowInput{} - mi := &file_dex_proto_msgTypes[130] + mi := &file_dex_proto_msgTypes[131] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10732,7 +10784,7 @@ func (x *InterpreterWorkflowInput) String() string { func (*InterpreterWorkflowInput) ProtoMessage() {} func (x *InterpreterWorkflowInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[130] + mi := &file_dex_proto_msgTypes[131] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10745,7 +10797,7 @@ func (x *InterpreterWorkflowInput) ProtoReflect() protoreflect.Message { // Deprecated: Use InterpreterWorkflowInput.ProtoReflect.Descriptor instead. func (*InterpreterWorkflowInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{130} + return file_dex_proto_rawDescGZIP(), []int{131} } func (x *InterpreterWorkflowInput) GetFlowType() string { @@ -10834,7 +10886,7 @@ type InterpreterWorkflowOutput struct { func (x *InterpreterWorkflowOutput) Reset() { *x = InterpreterWorkflowOutput{} - mi := &file_dex_proto_msgTypes[131] + mi := &file_dex_proto_msgTypes[132] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10846,7 +10898,7 @@ func (x *InterpreterWorkflowOutput) String() string { func (*InterpreterWorkflowOutput) ProtoMessage() {} func (x *InterpreterWorkflowOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[131] + mi := &file_dex_proto_msgTypes[132] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10859,7 +10911,7 @@ func (x *InterpreterWorkflowOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use InterpreterWorkflowOutput.ProtoReflect.Descriptor instead. func (*InterpreterWorkflowOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{131} + return file_dex_proto_rawDescGZIP(), []int{132} } func (x *InterpreterWorkflowOutput) GetStepCompletionOutputs() []*StepCompletionOutput { @@ -10878,7 +10930,7 @@ type BlobStoreCleanupWorkflowInput struct { func (x *BlobStoreCleanupWorkflowInput) Reset() { *x = BlobStoreCleanupWorkflowInput{} - mi := &file_dex_proto_msgTypes[132] + mi := &file_dex_proto_msgTypes[133] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10890,7 +10942,7 @@ func (x *BlobStoreCleanupWorkflowInput) String() string { func (*BlobStoreCleanupWorkflowInput) ProtoMessage() {} func (x *BlobStoreCleanupWorkflowInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[132] + mi := &file_dex_proto_msgTypes[133] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10903,7 +10955,7 @@ func (x *BlobStoreCleanupWorkflowInput) ProtoReflect() protoreflect.Message { // Deprecated: Use BlobStoreCleanupWorkflowInput.ProtoReflect.Descriptor instead. func (*BlobStoreCleanupWorkflowInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{132} + return file_dex_proto_rawDescGZIP(), []int{133} } func (x *BlobStoreCleanupWorkflowInput) GetStoreId() string { @@ -10922,7 +10974,7 @@ type BlobStoreCleanupWorkflowOutput struct { func (x *BlobStoreCleanupWorkflowOutput) Reset() { *x = BlobStoreCleanupWorkflowOutput{} - mi := &file_dex_proto_msgTypes[133] + mi := &file_dex_proto_msgTypes[134] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10934,7 +10986,7 @@ func (x *BlobStoreCleanupWorkflowOutput) String() string { func (*BlobStoreCleanupWorkflowOutput) ProtoMessage() {} func (x *BlobStoreCleanupWorkflowOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[133] + mi := &file_dex_proto_msgTypes[134] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10947,7 +10999,7 @@ func (x *BlobStoreCleanupWorkflowOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use BlobStoreCleanupWorkflowOutput.ProtoReflect.Descriptor instead. func (*BlobStoreCleanupWorkflowOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{133} + return file_dex_proto_rawDescGZIP(), []int{134} } func (x *BlobStoreCleanupWorkflowOutput) GetTotalDeleted() int32 { @@ -10967,7 +11019,7 @@ type InvokeWaitForMethodActivityInput struct { func (x *InvokeWaitForMethodActivityInput) Reset() { *x = InvokeWaitForMethodActivityInput{} - mi := &file_dex_proto_msgTypes[134] + mi := &file_dex_proto_msgTypes[135] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10979,7 +11031,7 @@ func (x *InvokeWaitForMethodActivityInput) String() string { func (*InvokeWaitForMethodActivityInput) ProtoMessage() {} func (x *InvokeWaitForMethodActivityInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[134] + mi := &file_dex_proto_msgTypes[135] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10992,7 +11044,7 @@ func (x *InvokeWaitForMethodActivityInput) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeWaitForMethodActivityInput.ProtoReflect.Descriptor instead. func (*InvokeWaitForMethodActivityInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{134} + return file_dex_proto_rawDescGZIP(), []int{135} } func (x *InvokeWaitForMethodActivityInput) GetWorkerTarget() *WorkerTarget { @@ -11018,7 +11070,7 @@ type InvokeWaitForMethodActivityOutput struct { func (x *InvokeWaitForMethodActivityOutput) Reset() { *x = InvokeWaitForMethodActivityOutput{} - mi := &file_dex_proto_msgTypes[135] + mi := &file_dex_proto_msgTypes[136] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11030,7 +11082,7 @@ func (x *InvokeWaitForMethodActivityOutput) String() string { func (*InvokeWaitForMethodActivityOutput) ProtoMessage() {} func (x *InvokeWaitForMethodActivityOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[135] + mi := &file_dex_proto_msgTypes[136] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11043,7 +11095,7 @@ func (x *InvokeWaitForMethodActivityOutput) ProtoReflect() protoreflect.Message // Deprecated: Use InvokeWaitForMethodActivityOutput.ProtoReflect.Descriptor instead. func (*InvokeWaitForMethodActivityOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{135} + return file_dex_proto_rawDescGZIP(), []int{136} } func (x *InvokeWaitForMethodActivityOutput) GetResponse() *InvokeWaitForMethodResponse { @@ -11063,7 +11115,7 @@ type InvokeExecuteMethodActivityInput struct { func (x *InvokeExecuteMethodActivityInput) Reset() { *x = InvokeExecuteMethodActivityInput{} - mi := &file_dex_proto_msgTypes[136] + mi := &file_dex_proto_msgTypes[137] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11075,7 +11127,7 @@ func (x *InvokeExecuteMethodActivityInput) String() string { func (*InvokeExecuteMethodActivityInput) ProtoMessage() {} func (x *InvokeExecuteMethodActivityInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[136] + mi := &file_dex_proto_msgTypes[137] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11088,7 +11140,7 @@ func (x *InvokeExecuteMethodActivityInput) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeExecuteMethodActivityInput.ProtoReflect.Descriptor instead. func (*InvokeExecuteMethodActivityInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{136} + return file_dex_proto_rawDescGZIP(), []int{137} } func (x *InvokeExecuteMethodActivityInput) GetWorkerTarget() *WorkerTarget { @@ -11115,7 +11167,7 @@ type RecoveryErrorInfo struct { func (x *RecoveryErrorInfo) Reset() { *x = RecoveryErrorInfo{} - mi := &file_dex_proto_msgTypes[137] + mi := &file_dex_proto_msgTypes[138] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11127,7 +11179,7 @@ func (x *RecoveryErrorInfo) String() string { func (*RecoveryErrorInfo) ProtoMessage() {} func (x *RecoveryErrorInfo) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[137] + mi := &file_dex_proto_msgTypes[138] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11140,7 +11192,7 @@ func (x *RecoveryErrorInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use RecoveryErrorInfo.ProtoReflect.Descriptor instead. func (*RecoveryErrorInfo) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{137} + return file_dex_proto_rawDescGZIP(), []int{138} } func (x *RecoveryErrorInfo) GetDetail() string { @@ -11170,7 +11222,7 @@ type InternalLocalStepActivityFailure struct { func (x *InternalLocalStepActivityFailure) Reset() { *x = InternalLocalStepActivityFailure{} - mi := &file_dex_proto_msgTypes[138] + mi := &file_dex_proto_msgTypes[139] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11182,7 +11234,7 @@ func (x *InternalLocalStepActivityFailure) String() string { func (*InternalLocalStepActivityFailure) ProtoMessage() {} func (x *InternalLocalStepActivityFailure) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[138] + mi := &file_dex_proto_msgTypes[139] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11195,7 +11247,7 @@ func (x *InternalLocalStepActivityFailure) ProtoReflect() protoreflect.Message { // Deprecated: Use InternalLocalStepActivityFailure.ProtoReflect.Descriptor instead. func (*InternalLocalStepActivityFailure) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{138} + return file_dex_proto_rawDescGZIP(), []int{139} } func (x *InternalLocalStepActivityFailure) GetLocalActivityMetadata() *LocalActivityMetadata { @@ -11242,7 +11294,7 @@ type InvokeExecuteMethodActivityOutput struct { func (x *InvokeExecuteMethodActivityOutput) Reset() { *x = InvokeExecuteMethodActivityOutput{} - mi := &file_dex_proto_msgTypes[139] + mi := &file_dex_proto_msgTypes[140] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11254,7 +11306,7 @@ func (x *InvokeExecuteMethodActivityOutput) String() string { func (*InvokeExecuteMethodActivityOutput) ProtoMessage() {} func (x *InvokeExecuteMethodActivityOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[139] + mi := &file_dex_proto_msgTypes[140] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11267,7 +11319,7 @@ func (x *InvokeExecuteMethodActivityOutput) ProtoReflect() protoreflect.Message // Deprecated: Use InvokeExecuteMethodActivityOutput.ProtoReflect.Descriptor instead. func (*InvokeExecuteMethodActivityOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{139} + return file_dex_proto_rawDescGZIP(), []int{140} } func (x *InvokeExecuteMethodActivityOutput) GetResponse() *InvokeExecuteMethodResponse { @@ -11286,7 +11338,7 @@ type DumpFlowForContinueAsNewActivityInput struct { func (x *DumpFlowForContinueAsNewActivityInput) Reset() { *x = DumpFlowForContinueAsNewActivityInput{} - mi := &file_dex_proto_msgTypes[140] + mi := &file_dex_proto_msgTypes[141] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11298,7 +11350,7 @@ func (x *DumpFlowForContinueAsNewActivityInput) String() string { func (*DumpFlowForContinueAsNewActivityInput) ProtoMessage() {} func (x *DumpFlowForContinueAsNewActivityInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[140] + mi := &file_dex_proto_msgTypes[141] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11311,7 +11363,7 @@ func (x *DumpFlowForContinueAsNewActivityInput) ProtoReflect() protoreflect.Mess // Deprecated: Use DumpFlowForContinueAsNewActivityInput.ProtoReflect.Descriptor instead. func (*DumpFlowForContinueAsNewActivityInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{140} + return file_dex_proto_rawDescGZIP(), []int{141} } func (x *DumpFlowForContinueAsNewActivityInput) GetRequest() *ContinueAsNewDumpRequest { @@ -11330,7 +11382,7 @@ type DumpFlowForContinueAsNewActivityOutput struct { func (x *DumpFlowForContinueAsNewActivityOutput) Reset() { *x = DumpFlowForContinueAsNewActivityOutput{} - mi := &file_dex_proto_msgTypes[141] + mi := &file_dex_proto_msgTypes[142] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11342,7 +11394,7 @@ func (x *DumpFlowForContinueAsNewActivityOutput) String() string { func (*DumpFlowForContinueAsNewActivityOutput) ProtoMessage() {} func (x *DumpFlowForContinueAsNewActivityOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[141] + mi := &file_dex_proto_msgTypes[142] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11355,7 +11407,7 @@ func (x *DumpFlowForContinueAsNewActivityOutput) ProtoReflect() protoreflect.Mes // Deprecated: Use DumpFlowForContinueAsNewActivityOutput.ProtoReflect.Descriptor instead. func (*DumpFlowForContinueAsNewActivityOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{141} + return file_dex_proto_rawDescGZIP(), []int{142} } func (x *DumpFlowForContinueAsNewActivityOutput) GetResponse() *ContinueAsNewDumpResponse { @@ -11375,7 +11427,7 @@ type InvokeWorkerRPCActivityInput struct { func (x *InvokeWorkerRPCActivityInput) Reset() { *x = InvokeWorkerRPCActivityInput{} - mi := &file_dex_proto_msgTypes[142] + mi := &file_dex_proto_msgTypes[143] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11387,7 +11439,7 @@ func (x *InvokeWorkerRPCActivityInput) String() string { func (*InvokeWorkerRPCActivityInput) ProtoMessage() {} func (x *InvokeWorkerRPCActivityInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[142] + mi := &file_dex_proto_msgTypes[143] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11400,7 +11452,7 @@ func (x *InvokeWorkerRPCActivityInput) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeWorkerRPCActivityInput.ProtoReflect.Descriptor instead. func (*InvokeWorkerRPCActivityInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{142} + return file_dex_proto_rawDescGZIP(), []int{143} } func (x *InvokeWorkerRPCActivityInput) GetRpcPrep() *PrepareRpcQueryResponse { @@ -11428,7 +11480,7 @@ type InvokeWorkerRPCActivityOutput struct { func (x *InvokeWorkerRPCActivityOutput) Reset() { *x = InvokeWorkerRPCActivityOutput{} - mi := &file_dex_proto_msgTypes[143] + mi := &file_dex_proto_msgTypes[144] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11440,7 +11492,7 @@ func (x *InvokeWorkerRPCActivityOutput) String() string { func (*InvokeWorkerRPCActivityOutput) ProtoMessage() {} func (x *InvokeWorkerRPCActivityOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[143] + mi := &file_dex_proto_msgTypes[144] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11453,7 +11505,7 @@ func (x *InvokeWorkerRPCActivityOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeWorkerRPCActivityOutput.ProtoReflect.Descriptor instead. func (*InvokeWorkerRPCActivityOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{143} + return file_dex_proto_rawDescGZIP(), []int{144} } func (x *InvokeWorkerRPCActivityOutput) GetResponse() *InvokeWorkerRPCResponse { @@ -11479,7 +11531,7 @@ type CleanupBlobStoreActivityInput struct { func (x *CleanupBlobStoreActivityInput) Reset() { *x = CleanupBlobStoreActivityInput{} - mi := &file_dex_proto_msgTypes[144] + mi := &file_dex_proto_msgTypes[145] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11491,7 +11543,7 @@ func (x *CleanupBlobStoreActivityInput) String() string { func (*CleanupBlobStoreActivityInput) ProtoMessage() {} func (x *CleanupBlobStoreActivityInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[144] + mi := &file_dex_proto_msgTypes[145] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11504,7 +11556,7 @@ func (x *CleanupBlobStoreActivityInput) ProtoReflect() protoreflect.Message { // Deprecated: Use CleanupBlobStoreActivityInput.ProtoReflect.Descriptor instead. func (*CleanupBlobStoreActivityInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{144} + return file_dex_proto_rawDescGZIP(), []int{145} } func (x *CleanupBlobStoreActivityInput) GetStoreId() string { @@ -11523,7 +11575,7 @@ type CleanupBlobStoreActivityOutput struct { func (x *CleanupBlobStoreActivityOutput) Reset() { *x = CleanupBlobStoreActivityOutput{} - mi := &file_dex_proto_msgTypes[145] + mi := &file_dex_proto_msgTypes[146] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11535,7 +11587,7 @@ func (x *CleanupBlobStoreActivityOutput) String() string { func (*CleanupBlobStoreActivityOutput) ProtoMessage() {} func (x *CleanupBlobStoreActivityOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[145] + mi := &file_dex_proto_msgTypes[146] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11548,7 +11600,7 @@ func (x *CleanupBlobStoreActivityOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use CleanupBlobStoreActivityOutput.ProtoReflect.Descriptor instead. func (*CleanupBlobStoreActivityOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{145} + return file_dex_proto_rawDescGZIP(), []int{146} } func (x *CleanupBlobStoreActivityOutput) GetTotalDeleted() int32 { @@ -11569,7 +11621,7 @@ type AttributeSyncItem struct { func (x *AttributeSyncItem) Reset() { *x = AttributeSyncItem{} - mi := &file_dex_proto_msgTypes[146] + mi := &file_dex_proto_msgTypes[147] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11581,7 +11633,7 @@ func (x *AttributeSyncItem) String() string { func (*AttributeSyncItem) ProtoMessage() {} func (x *AttributeSyncItem) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[146] + mi := &file_dex_proto_msgTypes[147] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11594,7 +11646,7 @@ func (x *AttributeSyncItem) ProtoReflect() protoreflect.Message { // Deprecated: Use AttributeSyncItem.ProtoReflect.Descriptor instead. func (*AttributeSyncItem) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{146} + return file_dex_proto_rawDescGZIP(), []int{147} } func (x *AttributeSyncItem) GetConfigName() string { @@ -11629,7 +11681,7 @@ type SyncAttributeBatchActivityInput struct { func (x *SyncAttributeBatchActivityInput) Reset() { *x = SyncAttributeBatchActivityInput{} - mi := &file_dex_proto_msgTypes[147] + mi := &file_dex_proto_msgTypes[148] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11641,7 +11693,7 @@ func (x *SyncAttributeBatchActivityInput) String() string { func (*SyncAttributeBatchActivityInput) ProtoMessage() {} func (x *SyncAttributeBatchActivityInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[147] + mi := &file_dex_proto_msgTypes[148] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11654,7 +11706,7 @@ func (x *SyncAttributeBatchActivityInput) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAttributeBatchActivityInput.ProtoReflect.Descriptor instead. func (*SyncAttributeBatchActivityInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{147} + return file_dex_proto_rawDescGZIP(), []int{148} } func (x *SyncAttributeBatchActivityInput) GetFlowId() string { @@ -11690,7 +11742,7 @@ type StartSubFlowActivityInput struct { func (x *StartSubFlowActivityInput) Reset() { *x = StartSubFlowActivityInput{} - mi := &file_dex_proto_msgTypes[148] + mi := &file_dex_proto_msgTypes[149] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11702,7 +11754,7 @@ func (x *StartSubFlowActivityInput) String() string { func (*StartSubFlowActivityInput) ProtoMessage() {} func (x *StartSubFlowActivityInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[148] + mi := &file_dex_proto_msgTypes[149] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11715,7 +11767,7 @@ func (x *StartSubFlowActivityInput) ProtoReflect() protoreflect.Message { // Deprecated: Use StartSubFlowActivityInput.ProtoReflect.Descriptor instead. func (*StartSubFlowActivityInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{148} + return file_dex_proto_rawDescGZIP(), []int{149} } func (x *StartSubFlowActivityInput) GetCondition() *SubFlowCondition { @@ -11748,7 +11800,7 @@ type StartSubFlowActivityOutput struct { func (x *StartSubFlowActivityOutput) Reset() { *x = StartSubFlowActivityOutput{} - mi := &file_dex_proto_msgTypes[149] + mi := &file_dex_proto_msgTypes[150] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11760,7 +11812,7 @@ func (x *StartSubFlowActivityOutput) String() string { func (*StartSubFlowActivityOutput) ProtoMessage() {} func (x *StartSubFlowActivityOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[149] + mi := &file_dex_proto_msgTypes[150] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11773,7 +11825,7 @@ func (x *StartSubFlowActivityOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use StartSubFlowActivityOutput.ProtoReflect.Descriptor instead. func (*StartSubFlowActivityOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{149} + return file_dex_proto_rawDescGZIP(), []int{150} } func (x *StartSubFlowActivityOutput) GetImmediateFlowResult() *FlowResult { @@ -11793,7 +11845,7 @@ type SubFlowCompletionSignalRequest struct { func (x *SubFlowCompletionSignalRequest) Reset() { *x = SubFlowCompletionSignalRequest{} - mi := &file_dex_proto_msgTypes[150] + mi := &file_dex_proto_msgTypes[151] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11805,7 +11857,7 @@ func (x *SubFlowCompletionSignalRequest) String() string { func (*SubFlowCompletionSignalRequest) ProtoMessage() {} func (x *SubFlowCompletionSignalRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[150] + mi := &file_dex_proto_msgTypes[151] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11818,7 +11870,7 @@ func (x *SubFlowCompletionSignalRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubFlowCompletionSignalRequest.ProtoReflect.Descriptor instead. func (*SubFlowCompletionSignalRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{150} + return file_dex_proto_rawDescGZIP(), []int{151} } func (x *SubFlowCompletionSignalRequest) GetSubFlowId() string { @@ -11845,7 +11897,7 @@ type ReportSubFlowCompletionActivityInput struct { func (x *ReportSubFlowCompletionActivityInput) Reset() { *x = ReportSubFlowCompletionActivityInput{} - mi := &file_dex_proto_msgTypes[151] + mi := &file_dex_proto_msgTypes[152] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11857,7 +11909,7 @@ func (x *ReportSubFlowCompletionActivityInput) String() string { func (*ReportSubFlowCompletionActivityInput) ProtoMessage() {} func (x *ReportSubFlowCompletionActivityInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[151] + mi := &file_dex_proto_msgTypes[152] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11870,7 +11922,7 @@ func (x *ReportSubFlowCompletionActivityInput) ProtoReflect() protoreflect.Messa // Deprecated: Use ReportSubFlowCompletionActivityInput.ProtoReflect.Descriptor instead. func (*ReportSubFlowCompletionActivityInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{151} + return file_dex_proto_rawDescGZIP(), []int{152} } func (x *ReportSubFlowCompletionActivityInput) GetParentFlowId() string { @@ -11896,7 +11948,7 @@ type ReportSubFlowCompletionActivityOutput struct { func (x *ReportSubFlowCompletionActivityOutput) Reset() { *x = ReportSubFlowCompletionActivityOutput{} - mi := &file_dex_proto_msgTypes[152] + mi := &file_dex_proto_msgTypes[153] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11908,7 +11960,7 @@ func (x *ReportSubFlowCompletionActivityOutput) String() string { func (*ReportSubFlowCompletionActivityOutput) ProtoMessage() {} func (x *ReportSubFlowCompletionActivityOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[152] + mi := &file_dex_proto_msgTypes[153] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11921,7 +11973,7 @@ func (x *ReportSubFlowCompletionActivityOutput) ProtoReflect() protoreflect.Mess // Deprecated: Use ReportSubFlowCompletionActivityOutput.ProtoReflect.Descriptor instead. func (*ReportSubFlowCompletionActivityOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{152} + return file_dex_proto_rawDescGZIP(), []int{153} } func (x *ReportSubFlowCompletionActivityOutput) GetStatus() SubFlowCompletionDeliveryStatus { @@ -11948,7 +12000,7 @@ type ExecuteRpcSignalRequest struct { func (x *ExecuteRpcSignalRequest) Reset() { *x = ExecuteRpcSignalRequest{} - mi := &file_dex_proto_msgTypes[153] + mi := &file_dex_proto_msgTypes[154] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11960,7 +12012,7 @@ func (x *ExecuteRpcSignalRequest) String() string { func (*ExecuteRpcSignalRequest) ProtoMessage() {} func (x *ExecuteRpcSignalRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[153] + mi := &file_dex_proto_msgTypes[154] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11973,7 +12025,7 @@ func (x *ExecuteRpcSignalRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecuteRpcSignalRequest.ProtoReflect.Descriptor instead. func (*ExecuteRpcSignalRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{153} + return file_dex_proto_rawDescGZIP(), []int{154} } func (x *ExecuteRpcSignalRequest) GetRpcInput() *Value { @@ -12050,7 +12102,7 @@ type SkipTimerSignalRequest struct { func (x *SkipTimerSignalRequest) Reset() { *x = SkipTimerSignalRequest{} - mi := &file_dex_proto_msgTypes[154] + mi := &file_dex_proto_msgTypes[155] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12062,7 +12114,7 @@ func (x *SkipTimerSignalRequest) String() string { func (*SkipTimerSignalRequest) ProtoMessage() {} func (x *SkipTimerSignalRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[154] + mi := &file_dex_proto_msgTypes[155] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12075,7 +12127,7 @@ func (x *SkipTimerSignalRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SkipTimerSignalRequest.ProtoReflect.Descriptor instead. func (*SkipTimerSignalRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{154} + return file_dex_proto_rawDescGZIP(), []int{155} } func (x *SkipTimerSignalRequest) GetStepExecutionId() string { @@ -12109,7 +12161,7 @@ type StopFlowSignalRequest struct { func (x *StopFlowSignalRequest) Reset() { *x = StopFlowSignalRequest{} - mi := &file_dex_proto_msgTypes[155] + mi := &file_dex_proto_msgTypes[156] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12121,7 +12173,7 @@ func (x *StopFlowSignalRequest) String() string { func (*StopFlowSignalRequest) ProtoMessage() {} func (x *StopFlowSignalRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[155] + mi := &file_dex_proto_msgTypes[156] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12134,7 +12186,7 @@ func (x *StopFlowSignalRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StopFlowSignalRequest.ProtoReflect.Descriptor instead. func (*StopFlowSignalRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{155} + return file_dex_proto_rawDescGZIP(), []int{156} } func (x *StopFlowSignalRequest) GetStopType() StopType { @@ -12161,7 +12213,7 @@ type GetAttributesQueryRequest struct { func (x *GetAttributesQueryRequest) Reset() { *x = GetAttributesQueryRequest{} - mi := &file_dex_proto_msgTypes[156] + mi := &file_dex_proto_msgTypes[157] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12173,7 +12225,7 @@ func (x *GetAttributesQueryRequest) String() string { func (*GetAttributesQueryRequest) ProtoMessage() {} func (x *GetAttributesQueryRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[156] + mi := &file_dex_proto_msgTypes[157] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12186,7 +12238,7 @@ func (x *GetAttributesQueryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAttributesQueryRequest.ProtoReflect.Descriptor instead. func (*GetAttributesQueryRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{156} + return file_dex_proto_rawDescGZIP(), []int{157} } func (x *GetAttributesQueryRequest) GetKeys() []string { @@ -12212,7 +12264,7 @@ type GetAttributesQueryResponse struct { func (x *GetAttributesQueryResponse) Reset() { *x = GetAttributesQueryResponse{} - mi := &file_dex_proto_msgTypes[157] + mi := &file_dex_proto_msgTypes[158] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12224,7 +12276,7 @@ func (x *GetAttributesQueryResponse) String() string { func (*GetAttributesQueryResponse) ProtoMessage() {} func (x *GetAttributesQueryResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[157] + mi := &file_dex_proto_msgTypes[158] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12237,7 +12289,7 @@ func (x *GetAttributesQueryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAttributesQueryResponse.ProtoReflect.Descriptor instead. func (*GetAttributesQueryResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{157} + return file_dex_proto_rawDescGZIP(), []int{158} } func (x *GetAttributesQueryResponse) GetAttributes() []*KV { @@ -12258,7 +12310,7 @@ type PrepareRpcQueryRequest struct { func (x *PrepareRpcQueryRequest) Reset() { *x = PrepareRpcQueryRequest{} - mi := &file_dex_proto_msgTypes[158] + mi := &file_dex_proto_msgTypes[159] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12270,7 +12322,7 @@ func (x *PrepareRpcQueryRequest) String() string { func (*PrepareRpcQueryRequest) ProtoMessage() {} func (x *PrepareRpcQueryRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[158] + mi := &file_dex_proto_msgTypes[159] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12283,7 +12335,7 @@ func (x *PrepareRpcQueryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PrepareRpcQueryRequest.ProtoReflect.Descriptor instead. func (*PrepareRpcQueryRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{158} + return file_dex_proto_rawDescGZIP(), []int{159} } func (x *PrepareRpcQueryRequest) GetLoadAttributeMapInstances() []string { @@ -12325,7 +12377,7 @@ type PrepareRpcQueryResponse struct { func (x *PrepareRpcQueryResponse) Reset() { *x = PrepareRpcQueryResponse{} - mi := &file_dex_proto_msgTypes[159] + mi := &file_dex_proto_msgTypes[160] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12337,7 +12389,7 @@ func (x *PrepareRpcQueryResponse) String() string { func (*PrepareRpcQueryResponse) ProtoMessage() {} func (x *PrepareRpcQueryResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[159] + mi := &file_dex_proto_msgTypes[160] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12350,7 +12402,7 @@ func (x *PrepareRpcQueryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PrepareRpcQueryResponse.ProtoReflect.Descriptor instead. func (*PrepareRpcQueryResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{159} + return file_dex_proto_rawDescGZIP(), []int{160} } func (x *PrepareRpcQueryResponse) GetAttributes() []*KV { @@ -12435,7 +12487,7 @@ type TimerInfo struct { func (x *TimerInfo) Reset() { *x = TimerInfo{} - mi := &file_dex_proto_msgTypes[160] + mi := &file_dex_proto_msgTypes[161] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12447,7 +12499,7 @@ func (x *TimerInfo) String() string { func (*TimerInfo) ProtoMessage() {} func (x *TimerInfo) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[160] + mi := &file_dex_proto_msgTypes[161] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12460,7 +12512,7 @@ func (x *TimerInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use TimerInfo.ProtoReflect.Descriptor instead. func (*TimerInfo) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{160} + return file_dex_proto_rawDescGZIP(), []int{161} } func (x *TimerInfo) GetConditionId() string { @@ -12493,7 +12545,7 @@ type TimerInfoList struct { func (x *TimerInfoList) Reset() { *x = TimerInfoList{} - mi := &file_dex_proto_msgTypes[161] + mi := &file_dex_proto_msgTypes[162] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12505,7 +12557,7 @@ func (x *TimerInfoList) String() string { func (*TimerInfoList) ProtoMessage() {} func (x *TimerInfoList) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[161] + mi := &file_dex_proto_msgTypes[162] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12518,7 +12570,7 @@ func (x *TimerInfoList) ProtoReflect() protoreflect.Message { // Deprecated: Use TimerInfoList.ProtoReflect.Descriptor instead. func (*TimerInfoList) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{161} + return file_dex_proto_rawDescGZIP(), []int{162} } func (x *TimerInfoList) GetTimers() []*TimerInfo { @@ -12538,7 +12590,7 @@ type GetCurrentTimerInfosQueryResponse struct { func (x *GetCurrentTimerInfosQueryResponse) Reset() { *x = GetCurrentTimerInfosQueryResponse{} - mi := &file_dex_proto_msgTypes[162] + mi := &file_dex_proto_msgTypes[163] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12550,7 +12602,7 @@ func (x *GetCurrentTimerInfosQueryResponse) String() string { func (*GetCurrentTimerInfosQueryResponse) ProtoMessage() {} func (x *GetCurrentTimerInfosQueryResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[162] + mi := &file_dex_proto_msgTypes[163] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12563,7 +12615,7 @@ func (x *GetCurrentTimerInfosQueryResponse) ProtoReflect() protoreflect.Message // Deprecated: Use GetCurrentTimerInfosQueryResponse.ProtoReflect.Descriptor instead. func (*GetCurrentTimerInfosQueryResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{162} + return file_dex_proto_rawDescGZIP(), []int{163} } func (x *GetCurrentTimerInfosQueryResponse) GetStepExecutionCurrentTimerInfos() map[string]*TimerInfoList { @@ -12582,7 +12634,7 @@ type GetScheduledGreedyTimerTimesQueryResponse struct { func (x *GetScheduledGreedyTimerTimesQueryResponse) Reset() { *x = GetScheduledGreedyTimerTimesQueryResponse{} - mi := &file_dex_proto_msgTypes[163] + mi := &file_dex_proto_msgTypes[164] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12594,7 +12646,7 @@ func (x *GetScheduledGreedyTimerTimesQueryResponse) String() string { func (*GetScheduledGreedyTimerTimesQueryResponse) ProtoMessage() {} func (x *GetScheduledGreedyTimerTimesQueryResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[163] + mi := &file_dex_proto_msgTypes[164] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12607,7 +12659,7 @@ func (x *GetScheduledGreedyTimerTimesQueryResponse) ProtoReflect() protoreflect. // Deprecated: Use GetScheduledGreedyTimerTimesQueryResponse.ProtoReflect.Descriptor instead. func (*GetScheduledGreedyTimerTimesQueryResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{163} + return file_dex_proto_rawDescGZIP(), []int{164} } func (x *GetScheduledGreedyTimerTimesQueryResponse) GetPendingScheduled() []*TimerInfo { @@ -12629,7 +12681,7 @@ type DebugDumpResponse struct { func (x *DebugDumpResponse) Reset() { *x = DebugDumpResponse{} - mi := &file_dex_proto_msgTypes[164] + mi := &file_dex_proto_msgTypes[165] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12641,7 +12693,7 @@ func (x *DebugDumpResponse) String() string { func (*DebugDumpResponse) ProtoMessage() {} func (x *DebugDumpResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[164] + mi := &file_dex_proto_msgTypes[165] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12654,7 +12706,7 @@ func (x *DebugDumpResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DebugDumpResponse.ProtoReflect.Descriptor instead. func (*DebugDumpResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{164} + return file_dex_proto_rawDescGZIP(), []int{165} } func (x *DebugDumpResponse) GetConfig() *FlowConfig { @@ -12695,7 +12747,7 @@ type InvokeRpcUpdateResult struct { func (x *InvokeRpcUpdateResult) Reset() { *x = InvokeRpcUpdateResult{} - mi := &file_dex_proto_msgTypes[165] + mi := &file_dex_proto_msgTypes[166] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12707,7 +12759,7 @@ func (x *InvokeRpcUpdateResult) String() string { func (*InvokeRpcUpdateResult) ProtoMessage() {} func (x *InvokeRpcUpdateResult) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[165] + mi := &file_dex_proto_msgTypes[166] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12720,7 +12772,7 @@ func (x *InvokeRpcUpdateResult) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeRpcUpdateResult.ProtoReflect.Descriptor instead. func (*InvokeRpcUpdateResult) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{165} + return file_dex_proto_rawDescGZIP(), []int{166} } func (x *InvokeRpcUpdateResult) GetResponse() *InvokeRPCResponse { @@ -12739,7 +12791,7 @@ type StepExecutionNumbers struct { func (x *StepExecutionNumbers) Reset() { *x = StepExecutionNumbers{} - mi := &file_dex_proto_msgTypes[166] + mi := &file_dex_proto_msgTypes[167] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12751,7 +12803,7 @@ func (x *StepExecutionNumbers) String() string { func (*StepExecutionNumbers) ProtoMessage() {} func (x *StepExecutionNumbers) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[166] + mi := &file_dex_proto_msgTypes[167] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12764,7 +12816,7 @@ func (x *StepExecutionNumbers) ProtoReflect() protoreflect.Message { // Deprecated: Use StepExecutionNumbers.ProtoReflect.Descriptor instead. func (*StepExecutionNumbers) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{166} + return file_dex_proto_rawDescGZIP(), []int{167} } func (x *StepExecutionNumbers) GetNumbers() []int32 { @@ -13000,10 +13052,14 @@ const file_dex_proto_rawDesc = "" + "attributes\x18\x03 \x03(\v2\x13.dex.AttributeWriteR\n" + "attributes\x12\x1d\n" + "\n" + - "request_id\x18\x04 \x01(\tR\trequestId\"6\n" + - "\x10LoadBlobsRequest\x12\"\n" + - "\x06values\x18\x01 \x03(\v2\n" + - ".dex.ValueR\x06values\"\x96\x01\n" + + "request_id\x18\x04 \x01(\tR\trequestId\"Z\n" + + "\x14LoadBlobRequestEntry\x12\x17\n" + + "\aflow_id\x18\x01 \x01(\tR\x06flowId\x12)\n" + + "\n" + + "blob_value\x18\x02 \x01(\v2\n" + + ".dex.ValueR\tblobValue\"G\n" + + "\x10LoadBlobsRequest\x123\n" + + "\aentries\x18\x01 \x03(\v2\x19.dex.LoadBlobRequestEntryR\aentries\"\x96\x01\n" + "\x11LoadBlobsResponse\x12:\n" + "\x06values\x18\x01 \x03(\v2\".dex.LoadBlobsResponse.ValuesEntryR\x06values\x1aE\n" + "\vValuesEntry\x12\x10\n" + @@ -13965,7 +14021,7 @@ func file_dex_proto_rawDescGZIP() []byte { } var file_dex_proto_enumTypes = make([]protoimpl.EnumInfo, 23) -var file_dex_proto_msgTypes = make([]protoimpl.MessageInfo, 186) +var file_dex_proto_msgTypes = make([]protoimpl.MessageInfo, 187) var file_dex_proto_goTypes = []any{ (IndexType)(0), // 0: dex.IndexType (WaitForMethodFailurePolicy)(0), // 1: dex.WaitForMethodFailurePolicy @@ -14025,171 +14081,172 @@ var file_dex_proto_goTypes = []any{ (*GetAttributesRequest)(nil), // 55: dex.GetAttributesRequest (*GetAttributesResponse)(nil), // 56: dex.GetAttributesResponse (*SetAttributesRequest)(nil), // 57: dex.SetAttributesRequest - (*LoadBlobsRequest)(nil), // 58: dex.LoadBlobsRequest - (*LoadBlobsResponse)(nil), // 59: dex.LoadBlobsResponse - (*WaitForFlowRequest)(nil), // 60: dex.WaitForFlowRequest - (*StepCompletionOutput)(nil), // 61: dex.StepCompletionOutput - (*FlowResult)(nil), // 62: dex.FlowResult - (*SearchFlowsRequest)(nil), // 63: dex.SearchFlowsRequest - (*SearchFlowsResponse)(nil), // 64: dex.SearchFlowsResponse - (*SearchFlowsResponseEntry)(nil), // 65: dex.SearchFlowsResponseEntry - (*SyncAttributeIndexRequest)(nil), // 66: dex.SyncAttributeIndexRequest - (*SyncAttributeIndexResponse)(nil), // 67: dex.SyncAttributeIndexResponse - (*FlowExecutionID)(nil), // 68: dex.FlowExecutionID - (*GetFlowSummaryRequest)(nil), // 69: dex.GetFlowSummaryRequest - (*GetFlowSummaryResponse)(nil), // 70: dex.GetFlowSummaryResponse - (*InternalAsyncStepInputSnapshot)(nil), // 71: dex.InternalAsyncStepInputSnapshot - (*InternalLocalActivityInput)(nil), // 72: dex.InternalLocalActivityInput - (*GetHistoryEventsRequest)(nil), // 73: dex.GetHistoryEventsRequest - (*GetHistoryEventsResponse)(nil), // 74: dex.GetHistoryEventsResponse - (*FlowHistoryEvent)(nil), // 75: dex.FlowHistoryEvent - (*TimeTravelForkHistoryEvent)(nil), // 76: dex.TimeTravelForkHistoryEvent - (*FlowStartedOrContinuedHistoryEvent)(nil), // 77: dex.FlowStartedOrContinuedHistoryEvent - (*FlowInitialStart)(nil), // 78: dex.FlowInitialStart - (*FlowContinuedStart)(nil), // 79: dex.FlowContinuedStart - (*FlowClosedHistoryEvent)(nil), // 80: dex.FlowClosedHistoryEvent - (*StepMethodPendingEvent)(nil), // 81: dex.StepMethodPendingEvent - (*StepMethodFailure)(nil), // 82: dex.StepMethodFailure - (*StepMethodOptions)(nil), // 83: dex.StepMethodOptions - (*StepMethodEventInput)(nil), // 84: dex.StepMethodEventInput - (*StepMethodEventContext)(nil), // 85: dex.StepMethodEventContext - (*StepWaitForCompletedOutput)(nil), // 86: dex.StepWaitForCompletedOutput - (*StepExecuteCompletedOutput)(nil), // 87: dex.StepExecuteCompletedOutput - (*StepMethodFailedOutput)(nil), // 88: dex.StepMethodFailedOutput - (*StepWaitForCompletedEvent)(nil), // 89: dex.StepWaitForCompletedEvent - (*StepWaitForFailedEvent)(nil), // 90: dex.StepWaitForFailedEvent - (*StepExecuteCompletedEvent)(nil), // 91: dex.StepExecuteCompletedEvent - (*StepExecuteFailedEvent)(nil), // 92: dex.StepExecuteFailedEvent - (*RpcExecutionCompletedEvent)(nil), // 93: dex.RpcExecutionCompletedEvent - (*ChannelExternalPublishEvent)(nil), // 94: dex.ChannelExternalPublishEvent - (*ChannelExternalDeleteEvent)(nil), // 95: dex.ChannelExternalDeleteEvent - (*WaitForHistoryEventRequest)(nil), // 96: dex.WaitForHistoryEventRequest - (*WaitForHistoryEventResponse)(nil), // 97: dex.WaitForHistoryEventResponse - (*ActiveStepExecutionState)(nil), // 98: dex.ActiveStepExecutionState - (*GetFlowStateRequest)(nil), // 99: dex.GetFlowStateRequest - (*GetFlowStateResponse)(nil), // 100: dex.GetFlowStateResponse - (*ResetFlowRequest)(nil), // 101: dex.ResetFlowRequest - (*ResetFlowResponse)(nil), // 102: dex.ResetFlowResponse - (*InvokeRPCRequest)(nil), // 103: dex.InvokeRPCRequest - (*InvokeRPCResponse)(nil), // 104: dex.InvokeRPCResponse - (*SkipTimerRequest)(nil), // 105: dex.SkipTimerRequest - (*UpdateFlowConfigRequest)(nil), // 106: dex.UpdateFlowConfigRequest - (*WaitForStepCompletionRequest)(nil), // 107: dex.WaitForStepCompletionRequest - (*WaitForStepCompletionResponse)(nil), // 108: dex.WaitForStepCompletionResponse - (*WaitForAttributeRequest)(nil), // 109: dex.WaitForAttributeRequest - (*WaitForAttributeResponse)(nil), // 110: dex.WaitForAttributeResponse - (*AttributeMatch)(nil), // 111: dex.AttributeMatch - (*TriggerContinueAsNewRequest)(nil), // 112: dex.TriggerContinueAsNewRequest - (*HealthInfo)(nil), // 113: dex.HealthInfo - (*ServiceErrorResponse)(nil), // 114: dex.ServiceErrorResponse - (*WorkerErrorResponse)(nil), // 115: dex.WorkerErrorResponse - (*InternalActivityError)(nil), // 116: dex.InternalActivityError - (*InternalWorkerError)(nil), // 117: dex.InternalWorkerError - (*InternalFlowError)(nil), // 118: dex.InternalFlowError - (*ChannelInfo)(nil), // 119: dex.ChannelInfo - (*InvokeWaitForMethodRequest)(nil), // 120: dex.InvokeWaitForMethodRequest - (*InvokeWaitForMethodResponse)(nil), // 121: dex.InvokeWaitForMethodResponse - (*StepMethodHeartbeat)(nil), // 122: dex.StepMethodHeartbeat - (*StepStreamWrite)(nil), // 123: dex.StepStreamWrite - (*InvokeWaitForMethodOutput)(nil), // 124: dex.InvokeWaitForMethodOutput - (*InvokeExecuteMethodRequest)(nil), // 125: dex.InvokeExecuteMethodRequest - (*InvokeExecuteMethodResponse)(nil), // 126: dex.InvokeExecuteMethodResponse - (*InvokeExecuteMethodOutput)(nil), // 127: dex.InvokeExecuteMethodOutput - (*InvokeWorkerRPCRequest)(nil), // 128: dex.InvokeWorkerRPCRequest - (*InvokeWorkerRPCResponse)(nil), // 129: dex.InvokeWorkerRPCResponse - (*StepDecision)(nil), // 130: dex.StepDecision - (*CloseDecision)(nil), // 131: dex.CloseDecision - (*StepMovement)(nil), // 132: dex.StepMovement - (*ConditionCombination)(nil), // 133: dex.ConditionCombination - (*WaitingCondition)(nil), // 134: dex.WaitingCondition - (*WaitingConditionState)(nil), // 135: dex.WaitingConditionState - (*SubFlowOptions)(nil), // 136: dex.SubFlowOptions - (*SubFlowCondition)(nil), // 137: dex.SubFlowCondition - (*SubFlowConditionState)(nil), // 138: dex.SubFlowConditionState - (*TimerCondition)(nil), // 139: dex.TimerCondition - (*ChannelCondition)(nil), // 140: dex.ChannelCondition - (*ConditionResults)(nil), // 141: dex.ConditionResults - (*TimerResult)(nil), // 142: dex.TimerResult - (*ChannelResult)(nil), // 143: dex.ChannelResult - (*ContinueAsNewDumpRequest)(nil), // 144: dex.ContinueAsNewDumpRequest - (*ContinueAsNewDumpResponse)(nil), // 145: dex.ContinueAsNewDumpResponse - (*ChannelValues)(nil), // 146: dex.ChannelValues - (*StepExecutionCompletedConditions)(nil), // 147: dex.StepExecutionCompletedConditions - (*StepExecutionResumeInfo)(nil), // 148: dex.StepExecutionResumeInfo - (*StepExecutionCounterInfo)(nil), // 149: dex.StepExecutionCounterInfo - (*StaleSkipTimer)(nil), // 150: dex.StaleSkipTimer - (*ContinueAsNewDump)(nil), // 151: dex.ContinueAsNewDump - (*ContinueAsNewInput)(nil), // 152: dex.ContinueAsNewInput - (*InterpreterWorkflowInput)(nil), // 153: dex.InterpreterWorkflowInput - (*InterpreterWorkflowOutput)(nil), // 154: dex.InterpreterWorkflowOutput - (*BlobStoreCleanupWorkflowInput)(nil), // 155: dex.BlobStoreCleanupWorkflowInput - (*BlobStoreCleanupWorkflowOutput)(nil), // 156: dex.BlobStoreCleanupWorkflowOutput - (*InvokeWaitForMethodActivityInput)(nil), // 157: dex.InvokeWaitForMethodActivityInput - (*InvokeWaitForMethodActivityOutput)(nil), // 158: dex.InvokeWaitForMethodActivityOutput - (*InvokeExecuteMethodActivityInput)(nil), // 159: dex.InvokeExecuteMethodActivityInput - (*RecoveryErrorInfo)(nil), // 160: dex.RecoveryErrorInfo - (*InternalLocalStepActivityFailure)(nil), // 161: dex.InternalLocalStepActivityFailure - (*InvokeExecuteMethodActivityOutput)(nil), // 162: dex.InvokeExecuteMethodActivityOutput - (*DumpFlowForContinueAsNewActivityInput)(nil), // 163: dex.DumpFlowForContinueAsNewActivityInput - (*DumpFlowForContinueAsNewActivityOutput)(nil), // 164: dex.DumpFlowForContinueAsNewActivityOutput - (*InvokeWorkerRPCActivityInput)(nil), // 165: dex.InvokeWorkerRPCActivityInput - (*InvokeWorkerRPCActivityOutput)(nil), // 166: dex.InvokeWorkerRPCActivityOutput - (*CleanupBlobStoreActivityInput)(nil), // 167: dex.CleanupBlobStoreActivityInput - (*CleanupBlobStoreActivityOutput)(nil), // 168: dex.CleanupBlobStoreActivityOutput - (*AttributeSyncItem)(nil), // 169: dex.AttributeSyncItem - (*SyncAttributeBatchActivityInput)(nil), // 170: dex.SyncAttributeBatchActivityInput - (*StartSubFlowActivityInput)(nil), // 171: dex.StartSubFlowActivityInput - (*StartSubFlowActivityOutput)(nil), // 172: dex.StartSubFlowActivityOutput - (*SubFlowCompletionSignalRequest)(nil), // 173: dex.SubFlowCompletionSignalRequest - (*ReportSubFlowCompletionActivityInput)(nil), // 174: dex.ReportSubFlowCompletionActivityInput - (*ReportSubFlowCompletionActivityOutput)(nil), // 175: dex.ReportSubFlowCompletionActivityOutput - (*ExecuteRpcSignalRequest)(nil), // 176: dex.ExecuteRpcSignalRequest - (*SkipTimerSignalRequest)(nil), // 177: dex.SkipTimerSignalRequest - (*StopFlowSignalRequest)(nil), // 178: dex.StopFlowSignalRequest - (*GetAttributesQueryRequest)(nil), // 179: dex.GetAttributesQueryRequest - (*GetAttributesQueryResponse)(nil), // 180: dex.GetAttributesQueryResponse - (*PrepareRpcQueryRequest)(nil), // 181: dex.PrepareRpcQueryRequest - (*PrepareRpcQueryResponse)(nil), // 182: dex.PrepareRpcQueryResponse - (*TimerInfo)(nil), // 183: dex.TimerInfo - (*TimerInfoList)(nil), // 184: dex.TimerInfoList - (*GetCurrentTimerInfosQueryResponse)(nil), // 185: dex.GetCurrentTimerInfosQueryResponse - (*GetScheduledGreedyTimerTimesQueryResponse)(nil), // 186: dex.GetScheduledGreedyTimerTimesQueryResponse - (*DebugDumpResponse)(nil), // 187: dex.DebugDumpResponse - (*InvokeRpcUpdateResult)(nil), // 188: dex.InvokeRpcUpdateResult - (*StepExecutionNumbers)(nil), // 189: dex.StepExecutionNumbers - nil, // 190: dex.LoadBlobsResponse.ValuesEntry - nil, // 191: dex.SyncAttributeIndexRequest.AttributeIndexesEntry - nil, // 192: dex.FlowContinuedStart.PendingChannelMessagesEntry - nil, // 193: dex.GetFlowStateResponse.PendingChannelMessagesEntry - nil, // 194: dex.InvokeWaitForMethodRequest.ChannelInfosEntry - nil, // 195: dex.InvokeWaitForMethodRequest.LoadedChannelMessagesEntry - nil, // 196: dex.InvokeExecuteMethodRequest.ChannelInfosEntry - nil, // 197: dex.InvokeExecuteMethodRequest.LoadedChannelMessagesEntry - nil, // 198: dex.InvokeWorkerRPCRequest.ChannelInfosEntry - nil, // 199: dex.InvokeWorkerRPCRequest.LoadedChannelMessagesEntry - nil, // 200: dex.StepExecutionCompletedConditions.CompletedTimerConditionsEntry - nil, // 201: dex.StepExecutionCompletedConditions.CompletedSubFlowResultsEntry - nil, // 202: dex.StepExecutionCounterInfo.StepTypeStartedCountEntry - nil, // 203: dex.StepExecutionCounterInfo.StepTypeCurrentlyExecutingCountEntry - nil, // 204: dex.StepExecutionCounterInfo.StepActiveExecutionNumsEntry - nil, // 205: dex.ContinueAsNewDump.ChannelReceivedEntry - nil, // 206: dex.PrepareRpcQueryResponse.ChannelInfosEntry - nil, // 207: dex.PrepareRpcQueryResponse.LoadedChannelMessagesEntry - nil, // 208: dex.GetCurrentTimerInfosQueryResponse.StepExecutionCurrentTimerInfosEntry - (structpb.NullValue)(0), // 209: google.protobuf.NullValue - (*timestamppb.Timestamp)(nil), // 210: google.protobuf.Timestamp - (*durationpb.Duration)(nil), // 211: google.protobuf.Duration - (*emptypb.Empty)(nil), // 212: google.protobuf.Empty + (*LoadBlobRequestEntry)(nil), // 58: dex.LoadBlobRequestEntry + (*LoadBlobsRequest)(nil), // 59: dex.LoadBlobsRequest + (*LoadBlobsResponse)(nil), // 60: dex.LoadBlobsResponse + (*WaitForFlowRequest)(nil), // 61: dex.WaitForFlowRequest + (*StepCompletionOutput)(nil), // 62: dex.StepCompletionOutput + (*FlowResult)(nil), // 63: dex.FlowResult + (*SearchFlowsRequest)(nil), // 64: dex.SearchFlowsRequest + (*SearchFlowsResponse)(nil), // 65: dex.SearchFlowsResponse + (*SearchFlowsResponseEntry)(nil), // 66: dex.SearchFlowsResponseEntry + (*SyncAttributeIndexRequest)(nil), // 67: dex.SyncAttributeIndexRequest + (*SyncAttributeIndexResponse)(nil), // 68: dex.SyncAttributeIndexResponse + (*FlowExecutionID)(nil), // 69: dex.FlowExecutionID + (*GetFlowSummaryRequest)(nil), // 70: dex.GetFlowSummaryRequest + (*GetFlowSummaryResponse)(nil), // 71: dex.GetFlowSummaryResponse + (*InternalAsyncStepInputSnapshot)(nil), // 72: dex.InternalAsyncStepInputSnapshot + (*InternalLocalActivityInput)(nil), // 73: dex.InternalLocalActivityInput + (*GetHistoryEventsRequest)(nil), // 74: dex.GetHistoryEventsRequest + (*GetHistoryEventsResponse)(nil), // 75: dex.GetHistoryEventsResponse + (*FlowHistoryEvent)(nil), // 76: dex.FlowHistoryEvent + (*TimeTravelForkHistoryEvent)(nil), // 77: dex.TimeTravelForkHistoryEvent + (*FlowStartedOrContinuedHistoryEvent)(nil), // 78: dex.FlowStartedOrContinuedHistoryEvent + (*FlowInitialStart)(nil), // 79: dex.FlowInitialStart + (*FlowContinuedStart)(nil), // 80: dex.FlowContinuedStart + (*FlowClosedHistoryEvent)(nil), // 81: dex.FlowClosedHistoryEvent + (*StepMethodPendingEvent)(nil), // 82: dex.StepMethodPendingEvent + (*StepMethodFailure)(nil), // 83: dex.StepMethodFailure + (*StepMethodOptions)(nil), // 84: dex.StepMethodOptions + (*StepMethodEventInput)(nil), // 85: dex.StepMethodEventInput + (*StepMethodEventContext)(nil), // 86: dex.StepMethodEventContext + (*StepWaitForCompletedOutput)(nil), // 87: dex.StepWaitForCompletedOutput + (*StepExecuteCompletedOutput)(nil), // 88: dex.StepExecuteCompletedOutput + (*StepMethodFailedOutput)(nil), // 89: dex.StepMethodFailedOutput + (*StepWaitForCompletedEvent)(nil), // 90: dex.StepWaitForCompletedEvent + (*StepWaitForFailedEvent)(nil), // 91: dex.StepWaitForFailedEvent + (*StepExecuteCompletedEvent)(nil), // 92: dex.StepExecuteCompletedEvent + (*StepExecuteFailedEvent)(nil), // 93: dex.StepExecuteFailedEvent + (*RpcExecutionCompletedEvent)(nil), // 94: dex.RpcExecutionCompletedEvent + (*ChannelExternalPublishEvent)(nil), // 95: dex.ChannelExternalPublishEvent + (*ChannelExternalDeleteEvent)(nil), // 96: dex.ChannelExternalDeleteEvent + (*WaitForHistoryEventRequest)(nil), // 97: dex.WaitForHistoryEventRequest + (*WaitForHistoryEventResponse)(nil), // 98: dex.WaitForHistoryEventResponse + (*ActiveStepExecutionState)(nil), // 99: dex.ActiveStepExecutionState + (*GetFlowStateRequest)(nil), // 100: dex.GetFlowStateRequest + (*GetFlowStateResponse)(nil), // 101: dex.GetFlowStateResponse + (*ResetFlowRequest)(nil), // 102: dex.ResetFlowRequest + (*ResetFlowResponse)(nil), // 103: dex.ResetFlowResponse + (*InvokeRPCRequest)(nil), // 104: dex.InvokeRPCRequest + (*InvokeRPCResponse)(nil), // 105: dex.InvokeRPCResponse + (*SkipTimerRequest)(nil), // 106: dex.SkipTimerRequest + (*UpdateFlowConfigRequest)(nil), // 107: dex.UpdateFlowConfigRequest + (*WaitForStepCompletionRequest)(nil), // 108: dex.WaitForStepCompletionRequest + (*WaitForStepCompletionResponse)(nil), // 109: dex.WaitForStepCompletionResponse + (*WaitForAttributeRequest)(nil), // 110: dex.WaitForAttributeRequest + (*WaitForAttributeResponse)(nil), // 111: dex.WaitForAttributeResponse + (*AttributeMatch)(nil), // 112: dex.AttributeMatch + (*TriggerContinueAsNewRequest)(nil), // 113: dex.TriggerContinueAsNewRequest + (*HealthInfo)(nil), // 114: dex.HealthInfo + (*ServiceErrorResponse)(nil), // 115: dex.ServiceErrorResponse + (*WorkerErrorResponse)(nil), // 116: dex.WorkerErrorResponse + (*InternalActivityError)(nil), // 117: dex.InternalActivityError + (*InternalWorkerError)(nil), // 118: dex.InternalWorkerError + (*InternalFlowError)(nil), // 119: dex.InternalFlowError + (*ChannelInfo)(nil), // 120: dex.ChannelInfo + (*InvokeWaitForMethodRequest)(nil), // 121: dex.InvokeWaitForMethodRequest + (*InvokeWaitForMethodResponse)(nil), // 122: dex.InvokeWaitForMethodResponse + (*StepMethodHeartbeat)(nil), // 123: dex.StepMethodHeartbeat + (*StepStreamWrite)(nil), // 124: dex.StepStreamWrite + (*InvokeWaitForMethodOutput)(nil), // 125: dex.InvokeWaitForMethodOutput + (*InvokeExecuteMethodRequest)(nil), // 126: dex.InvokeExecuteMethodRequest + (*InvokeExecuteMethodResponse)(nil), // 127: dex.InvokeExecuteMethodResponse + (*InvokeExecuteMethodOutput)(nil), // 128: dex.InvokeExecuteMethodOutput + (*InvokeWorkerRPCRequest)(nil), // 129: dex.InvokeWorkerRPCRequest + (*InvokeWorkerRPCResponse)(nil), // 130: dex.InvokeWorkerRPCResponse + (*StepDecision)(nil), // 131: dex.StepDecision + (*CloseDecision)(nil), // 132: dex.CloseDecision + (*StepMovement)(nil), // 133: dex.StepMovement + (*ConditionCombination)(nil), // 134: dex.ConditionCombination + (*WaitingCondition)(nil), // 135: dex.WaitingCondition + (*WaitingConditionState)(nil), // 136: dex.WaitingConditionState + (*SubFlowOptions)(nil), // 137: dex.SubFlowOptions + (*SubFlowCondition)(nil), // 138: dex.SubFlowCondition + (*SubFlowConditionState)(nil), // 139: dex.SubFlowConditionState + (*TimerCondition)(nil), // 140: dex.TimerCondition + (*ChannelCondition)(nil), // 141: dex.ChannelCondition + (*ConditionResults)(nil), // 142: dex.ConditionResults + (*TimerResult)(nil), // 143: dex.TimerResult + (*ChannelResult)(nil), // 144: dex.ChannelResult + (*ContinueAsNewDumpRequest)(nil), // 145: dex.ContinueAsNewDumpRequest + (*ContinueAsNewDumpResponse)(nil), // 146: dex.ContinueAsNewDumpResponse + (*ChannelValues)(nil), // 147: dex.ChannelValues + (*StepExecutionCompletedConditions)(nil), // 148: dex.StepExecutionCompletedConditions + (*StepExecutionResumeInfo)(nil), // 149: dex.StepExecutionResumeInfo + (*StepExecutionCounterInfo)(nil), // 150: dex.StepExecutionCounterInfo + (*StaleSkipTimer)(nil), // 151: dex.StaleSkipTimer + (*ContinueAsNewDump)(nil), // 152: dex.ContinueAsNewDump + (*ContinueAsNewInput)(nil), // 153: dex.ContinueAsNewInput + (*InterpreterWorkflowInput)(nil), // 154: dex.InterpreterWorkflowInput + (*InterpreterWorkflowOutput)(nil), // 155: dex.InterpreterWorkflowOutput + (*BlobStoreCleanupWorkflowInput)(nil), // 156: dex.BlobStoreCleanupWorkflowInput + (*BlobStoreCleanupWorkflowOutput)(nil), // 157: dex.BlobStoreCleanupWorkflowOutput + (*InvokeWaitForMethodActivityInput)(nil), // 158: dex.InvokeWaitForMethodActivityInput + (*InvokeWaitForMethodActivityOutput)(nil), // 159: dex.InvokeWaitForMethodActivityOutput + (*InvokeExecuteMethodActivityInput)(nil), // 160: dex.InvokeExecuteMethodActivityInput + (*RecoveryErrorInfo)(nil), // 161: dex.RecoveryErrorInfo + (*InternalLocalStepActivityFailure)(nil), // 162: dex.InternalLocalStepActivityFailure + (*InvokeExecuteMethodActivityOutput)(nil), // 163: dex.InvokeExecuteMethodActivityOutput + (*DumpFlowForContinueAsNewActivityInput)(nil), // 164: dex.DumpFlowForContinueAsNewActivityInput + (*DumpFlowForContinueAsNewActivityOutput)(nil), // 165: dex.DumpFlowForContinueAsNewActivityOutput + (*InvokeWorkerRPCActivityInput)(nil), // 166: dex.InvokeWorkerRPCActivityInput + (*InvokeWorkerRPCActivityOutput)(nil), // 167: dex.InvokeWorkerRPCActivityOutput + (*CleanupBlobStoreActivityInput)(nil), // 168: dex.CleanupBlobStoreActivityInput + (*CleanupBlobStoreActivityOutput)(nil), // 169: dex.CleanupBlobStoreActivityOutput + (*AttributeSyncItem)(nil), // 170: dex.AttributeSyncItem + (*SyncAttributeBatchActivityInput)(nil), // 171: dex.SyncAttributeBatchActivityInput + (*StartSubFlowActivityInput)(nil), // 172: dex.StartSubFlowActivityInput + (*StartSubFlowActivityOutput)(nil), // 173: dex.StartSubFlowActivityOutput + (*SubFlowCompletionSignalRequest)(nil), // 174: dex.SubFlowCompletionSignalRequest + (*ReportSubFlowCompletionActivityInput)(nil), // 175: dex.ReportSubFlowCompletionActivityInput + (*ReportSubFlowCompletionActivityOutput)(nil), // 176: dex.ReportSubFlowCompletionActivityOutput + (*ExecuteRpcSignalRequest)(nil), // 177: dex.ExecuteRpcSignalRequest + (*SkipTimerSignalRequest)(nil), // 178: dex.SkipTimerSignalRequest + (*StopFlowSignalRequest)(nil), // 179: dex.StopFlowSignalRequest + (*GetAttributesQueryRequest)(nil), // 180: dex.GetAttributesQueryRequest + (*GetAttributesQueryResponse)(nil), // 181: dex.GetAttributesQueryResponse + (*PrepareRpcQueryRequest)(nil), // 182: dex.PrepareRpcQueryRequest + (*PrepareRpcQueryResponse)(nil), // 183: dex.PrepareRpcQueryResponse + (*TimerInfo)(nil), // 184: dex.TimerInfo + (*TimerInfoList)(nil), // 185: dex.TimerInfoList + (*GetCurrentTimerInfosQueryResponse)(nil), // 186: dex.GetCurrentTimerInfosQueryResponse + (*GetScheduledGreedyTimerTimesQueryResponse)(nil), // 187: dex.GetScheduledGreedyTimerTimesQueryResponse + (*DebugDumpResponse)(nil), // 188: dex.DebugDumpResponse + (*InvokeRpcUpdateResult)(nil), // 189: dex.InvokeRpcUpdateResult + (*StepExecutionNumbers)(nil), // 190: dex.StepExecutionNumbers + nil, // 191: dex.LoadBlobsResponse.ValuesEntry + nil, // 192: dex.SyncAttributeIndexRequest.AttributeIndexesEntry + nil, // 193: dex.FlowContinuedStart.PendingChannelMessagesEntry + nil, // 194: dex.GetFlowStateResponse.PendingChannelMessagesEntry + nil, // 195: dex.InvokeWaitForMethodRequest.ChannelInfosEntry + nil, // 196: dex.InvokeWaitForMethodRequest.LoadedChannelMessagesEntry + nil, // 197: dex.InvokeExecuteMethodRequest.ChannelInfosEntry + nil, // 198: dex.InvokeExecuteMethodRequest.LoadedChannelMessagesEntry + nil, // 199: dex.InvokeWorkerRPCRequest.ChannelInfosEntry + nil, // 200: dex.InvokeWorkerRPCRequest.LoadedChannelMessagesEntry + nil, // 201: dex.StepExecutionCompletedConditions.CompletedTimerConditionsEntry + nil, // 202: dex.StepExecutionCompletedConditions.CompletedSubFlowResultsEntry + nil, // 203: dex.StepExecutionCounterInfo.StepTypeStartedCountEntry + nil, // 204: dex.StepExecutionCounterInfo.StepTypeCurrentlyExecutingCountEntry + nil, // 205: dex.StepExecutionCounterInfo.StepActiveExecutionNumsEntry + nil, // 206: dex.ContinueAsNewDump.ChannelReceivedEntry + nil, // 207: dex.PrepareRpcQueryResponse.ChannelInfosEntry + nil, // 208: dex.PrepareRpcQueryResponse.LoadedChannelMessagesEntry + nil, // 209: dex.GetCurrentTimerInfosQueryResponse.StepExecutionCurrentTimerInfosEntry + (structpb.NullValue)(0), // 210: google.protobuf.NullValue + (*timestamppb.Timestamp)(nil), // 211: google.protobuf.Timestamp + (*durationpb.Duration)(nil), // 212: google.protobuf.Duration + (*emptypb.Empty)(nil), // 213: google.protobuf.Empty } var file_dex_proto_depIdxs = []int32{ 24, // 0: dex.Value.obj_value:type_name -> dex.EncodedObject - 209, // 1: dex.Value.null_value:type_name -> google.protobuf.NullValue + 210, // 1: dex.Value.null_value:type_name -> google.protobuf.NullValue 23, // 2: dex.AttributeWrite.value:type_name -> dex.Value 28, // 3: dex.AttributeWrite.index_config:type_name -> dex.IndexConfig 26, // 4: dex.AttributeWrite.sync_config:type_name -> dex.AttributeSyncConfig 23, // 5: dex.KV.value:type_name -> dex.Value 0, // 6: dex.IndexConfig.type:type_name -> dex.IndexType - 160, // 7: dex.Context.recovery_error:type_name -> dex.RecoveryErrorInfo + 161, // 7: dex.Context.recovery_error:type_name -> dex.RecoveryErrorInfo 23, // 8: dex.Context.last_heartbeat_value:type_name -> dex.Value 31, // 9: dex.StepOptions.wait_for_retry_policy:type_name -> dex.RetryPolicy 31, // 10: dex.StepOptions.execute_retry_policy:type_name -> dex.RetryPolicy @@ -14223,364 +14280,365 @@ var file_dex_proto_depIdxs = []int32{ 53, // 38: dex.ReadStreamResponse.message:type_name -> dex.StreamMessage 53, // 39: dex.ListStreamMessagesResponse.messages:type_name -> dex.StreamMessage 23, // 40: dex.StreamMessage.value:type_name -> dex.Value - 210, // 41: dex.StreamMessage.created_time:type_name -> google.protobuf.Timestamp + 211, // 41: dex.StreamMessage.created_time:type_name -> google.protobuf.Timestamp 7, // 42: dex.StopFlowRequest.stop_type:type_name -> dex.StopType 27, // 43: dex.GetAttributesResponse.attributes:type_name -> dex.KV 25, // 44: dex.SetAttributesRequest.attributes:type_name -> dex.AttributeWrite - 23, // 45: dex.LoadBlobsRequest.values:type_name -> dex.Value - 190, // 46: dex.LoadBlobsResponse.values:type_name -> dex.LoadBlobsResponse.ValuesEntry - 23, // 47: dex.StepCompletionOutput.completed_step_output:type_name -> dex.Value - 8, // 48: dex.FlowResult.flow_status:type_name -> dex.FlowStatus - 61, // 49: dex.FlowResult.results:type_name -> dex.StepCompletionOutput - 9, // 50: dex.FlowResult.error_type:type_name -> dex.FlowErrorType - 65, // 51: dex.SearchFlowsResponse.flow_runs:type_name -> dex.SearchFlowsResponseEntry - 27, // 52: dex.SearchFlowsResponseEntry.indexed_attributes:type_name -> dex.KV - 8, // 53: dex.SearchFlowsResponseEntry.flow_status:type_name -> dex.FlowStatus - 210, // 54: dex.SearchFlowsResponseEntry.start_time:type_name -> google.protobuf.Timestamp - 210, // 55: dex.SearchFlowsResponseEntry.close_time:type_name -> google.protobuf.Timestamp - 191, // 56: dex.SyncAttributeIndexRequest.attribute_indexes:type_name -> dex.SyncAttributeIndexRequest.AttributeIndexesEntry - 68, // 57: dex.GetFlowSummaryResponse.flow_execution_id:type_name -> dex.FlowExecutionID - 8, // 58: dex.GetFlowSummaryResponse.flow_status:type_name -> dex.FlowStatus - 210, // 59: dex.GetFlowSummaryResponse.start_time:type_name -> google.protobuf.Timestamp - 210, // 60: dex.GetFlowSummaryResponse.close_time:type_name -> google.protobuf.Timestamp - 83, // 61: dex.InternalAsyncStepInputSnapshot.method_options:type_name -> dex.StepMethodOptions - 120, // 62: dex.InternalAsyncStepInputSnapshot.wait_for_request:type_name -> dex.InvokeWaitForMethodRequest - 125, // 63: dex.InternalAsyncStepInputSnapshot.execute_request:type_name -> dex.InvokeExecuteMethodRequest - 83, // 64: dex.InternalLocalActivityInput.method_options:type_name -> dex.StepMethodOptions - 75, // 65: dex.GetHistoryEventsResponse.events:type_name -> dex.FlowHistoryEvent - 210, // 66: dex.FlowHistoryEvent.event_time:type_name -> google.protobuf.Timestamp - 77, // 67: dex.FlowHistoryEvent.flow_started_or_continued:type_name -> dex.FlowStartedOrContinuedHistoryEvent - 80, // 68: dex.FlowHistoryEvent.flow_closed:type_name -> dex.FlowClosedHistoryEvent - 89, // 69: dex.FlowHistoryEvent.step_wait_for_completed:type_name -> dex.StepWaitForCompletedEvent - 90, // 70: dex.FlowHistoryEvent.step_wait_for_failed:type_name -> dex.StepWaitForFailedEvent - 91, // 71: dex.FlowHistoryEvent.step_execute_completed:type_name -> dex.StepExecuteCompletedEvent - 92, // 72: dex.FlowHistoryEvent.step_execute_failed:type_name -> dex.StepExecuteFailedEvent - 93, // 73: dex.FlowHistoryEvent.rpc_execution_completed:type_name -> dex.RpcExecutionCompletedEvent - 94, // 74: dex.FlowHistoryEvent.channel_external_publish:type_name -> dex.ChannelExternalPublishEvent - 81, // 75: dex.FlowHistoryEvent.step_wait_for_pending:type_name -> dex.StepMethodPendingEvent - 81, // 76: dex.FlowHistoryEvent.step_execute_pending:type_name -> dex.StepMethodPendingEvent - 76, // 77: dex.FlowHistoryEvent.time_travel_fork:type_name -> dex.TimeTravelForkHistoryEvent - 95, // 78: dex.FlowHistoryEvent.channel_external_delete:type_name -> dex.ChannelExternalDeleteEvent - 68, // 79: dex.FlowStartedOrContinuedHistoryEvent.flow_execution_id:type_name -> dex.FlowExecutionID - 37, // 80: dex.FlowStartedOrContinuedHistoryEvent.flow_config:type_name -> dex.FlowConfig - 211, // 81: dex.FlowStartedOrContinuedHistoryEvent.flow_timeout:type_name -> google.protobuf.Duration - 6, // 82: dex.FlowStartedOrContinuedHistoryEvent.flow_timeout_policy:type_name -> dex.FlowTimeoutPolicy - 34, // 83: dex.FlowStartedOrContinuedHistoryEvent.timeout_handler_options:type_name -> dex.FlowTimeoutHandlerOptions - 78, // 84: dex.FlowStartedOrContinuedHistoryEvent.initial_start:type_name -> dex.FlowInitialStart - 79, // 85: dex.FlowStartedOrContinuedHistoryEvent.continued_start:type_name -> dex.FlowContinuedStart - 23, // 86: dex.FlowInitialStart.step_input:type_name -> dex.Value - 33, // 87: dex.FlowInitialStart.step_options:type_name -> dex.StepOptions - 27, // 88: dex.FlowInitialStart.initial_attributes:type_name -> dex.KV - 132, // 89: dex.FlowContinuedStart.steps_to_start:type_name -> dex.StepMovement - 148, // 90: dex.FlowContinuedStart.steps_to_resume:type_name -> dex.StepExecutionResumeInfo - 192, // 91: dex.FlowContinuedStart.pending_channel_messages:type_name -> dex.FlowContinuedStart.PendingChannelMessagesEntry - 27, // 92: dex.FlowContinuedStart.attributes:type_name -> dex.KV - 61, // 93: dex.FlowContinuedStart.completed_steps:type_name -> dex.StepCompletionOutput - 8, // 94: dex.FlowClosedHistoryEvent.flow_status:type_name -> dex.FlowStatus - 61, // 95: dex.FlowClosedHistoryEvent.results:type_name -> dex.StepCompletionOutput - 9, // 96: dex.FlowClosedHistoryEvent.error_type:type_name -> dex.FlowErrorType - 84, // 97: dex.StepMethodPendingEvent.input:type_name -> dex.StepMethodEventInput - 85, // 98: dex.StepMethodPendingEvent.context:type_name -> dex.StepMethodEventContext - 10, // 99: dex.StepMethodPendingEvent.phase:type_name -> dex.PendingStepMethodPhase - 114, // 100: dex.StepMethodFailure.details:type_name -> dex.ServiceErrorResponse - 31, // 101: dex.StepMethodOptions.retry_policy:type_name -> dex.RetryPolicy - 23, // 102: dex.StepMethodEventInput.step_input:type_name -> dex.Value - 141, // 103: dex.StepMethodEventInput.condition_results:type_name -> dex.ConditionResults - 27, // 104: dex.StepMethodEventInput.attributes:type_name -> dex.KV - 27, // 105: dex.StepMethodEventInput.step_execution_locals:type_name -> dex.KV - 5, // 106: dex.StepMethodEventContext.durability:type_name -> dex.StepDurability - 210, // 107: dex.StepMethodEventContext.started_time:type_name -> google.protobuf.Timestamp - 211, // 108: dex.StepMethodEventContext.duration:type_name -> google.protobuf.Duration - 83, // 109: dex.StepMethodEventContext.method_options:type_name -> dex.StepMethodOptions - 82, // 110: dex.StepMethodEventContext.last_failure_info:type_name -> dex.StepMethodFailure - 134, // 111: dex.StepWaitForCompletedOutput.wait_for_condition:type_name -> dex.WaitingCondition - 25, // 112: dex.StepWaitForCompletedOutput.upsert_attributes:type_name -> dex.AttributeWrite - 43, // 113: dex.StepWaitForCompletedOutput.publish_to_channel:type_name -> dex.ChannelMessage - 27, // 114: dex.StepWaitForCompletedOutput.record_events:type_name -> dex.KV - 27, // 115: dex.StepWaitForCompletedOutput.upsert_step_execution_locals:type_name -> dex.KV - 47, // 116: dex.StepWaitForCompletedOutput.delete_from_channel:type_name -> dex.ChannelMessageDeletion - 130, // 117: dex.StepExecuteCompletedOutput.step_decision:type_name -> dex.StepDecision - 25, // 118: dex.StepExecuteCompletedOutput.upsert_attributes:type_name -> dex.AttributeWrite - 43, // 119: dex.StepExecuteCompletedOutput.publish_to_channel:type_name -> dex.ChannelMessage - 27, // 120: dex.StepExecuteCompletedOutput.record_events:type_name -> dex.KV - 27, // 121: dex.StepExecuteCompletedOutput.upsert_step_execution_locals:type_name -> dex.KV - 47, // 122: dex.StepExecuteCompletedOutput.delete_from_channel:type_name -> dex.ChannelMessageDeletion - 82, // 123: dex.StepMethodFailedOutput.failure:type_name -> dex.StepMethodFailure - 84, // 124: dex.StepWaitForCompletedEvent.input:type_name -> dex.StepMethodEventInput - 86, // 125: dex.StepWaitForCompletedEvent.output:type_name -> dex.StepWaitForCompletedOutput - 85, // 126: dex.StepWaitForCompletedEvent.context:type_name -> dex.StepMethodEventContext - 84, // 127: dex.StepWaitForFailedEvent.input:type_name -> dex.StepMethodEventInput - 88, // 128: dex.StepWaitForFailedEvent.output:type_name -> dex.StepMethodFailedOutput - 85, // 129: dex.StepWaitForFailedEvent.context:type_name -> dex.StepMethodEventContext - 84, // 130: dex.StepExecuteCompletedEvent.input:type_name -> dex.StepMethodEventInput - 87, // 131: dex.StepExecuteCompletedEvent.output:type_name -> dex.StepExecuteCompletedOutput - 85, // 132: dex.StepExecuteCompletedEvent.context:type_name -> dex.StepMethodEventContext - 84, // 133: dex.StepExecuteFailedEvent.input:type_name -> dex.StepMethodEventInput - 88, // 134: dex.StepExecuteFailedEvent.output:type_name -> dex.StepMethodFailedOutput - 85, // 135: dex.StepExecuteFailedEvent.context:type_name -> dex.StepMethodEventContext - 23, // 136: dex.RpcExecutionCompletedEvent.input:type_name -> dex.Value - 23, // 137: dex.RpcExecutionCompletedEvent.output:type_name -> dex.Value - 130, // 138: dex.RpcExecutionCompletedEvent.step_decision:type_name -> dex.StepDecision - 25, // 139: dex.RpcExecutionCompletedEvent.upsert_attributes:type_name -> dex.AttributeWrite - 27, // 140: dex.RpcExecutionCompletedEvent.record_events:type_name -> dex.KV - 43, // 141: dex.RpcExecutionCompletedEvent.publish_to_channel:type_name -> dex.ChannelMessage - 47, // 142: dex.RpcExecutionCompletedEvent.delete_from_channel:type_name -> dex.ChannelMessageDeletion - 43, // 143: dex.ChannelExternalPublishEvent.messages:type_name -> dex.ChannelMessage - 47, // 144: dex.ChannelExternalDeleteEvent.messages:type_name -> dex.ChannelMessageDeletion - 8, // 145: dex.WaitForHistoryEventResponse.flow_status:type_name -> dex.FlowStatus - 11, // 146: dex.ActiveStepExecutionState.phase:type_name -> dex.ActiveStepPhase - 132, // 147: dex.ActiveStepExecutionState.movement:type_name -> dex.StepMovement - 135, // 148: dex.ActiveStepExecutionState.waiting_condition:type_name -> dex.WaitingConditionState - 147, // 149: dex.ActiveStepExecutionState.completed_conditions:type_name -> dex.StepExecutionCompletedConditions - 27, // 150: dex.ActiveStepExecutionState.step_execution_locals:type_name -> dex.KV - 183, // 151: dex.ActiveStepExecutionState.timers:type_name -> dex.TimerInfo - 82, // 152: dex.ActiveStepExecutionState.last_failure_info:type_name -> dex.StepMethodFailure - 37, // 153: dex.GetFlowStateResponse.flow_config:type_name -> dex.FlowConfig - 27, // 154: dex.GetFlowStateResponse.attributes:type_name -> dex.KV - 98, // 155: dex.GetFlowStateResponse.active_step_executions:type_name -> dex.ActiveStepExecutionState - 132, // 156: dex.GetFlowStateResponse.queued_steps:type_name -> dex.StepMovement - 193, // 157: dex.GetFlowStateResponse.pending_channel_messages:type_name -> dex.GetFlowStateResponse.PendingChannelMessagesEntry - 61, // 158: dex.GetFlowStateResponse.completed_steps:type_name -> dex.StepCompletionOutput - 12, // 159: dex.ResetFlowRequest.reset_type:type_name -> dex.FlowResetType - 13, // 160: dex.ResetFlowRequest.step_method:type_name -> dex.FlowResetStepMethod - 23, // 161: dex.InvokeRPCRequest.input:type_name -> dex.Value - 23, // 162: dex.InvokeRPCResponse.output:type_name -> dex.Value - 37, // 163: dex.UpdateFlowConfigRequest.flow_config:type_name -> dex.FlowConfig - 111, // 164: dex.WaitForAttributeRequest.match:type_name -> dex.AttributeMatch - 23, // 165: dex.WaitForAttributeResponse.matched_value:type_name -> dex.Value - 14, // 166: dex.AttributeMatch.operator:type_name -> dex.AttributeMatchOperator - 23, // 167: dex.AttributeMatch.operand:type_name -> dex.Value - 15, // 168: dex.ServiceErrorResponse.sub_status:type_name -> dex.ErrorSubStatus - 117, // 169: dex.InternalActivityError.worker_error:type_name -> dex.InternalWorkerError - 116, // 170: dex.InternalFlowError.activity_error:type_name -> dex.InternalActivityError - 29, // 171: dex.InvokeWaitForMethodRequest.context:type_name -> dex.Context - 23, // 172: dex.InvokeWaitForMethodRequest.step_input:type_name -> dex.Value - 27, // 173: dex.InvokeWaitForMethodRequest.attributes:type_name -> dex.KV - 194, // 174: dex.InvokeWaitForMethodRequest.channel_infos:type_name -> dex.InvokeWaitForMethodRequest.ChannelInfosEntry - 195, // 175: dex.InvokeWaitForMethodRequest.loaded_channel_messages:type_name -> dex.InvokeWaitForMethodRequest.LoadedChannelMessagesEntry - 30, // 176: dex.InvokeWaitForMethodResponse.local_activity_metadata:type_name -> dex.LocalActivityMetadata - 25, // 177: dex.InvokeWaitForMethodResponse.upsert_attributes:type_name -> dex.AttributeWrite - 134, // 178: dex.InvokeWaitForMethodResponse.waiting_condition:type_name -> dex.WaitingCondition - 27, // 179: dex.InvokeWaitForMethodResponse.upsert_step_exe_locals:type_name -> dex.KV - 27, // 180: dex.InvokeWaitForMethodResponse.record_events:type_name -> dex.KV - 43, // 181: dex.InvokeWaitForMethodResponse.publish_to_channel:type_name -> dex.ChannelMessage - 47, // 182: dex.InvokeWaitForMethodResponse.delete_from_channel:type_name -> dex.ChannelMessageDeletion - 23, // 183: dex.StepMethodHeartbeat.value:type_name -> dex.Value - 23, // 184: dex.StepStreamWrite.value:type_name -> dex.Value - 122, // 185: dex.InvokeWaitForMethodOutput.heartbeat:type_name -> dex.StepMethodHeartbeat - 123, // 186: dex.InvokeWaitForMethodOutput.stream_write:type_name -> dex.StepStreamWrite - 121, // 187: dex.InvokeWaitForMethodOutput.result:type_name -> dex.InvokeWaitForMethodResponse - 29, // 188: dex.InvokeExecuteMethodRequest.context:type_name -> dex.Context - 23, // 189: dex.InvokeExecuteMethodRequest.step_input:type_name -> dex.Value - 27, // 190: dex.InvokeExecuteMethodRequest.attributes:type_name -> dex.KV - 27, // 191: dex.InvokeExecuteMethodRequest.step_exe_locals:type_name -> dex.KV - 141, // 192: dex.InvokeExecuteMethodRequest.condition_results:type_name -> dex.ConditionResults - 196, // 193: dex.InvokeExecuteMethodRequest.channel_infos:type_name -> dex.InvokeExecuteMethodRequest.ChannelInfosEntry - 197, // 194: dex.InvokeExecuteMethodRequest.loaded_channel_messages:type_name -> dex.InvokeExecuteMethodRequest.LoadedChannelMessagesEntry - 30, // 195: dex.InvokeExecuteMethodResponse.local_activity_metadata:type_name -> dex.LocalActivityMetadata - 130, // 196: dex.InvokeExecuteMethodResponse.step_decision:type_name -> dex.StepDecision - 25, // 197: dex.InvokeExecuteMethodResponse.upsert_attributes:type_name -> dex.AttributeWrite - 27, // 198: dex.InvokeExecuteMethodResponse.record_events:type_name -> dex.KV - 27, // 199: dex.InvokeExecuteMethodResponse.upsert_step_exe_locals:type_name -> dex.KV - 43, // 200: dex.InvokeExecuteMethodResponse.publish_to_channel:type_name -> dex.ChannelMessage - 47, // 201: dex.InvokeExecuteMethodResponse.delete_from_channel:type_name -> dex.ChannelMessageDeletion - 122, // 202: dex.InvokeExecuteMethodOutput.heartbeat:type_name -> dex.StepMethodHeartbeat - 123, // 203: dex.InvokeExecuteMethodOutput.stream_write:type_name -> dex.StepStreamWrite - 126, // 204: dex.InvokeExecuteMethodOutput.result:type_name -> dex.InvokeExecuteMethodResponse - 29, // 205: dex.InvokeWorkerRPCRequest.context:type_name -> dex.Context - 23, // 206: dex.InvokeWorkerRPCRequest.input:type_name -> dex.Value - 27, // 207: dex.InvokeWorkerRPCRequest.attributes:type_name -> dex.KV - 198, // 208: dex.InvokeWorkerRPCRequest.channel_infos:type_name -> dex.InvokeWorkerRPCRequest.ChannelInfosEntry - 199, // 209: dex.InvokeWorkerRPCRequest.loaded_channel_messages:type_name -> dex.InvokeWorkerRPCRequest.LoadedChannelMessagesEntry - 23, // 210: dex.InvokeWorkerRPCResponse.output:type_name -> dex.Value - 130, // 211: dex.InvokeWorkerRPCResponse.step_decision:type_name -> dex.StepDecision - 25, // 212: dex.InvokeWorkerRPCResponse.upsert_attributes:type_name -> dex.AttributeWrite - 27, // 213: dex.InvokeWorkerRPCResponse.record_events:type_name -> dex.KV - 47, // 214: dex.InvokeWorkerRPCResponse.delete_from_channel:type_name -> dex.ChannelMessageDeletion - 43, // 215: dex.InvokeWorkerRPCResponse.publish_to_channel:type_name -> dex.ChannelMessage - 132, // 216: dex.StepDecision.next_steps:type_name -> dex.StepMovement - 131, // 217: dex.StepDecision.close_decision:type_name -> dex.CloseDecision - 16, // 218: dex.CloseDecision.close_decision_type:type_name -> dex.CloseDecisionType - 23, // 219: dex.CloseDecision.close_input:type_name -> dex.Value - 23, // 220: dex.StepMovement.step_input:type_name -> dex.Value - 33, // 221: dex.StepMovement.step_options:type_name -> dex.StepOptions - 160, // 222: dex.StepMovement.recovery_error_internal_only:type_name -> dex.RecoveryErrorInfo - 17, // 223: dex.WaitingCondition.waiting_condition_type:type_name -> dex.WaitingConditionType - 139, // 224: dex.WaitingCondition.timer_conditions:type_name -> dex.TimerCondition - 140, // 225: dex.WaitingCondition.channel_conditions:type_name -> dex.ChannelCondition - 133, // 226: dex.WaitingCondition.condition_combinations:type_name -> dex.ConditionCombination - 137, // 227: dex.WaitingCondition.sub_flow_conditions:type_name -> dex.SubFlowCondition - 17, // 228: dex.WaitingConditionState.waiting_condition_type:type_name -> dex.WaitingConditionType - 139, // 229: dex.WaitingConditionState.timer_conditions:type_name -> dex.TimerCondition - 140, // 230: dex.WaitingConditionState.channel_conditions:type_name -> dex.ChannelCondition - 133, // 231: dex.WaitingConditionState.condition_combinations:type_name -> dex.ConditionCombination - 138, // 232: dex.WaitingConditionState.sub_flow_conditions:type_name -> dex.SubFlowConditionState - 18, // 233: dex.SubFlowOptions.reuse_policy:type_name -> dex.SubFlowReusePolicy - 32, // 234: dex.SubFlowOptions.retry_policy:type_name -> dex.FlowRetryPolicy - 25, // 235: dex.SubFlowOptions.attributes:type_name -> dex.AttributeWrite - 37, // 236: dex.SubFlowOptions.flow_config_override:type_name -> dex.FlowConfig - 6, // 237: dex.SubFlowOptions.flow_timeout_policy:type_name -> dex.FlowTimeoutPolicy - 34, // 238: dex.SubFlowOptions.timeout_handler_options:type_name -> dex.FlowTimeoutHandlerOptions - 23, // 239: dex.SubFlowCondition.step_input:type_name -> dex.Value - 33, // 240: dex.SubFlowCondition.step_options:type_name -> dex.StepOptions - 136, // 241: dex.SubFlowCondition.options:type_name -> dex.SubFlowOptions - 143, // 242: dex.ConditionResults.channel_results:type_name -> dex.ChannelResult - 142, // 243: dex.ConditionResults.timer_results:type_name -> dex.TimerResult - 62, // 244: dex.ConditionResults.sub_flow_results:type_name -> dex.FlowResult - 19, // 245: dex.TimerResult.condition_status:type_name -> dex.ConditionStatus - 19, // 246: dex.ChannelResult.condition_status:type_name -> dex.ConditionStatus - 23, // 247: dex.ChannelResult.values:type_name -> dex.Value - 43, // 248: dex.ChannelValues.messages:type_name -> dex.ChannelMessage - 200, // 249: dex.StepExecutionCompletedConditions.completed_timer_conditions:type_name -> dex.StepExecutionCompletedConditions.CompletedTimerConditionsEntry - 201, // 250: dex.StepExecutionCompletedConditions.completed_sub_flow_results:type_name -> dex.StepExecutionCompletedConditions.CompletedSubFlowResultsEntry - 132, // 251: dex.StepExecutionResumeInfo.step:type_name -> dex.StepMovement - 147, // 252: dex.StepExecutionResumeInfo.completed_conditions:type_name -> dex.StepExecutionCompletedConditions - 135, // 253: dex.StepExecutionResumeInfo.waiting_condition:type_name -> dex.WaitingConditionState - 27, // 254: dex.StepExecutionResumeInfo.step_exe_locals:type_name -> dex.KV - 202, // 255: dex.StepExecutionCounterInfo.step_type_started_count:type_name -> dex.StepExecutionCounterInfo.StepTypeStartedCountEntry - 203, // 256: dex.StepExecutionCounterInfo.step_type_currently_executing_count:type_name -> dex.StepExecutionCounterInfo.StepTypeCurrentlyExecutingCountEntry - 204, // 257: dex.StepExecutionCounterInfo.step_active_execution_nums:type_name -> dex.StepExecutionCounterInfo.StepActiveExecutionNumsEntry - 132, // 258: dex.ContinueAsNewDump.steps_to_start_from_beginning:type_name -> dex.StepMovement - 148, // 259: dex.ContinueAsNewDump.step_executions_to_resume:type_name -> dex.StepExecutionResumeInfo - 205, // 260: dex.ContinueAsNewDump.channel_received:type_name -> dex.ContinueAsNewDump.ChannelReceivedEntry - 149, // 261: dex.ContinueAsNewDump.counter_info:type_name -> dex.StepExecutionCounterInfo - 61, // 262: dex.ContinueAsNewDump.step_outputs:type_name -> dex.StepCompletionOutput - 150, // 263: dex.ContinueAsNewDump.stale_skip_timers:type_name -> dex.StaleSkipTimer - 27, // 264: dex.ContinueAsNewDump.attributes:type_name -> dex.KV - 169, // 265: dex.ContinueAsNewDump.pending_attribute_sync_items:type_name -> dex.AttributeSyncItem - 6, // 266: dex.InterpreterWorkflowInput.flow_timeout_policy:type_name -> dex.FlowTimeoutPolicy - 23, // 267: dex.InterpreterWorkflowInput.step_input:type_name -> dex.Value - 33, // 268: dex.InterpreterWorkflowInput.step_options:type_name -> dex.StepOptions - 25, // 269: dex.InterpreterWorkflowInput.init_attributes:type_name -> dex.AttributeWrite - 37, // 270: dex.InterpreterWorkflowInput.config:type_name -> dex.FlowConfig - 152, // 271: dex.InterpreterWorkflowInput.continue_as_new_input:type_name -> dex.ContinueAsNewInput - 34, // 272: dex.InterpreterWorkflowInput.timeout_handler_options:type_name -> dex.FlowTimeoutHandlerOptions - 61, // 273: dex.InterpreterWorkflowOutput.step_completion_outputs:type_name -> dex.StepCompletionOutput - 39, // 274: dex.InvokeWaitForMethodActivityInput.worker_target:type_name -> dex.WorkerTarget - 120, // 275: dex.InvokeWaitForMethodActivityInput.request:type_name -> dex.InvokeWaitForMethodRequest - 121, // 276: dex.InvokeWaitForMethodActivityOutput.response:type_name -> dex.InvokeWaitForMethodResponse - 39, // 277: dex.InvokeExecuteMethodActivityInput.worker_target:type_name -> dex.WorkerTarget - 125, // 278: dex.InvokeExecuteMethodActivityInput.request:type_name -> dex.InvokeExecuteMethodRequest - 30, // 279: dex.InternalLocalStepActivityFailure.local_activity_metadata:type_name -> dex.LocalActivityMetadata - 83, // 280: dex.InternalLocalStepActivityFailure.method_options:type_name -> dex.StepMethodOptions - 116, // 281: dex.InternalLocalStepActivityFailure.activity_error:type_name -> dex.InternalActivityError - 126, // 282: dex.InvokeExecuteMethodActivityOutput.response:type_name -> dex.InvokeExecuteMethodResponse - 144, // 283: dex.DumpFlowForContinueAsNewActivityInput.request:type_name -> dex.ContinueAsNewDumpRequest - 145, // 284: dex.DumpFlowForContinueAsNewActivityOutput.response:type_name -> dex.ContinueAsNewDumpResponse - 182, // 285: dex.InvokeWorkerRPCActivityInput.rpc_prep:type_name -> dex.PrepareRpcQueryResponse - 103, // 286: dex.InvokeWorkerRPCActivityInput.request:type_name -> dex.InvokeRPCRequest - 129, // 287: dex.InvokeWorkerRPCActivityOutput.response:type_name -> dex.InvokeWorkerRPCResponse - 23, // 288: dex.AttributeSyncItem.value:type_name -> dex.Value - 169, // 289: dex.SyncAttributeBatchActivityInput.items:type_name -> dex.AttributeSyncItem - 137, // 290: dex.StartSubFlowActivityInput.condition:type_name -> dex.SubFlowCondition - 37, // 291: dex.StartSubFlowActivityInput.parent_flow_config:type_name -> dex.FlowConfig - 62, // 292: dex.StartSubFlowActivityOutput.immediate_flow_result:type_name -> dex.FlowResult - 62, // 293: dex.SubFlowCompletionSignalRequest.flow_result:type_name -> dex.FlowResult - 173, // 294: dex.ReportSubFlowCompletionActivityInput.request:type_name -> dex.SubFlowCompletionSignalRequest - 22, // 295: dex.ReportSubFlowCompletionActivityOutput.status:type_name -> dex.SubFlowCompletionDeliveryStatus - 23, // 296: dex.ExecuteRpcSignalRequest.rpc_input:type_name -> dex.Value - 23, // 297: dex.ExecuteRpcSignalRequest.rpc_output:type_name -> dex.Value - 25, // 298: dex.ExecuteRpcSignalRequest.upsert_attributes:type_name -> dex.AttributeWrite - 130, // 299: dex.ExecuteRpcSignalRequest.step_decision:type_name -> dex.StepDecision - 27, // 300: dex.ExecuteRpcSignalRequest.record_events:type_name -> dex.KV - 43, // 301: dex.ExecuteRpcSignalRequest.publish_to_channel:type_name -> dex.ChannelMessage - 47, // 302: dex.ExecuteRpcSignalRequest.delete_from_channel:type_name -> dex.ChannelMessageDeletion - 7, // 303: dex.StopFlowSignalRequest.stop_type:type_name -> dex.StopType - 27, // 304: dex.GetAttributesQueryResponse.attributes:type_name -> dex.KV - 27, // 305: dex.PrepareRpcQueryResponse.attributes:type_name -> dex.KV - 39, // 306: dex.PrepareRpcQueryResponse.worker_target:type_name -> dex.WorkerTarget - 206, // 307: dex.PrepareRpcQueryResponse.channel_infos:type_name -> dex.PrepareRpcQueryResponse.ChannelInfosEntry - 207, // 308: dex.PrepareRpcQueryResponse.loaded_channel_messages:type_name -> dex.PrepareRpcQueryResponse.LoadedChannelMessagesEntry - 20, // 309: dex.TimerInfo.status:type_name -> dex.InternalTimerStatus - 183, // 310: dex.TimerInfoList.timers:type_name -> dex.TimerInfo - 208, // 311: dex.GetCurrentTimerInfosQueryResponse.step_execution_current_timer_infos:type_name -> dex.GetCurrentTimerInfosQueryResponse.StepExecutionCurrentTimerInfosEntry - 183, // 312: dex.GetScheduledGreedyTimerTimesQueryResponse.pending_scheduled:type_name -> dex.TimerInfo - 37, // 313: dex.DebugDumpResponse.config:type_name -> dex.FlowConfig - 151, // 314: dex.DebugDumpResponse.snapshot:type_name -> dex.ContinueAsNewDump - 98, // 315: dex.DebugDumpResponse.active_step_executions:type_name -> dex.ActiveStepExecutionState - 104, // 316: dex.InvokeRpcUpdateResult.response:type_name -> dex.InvokeRPCResponse - 23, // 317: dex.LoadBlobsResponse.ValuesEntry.value:type_name -> dex.Value - 0, // 318: dex.SyncAttributeIndexRequest.AttributeIndexesEntry.value:type_name -> dex.IndexType - 146, // 319: dex.FlowContinuedStart.PendingChannelMessagesEntry.value:type_name -> dex.ChannelValues - 146, // 320: dex.GetFlowStateResponse.PendingChannelMessagesEntry.value:type_name -> dex.ChannelValues - 119, // 321: dex.InvokeWaitForMethodRequest.ChannelInfosEntry.value:type_name -> dex.ChannelInfo - 146, // 322: dex.InvokeWaitForMethodRequest.LoadedChannelMessagesEntry.value:type_name -> dex.ChannelValues - 119, // 323: dex.InvokeExecuteMethodRequest.ChannelInfosEntry.value:type_name -> dex.ChannelInfo - 146, // 324: dex.InvokeExecuteMethodRequest.LoadedChannelMessagesEntry.value:type_name -> dex.ChannelValues - 119, // 325: dex.InvokeWorkerRPCRequest.ChannelInfosEntry.value:type_name -> dex.ChannelInfo - 146, // 326: dex.InvokeWorkerRPCRequest.LoadedChannelMessagesEntry.value:type_name -> dex.ChannelValues - 20, // 327: dex.StepExecutionCompletedConditions.CompletedTimerConditionsEntry.value:type_name -> dex.InternalTimerStatus - 62, // 328: dex.StepExecutionCompletedConditions.CompletedSubFlowResultsEntry.value:type_name -> dex.FlowResult - 189, // 329: dex.StepExecutionCounterInfo.StepActiveExecutionNumsEntry.value:type_name -> dex.StepExecutionNumbers - 146, // 330: dex.ContinueAsNewDump.ChannelReceivedEntry.value:type_name -> dex.ChannelValues - 119, // 331: dex.PrepareRpcQueryResponse.ChannelInfosEntry.value:type_name -> dex.ChannelInfo - 146, // 332: dex.PrepareRpcQueryResponse.LoadedChannelMessagesEntry.value:type_name -> dex.ChannelValues - 184, // 333: dex.GetCurrentTimerInfosQueryResponse.StepExecutionCurrentTimerInfosEntry.value:type_name -> dex.TimerInfoList - 40, // 334: dex.FlowService.StartFlow:input_type -> dex.StartFlowRequest - 42, // 335: dex.FlowService.PublishToChannel:input_type -> dex.PublishToChannelRequest - 44, // 336: dex.FlowService.GetChannelMessages:input_type -> dex.GetChannelMessagesRequest - 46, // 337: dex.FlowService.DeleteChannelMessage:input_type -> dex.DeleteChannelMessageRequest - 48, // 338: dex.FlowService.WriteStream:input_type -> dex.WriteStreamRequest - 49, // 339: dex.FlowService.ReadStream:input_type -> dex.ReadStreamRequest - 51, // 340: dex.FlowService.ListStreamMessages:input_type -> dex.ListStreamMessagesRequest - 54, // 341: dex.FlowService.StopFlow:input_type -> dex.StopFlowRequest - 55, // 342: dex.FlowService.GetAttributes:input_type -> dex.GetAttributesRequest - 57, // 343: dex.FlowService.SetAttributes:input_type -> dex.SetAttributesRequest - 58, // 344: dex.FlowService.LoadBlobs:input_type -> dex.LoadBlobsRequest - 60, // 345: dex.FlowService.WaitForFlow:input_type -> dex.WaitForFlowRequest - 63, // 346: dex.FlowService.SearchFlows:input_type -> dex.SearchFlowsRequest - 66, // 347: dex.FlowService.SyncAttributeIndexes:input_type -> dex.SyncAttributeIndexRequest - 69, // 348: dex.FlowService.GetFlowSummary:input_type -> dex.GetFlowSummaryRequest - 73, // 349: dex.FlowService.GetHistoryEvents:input_type -> dex.GetHistoryEventsRequest - 96, // 350: dex.FlowService.WaitForHistoryEvent:input_type -> dex.WaitForHistoryEventRequest - 99, // 351: dex.FlowService.GetFlowState:input_type -> dex.GetFlowStateRequest - 101, // 352: dex.FlowService.ResetFlow:input_type -> dex.ResetFlowRequest - 103, // 353: dex.FlowService.InvokeRPC:input_type -> dex.InvokeRPCRequest - 105, // 354: dex.FlowService.SkipTimer:input_type -> dex.SkipTimerRequest - 106, // 355: dex.FlowService.UpdateFlowConfig:input_type -> dex.UpdateFlowConfigRequest - 107, // 356: dex.FlowService.WaitForStepCompletion:input_type -> dex.WaitForStepCompletionRequest - 109, // 357: dex.FlowService.WaitForAttribute:input_type -> dex.WaitForAttributeRequest - 112, // 358: dex.FlowService.TriggerContinueAsNew:input_type -> dex.TriggerContinueAsNewRequest - 212, // 359: dex.FlowService.HealthCheck:input_type -> google.protobuf.Empty - 120, // 360: dex.WorkerService.InvokeWaitForMethod:input_type -> dex.InvokeWaitForMethodRequest - 125, // 361: dex.WorkerService.InvokeExecuteMethod:input_type -> dex.InvokeExecuteMethodRequest - 128, // 362: dex.WorkerService.InvokeWorkerRPC:input_type -> dex.InvokeWorkerRPCRequest - 144, // 363: dex.InternalService.DumpFlowForContinueAsNew:input_type -> dex.ContinueAsNewDumpRequest - 41, // 364: dex.FlowService.StartFlow:output_type -> dex.StartFlowResponse - 212, // 365: dex.FlowService.PublishToChannel:output_type -> google.protobuf.Empty - 45, // 366: dex.FlowService.GetChannelMessages:output_type -> dex.GetChannelMessagesResponse - 212, // 367: dex.FlowService.DeleteChannelMessage:output_type -> google.protobuf.Empty - 212, // 368: dex.FlowService.WriteStream:output_type -> google.protobuf.Empty - 50, // 369: dex.FlowService.ReadStream:output_type -> dex.ReadStreamResponse - 52, // 370: dex.FlowService.ListStreamMessages:output_type -> dex.ListStreamMessagesResponse - 212, // 371: dex.FlowService.StopFlow:output_type -> google.protobuf.Empty - 56, // 372: dex.FlowService.GetAttributes:output_type -> dex.GetAttributesResponse - 212, // 373: dex.FlowService.SetAttributes:output_type -> google.protobuf.Empty - 59, // 374: dex.FlowService.LoadBlobs:output_type -> dex.LoadBlobsResponse - 62, // 375: dex.FlowService.WaitForFlow:output_type -> dex.FlowResult - 64, // 376: dex.FlowService.SearchFlows:output_type -> dex.SearchFlowsResponse - 67, // 377: dex.FlowService.SyncAttributeIndexes:output_type -> dex.SyncAttributeIndexResponse - 70, // 378: dex.FlowService.GetFlowSummary:output_type -> dex.GetFlowSummaryResponse - 74, // 379: dex.FlowService.GetHistoryEvents:output_type -> dex.GetHistoryEventsResponse - 97, // 380: dex.FlowService.WaitForHistoryEvent:output_type -> dex.WaitForHistoryEventResponse - 100, // 381: dex.FlowService.GetFlowState:output_type -> dex.GetFlowStateResponse - 102, // 382: dex.FlowService.ResetFlow:output_type -> dex.ResetFlowResponse - 104, // 383: dex.FlowService.InvokeRPC:output_type -> dex.InvokeRPCResponse - 212, // 384: dex.FlowService.SkipTimer:output_type -> google.protobuf.Empty - 212, // 385: dex.FlowService.UpdateFlowConfig:output_type -> google.protobuf.Empty - 108, // 386: dex.FlowService.WaitForStepCompletion:output_type -> dex.WaitForStepCompletionResponse - 110, // 387: dex.FlowService.WaitForAttribute:output_type -> dex.WaitForAttributeResponse - 212, // 388: dex.FlowService.TriggerContinueAsNew:output_type -> google.protobuf.Empty - 113, // 389: dex.FlowService.HealthCheck:output_type -> dex.HealthInfo - 124, // 390: dex.WorkerService.InvokeWaitForMethod:output_type -> dex.InvokeWaitForMethodOutput - 127, // 391: dex.WorkerService.InvokeExecuteMethod:output_type -> dex.InvokeExecuteMethodOutput - 129, // 392: dex.WorkerService.InvokeWorkerRPC:output_type -> dex.InvokeWorkerRPCResponse - 145, // 393: dex.InternalService.DumpFlowForContinueAsNew:output_type -> dex.ContinueAsNewDumpResponse - 364, // [364:394] is the sub-list for method output_type - 334, // [334:364] is the sub-list for method input_type - 334, // [334:334] is the sub-list for extension type_name - 334, // [334:334] is the sub-list for extension extendee - 0, // [0:334] is the sub-list for field type_name + 23, // 45: dex.LoadBlobRequestEntry.blob_value:type_name -> dex.Value + 58, // 46: dex.LoadBlobsRequest.entries:type_name -> dex.LoadBlobRequestEntry + 191, // 47: dex.LoadBlobsResponse.values:type_name -> dex.LoadBlobsResponse.ValuesEntry + 23, // 48: dex.StepCompletionOutput.completed_step_output:type_name -> dex.Value + 8, // 49: dex.FlowResult.flow_status:type_name -> dex.FlowStatus + 62, // 50: dex.FlowResult.results:type_name -> dex.StepCompletionOutput + 9, // 51: dex.FlowResult.error_type:type_name -> dex.FlowErrorType + 66, // 52: dex.SearchFlowsResponse.flow_runs:type_name -> dex.SearchFlowsResponseEntry + 27, // 53: dex.SearchFlowsResponseEntry.indexed_attributes:type_name -> dex.KV + 8, // 54: dex.SearchFlowsResponseEntry.flow_status:type_name -> dex.FlowStatus + 211, // 55: dex.SearchFlowsResponseEntry.start_time:type_name -> google.protobuf.Timestamp + 211, // 56: dex.SearchFlowsResponseEntry.close_time:type_name -> google.protobuf.Timestamp + 192, // 57: dex.SyncAttributeIndexRequest.attribute_indexes:type_name -> dex.SyncAttributeIndexRequest.AttributeIndexesEntry + 69, // 58: dex.GetFlowSummaryResponse.flow_execution_id:type_name -> dex.FlowExecutionID + 8, // 59: dex.GetFlowSummaryResponse.flow_status:type_name -> dex.FlowStatus + 211, // 60: dex.GetFlowSummaryResponse.start_time:type_name -> google.protobuf.Timestamp + 211, // 61: dex.GetFlowSummaryResponse.close_time:type_name -> google.protobuf.Timestamp + 84, // 62: dex.InternalAsyncStepInputSnapshot.method_options:type_name -> dex.StepMethodOptions + 121, // 63: dex.InternalAsyncStepInputSnapshot.wait_for_request:type_name -> dex.InvokeWaitForMethodRequest + 126, // 64: dex.InternalAsyncStepInputSnapshot.execute_request:type_name -> dex.InvokeExecuteMethodRequest + 84, // 65: dex.InternalLocalActivityInput.method_options:type_name -> dex.StepMethodOptions + 76, // 66: dex.GetHistoryEventsResponse.events:type_name -> dex.FlowHistoryEvent + 211, // 67: dex.FlowHistoryEvent.event_time:type_name -> google.protobuf.Timestamp + 78, // 68: dex.FlowHistoryEvent.flow_started_or_continued:type_name -> dex.FlowStartedOrContinuedHistoryEvent + 81, // 69: dex.FlowHistoryEvent.flow_closed:type_name -> dex.FlowClosedHistoryEvent + 90, // 70: dex.FlowHistoryEvent.step_wait_for_completed:type_name -> dex.StepWaitForCompletedEvent + 91, // 71: dex.FlowHistoryEvent.step_wait_for_failed:type_name -> dex.StepWaitForFailedEvent + 92, // 72: dex.FlowHistoryEvent.step_execute_completed:type_name -> dex.StepExecuteCompletedEvent + 93, // 73: dex.FlowHistoryEvent.step_execute_failed:type_name -> dex.StepExecuteFailedEvent + 94, // 74: dex.FlowHistoryEvent.rpc_execution_completed:type_name -> dex.RpcExecutionCompletedEvent + 95, // 75: dex.FlowHistoryEvent.channel_external_publish:type_name -> dex.ChannelExternalPublishEvent + 82, // 76: dex.FlowHistoryEvent.step_wait_for_pending:type_name -> dex.StepMethodPendingEvent + 82, // 77: dex.FlowHistoryEvent.step_execute_pending:type_name -> dex.StepMethodPendingEvent + 77, // 78: dex.FlowHistoryEvent.time_travel_fork:type_name -> dex.TimeTravelForkHistoryEvent + 96, // 79: dex.FlowHistoryEvent.channel_external_delete:type_name -> dex.ChannelExternalDeleteEvent + 69, // 80: dex.FlowStartedOrContinuedHistoryEvent.flow_execution_id:type_name -> dex.FlowExecutionID + 37, // 81: dex.FlowStartedOrContinuedHistoryEvent.flow_config:type_name -> dex.FlowConfig + 212, // 82: dex.FlowStartedOrContinuedHistoryEvent.flow_timeout:type_name -> google.protobuf.Duration + 6, // 83: dex.FlowStartedOrContinuedHistoryEvent.flow_timeout_policy:type_name -> dex.FlowTimeoutPolicy + 34, // 84: dex.FlowStartedOrContinuedHistoryEvent.timeout_handler_options:type_name -> dex.FlowTimeoutHandlerOptions + 79, // 85: dex.FlowStartedOrContinuedHistoryEvent.initial_start:type_name -> dex.FlowInitialStart + 80, // 86: dex.FlowStartedOrContinuedHistoryEvent.continued_start:type_name -> dex.FlowContinuedStart + 23, // 87: dex.FlowInitialStart.step_input:type_name -> dex.Value + 33, // 88: dex.FlowInitialStart.step_options:type_name -> dex.StepOptions + 27, // 89: dex.FlowInitialStart.initial_attributes:type_name -> dex.KV + 133, // 90: dex.FlowContinuedStart.steps_to_start:type_name -> dex.StepMovement + 149, // 91: dex.FlowContinuedStart.steps_to_resume:type_name -> dex.StepExecutionResumeInfo + 193, // 92: dex.FlowContinuedStart.pending_channel_messages:type_name -> dex.FlowContinuedStart.PendingChannelMessagesEntry + 27, // 93: dex.FlowContinuedStart.attributes:type_name -> dex.KV + 62, // 94: dex.FlowContinuedStart.completed_steps:type_name -> dex.StepCompletionOutput + 8, // 95: dex.FlowClosedHistoryEvent.flow_status:type_name -> dex.FlowStatus + 62, // 96: dex.FlowClosedHistoryEvent.results:type_name -> dex.StepCompletionOutput + 9, // 97: dex.FlowClosedHistoryEvent.error_type:type_name -> dex.FlowErrorType + 85, // 98: dex.StepMethodPendingEvent.input:type_name -> dex.StepMethodEventInput + 86, // 99: dex.StepMethodPendingEvent.context:type_name -> dex.StepMethodEventContext + 10, // 100: dex.StepMethodPendingEvent.phase:type_name -> dex.PendingStepMethodPhase + 115, // 101: dex.StepMethodFailure.details:type_name -> dex.ServiceErrorResponse + 31, // 102: dex.StepMethodOptions.retry_policy:type_name -> dex.RetryPolicy + 23, // 103: dex.StepMethodEventInput.step_input:type_name -> dex.Value + 142, // 104: dex.StepMethodEventInput.condition_results:type_name -> dex.ConditionResults + 27, // 105: dex.StepMethodEventInput.attributes:type_name -> dex.KV + 27, // 106: dex.StepMethodEventInput.step_execution_locals:type_name -> dex.KV + 5, // 107: dex.StepMethodEventContext.durability:type_name -> dex.StepDurability + 211, // 108: dex.StepMethodEventContext.started_time:type_name -> google.protobuf.Timestamp + 212, // 109: dex.StepMethodEventContext.duration:type_name -> google.protobuf.Duration + 84, // 110: dex.StepMethodEventContext.method_options:type_name -> dex.StepMethodOptions + 83, // 111: dex.StepMethodEventContext.last_failure_info:type_name -> dex.StepMethodFailure + 135, // 112: dex.StepWaitForCompletedOutput.wait_for_condition:type_name -> dex.WaitingCondition + 25, // 113: dex.StepWaitForCompletedOutput.upsert_attributes:type_name -> dex.AttributeWrite + 43, // 114: dex.StepWaitForCompletedOutput.publish_to_channel:type_name -> dex.ChannelMessage + 27, // 115: dex.StepWaitForCompletedOutput.record_events:type_name -> dex.KV + 27, // 116: dex.StepWaitForCompletedOutput.upsert_step_execution_locals:type_name -> dex.KV + 47, // 117: dex.StepWaitForCompletedOutput.delete_from_channel:type_name -> dex.ChannelMessageDeletion + 131, // 118: dex.StepExecuteCompletedOutput.step_decision:type_name -> dex.StepDecision + 25, // 119: dex.StepExecuteCompletedOutput.upsert_attributes:type_name -> dex.AttributeWrite + 43, // 120: dex.StepExecuteCompletedOutput.publish_to_channel:type_name -> dex.ChannelMessage + 27, // 121: dex.StepExecuteCompletedOutput.record_events:type_name -> dex.KV + 27, // 122: dex.StepExecuteCompletedOutput.upsert_step_execution_locals:type_name -> dex.KV + 47, // 123: dex.StepExecuteCompletedOutput.delete_from_channel:type_name -> dex.ChannelMessageDeletion + 83, // 124: dex.StepMethodFailedOutput.failure:type_name -> dex.StepMethodFailure + 85, // 125: dex.StepWaitForCompletedEvent.input:type_name -> dex.StepMethodEventInput + 87, // 126: dex.StepWaitForCompletedEvent.output:type_name -> dex.StepWaitForCompletedOutput + 86, // 127: dex.StepWaitForCompletedEvent.context:type_name -> dex.StepMethodEventContext + 85, // 128: dex.StepWaitForFailedEvent.input:type_name -> dex.StepMethodEventInput + 89, // 129: dex.StepWaitForFailedEvent.output:type_name -> dex.StepMethodFailedOutput + 86, // 130: dex.StepWaitForFailedEvent.context:type_name -> dex.StepMethodEventContext + 85, // 131: dex.StepExecuteCompletedEvent.input:type_name -> dex.StepMethodEventInput + 88, // 132: dex.StepExecuteCompletedEvent.output:type_name -> dex.StepExecuteCompletedOutput + 86, // 133: dex.StepExecuteCompletedEvent.context:type_name -> dex.StepMethodEventContext + 85, // 134: dex.StepExecuteFailedEvent.input:type_name -> dex.StepMethodEventInput + 89, // 135: dex.StepExecuteFailedEvent.output:type_name -> dex.StepMethodFailedOutput + 86, // 136: dex.StepExecuteFailedEvent.context:type_name -> dex.StepMethodEventContext + 23, // 137: dex.RpcExecutionCompletedEvent.input:type_name -> dex.Value + 23, // 138: dex.RpcExecutionCompletedEvent.output:type_name -> dex.Value + 131, // 139: dex.RpcExecutionCompletedEvent.step_decision:type_name -> dex.StepDecision + 25, // 140: dex.RpcExecutionCompletedEvent.upsert_attributes:type_name -> dex.AttributeWrite + 27, // 141: dex.RpcExecutionCompletedEvent.record_events:type_name -> dex.KV + 43, // 142: dex.RpcExecutionCompletedEvent.publish_to_channel:type_name -> dex.ChannelMessage + 47, // 143: dex.RpcExecutionCompletedEvent.delete_from_channel:type_name -> dex.ChannelMessageDeletion + 43, // 144: dex.ChannelExternalPublishEvent.messages:type_name -> dex.ChannelMessage + 47, // 145: dex.ChannelExternalDeleteEvent.messages:type_name -> dex.ChannelMessageDeletion + 8, // 146: dex.WaitForHistoryEventResponse.flow_status:type_name -> dex.FlowStatus + 11, // 147: dex.ActiveStepExecutionState.phase:type_name -> dex.ActiveStepPhase + 133, // 148: dex.ActiveStepExecutionState.movement:type_name -> dex.StepMovement + 136, // 149: dex.ActiveStepExecutionState.waiting_condition:type_name -> dex.WaitingConditionState + 148, // 150: dex.ActiveStepExecutionState.completed_conditions:type_name -> dex.StepExecutionCompletedConditions + 27, // 151: dex.ActiveStepExecutionState.step_execution_locals:type_name -> dex.KV + 184, // 152: dex.ActiveStepExecutionState.timers:type_name -> dex.TimerInfo + 83, // 153: dex.ActiveStepExecutionState.last_failure_info:type_name -> dex.StepMethodFailure + 37, // 154: dex.GetFlowStateResponse.flow_config:type_name -> dex.FlowConfig + 27, // 155: dex.GetFlowStateResponse.attributes:type_name -> dex.KV + 99, // 156: dex.GetFlowStateResponse.active_step_executions:type_name -> dex.ActiveStepExecutionState + 133, // 157: dex.GetFlowStateResponse.queued_steps:type_name -> dex.StepMovement + 194, // 158: dex.GetFlowStateResponse.pending_channel_messages:type_name -> dex.GetFlowStateResponse.PendingChannelMessagesEntry + 62, // 159: dex.GetFlowStateResponse.completed_steps:type_name -> dex.StepCompletionOutput + 12, // 160: dex.ResetFlowRequest.reset_type:type_name -> dex.FlowResetType + 13, // 161: dex.ResetFlowRequest.step_method:type_name -> dex.FlowResetStepMethod + 23, // 162: dex.InvokeRPCRequest.input:type_name -> dex.Value + 23, // 163: dex.InvokeRPCResponse.output:type_name -> dex.Value + 37, // 164: dex.UpdateFlowConfigRequest.flow_config:type_name -> dex.FlowConfig + 112, // 165: dex.WaitForAttributeRequest.match:type_name -> dex.AttributeMatch + 23, // 166: dex.WaitForAttributeResponse.matched_value:type_name -> dex.Value + 14, // 167: dex.AttributeMatch.operator:type_name -> dex.AttributeMatchOperator + 23, // 168: dex.AttributeMatch.operand:type_name -> dex.Value + 15, // 169: dex.ServiceErrorResponse.sub_status:type_name -> dex.ErrorSubStatus + 118, // 170: dex.InternalActivityError.worker_error:type_name -> dex.InternalWorkerError + 117, // 171: dex.InternalFlowError.activity_error:type_name -> dex.InternalActivityError + 29, // 172: dex.InvokeWaitForMethodRequest.context:type_name -> dex.Context + 23, // 173: dex.InvokeWaitForMethodRequest.step_input:type_name -> dex.Value + 27, // 174: dex.InvokeWaitForMethodRequest.attributes:type_name -> dex.KV + 195, // 175: dex.InvokeWaitForMethodRequest.channel_infos:type_name -> dex.InvokeWaitForMethodRequest.ChannelInfosEntry + 196, // 176: dex.InvokeWaitForMethodRequest.loaded_channel_messages:type_name -> dex.InvokeWaitForMethodRequest.LoadedChannelMessagesEntry + 30, // 177: dex.InvokeWaitForMethodResponse.local_activity_metadata:type_name -> dex.LocalActivityMetadata + 25, // 178: dex.InvokeWaitForMethodResponse.upsert_attributes:type_name -> dex.AttributeWrite + 135, // 179: dex.InvokeWaitForMethodResponse.waiting_condition:type_name -> dex.WaitingCondition + 27, // 180: dex.InvokeWaitForMethodResponse.upsert_step_exe_locals:type_name -> dex.KV + 27, // 181: dex.InvokeWaitForMethodResponse.record_events:type_name -> dex.KV + 43, // 182: dex.InvokeWaitForMethodResponse.publish_to_channel:type_name -> dex.ChannelMessage + 47, // 183: dex.InvokeWaitForMethodResponse.delete_from_channel:type_name -> dex.ChannelMessageDeletion + 23, // 184: dex.StepMethodHeartbeat.value:type_name -> dex.Value + 23, // 185: dex.StepStreamWrite.value:type_name -> dex.Value + 123, // 186: dex.InvokeWaitForMethodOutput.heartbeat:type_name -> dex.StepMethodHeartbeat + 124, // 187: dex.InvokeWaitForMethodOutput.stream_write:type_name -> dex.StepStreamWrite + 122, // 188: dex.InvokeWaitForMethodOutput.result:type_name -> dex.InvokeWaitForMethodResponse + 29, // 189: dex.InvokeExecuteMethodRequest.context:type_name -> dex.Context + 23, // 190: dex.InvokeExecuteMethodRequest.step_input:type_name -> dex.Value + 27, // 191: dex.InvokeExecuteMethodRequest.attributes:type_name -> dex.KV + 27, // 192: dex.InvokeExecuteMethodRequest.step_exe_locals:type_name -> dex.KV + 142, // 193: dex.InvokeExecuteMethodRequest.condition_results:type_name -> dex.ConditionResults + 197, // 194: dex.InvokeExecuteMethodRequest.channel_infos:type_name -> dex.InvokeExecuteMethodRequest.ChannelInfosEntry + 198, // 195: dex.InvokeExecuteMethodRequest.loaded_channel_messages:type_name -> dex.InvokeExecuteMethodRequest.LoadedChannelMessagesEntry + 30, // 196: dex.InvokeExecuteMethodResponse.local_activity_metadata:type_name -> dex.LocalActivityMetadata + 131, // 197: dex.InvokeExecuteMethodResponse.step_decision:type_name -> dex.StepDecision + 25, // 198: dex.InvokeExecuteMethodResponse.upsert_attributes:type_name -> dex.AttributeWrite + 27, // 199: dex.InvokeExecuteMethodResponse.record_events:type_name -> dex.KV + 27, // 200: dex.InvokeExecuteMethodResponse.upsert_step_exe_locals:type_name -> dex.KV + 43, // 201: dex.InvokeExecuteMethodResponse.publish_to_channel:type_name -> dex.ChannelMessage + 47, // 202: dex.InvokeExecuteMethodResponse.delete_from_channel:type_name -> dex.ChannelMessageDeletion + 123, // 203: dex.InvokeExecuteMethodOutput.heartbeat:type_name -> dex.StepMethodHeartbeat + 124, // 204: dex.InvokeExecuteMethodOutput.stream_write:type_name -> dex.StepStreamWrite + 127, // 205: dex.InvokeExecuteMethodOutput.result:type_name -> dex.InvokeExecuteMethodResponse + 29, // 206: dex.InvokeWorkerRPCRequest.context:type_name -> dex.Context + 23, // 207: dex.InvokeWorkerRPCRequest.input:type_name -> dex.Value + 27, // 208: dex.InvokeWorkerRPCRequest.attributes:type_name -> dex.KV + 199, // 209: dex.InvokeWorkerRPCRequest.channel_infos:type_name -> dex.InvokeWorkerRPCRequest.ChannelInfosEntry + 200, // 210: dex.InvokeWorkerRPCRequest.loaded_channel_messages:type_name -> dex.InvokeWorkerRPCRequest.LoadedChannelMessagesEntry + 23, // 211: dex.InvokeWorkerRPCResponse.output:type_name -> dex.Value + 131, // 212: dex.InvokeWorkerRPCResponse.step_decision:type_name -> dex.StepDecision + 25, // 213: dex.InvokeWorkerRPCResponse.upsert_attributes:type_name -> dex.AttributeWrite + 27, // 214: dex.InvokeWorkerRPCResponse.record_events:type_name -> dex.KV + 47, // 215: dex.InvokeWorkerRPCResponse.delete_from_channel:type_name -> dex.ChannelMessageDeletion + 43, // 216: dex.InvokeWorkerRPCResponse.publish_to_channel:type_name -> dex.ChannelMessage + 133, // 217: dex.StepDecision.next_steps:type_name -> dex.StepMovement + 132, // 218: dex.StepDecision.close_decision:type_name -> dex.CloseDecision + 16, // 219: dex.CloseDecision.close_decision_type:type_name -> dex.CloseDecisionType + 23, // 220: dex.CloseDecision.close_input:type_name -> dex.Value + 23, // 221: dex.StepMovement.step_input:type_name -> dex.Value + 33, // 222: dex.StepMovement.step_options:type_name -> dex.StepOptions + 161, // 223: dex.StepMovement.recovery_error_internal_only:type_name -> dex.RecoveryErrorInfo + 17, // 224: dex.WaitingCondition.waiting_condition_type:type_name -> dex.WaitingConditionType + 140, // 225: dex.WaitingCondition.timer_conditions:type_name -> dex.TimerCondition + 141, // 226: dex.WaitingCondition.channel_conditions:type_name -> dex.ChannelCondition + 134, // 227: dex.WaitingCondition.condition_combinations:type_name -> dex.ConditionCombination + 138, // 228: dex.WaitingCondition.sub_flow_conditions:type_name -> dex.SubFlowCondition + 17, // 229: dex.WaitingConditionState.waiting_condition_type:type_name -> dex.WaitingConditionType + 140, // 230: dex.WaitingConditionState.timer_conditions:type_name -> dex.TimerCondition + 141, // 231: dex.WaitingConditionState.channel_conditions:type_name -> dex.ChannelCondition + 134, // 232: dex.WaitingConditionState.condition_combinations:type_name -> dex.ConditionCombination + 139, // 233: dex.WaitingConditionState.sub_flow_conditions:type_name -> dex.SubFlowConditionState + 18, // 234: dex.SubFlowOptions.reuse_policy:type_name -> dex.SubFlowReusePolicy + 32, // 235: dex.SubFlowOptions.retry_policy:type_name -> dex.FlowRetryPolicy + 25, // 236: dex.SubFlowOptions.attributes:type_name -> dex.AttributeWrite + 37, // 237: dex.SubFlowOptions.flow_config_override:type_name -> dex.FlowConfig + 6, // 238: dex.SubFlowOptions.flow_timeout_policy:type_name -> dex.FlowTimeoutPolicy + 34, // 239: dex.SubFlowOptions.timeout_handler_options:type_name -> dex.FlowTimeoutHandlerOptions + 23, // 240: dex.SubFlowCondition.step_input:type_name -> dex.Value + 33, // 241: dex.SubFlowCondition.step_options:type_name -> dex.StepOptions + 137, // 242: dex.SubFlowCondition.options:type_name -> dex.SubFlowOptions + 144, // 243: dex.ConditionResults.channel_results:type_name -> dex.ChannelResult + 143, // 244: dex.ConditionResults.timer_results:type_name -> dex.TimerResult + 63, // 245: dex.ConditionResults.sub_flow_results:type_name -> dex.FlowResult + 19, // 246: dex.TimerResult.condition_status:type_name -> dex.ConditionStatus + 19, // 247: dex.ChannelResult.condition_status:type_name -> dex.ConditionStatus + 23, // 248: dex.ChannelResult.values:type_name -> dex.Value + 43, // 249: dex.ChannelValues.messages:type_name -> dex.ChannelMessage + 201, // 250: dex.StepExecutionCompletedConditions.completed_timer_conditions:type_name -> dex.StepExecutionCompletedConditions.CompletedTimerConditionsEntry + 202, // 251: dex.StepExecutionCompletedConditions.completed_sub_flow_results:type_name -> dex.StepExecutionCompletedConditions.CompletedSubFlowResultsEntry + 133, // 252: dex.StepExecutionResumeInfo.step:type_name -> dex.StepMovement + 148, // 253: dex.StepExecutionResumeInfo.completed_conditions:type_name -> dex.StepExecutionCompletedConditions + 136, // 254: dex.StepExecutionResumeInfo.waiting_condition:type_name -> dex.WaitingConditionState + 27, // 255: dex.StepExecutionResumeInfo.step_exe_locals:type_name -> dex.KV + 203, // 256: dex.StepExecutionCounterInfo.step_type_started_count:type_name -> dex.StepExecutionCounterInfo.StepTypeStartedCountEntry + 204, // 257: dex.StepExecutionCounterInfo.step_type_currently_executing_count:type_name -> dex.StepExecutionCounterInfo.StepTypeCurrentlyExecutingCountEntry + 205, // 258: dex.StepExecutionCounterInfo.step_active_execution_nums:type_name -> dex.StepExecutionCounterInfo.StepActiveExecutionNumsEntry + 133, // 259: dex.ContinueAsNewDump.steps_to_start_from_beginning:type_name -> dex.StepMovement + 149, // 260: dex.ContinueAsNewDump.step_executions_to_resume:type_name -> dex.StepExecutionResumeInfo + 206, // 261: dex.ContinueAsNewDump.channel_received:type_name -> dex.ContinueAsNewDump.ChannelReceivedEntry + 150, // 262: dex.ContinueAsNewDump.counter_info:type_name -> dex.StepExecutionCounterInfo + 62, // 263: dex.ContinueAsNewDump.step_outputs:type_name -> dex.StepCompletionOutput + 151, // 264: dex.ContinueAsNewDump.stale_skip_timers:type_name -> dex.StaleSkipTimer + 27, // 265: dex.ContinueAsNewDump.attributes:type_name -> dex.KV + 170, // 266: dex.ContinueAsNewDump.pending_attribute_sync_items:type_name -> dex.AttributeSyncItem + 6, // 267: dex.InterpreterWorkflowInput.flow_timeout_policy:type_name -> dex.FlowTimeoutPolicy + 23, // 268: dex.InterpreterWorkflowInput.step_input:type_name -> dex.Value + 33, // 269: dex.InterpreterWorkflowInput.step_options:type_name -> dex.StepOptions + 25, // 270: dex.InterpreterWorkflowInput.init_attributes:type_name -> dex.AttributeWrite + 37, // 271: dex.InterpreterWorkflowInput.config:type_name -> dex.FlowConfig + 153, // 272: dex.InterpreterWorkflowInput.continue_as_new_input:type_name -> dex.ContinueAsNewInput + 34, // 273: dex.InterpreterWorkflowInput.timeout_handler_options:type_name -> dex.FlowTimeoutHandlerOptions + 62, // 274: dex.InterpreterWorkflowOutput.step_completion_outputs:type_name -> dex.StepCompletionOutput + 39, // 275: dex.InvokeWaitForMethodActivityInput.worker_target:type_name -> dex.WorkerTarget + 121, // 276: dex.InvokeWaitForMethodActivityInput.request:type_name -> dex.InvokeWaitForMethodRequest + 122, // 277: dex.InvokeWaitForMethodActivityOutput.response:type_name -> dex.InvokeWaitForMethodResponse + 39, // 278: dex.InvokeExecuteMethodActivityInput.worker_target:type_name -> dex.WorkerTarget + 126, // 279: dex.InvokeExecuteMethodActivityInput.request:type_name -> dex.InvokeExecuteMethodRequest + 30, // 280: dex.InternalLocalStepActivityFailure.local_activity_metadata:type_name -> dex.LocalActivityMetadata + 84, // 281: dex.InternalLocalStepActivityFailure.method_options:type_name -> dex.StepMethodOptions + 117, // 282: dex.InternalLocalStepActivityFailure.activity_error:type_name -> dex.InternalActivityError + 127, // 283: dex.InvokeExecuteMethodActivityOutput.response:type_name -> dex.InvokeExecuteMethodResponse + 145, // 284: dex.DumpFlowForContinueAsNewActivityInput.request:type_name -> dex.ContinueAsNewDumpRequest + 146, // 285: dex.DumpFlowForContinueAsNewActivityOutput.response:type_name -> dex.ContinueAsNewDumpResponse + 183, // 286: dex.InvokeWorkerRPCActivityInput.rpc_prep:type_name -> dex.PrepareRpcQueryResponse + 104, // 287: dex.InvokeWorkerRPCActivityInput.request:type_name -> dex.InvokeRPCRequest + 130, // 288: dex.InvokeWorkerRPCActivityOutput.response:type_name -> dex.InvokeWorkerRPCResponse + 23, // 289: dex.AttributeSyncItem.value:type_name -> dex.Value + 170, // 290: dex.SyncAttributeBatchActivityInput.items:type_name -> dex.AttributeSyncItem + 138, // 291: dex.StartSubFlowActivityInput.condition:type_name -> dex.SubFlowCondition + 37, // 292: dex.StartSubFlowActivityInput.parent_flow_config:type_name -> dex.FlowConfig + 63, // 293: dex.StartSubFlowActivityOutput.immediate_flow_result:type_name -> dex.FlowResult + 63, // 294: dex.SubFlowCompletionSignalRequest.flow_result:type_name -> dex.FlowResult + 174, // 295: dex.ReportSubFlowCompletionActivityInput.request:type_name -> dex.SubFlowCompletionSignalRequest + 22, // 296: dex.ReportSubFlowCompletionActivityOutput.status:type_name -> dex.SubFlowCompletionDeliveryStatus + 23, // 297: dex.ExecuteRpcSignalRequest.rpc_input:type_name -> dex.Value + 23, // 298: dex.ExecuteRpcSignalRequest.rpc_output:type_name -> dex.Value + 25, // 299: dex.ExecuteRpcSignalRequest.upsert_attributes:type_name -> dex.AttributeWrite + 131, // 300: dex.ExecuteRpcSignalRequest.step_decision:type_name -> dex.StepDecision + 27, // 301: dex.ExecuteRpcSignalRequest.record_events:type_name -> dex.KV + 43, // 302: dex.ExecuteRpcSignalRequest.publish_to_channel:type_name -> dex.ChannelMessage + 47, // 303: dex.ExecuteRpcSignalRequest.delete_from_channel:type_name -> dex.ChannelMessageDeletion + 7, // 304: dex.StopFlowSignalRequest.stop_type:type_name -> dex.StopType + 27, // 305: dex.GetAttributesQueryResponse.attributes:type_name -> dex.KV + 27, // 306: dex.PrepareRpcQueryResponse.attributes:type_name -> dex.KV + 39, // 307: dex.PrepareRpcQueryResponse.worker_target:type_name -> dex.WorkerTarget + 207, // 308: dex.PrepareRpcQueryResponse.channel_infos:type_name -> dex.PrepareRpcQueryResponse.ChannelInfosEntry + 208, // 309: dex.PrepareRpcQueryResponse.loaded_channel_messages:type_name -> dex.PrepareRpcQueryResponse.LoadedChannelMessagesEntry + 20, // 310: dex.TimerInfo.status:type_name -> dex.InternalTimerStatus + 184, // 311: dex.TimerInfoList.timers:type_name -> dex.TimerInfo + 209, // 312: dex.GetCurrentTimerInfosQueryResponse.step_execution_current_timer_infos:type_name -> dex.GetCurrentTimerInfosQueryResponse.StepExecutionCurrentTimerInfosEntry + 184, // 313: dex.GetScheduledGreedyTimerTimesQueryResponse.pending_scheduled:type_name -> dex.TimerInfo + 37, // 314: dex.DebugDumpResponse.config:type_name -> dex.FlowConfig + 152, // 315: dex.DebugDumpResponse.snapshot:type_name -> dex.ContinueAsNewDump + 99, // 316: dex.DebugDumpResponse.active_step_executions:type_name -> dex.ActiveStepExecutionState + 105, // 317: dex.InvokeRpcUpdateResult.response:type_name -> dex.InvokeRPCResponse + 23, // 318: dex.LoadBlobsResponse.ValuesEntry.value:type_name -> dex.Value + 0, // 319: dex.SyncAttributeIndexRequest.AttributeIndexesEntry.value:type_name -> dex.IndexType + 147, // 320: dex.FlowContinuedStart.PendingChannelMessagesEntry.value:type_name -> dex.ChannelValues + 147, // 321: dex.GetFlowStateResponse.PendingChannelMessagesEntry.value:type_name -> dex.ChannelValues + 120, // 322: dex.InvokeWaitForMethodRequest.ChannelInfosEntry.value:type_name -> dex.ChannelInfo + 147, // 323: dex.InvokeWaitForMethodRequest.LoadedChannelMessagesEntry.value:type_name -> dex.ChannelValues + 120, // 324: dex.InvokeExecuteMethodRequest.ChannelInfosEntry.value:type_name -> dex.ChannelInfo + 147, // 325: dex.InvokeExecuteMethodRequest.LoadedChannelMessagesEntry.value:type_name -> dex.ChannelValues + 120, // 326: dex.InvokeWorkerRPCRequest.ChannelInfosEntry.value:type_name -> dex.ChannelInfo + 147, // 327: dex.InvokeWorkerRPCRequest.LoadedChannelMessagesEntry.value:type_name -> dex.ChannelValues + 20, // 328: dex.StepExecutionCompletedConditions.CompletedTimerConditionsEntry.value:type_name -> dex.InternalTimerStatus + 63, // 329: dex.StepExecutionCompletedConditions.CompletedSubFlowResultsEntry.value:type_name -> dex.FlowResult + 190, // 330: dex.StepExecutionCounterInfo.StepActiveExecutionNumsEntry.value:type_name -> dex.StepExecutionNumbers + 147, // 331: dex.ContinueAsNewDump.ChannelReceivedEntry.value:type_name -> dex.ChannelValues + 120, // 332: dex.PrepareRpcQueryResponse.ChannelInfosEntry.value:type_name -> dex.ChannelInfo + 147, // 333: dex.PrepareRpcQueryResponse.LoadedChannelMessagesEntry.value:type_name -> dex.ChannelValues + 185, // 334: dex.GetCurrentTimerInfosQueryResponse.StepExecutionCurrentTimerInfosEntry.value:type_name -> dex.TimerInfoList + 40, // 335: dex.FlowService.StartFlow:input_type -> dex.StartFlowRequest + 42, // 336: dex.FlowService.PublishToChannel:input_type -> dex.PublishToChannelRequest + 44, // 337: dex.FlowService.GetChannelMessages:input_type -> dex.GetChannelMessagesRequest + 46, // 338: dex.FlowService.DeleteChannelMessage:input_type -> dex.DeleteChannelMessageRequest + 48, // 339: dex.FlowService.WriteStream:input_type -> dex.WriteStreamRequest + 49, // 340: dex.FlowService.ReadStream:input_type -> dex.ReadStreamRequest + 51, // 341: dex.FlowService.ListStreamMessages:input_type -> dex.ListStreamMessagesRequest + 54, // 342: dex.FlowService.StopFlow:input_type -> dex.StopFlowRequest + 55, // 343: dex.FlowService.GetAttributes:input_type -> dex.GetAttributesRequest + 57, // 344: dex.FlowService.SetAttributes:input_type -> dex.SetAttributesRequest + 59, // 345: dex.FlowService.LoadBlobs:input_type -> dex.LoadBlobsRequest + 61, // 346: dex.FlowService.WaitForFlow:input_type -> dex.WaitForFlowRequest + 64, // 347: dex.FlowService.SearchFlows:input_type -> dex.SearchFlowsRequest + 67, // 348: dex.FlowService.SyncAttributeIndexes:input_type -> dex.SyncAttributeIndexRequest + 70, // 349: dex.FlowService.GetFlowSummary:input_type -> dex.GetFlowSummaryRequest + 74, // 350: dex.FlowService.GetHistoryEvents:input_type -> dex.GetHistoryEventsRequest + 97, // 351: dex.FlowService.WaitForHistoryEvent:input_type -> dex.WaitForHistoryEventRequest + 100, // 352: dex.FlowService.GetFlowState:input_type -> dex.GetFlowStateRequest + 102, // 353: dex.FlowService.ResetFlow:input_type -> dex.ResetFlowRequest + 104, // 354: dex.FlowService.InvokeRPC:input_type -> dex.InvokeRPCRequest + 106, // 355: dex.FlowService.SkipTimer:input_type -> dex.SkipTimerRequest + 107, // 356: dex.FlowService.UpdateFlowConfig:input_type -> dex.UpdateFlowConfigRequest + 108, // 357: dex.FlowService.WaitForStepCompletion:input_type -> dex.WaitForStepCompletionRequest + 110, // 358: dex.FlowService.WaitForAttribute:input_type -> dex.WaitForAttributeRequest + 113, // 359: dex.FlowService.TriggerContinueAsNew:input_type -> dex.TriggerContinueAsNewRequest + 213, // 360: dex.FlowService.HealthCheck:input_type -> google.protobuf.Empty + 121, // 361: dex.WorkerService.InvokeWaitForMethod:input_type -> dex.InvokeWaitForMethodRequest + 126, // 362: dex.WorkerService.InvokeExecuteMethod:input_type -> dex.InvokeExecuteMethodRequest + 129, // 363: dex.WorkerService.InvokeWorkerRPC:input_type -> dex.InvokeWorkerRPCRequest + 145, // 364: dex.InternalService.DumpFlowForContinueAsNew:input_type -> dex.ContinueAsNewDumpRequest + 41, // 365: dex.FlowService.StartFlow:output_type -> dex.StartFlowResponse + 213, // 366: dex.FlowService.PublishToChannel:output_type -> google.protobuf.Empty + 45, // 367: dex.FlowService.GetChannelMessages:output_type -> dex.GetChannelMessagesResponse + 213, // 368: dex.FlowService.DeleteChannelMessage:output_type -> google.protobuf.Empty + 213, // 369: dex.FlowService.WriteStream:output_type -> google.protobuf.Empty + 50, // 370: dex.FlowService.ReadStream:output_type -> dex.ReadStreamResponse + 52, // 371: dex.FlowService.ListStreamMessages:output_type -> dex.ListStreamMessagesResponse + 213, // 372: dex.FlowService.StopFlow:output_type -> google.protobuf.Empty + 56, // 373: dex.FlowService.GetAttributes:output_type -> dex.GetAttributesResponse + 213, // 374: dex.FlowService.SetAttributes:output_type -> google.protobuf.Empty + 60, // 375: dex.FlowService.LoadBlobs:output_type -> dex.LoadBlobsResponse + 63, // 376: dex.FlowService.WaitForFlow:output_type -> dex.FlowResult + 65, // 377: dex.FlowService.SearchFlows:output_type -> dex.SearchFlowsResponse + 68, // 378: dex.FlowService.SyncAttributeIndexes:output_type -> dex.SyncAttributeIndexResponse + 71, // 379: dex.FlowService.GetFlowSummary:output_type -> dex.GetFlowSummaryResponse + 75, // 380: dex.FlowService.GetHistoryEvents:output_type -> dex.GetHistoryEventsResponse + 98, // 381: dex.FlowService.WaitForHistoryEvent:output_type -> dex.WaitForHistoryEventResponse + 101, // 382: dex.FlowService.GetFlowState:output_type -> dex.GetFlowStateResponse + 103, // 383: dex.FlowService.ResetFlow:output_type -> dex.ResetFlowResponse + 105, // 384: dex.FlowService.InvokeRPC:output_type -> dex.InvokeRPCResponse + 213, // 385: dex.FlowService.SkipTimer:output_type -> google.protobuf.Empty + 213, // 386: dex.FlowService.UpdateFlowConfig:output_type -> google.protobuf.Empty + 109, // 387: dex.FlowService.WaitForStepCompletion:output_type -> dex.WaitForStepCompletionResponse + 111, // 388: dex.FlowService.WaitForAttribute:output_type -> dex.WaitForAttributeResponse + 213, // 389: dex.FlowService.TriggerContinueAsNew:output_type -> google.protobuf.Empty + 114, // 390: dex.FlowService.HealthCheck:output_type -> dex.HealthInfo + 125, // 391: dex.WorkerService.InvokeWaitForMethod:output_type -> dex.InvokeWaitForMethodOutput + 128, // 392: dex.WorkerService.InvokeExecuteMethod:output_type -> dex.InvokeExecuteMethodOutput + 130, // 393: dex.WorkerService.InvokeWorkerRPC:output_type -> dex.InvokeWorkerRPCResponse + 146, // 394: dex.InternalService.DumpFlowForContinueAsNew:output_type -> dex.ContinueAsNewDumpResponse + 365, // [365:395] is the sub-list for method output_type + 335, // [335:365] is the sub-list for method input_type + 335, // [335:335] is the sub-list for extension type_name + 335, // [335:335] is the sub-list for extension extendee + 0, // [0:335] is the sub-list for field type_name } func init() { file_dex_proto_init() } @@ -14599,11 +14657,11 @@ func file_dex_proto_init() { (*Value_NullValue)(nil), } file_dex_proto_msgTypes[14].OneofWrappers = []any{} - file_dex_proto_msgTypes[48].OneofWrappers = []any{ + file_dex_proto_msgTypes[49].OneofWrappers = []any{ (*InternalAsyncStepInputSnapshot_WaitForRequest)(nil), (*InternalAsyncStepInputSnapshot_ExecuteRequest)(nil), } - file_dex_proto_msgTypes[52].OneofWrappers = []any{ + file_dex_proto_msgTypes[53].OneofWrappers = []any{ (*FlowHistoryEvent_FlowStartedOrContinued)(nil), (*FlowHistoryEvent_FlowClosed)(nil), (*FlowHistoryEvent_StepWaitForCompleted)(nil), @@ -14617,33 +14675,33 @@ func file_dex_proto_init() { (*FlowHistoryEvent_TimeTravelFork)(nil), (*FlowHistoryEvent_ChannelExternalDelete)(nil), } - file_dex_proto_msgTypes[54].OneofWrappers = []any{ + file_dex_proto_msgTypes[55].OneofWrappers = []any{ (*FlowStartedOrContinuedHistoryEvent_InitialStart)(nil), (*FlowStartedOrContinuedHistoryEvent_ContinuedStart)(nil), } - file_dex_proto_msgTypes[82].OneofWrappers = []any{} - file_dex_proto_msgTypes[95].OneofWrappers = []any{ + file_dex_proto_msgTypes[83].OneofWrappers = []any{} + file_dex_proto_msgTypes[96].OneofWrappers = []any{ (*InternalFlowError_ServerDetail)(nil), (*InternalFlowError_ActivityError)(nil), } - file_dex_proto_msgTypes[101].OneofWrappers = []any{ + file_dex_proto_msgTypes[102].OneofWrappers = []any{ (*InvokeWaitForMethodOutput_Heartbeat)(nil), (*InvokeWaitForMethodOutput_StreamWrite)(nil), (*InvokeWaitForMethodOutput_Result)(nil), } - file_dex_proto_msgTypes[104].OneofWrappers = []any{ + file_dex_proto_msgTypes[105].OneofWrappers = []any{ (*InvokeExecuteMethodOutput_Heartbeat)(nil), (*InvokeExecuteMethodOutput_StreamWrite)(nil), (*InvokeExecuteMethodOutput_Result)(nil), } - file_dex_proto_msgTypes[117].OneofWrappers = []any{} + file_dex_proto_msgTypes[118].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_dex_proto_rawDesc), len(file_dex_proto_rawDesc)), NumEnums: 23, - NumMessages: 186, + NumMessages: 187, NumExtensions: 0, NumServices: 3, }, diff --git a/sdk-java/README.md b/sdk-java/README.md index 59df5f8f7..06a6b717b 100644 --- a/sdk-java/README.md +++ b/sdk-java/README.md @@ -297,6 +297,10 @@ to hydrate blob-backed values through Dex FlowService. `workerTarget` is the address advertised in Flow configuration; when omitted, Worker derives it from the bind address and exposes it through `worker.getWorkerTarget()`. +Serialized object values use wire encoding `j` for JSON and `r` for raw bytes. +Internal Blob references are opaque. Hydration sends the owning Flow ID with +each reference, and the local cache is isolated by `(flowId, blobRef)`. + Every `Throwable` escaping application Step `waitFor`, Step `execute`, or RPC code becomes a structured Worker error. The default gRPC status is `INTERNAL`, including when application code throws `StatusException` or diff --git a/sdk-java/src/main/java/io/superdurable/dex/Client.java b/sdk-java/src/main/java/io/superdurable/dex/Client.java index b6352de41..4ccb95ede 100644 --- a/sdk-java/src/main/java/io/superdurable/dex/Client.java +++ b/sdk-java/src/main/java/io/superdurable/dex/Client.java @@ -607,7 +607,7 @@ public FlowResult waitForFlow( mapFlowStatus(response.getFlowStatus()), mapNullableFlowErrorType(response.getErrorType()), response.getErrorMessage().isEmpty() ? null : response.getErrorMessage(), - mapStepCompletions(response.getResultsList())); + mapStepCompletions(flowId, response.getResultsList())); } /** @@ -684,7 +684,7 @@ private SearchFlowEntry mapSearchEntry(final SearchFlowsResponseEntry entry) { for (final KV attribute : entry.getIndexedAttributesList()) { attributes.put( attribute.getKey(), - values.decodeToObject(hydrator.hydrate(attribute.getValue()))); + values.decodeToObject(hydrator.hydrate(entry.getFlowId(), attribute.getValue()))); } return new SearchFlowEntry( entry.getFlowId(), @@ -1004,6 +1004,7 @@ private Object invokeRpc( .addAllLoadChannelMapInstances(rpc.getStateLoads().getChannelMaps()) .build(); final io.superdurable.gen.Value output = hydrator.hydrate( + target.flowId, call( () -> service.invokeRPC(request), FlowTargetRequirement.ACTIVE, @@ -1035,10 +1036,11 @@ private io.superdurable.gen.FlowResult waitForFlowResponse( } private List mapStepCompletions( + final String flowId, final List outputs) { final List completions = new ArrayList(); for (io.superdurable.gen.StepCompletionOutput completion - : hydrator.hydrateStepOutputs(outputs)) { + : hydrator.hydrateStepOutputs(flowId, outputs)) { completions.add(new StepCompletion( completion, (value, outputType) -> values.decode(value, outputType))); diff --git a/sdk-java/src/main/java/io/superdurable/dex/ValueHydrator.java b/sdk-java/src/main/java/io/superdurable/dex/ValueHydrator.java index c5c6b9aa6..396c92c0a 100644 --- a/sdk-java/src/main/java/io/superdurable/dex/ValueHydrator.java +++ b/sdk-java/src/main/java/io/superdurable/dex/ValueHydrator.java @@ -19,6 +19,7 @@ import io.superdurable.gen.ChannelValues; import io.superdurable.gen.ConditionResults; import io.superdurable.gen.EncodedObject; +import io.superdurable.gen.FlowResult; import io.superdurable.gen.FlowServiceGrpc; import io.superdurable.gen.InvokeExecuteMethodRequest; import io.superdurable.gen.InvokeWaitForMethodRequest; @@ -26,6 +27,7 @@ import io.superdurable.gen.KV; import io.superdurable.gen.LoadBlobsRequest; import io.superdurable.gen.LoadBlobsResponse; +import io.superdurable.gen.LoadBlobRequestEntry; import io.superdurable.gen.StepCompletionOutput; import io.superdurable.gen.Value; @@ -58,11 +60,12 @@ final class ValueHydrator { this.cache = cache; } - Value hydrate(final Value value) { - return hydrateAll(Collections.singletonList(value)).get(0); + Value hydrate(final String flowId, final Value value) { + return hydrateAll(flowId, Collections.singletonList(value)).get(0); } List hydrateStepOutputs( + final String flowId, final List outputs) { final List source = new ArrayList(); for (StepCompletionOutput output : outputs) { @@ -70,7 +73,7 @@ List hydrateStepOutputs( source.add(output.getCompletedStepOutput()); } } - final List hydrated = hydrateAll(source); + final List hydrated = hydrateAll(flowId, source); final List results = new ArrayList(outputs.size()); int index = 0; @@ -94,7 +97,7 @@ InvokeWaitForMethodRequest hydrate(final InvokeWaitForMethodRequest request) { } addValues(source, request.getAttributesList()); addChannelMessageValues(source, request.getLoadedChannelMessagesMap()); - final List hydrated = hydrateAll(source); + final List hydrated = hydrateAll(request.getContext().getFlowId(), source); int index = 0; final InvokeWaitForMethodRequest.Builder builder = request.toBuilder() .setStepInput(hydrated.get(index++)) @@ -125,8 +128,13 @@ InvokeExecuteMethodRequest hydrate(final InvokeExecuteMethodRequest request) { for (ChannelResult result : request.getConditionResults().getChannelResultsList()) { source.addAll(result.getValuesList()); } + for (FlowResult result : request.getConditionResults().getSubFlowResultsList()) { + for (StepCompletionOutput completion : result.getResultsList()) { + source.add(completion.getCompletedStepOutput()); + } + } } - final List hydrated = hydrateAll(source); + final List hydrated = hydrateAll(request.getContext().getFlowId(), source); int index = 0; final InvokeExecuteMethodRequest.Builder builder = request.toBuilder() .clearAttributes() @@ -149,7 +157,8 @@ InvokeExecuteMethodRequest hydrate(final InvokeExecuteMethodRequest request) { if (request.hasConditionResults()) { final ConditionResults.Builder conditions = request.getConditionResults() .toBuilder() - .clearChannelResults(); + .clearChannelResults() + .clearSubFlowResults(); for (ChannelResult result : request.getConditionResults().getChannelResultsList()) { final ChannelResult.Builder channel = result.toBuilder().clearValues(); for (int valueIndex = 0; valueIndex < result.getValuesCount(); valueIndex++) { @@ -157,6 +166,14 @@ InvokeExecuteMethodRequest hydrate(final InvokeExecuteMethodRequest request) { } conditions.addChannelResults(channel); } + for (FlowResult result : request.getConditionResults().getSubFlowResultsList()) { + final FlowResult.Builder flowResult = result.toBuilder().clearResults(); + for (StepCompletionOutput completion : result.getResultsList()) { + flowResult.addResults(completion.toBuilder() + .setCompletedStepOutput(hydrated.get(index++))); + } + conditions.addSubFlowResults(flowResult); + } builder.setConditionResults(conditions); } return builder.build(); @@ -167,7 +184,7 @@ InvokeWorkerRPCRequest hydrate(final InvokeWorkerRPCRequest request) { source.add(request.getInput()); addValues(source, request.getAttributesList()); addChannelMessageValues(source, request.getLoadedChannelMessagesMap()); - final List hydrated = hydrateAll(source); + final List hydrated = hydrateAll(request.getContext().getFlowId(), source); int index = 0; final InvokeWorkerRPCRequest.Builder builder = request.toBuilder() .setInput(hydrated.get(index++)) @@ -239,7 +256,10 @@ private static int hydrateChannelMessages( return index; } - private List hydrateAll(final List values) { + private List hydrateAll(final String flowId, final List values) { + if (flowId == null || flowId.isEmpty()) { + throw new IllegalArgumentException("Flow ID is required"); + } final List hydrated = new ArrayList(values); final Map pending = new LinkedHashMap(); for (int index = 0; index < values.size(); index++) { @@ -251,7 +271,7 @@ private List hydrateAll(final List values) { } PendingBlob blob = pending.get(key); if (blob == null) { - blob = new PendingBlob(key, value); + blob = new PendingBlob(flowId, key, value); pending.put(key, blob); } blob.indexes.add(index); @@ -284,7 +304,9 @@ private void loadMisses(final List misses) { } final LoadBlobsRequest.Builder request = LoadBlobsRequest.newBuilder(); for (PendingBlob miss : misses) { - request.addValues(miss.request); + request.addEntries(LoadBlobRequestEntry.newBuilder() + .setFlowId(miss.flowId) + .setBlobValue(miss.request)); } final LoadBlobsResponse response = service.loadBlobs(request.build()); for (PendingBlob miss : misses) { @@ -300,7 +322,7 @@ private void loadMisses(final List misses) { private Value readCache(final PendingBlob blob) { try { - final Optional payload = cache.get(blob.key.id); + final Optional payload = cache.get(cacheKey(blob)); if (!payload.isPresent()) { return null; } @@ -309,7 +331,7 @@ private Value readCache(final PendingBlob blob) { | CharacterCodingException failure) { LOGGER.log(Level.WARNING, "cannot read cached blob " + blob.key.id, failure); try { - cache.delete(blob.key.id); + cache.delete(cacheKey(blob)); } catch (RuntimeException deleteFailure) { LOGGER.log(Level.WARNING, "cannot delete cached blob " + blob.key.id, deleteFailure); } @@ -322,7 +344,7 @@ private void writeCache(final PendingBlob blob, final Value concrete) { final byte[] payload = blob.key.object ? concrete.getObjValue().toByteArray() : concrete.getStringValue().getBytes(StandardCharsets.UTF_8); - cache.put(blob.key.id, payload); + cache.put(cacheKey(blob), payload); } catch (RuntimeException failure) { LOGGER.log(Level.WARNING, "cannot write cached blob " + blob.key.id, failure); } @@ -384,7 +406,7 @@ private static void validateConcrete(final Value value) { return; case OBJ_VALUE: final String encoding = value.getObjValue().getEncoding(); - if (!"json".equals(encoding) && !"rawbytes".equals(encoding)) { + if (!"j".equals(encoding) && !"r".equals(encoding)) { throw new IllegalArgumentException("unsupported object encoding " + encoding); } return; @@ -405,6 +427,10 @@ private static String requireBlobId(final String blobId) { return blobId; } + private static String cacheKey(final PendingBlob blob) { + return blob.flowId.length() + ":" + blob.flowId + blob.key.id; + } + private static void addValues(final List values, final List entries) { for (KV entry : entries) { values.add(entry.getValue()); @@ -436,12 +462,14 @@ public int hashCode() { } private static final class PendingBlob { + private final String flowId; private final BlobKey key; private final Value request; private final List indexes = new ArrayList(); private Value hydrated; - private PendingBlob(final BlobKey key, final Value request) { + private PendingBlob(final String flowId, final BlobKey key, final Value request) { + this.flowId = flowId; this.key = key; this.request = request; } diff --git a/sdk-java/src/main/java/io/superdurable/dex/ValueMapper.java b/sdk-java/src/main/java/io/superdurable/dex/ValueMapper.java index 1cb19b808..8e00719e9 100644 --- a/sdk-java/src/main/java/io/superdurable/dex/ValueMapper.java +++ b/sdk-java/src/main/java/io/superdurable/dex/ValueMapper.java @@ -28,8 +28,8 @@ import java.time.Instant; final class ValueMapper { - private static final String JSON = "json"; - private static final String RAW_BYTES = "rawbytes"; + private static final String JSON = "j"; + private static final String RAW_BYTES = "r"; private final ObjectMapper objectMapper; diff --git a/sdk-java/src/main/java/io/superdurable/gen/DexProto.java b/sdk-java/src/main/java/io/superdurable/gen/DexProto.java index 2a63619ca..0597f6b04 100644 --- a/sdk-java/src/main/java/io/superdurable/gen/DexProto.java +++ b/sdk-java/src/main/java/io/superdurable/gen/DexProto.java @@ -201,6 +201,11 @@ public static void registerAllExtensions( static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_dex_SetAttributesRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_dex_LoadBlobRequestEntry_descriptor; + static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_dex_LoadBlobRequestEntry_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_dex_LoadBlobsRequest_descriptor; static final @@ -1110,768 +1115,770 @@ public static void registerAllExtensions( "ex.KV\"t\n\024SetAttributesRequest\022\017\n\007flow_id" + "\030\001 \001(\t\022\016\n\006run_id\030\002 \001(\t\022\'\n\nattributes\030\003 \003" + "(\0132\023.dex.AttributeWrite\022\022\n\nrequest_id\030\004 " + - "\001(\t\".\n\020LoadBlobsRequest\022\032\n\006values\030\001 \003(\0132" + - "\n.dex.Value\"\202\001\n\021LoadBlobsResponse\0222\n\006val" + - "ues\030\001 \003(\0132\".dex.LoadBlobsResponse.Values" + - "Entry\0329\n\013ValuesEntry\022\013\n\003key\030\001 \001(\t\022\031\n\005val" + - "ue\030\002 \001(\0132\n.dex.Value:\0028\001\"g\n\022WaitForFlowR" + - "equest\022\017\n\007flow_id\030\001 \001(\t\022\016\n\006run_id\030\002 \001(\t\022" + - "\025\n\rneeds_results\030\003 \001(\010\022\031\n\021wait_time_seco" + - "nds\030\004 \001(\005\"\203\001\n\024StepCompletionOutput\022\033\n\023co" + - "mpleted_step_type\030\001 \001(\t\022#\n\033completed_ste" + - "p_execution_id\030\002 \001(\t\022)\n\025completed_step_o" + - "utput\030\003 \001(\0132\n.dex.Value\"\235\001\n\nFlowResult\022$" + - "\n\013flow_status\030\001 \001(\0162\017.dex.FlowStatus\022*\n\007" + - "results\030\002 \003(\0132\031.dex.StepCompletionOutput" + - "\022&\n\nerror_type\030\003 \001(\0162\022.dex.FlowErrorType" + - "\022\025\n\rerror_message\030\004 \001(\t\"O\n\022SearchFlowsRe" + - "quest\022\r\n\005query\030\001 \001(\t\022\021\n\tpage_size\030\002 \001(\005\022" + - "\027\n\017next_page_token\030\003 \001(\t\"`\n\023SearchFlowsR" + - "esponse\0220\n\tflow_runs\030\001 \003(\0132\035.dex.SearchF" + - "lowsResponseEntry\022\027\n\017next_page_token\030\002 \001" + - "(\t\"\371\001\n\030SearchFlowsResponseEntry\022\017\n\007flow_" + - "id\030\001 \001(\t\022\016\n\006run_id\030\002 \001(\t\022#\n\022indexed_attr" + - "ibutes\030\003 \003(\0132\007.dex.KV\022\021\n\tflow_type\030\004 \001(\t" + - "\022$\n\013flow_status\030\005 \001(\0162\017.dex.FlowStatus\022." + - "\n\nstart_time\030\006 \001(\0132\032.google.protobuf.Tim" + - "estamp\022.\n\nclose_time\030\007 \001(\0132\032.google.prot" + - "obuf.Timestamp\"\265\001\n\031SyncAttributeIndexReq" + - "uest\022O\n\021attribute_indexes\030\001 \003(\01324.dex.Sy" + - "ncAttributeIndexRequest.AttributeIndexes" + - "Entry\032G\n\025AttributeIndexesEntry\022\013\n\003key\030\001 " + - "\001(\t\022\035\n\005value\030\002 \001(\0162\016.dex.IndexType:\0028\001\"\034" + - "\n\032SyncAttributeIndexResponse\"2\n\017FlowExec" + - "utionID\022\017\n\007flow_id\030\001 \001(\t\022\016\n\006run_id\030\002 \001(\t" + - "\"8\n\025GetFlowSummaryRequest\022\017\n\007flow_id\030\001 \001" + - "(\t\022\016\n\006run_id\030\002 \001(\t\"\214\002\n\026GetFlowSummaryRes" + - "ponse\022/\n\021flow_execution_id\030\001 \001(\0132\024.dex.F" + - "lowExecutionID\022\024\n\014first_run_id\030\002 \001(\t\022\022\n\n" + - "request_id\030\003 \001(\t\022\021\n\tflow_type\030\004 \001(\t\022$\n\013f" + - "low_status\030\005 \001(\0162\017.dex.FlowStatus\022.\n\nsta" + - "rt_time\030\006 \001(\0132\032.google.protobuf.Timestam" + - "p\022.\n\nclose_time\030\007 \001(\0132\032.google.protobuf." + - "Timestamp\"\324\001\n\036InternalAsyncStepInputSnap" + - "shot\022.\n\016method_options\030\001 \001(\0132\026.dex.StepM" + - "ethodOptions\022;\n\020wait_for_request\030\002 \001(\0132\037" + - ".dex.InvokeWaitForMethodRequestH\000\022:\n\017exe" + - "cute_request\030\003 \001(\0132\037.dex.InvokeExecuteMe" + - "thodRequestH\000B\t\n\007request\"s\n\032InternalLoca" + - "lActivityInput\022%\n\035current_run_started_ti" + - "mestamp\030\001 \001(\003\022.\n\016method_options\030\002 \001(\0132\026." + - "dex.StepMethodOptions\"\220\001\n\027GetHistoryEven" + - "tsRequest\022\017\n\007flow_id\030\001 \001(\t\022\016\n\006run_id\030\002 \001" + - "(\t\022\037\n\027start_internal_event_id\030\003 \001(\003\022\032\n\022e" + - "stimate_page_size\030\004 \001(\005\022\027\n\017next_page_tok" + - "en\030\005 \001(\014\"z\n\030GetHistoryEventsResponse\022%\n\006" + - "events\030\001 \003(\0132\025.dex.FlowHistoryEvent\022\027\n\017n" + - "ext_page_token\030\002 \001(\014\022\036\n\026next_internal_ev" + - "ent_id\030\003 \001(\003\"\345\006\n\020FlowHistoryEvent\022\020\n\010eve" + - "nt_id\030\001 \001(\003\022.\n\nevent_time\030\002 \001(\0132\032.google" + - ".protobuf.Timestamp\022L\n\031flow_started_or_c" + - "ontinued\030\024 \001(\0132\'.dex.FlowStartedOrContin" + - "uedHistoryEventH\000\0222\n\013flow_closed\030\025 \001(\0132\033" + - ".dex.FlowClosedHistoryEventH\000\022A\n\027step_wa" + - "it_for_completed\030\026 \001(\0132\036.dex.StepWaitFor" + - "CompletedEventH\000\022;\n\024step_wait_for_failed" + - "\030\027 \001(\0132\033.dex.StepWaitForFailedEventH\000\022@\n" + - "\026step_execute_completed\030\030 \001(\0132\036.dex.Step" + - "ExecuteCompletedEventH\000\022:\n\023step_execute_" + - "failed\030\031 \001(\0132\033.dex.StepExecuteFailedEven" + - "tH\000\022B\n\027rpc_execution_completed\030\032 \001(\0132\037.d" + - "ex.RpcExecutionCompletedEventH\000\022D\n\030chann" + - "el_external_publish\030\033 \001(\0132 .dex.ChannelE" + - "xternalPublishEventH\000\022<\n\025step_wait_for_p" + - "ending\030\034 \001(\0132\033.dex.StepMethodPendingEven" + - "tH\000\022;\n\024step_execute_pending\030\035 \001(\0132\033.dex." + - "StepMethodPendingEventH\000\022;\n\020time_travel_" + - "fork\030\036 \001(\0132\037.dex.TimeTravelForkHistoryEv" + - "entH\000\022B\n\027channel_external_delete\030\037 \001(\0132\037" + - ".dex.ChannelExternalDeleteEventH\000B\t\n\007pay" + - "load\"5\n\032TimeTravelForkHistoryEvent\022\027\n\017pr" + - "evious_run_id\030\001 \001(\t\"\256\003\n\"FlowStartedOrCon" + - "tinuedHistoryEvent\022/\n\021flow_execution_id\030" + - "\001 \001(\0132\024.dex.FlowExecutionID\022\021\n\tflow_type" + - "\030\002 \001(\t\022$\n\013flow_config\030\003 \001(\0132\017.dex.FlowCo" + - "nfig\022/\n\014flow_timeout\030\004 \001(\0132\031.google.prot" + - "obuf.Duration\0223\n\023flow_timeout_policy\030\005 \001" + - "(\0162\026.dex.FlowTimeoutPolicy\022?\n\027timeout_ha" + - "ndler_options\030\006 \001(\0132\036.dex.FlowTimeoutHan" + - "dlerOptions\022.\n\rinitial_start\030\n \001(\0132\025.dex" + - ".FlowInitialStartH\000\0222\n\017continued_start\030\013" + - " \001(\0132\027.dex.FlowContinuedStartH\000B\023\n\021start" + - "_or_continue\"\230\001\n\020FlowInitialStart\022\027\n\017sta" + - "rt_step_type\030\001 \001(\t\022\036\n\nstep_input\030\002 \001(\0132\n" + - ".dex.Value\022&\n\014step_options\030\003 \001(\0132\020.dex.S" + - "tepOptions\022#\n\022initial_attributes\030\004 \003(\0132\007" + - ".dex.KV\"\212\003\n\022FlowContinuedStart\022\027\n\017previo" + - "us_run_id\030\001 \001(\t\022)\n\016steps_to_start\030\002 \003(\0132" + - "\021.dex.StepMovement\0225\n\017steps_to_resume\030\003 " + - "\003(\0132\034.dex.StepExecutionResumeInfo\022U\n\030pen" + - "ding_channel_messages\030\004 \003(\01323.dex.FlowCo" + - "ntinuedStart.PendingChannelMessagesEntry" + - "\022\033\n\nattributes\030\005 \003(\0132\007.dex.KV\0222\n\017complet" + - "ed_steps\030\006 \003(\0132\031.dex.StepCompletionOutpu" + - "t\032Q\n\033PendingChannelMessagesEntry\022\013\n\003key\030" + - "\001 \001(\t\022!\n\005value\030\002 \001(\0132\022.dex.ChannelValues" + - ":\0028\001\"\306\001\n\026FlowClosedHistoryEvent\022$\n\013flow_" + - "status\030\001 \001(\0162\017.dex.FlowStatus\022*\n\007results" + - "\030\002 \003(\0132\031.dex.StepCompletionOutput\022&\n\nerr" + - "or_type\030\003 \001(\0162\022.dex.FlowErrorType\022\025\n\rerr" + - "or_message\030\004 \001(\t\022\033\n\023continued_to_run_id\030" + - "\005 \001(\t\"\234\001\n\026StepMethodPendingEvent\022(\n\005inpu" + - "t\030\001 \001(\0132\031.dex.StepMethodEventInput\022,\n\007co" + - "ntext\030\002 \001(\0132\033.dex.StepMethodEventContext" + - "\022*\n\005phase\030\003 \001(\0162\033.dex.PendingStepMethodP" + - "hase\"g\n\021StepMethodFailure\022\025\n\rbackend_err" + - "or\030\001 \001(\t\022*\n\007details\030\002 \001(\0132\031.dex.ServiceE" + - "rrorResponse\022\017\n\007attempt\030\003 \001(\005\"w\n\021StepMet" + - "hodOptions\022\027\n\017timeout_seconds\030\001 \001(\005\022&\n\014r" + - "etry_policy\030\002 \001(\0132\020.dex.RetryPolicy\022!\n\031h" + - "eartbeat_timeout_seconds\030\003 \001(\005\"\302\001\n\024StepM" + - "ethodEventInput\022\023\n\013unavailable\030\001 \001(\010\022\036\n\n" + - "step_input\030\002 \001(\0132\n.dex.Value\0220\n\021conditio" + - "n_results\030\003 \001(\0132\025.dex.ConditionResults\022\033" + - "\n\nattributes\030\004 \003(\0132\007.dex.KV\022&\n\025step_exec" + - "ution_locals\030\005 \003(\0132\007.dex.KV\"\350\002\n\026StepMeth" + - "odEventContext\022\031\n\021step_execution_id\030\001 \001(" + - "\t\022\036\n\026from_step_execution_id\030\002 \001(\t\022\021\n\tste" + - "p_type\030\003 \001(\t\022\'\n\ndurability\030\004 \001(\0162\023.dex.S" + - "tepDurability\022\025\n\rfinal_attempt\030\005 \001(\005\0220\n\014" + - "started_time\030\006 \001(\0132\032.google.protobuf.Tim" + - "estamp\022+\n\010duration\030\007 \001(\0132\031.google.protob" + - "uf.Duration\022.\n\016method_options\030\010 \001(\0132\026.de" + - "x.StepMethodOptions\0221\n\021last_failure_info" + - "\030\t \001(\0132\026.dex.StepMethodFailure\"\271\002\n\032StepW" + - "aitForCompletedOutput\0221\n\022wait_for_condit" + - "ion\030\001 \001(\0132\025.dex.WaitingCondition\022.\n\021upse" + - "rt_attributes\030\002 \003(\0132\023.dex.AttributeWrite" + - "\022/\n\022publish_to_channel\030\003 \003(\0132\023.dex.Chann" + - "elMessage\022\036\n\rrecord_events\030\004 \003(\0132\007.dex.K" + - "V\022-\n\034upsert_step_execution_locals\030\005 \003(\0132" + - "\007.dex.KV\0228\n\023delete_from_channel\030\006 \003(\0132\033." + - "dex.ChannelMessageDeletion\"\260\002\n\032StepExecu" + - "teCompletedOutput\022(\n\rstep_decision\030\001 \001(\013" + - "2\021.dex.StepDecision\022.\n\021upsert_attributes" + - "\030\002 \003(\0132\023.dex.AttributeWrite\022/\n\022publish_t" + - "o_channel\030\003 \003(\0132\023.dex.ChannelMessage\022\036\n\r" + - "record_events\030\004 \003(\0132\007.dex.KV\022-\n\034upsert_s" + - "tep_execution_locals\030\005 \003(\0132\007.dex.KV\0228\n\023d" + - "elete_from_channel\030\006 \003(\0132\033.dex.ChannelMe" + - "ssageDeletion\"A\n\026StepMethodFailedOutput\022" + - "\'\n\007failure\030\001 \001(\0132\026.dex.StepMethodFailure" + - "\"\244\001\n\031StepWaitForCompletedEvent\022(\n\005input\030" + - "\001 \001(\0132\031.dex.StepMethodEventInput\022/\n\006outp" + - "ut\030\002 \001(\0132\037.dex.StepWaitForCompletedOutpu" + - "t\022,\n\007context\030\003 \001(\0132\033.dex.StepMethodEvent" + - "Context\"\235\001\n\026StepWaitForFailedEvent\022(\n\005in" + - "put\030\001 \001(\0132\031.dex.StepMethodEventInput\022+\n\006" + - "output\030\002 \001(\0132\033.dex.StepMethodFailedOutpu" + - "t\022,\n\007context\030\003 \001(\0132\033.dex.StepMethodEvent" + - "Context\"\244\001\n\031StepExecuteCompletedEvent\022(\n" + - "\005input\030\001 \001(\0132\031.dex.StepMethodEventInput\022" + - "/\n\006output\030\002 \001(\0132\037.dex.StepExecuteComplet" + - "edOutput\022,\n\007context\030\003 \001(\0132\033.dex.StepMeth" + - "odEventContext\"\235\001\n\026StepExecuteFailedEven" + + "\001(\t\"G\n\024LoadBlobRequestEntry\022\017\n\007flow_id\030\001" + + " \001(\t\022\036\n\nblob_value\030\002 \001(\0132\n.dex.Value\">\n\020" + + "LoadBlobsRequest\022*\n\007entries\030\001 \003(\0132\031.dex." + + "LoadBlobRequestEntry\"\202\001\n\021LoadBlobsRespon" + + "se\0222\n\006values\030\001 \003(\0132\".dex.LoadBlobsRespon" + + "se.ValuesEntry\0329\n\013ValuesEntry\022\013\n\003key\030\001 \001" + + "(\t\022\031\n\005value\030\002 \001(\0132\n.dex.Value:\0028\001\"g\n\022Wai" + + "tForFlowRequest\022\017\n\007flow_id\030\001 \001(\t\022\016\n\006run_" + + "id\030\002 \001(\t\022\025\n\rneeds_results\030\003 \001(\010\022\031\n\021wait_" + + "time_seconds\030\004 \001(\005\"\203\001\n\024StepCompletionOut" + + "put\022\033\n\023completed_step_type\030\001 \001(\t\022#\n\033comp" + + "leted_step_execution_id\030\002 \001(\t\022)\n\025complet" + + "ed_step_output\030\003 \001(\0132\n.dex.Value\"\235\001\n\nFlo" + + "wResult\022$\n\013flow_status\030\001 \001(\0162\017.dex.FlowS" + + "tatus\022*\n\007results\030\002 \003(\0132\031.dex.StepComplet" + + "ionOutput\022&\n\nerror_type\030\003 \001(\0162\022.dex.Flow" + + "ErrorType\022\025\n\rerror_message\030\004 \001(\t\"O\n\022Sear" + + "chFlowsRequest\022\r\n\005query\030\001 \001(\t\022\021\n\tpage_si" + + "ze\030\002 \001(\005\022\027\n\017next_page_token\030\003 \001(\t\"`\n\023Sea" + + "rchFlowsResponse\0220\n\tflow_runs\030\001 \003(\0132\035.de" + + "x.SearchFlowsResponseEntry\022\027\n\017next_page_" + + "token\030\002 \001(\t\"\371\001\n\030SearchFlowsResponseEntry" + + "\022\017\n\007flow_id\030\001 \001(\t\022\016\n\006run_id\030\002 \001(\t\022#\n\022ind" + + "exed_attributes\030\003 \003(\0132\007.dex.KV\022\021\n\tflow_t" + + "ype\030\004 \001(\t\022$\n\013flow_status\030\005 \001(\0162\017.dex.Flo" + + "wStatus\022.\n\nstart_time\030\006 \001(\0132\032.google.pro" + + "tobuf.Timestamp\022.\n\nclose_time\030\007 \001(\0132\032.go" + + "ogle.protobuf.Timestamp\"\265\001\n\031SyncAttribut" + + "eIndexRequest\022O\n\021attribute_indexes\030\001 \003(\013" + + "24.dex.SyncAttributeIndexRequest.Attribu" + + "teIndexesEntry\032G\n\025AttributeIndexesEntry\022" + + "\013\n\003key\030\001 \001(\t\022\035\n\005value\030\002 \001(\0162\016.dex.IndexT" + + "ype:\0028\001\"\034\n\032SyncAttributeIndexResponse\"2\n" + + "\017FlowExecutionID\022\017\n\007flow_id\030\001 \001(\t\022\016\n\006run" + + "_id\030\002 \001(\t\"8\n\025GetFlowSummaryRequest\022\017\n\007fl" + + "ow_id\030\001 \001(\t\022\016\n\006run_id\030\002 \001(\t\"\214\002\n\026GetFlowS" + + "ummaryResponse\022/\n\021flow_execution_id\030\001 \001(" + + "\0132\024.dex.FlowExecutionID\022\024\n\014first_run_id\030" + + "\002 \001(\t\022\022\n\nrequest_id\030\003 \001(\t\022\021\n\tflow_type\030\004" + + " \001(\t\022$\n\013flow_status\030\005 \001(\0162\017.dex.FlowStat" + + "us\022.\n\nstart_time\030\006 \001(\0132\032.google.protobuf" + + ".Timestamp\022.\n\nclose_time\030\007 \001(\0132\032.google." + + "protobuf.Timestamp\"\324\001\n\036InternalAsyncStep" + + "InputSnapshot\022.\n\016method_options\030\001 \001(\0132\026." + + "dex.StepMethodOptions\022;\n\020wait_for_reques" + + "t\030\002 \001(\0132\037.dex.InvokeWaitForMethodRequest" + + "H\000\022:\n\017execute_request\030\003 \001(\0132\037.dex.Invoke" + + "ExecuteMethodRequestH\000B\t\n\007request\"s\n\032Int" + + "ernalLocalActivityInput\022%\n\035current_run_s" + + "tarted_timestamp\030\001 \001(\003\022.\n\016method_options" + + "\030\002 \001(\0132\026.dex.StepMethodOptions\"\220\001\n\027GetHi" + + "storyEventsRequest\022\017\n\007flow_id\030\001 \001(\t\022\016\n\006r" + + "un_id\030\002 \001(\t\022\037\n\027start_internal_event_id\030\003" + + " \001(\003\022\032\n\022estimate_page_size\030\004 \001(\005\022\027\n\017next" + + "_page_token\030\005 \001(\014\"z\n\030GetHistoryEventsRes" + + "ponse\022%\n\006events\030\001 \003(\0132\025.dex.FlowHistoryE" + + "vent\022\027\n\017next_page_token\030\002 \001(\014\022\036\n\026next_in" + + "ternal_event_id\030\003 \001(\003\"\345\006\n\020FlowHistoryEve" + + "nt\022\020\n\010event_id\030\001 \001(\003\022.\n\nevent_time\030\002 \001(\013" + + "2\032.google.protobuf.Timestamp\022L\n\031flow_sta" + + "rted_or_continued\030\024 \001(\0132\'.dex.FlowStarte" + + "dOrContinuedHistoryEventH\000\0222\n\013flow_close" + + "d\030\025 \001(\0132\033.dex.FlowClosedHistoryEventH\000\022A" + + "\n\027step_wait_for_completed\030\026 \001(\0132\036.dex.St" + + "epWaitForCompletedEventH\000\022;\n\024step_wait_f" + + "or_failed\030\027 \001(\0132\033.dex.StepWaitForFailedE" + + "ventH\000\022@\n\026step_execute_completed\030\030 \001(\0132\036" + + ".dex.StepExecuteCompletedEventH\000\022:\n\023step" + + "_execute_failed\030\031 \001(\0132\033.dex.StepExecuteF" + + "ailedEventH\000\022B\n\027rpc_execution_completed\030" + + "\032 \001(\0132\037.dex.RpcExecutionCompletedEventH\000" + + "\022D\n\030channel_external_publish\030\033 \001(\0132 .dex" + + ".ChannelExternalPublishEventH\000\022<\n\025step_w" + + "ait_for_pending\030\034 \001(\0132\033.dex.StepMethodPe" + + "ndingEventH\000\022;\n\024step_execute_pending\030\035 \001" + + "(\0132\033.dex.StepMethodPendingEventH\000\022;\n\020tim" + + "e_travel_fork\030\036 \001(\0132\037.dex.TimeTravelFork" + + "HistoryEventH\000\022B\n\027channel_external_delet" + + "e\030\037 \001(\0132\037.dex.ChannelExternalDeleteEvent" + + "H\000B\t\n\007payload\"5\n\032TimeTravelForkHistoryEv" + + "ent\022\027\n\017previous_run_id\030\001 \001(\t\"\256\003\n\"FlowSta" + + "rtedOrContinuedHistoryEvent\022/\n\021flow_exec" + + "ution_id\030\001 \001(\0132\024.dex.FlowExecutionID\022\021\n\t" + + "flow_type\030\002 \001(\t\022$\n\013flow_config\030\003 \001(\0132\017.d" + + "ex.FlowConfig\022/\n\014flow_timeout\030\004 \001(\0132\031.go" + + "ogle.protobuf.Duration\0223\n\023flow_timeout_p" + + "olicy\030\005 \001(\0162\026.dex.FlowTimeoutPolicy\022?\n\027t" + + "imeout_handler_options\030\006 \001(\0132\036.dex.FlowT" + + "imeoutHandlerOptions\022.\n\rinitial_start\030\n " + + "\001(\0132\025.dex.FlowInitialStartH\000\0222\n\017continue" + + "d_start\030\013 \001(\0132\027.dex.FlowContinuedStartH\000" + + "B\023\n\021start_or_continue\"\230\001\n\020FlowInitialSta" + + "rt\022\027\n\017start_step_type\030\001 \001(\t\022\036\n\nstep_inpu" + + "t\030\002 \001(\0132\n.dex.Value\022&\n\014step_options\030\003 \001(" + + "\0132\020.dex.StepOptions\022#\n\022initial_attribute" + + "s\030\004 \003(\0132\007.dex.KV\"\212\003\n\022FlowContinuedStart\022" + + "\027\n\017previous_run_id\030\001 \001(\t\022)\n\016steps_to_sta" + + "rt\030\002 \003(\0132\021.dex.StepMovement\0225\n\017steps_to_" + + "resume\030\003 \003(\0132\034.dex.StepExecutionResumeIn" + + "fo\022U\n\030pending_channel_messages\030\004 \003(\01323.d" + + "ex.FlowContinuedStart.PendingChannelMess" + + "agesEntry\022\033\n\nattributes\030\005 \003(\0132\007.dex.KV\0222" + + "\n\017completed_steps\030\006 \003(\0132\031.dex.StepComple" + + "tionOutput\032Q\n\033PendingChannelMessagesEntr" + + "y\022\013\n\003key\030\001 \001(\t\022!\n\005value\030\002 \001(\0132\022.dex.Chan" + + "nelValues:\0028\001\"\306\001\n\026FlowClosedHistoryEvent" + + "\022$\n\013flow_status\030\001 \001(\0162\017.dex.FlowStatus\022*" + + "\n\007results\030\002 \003(\0132\031.dex.StepCompletionOutp" + + "ut\022&\n\nerror_type\030\003 \001(\0162\022.dex.FlowErrorTy" + + "pe\022\025\n\rerror_message\030\004 \001(\t\022\033\n\023continued_t" + + "o_run_id\030\005 \001(\t\"\234\001\n\026StepMethodPendingEven" + "t\022(\n\005input\030\001 \001(\0132\031.dex.StepMethodEventIn" + - "put\022+\n\006output\030\002 \001(\0132\033.dex.StepMethodFail" + - "edOutput\022,\n\007context\030\003 \001(\0132\033.dex.StepMeth" + - "odEventContext\"\350\002\n\032RpcExecutionCompleted" + - "Event\022\020\n\010rpc_name\030\001 \001(\t\022\031\n\005input\030\002 \001(\0132\n" + - ".dex.Value\022\032\n\006output\030\003 \001(\0132\n.dex.Value\022(" + - "\n\rstep_decision\030\004 \001(\0132\021.dex.StepDecision" + - "\022.\n\021upsert_attributes\030\005 \003(\0132\023.dex.Attrib" + - "uteWrite\022\036\n\rrecord_events\030\006 \003(\0132\007.dex.KV" + - "\022/\n\022publish_to_channel\030\007 \003(\0132\023.dex.Chann" + - "elMessage\022\034\n\024is_set_attribute_api\030\010 \001(\010\022" + - "8\n\023delete_from_channel\030\t \003(\0132\033.dex.Chann" + - "elMessageDeletion\"D\n\033ChannelExternalPubl" + - "ishEvent\022%\n\010messages\030\001 \003(\0132\023.dex.Channel" + - "Message\"K\n\032ChannelExternalDeleteEvent\022-\n" + - "\010messages\030\001 \003(\0132\033.dex.ChannelMessageDele" + - "tion\"]\n\032WaitForHistoryEventRequest\022\017\n\007fl" + - "ow_id\030\001 \001(\t\022\016\n\006run_id\030\002 \001(\t\022\036\n\026next_inte" + - "rnal_event_id\030\003 \001(\003\"\201\001\n\033WaitForHistoryEv" + - "entResponse\022\027\n\017event_available\030\001 \001(\010\022#\n\033" + - "available_internal_event_id\030\002 \001(\003\022$\n\013flo" + - "w_status\030\003 \001(\0162\017.dex.FlowStatus\"\251\003\n\030Acti" + - "veStepExecutionState\022\031\n\021step_execution_i" + - "d\030\001 \001(\t\022\036\n\026from_step_execution_id\030\002 \001(\t\022" + - "\021\n\tstep_type\030\003 \001(\t\022#\n\005phase\030\004 \001(\0162\024.dex." + - "ActiveStepPhase\022#\n\010movement\030\005 \001(\0132\021.dex." + - "StepMovement\0225\n\021waiting_condition\030\006 \001(\0132" + - "\032.dex.WaitingConditionState\022C\n\024completed" + - "_conditions\030\007 \001(\0132%.dex.StepExecutionCom" + - "pletedConditions\022&\n\025step_execution_local" + - "s\030\010 \003(\0132\007.dex.KV\022\036\n\006timers\030\t \003(\0132\016.dex.T" + - "imerInfo\0221\n\021last_failure_info\030\n \001(\0132\026.de" + - "x.StepMethodFailure\"6\n\023GetFlowStateReque" + - "st\022\017\n\007flow_id\030\001 \001(\t\022\016\n\006run_id\030\002 \001(\t\"\241\003\n\024" + - "GetFlowStateResponse\022$\n\013flow_config\030\001 \001(" + - "\0132\017.dex.FlowConfig\022\033\n\nattributes\030\002 \003(\0132\007" + - ".dex.KV\022=\n\026active_step_executions\030\003 \003(\0132" + - "\035.dex.ActiveStepExecutionState\022\'\n\014queued" + - "_steps\030\004 \003(\0132\021.dex.StepMovement\022W\n\030pendi" + - "ng_channel_messages\030\005 \003(\01325.dex.GetFlowS" + - "tateResponse.PendingChannelMessagesEntry" + - "\0222\n\017completed_steps\030\006 \003(\0132\031.dex.StepComp" + - "letionOutput\032Q\n\033PendingChannelMessagesEn" + - "try\022\013\n\003key\030\001 \001(\t\022!\n\005value\030\002 \001(\0132\022.dex.Ch" + - "annelValues:\0028\001\"\201\002\n\020ResetFlowRequest\022\017\n\007" + - "flow_id\030\001 \001(\t\022\016\n\006run_id\030\002 \001(\t\022&\n\nreset_t" + - "ype\030\003 \001(\0162\022.dex.FlowResetType\022\016\n\006reason\030" + - "\004 \001(\t\022\032\n\022history_event_time\030\005 \001(\t\022\021\n\tste" + - "p_type\030\006 \001(\t\022\031\n\021step_execution_id\030\007 \001(\t\022" + - "\033\n\023skip_writes_reapply\030\010 \001(\010\022-\n\013step_met" + - "hod\030\t \001(\0162\030.dex.FlowResetStepMethod\"#\n\021R" + - "esetFlowResponse\022\016\n\006run_id\030\001 \001(\t\"\252\002\n\020Inv" + - "okeRPCRequest\022\017\n\007flow_id\030\001 \001(\t\022\016\n\006run_id" + - "\030\002 \001(\t\022\020\n\010rpc_name\030\003 \001(\t\022\031\n\005input\030\004 \001(\0132" + - "\n.dex.Value\022\027\n\017timeout_seconds\030\005 \001(\005\022\033\n\023" + - "lock_attribute_keys\030\006 \003(\t\022\022\n\nrequest_id\030" + - "\007 \001(\t\022\030\n\020is_transactional\030\010 \001(\010\022$\n\034load_" + - "attribute_map_instances\030\t \003(\t\022\032\n\022load_ch" + - "annel_names\030\n \003(\t\022\"\n\032load_channel_map_in" + - "stances\030\013 \003(\t\"/\n\021InvokeRPCResponse\022\032\n\006ou" + - "tput\030\001 \001(\0132\n.dex.Value\"\250\001\n\020SkipTimerRequ" + - "est\022\017\n\007flow_id\030\001 \001(\t\022\016\n\006run_id\030\002 \001(\t\022\031\n\021" + - "step_execution_id\030\003 \001(\t\022\032\n\022timer_conditi" + - "on_id\030\004 \001(\t\022\"\n\025timer_condition_index\030\005 \001" + - "(\005H\000\210\001\001B\030\n\026_timer_condition_index\"`\n\027Upd" + - "ateFlowConfigRequest\022\017\n\007flow_id\030\001 \001(\t\022\016\n" + - "\006run_id\030\002 \001(\t\022$\n\013flow_config\030\003 \001(\0132\017.dex" + - ".FlowConfig\"\220\001\n\034WaitForStepCompletionReq" + - "uest\022\017\n\007flow_id\030\001 \001(\t\022\021\n\tstep_type\030\002 \001(\t" + - "\022\035\n\025step_execution_number\030\003 \001(\t\022\031\n\021wait_" + - "time_seconds\030\005 \001(\005\022\022\n\nrequest_id\030\006 \001(\t\"\037" + - "\n\035WaitForStepCompletionResponse\"}\n\027WaitF" + - "orAttributeRequest\022\017\n\007flow_id\030\001 \001(\t\022\"\n\005m" + - "atch\030\002 \001(\0132\023.dex.AttributeMatch\022\031\n\021wait_" + - "time_seconds\030\003 \001(\005\022\022\n\nrequest_id\030\004 \001(\t\"=" + - "\n\030WaitForAttributeResponse\022!\n\rmatched_va" + - "lue\030\001 \001(\0132\n.dex.Value\"i\n\016AttributeMatch\022" + - "\013\n\003key\030\001 \001(\t\022-\n\010operator\030\002 \001(\0162\033.dex.Att" + - "ributeMatchOperator\022\033\n\007operand\030\003 \001(\0132\n.d" + - "ex.Value\">\n\033TriggerContinueAsNewRequest\022" + - "\017\n\007flow_id\030\001 \001(\t\022\016\n\006run_id\030\002 \001(\t\"C\n\nHeal" + - "thInfo\022\021\n\tcondition\030\001 \001(\t\022\020\n\010hostname\030\002 " + - "\001(\t\022\020\n\010duration\030\003 \001(\005\"\352\001\n\024ServiceErrorRe" + - "sponse\022\016\n\006detail\030\001 \001(\t\022\'\n\nsub_status\030\002 \001" + - "(\0162\023.dex.ErrorSubStatus\022$\n\034original_work" + - "er_error_detail\030\003 \001(\t\022\"\n\032original_worker" + - "_error_type\030\004 \001(\t\022$\n\034original_worker_err" + - "or_status\030\005 \001(\005\022)\n!original_worker_error" + - "_stack_trace\030\006 \001(\t\"k\n\023WorkerErrorRespons" + - "e\022\016\n\006detail\030\001 \001(\t\022\022\n\nerror_type\030\002 \001(\t\022\023\n" + - "\013stack_trace\030\003 \001(\t\022\033\n\023retry_after_second" + - "s\030\004 \001(\005\"z\n\025InternalActivityError\022\025\n\rserv" + - "er_detail\030\001 \001(\t\022\032\n\022worker_grpc_status\030\002 ", - "\001(\005\022.\n\014worker_error\030\003 \001(\0132\030.dex.Internal" + - "WorkerError\"N\n\023InternalWorkerError\022\016\n\006de" + - "tail\030\001 \001(\t\022\022\n\nerror_type\030\002 \001(\t\022\023\n\013stack_" + - "trace\030\003 \001(\t\"m\n\021InternalFlowError\022\027\n\rserv" + - "er_detail\030\001 \001(\tH\000\0224\n\016activity_error\030\002 \001(" + - "\0132\032.dex.InternalActivityErrorH\000B\t\n\007failu" + - "re\"\033\n\013ChannelInfo\022\014\n\004size\030\001 \001(\005\"\312\004\n\032Invo" + - "keWaitForMethodRequest\022\035\n\007context\030\001 \001(\0132" + - "\014.dex.Context\022\021\n\tflow_type\030\002 \001(\t\022\021\n\tstep" + - "_type\030\003 \001(\t\022\036\n\nstep_input\030\004 \001(\0132\n.dex.Va" + - "lue\022\033\n\nattributes\030\005 \003(\0132\007.dex.KV\022H\n\rchan" + - "nel_infos\030\006 \003(\01321.dex.InvokeWaitForMetho" + - "dRequest.ChannelInfosEntry\022[\n\027loaded_cha" + - "nnel_messages\030\007 \003(\0132:.dex.InvokeWaitForM" + - "ethodRequest.LoadedChannelMessagesEntry\022" + - "&\n\036loaded_attribute_map_instances\030\010 \003(\t\022" + - "\034\n\024loaded_channel_names\030\t \003(\t\022$\n\034loaded_" + - "channel_map_instances\030\n \003(\t\032E\n\021ChannelIn" + - "fosEntry\022\013\n\003key\030\001 \001(\t\022\037\n\005value\030\002 \001(\0132\020.d" + - "ex.ChannelInfo:\0028\001\032P\n\032LoadedChannelMessa" + - "gesEntry\022\013\n\003key\030\001 \001(\t\022!\n\005value\030\002 \001(\0132\022.d" + - "ex.ChannelValues:\0028\001\"\360\002\n\033InvokeWaitForMe" + - "thodResponse\022;\n\027local_activity_metadata\030" + - "\001 \001(\0132\032.dex.LocalActivityMetadata\022.\n\021ups" + - "ert_attributes\030\002 \003(\0132\023.dex.AttributeWrit" + - "e\0220\n\021waiting_condition\030\003 \001(\0132\025.dex.Waiti" + - "ngCondition\022\'\n\026upsert_step_exe_locals\030\004 " + - "\003(\0132\007.dex.KV\022\036\n\rrecord_events\030\005 \003(\0132\007.de" + - "x.KV\022/\n\022publish_to_channel\030\006 \003(\0132\023.dex.C" + - "hannelMessage\0228\n\023delete_from_channel\030\007 \003" + - "(\0132\033.dex.ChannelMessageDeletion\"0\n\023StepM" + - "ethodHeartbeat\022\031\n\005value\030\001 \001(\0132\n.dex.Valu" + - "e\"`\n\017StepStreamWrite\022\023\n\013stream_name\030\001 \001(" + - "\t\022\035\n\025stream_capacity_bytes\030\002 \001(\003\022\031\n\005valu" + - "e\030\003 \001(\0132\n.dex.Value\"\266\001\n\031InvokeWaitForMet" + - "hodOutput\022-\n\theartbeat\030\001 \001(\0132\030.dex.StepM" + - "ethodHeartbeatH\000\022,\n\014stream_write\030\002 \001(\0132\024" + - ".dex.StepStreamWriteH\000\0222\n\006result\030\003 \001(\0132 " + - ".dex.InvokeWaitForMethodResponseH\000B\010\n\006ou" + - "tput\"\236\005\n\032InvokeExecuteMethodRequest\022\035\n\007c" + - "ontext\030\001 \001(\0132\014.dex.Context\022\021\n\tflow_type\030" + - "\002 \001(\t\022\021\n\tstep_type\030\003 \001(\t\022\036\n\nstep_input\030\004" + - " \001(\0132\n.dex.Value\022\033\n\nattributes\030\005 \003(\0132\007.d" + - "ex.KV\022 \n\017step_exe_locals\030\006 \003(\0132\007.dex.KV\022" + - "0\n\021condition_results\030\007 \001(\0132\025.dex.Conditi" + - "onResults\022H\n\rchannel_infos\030\010 \003(\01321.dex.I" + - "nvokeExecuteMethodRequest.ChannelInfosEn" + - "try\022[\n\027loaded_channel_messages\030\t \003(\0132:.d" + - "ex.InvokeExecuteMethodRequest.LoadedChan" + - "nelMessagesEntry\022&\n\036loaded_attribute_map" + - "_instances\030\n \003(\t\022\034\n\024loaded_channel_names" + - "\030\013 \003(\t\022$\n\034loaded_channel_map_instances\030\014" + - " \003(\t\032E\n\021ChannelInfosEntry\022\013\n\003key\030\001 \001(\t\022\037" + - "\n\005value\030\002 \001(\0132\020.dex.ChannelInfo:\0028\001\032P\n\032L" + - "oadedChannelMessagesEntry\022\013\n\003key\030\001 \001(\t\022!" + - "\n\005value\030\002 \001(\0132\022.dex.ChannelValues:\0028\001\"\350\002" + - "\n\033InvokeExecuteMethodResponse\022;\n\027local_a" + - "ctivity_metadata\030\001 \001(\0132\032.dex.LocalActivi" + - "tyMetadata\022(\n\rstep_decision\030\002 \001(\0132\021.dex." + - "StepDecision\022.\n\021upsert_attributes\030\003 \003(\0132" + - "\023.dex.AttributeWrite\022\036\n\rrecord_events\030\004 " + - "\003(\0132\007.dex.KV\022\'\n\026upsert_step_exe_locals\030\005" + + "put\022,\n\007context\030\002 \001(\0132\033.dex.StepMethodEve" + + "ntContext\022*\n\005phase\030\003 \001(\0162\033.dex.PendingSt" + + "epMethodPhase\"g\n\021StepMethodFailure\022\025\n\rba" + + "ckend_error\030\001 \001(\t\022*\n\007details\030\002 \001(\0132\031.dex" + + ".ServiceErrorResponse\022\017\n\007attempt\030\003 \001(\005\"w" + + "\n\021StepMethodOptions\022\027\n\017timeout_seconds\030\001" + + " \001(\005\022&\n\014retry_policy\030\002 \001(\0132\020.dex.RetryPo" + + "licy\022!\n\031heartbeat_timeout_seconds\030\003 \001(\005\"" + + "\302\001\n\024StepMethodEventInput\022\023\n\013unavailable\030" + + "\001 \001(\010\022\036\n\nstep_input\030\002 \001(\0132\n.dex.Value\0220\n" + + "\021condition_results\030\003 \001(\0132\025.dex.Condition" + + "Results\022\033\n\nattributes\030\004 \003(\0132\007.dex.KV\022&\n\025" + + "step_execution_locals\030\005 \003(\0132\007.dex.KV\"\350\002\n" + + "\026StepMethodEventContext\022\031\n\021step_executio" + + "n_id\030\001 \001(\t\022\036\n\026from_step_execution_id\030\002 \001" + + "(\t\022\021\n\tstep_type\030\003 \001(\t\022\'\n\ndurability\030\004 \001(" + + "\0162\023.dex.StepDurability\022\025\n\rfinal_attempt\030" + + "\005 \001(\005\0220\n\014started_time\030\006 \001(\0132\032.google.pro" + + "tobuf.Timestamp\022+\n\010duration\030\007 \001(\0132\031.goog" + + "le.protobuf.Duration\022.\n\016method_options\030\010" + + " \001(\0132\026.dex.StepMethodOptions\0221\n\021last_fai" + + "lure_info\030\t \001(\0132\026.dex.StepMethodFailure\"" + + "\271\002\n\032StepWaitForCompletedOutput\0221\n\022wait_f" + + "or_condition\030\001 \001(\0132\025.dex.WaitingConditio" + + "n\022.\n\021upsert_attributes\030\002 \003(\0132\023.dex.Attri" + + "buteWrite\022/\n\022publish_to_channel\030\003 \003(\0132\023." + + "dex.ChannelMessage\022\036\n\rrecord_events\030\004 \003(" + + "\0132\007.dex.KV\022-\n\034upsert_step_execution_loca" + + "ls\030\005 \003(\0132\007.dex.KV\0228\n\023delete_from_channel" + + "\030\006 \003(\0132\033.dex.ChannelMessageDeletion\"\260\002\n\032" + + "StepExecuteCompletedOutput\022(\n\rstep_decis" + + "ion\030\001 \001(\0132\021.dex.StepDecision\022.\n\021upsert_a" + + "ttributes\030\002 \003(\0132\023.dex.AttributeWrite\022/\n\022" + + "publish_to_channel\030\003 \003(\0132\023.dex.ChannelMe" + + "ssage\022\036\n\rrecord_events\030\004 \003(\0132\007.dex.KV\022-\n" + + "\034upsert_step_execution_locals\030\005 \003(\0132\007.de" + + "x.KV\0228\n\023delete_from_channel\030\006 \003(\0132\033.dex." + + "ChannelMessageDeletion\"A\n\026StepMethodFail" + + "edOutput\022\'\n\007failure\030\001 \001(\0132\026.dex.StepMeth" + + "odFailure\"\244\001\n\031StepWaitForCompletedEvent\022" + + "(\n\005input\030\001 \001(\0132\031.dex.StepMethodEventInpu" + + "t\022/\n\006output\030\002 \001(\0132\037.dex.StepWaitForCompl" + + "etedOutput\022,\n\007context\030\003 \001(\0132\033.dex.StepMe" + + "thodEventContext\"\235\001\n\026StepWaitForFailedEv" + + "ent\022(\n\005input\030\001 \001(\0132\031.dex.StepMethodEvent" + + "Input\022+\n\006output\030\002 \001(\0132\033.dex.StepMethodFa" + + "iledOutput\022,\n\007context\030\003 \001(\0132\033.dex.StepMe" + + "thodEventContext\"\244\001\n\031StepExecuteComplete" + + "dEvent\022(\n\005input\030\001 \001(\0132\031.dex.StepMethodEv" + + "entInput\022/\n\006output\030\002 \001(\0132\037.dex.StepExecu" + + "teCompletedOutput\022,\n\007context\030\003 \001(\0132\033.dex" + + ".StepMethodEventContext\"\235\001\n\026StepExecuteF" + + "ailedEvent\022(\n\005input\030\001 \001(\0132\031.dex.StepMeth" + + "odEventInput\022+\n\006output\030\002 \001(\0132\033.dex.StepM" + + "ethodFailedOutput\022,\n\007context\030\003 \001(\0132\033.dex" + + ".StepMethodEventContext\"\350\002\n\032RpcExecution" + + "CompletedEvent\022\020\n\010rpc_name\030\001 \001(\t\022\031\n\005inpu" + + "t\030\002 \001(\0132\n.dex.Value\022\032\n\006output\030\003 \001(\0132\n.de" + + "x.Value\022(\n\rstep_decision\030\004 \001(\0132\021.dex.Ste" + + "pDecision\022.\n\021upsert_attributes\030\005 \003(\0132\023.d" + + "ex.AttributeWrite\022\036\n\rrecord_events\030\006 \003(\013" + + "2\007.dex.KV\022/\n\022publish_to_channel\030\007 \003(\0132\023." + + "dex.ChannelMessage\022\034\n\024is_set_attribute_a" + + "pi\030\010 \001(\010\0228\n\023delete_from_channel\030\t \003(\0132\033." + + "dex.ChannelMessageDeletion\"D\n\033ChannelExt" + + "ernalPublishEvent\022%\n\010messages\030\001 \003(\0132\023.de" + + "x.ChannelMessage\"K\n\032ChannelExternalDelet" + + "eEvent\022-\n\010messages\030\001 \003(\0132\033.dex.ChannelMe" + + "ssageDeletion\"]\n\032WaitForHistoryEventRequ" + + "est\022\017\n\007flow_id\030\001 \001(\t\022\016\n\006run_id\030\002 \001(\t\022\036\n\026" + + "next_internal_event_id\030\003 \001(\003\"\201\001\n\033WaitFor" + + "HistoryEventResponse\022\027\n\017event_available\030" + + "\001 \001(\010\022#\n\033available_internal_event_id\030\002 \001" + + "(\003\022$\n\013flow_status\030\003 \001(\0162\017.dex.FlowStatus" + + "\"\251\003\n\030ActiveStepExecutionState\022\031\n\021step_ex" + + "ecution_id\030\001 \001(\t\022\036\n\026from_step_execution_" + + "id\030\002 \001(\t\022\021\n\tstep_type\030\003 \001(\t\022#\n\005phase\030\004 \001" + + "(\0162\024.dex.ActiveStepPhase\022#\n\010movement\030\005 \001" + + "(\0132\021.dex.StepMovement\0225\n\021waiting_conditi" + + "on\030\006 \001(\0132\032.dex.WaitingConditionState\022C\n\024" + + "completed_conditions\030\007 \001(\0132%.dex.StepExe" + + "cutionCompletedConditions\022&\n\025step_execut" + + "ion_locals\030\010 \003(\0132\007.dex.KV\022\036\n\006timers\030\t \003(" + + "\0132\016.dex.TimerInfo\0221\n\021last_failure_info\030\n" + + " \001(\0132\026.dex.StepMethodFailure\"6\n\023GetFlowS" + + "tateRequest\022\017\n\007flow_id\030\001 \001(\t\022\016\n\006run_id\030\002" + + " \001(\t\"\241\003\n\024GetFlowStateResponse\022$\n\013flow_co" + + "nfig\030\001 \001(\0132\017.dex.FlowConfig\022\033\n\nattribute" + + "s\030\002 \003(\0132\007.dex.KV\022=\n\026active_step_executio" + + "ns\030\003 \003(\0132\035.dex.ActiveStepExecutionState\022" + + "\'\n\014queued_steps\030\004 \003(\0132\021.dex.StepMovement" + + "\022W\n\030pending_channel_messages\030\005 \003(\01325.dex" + + ".GetFlowStateResponse.PendingChannelMess" + + "agesEntry\0222\n\017completed_steps\030\006 \003(\0132\031.dex" + + ".StepCompletionOutput\032Q\n\033PendingChannelM" + + "essagesEntry\022\013\n\003key\030\001 \001(\t\022!\n\005value\030\002 \001(\013" + + "2\022.dex.ChannelValues:\0028\001\"\201\002\n\020ResetFlowRe" + + "quest\022\017\n\007flow_id\030\001 \001(\t\022\016\n\006run_id\030\002 \001(\t\022&" + + "\n\nreset_type\030\003 \001(\0162\022.dex.FlowResetType\022\016" + + "\n\006reason\030\004 \001(\t\022\032\n\022history_event_time\030\005 \001" + + "(\t\022\021\n\tstep_type\030\006 \001(\t\022\031\n\021step_execution_" + + "id\030\007 \001(\t\022\033\n\023skip_writes_reapply\030\010 \001(\010\022-\n" + + "\013step_method\030\t \001(\0162\030.dex.FlowResetStepMe" + + "thod\"#\n\021ResetFlowResponse\022\016\n\006run_id\030\001 \001(" + + "\t\"\252\002\n\020InvokeRPCRequest\022\017\n\007flow_id\030\001 \001(\t\022" + + "\016\n\006run_id\030\002 \001(\t\022\020\n\010rpc_name\030\003 \001(\t\022\031\n\005inp" + + "ut\030\004 \001(\0132\n.dex.Value\022\027\n\017timeout_seconds\030" + + "\005 \001(\005\022\033\n\023lock_attribute_keys\030\006 \003(\t\022\022\n\nre" + + "quest_id\030\007 \001(\t\022\030\n\020is_transactional\030\010 \001(\010" + + "\022$\n\034load_attribute_map_instances\030\t \003(\t\022\032" + + "\n\022load_channel_names\030\n \003(\t\022\"\n\032load_chann" + + "el_map_instances\030\013 \003(\t\"/\n\021InvokeRPCRespo" + + "nse\022\032\n\006output\030\001 \001(\0132\n.dex.Value\"\250\001\n\020Skip" + + "TimerRequest\022\017\n\007flow_id\030\001 \001(\t\022\016\n\006run_id\030" + + "\002 \001(\t\022\031\n\021step_execution_id\030\003 \001(\t\022\032\n\022time" + + "r_condition_id\030\004 \001(\t\022\"\n\025timer_condition_" + + "index\030\005 \001(\005H\000\210\001\001B\030\n\026_timer_condition_ind" + + "ex\"`\n\027UpdateFlowConfigRequest\022\017\n\007flow_id" + + "\030\001 \001(\t\022\016\n\006run_id\030\002 \001(\t\022$\n\013flow_config\030\003 " + + "\001(\0132\017.dex.FlowConfig\"\220\001\n\034WaitForStepComp" + + "letionRequest\022\017\n\007flow_id\030\001 \001(\t\022\021\n\tstep_t" + + "ype\030\002 \001(\t\022\035\n\025step_execution_number\030\003 \001(\t" + + "\022\031\n\021wait_time_seconds\030\005 \001(\005\022\022\n\nrequest_i" + + "d\030\006 \001(\t\"\037\n\035WaitForStepCompletionResponse" + + "\"}\n\027WaitForAttributeRequest\022\017\n\007flow_id\030\001" + + " \001(\t\022\"\n\005match\030\002 \001(\0132\023.dex.AttributeMatch" + + "\022\031\n\021wait_time_seconds\030\003 \001(\005\022\022\n\nrequest_i" + + "d\030\004 \001(\t\"=\n\030WaitForAttributeResponse\022!\n\rm" + + "atched_value\030\001 \001(\0132\n.dex.Value\"i\n\016Attrib" + + "uteMatch\022\013\n\003key\030\001 \001(\t\022-\n\010operator\030\002 \001(\0162" + + "\033.dex.AttributeMatchOperator\022\033\n\007operand\030" + + "\003 \001(\0132\n.dex.Value\">\n\033TriggerContinueAsNe" + + "wRequest\022\017\n\007flow_id\030\001 \001(\t\022\016\n\006run_id\030\002 \001(" + + "\t\"C\n\nHealthInfo\022\021\n\tcondition\030\001 \001(\t\022\020\n\010ho" + + "stname\030\002 \001(\t\022\020\n\010duration\030\003 \001(\005\"\352\001\n\024Servi" + + "ceErrorResponse\022\016\n\006detail\030\001 \001(\t\022\'\n\nsub_s" + + "tatus\030\002 \001(\0162\023.dex.ErrorSubStatus\022$\n\034orig" + + "inal_worker_error_detail\030\003 \001(\t\022\"\n\032origin" + + "al_worker_error_type\030\004 \001(\t\022$\n\034original_w" + + "orker_error_status\030\005 \001(\005\022)\n!original_wor" + + "ker_error_stack_trace\030\006 \001(\t\"k\n\023WorkerErr" + + "orResponse\022\016\n\006detail\030\001 \001(\t\022\022\n\nerror_type" + + "\030\002 \001(\t\022\023\n\013stack_trace\030\003 \001(\t\022\033\n\023retry_aft", + "er_seconds\030\004 \001(\005\"z\n\025InternalActivityErro" + + "r\022\025\n\rserver_detail\030\001 \001(\t\022\032\n\022worker_grpc_" + + "status\030\002 \001(\005\022.\n\014worker_error\030\003 \001(\0132\030.dex" + + ".InternalWorkerError\"N\n\023InternalWorkerEr" + + "ror\022\016\n\006detail\030\001 \001(\t\022\022\n\nerror_type\030\002 \001(\t\022" + + "\023\n\013stack_trace\030\003 \001(\t\"m\n\021InternalFlowErro" + + "r\022\027\n\rserver_detail\030\001 \001(\tH\000\0224\n\016activity_e" + + "rror\030\002 \001(\0132\032.dex.InternalActivityErrorH\000" + + "B\t\n\007failure\"\033\n\013ChannelInfo\022\014\n\004size\030\001 \001(\005" + + "\"\312\004\n\032InvokeWaitForMethodRequest\022\035\n\007conte" + + "xt\030\001 \001(\0132\014.dex.Context\022\021\n\tflow_type\030\002 \001(" + + "\t\022\021\n\tstep_type\030\003 \001(\t\022\036\n\nstep_input\030\004 \001(\013" + + "2\n.dex.Value\022\033\n\nattributes\030\005 \003(\0132\007.dex.K" + + "V\022H\n\rchannel_infos\030\006 \003(\01321.dex.InvokeWai" + + "tForMethodRequest.ChannelInfosEntry\022[\n\027l" + + "oaded_channel_messages\030\007 \003(\0132:.dex.Invok" + + "eWaitForMethodRequest.LoadedChannelMessa" + + "gesEntry\022&\n\036loaded_attribute_map_instanc" + + "es\030\010 \003(\t\022\034\n\024loaded_channel_names\030\t \003(\t\022$" + + "\n\034loaded_channel_map_instances\030\n \003(\t\032E\n\021" + + "ChannelInfosEntry\022\013\n\003key\030\001 \001(\t\022\037\n\005value\030" + + "\002 \001(\0132\020.dex.ChannelInfo:\0028\001\032P\n\032LoadedCha" + + "nnelMessagesEntry\022\013\n\003key\030\001 \001(\t\022!\n\005value\030" + + "\002 \001(\0132\022.dex.ChannelValues:\0028\001\"\360\002\n\033Invoke" + + "WaitForMethodResponse\022;\n\027local_activity_" + + "metadata\030\001 \001(\0132\032.dex.LocalActivityMetada" + + "ta\022.\n\021upsert_attributes\030\002 \003(\0132\023.dex.Attr" + + "ibuteWrite\0220\n\021waiting_condition\030\003 \001(\0132\025." + + "dex.WaitingCondition\022\'\n\026upsert_step_exe_" + + "locals\030\004 \003(\0132\007.dex.KV\022\036\n\rrecord_events\030\005" + " \003(\0132\007.dex.KV\022/\n\022publish_to_channel\030\006 \003(" + "\0132\023.dex.ChannelMessage\0228\n\023delete_from_ch" + "annel\030\007 \003(\0132\033.dex.ChannelMessageDeletion" + - "\"\266\001\n\031InvokeExecuteMethodOutput\022-\n\theartb" + - "eat\030\001 \001(\0132\030.dex.StepMethodHeartbeatH\000\022,\n" + - "\014stream_write\030\002 \001(\0132\024.dex.StepStreamWrit" + - "eH\000\0222\n\006result\030\003 \001(\0132 .dex.InvokeExecuteM" + - "ethodResponseH\000B\010\n\006output\"\270\004\n\026InvokeWork" + - "erRPCRequest\022\035\n\007context\030\001 \001(\0132\014.dex.Cont" + - "ext\022\021\n\tflow_type\030\002 \001(\t\022\020\n\010rpc_name\030\003 \001(\t" + - "\022\031\n\005input\030\004 \001(\0132\n.dex.Value\022\033\n\nattribute" + - "s\030\005 \003(\0132\007.dex.KV\022D\n\rchannel_infos\030\006 \003(\0132" + - "-.dex.InvokeWorkerRPCRequest.ChannelInfo" + - "sEntry\022W\n\027loaded_channel_messages\030\007 \003(\0132" + - "6.dex.InvokeWorkerRPCRequest.LoadedChann" + - "elMessagesEntry\022&\n\036loaded_attribute_map_" + - "instances\030\010 \003(\t\022\034\n\024loaded_channel_names\030" + - "\t \003(\t\022$\n\034loaded_channel_map_instances\030\n " + - "\003(\t\032E\n\021ChannelInfosEntry\022\013\n\003key\030\001 \001(\t\022\037\n" + - "\005value\030\002 \001(\0132\020.dex.ChannelInfo:\0028\001\032P\n\032Lo" + - "adedChannelMessagesEntry\022\013\n\003key\030\001 \001(\t\022!\n" + - "\005value\030\002 \001(\0132\022.dex.ChannelValues:\0028\001\"\232\002\n" + - "\027InvokeWorkerRPCResponse\022\032\n\006output\030\001 \001(\013" + - "2\n.dex.Value\022(\n\rstep_decision\030\002 \001(\0132\021.de" + - "x.StepDecision\022.\n\021upsert_attributes\030\003 \003(" + - "\0132\023.dex.AttributeWrite\022\036\n\rrecord_events\030" + - "\004 \003(\0132\007.dex.KV\0228\n\023delete_from_channel\030\005 " + - "\003(\0132\033.dex.ChannelMessageDeletion\022/\n\022publ" + - "ish_to_channel\030\006 \003(\0132\023.dex.ChannelMessag" + - "e\"\237\001\n\014StepDecision\022%\n\nnext_steps\030\001 \003(\0132\021" + - ".dex.StepMovement\022*\n\016close_decision\030\002 \001(" + - "\0132\022.dex.CloseDecision\022\031\n\021cancel_step_typ" + - "es\030\003 \003(\t\022!\n\031cancel_sibling_step_types\030\004 " + - "\003(\t\"\210\001\n\rCloseDecision\0223\n\023close_decision_" + - "type\030\001 \001(\0162\026.dex.CloseDecisionType\022!\n\031co" + - "nditional_channel_names\030\002 \003(\t\022\037\n\013close_i" + - "nput\030\003 \001(\0132\n.dex.Value\"\325\001\n\014StepMovement\022" + - "\021\n\tstep_type\030\001 \001(\t\022\036\n\nstep_input\030\002 \001(\0132\n" + - ".dex.Value\022&\n\014step_options\030\003 \001(\0132\020.dex.S" + - "tepOptions\022,\n$from_step_execution_id_int" + - "ernal_only\030\004 \001(\t\022<\n\034recovery_error_inter" + - "nal_only\030\005 \001(\0132\026.dex.RecoveryErrorInfo\"-" + - "\n\024ConditionCombination\022\025\n\rcondition_ids\030" + - "\001 \003(\t\"\236\002\n\020WaitingCondition\0229\n\026waiting_co" + - "ndition_type\030\001 \001(\0162\031.dex.WaitingConditio" + - "nType\022-\n\020timer_conditions\030\002 \003(\0132\023.dex.Ti" + - "merCondition\0221\n\022channel_conditions\030\003 \003(\013" + - "2\025.dex.ChannelCondition\0229\n\026condition_com" + - "binations\030\004 \003(\0132\031.dex.ConditionCombinati" + - "on\0222\n\023sub_flow_conditions\030\005 \003(\0132\025.dex.Su" + - "bFlowCondition\"\250\002\n\025WaitingConditionState" + - "\0229\n\026waiting_condition_type\030\001 \001(\0162\031.dex.W" + - "aitingConditionType\022-\n\020timer_conditions\030" + - "\002 \003(\0132\023.dex.TimerCondition\0221\n\022channel_co" + - "nditions\030\003 \003(\0132\025.dex.ChannelCondition\0229\n" + - "\026condition_combinations\030\004 \003(\0132\031.dex.Cond" + - "itionCombination\0227\n\023sub_flow_conditions\030" + - "\005 \003(\0132\032.dex.SubFlowConditionState\"\371\002\n\016Su" + - "bFlowOptions\022-\n\014reuse_policy\030\001 \001(\0162\027.dex" + - ".SubFlowReusePolicy\022\034\n\024flow_timeout_seco" + - "nds\030\002 \001(\005\022 \n\030flow_start_delay_seconds\030\003 " + - "\001(\005\022*\n\014retry_policy\030\004 \001(\0132\024.dex.FlowRetr" + - "yPolicy\022\'\n\nattributes\030\005 \003(\0132\023.dex.Attrib" + - "uteWrite\022-\n\024flow_config_override\030\006 \001(\0132\017" + - ".dex.FlowConfig\0223\n\023flow_timeout_policy\030\007" + - " \001(\0162\026.dex.FlowTimeoutPolicy\022?\n\027timeout_" + - "handler_options\030\010 \001(\0132\036.dex.FlowTimeoutH" + - "andlerOptions\"\336\001\n\020SubFlowCondition\022\024\n\014co" + - "ndition_id\030\001 \001(\t\022\025\n\rsub_flow_type\030\002 \001(\t\022" + - "\027\n\017start_step_type\030\003 \001(\t\022\036\n\nstep_input\030\004" + - " \001(\0132\n.dex.Value\022&\n\014step_options\030\005 \001(\0132\020" + - ".dex.StepOptions\022$\n\007options\030\006 \001(\0132\023.dex." + - "SubFlowOptions\022\026\n\016sub_flow_index\030\007 \001(\005\"-" + - "\n\025SubFlowConditionState\022\024\n\014condition_id\030" + - "\001 \001(\t\"g\n\016TimerCondition\022\024\n\014condition_id\030" + - "\001 \001(\t\022\030\n\020duration_seconds\030\002 \001(\003\022%\n\035firin" + - "g_unix_timestamp_seconds\030\003 \001(\003\"\204\001\n\020Chann" + - "elCondition\022\024\n\014condition_id\030\001 \001(\t\022\024\n\014cha" + - "nnel_name\030\002 \001(\t\022\025\n\010at_least\030\003 \001(\005H\000\210\001\001\022\024" + - "\n\007at_most\030\004 \001(\005H\001\210\001\001B\013\n\t_at_leastB\n\n\010_at" + - "_most\"\254\001\n\020ConditionResults\022+\n\017channel_re" + - "sults\030\001 \003(\0132\022.dex.ChannelResult\022\'\n\rtimer" + - "_results\030\002 \003(\0132\020.dex.TimerResult\022\027\n\017wait" + - "_for_failed\030\003 \001(\010\022)\n\020sub_flow_results\030\004 " + - "\003(\0132\017.dex.FlowResult\"S\n\013TimerResult\022\024\n\014c" + - "ondition_id\030\001 \001(\t\022.\n\020condition_status\030\002 " + - "\001(\0162\024.dex.ConditionStatus\"\207\001\n\rChannelRes" + - "ult\022\024\n\014condition_id\030\001 \001(\t\022.\n\020condition_s" + - "tatus\030\002 \001(\0162\024.dex.ConditionStatus\022\024\n\014cha" + - "nnel_name\030\003 \001(\t\022\032\n\006values\030\004 \003(\0132\n.dex.Va" + - "lue\"i\n\030ContinueAsNewDumpRequest\022\017\n\007flow_" + - "id\030\001 \001(\t\022\016\n\006run_id\030\002 \001(\t\022\020\n\010page_num\030\003 \001" + - "(\005\022\032\n\022page_size_in_bytes\030\004 \001(\005\"j\n\031Contin" + - "ueAsNewDumpResponse\022\024\n\014page_content\030\001 \001(" + - "\014\022\020\n\010page_num\030\002 \001(\005\022\023\n\013total_pages\030\003 \001(\005" + - "\022\020\n\010checksum\030\004 \001(\t\"6\n\rChannelValues\022%\n\010m" + - "essages\030\001 \003(\0132\023.dex.ChannelMessage\"\237\003\n S" + - "tepExecutionCompletedConditions\022g\n\032compl" + - "eted_timer_conditions\030\001 \003(\0132C.dex.StepEx" + - "ecutionCompletedConditions.CompletedTime" + - "rConditionsEntry\022f\n\032completed_sub_flow_r" + - "esults\030\002 \003(\0132B.dex.StepExecutionComplete" + - "dConditions.CompletedSubFlowResultsEntry" + - "\032Y\n\035CompletedTimerConditionsEntry\022\013\n\003key" + - "\030\001 \001(\005\022\'\n\005value\030\002 \001(\0162\030.dex.InternalTime" + - "rStatus:\0028\001\032O\n\034CompletedSubFlowResultsEn" + - "try\022\013\n\003key\030\001 \001(\005\022\036\n\005value\030\002 \001(\0132\017.dex.Fl" + - "owResult:\0028\001\"\363\001\n\027StepExecutionResumeInfo" + - "\022\031\n\021step_execution_id\030\001 \001(\t\022\037\n\004step\030\002 \001(" + - "\0132\021.dex.StepMovement\022C\n\024completed_condit" + - "ions\030\003 \001(\0132%.dex.StepExecutionCompletedC" + - "onditions\0225\n\021waiting_condition\030\004 \001(\0132\032.d" + - "ex.WaitingConditionState\022 \n\017step_exe_loc" + - "als\030\005 \003(\0132\007.dex.KV\"\316\004\n\030StepExecutionCoun" + - "terInfo\022X\n\027step_type_started_count\030\001 \003(\013" + - "27.dex.StepExecutionCounterInfo.StepType" + - "StartedCountEntry\022o\n#step_type_currently" + - "_executing_count\030\002 \003(\0132B.dex.StepExecuti" + - "onCounterInfo.StepTypeCurrentlyExecuting" + - "CountEntry\022\'\n\037total_currently_executing_" + - "count\030\003 \001(\005\022^\n\032step_active_execution_num" + - "s\030\004 \003(\0132:.dex.StepExecutionCounterInfo.S" + - "tepActiveExecutionNumsEntry\032;\n\031StepTypeS" + - "tartedCountEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002" + - " \001(\005:\0028\001\032F\n$StepTypeCurrentlyExecutingCo" + - "untEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\005:\0028\001" + - "\032Y\n\034StepActiveExecutionNumsEntry\022\013\n\003key\030" + - "\001 \001(\t\022(\n\005value\030\002 \001(\0132\031.dex.StepExecution" + - "Numbers:\0028\001\"f\n\016StaleSkipTimer\022\031\n\021step_ex" + - "ecution_id\030\001 \001(\t\022\032\n\022timer_condition_id\030\002" + - " \001(\t\022\035\n\025timer_condition_index\030\003 \001(\005\"\222\004\n\021" + - "ContinueAsNewDump\0228\n\035steps_to_start_from" + - "_beginning\030\001 \003(\0132\021.dex.StepMovement\022?\n\031s" + - "tep_executions_to_resume\030\002 \003(\0132\034.dex.Ste" + - "pExecutionResumeInfo\022E\n\020channel_received" + - "\030\003 \003(\0132+.dex.ContinueAsNewDump.ChannelRe" + - "ceivedEntry\0223\n\014counter_info\030\004 \001(\0132\035.dex." + - "StepExecutionCounterInfo\022/\n\014step_outputs" + - "\030\005 \003(\0132\031.dex.StepCompletionOutput\022.\n\021sta" + - "le_skip_timers\030\006 \003(\0132\023.dex.StaleSkipTime" + - "r\022\033\n\nattributes\030\007 \003(\0132\007.dex.KV\022<\n\034pendin" + - "g_attribute_sync_items\030\010 \003(\0132\026.dex.Attri" + - "buteSyncItem\032J\n\024ChannelReceivedEntry\022\013\n\003" + - "key\030\001 \001(\t\022!\n\005value\030\002 \001(\0132\022.dex.ChannelVa" + - "lues:\0028\001\"6\n\022ContinueAsNewInput\022 \n\030previo" + - "us_internal_run_id\030\001 \001(\t\"\334\003\n\030Interpreter" + - "WorkflowInput\022\021\n\tflow_type\030\001 \001(\t\022\'\n\037conf" + - "igured_flow_timeout_seconds\030\002 \001(\005\0223\n\023flo" + - "w_timeout_policy\030\003 \001(\0162\026.dex.FlowTimeout" + - "Policy\022\027\n\017start_step_type\030\004 \001(\t\022\036\n\nstep_" + - "input\030\005 \001(\0132\n.dex.Value\022&\n\014step_options\030" + - "\006 \001(\0132\020.dex.StepOptions\022,\n\017init_attribut" + - "es\030\007 \003(\0132\023.dex.AttributeWrite\022\037\n\006config\030" + - "\010 \001(\0132\017.dex.FlowConfig\022&\n\036is_resume_from" + - "_continue_as_new\030\t \001(\010\0226\n\025continue_as_ne" + - "w_input\030\n \001(\0132\027.dex.ContinueAsNewInput\022?" + - "\n\027timeout_handler_options\030\013 \001(\0132\036.dex.Fl" + - "owTimeoutHandlerOptions\"W\n\031InterpreterWo" + - "rkflowOutput\022:\n\027step_completion_outputs\030" + - "\001 \003(\0132\031.dex.StepCompletionOutput\"1\n\035Blob" + - "StoreCleanupWorkflowInput\022\020\n\010store_id\030\001 " + - "\001(\t\"7\n\036BlobStoreCleanupWorkflowOutput\022\025\n" + - "\rtotal_deleted\030\001 \001(\005\"~\n InvokeWaitForMet" + - "hodActivityInput\022(\n\rworker_target\030\001 \001(\0132" + - "\021.dex.WorkerTarget\0220\n\007request\030\002 \001(\0132\037.de" + - "x.InvokeWaitForMethodRequest\"W\n!InvokeWa" + - "itForMethodActivityOutput\0222\n\010response\030\001 " + - "\001(\0132 .dex.InvokeWaitForMethodResponse\"~\n" + - " InvokeExecuteMethodActivityInput\022(\n\rwor" + - "ker_target\030\001 \001(\0132\021.dex.WorkerTarget\0220\n\007r" + - "equest\030\002 \001(\0132\037.dex.InvokeExecuteMethodRe" + - "quest\"7\n\021RecoveryErrorInfo\022\016\n\006detail\030\001 \001" + - "(\t\022\022\n\nerror_type\030\002 \001(\t\"\365\001\n InternalLocal" + - "StepActivityFailure\022;\n\027local_activity_me" + - "tadata\030\001 \001(\0132\032.dex.LocalActivityMetadata" + - "\022\037\n\027first_attempt_timestamp\030\002 \001(\003\022.\n\016met" + - "hod_options\030\003 \001(\0132\026.dex.StepMethodOption" + - "s\022\017\n\007attempt\030\004 \001(\005\0222\n\016activity_error\030\005 \001" + - "(\0132\032.dex.InternalActivityError\"W\n!Invoke" + - "ExecuteMethodActivityOutput\0222\n\010response\030" + - "\001 \001(\0132 .dex.InvokeExecuteMethodResponse\"" + - "W\n%DumpFlowForContinueAsNewActivityInput" + - "\022.\n\007request\030\001 \001(\0132\035.dex.ContinueAsNewDum" + - "pRequest\"Z\n&DumpFlowForContinueAsNewActi" + - "vityOutput\0220\n\010response\030\001 \001(\0132\036.dex.Conti" + - "nueAsNewDumpResponse\"v\n\034InvokeWorkerRPCA" + - "ctivityInput\022.\n\010rpc_prep\030\001 \001(\0132\034.dex.Pre" + - "pareRpcQueryResponse\022&\n\007request\030\002 \001(\0132\025." + - "dex.InvokeRPCRequest\"c\n\035InvokeWorkerRPCA" + - "ctivityOutput\022.\n\010response\030\001 \001(\0132\034.dex.In" + - "vokeWorkerRPCResponse\022\022\n\nrequest_id\030\002 \001(" + - "\t\"1\n\035CleanupBlobStoreActivityInput\022\020\n\010st" + - "ore_id\030\001 \001(\t\"7\n\036CleanupBlobStoreActivity" + - "Output\022\025\n\rtotal_deleted\030\001 \001(\005\"P\n\021Attribu" + - "teSyncItem\022\023\n\013config_name\030\001 \001(\t\022\013\n\003key\030\002" + - " \001(\t\022\031\n\005value\030\003 \001(\0132\n.dex.Value\"n\n\037SyncA" + - "ttributeBatchActivityInput\022\017\n\007flow_id\030\001 " + - "\001(\t\022\023\n\013config_name\030\002 \001(\t\022%\n\005items\030\003 \003(\0132" + - "\026.dex.AttributeSyncItem\"\224\001\n\031StartSubFlow" + - "ActivityInput\022(\n\tcondition\030\001 \001(\0132\025.dex.S" + - "ubFlowCondition\022+\n\022parent_flow_config\030\002 " + - "\001(\0132\017.dex.FlowConfig\022 \n\030parent_step_exec" + - "ution_id\030\003 \001(\t\"L\n\032StartSubFlowActivityOu" + - "tput\022.\n\025immediate_flow_result\030\001 \001(\0132\017.de" + - "x.FlowResult\"[\n\036SubFlowCompletionSignalR" + - "equest\022\023\n\013sub_flow_id\030\001 \001(\t\022$\n\013flow_resu" + - "lt\030\002 \001(\0132\017.dex.FlowResult\"t\n$ReportSubFl" + - "owCompletionActivityInput\022\026\n\016parent_flow" + - "_id\030\001 \001(\t\0224\n\007request\030\002 \001(\0132#.dex.SubFlow" + - "CompletionSignalRequest\"]\n%ReportSubFlow" + - "CompletionActivityOutput\0224\n\006status\030\001 \001(\016" + - "2$.dex.SubFlowCompletionDeliveryStatus\"\202" + - "\003\n\027ExecuteRpcSignalRequest\022\035\n\trpc_input\030" + - "\001 \001(\0132\n.dex.Value\022\036\n\nrpc_output\030\002 \001(\0132\n." + - "dex.Value\022.\n\021upsert_attributes\030\003 \003(\0132\023.d" + - "ex.AttributeWrite\022(\n\rstep_decision\030\004 \001(\013" + - "2\021.dex.StepDecision\022\036\n\rrecord_events\030\005 \003" + - "(\0132\007.dex.KV\022/\n\022publish_to_channel\030\006 \003(\0132" + - "\023.dex.ChannelMessage\022\034\n\024is_set_attribute" + - "_api\030\007 \001(\010\0228\n\023delete_from_channel\030\010 \003(\0132" + - "\033.dex.ChannelMessageDeletion\022%\n\035is_delet" + - "e_channel_message_api\030\t \001(\010\"n\n\026SkipTimer" + - "SignalRequest\022\031\n\021step_execution_id\030\001 \001(\t" + - "\022\032\n\022timer_condition_id\030\002 \001(\t\022\035\n\025timer_co" + - "ndition_index\030\003 \001(\005\"I\n\025StopFlowSignalReq" + - "uest\022 \n\tstop_type\030\001 \001(\0162\r.dex.StopType\022\016" + - "\n\006reason\030\002 \001(\t\";\n\031GetAttributesQueryRequ" + - "est\022\014\n\004keys\030\001 \003(\t\022\020\n\010all_keys\030\002 \001(\010\"9\n\032G" + - "etAttributesQueryResponse\022\033\n\nattributes\030" + - "\001 \003(\0132\007.dex.KV\"~\n\026PrepareRpcQueryRequest" + - "\022$\n\034load_attribute_map_instances\030\001 \003(\t\022\032" + - "\n\022load_channel_names\030\002 \003(\t\022\"\n\032load_chann" + - "el_map_instances\030\003 \003(\t\"\311\004\n\027PrepareRpcQue" + - "ryResponse\022\033\n\nattributes\030\001 \003(\0132\007.dex.KV\022" + - "\016\n\006run_id\030\002 \001(\t\022\036\n\026flow_started_timestam" + - "p\030\003 \001(\003\022\021\n\tflow_type\030\004 \001(\t\022(\n\rworker_tar" + - "get\030\005 \001(\0132\021.dex.WorkerTarget\022E\n\rchannel_" + - "infos\030\006 \003(\0132..dex.PrepareRpcQueryRespons" + - "e.ChannelInfosEntry\022X\n\027loaded_channel_me" + - "ssages\030\007 \003(\01327.dex.PrepareRpcQueryRespon" + - "se.LoadedChannelMessagesEntry\022&\n\036loaded_" + - "attribute_map_instances\030\010 \003(\t\022\034\n\024loaded_" + - "channel_names\030\t \003(\t\022$\n\034loaded_channel_ma" + - "p_instances\030\n \003(\t\032E\n\021ChannelInfosEntry\022\013" + - "\n\003key\030\001 \001(\t\022\037\n\005value\030\002 \001(\0132\020.dex.Channel" + - "Info:\0028\001\032P\n\032LoadedChannelMessagesEntry\022\013" + - "\n\003key\030\001 \001(\t\022!\n\005value\030\002 \001(\0132\022.dex.Channel" + - "Values:\0028\001\"r\n\tTimerInfo\022\024\n\014condition_id\030" + - "\001 \001(\t\022%\n\035firing_unix_timestamp_seconds\030\002" + - " \001(\003\022(\n\006status\030\003 \001(\0162\030.dex.InternalTimer" + - "Status\"/\n\rTimerInfoList\022\036\n\006timers\030\001 \003(\0132" + - "\016.dex.TimerInfo\"\366\001\n!GetCurrentTimerInfos" + - "QueryResponse\022v\n\"step_execution_current_" + - "timer_infos\030\001 \003(\0132J.dex.GetCurrentTimerI" + - "nfosQueryResponse.StepExecutionCurrentTi" + - "merInfosEntry\032Y\n#StepExecutionCurrentTim" + - "erInfosEntry\022\013\n\003key\030\001 \001(\t\022!\n\005value\030\002 \001(\013" + - "2\022.dex.TimerInfoList:\0028\001\"V\n)GetScheduled" + - "GreedyTimerTimesQueryResponse\022)\n\021pending" + - "_scheduled\030\001 \003(\0132\016.dex.TimerInfo\"\304\001\n\021Deb" + - "ugDumpResponse\022\037\n\006config\030\001 \001(\0132\017.dex.Flo" + - "wConfig\022(\n\010snapshot\030\002 \001(\0132\026.dex.Continue" + - "AsNewDump\022%\n\035firing_timers_unix_timestam" + - "ps\030\003 \003(\003\022=\n\026active_step_executions\030\004 \003(\013" + - "2\035.dex.ActiveStepExecutionState\"A\n\025Invok" + - "eRpcUpdateResult\022(\n\010response\030\001 \001(\0132\026.dex" + - ".InvokeRPCResponse\"\'\n\024StepExecutionNumbe" + - "rs\022\017\n\007numbers\030\001 \003(\005*\313\001\n\tIndexType\022\032\n\026IND" + - "EX_TYPE_UNSPECIFIED\020\000\022\026\n\022INDEX_TYPE_KEYW" + - "ORD\020\001\022\023\n\017INDEX_TYPE_TEXT\020\002\022\034\n\030INDEX_TYPE" + - "_KEYWORD_ARRAY\020\003\022\022\n\016INDEX_TYPE_INT\020\004\022\025\n\021" + - "INDEX_TYPE_DOUBLE\020\005\022\023\n\017INDEX_TYPE_BOOL\020\006" + - "\022\027\n\023INDEX_TYPE_DATETIME\020\007*\274\001\n\032WaitForMet" + - "hodFailurePolicy\022.\n*WAIT_FOR_METHOD_FAIL" + - "URE_POLICY_UNSPECIFIED\020\000\0227\n3WAIT_FOR_MET" + - "HOD_FAILURE_POLICY_FAIL_FLOW_ON_FAILURE\020" + - "\001\0225\n1WAIT_FOR_METHOD_FAILURE_POLICY_PROC" + - "EED_ON_FAILURE\020\002*\320\001\n\032ExecuteMethodFailur" + - "ePolicy\022-\n)EXECUTE_METHOD_FAILURE_POLICY" + - "_UNSPECIFIED\020\000\022E\nAEXECUTE_METHOD_FAILURE" + - "_POLICY_FAIL_FLOW_ON_EXECUTE_METHOD_FAIL" + - "URE\020\001\022<\n8EXECUTE_METHOD_FAILURE_POLICY_P" + - "ROCEED_TO_CONFIGURED_STEP\020\002*\346\001\n\rIdReuseP" + - "olicy\022\037\n\033ID_REUSE_POLICY_UNSPECIFIED\020\000\0227" + - "\n3ID_REUSE_POLICY_ALLOW_IF_PREVIOUS_EXIS" + - "TS_ABNORMALLY\020\001\022\'\n#ID_REUSE_POLICY_ALLOW" + - "_IF_NO_RUNNING\020\002\022\"\n\036ID_REUSE_POLICY_DISA" + - "LLOW_REUSE\020\003\022.\n*ID_REUSE_POLICY_ALLOW_TE" + - "RMINATE_IF_RUNNING\020\004*\317\001\n\024ActiveStepSearc" + - "hMode\022\'\n#ACTIVE_STEP_SEARCH_MODE_UNSPECI" + - "FIED\020\000\022+\n\'ACTIVE_STEP_SEARCH_MODE_ENABLE" + - "D_FOR_ALL\020\001\022;\n7ACTIVE_STEP_SEARCH_MODE_E" + - "NABLED_FOR_STEPS_WITH_WAIT_FOR\020\002\022$\n ACTI" + - "VE_STEP_SEARCH_MODE_DISABLED\020\003*f\n\016StepDu" + - "rability\022\037\n\033STEP_DURABILITY_UNSPECIFIED\020" + - "\000\022\030\n\024STEP_DURABILITY_SYNC\020\001\022\031\n\025STEP_DURA" + - "BILITY_ASYNC\020\002*\227\001\n\021FlowTimeoutPolicy\022#\n\037" + - "FLOW_TIMEOUT_POLICY_UNSPECIFIED\020\000\022\034\n\030FLO" + - "W_TIMEOUT_POLICY_FAIL\020\001\022\036\n\032FLOW_TIMEOUT_" + - "POLICY_CANCEL\020\002\022\037\n\033FLOW_TIMEOUT_POLICY_H" + - "ANDLER\020\003*h\n\010StopType\022\031\n\025STOP_TYPE_UNSPEC" + - "IFIED\020\000\022\024\n\020STOP_TYPE_CANCEL\020\001\022\027\n\023STOP_TY" + - "PE_TERMINATE\020\002\022\022\n\016STOP_TYPE_FAIL\020\003*\200\002\n\nF" + - "lowStatus\022\033\n\027FLOW_STATUS_UNSPECIFIED\020\000\022\027" + - "\n\023FLOW_STATUS_RUNNING\020\001\022\031\n\025FLOW_STATUS_C" + - "OMPLETED\020\002\022\026\n\022FLOW_STATUS_FAILED\020\003\0221\n-FL" + - "OW_STATUS_SERVER_SIDE_TIMEOUT_INTERNAL_O" + - "NLY\020\004\022\032\n\026FLOW_STATUS_TERMINATED\020\005\022\030\n\024FLO" + - "W_STATUS_CANCELED\020\006\022 \n\034FLOW_STATUS_CONTI" + - "NUED_AS_NEW\020\007*\236\002\n\rFlowErrorType\022\037\n\033FLOW_" + - "ERROR_TYPE_UNSPECIFIED\020\000\022.\n*FLOW_ERROR_T" + - "YPE_STEP_DECISION_FAILING_FLOW\020\001\022+\n\'FLOW" + - "_ERROR_TYPE_CLIENT_API_FAILING_FLOW\020\002\022#\n" + - "\037FLOW_ERROR_TYPE_WORKER_API_FAIL\020\003\022*\n&FL" + - "OW_ERROR_TYPE_INVALID_USER_FLOW_CODE\020\004\022 " + - "\n\034FLOW_ERROR_TYPE_FLOW_TIMEOUT\020\005\022\034\n\030FLOW" + - "_ERROR_TYPE_INTERNAL\020\006*\223\001\n\026PendingStepMe" + - "thodPhase\022)\n%PENDING_STEP_METHOD_PHASE_U" + - "NSPECIFIED\020\000\022\'\n#PENDING_STEP_METHOD_PHAS" + - "E_SCHEDULED\020\001\022%\n!PENDING_STEP_METHOD_PHA" + - "SE_STARTED\020\002*q\n\017ActiveStepPhase\022!\n\035ACTIV" + - "E_STEP_PHASE_UNSPECIFIED\020\000\022\034\n\030ACTIVE_STE" + - "P_PHASE_ACTIVE\020\001\022\035\n\031ACTIVE_STEP_PHASE_WA" + - "ITING\020\002*\275\001\n\rFlowResetType\022\037\n\033FLOW_RESET_" + - "TYPE_UNSPECIFIED\020\000\022\035\n\031FLOW_RESET_TYPE_BE" + - "GINNING\020\001\022&\n\"FLOW_RESET_TYPE_HISTORY_EVE" + - "NT_TIME\020\002\022\035\n\031FLOW_RESET_TYPE_STEP_TYPE\020\003" + - "\022%\n!FLOW_RESET_TYPE_STEP_EXECUTION_ID\020\004*" + - "\206\001\n\023FlowResetStepMethod\022&\n\"FLOW_RESET_ST" + - "EP_METHOD_UNSPECIFIED\020\000\022#\n\037FLOW_RESET_ST" + - "EP_METHOD_WAIT_FOR\020\001\022\"\n\036FLOW_RESET_STEP_" + - "METHOD_EXECUTE\020\002*\306\002\n\026AttributeMatchOpera" + - "tor\022(\n$ATTRIBUTE_MATCH_OPERATOR_UNSPECIF" + - "IED\020\000\022\"\n\036ATTRIBUTE_MATCH_OPERATOR_EQUAL\020" + - "\001\022&\n\"ATTRIBUTE_MATCH_OPERATOR_NOT_EQUAL\020" + - "\002\022)\n%ATTRIBUTE_MATCH_OPERATOR_GREATER_TH" + - "AN\020\003\0222\n.ATTRIBUTE_MATCH_OPERATOR_GREATER" + - "_THAN_OR_EQUAL\020\004\022&\n\"ATTRIBUTE_MATCH_OPER", - "ATOR_LESS_THAN\020\005\022/\n+ATTRIBUTE_MATCH_OPER" + - "ATOR_LESS_THAN_OR_EQUAL\020\006*\323\002\n\016ErrorSubSt" + - "atus\022 \n\034ERROR_SUB_STATUS_UNSPECIFIED\020\000\022\"" + - "\n\036ERROR_SUB_STATUS_UNCATEGORIZED\020\001\022)\n%ER" + - "ROR_SUB_STATUS_FLOW_ALREADY_STARTED\020\002\022$\n" + - " ERROR_SUB_STATUS_FLOW_NOT_EXISTS\020\003\022%\n!E" + - "RROR_SUB_STATUS_WORKER_API_ERROR\020\004\022\'\n#ER" + - "ROR_SUB_STATUS_LONG_POLL_TIME_OUT\020\005\022.\n*E" + - "RROR_SUB_STATUS_CHANNEL_MESSAGE_NOT_FOUN" + - "D\020\006\022*\n&ERROR_SUB_STATUS_WAIT_HANDLER_TIM" + - "E_OUT\020\007*\213\002\n\021CloseDecisionType\022#\n\037CLOSE_D" + - "ECISION_TYPE_UNSPECIFIED\020\000\0228\n4CLOSE_DECI" + - "SION_TYPE_FORCE_COMPLETE_ON_CHANNELS_EMP" + - "TY\020\001\022)\n%CLOSE_DECISION_TYPE_GRACEFUL_COM" + - "PLETE\020\002\022&\n\"CLOSE_DECISION_TYPE_FORCE_COM" + - "PLETE\020\003\022\"\n\036CLOSE_DECISION_TYPE_FORCE_FAI" + - "L\020\004\022 \n\034CLOSE_DECISION_TYPE_DEAD_END\020\005*\310\001" + - "\n\024WaitingConditionType\022&\n\"WAITING_CONDIT" + - "ION_TYPE_UNSPECIFIED\020\000\022(\n$WAITING_CONDIT" + - "ION_TYPE_ALL_COMPLETED\020\001\022(\n$WAITING_COND" + - "ITION_TYPE_ANY_COMPLETED\020\002\0224\n0WAITING_CO" + - "NDITION_TYPE_ANY_COMBINATION_COMPLETED\020\003" + - "*\307\001\n\022SubFlowReusePolicy\022%\n!SUB_FLOW_REUS" + - "E_POLICY_UNSPECIFIED\020\000\022 \n\034SUB_FLOW_REUSE" + - "_POLICY_ATTACH\020\001\022>\n:SUB_FLOW_REUSE_POLIC" + - "Y_RESTART_IF_PREVIOUS_EXITS_ABNORMALLY\020\002" + - "\022(\n$SUB_FLOW_REUSE_POLICY_ALWAYS_RESTART" + - "\020\003*q\n\017ConditionStatus\022 \n\034CONDITION_STATU" + - "S_UNSPECIFIED\020\000\022\034\n\030CONDITION_STATUS_WAIT" + - "ING\020\001\022\036\n\032CONDITION_STATUS_COMPLETED\020\002*\243\001" + - "\n\023InternalTimerStatus\022%\n!INTERNAL_TIMER_" + - "STATUS_UNSPECIFIED\020\000\022!\n\035INTERNAL_TIMER_S" + - "TATUS_PENDING\020\001\022\037\n\033INTERNAL_TIMER_STATUS" + - "_FIRED\020\002\022!\n\035INTERNAL_TIMER_STATUS_SKIPPE" + - "D\020\003*\351\002\n\017UpdateErrorType\022!\n\035UPDATE_ERROR_" + - "TYPE_UNSPECIFIED\020\000\022/\n+UPDATE_ERROR_TYPE_" + - "CONTINUE_AS_NEW_PREEMPTED\020\001\022&\n\"UPDATE_ER" + - "ROR_TYPE_INVALID_ARGUMENT\020\002\022)\n%UPDATE_ER" + - "ROR_TYPE_FAILED_PRECONDITION\020\003\022\'\n#UPDATE" + - "_ERROR_TYPE_DEADLINE_EXCEEDED\020\004\022.\n*UPDAT" + - "E_ERROR_TYPE_RPC_ACQUIRE_LOCK_FAILURE\020\005\022" + - "%\n!UPDATE_ERROR_TYPE_SERVER_INTERNAL\020\006\022/" + - "\n+UPDATE_ERROR_TYPE_CHANNEL_MESSAGE_NOT_" + - "FOUND\020\007*\315\001\n\037SubFlowCompletionDeliverySta" + - "tus\0223\n/SUB_FLOW_COMPLETION_DELIVERY_STAT" + - "US_UNSPECIFIED\020\000\0221\n-SUB_FLOW_COMPLETION_" + - "DELIVERY_STATUS_DELIVERED\020\001\022B\n>SUB_FLOW_" + - "COMPLETION_DELIVERY_STATUS_PARENT_CLOSED" + - "_OR_NOT_FOUND\020\0022\334\016\n\013FlowService\022:\n\tStart" + - "Flow\022\025.dex.StartFlowRequest\032\026.dex.StartF" + - "lowResponse\022H\n\020PublishToChannel\022\034.dex.Pu" + - "blishToChannelRequest\032\026.google.protobuf." + - "Empty\022U\n\022GetChannelMessages\022\036.dex.GetCha" + - "nnelMessagesRequest\032\037.dex.GetChannelMess" + - "agesResponse\022P\n\024DeleteChannelMessage\022 .d" + - "ex.DeleteChannelMessageRequest\032\026.google." + - "protobuf.Empty\022>\n\013WriteStream\022\027.dex.Writ" + - "eStreamRequest\032\026.google.protobuf.Empty\022=" + - "\n\nReadStream\022\026.dex.ReadStreamRequest\032\027.d" + - "ex.ReadStreamResponse\022U\n\022ListStreamMessa" + - "ges\022\036.dex.ListStreamMessagesRequest\032\037.de" + - "x.ListStreamMessagesResponse\0228\n\010StopFlow" + - "\022\024.dex.StopFlowRequest\032\026.google.protobuf" + - ".Empty\022F\n\rGetAttributes\022\031.dex.GetAttribu" + - "tesRequest\032\032.dex.GetAttributesResponse\022B" + - "\n\rSetAttributes\022\031.dex.SetAttributesReque" + - "st\032\026.google.protobuf.Empty\022:\n\tLoadBlobs\022" + - "\025.dex.LoadBlobsRequest\032\026.dex.LoadBlobsRe" + - "sponse\0227\n\013WaitForFlow\022\027.dex.WaitForFlowR" + - "equest\032\017.dex.FlowResult\022@\n\013SearchFlows\022\027" + - ".dex.SearchFlowsRequest\032\030.dex.SearchFlow" + - "sResponse\022W\n\024SyncAttributeIndexes\022\036.dex." + - "SyncAttributeIndexRequest\032\037.dex.SyncAttr" + - "ibuteIndexResponse\022I\n\016GetFlowSummary\022\032.d" + - "ex.GetFlowSummaryRequest\032\033.dex.GetFlowSu" + - "mmaryResponse\022O\n\020GetHistoryEvents\022\034.dex." + - "GetHistoryEventsRequest\032\035.dex.GetHistory" + - "EventsResponse\022X\n\023WaitForHistoryEvent\022\037." + - "dex.WaitForHistoryEventRequest\032 .dex.Wai" + - "tForHistoryEventResponse\022C\n\014GetFlowState" + - "\022\030.dex.GetFlowStateRequest\032\031.dex.GetFlow" + - "StateResponse\022:\n\tResetFlow\022\025.dex.ResetFl" + - "owRequest\032\026.dex.ResetFlowResponse\022:\n\tInv" + - "okeRPC\022\025.dex.InvokeRPCRequest\032\026.dex.Invo" + - "keRPCResponse\022:\n\tSkipTimer\022\025.dex.SkipTim" + - "erRequest\032\026.google.protobuf.Empty\022H\n\020Upd" + - "ateFlowConfig\022\034.dex.UpdateFlowConfigRequ" + - "est\032\026.google.protobuf.Empty\022^\n\025WaitForSt" + - "epCompletion\022!.dex.WaitForStepCompletion" + - "Request\032\".dex.WaitForStepCompletionRespo" + - "nse\022O\n\020WaitForAttribute\022\034.dex.WaitForAtt" + - "ributeRequest\032\035.dex.WaitForAttributeResp" + - "onse\022P\n\024TriggerContinueAsNew\022 .dex.Trigg" + - "erContinueAsNewRequest\032\026.google.protobuf" + - ".Empty\0226\n\013HealthCheck\022\026.google.protobuf." + - "Empty\032\017.dex.HealthInfo2\221\002\n\rWorkerService" + - "\022X\n\023InvokeWaitForMethod\022\037.dex.InvokeWait" + - "ForMethodRequest\032\036.dex.InvokeWaitForMeth" + - "odOutput0\001\022X\n\023InvokeExecuteMethod\022\037.dex." + - "InvokeExecuteMethodRequest\032\036.dex.InvokeE" + - "xecuteMethodOutput0\001\022L\n\017InvokeWorkerRPC\022" + - "\033.dex.InvokeWorkerRPCRequest\032\034.dex.Invok" + - "eWorkerRPCResponse2l\n\017InternalService\022Y\n" + - "\030DumpFlowForContinueAsNew\022\035.dex.Continue" + - "AsNewDumpRequest\032\036.dex.ContinueAsNewDump" + - "ResponseB!\n\023io.superdurable.genB\010DexProt" + - "oP\001b\006proto3" + "\"0\n\023StepMethodHeartbeat\022\031\n\005value\030\001 \001(\0132\n" + + ".dex.Value\"`\n\017StepStreamWrite\022\023\n\013stream_" + + "name\030\001 \001(\t\022\035\n\025stream_capacity_bytes\030\002 \001(" + + "\003\022\031\n\005value\030\003 \001(\0132\n.dex.Value\"\266\001\n\031InvokeW" + + "aitForMethodOutput\022-\n\theartbeat\030\001 \001(\0132\030." + + "dex.StepMethodHeartbeatH\000\022,\n\014stream_writ" + + "e\030\002 \001(\0132\024.dex.StepStreamWriteH\000\0222\n\006resul" + + "t\030\003 \001(\0132 .dex.InvokeWaitForMethodRespons" + + "eH\000B\010\n\006output\"\236\005\n\032InvokeExecuteMethodReq" + + "uest\022\035\n\007context\030\001 \001(\0132\014.dex.Context\022\021\n\tf" + + "low_type\030\002 \001(\t\022\021\n\tstep_type\030\003 \001(\t\022\036\n\nste" + + "p_input\030\004 \001(\0132\n.dex.Value\022\033\n\nattributes\030" + + "\005 \003(\0132\007.dex.KV\022 \n\017step_exe_locals\030\006 \003(\0132" + + "\007.dex.KV\0220\n\021condition_results\030\007 \001(\0132\025.de" + + "x.ConditionResults\022H\n\rchannel_infos\030\010 \003(" + + "\01321.dex.InvokeExecuteMethodRequest.Chann" + + "elInfosEntry\022[\n\027loaded_channel_messages\030" + + "\t \003(\0132:.dex.InvokeExecuteMethodRequest.L" + + "oadedChannelMessagesEntry\022&\n\036loaded_attr" + + "ibute_map_instances\030\n \003(\t\022\034\n\024loaded_chan" + + "nel_names\030\013 \003(\t\022$\n\034loaded_channel_map_in" + + "stances\030\014 \003(\t\032E\n\021ChannelInfosEntry\022\013\n\003ke" + + "y\030\001 \001(\t\022\037\n\005value\030\002 \001(\0132\020.dex.ChannelInfo" + + ":\0028\001\032P\n\032LoadedChannelMessagesEntry\022\013\n\003ke" + + "y\030\001 \001(\t\022!\n\005value\030\002 \001(\0132\022.dex.ChannelValu" + + "es:\0028\001\"\350\002\n\033InvokeExecuteMethodResponse\022;" + + "\n\027local_activity_metadata\030\001 \001(\0132\032.dex.Lo" + + "calActivityMetadata\022(\n\rstep_decision\030\002 \001" + + "(\0132\021.dex.StepDecision\022.\n\021upsert_attribut" + + "es\030\003 \003(\0132\023.dex.AttributeWrite\022\036\n\rrecord_" + + "events\030\004 \003(\0132\007.dex.KV\022\'\n\026upsert_step_exe" + + "_locals\030\005 \003(\0132\007.dex.KV\022/\n\022publish_to_cha" + + "nnel\030\006 \003(\0132\023.dex.ChannelMessage\0228\n\023delet" + + "e_from_channel\030\007 \003(\0132\033.dex.ChannelMessag" + + "eDeletion\"\266\001\n\031InvokeExecuteMethodOutput\022" + + "-\n\theartbeat\030\001 \001(\0132\030.dex.StepMethodHeart" + + "beatH\000\022,\n\014stream_write\030\002 \001(\0132\024.dex.StepS" + + "treamWriteH\000\0222\n\006result\030\003 \001(\0132 .dex.Invok" + + "eExecuteMethodResponseH\000B\010\n\006output\"\270\004\n\026I" + + "nvokeWorkerRPCRequest\022\035\n\007context\030\001 \001(\0132\014" + + ".dex.Context\022\021\n\tflow_type\030\002 \001(\t\022\020\n\010rpc_n" + + "ame\030\003 \001(\t\022\031\n\005input\030\004 \001(\0132\n.dex.Value\022\033\n\n" + + "attributes\030\005 \003(\0132\007.dex.KV\022D\n\rchannel_inf" + + "os\030\006 \003(\0132-.dex.InvokeWorkerRPCRequest.Ch" + + "annelInfosEntry\022W\n\027loaded_channel_messag" + + "es\030\007 \003(\01326.dex.InvokeWorkerRPCRequest.Lo" + + "adedChannelMessagesEntry\022&\n\036loaded_attri" + + "bute_map_instances\030\010 \003(\t\022\034\n\024loaded_chann" + + "el_names\030\t \003(\t\022$\n\034loaded_channel_map_ins" + + "tances\030\n \003(\t\032E\n\021ChannelInfosEntry\022\013\n\003key" + + "\030\001 \001(\t\022\037\n\005value\030\002 \001(\0132\020.dex.ChannelInfo:" + + "\0028\001\032P\n\032LoadedChannelMessagesEntry\022\013\n\003key" + + "\030\001 \001(\t\022!\n\005value\030\002 \001(\0132\022.dex.ChannelValue" + + "s:\0028\001\"\232\002\n\027InvokeWorkerRPCResponse\022\032\n\006out" + + "put\030\001 \001(\0132\n.dex.Value\022(\n\rstep_decision\030\002" + + " \001(\0132\021.dex.StepDecision\022.\n\021upsert_attrib" + + "utes\030\003 \003(\0132\023.dex.AttributeWrite\022\036\n\rrecor" + + "d_events\030\004 \003(\0132\007.dex.KV\0228\n\023delete_from_c" + + "hannel\030\005 \003(\0132\033.dex.ChannelMessageDeletio" + + "n\022/\n\022publish_to_channel\030\006 \003(\0132\023.dex.Chan" + + "nelMessage\"\237\001\n\014StepDecision\022%\n\nnext_step" + + "s\030\001 \003(\0132\021.dex.StepMovement\022*\n\016close_deci" + + "sion\030\002 \001(\0132\022.dex.CloseDecision\022\031\n\021cancel" + + "_step_types\030\003 \003(\t\022!\n\031cancel_sibling_step" + + "_types\030\004 \003(\t\"\210\001\n\rCloseDecision\0223\n\023close_" + + "decision_type\030\001 \001(\0162\026.dex.CloseDecisionT" + + "ype\022!\n\031conditional_channel_names\030\002 \003(\t\022\037" + + "\n\013close_input\030\003 \001(\0132\n.dex.Value\"\325\001\n\014Step" + + "Movement\022\021\n\tstep_type\030\001 \001(\t\022\036\n\nstep_inpu" + + "t\030\002 \001(\0132\n.dex.Value\022&\n\014step_options\030\003 \001(" + + "\0132\020.dex.StepOptions\022,\n$from_step_executi" + + "on_id_internal_only\030\004 \001(\t\022<\n\034recovery_er" + + "ror_internal_only\030\005 \001(\0132\026.dex.RecoveryEr" + + "rorInfo\"-\n\024ConditionCombination\022\025\n\rcondi" + + "tion_ids\030\001 \003(\t\"\236\002\n\020WaitingCondition\0229\n\026w" + + "aiting_condition_type\030\001 \001(\0162\031.dex.Waitin" + + "gConditionType\022-\n\020timer_conditions\030\002 \003(\013" + + "2\023.dex.TimerCondition\0221\n\022channel_conditi" + + "ons\030\003 \003(\0132\025.dex.ChannelCondition\0229\n\026cond" + + "ition_combinations\030\004 \003(\0132\031.dex.Condition" + + "Combination\0222\n\023sub_flow_conditions\030\005 \003(\013" + + "2\025.dex.SubFlowCondition\"\250\002\n\025WaitingCondi" + + "tionState\0229\n\026waiting_condition_type\030\001 \001(" + + "\0162\031.dex.WaitingConditionType\022-\n\020timer_co" + + "nditions\030\002 \003(\0132\023.dex.TimerCondition\0221\n\022c" + + "hannel_conditions\030\003 \003(\0132\025.dex.ChannelCon" + + "dition\0229\n\026condition_combinations\030\004 \003(\0132\031" + + ".dex.ConditionCombination\0227\n\023sub_flow_co" + + "nditions\030\005 \003(\0132\032.dex.SubFlowConditionSta" + + "te\"\371\002\n\016SubFlowOptions\022-\n\014reuse_policy\030\001 " + + "\001(\0162\027.dex.SubFlowReusePolicy\022\034\n\024flow_tim" + + "eout_seconds\030\002 \001(\005\022 \n\030flow_start_delay_s" + + "econds\030\003 \001(\005\022*\n\014retry_policy\030\004 \001(\0132\024.dex" + + ".FlowRetryPolicy\022\'\n\nattributes\030\005 \003(\0132\023.d" + + "ex.AttributeWrite\022-\n\024flow_config_overrid" + + "e\030\006 \001(\0132\017.dex.FlowConfig\0223\n\023flow_timeout" + + "_policy\030\007 \001(\0162\026.dex.FlowTimeoutPolicy\022?\n" + + "\027timeout_handler_options\030\010 \001(\0132\036.dex.Flo" + + "wTimeoutHandlerOptions\"\336\001\n\020SubFlowCondit" + + "ion\022\024\n\014condition_id\030\001 \001(\t\022\025\n\rsub_flow_ty" + + "pe\030\002 \001(\t\022\027\n\017start_step_type\030\003 \001(\t\022\036\n\nste" + + "p_input\030\004 \001(\0132\n.dex.Value\022&\n\014step_option" + + "s\030\005 \001(\0132\020.dex.StepOptions\022$\n\007options\030\006 \001" + + "(\0132\023.dex.SubFlowOptions\022\026\n\016sub_flow_inde" + + "x\030\007 \001(\005\"-\n\025SubFlowConditionState\022\024\n\014cond" + + "ition_id\030\001 \001(\t\"g\n\016TimerCondition\022\024\n\014cond" + + "ition_id\030\001 \001(\t\022\030\n\020duration_seconds\030\002 \001(\003" + + "\022%\n\035firing_unix_timestamp_seconds\030\003 \001(\003\"" + + "\204\001\n\020ChannelCondition\022\024\n\014condition_id\030\001 \001" + + "(\t\022\024\n\014channel_name\030\002 \001(\t\022\025\n\010at_least\030\003 \001" + + "(\005H\000\210\001\001\022\024\n\007at_most\030\004 \001(\005H\001\210\001\001B\013\n\t_at_lea" + + "stB\n\n\010_at_most\"\254\001\n\020ConditionResults\022+\n\017c" + + "hannel_results\030\001 \003(\0132\022.dex.ChannelResult" + + "\022\'\n\rtimer_results\030\002 \003(\0132\020.dex.TimerResul" + + "t\022\027\n\017wait_for_failed\030\003 \001(\010\022)\n\020sub_flow_r" + + "esults\030\004 \003(\0132\017.dex.FlowResult\"S\n\013TimerRe" + + "sult\022\024\n\014condition_id\030\001 \001(\t\022.\n\020condition_" + + "status\030\002 \001(\0162\024.dex.ConditionStatus\"\207\001\n\rC" + + "hannelResult\022\024\n\014condition_id\030\001 \001(\t\022.\n\020co" + + "ndition_status\030\002 \001(\0162\024.dex.ConditionStat" + + "us\022\024\n\014channel_name\030\003 \001(\t\022\032\n\006values\030\004 \003(\013" + + "2\n.dex.Value\"i\n\030ContinueAsNewDumpRequest" + + "\022\017\n\007flow_id\030\001 \001(\t\022\016\n\006run_id\030\002 \001(\t\022\020\n\010pag" + + "e_num\030\003 \001(\005\022\032\n\022page_size_in_bytes\030\004 \001(\005\"" + + "j\n\031ContinueAsNewDumpResponse\022\024\n\014page_con" + + "tent\030\001 \001(\014\022\020\n\010page_num\030\002 \001(\005\022\023\n\013total_pa" + + "ges\030\003 \001(\005\022\020\n\010checksum\030\004 \001(\t\"6\n\rChannelVa" + + "lues\022%\n\010messages\030\001 \003(\0132\023.dex.ChannelMess" + + "age\"\237\003\n StepExecutionCompletedConditions" + + "\022g\n\032completed_timer_conditions\030\001 \003(\0132C.d" + + "ex.StepExecutionCompletedConditions.Comp" + + "letedTimerConditionsEntry\022f\n\032completed_s" + + "ub_flow_results\030\002 \003(\0132B.dex.StepExecutio" + + "nCompletedConditions.CompletedSubFlowRes" + + "ultsEntry\032Y\n\035CompletedTimerConditionsEnt" + + "ry\022\013\n\003key\030\001 \001(\005\022\'\n\005value\030\002 \001(\0162\030.dex.Int" + + "ernalTimerStatus:\0028\001\032O\n\034CompletedSubFlow" + + "ResultsEntry\022\013\n\003key\030\001 \001(\005\022\036\n\005value\030\002 \001(\013" + + "2\017.dex.FlowResult:\0028\001\"\363\001\n\027StepExecutionR" + + "esumeInfo\022\031\n\021step_execution_id\030\001 \001(\t\022\037\n\004" + + "step\030\002 \001(\0132\021.dex.StepMovement\022C\n\024complet" + + "ed_conditions\030\003 \001(\0132%.dex.StepExecutionC" + + "ompletedConditions\0225\n\021waiting_condition\030" + + "\004 \001(\0132\032.dex.WaitingConditionState\022 \n\017ste" + + "p_exe_locals\030\005 \003(\0132\007.dex.KV\"\316\004\n\030StepExec" + + "utionCounterInfo\022X\n\027step_type_started_co" + + "unt\030\001 \003(\01327.dex.StepExecutionCounterInfo" + + ".StepTypeStartedCountEntry\022o\n#step_type_" + + "currently_executing_count\030\002 \003(\0132B.dex.St" + + "epExecutionCounterInfo.StepTypeCurrently" + + "ExecutingCountEntry\022\'\n\037total_currently_e" + + "xecuting_count\030\003 \001(\005\022^\n\032step_active_exec" + + "ution_nums\030\004 \003(\0132:.dex.StepExecutionCoun" + + "terInfo.StepActiveExecutionNumsEntry\032;\n\031" + + "StepTypeStartedCountEntry\022\013\n\003key\030\001 \001(\t\022\r" + + "\n\005value\030\002 \001(\005:\0028\001\032F\n$StepTypeCurrentlyEx" + + "ecutingCountEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030" + + "\002 \001(\005:\0028\001\032Y\n\034StepActiveExecutionNumsEntr" + + "y\022\013\n\003key\030\001 \001(\t\022(\n\005value\030\002 \001(\0132\031.dex.Step" + + "ExecutionNumbers:\0028\001\"f\n\016StaleSkipTimer\022\031" + + "\n\021step_execution_id\030\001 \001(\t\022\032\n\022timer_condi" + + "tion_id\030\002 \001(\t\022\035\n\025timer_condition_index\030\003" + + " \001(\005\"\222\004\n\021ContinueAsNewDump\0228\n\035steps_to_s" + + "tart_from_beginning\030\001 \003(\0132\021.dex.StepMove" + + "ment\022?\n\031step_executions_to_resume\030\002 \003(\0132" + + "\034.dex.StepExecutionResumeInfo\022E\n\020channel" + + "_received\030\003 \003(\0132+.dex.ContinueAsNewDump." + + "ChannelReceivedEntry\0223\n\014counter_info\030\004 \001" + + "(\0132\035.dex.StepExecutionCounterInfo\022/\n\014ste" + + "p_outputs\030\005 \003(\0132\031.dex.StepCompletionOutp" + + "ut\022.\n\021stale_skip_timers\030\006 \003(\0132\023.dex.Stal" + + "eSkipTimer\022\033\n\nattributes\030\007 \003(\0132\007.dex.KV\022" + + "<\n\034pending_attribute_sync_items\030\010 \003(\0132\026." + + "dex.AttributeSyncItem\032J\n\024ChannelReceived" + + "Entry\022\013\n\003key\030\001 \001(\t\022!\n\005value\030\002 \001(\0132\022.dex." + + "ChannelValues:\0028\001\"6\n\022ContinueAsNewInput\022" + + " \n\030previous_internal_run_id\030\001 \001(\t\"\334\003\n\030In" + + "terpreterWorkflowInput\022\021\n\tflow_type\030\001 \001(" + + "\t\022\'\n\037configured_flow_timeout_seconds\030\002 \001" + + "(\005\0223\n\023flow_timeout_policy\030\003 \001(\0162\026.dex.Fl" + + "owTimeoutPolicy\022\027\n\017start_step_type\030\004 \001(\t" + + "\022\036\n\nstep_input\030\005 \001(\0132\n.dex.Value\022&\n\014step" + + "_options\030\006 \001(\0132\020.dex.StepOptions\022,\n\017init" + + "_attributes\030\007 \003(\0132\023.dex.AttributeWrite\022\037" + + "\n\006config\030\010 \001(\0132\017.dex.FlowConfig\022&\n\036is_re" + + "sume_from_continue_as_new\030\t \001(\010\0226\n\025conti" + + "nue_as_new_input\030\n \001(\0132\027.dex.ContinueAsN" + + "ewInput\022?\n\027timeout_handler_options\030\013 \001(\013" + + "2\036.dex.FlowTimeoutHandlerOptions\"W\n\031Inte" + + "rpreterWorkflowOutput\022:\n\027step_completion" + + "_outputs\030\001 \003(\0132\031.dex.StepCompletionOutpu" + + "t\"1\n\035BlobStoreCleanupWorkflowInput\022\020\n\010st" + + "ore_id\030\001 \001(\t\"7\n\036BlobStoreCleanupWorkflow" + + "Output\022\025\n\rtotal_deleted\030\001 \001(\005\"~\n InvokeW" + + "aitForMethodActivityInput\022(\n\rworker_targ" + + "et\030\001 \001(\0132\021.dex.WorkerTarget\0220\n\007request\030\002" + + " \001(\0132\037.dex.InvokeWaitForMethodRequest\"W\n" + + "!InvokeWaitForMethodActivityOutput\0222\n\010re" + + "sponse\030\001 \001(\0132 .dex.InvokeWaitForMethodRe" + + "sponse\"~\n InvokeExecuteMethodActivityInp" + + "ut\022(\n\rworker_target\030\001 \001(\0132\021.dex.WorkerTa" + + "rget\0220\n\007request\030\002 \001(\0132\037.dex.InvokeExecut" + + "eMethodRequest\"7\n\021RecoveryErrorInfo\022\016\n\006d" + + "etail\030\001 \001(\t\022\022\n\nerror_type\030\002 \001(\t\"\365\001\n Inte" + + "rnalLocalStepActivityFailure\022;\n\027local_ac" + + "tivity_metadata\030\001 \001(\0132\032.dex.LocalActivit" + + "yMetadata\022\037\n\027first_attempt_timestamp\030\002 \001" + + "(\003\022.\n\016method_options\030\003 \001(\0132\026.dex.StepMet" + + "hodOptions\022\017\n\007attempt\030\004 \001(\005\0222\n\016activity_" + + "error\030\005 \001(\0132\032.dex.InternalActivityError\"" + + "W\n!InvokeExecuteMethodActivityOutput\0222\n\010" + + "response\030\001 \001(\0132 .dex.InvokeExecuteMethod" + + "Response\"W\n%DumpFlowForContinueAsNewActi" + + "vityInput\022.\n\007request\030\001 \001(\0132\035.dex.Continu" + + "eAsNewDumpRequest\"Z\n&DumpFlowForContinue" + + "AsNewActivityOutput\0220\n\010response\030\001 \001(\0132\036." + + "dex.ContinueAsNewDumpResponse\"v\n\034InvokeW" + + "orkerRPCActivityInput\022.\n\010rpc_prep\030\001 \001(\0132" + + "\034.dex.PrepareRpcQueryResponse\022&\n\007request" + + "\030\002 \001(\0132\025.dex.InvokeRPCRequest\"c\n\035InvokeW" + + "orkerRPCActivityOutput\022.\n\010response\030\001 \001(\013" + + "2\034.dex.InvokeWorkerRPCResponse\022\022\n\nreques" + + "t_id\030\002 \001(\t\"1\n\035CleanupBlobStoreActivityIn" + + "put\022\020\n\010store_id\030\001 \001(\t\"7\n\036CleanupBlobStor" + + "eActivityOutput\022\025\n\rtotal_deleted\030\001 \001(\005\"P" + + "\n\021AttributeSyncItem\022\023\n\013config_name\030\001 \001(\t" + + "\022\013\n\003key\030\002 \001(\t\022\031\n\005value\030\003 \001(\0132\n.dex.Value" + + "\"n\n\037SyncAttributeBatchActivityInput\022\017\n\007f" + + "low_id\030\001 \001(\t\022\023\n\013config_name\030\002 \001(\t\022%\n\005ite" + + "ms\030\003 \003(\0132\026.dex.AttributeSyncItem\"\224\001\n\031Sta" + + "rtSubFlowActivityInput\022(\n\tcondition\030\001 \001(" + + "\0132\025.dex.SubFlowCondition\022+\n\022parent_flow_" + + "config\030\002 \001(\0132\017.dex.FlowConfig\022 \n\030parent_" + + "step_execution_id\030\003 \001(\t\"L\n\032StartSubFlowA" + + "ctivityOutput\022.\n\025immediate_flow_result\030\001" + + " \001(\0132\017.dex.FlowResult\"[\n\036SubFlowCompleti" + + "onSignalRequest\022\023\n\013sub_flow_id\030\001 \001(\t\022$\n\013" + + "flow_result\030\002 \001(\0132\017.dex.FlowResult\"t\n$Re" + + "portSubFlowCompletionActivityInput\022\026\n\016pa" + + "rent_flow_id\030\001 \001(\t\0224\n\007request\030\002 \001(\0132#.de" + + "x.SubFlowCompletionSignalRequest\"]\n%Repo" + + "rtSubFlowCompletionActivityOutput\0224\n\006sta" + + "tus\030\001 \001(\0162$.dex.SubFlowCompletionDeliver" + + "yStatus\"\202\003\n\027ExecuteRpcSignalRequest\022\035\n\tr" + + "pc_input\030\001 \001(\0132\n.dex.Value\022\036\n\nrpc_output" + + "\030\002 \001(\0132\n.dex.Value\022.\n\021upsert_attributes\030" + + "\003 \003(\0132\023.dex.AttributeWrite\022(\n\rstep_decis" + + "ion\030\004 \001(\0132\021.dex.StepDecision\022\036\n\rrecord_e" + + "vents\030\005 \003(\0132\007.dex.KV\022/\n\022publish_to_chann" + + "el\030\006 \003(\0132\023.dex.ChannelMessage\022\034\n\024is_set_" + + "attribute_api\030\007 \001(\010\0228\n\023delete_from_chann" + + "el\030\010 \003(\0132\033.dex.ChannelMessageDeletion\022%\n" + + "\035is_delete_channel_message_api\030\t \001(\010\"n\n\026" + + "SkipTimerSignalRequest\022\031\n\021step_execution" + + "_id\030\001 \001(\t\022\032\n\022timer_condition_id\030\002 \001(\t\022\035\n" + + "\025timer_condition_index\030\003 \001(\005\"I\n\025StopFlow" + + "SignalRequest\022 \n\tstop_type\030\001 \001(\0162\r.dex.S" + + "topType\022\016\n\006reason\030\002 \001(\t\";\n\031GetAttributes" + + "QueryRequest\022\014\n\004keys\030\001 \003(\t\022\020\n\010all_keys\030\002" + + " \001(\010\"9\n\032GetAttributesQueryResponse\022\033\n\nat" + + "tributes\030\001 \003(\0132\007.dex.KV\"~\n\026PrepareRpcQue" + + "ryRequest\022$\n\034load_attribute_map_instance" + + "s\030\001 \003(\t\022\032\n\022load_channel_names\030\002 \003(\t\022\"\n\032l" + + "oad_channel_map_instances\030\003 \003(\t\"\311\004\n\027Prep" + + "areRpcQueryResponse\022\033\n\nattributes\030\001 \003(\0132" + + "\007.dex.KV\022\016\n\006run_id\030\002 \001(\t\022\036\n\026flow_started" + + "_timestamp\030\003 \001(\003\022\021\n\tflow_type\030\004 \001(\t\022(\n\rw" + + "orker_target\030\005 \001(\0132\021.dex.WorkerTarget\022E\n" + + "\rchannel_infos\030\006 \003(\0132..dex.PrepareRpcQue" + + "ryResponse.ChannelInfosEntry\022X\n\027loaded_c" + + "hannel_messages\030\007 \003(\01327.dex.PrepareRpcQu" + + "eryResponse.LoadedChannelMessagesEntry\022&" + + "\n\036loaded_attribute_map_instances\030\010 \003(\t\022\034" + + "\n\024loaded_channel_names\030\t \003(\t\022$\n\034loaded_c" + + "hannel_map_instances\030\n \003(\t\032E\n\021ChannelInf" + + "osEntry\022\013\n\003key\030\001 \001(\t\022\037\n\005value\030\002 \001(\0132\020.de" + + "x.ChannelInfo:\0028\001\032P\n\032LoadedChannelMessag" + + "esEntry\022\013\n\003key\030\001 \001(\t\022!\n\005value\030\002 \001(\0132\022.de" + + "x.ChannelValues:\0028\001\"r\n\tTimerInfo\022\024\n\014cond" + + "ition_id\030\001 \001(\t\022%\n\035firing_unix_timestamp_" + + "seconds\030\002 \001(\003\022(\n\006status\030\003 \001(\0162\030.dex.Inte" + + "rnalTimerStatus\"/\n\rTimerInfoList\022\036\n\006time" + + "rs\030\001 \003(\0132\016.dex.TimerInfo\"\366\001\n!GetCurrentT" + + "imerInfosQueryResponse\022v\n\"step_execution" + + "_current_timer_infos\030\001 \003(\0132J.dex.GetCurr" + + "entTimerInfosQueryResponse.StepExecution" + + "CurrentTimerInfosEntry\032Y\n#StepExecutionC" + + "urrentTimerInfosEntry\022\013\n\003key\030\001 \001(\t\022!\n\005va" + + "lue\030\002 \001(\0132\022.dex.TimerInfoList:\0028\001\"V\n)Get" + + "ScheduledGreedyTimerTimesQueryResponse\022)" + + "\n\021pending_scheduled\030\001 \003(\0132\016.dex.TimerInf" + + "o\"\304\001\n\021DebugDumpResponse\022\037\n\006config\030\001 \001(\0132" + + "\017.dex.FlowConfig\022(\n\010snapshot\030\002 \001(\0132\026.dex" + + ".ContinueAsNewDump\022%\n\035firing_timers_unix" + + "_timestamps\030\003 \003(\003\022=\n\026active_step_executi" + + "ons\030\004 \003(\0132\035.dex.ActiveStepExecutionState" + + "\"A\n\025InvokeRpcUpdateResult\022(\n\010response\030\001 " + + "\001(\0132\026.dex.InvokeRPCResponse\"\'\n\024StepExecu" + + "tionNumbers\022\017\n\007numbers\030\001 \003(\005*\313\001\n\tIndexTy" + + "pe\022\032\n\026INDEX_TYPE_UNSPECIFIED\020\000\022\026\n\022INDEX_" + + "TYPE_KEYWORD\020\001\022\023\n\017INDEX_TYPE_TEXT\020\002\022\034\n\030I" + + "NDEX_TYPE_KEYWORD_ARRAY\020\003\022\022\n\016INDEX_TYPE_" + + "INT\020\004\022\025\n\021INDEX_TYPE_DOUBLE\020\005\022\023\n\017INDEX_TY" + + "PE_BOOL\020\006\022\027\n\023INDEX_TYPE_DATETIME\020\007*\274\001\n\032W" + + "aitForMethodFailurePolicy\022.\n*WAIT_FOR_ME" + + "THOD_FAILURE_POLICY_UNSPECIFIED\020\000\0227\n3WAI" + + "T_FOR_METHOD_FAILURE_POLICY_FAIL_FLOW_ON" + + "_FAILURE\020\001\0225\n1WAIT_FOR_METHOD_FAILURE_PO" + + "LICY_PROCEED_ON_FAILURE\020\002*\320\001\n\032ExecuteMet" + + "hodFailurePolicy\022-\n)EXECUTE_METHOD_FAILU" + + "RE_POLICY_UNSPECIFIED\020\000\022E\nAEXECUTE_METHO" + + "D_FAILURE_POLICY_FAIL_FLOW_ON_EXECUTE_ME" + + "THOD_FAILURE\020\001\022<\n8EXECUTE_METHOD_FAILURE" + + "_POLICY_PROCEED_TO_CONFIGURED_STEP\020\002*\346\001\n" + + "\rIdReusePolicy\022\037\n\033ID_REUSE_POLICY_UNSPEC" + + "IFIED\020\000\0227\n3ID_REUSE_POLICY_ALLOW_IF_PREV" + + "IOUS_EXISTS_ABNORMALLY\020\001\022\'\n#ID_REUSE_POL" + + "ICY_ALLOW_IF_NO_RUNNING\020\002\022\"\n\036ID_REUSE_PO" + + "LICY_DISALLOW_REUSE\020\003\022.\n*ID_REUSE_POLICY" + + "_ALLOW_TERMINATE_IF_RUNNING\020\004*\317\001\n\024Active" + + "StepSearchMode\022\'\n#ACTIVE_STEP_SEARCH_MOD" + + "E_UNSPECIFIED\020\000\022+\n\'ACTIVE_STEP_SEARCH_MO" + + "DE_ENABLED_FOR_ALL\020\001\022;\n7ACTIVE_STEP_SEAR" + + "CH_MODE_ENABLED_FOR_STEPS_WITH_WAIT_FOR\020" + + "\002\022$\n ACTIVE_STEP_SEARCH_MODE_DISABLED\020\003*" + + "f\n\016StepDurability\022\037\n\033STEP_DURABILITY_UNS" + + "PECIFIED\020\000\022\030\n\024STEP_DURABILITY_SYNC\020\001\022\031\n\025" + + "STEP_DURABILITY_ASYNC\020\002*\227\001\n\021FlowTimeoutP" + + "olicy\022#\n\037FLOW_TIMEOUT_POLICY_UNSPECIFIED" + + "\020\000\022\034\n\030FLOW_TIMEOUT_POLICY_FAIL\020\001\022\036\n\032FLOW" + + "_TIMEOUT_POLICY_CANCEL\020\002\022\037\n\033FLOW_TIMEOUT" + + "_POLICY_HANDLER\020\003*h\n\010StopType\022\031\n\025STOP_TY" + + "PE_UNSPECIFIED\020\000\022\024\n\020STOP_TYPE_CANCEL\020\001\022\027" + + "\n\023STOP_TYPE_TERMINATE\020\002\022\022\n\016STOP_TYPE_FAI" + + "L\020\003*\200\002\n\nFlowStatus\022\033\n\027FLOW_STATUS_UNSPEC" + + "IFIED\020\000\022\027\n\023FLOW_STATUS_RUNNING\020\001\022\031\n\025FLOW" + + "_STATUS_COMPLETED\020\002\022\026\n\022FLOW_STATUS_FAILE" + + "D\020\003\0221\n-FLOW_STATUS_SERVER_SIDE_TIMEOUT_I" + + "NTERNAL_ONLY\020\004\022\032\n\026FLOW_STATUS_TERMINATED" + + "\020\005\022\030\n\024FLOW_STATUS_CANCELED\020\006\022 \n\034FLOW_STA" + + "TUS_CONTINUED_AS_NEW\020\007*\236\002\n\rFlowErrorType" + + "\022\037\n\033FLOW_ERROR_TYPE_UNSPECIFIED\020\000\022.\n*FLO" + + "W_ERROR_TYPE_STEP_DECISION_FAILING_FLOW\020" + + "\001\022+\n\'FLOW_ERROR_TYPE_CLIENT_API_FAILING_" + + "FLOW\020\002\022#\n\037FLOW_ERROR_TYPE_WORKER_API_FAI" + + "L\020\003\022*\n&FLOW_ERROR_TYPE_INVALID_USER_FLOW" + + "_CODE\020\004\022 \n\034FLOW_ERROR_TYPE_FLOW_TIMEOUT\020" + + "\005\022\034\n\030FLOW_ERROR_TYPE_INTERNAL\020\006*\223\001\n\026Pend" + + "ingStepMethodPhase\022)\n%PENDING_STEP_METHO" + + "D_PHASE_UNSPECIFIED\020\000\022\'\n#PENDING_STEP_ME" + + "THOD_PHASE_SCHEDULED\020\001\022%\n!PENDING_STEP_M" + + "ETHOD_PHASE_STARTED\020\002*q\n\017ActiveStepPhase" + + "\022!\n\035ACTIVE_STEP_PHASE_UNSPECIFIED\020\000\022\034\n\030A" + + "CTIVE_STEP_PHASE_ACTIVE\020\001\022\035\n\031ACTIVE_STEP" + + "_PHASE_WAITING\020\002*\275\001\n\rFlowResetType\022\037\n\033FL" + + "OW_RESET_TYPE_UNSPECIFIED\020\000\022\035\n\031FLOW_RESE" + + "T_TYPE_BEGINNING\020\001\022&\n\"FLOW_RESET_TYPE_HI" + + "STORY_EVENT_TIME\020\002\022\035\n\031FLOW_RESET_TYPE_ST" + + "EP_TYPE\020\003\022%\n!FLOW_RESET_TYPE_STEP_EXECUT" + + "ION_ID\020\004*\206\001\n\023FlowResetStepMethod\022&\n\"FLOW" + + "_RESET_STEP_METHOD_UNSPECIFIED\020\000\022#\n\037FLOW" + + "_RESET_STEP_METHOD_WAIT_FOR\020\001\022\"\n\036FLOW_RE" + + "SET_STEP_METHOD_EXECUTE\020\002*\306\002\n\026AttributeM" + + "atchOperator\022(\n$ATTRIBUTE_MATCH_OPERATOR" + + "_UNSPECIFIED\020\000\022\"\n\036ATTRIBUTE_MATCH_OPERAT" + + "OR_EQUAL\020\001\022&\n\"ATTRIBUTE_MATCH_OPERATOR_N" + + "OT_EQUAL\020\002\022)\n%ATTRIBUTE_MATCH_OPERATOR_G", + "REATER_THAN\020\003\0222\n.ATTRIBUTE_MATCH_OPERATO" + + "R_GREATER_THAN_OR_EQUAL\020\004\022&\n\"ATTRIBUTE_M" + + "ATCH_OPERATOR_LESS_THAN\020\005\022/\n+ATTRIBUTE_M" + + "ATCH_OPERATOR_LESS_THAN_OR_EQUAL\020\006*\323\002\n\016E" + + "rrorSubStatus\022 \n\034ERROR_SUB_STATUS_UNSPEC" + + "IFIED\020\000\022\"\n\036ERROR_SUB_STATUS_UNCATEGORIZE" + + "D\020\001\022)\n%ERROR_SUB_STATUS_FLOW_ALREADY_STA" + + "RTED\020\002\022$\n ERROR_SUB_STATUS_FLOW_NOT_EXIS" + + "TS\020\003\022%\n!ERROR_SUB_STATUS_WORKER_API_ERRO" + + "R\020\004\022\'\n#ERROR_SUB_STATUS_LONG_POLL_TIME_O" + + "UT\020\005\022.\n*ERROR_SUB_STATUS_CHANNEL_MESSAGE" + + "_NOT_FOUND\020\006\022*\n&ERROR_SUB_STATUS_WAIT_HA" + + "NDLER_TIME_OUT\020\007*\213\002\n\021CloseDecisionType\022#" + + "\n\037CLOSE_DECISION_TYPE_UNSPECIFIED\020\000\0228\n4C" + + "LOSE_DECISION_TYPE_FORCE_COMPLETE_ON_CHA" + + "NNELS_EMPTY\020\001\022)\n%CLOSE_DECISION_TYPE_GRA" + + "CEFUL_COMPLETE\020\002\022&\n\"CLOSE_DECISION_TYPE_" + + "FORCE_COMPLETE\020\003\022\"\n\036CLOSE_DECISION_TYPE_" + + "FORCE_FAIL\020\004\022 \n\034CLOSE_DECISION_TYPE_DEAD" + + "_END\020\005*\310\001\n\024WaitingConditionType\022&\n\"WAITI" + + "NG_CONDITION_TYPE_UNSPECIFIED\020\000\022(\n$WAITI" + + "NG_CONDITION_TYPE_ALL_COMPLETED\020\001\022(\n$WAI" + + "TING_CONDITION_TYPE_ANY_COMPLETED\020\002\0224\n0W" + + "AITING_CONDITION_TYPE_ANY_COMBINATION_CO" + + "MPLETED\020\003*\307\001\n\022SubFlowReusePolicy\022%\n!SUB_" + + "FLOW_REUSE_POLICY_UNSPECIFIED\020\000\022 \n\034SUB_F" + + "LOW_REUSE_POLICY_ATTACH\020\001\022>\n:SUB_FLOW_RE" + + "USE_POLICY_RESTART_IF_PREVIOUS_EXITS_ABN" + + "ORMALLY\020\002\022(\n$SUB_FLOW_REUSE_POLICY_ALWAY" + + "S_RESTART\020\003*q\n\017ConditionStatus\022 \n\034CONDIT" + + "ION_STATUS_UNSPECIFIED\020\000\022\034\n\030CONDITION_ST" + + "ATUS_WAITING\020\001\022\036\n\032CONDITION_STATUS_COMPL" + + "ETED\020\002*\243\001\n\023InternalTimerStatus\022%\n!INTERN" + + "AL_TIMER_STATUS_UNSPECIFIED\020\000\022!\n\035INTERNA" + + "L_TIMER_STATUS_PENDING\020\001\022\037\n\033INTERNAL_TIM" + + "ER_STATUS_FIRED\020\002\022!\n\035INTERNAL_TIMER_STAT" + + "US_SKIPPED\020\003*\351\002\n\017UpdateErrorType\022!\n\035UPDA" + + "TE_ERROR_TYPE_UNSPECIFIED\020\000\022/\n+UPDATE_ER" + + "ROR_TYPE_CONTINUE_AS_NEW_PREEMPTED\020\001\022&\n\"" + + "UPDATE_ERROR_TYPE_INVALID_ARGUMENT\020\002\022)\n%" + + "UPDATE_ERROR_TYPE_FAILED_PRECONDITION\020\003\022" + + "\'\n#UPDATE_ERROR_TYPE_DEADLINE_EXCEEDED\020\004" + + "\022.\n*UPDATE_ERROR_TYPE_RPC_ACQUIRE_LOCK_F" + + "AILURE\020\005\022%\n!UPDATE_ERROR_TYPE_SERVER_INT" + + "ERNAL\020\006\022/\n+UPDATE_ERROR_TYPE_CHANNEL_MES" + + "SAGE_NOT_FOUND\020\007*\315\001\n\037SubFlowCompletionDe" + + "liveryStatus\0223\n/SUB_FLOW_COMPLETION_DELI" + + "VERY_STATUS_UNSPECIFIED\020\000\0221\n-SUB_FLOW_CO" + + "MPLETION_DELIVERY_STATUS_DELIVERED\020\001\022B\n>" + + "SUB_FLOW_COMPLETION_DELIVERY_STATUS_PARE" + + "NT_CLOSED_OR_NOT_FOUND\020\0022\334\016\n\013FlowService" + + "\022:\n\tStartFlow\022\025.dex.StartFlowRequest\032\026.d" + + "ex.StartFlowResponse\022H\n\020PublishToChannel" + + "\022\034.dex.PublishToChannelRequest\032\026.google." + + "protobuf.Empty\022U\n\022GetChannelMessages\022\036.d" + + "ex.GetChannelMessagesRequest\032\037.dex.GetCh" + + "annelMessagesResponse\022P\n\024DeleteChannelMe" + + "ssage\022 .dex.DeleteChannelMessageRequest\032" + + "\026.google.protobuf.Empty\022>\n\013WriteStream\022\027" + + ".dex.WriteStreamRequest\032\026.google.protobu" + + "f.Empty\022=\n\nReadStream\022\026.dex.ReadStreamRe" + + "quest\032\027.dex.ReadStreamResponse\022U\n\022ListSt" + + "reamMessages\022\036.dex.ListStreamMessagesReq" + + "uest\032\037.dex.ListStreamMessagesResponse\0228\n" + + "\010StopFlow\022\024.dex.StopFlowRequest\032\026.google" + + ".protobuf.Empty\022F\n\rGetAttributes\022\031.dex.G" + + "etAttributesRequest\032\032.dex.GetAttributesR" + + "esponse\022B\n\rSetAttributes\022\031.dex.SetAttrib" + + "utesRequest\032\026.google.protobuf.Empty\022:\n\tL" + + "oadBlobs\022\025.dex.LoadBlobsRequest\032\026.dex.Lo" + + "adBlobsResponse\0227\n\013WaitForFlow\022\027.dex.Wai" + + "tForFlowRequest\032\017.dex.FlowResult\022@\n\013Sear" + + "chFlows\022\027.dex.SearchFlowsRequest\032\030.dex.S" + + "earchFlowsResponse\022W\n\024SyncAttributeIndex" + + "es\022\036.dex.SyncAttributeIndexRequest\032\037.dex" + + ".SyncAttributeIndexResponse\022I\n\016GetFlowSu" + + "mmary\022\032.dex.GetFlowSummaryRequest\032\033.dex." + + "GetFlowSummaryResponse\022O\n\020GetHistoryEven" + + "ts\022\034.dex.GetHistoryEventsRequest\032\035.dex.G" + + "etHistoryEventsResponse\022X\n\023WaitForHistor" + + "yEvent\022\037.dex.WaitForHistoryEventRequest\032" + + " .dex.WaitForHistoryEventResponse\022C\n\014Get" + + "FlowState\022\030.dex.GetFlowStateRequest\032\031.de" + + "x.GetFlowStateResponse\022:\n\tResetFlow\022\025.de" + + "x.ResetFlowRequest\032\026.dex.ResetFlowRespon" + + "se\022:\n\tInvokeRPC\022\025.dex.InvokeRPCRequest\032\026" + + ".dex.InvokeRPCResponse\022:\n\tSkipTimer\022\025.de" + + "x.SkipTimerRequest\032\026.google.protobuf.Emp" + + "ty\022H\n\020UpdateFlowConfig\022\034.dex.UpdateFlowC" + + "onfigRequest\032\026.google.protobuf.Empty\022^\n\025" + + "WaitForStepCompletion\022!.dex.WaitForStepC" + + "ompletionRequest\032\".dex.WaitForStepComple" + + "tionResponse\022O\n\020WaitForAttribute\022\034.dex.W" + + "aitForAttributeRequest\032\035.dex.WaitForAttr" + + "ibuteResponse\022P\n\024TriggerContinueAsNew\022 ." + + "dex.TriggerContinueAsNewRequest\032\026.google" + + ".protobuf.Empty\0226\n\013HealthCheck\022\026.google." + + "protobuf.Empty\032\017.dex.HealthInfo2\221\002\n\rWork" + + "erService\022X\n\023InvokeWaitForMethod\022\037.dex.I" + + "nvokeWaitForMethodRequest\032\036.dex.InvokeWa" + + "itForMethodOutput0\001\022X\n\023InvokeExecuteMeth" + + "od\022\037.dex.InvokeExecuteMethodRequest\032\036.de" + + "x.InvokeExecuteMethodOutput0\001\022L\n\017InvokeW" + + "orkerRPC\022\033.dex.InvokeWorkerRPCRequest\032\034." + + "dex.InvokeWorkerRPCResponse2l\n\017InternalS" + + "ervice\022Y\n\030DumpFlowForContinueAsNew\022\035.dex" + + ".ContinueAsNewDumpRequest\032\036.dex.Continue" + + "AsNewDumpResponseB!\n\023io.superdurable.gen" + + "B\010DexProtoP\001b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, @@ -2091,14 +2098,20 @@ public static void registerAllExtensions( com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_SetAttributesRequest_descriptor, new java.lang.String[] { "FlowId", "RunId", "Attributes", "RequestId", }); - internal_static_dex_LoadBlobsRequest_descriptor = + internal_static_dex_LoadBlobRequestEntry_descriptor = getDescriptor().getMessageType(35); + internal_static_dex_LoadBlobRequestEntry_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_dex_LoadBlobRequestEntry_descriptor, + new java.lang.String[] { "FlowId", "BlobValue", }); + internal_static_dex_LoadBlobsRequest_descriptor = + getDescriptor().getMessageType(36); internal_static_dex_LoadBlobsRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_LoadBlobsRequest_descriptor, - new java.lang.String[] { "Values", }); + new java.lang.String[] { "Entries", }); internal_static_dex_LoadBlobsResponse_descriptor = - getDescriptor().getMessageType(36); + getDescriptor().getMessageType(37); internal_static_dex_LoadBlobsResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_LoadBlobsResponse_descriptor, @@ -2110,43 +2123,43 @@ public static void registerAllExtensions( internal_static_dex_LoadBlobsResponse_ValuesEntry_descriptor, new java.lang.String[] { "Key", "Value", }); internal_static_dex_WaitForFlowRequest_descriptor = - getDescriptor().getMessageType(37); + getDescriptor().getMessageType(38); internal_static_dex_WaitForFlowRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_WaitForFlowRequest_descriptor, new java.lang.String[] { "FlowId", "RunId", "NeedsResults", "WaitTimeSeconds", }); internal_static_dex_StepCompletionOutput_descriptor = - getDescriptor().getMessageType(38); + getDescriptor().getMessageType(39); internal_static_dex_StepCompletionOutput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StepCompletionOutput_descriptor, new java.lang.String[] { "CompletedStepType", "CompletedStepExecutionId", "CompletedStepOutput", }); internal_static_dex_FlowResult_descriptor = - getDescriptor().getMessageType(39); + getDescriptor().getMessageType(40); internal_static_dex_FlowResult_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_FlowResult_descriptor, new java.lang.String[] { "FlowStatus", "Results", "ErrorType", "ErrorMessage", }); internal_static_dex_SearchFlowsRequest_descriptor = - getDescriptor().getMessageType(40); + getDescriptor().getMessageType(41); internal_static_dex_SearchFlowsRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_SearchFlowsRequest_descriptor, new java.lang.String[] { "Query", "PageSize", "NextPageToken", }); internal_static_dex_SearchFlowsResponse_descriptor = - getDescriptor().getMessageType(41); + getDescriptor().getMessageType(42); internal_static_dex_SearchFlowsResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_SearchFlowsResponse_descriptor, new java.lang.String[] { "FlowRuns", "NextPageToken", }); internal_static_dex_SearchFlowsResponseEntry_descriptor = - getDescriptor().getMessageType(42); + getDescriptor().getMessageType(43); internal_static_dex_SearchFlowsResponseEntry_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_SearchFlowsResponseEntry_descriptor, new java.lang.String[] { "FlowId", "RunId", "IndexedAttributes", "FlowType", "FlowStatus", "StartTime", "CloseTime", }); internal_static_dex_SyncAttributeIndexRequest_descriptor = - getDescriptor().getMessageType(43); + getDescriptor().getMessageType(44); internal_static_dex_SyncAttributeIndexRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_SyncAttributeIndexRequest_descriptor, @@ -2158,79 +2171,79 @@ public static void registerAllExtensions( internal_static_dex_SyncAttributeIndexRequest_AttributeIndexesEntry_descriptor, new java.lang.String[] { "Key", "Value", }); internal_static_dex_SyncAttributeIndexResponse_descriptor = - getDescriptor().getMessageType(44); + getDescriptor().getMessageType(45); internal_static_dex_SyncAttributeIndexResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_SyncAttributeIndexResponse_descriptor, new java.lang.String[] { }); internal_static_dex_FlowExecutionID_descriptor = - getDescriptor().getMessageType(45); + getDescriptor().getMessageType(46); internal_static_dex_FlowExecutionID_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_FlowExecutionID_descriptor, new java.lang.String[] { "FlowId", "RunId", }); internal_static_dex_GetFlowSummaryRequest_descriptor = - getDescriptor().getMessageType(46); + getDescriptor().getMessageType(47); internal_static_dex_GetFlowSummaryRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_GetFlowSummaryRequest_descriptor, new java.lang.String[] { "FlowId", "RunId", }); internal_static_dex_GetFlowSummaryResponse_descriptor = - getDescriptor().getMessageType(47); + getDescriptor().getMessageType(48); internal_static_dex_GetFlowSummaryResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_GetFlowSummaryResponse_descriptor, new java.lang.String[] { "FlowExecutionId", "FirstRunId", "RequestId", "FlowType", "FlowStatus", "StartTime", "CloseTime", }); internal_static_dex_InternalAsyncStepInputSnapshot_descriptor = - getDescriptor().getMessageType(48); + getDescriptor().getMessageType(49); internal_static_dex_InternalAsyncStepInputSnapshot_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InternalAsyncStepInputSnapshot_descriptor, new java.lang.String[] { "MethodOptions", "WaitForRequest", "ExecuteRequest", "Request", }); internal_static_dex_InternalLocalActivityInput_descriptor = - getDescriptor().getMessageType(49); + getDescriptor().getMessageType(50); internal_static_dex_InternalLocalActivityInput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InternalLocalActivityInput_descriptor, new java.lang.String[] { "CurrentRunStartedTimestamp", "MethodOptions", }); internal_static_dex_GetHistoryEventsRequest_descriptor = - getDescriptor().getMessageType(50); + getDescriptor().getMessageType(51); internal_static_dex_GetHistoryEventsRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_GetHistoryEventsRequest_descriptor, new java.lang.String[] { "FlowId", "RunId", "StartInternalEventId", "EstimatePageSize", "NextPageToken", }); internal_static_dex_GetHistoryEventsResponse_descriptor = - getDescriptor().getMessageType(51); + getDescriptor().getMessageType(52); internal_static_dex_GetHistoryEventsResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_GetHistoryEventsResponse_descriptor, new java.lang.String[] { "Events", "NextPageToken", "NextInternalEventId", }); internal_static_dex_FlowHistoryEvent_descriptor = - getDescriptor().getMessageType(52); + getDescriptor().getMessageType(53); internal_static_dex_FlowHistoryEvent_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_FlowHistoryEvent_descriptor, new java.lang.String[] { "EventId", "EventTime", "FlowStartedOrContinued", "FlowClosed", "StepWaitForCompleted", "StepWaitForFailed", "StepExecuteCompleted", "StepExecuteFailed", "RpcExecutionCompleted", "ChannelExternalPublish", "StepWaitForPending", "StepExecutePending", "TimeTravelFork", "ChannelExternalDelete", "Payload", }); internal_static_dex_TimeTravelForkHistoryEvent_descriptor = - getDescriptor().getMessageType(53); + getDescriptor().getMessageType(54); internal_static_dex_TimeTravelForkHistoryEvent_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_TimeTravelForkHistoryEvent_descriptor, new java.lang.String[] { "PreviousRunId", }); internal_static_dex_FlowStartedOrContinuedHistoryEvent_descriptor = - getDescriptor().getMessageType(54); + getDescriptor().getMessageType(55); internal_static_dex_FlowStartedOrContinuedHistoryEvent_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_FlowStartedOrContinuedHistoryEvent_descriptor, new java.lang.String[] { "FlowExecutionId", "FlowType", "FlowConfig", "FlowTimeout", "FlowTimeoutPolicy", "TimeoutHandlerOptions", "InitialStart", "ContinuedStart", "StartOrContinue", }); internal_static_dex_FlowInitialStart_descriptor = - getDescriptor().getMessageType(55); + getDescriptor().getMessageType(56); internal_static_dex_FlowInitialStart_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_FlowInitialStart_descriptor, new java.lang.String[] { "StartStepType", "StepInput", "StepOptions", "InitialAttributes", }); internal_static_dex_FlowContinuedStart_descriptor = - getDescriptor().getMessageType(56); + getDescriptor().getMessageType(57); internal_static_dex_FlowContinuedStart_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_FlowContinuedStart_descriptor, @@ -2242,127 +2255,127 @@ public static void registerAllExtensions( internal_static_dex_FlowContinuedStart_PendingChannelMessagesEntry_descriptor, new java.lang.String[] { "Key", "Value", }); internal_static_dex_FlowClosedHistoryEvent_descriptor = - getDescriptor().getMessageType(57); + getDescriptor().getMessageType(58); internal_static_dex_FlowClosedHistoryEvent_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_FlowClosedHistoryEvent_descriptor, new java.lang.String[] { "FlowStatus", "Results", "ErrorType", "ErrorMessage", "ContinuedToRunId", }); internal_static_dex_StepMethodPendingEvent_descriptor = - getDescriptor().getMessageType(58); + getDescriptor().getMessageType(59); internal_static_dex_StepMethodPendingEvent_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StepMethodPendingEvent_descriptor, new java.lang.String[] { "Input", "Context", "Phase", }); internal_static_dex_StepMethodFailure_descriptor = - getDescriptor().getMessageType(59); + getDescriptor().getMessageType(60); internal_static_dex_StepMethodFailure_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StepMethodFailure_descriptor, new java.lang.String[] { "BackendError", "Details", "Attempt", }); internal_static_dex_StepMethodOptions_descriptor = - getDescriptor().getMessageType(60); + getDescriptor().getMessageType(61); internal_static_dex_StepMethodOptions_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StepMethodOptions_descriptor, new java.lang.String[] { "TimeoutSeconds", "RetryPolicy", "HeartbeatTimeoutSeconds", }); internal_static_dex_StepMethodEventInput_descriptor = - getDescriptor().getMessageType(61); + getDescriptor().getMessageType(62); internal_static_dex_StepMethodEventInput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StepMethodEventInput_descriptor, new java.lang.String[] { "Unavailable", "StepInput", "ConditionResults", "Attributes", "StepExecutionLocals", }); internal_static_dex_StepMethodEventContext_descriptor = - getDescriptor().getMessageType(62); + getDescriptor().getMessageType(63); internal_static_dex_StepMethodEventContext_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StepMethodEventContext_descriptor, new java.lang.String[] { "StepExecutionId", "FromStepExecutionId", "StepType", "Durability", "FinalAttempt", "StartedTime", "Duration", "MethodOptions", "LastFailureInfo", }); internal_static_dex_StepWaitForCompletedOutput_descriptor = - getDescriptor().getMessageType(63); + getDescriptor().getMessageType(64); internal_static_dex_StepWaitForCompletedOutput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StepWaitForCompletedOutput_descriptor, new java.lang.String[] { "WaitForCondition", "UpsertAttributes", "PublishToChannel", "RecordEvents", "UpsertStepExecutionLocals", "DeleteFromChannel", }); internal_static_dex_StepExecuteCompletedOutput_descriptor = - getDescriptor().getMessageType(64); + getDescriptor().getMessageType(65); internal_static_dex_StepExecuteCompletedOutput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StepExecuteCompletedOutput_descriptor, new java.lang.String[] { "StepDecision", "UpsertAttributes", "PublishToChannel", "RecordEvents", "UpsertStepExecutionLocals", "DeleteFromChannel", }); internal_static_dex_StepMethodFailedOutput_descriptor = - getDescriptor().getMessageType(65); + getDescriptor().getMessageType(66); internal_static_dex_StepMethodFailedOutput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StepMethodFailedOutput_descriptor, new java.lang.String[] { "Failure", }); internal_static_dex_StepWaitForCompletedEvent_descriptor = - getDescriptor().getMessageType(66); + getDescriptor().getMessageType(67); internal_static_dex_StepWaitForCompletedEvent_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StepWaitForCompletedEvent_descriptor, new java.lang.String[] { "Input", "Output", "Context", }); internal_static_dex_StepWaitForFailedEvent_descriptor = - getDescriptor().getMessageType(67); + getDescriptor().getMessageType(68); internal_static_dex_StepWaitForFailedEvent_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StepWaitForFailedEvent_descriptor, new java.lang.String[] { "Input", "Output", "Context", }); internal_static_dex_StepExecuteCompletedEvent_descriptor = - getDescriptor().getMessageType(68); + getDescriptor().getMessageType(69); internal_static_dex_StepExecuteCompletedEvent_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StepExecuteCompletedEvent_descriptor, new java.lang.String[] { "Input", "Output", "Context", }); internal_static_dex_StepExecuteFailedEvent_descriptor = - getDescriptor().getMessageType(69); + getDescriptor().getMessageType(70); internal_static_dex_StepExecuteFailedEvent_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StepExecuteFailedEvent_descriptor, new java.lang.String[] { "Input", "Output", "Context", }); internal_static_dex_RpcExecutionCompletedEvent_descriptor = - getDescriptor().getMessageType(70); + getDescriptor().getMessageType(71); internal_static_dex_RpcExecutionCompletedEvent_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_RpcExecutionCompletedEvent_descriptor, new java.lang.String[] { "RpcName", "Input", "Output", "StepDecision", "UpsertAttributes", "RecordEvents", "PublishToChannel", "IsSetAttributeApi", "DeleteFromChannel", }); internal_static_dex_ChannelExternalPublishEvent_descriptor = - getDescriptor().getMessageType(71); + getDescriptor().getMessageType(72); internal_static_dex_ChannelExternalPublishEvent_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_ChannelExternalPublishEvent_descriptor, new java.lang.String[] { "Messages", }); internal_static_dex_ChannelExternalDeleteEvent_descriptor = - getDescriptor().getMessageType(72); + getDescriptor().getMessageType(73); internal_static_dex_ChannelExternalDeleteEvent_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_ChannelExternalDeleteEvent_descriptor, new java.lang.String[] { "Messages", }); internal_static_dex_WaitForHistoryEventRequest_descriptor = - getDescriptor().getMessageType(73); + getDescriptor().getMessageType(74); internal_static_dex_WaitForHistoryEventRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_WaitForHistoryEventRequest_descriptor, new java.lang.String[] { "FlowId", "RunId", "NextInternalEventId", }); internal_static_dex_WaitForHistoryEventResponse_descriptor = - getDescriptor().getMessageType(74); + getDescriptor().getMessageType(75); internal_static_dex_WaitForHistoryEventResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_WaitForHistoryEventResponse_descriptor, new java.lang.String[] { "EventAvailable", "AvailableInternalEventId", "FlowStatus", }); internal_static_dex_ActiveStepExecutionState_descriptor = - getDescriptor().getMessageType(75); + getDescriptor().getMessageType(76); internal_static_dex_ActiveStepExecutionState_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_ActiveStepExecutionState_descriptor, new java.lang.String[] { "StepExecutionId", "FromStepExecutionId", "StepType", "Phase", "Movement", "WaitingCondition", "CompletedConditions", "StepExecutionLocals", "Timers", "LastFailureInfo", }); internal_static_dex_GetFlowStateRequest_descriptor = - getDescriptor().getMessageType(76); + getDescriptor().getMessageType(77); internal_static_dex_GetFlowStateRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_GetFlowStateRequest_descriptor, new java.lang.String[] { "FlowId", "RunId", }); internal_static_dex_GetFlowStateResponse_descriptor = - getDescriptor().getMessageType(77); + getDescriptor().getMessageType(78); internal_static_dex_GetFlowStateResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_GetFlowStateResponse_descriptor, @@ -2374,121 +2387,121 @@ public static void registerAllExtensions( internal_static_dex_GetFlowStateResponse_PendingChannelMessagesEntry_descriptor, new java.lang.String[] { "Key", "Value", }); internal_static_dex_ResetFlowRequest_descriptor = - getDescriptor().getMessageType(78); + getDescriptor().getMessageType(79); internal_static_dex_ResetFlowRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_ResetFlowRequest_descriptor, new java.lang.String[] { "FlowId", "RunId", "ResetType", "Reason", "HistoryEventTime", "StepType", "StepExecutionId", "SkipWritesReapply", "StepMethod", }); internal_static_dex_ResetFlowResponse_descriptor = - getDescriptor().getMessageType(79); + getDescriptor().getMessageType(80); internal_static_dex_ResetFlowResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_ResetFlowResponse_descriptor, new java.lang.String[] { "RunId", }); internal_static_dex_InvokeRPCRequest_descriptor = - getDescriptor().getMessageType(80); + getDescriptor().getMessageType(81); internal_static_dex_InvokeRPCRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InvokeRPCRequest_descriptor, new java.lang.String[] { "FlowId", "RunId", "RpcName", "Input", "TimeoutSeconds", "LockAttributeKeys", "RequestId", "IsTransactional", "LoadAttributeMapInstances", "LoadChannelNames", "LoadChannelMapInstances", }); internal_static_dex_InvokeRPCResponse_descriptor = - getDescriptor().getMessageType(81); + getDescriptor().getMessageType(82); internal_static_dex_InvokeRPCResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InvokeRPCResponse_descriptor, new java.lang.String[] { "Output", }); internal_static_dex_SkipTimerRequest_descriptor = - getDescriptor().getMessageType(82); + getDescriptor().getMessageType(83); internal_static_dex_SkipTimerRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_SkipTimerRequest_descriptor, new java.lang.String[] { "FlowId", "RunId", "StepExecutionId", "TimerConditionId", "TimerConditionIndex", }); internal_static_dex_UpdateFlowConfigRequest_descriptor = - getDescriptor().getMessageType(83); + getDescriptor().getMessageType(84); internal_static_dex_UpdateFlowConfigRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_UpdateFlowConfigRequest_descriptor, new java.lang.String[] { "FlowId", "RunId", "FlowConfig", }); internal_static_dex_WaitForStepCompletionRequest_descriptor = - getDescriptor().getMessageType(84); + getDescriptor().getMessageType(85); internal_static_dex_WaitForStepCompletionRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_WaitForStepCompletionRequest_descriptor, new java.lang.String[] { "FlowId", "StepType", "StepExecutionNumber", "WaitTimeSeconds", "RequestId", }); internal_static_dex_WaitForStepCompletionResponse_descriptor = - getDescriptor().getMessageType(85); + getDescriptor().getMessageType(86); internal_static_dex_WaitForStepCompletionResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_WaitForStepCompletionResponse_descriptor, new java.lang.String[] { }); internal_static_dex_WaitForAttributeRequest_descriptor = - getDescriptor().getMessageType(86); + getDescriptor().getMessageType(87); internal_static_dex_WaitForAttributeRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_WaitForAttributeRequest_descriptor, new java.lang.String[] { "FlowId", "Match", "WaitTimeSeconds", "RequestId", }); internal_static_dex_WaitForAttributeResponse_descriptor = - getDescriptor().getMessageType(87); + getDescriptor().getMessageType(88); internal_static_dex_WaitForAttributeResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_WaitForAttributeResponse_descriptor, new java.lang.String[] { "MatchedValue", }); internal_static_dex_AttributeMatch_descriptor = - getDescriptor().getMessageType(88); + getDescriptor().getMessageType(89); internal_static_dex_AttributeMatch_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_AttributeMatch_descriptor, new java.lang.String[] { "Key", "Operator", "Operand", }); internal_static_dex_TriggerContinueAsNewRequest_descriptor = - getDescriptor().getMessageType(89); + getDescriptor().getMessageType(90); internal_static_dex_TriggerContinueAsNewRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_TriggerContinueAsNewRequest_descriptor, new java.lang.String[] { "FlowId", "RunId", }); internal_static_dex_HealthInfo_descriptor = - getDescriptor().getMessageType(90); + getDescriptor().getMessageType(91); internal_static_dex_HealthInfo_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_HealthInfo_descriptor, new java.lang.String[] { "Condition", "Hostname", "Duration", }); internal_static_dex_ServiceErrorResponse_descriptor = - getDescriptor().getMessageType(91); + getDescriptor().getMessageType(92); internal_static_dex_ServiceErrorResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_ServiceErrorResponse_descriptor, new java.lang.String[] { "Detail", "SubStatus", "OriginalWorkerErrorDetail", "OriginalWorkerErrorType", "OriginalWorkerErrorStatus", "OriginalWorkerErrorStackTrace", }); internal_static_dex_WorkerErrorResponse_descriptor = - getDescriptor().getMessageType(92); + getDescriptor().getMessageType(93); internal_static_dex_WorkerErrorResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_WorkerErrorResponse_descriptor, new java.lang.String[] { "Detail", "ErrorType", "StackTrace", "RetryAfterSeconds", }); internal_static_dex_InternalActivityError_descriptor = - getDescriptor().getMessageType(93); + getDescriptor().getMessageType(94); internal_static_dex_InternalActivityError_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InternalActivityError_descriptor, new java.lang.String[] { "ServerDetail", "WorkerGrpcStatus", "WorkerError", }); internal_static_dex_InternalWorkerError_descriptor = - getDescriptor().getMessageType(94); + getDescriptor().getMessageType(95); internal_static_dex_InternalWorkerError_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InternalWorkerError_descriptor, new java.lang.String[] { "Detail", "ErrorType", "StackTrace", }); internal_static_dex_InternalFlowError_descriptor = - getDescriptor().getMessageType(95); + getDescriptor().getMessageType(96); internal_static_dex_InternalFlowError_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InternalFlowError_descriptor, new java.lang.String[] { "ServerDetail", "ActivityError", "Failure", }); internal_static_dex_ChannelInfo_descriptor = - getDescriptor().getMessageType(96); + getDescriptor().getMessageType(97); internal_static_dex_ChannelInfo_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_ChannelInfo_descriptor, new java.lang.String[] { "Size", }); internal_static_dex_InvokeWaitForMethodRequest_descriptor = - getDescriptor().getMessageType(97); + getDescriptor().getMessageType(98); internal_static_dex_InvokeWaitForMethodRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InvokeWaitForMethodRequest_descriptor, @@ -2506,31 +2519,31 @@ public static void registerAllExtensions( internal_static_dex_InvokeWaitForMethodRequest_LoadedChannelMessagesEntry_descriptor, new java.lang.String[] { "Key", "Value", }); internal_static_dex_InvokeWaitForMethodResponse_descriptor = - getDescriptor().getMessageType(98); + getDescriptor().getMessageType(99); internal_static_dex_InvokeWaitForMethodResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InvokeWaitForMethodResponse_descriptor, new java.lang.String[] { "LocalActivityMetadata", "UpsertAttributes", "WaitingCondition", "UpsertStepExeLocals", "RecordEvents", "PublishToChannel", "DeleteFromChannel", }); internal_static_dex_StepMethodHeartbeat_descriptor = - getDescriptor().getMessageType(99); + getDescriptor().getMessageType(100); internal_static_dex_StepMethodHeartbeat_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StepMethodHeartbeat_descriptor, new java.lang.String[] { "Value", }); internal_static_dex_StepStreamWrite_descriptor = - getDescriptor().getMessageType(100); + getDescriptor().getMessageType(101); internal_static_dex_StepStreamWrite_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StepStreamWrite_descriptor, new java.lang.String[] { "StreamName", "StreamCapacityBytes", "Value", }); internal_static_dex_InvokeWaitForMethodOutput_descriptor = - getDescriptor().getMessageType(101); + getDescriptor().getMessageType(102); internal_static_dex_InvokeWaitForMethodOutput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InvokeWaitForMethodOutput_descriptor, new java.lang.String[] { "Heartbeat", "StreamWrite", "Result", "Output", }); internal_static_dex_InvokeExecuteMethodRequest_descriptor = - getDescriptor().getMessageType(102); + getDescriptor().getMessageType(103); internal_static_dex_InvokeExecuteMethodRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InvokeExecuteMethodRequest_descriptor, @@ -2548,19 +2561,19 @@ public static void registerAllExtensions( internal_static_dex_InvokeExecuteMethodRequest_LoadedChannelMessagesEntry_descriptor, new java.lang.String[] { "Key", "Value", }); internal_static_dex_InvokeExecuteMethodResponse_descriptor = - getDescriptor().getMessageType(103); + getDescriptor().getMessageType(104); internal_static_dex_InvokeExecuteMethodResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InvokeExecuteMethodResponse_descriptor, new java.lang.String[] { "LocalActivityMetadata", "StepDecision", "UpsertAttributes", "RecordEvents", "UpsertStepExeLocals", "PublishToChannel", "DeleteFromChannel", }); internal_static_dex_InvokeExecuteMethodOutput_descriptor = - getDescriptor().getMessageType(104); + getDescriptor().getMessageType(105); internal_static_dex_InvokeExecuteMethodOutput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InvokeExecuteMethodOutput_descriptor, new java.lang.String[] { "Heartbeat", "StreamWrite", "Result", "Output", }); internal_static_dex_InvokeWorkerRPCRequest_descriptor = - getDescriptor().getMessageType(105); + getDescriptor().getMessageType(106); internal_static_dex_InvokeWorkerRPCRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InvokeWorkerRPCRequest_descriptor, @@ -2578,115 +2591,115 @@ public static void registerAllExtensions( internal_static_dex_InvokeWorkerRPCRequest_LoadedChannelMessagesEntry_descriptor, new java.lang.String[] { "Key", "Value", }); internal_static_dex_InvokeWorkerRPCResponse_descriptor = - getDescriptor().getMessageType(106); + getDescriptor().getMessageType(107); internal_static_dex_InvokeWorkerRPCResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InvokeWorkerRPCResponse_descriptor, new java.lang.String[] { "Output", "StepDecision", "UpsertAttributes", "RecordEvents", "DeleteFromChannel", "PublishToChannel", }); internal_static_dex_StepDecision_descriptor = - getDescriptor().getMessageType(107); + getDescriptor().getMessageType(108); internal_static_dex_StepDecision_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StepDecision_descriptor, new java.lang.String[] { "NextSteps", "CloseDecision", "CancelStepTypes", "CancelSiblingStepTypes", }); internal_static_dex_CloseDecision_descriptor = - getDescriptor().getMessageType(108); + getDescriptor().getMessageType(109); internal_static_dex_CloseDecision_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_CloseDecision_descriptor, new java.lang.String[] { "CloseDecisionType", "ConditionalChannelNames", "CloseInput", }); internal_static_dex_StepMovement_descriptor = - getDescriptor().getMessageType(109); + getDescriptor().getMessageType(110); internal_static_dex_StepMovement_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StepMovement_descriptor, new java.lang.String[] { "StepType", "StepInput", "StepOptions", "FromStepExecutionIdInternalOnly", "RecoveryErrorInternalOnly", }); internal_static_dex_ConditionCombination_descriptor = - getDescriptor().getMessageType(110); + getDescriptor().getMessageType(111); internal_static_dex_ConditionCombination_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_ConditionCombination_descriptor, new java.lang.String[] { "ConditionIds", }); internal_static_dex_WaitingCondition_descriptor = - getDescriptor().getMessageType(111); + getDescriptor().getMessageType(112); internal_static_dex_WaitingCondition_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_WaitingCondition_descriptor, new java.lang.String[] { "WaitingConditionType", "TimerConditions", "ChannelConditions", "ConditionCombinations", "SubFlowConditions", }); internal_static_dex_WaitingConditionState_descriptor = - getDescriptor().getMessageType(112); + getDescriptor().getMessageType(113); internal_static_dex_WaitingConditionState_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_WaitingConditionState_descriptor, new java.lang.String[] { "WaitingConditionType", "TimerConditions", "ChannelConditions", "ConditionCombinations", "SubFlowConditions", }); internal_static_dex_SubFlowOptions_descriptor = - getDescriptor().getMessageType(113); + getDescriptor().getMessageType(114); internal_static_dex_SubFlowOptions_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_SubFlowOptions_descriptor, new java.lang.String[] { "ReusePolicy", "FlowTimeoutSeconds", "FlowStartDelaySeconds", "RetryPolicy", "Attributes", "FlowConfigOverride", "FlowTimeoutPolicy", "TimeoutHandlerOptions", }); internal_static_dex_SubFlowCondition_descriptor = - getDescriptor().getMessageType(114); + getDescriptor().getMessageType(115); internal_static_dex_SubFlowCondition_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_SubFlowCondition_descriptor, new java.lang.String[] { "ConditionId", "SubFlowType", "StartStepType", "StepInput", "StepOptions", "Options", "SubFlowIndex", }); internal_static_dex_SubFlowConditionState_descriptor = - getDescriptor().getMessageType(115); + getDescriptor().getMessageType(116); internal_static_dex_SubFlowConditionState_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_SubFlowConditionState_descriptor, new java.lang.String[] { "ConditionId", }); internal_static_dex_TimerCondition_descriptor = - getDescriptor().getMessageType(116); + getDescriptor().getMessageType(117); internal_static_dex_TimerCondition_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_TimerCondition_descriptor, new java.lang.String[] { "ConditionId", "DurationSeconds", "FiringUnixTimestampSeconds", }); internal_static_dex_ChannelCondition_descriptor = - getDescriptor().getMessageType(117); + getDescriptor().getMessageType(118); internal_static_dex_ChannelCondition_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_ChannelCondition_descriptor, new java.lang.String[] { "ConditionId", "ChannelName", "AtLeast", "AtMost", }); internal_static_dex_ConditionResults_descriptor = - getDescriptor().getMessageType(118); + getDescriptor().getMessageType(119); internal_static_dex_ConditionResults_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_ConditionResults_descriptor, new java.lang.String[] { "ChannelResults", "TimerResults", "WaitForFailed", "SubFlowResults", }); internal_static_dex_TimerResult_descriptor = - getDescriptor().getMessageType(119); + getDescriptor().getMessageType(120); internal_static_dex_TimerResult_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_TimerResult_descriptor, new java.lang.String[] { "ConditionId", "ConditionStatus", }); internal_static_dex_ChannelResult_descriptor = - getDescriptor().getMessageType(120); + getDescriptor().getMessageType(121); internal_static_dex_ChannelResult_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_ChannelResult_descriptor, new java.lang.String[] { "ConditionId", "ConditionStatus", "ChannelName", "Values", }); internal_static_dex_ContinueAsNewDumpRequest_descriptor = - getDescriptor().getMessageType(121); + getDescriptor().getMessageType(122); internal_static_dex_ContinueAsNewDumpRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_ContinueAsNewDumpRequest_descriptor, new java.lang.String[] { "FlowId", "RunId", "PageNum", "PageSizeInBytes", }); internal_static_dex_ContinueAsNewDumpResponse_descriptor = - getDescriptor().getMessageType(122); + getDescriptor().getMessageType(123); internal_static_dex_ContinueAsNewDumpResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_ContinueAsNewDumpResponse_descriptor, new java.lang.String[] { "PageContent", "PageNum", "TotalPages", "Checksum", }); internal_static_dex_ChannelValues_descriptor = - getDescriptor().getMessageType(123); + getDescriptor().getMessageType(124); internal_static_dex_ChannelValues_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_ChannelValues_descriptor, new java.lang.String[] { "Messages", }); internal_static_dex_StepExecutionCompletedConditions_descriptor = - getDescriptor().getMessageType(124); + getDescriptor().getMessageType(125); internal_static_dex_StepExecutionCompletedConditions_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StepExecutionCompletedConditions_descriptor, @@ -2704,13 +2717,13 @@ public static void registerAllExtensions( internal_static_dex_StepExecutionCompletedConditions_CompletedSubFlowResultsEntry_descriptor, new java.lang.String[] { "Key", "Value", }); internal_static_dex_StepExecutionResumeInfo_descriptor = - getDescriptor().getMessageType(125); + getDescriptor().getMessageType(126); internal_static_dex_StepExecutionResumeInfo_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StepExecutionResumeInfo_descriptor, new java.lang.String[] { "StepExecutionId", "Step", "CompletedConditions", "WaitingCondition", "StepExeLocals", }); internal_static_dex_StepExecutionCounterInfo_descriptor = - getDescriptor().getMessageType(126); + getDescriptor().getMessageType(127); internal_static_dex_StepExecutionCounterInfo_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StepExecutionCounterInfo_descriptor, @@ -2734,13 +2747,13 @@ public static void registerAllExtensions( internal_static_dex_StepExecutionCounterInfo_StepActiveExecutionNumsEntry_descriptor, new java.lang.String[] { "Key", "Value", }); internal_static_dex_StaleSkipTimer_descriptor = - getDescriptor().getMessageType(127); + getDescriptor().getMessageType(128); internal_static_dex_StaleSkipTimer_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StaleSkipTimer_descriptor, new java.lang.String[] { "StepExecutionId", "TimerConditionId", "TimerConditionIndex", }); internal_static_dex_ContinueAsNewDump_descriptor = - getDescriptor().getMessageType(128); + getDescriptor().getMessageType(129); internal_static_dex_ContinueAsNewDump_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_ContinueAsNewDump_descriptor, @@ -2752,187 +2765,187 @@ public static void registerAllExtensions( internal_static_dex_ContinueAsNewDump_ChannelReceivedEntry_descriptor, new java.lang.String[] { "Key", "Value", }); internal_static_dex_ContinueAsNewInput_descriptor = - getDescriptor().getMessageType(129); + getDescriptor().getMessageType(130); internal_static_dex_ContinueAsNewInput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_ContinueAsNewInput_descriptor, new java.lang.String[] { "PreviousInternalRunId", }); internal_static_dex_InterpreterWorkflowInput_descriptor = - getDescriptor().getMessageType(130); + getDescriptor().getMessageType(131); internal_static_dex_InterpreterWorkflowInput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InterpreterWorkflowInput_descriptor, new java.lang.String[] { "FlowType", "ConfiguredFlowTimeoutSeconds", "FlowTimeoutPolicy", "StartStepType", "StepInput", "StepOptions", "InitAttributes", "Config", "IsResumeFromContinueAsNew", "ContinueAsNewInput", "TimeoutHandlerOptions", }); internal_static_dex_InterpreterWorkflowOutput_descriptor = - getDescriptor().getMessageType(131); + getDescriptor().getMessageType(132); internal_static_dex_InterpreterWorkflowOutput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InterpreterWorkflowOutput_descriptor, new java.lang.String[] { "StepCompletionOutputs", }); internal_static_dex_BlobStoreCleanupWorkflowInput_descriptor = - getDescriptor().getMessageType(132); + getDescriptor().getMessageType(133); internal_static_dex_BlobStoreCleanupWorkflowInput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_BlobStoreCleanupWorkflowInput_descriptor, new java.lang.String[] { "StoreId", }); internal_static_dex_BlobStoreCleanupWorkflowOutput_descriptor = - getDescriptor().getMessageType(133); + getDescriptor().getMessageType(134); internal_static_dex_BlobStoreCleanupWorkflowOutput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_BlobStoreCleanupWorkflowOutput_descriptor, new java.lang.String[] { "TotalDeleted", }); internal_static_dex_InvokeWaitForMethodActivityInput_descriptor = - getDescriptor().getMessageType(134); + getDescriptor().getMessageType(135); internal_static_dex_InvokeWaitForMethodActivityInput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InvokeWaitForMethodActivityInput_descriptor, new java.lang.String[] { "WorkerTarget", "Request", }); internal_static_dex_InvokeWaitForMethodActivityOutput_descriptor = - getDescriptor().getMessageType(135); + getDescriptor().getMessageType(136); internal_static_dex_InvokeWaitForMethodActivityOutput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InvokeWaitForMethodActivityOutput_descriptor, new java.lang.String[] { "Response", }); internal_static_dex_InvokeExecuteMethodActivityInput_descriptor = - getDescriptor().getMessageType(136); + getDescriptor().getMessageType(137); internal_static_dex_InvokeExecuteMethodActivityInput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InvokeExecuteMethodActivityInput_descriptor, new java.lang.String[] { "WorkerTarget", "Request", }); internal_static_dex_RecoveryErrorInfo_descriptor = - getDescriptor().getMessageType(137); + getDescriptor().getMessageType(138); internal_static_dex_RecoveryErrorInfo_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_RecoveryErrorInfo_descriptor, new java.lang.String[] { "Detail", "ErrorType", }); internal_static_dex_InternalLocalStepActivityFailure_descriptor = - getDescriptor().getMessageType(138); + getDescriptor().getMessageType(139); internal_static_dex_InternalLocalStepActivityFailure_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InternalLocalStepActivityFailure_descriptor, new java.lang.String[] { "LocalActivityMetadata", "FirstAttemptTimestamp", "MethodOptions", "Attempt", "ActivityError", }); internal_static_dex_InvokeExecuteMethodActivityOutput_descriptor = - getDescriptor().getMessageType(139); + getDescriptor().getMessageType(140); internal_static_dex_InvokeExecuteMethodActivityOutput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InvokeExecuteMethodActivityOutput_descriptor, new java.lang.String[] { "Response", }); internal_static_dex_DumpFlowForContinueAsNewActivityInput_descriptor = - getDescriptor().getMessageType(140); + getDescriptor().getMessageType(141); internal_static_dex_DumpFlowForContinueAsNewActivityInput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_DumpFlowForContinueAsNewActivityInput_descriptor, new java.lang.String[] { "Request", }); internal_static_dex_DumpFlowForContinueAsNewActivityOutput_descriptor = - getDescriptor().getMessageType(141); + getDescriptor().getMessageType(142); internal_static_dex_DumpFlowForContinueAsNewActivityOutput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_DumpFlowForContinueAsNewActivityOutput_descriptor, new java.lang.String[] { "Response", }); internal_static_dex_InvokeWorkerRPCActivityInput_descriptor = - getDescriptor().getMessageType(142); + getDescriptor().getMessageType(143); internal_static_dex_InvokeWorkerRPCActivityInput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InvokeWorkerRPCActivityInput_descriptor, new java.lang.String[] { "RpcPrep", "Request", }); internal_static_dex_InvokeWorkerRPCActivityOutput_descriptor = - getDescriptor().getMessageType(143); + getDescriptor().getMessageType(144); internal_static_dex_InvokeWorkerRPCActivityOutput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InvokeWorkerRPCActivityOutput_descriptor, new java.lang.String[] { "Response", "RequestId", }); internal_static_dex_CleanupBlobStoreActivityInput_descriptor = - getDescriptor().getMessageType(144); + getDescriptor().getMessageType(145); internal_static_dex_CleanupBlobStoreActivityInput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_CleanupBlobStoreActivityInput_descriptor, new java.lang.String[] { "StoreId", }); internal_static_dex_CleanupBlobStoreActivityOutput_descriptor = - getDescriptor().getMessageType(145); + getDescriptor().getMessageType(146); internal_static_dex_CleanupBlobStoreActivityOutput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_CleanupBlobStoreActivityOutput_descriptor, new java.lang.String[] { "TotalDeleted", }); internal_static_dex_AttributeSyncItem_descriptor = - getDescriptor().getMessageType(146); + getDescriptor().getMessageType(147); internal_static_dex_AttributeSyncItem_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_AttributeSyncItem_descriptor, new java.lang.String[] { "ConfigName", "Key", "Value", }); internal_static_dex_SyncAttributeBatchActivityInput_descriptor = - getDescriptor().getMessageType(147); + getDescriptor().getMessageType(148); internal_static_dex_SyncAttributeBatchActivityInput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_SyncAttributeBatchActivityInput_descriptor, new java.lang.String[] { "FlowId", "ConfigName", "Items", }); internal_static_dex_StartSubFlowActivityInput_descriptor = - getDescriptor().getMessageType(148); + getDescriptor().getMessageType(149); internal_static_dex_StartSubFlowActivityInput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StartSubFlowActivityInput_descriptor, new java.lang.String[] { "Condition", "ParentFlowConfig", "ParentStepExecutionId", }); internal_static_dex_StartSubFlowActivityOutput_descriptor = - getDescriptor().getMessageType(149); + getDescriptor().getMessageType(150); internal_static_dex_StartSubFlowActivityOutput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StartSubFlowActivityOutput_descriptor, new java.lang.String[] { "ImmediateFlowResult", }); internal_static_dex_SubFlowCompletionSignalRequest_descriptor = - getDescriptor().getMessageType(150); + getDescriptor().getMessageType(151); internal_static_dex_SubFlowCompletionSignalRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_SubFlowCompletionSignalRequest_descriptor, new java.lang.String[] { "SubFlowId", "FlowResult", }); internal_static_dex_ReportSubFlowCompletionActivityInput_descriptor = - getDescriptor().getMessageType(151); + getDescriptor().getMessageType(152); internal_static_dex_ReportSubFlowCompletionActivityInput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_ReportSubFlowCompletionActivityInput_descriptor, new java.lang.String[] { "ParentFlowId", "Request", }); internal_static_dex_ReportSubFlowCompletionActivityOutput_descriptor = - getDescriptor().getMessageType(152); + getDescriptor().getMessageType(153); internal_static_dex_ReportSubFlowCompletionActivityOutput_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_ReportSubFlowCompletionActivityOutput_descriptor, new java.lang.String[] { "Status", }); internal_static_dex_ExecuteRpcSignalRequest_descriptor = - getDescriptor().getMessageType(153); + getDescriptor().getMessageType(154); internal_static_dex_ExecuteRpcSignalRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_ExecuteRpcSignalRequest_descriptor, new java.lang.String[] { "RpcInput", "RpcOutput", "UpsertAttributes", "StepDecision", "RecordEvents", "PublishToChannel", "IsSetAttributeApi", "DeleteFromChannel", "IsDeleteChannelMessageApi", }); internal_static_dex_SkipTimerSignalRequest_descriptor = - getDescriptor().getMessageType(154); + getDescriptor().getMessageType(155); internal_static_dex_SkipTimerSignalRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_SkipTimerSignalRequest_descriptor, new java.lang.String[] { "StepExecutionId", "TimerConditionId", "TimerConditionIndex", }); internal_static_dex_StopFlowSignalRequest_descriptor = - getDescriptor().getMessageType(155); + getDescriptor().getMessageType(156); internal_static_dex_StopFlowSignalRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StopFlowSignalRequest_descriptor, new java.lang.String[] { "StopType", "Reason", }); internal_static_dex_GetAttributesQueryRequest_descriptor = - getDescriptor().getMessageType(156); + getDescriptor().getMessageType(157); internal_static_dex_GetAttributesQueryRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_GetAttributesQueryRequest_descriptor, new java.lang.String[] { "Keys", "AllKeys", }); internal_static_dex_GetAttributesQueryResponse_descriptor = - getDescriptor().getMessageType(157); + getDescriptor().getMessageType(158); internal_static_dex_GetAttributesQueryResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_GetAttributesQueryResponse_descriptor, new java.lang.String[] { "Attributes", }); internal_static_dex_PrepareRpcQueryRequest_descriptor = - getDescriptor().getMessageType(158); + getDescriptor().getMessageType(159); internal_static_dex_PrepareRpcQueryRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_PrepareRpcQueryRequest_descriptor, new java.lang.String[] { "LoadAttributeMapInstances", "LoadChannelNames", "LoadChannelMapInstances", }); internal_static_dex_PrepareRpcQueryResponse_descriptor = - getDescriptor().getMessageType(159); + getDescriptor().getMessageType(160); internal_static_dex_PrepareRpcQueryResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_PrepareRpcQueryResponse_descriptor, @@ -2950,19 +2963,19 @@ public static void registerAllExtensions( internal_static_dex_PrepareRpcQueryResponse_LoadedChannelMessagesEntry_descriptor, new java.lang.String[] { "Key", "Value", }); internal_static_dex_TimerInfo_descriptor = - getDescriptor().getMessageType(160); + getDescriptor().getMessageType(161); internal_static_dex_TimerInfo_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_TimerInfo_descriptor, new java.lang.String[] { "ConditionId", "FiringUnixTimestampSeconds", "Status", }); internal_static_dex_TimerInfoList_descriptor = - getDescriptor().getMessageType(161); + getDescriptor().getMessageType(162); internal_static_dex_TimerInfoList_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_TimerInfoList_descriptor, new java.lang.String[] { "Timers", }); internal_static_dex_GetCurrentTimerInfosQueryResponse_descriptor = - getDescriptor().getMessageType(162); + getDescriptor().getMessageType(163); internal_static_dex_GetCurrentTimerInfosQueryResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_GetCurrentTimerInfosQueryResponse_descriptor, @@ -2974,25 +2987,25 @@ public static void registerAllExtensions( internal_static_dex_GetCurrentTimerInfosQueryResponse_StepExecutionCurrentTimerInfosEntry_descriptor, new java.lang.String[] { "Key", "Value", }); internal_static_dex_GetScheduledGreedyTimerTimesQueryResponse_descriptor = - getDescriptor().getMessageType(163); + getDescriptor().getMessageType(164); internal_static_dex_GetScheduledGreedyTimerTimesQueryResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_GetScheduledGreedyTimerTimesQueryResponse_descriptor, new java.lang.String[] { "PendingScheduled", }); internal_static_dex_DebugDumpResponse_descriptor = - getDescriptor().getMessageType(164); + getDescriptor().getMessageType(165); internal_static_dex_DebugDumpResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_DebugDumpResponse_descriptor, new java.lang.String[] { "Config", "Snapshot", "FiringTimersUnixTimestamps", "ActiveStepExecutions", }); internal_static_dex_InvokeRpcUpdateResult_descriptor = - getDescriptor().getMessageType(165); + getDescriptor().getMessageType(166); internal_static_dex_InvokeRpcUpdateResult_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_InvokeRpcUpdateResult_descriptor, new java.lang.String[] { "Response", }); internal_static_dex_StepExecutionNumbers_descriptor = - getDescriptor().getMessageType(166); + getDescriptor().getMessageType(167); internal_static_dex_StepExecutionNumbers_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_dex_StepExecutionNumbers_descriptor, diff --git a/sdk-java/src/main/java/io/superdurable/gen/EncodedObject.java b/sdk-java/src/main/java/io/superdurable/gen/EncodedObject.java index 6dc0acafb..4d66ff4c2 100644 --- a/sdk-java/src/main/java/io/superdurable/gen/EncodedObject.java +++ b/sdk-java/src/main/java/io/superdurable/gen/EncodedObject.java @@ -54,6 +54,10 @@ public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { @SuppressWarnings("serial") private volatile java.lang.Object encoding_ = ""; /** + *
+   * "j" is JSON and "r" is raw bytes. Other values are passed through.
+   * 
+ * * string encoding = 1; * @return The encoding. */ @@ -71,6 +75,10 @@ public java.lang.String getEncoding() { } } /** + *
+   * "j" is JSON and "r" is raw bytes. Other values are passed through.
+   * 
+ * * string encoding = 1; * @return The bytes for encoding. */ @@ -423,6 +431,10 @@ public Builder mergeFrom( private java.lang.Object encoding_ = ""; /** + *
+     * "j" is JSON and "r" is raw bytes. Other values are passed through.
+     * 
+ * * string encoding = 1; * @return The encoding. */ @@ -439,6 +451,10 @@ public java.lang.String getEncoding() { } } /** + *
+     * "j" is JSON and "r" is raw bytes. Other values are passed through.
+     * 
+ * * string encoding = 1; * @return The bytes for encoding. */ @@ -456,6 +472,10 @@ public java.lang.String getEncoding() { } } /** + *
+     * "j" is JSON and "r" is raw bytes. Other values are passed through.
+     * 
+ * * string encoding = 1; * @param value The encoding to set. * @return This builder for chaining. @@ -469,6 +489,10 @@ public Builder setEncoding( return this; } /** + *
+     * "j" is JSON and "r" is raw bytes. Other values are passed through.
+     * 
+ * * string encoding = 1; * @return This builder for chaining. */ @@ -479,6 +503,10 @@ public Builder clearEncoding() { return this; } /** + *
+     * "j" is JSON and "r" is raw bytes. Other values are passed through.
+     * 
+ * * string encoding = 1; * @param value The bytes for encoding to set. * @return This builder for chaining. diff --git a/sdk-java/src/main/java/io/superdurable/gen/EncodedObjectOrBuilder.java b/sdk-java/src/main/java/io/superdurable/gen/EncodedObjectOrBuilder.java index e8c06e129..c84fbfeb9 100644 --- a/sdk-java/src/main/java/io/superdurable/gen/EncodedObjectOrBuilder.java +++ b/sdk-java/src/main/java/io/superdurable/gen/EncodedObjectOrBuilder.java @@ -11,11 +11,19 @@ public interface EncodedObjectOrBuilder extends com.google.protobuf.MessageOrBuilder { /** + *
+   * "j" is JSON and "r" is raw bytes. Other values are passed through.
+   * 
+ * * string encoding = 1; * @return The encoding. */ java.lang.String getEncoding(); /** + *
+   * "j" is JSON and "r" is raw bytes. Other values are passed through.
+   * 
+ * * string encoding = 1; * @return The bytes for encoding. */ diff --git a/sdk-java/src/main/java/io/superdurable/gen/LoadBlobRequestEntry.java b/sdk-java/src/main/java/io/superdurable/gen/LoadBlobRequestEntry.java new file mode 100644 index 000000000..480939460 --- /dev/null +++ b/sdk-java/src/main/java/io/superdurable/gen/LoadBlobRequestEntry.java @@ -0,0 +1,780 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: dex.proto +// Protobuf Java Version: 4.35.1 + +package io.superdurable.gen; + +/** + * Protobuf type {@code dex.LoadBlobRequestEntry} + */ +@com.google.protobuf.Generated +public final class LoadBlobRequestEntry extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:dex.LoadBlobRequestEntry) + LoadBlobRequestEntryOrBuilder { +private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 35, + /* patch= */ 1, + /* suffix= */ "", + "LoadBlobRequestEntry"); + } + // Use LoadBlobRequestEntry.newBuilder() to construct. + private LoadBlobRequestEntry(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private LoadBlobRequestEntry() { + flowId_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.superdurable.gen.DexProto.internal_static_dex_LoadBlobRequestEntry_descriptor; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return io.superdurable.gen.DexProto.internal_static_dex_LoadBlobRequestEntry_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.superdurable.gen.DexProto.internal_static_dex_LoadBlobRequestEntry_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.superdurable.gen.LoadBlobRequestEntry.class, io.superdurable.gen.LoadBlobRequestEntry.Builder.class); + } + + private int bitField0_; + public static final int FLOW_ID_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private volatile java.lang.Object flowId_ = ""; + /** + *
+   * Flow that owns blob_value and supplies the omitted Blob path segment.
+   * 
+ * + * string flow_id = 1; + * @return The flowId. + */ + @java.lang.Override + public java.lang.String getFlowId() { + java.lang.Object ref = flowId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + flowId_ = s; + return s; + } + } + /** + *
+   * Flow that owns blob_value and supplies the omitted Blob path segment.
+   * 
+ * + * string flow_id = 1; + * @return The bytes for flowId. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getFlowIdBytes() { + java.lang.Object ref = flowId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + flowId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int BLOB_VALUE_FIELD_NUMBER = 2; + private io.superdurable.gen.Value blobValue_; + /** + *
+   * Must use internal_blob_id_for_string_value or internal_blob_id_for_obj_value.
+   * 
+ * + * .dex.Value blob_value = 2; + * @return Whether the blobValue field is set. + */ + @java.lang.Override + public boolean hasBlobValue() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+   * Must use internal_blob_id_for_string_value or internal_blob_id_for_obj_value.
+   * 
+ * + * .dex.Value blob_value = 2; + * @return The blobValue. + */ + @java.lang.Override + public io.superdurable.gen.Value getBlobValue() { + return blobValue_ == null ? io.superdurable.gen.Value.getDefaultInstance() : blobValue_; + } + /** + *
+   * Must use internal_blob_id_for_string_value or internal_blob_id_for_obj_value.
+   * 
+ * + * .dex.Value blob_value = 2; + */ + @java.lang.Override + public io.superdurable.gen.ValueOrBuilder getBlobValueOrBuilder() { + return blobValue_ == null ? io.superdurable.gen.Value.getDefaultInstance() : blobValue_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(flowId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, flowId_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(2, getBlobValue()); + } + getUnknownFields().writeTo(output); + } + private int computeSerializedSize_0() { + int size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(flowId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, flowId_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, getBlobValue()); + } + return size; + } + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += computeSerializedSize_0(); + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof io.superdurable.gen.LoadBlobRequestEntry)) { + return super.equals(obj); + } + io.superdurable.gen.LoadBlobRequestEntry other = (io.superdurable.gen.LoadBlobRequestEntry) obj; + + if (!getFlowId() + .equals(other.getFlowId())) return false; + if (hasBlobValue() != other.hasBlobValue()) return false; + if (hasBlobValue()) { + if (!getBlobValue() + .equals(other.getBlobValue())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + FLOW_ID_FIELD_NUMBER; + hash = (53 * hash) + getFlowId().hashCode(); + if (hasBlobValue()) { + hash = (37 * hash) + BLOB_VALUE_FIELD_NUMBER; + hash = (53 * hash) + getBlobValue().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static io.superdurable.gen.LoadBlobRequestEntry parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.superdurable.gen.LoadBlobRequestEntry parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.superdurable.gen.LoadBlobRequestEntry parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.superdurable.gen.LoadBlobRequestEntry parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.superdurable.gen.LoadBlobRequestEntry parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.superdurable.gen.LoadBlobRequestEntry parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.superdurable.gen.LoadBlobRequestEntry parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static io.superdurable.gen.LoadBlobRequestEntry parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static io.superdurable.gen.LoadBlobRequestEntry parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static io.superdurable.gen.LoadBlobRequestEntry parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static io.superdurable.gen.LoadBlobRequestEntry parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static io.superdurable.gen.LoadBlobRequestEntry parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(io.superdurable.gen.LoadBlobRequestEntry prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code dex.LoadBlobRequestEntry} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:dex.LoadBlobRequestEntry) + io.superdurable.gen.LoadBlobRequestEntryOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.superdurable.gen.DexProto.internal_static_dex_LoadBlobRequestEntry_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.superdurable.gen.DexProto.internal_static_dex_LoadBlobRequestEntry_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.superdurable.gen.LoadBlobRequestEntry.class, io.superdurable.gen.LoadBlobRequestEntry.Builder.class); + } + + // Construct using io.superdurable.gen.LoadBlobRequestEntry.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage + .alwaysUseFieldBuilders) { + internalGetBlobValueFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + flowId_ = ""; + blobValue_ = null; + if (blobValueBuilder_ != null) { + blobValueBuilder_.dispose(); + blobValueBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return io.superdurable.gen.DexProto.internal_static_dex_LoadBlobRequestEntry_descriptor; + } + + @java.lang.Override + public io.superdurable.gen.LoadBlobRequestEntry getDefaultInstanceForType() { + return io.superdurable.gen.LoadBlobRequestEntry.getDefaultInstance(); + } + + @java.lang.Override + public io.superdurable.gen.LoadBlobRequestEntry build() { + io.superdurable.gen.LoadBlobRequestEntry result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public io.superdurable.gen.LoadBlobRequestEntry buildPartial() { + io.superdurable.gen.LoadBlobRequestEntry result = new io.superdurable.gen.LoadBlobRequestEntry(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(io.superdurable.gen.LoadBlobRequestEntry result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.flowId_ = flowId_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.blobValue_ = blobValueBuilder_ == null + ? blobValue_ + : blobValueBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof io.superdurable.gen.LoadBlobRequestEntry) { + return mergeFrom((io.superdurable.gen.LoadBlobRequestEntry)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(io.superdurable.gen.LoadBlobRequestEntry other) { + if (other == io.superdurable.gen.LoadBlobRequestEntry.getDefaultInstance()) return this; + if (!other.getFlowId().isEmpty()) { + flowId_ = other.flowId_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.hasBlobValue()) { + mergeBlobValue(other.getBlobValue()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + flowId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: { + input.readMessage( + internalGetBlobValueFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private java.lang.Object flowId_ = ""; + /** + *
+     * Flow that owns blob_value and supplies the omitted Blob path segment.
+     * 
+ * + * string flow_id = 1; + * @return The flowId. + */ + public java.lang.String getFlowId() { + java.lang.Object ref = flowId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + flowId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+     * Flow that owns blob_value and supplies the omitted Blob path segment.
+     * 
+ * + * string flow_id = 1; + * @return The bytes for flowId. + */ + public com.google.protobuf.ByteString + getFlowIdBytes() { + java.lang.Object ref = flowId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + flowId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+     * Flow that owns blob_value and supplies the omitted Blob path segment.
+     * 
+ * + * string flow_id = 1; + * @param value The flowId to set. + * @return This builder for chaining. + */ + public Builder setFlowId( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + flowId_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + *
+     * Flow that owns blob_value and supplies the omitted Blob path segment.
+     * 
+ * + * string flow_id = 1; + * @return This builder for chaining. + */ + public Builder clearFlowId() { + flowId_ = getDefaultInstance().getFlowId(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + /** + *
+     * Flow that owns blob_value and supplies the omitted Blob path segment.
+     * 
+ * + * string flow_id = 1; + * @param value The bytes for flowId to set. + * @return This builder for chaining. + */ + public Builder setFlowIdBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + flowId_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private io.superdurable.gen.Value blobValue_; + private com.google.protobuf.SingleFieldBuilder< + io.superdurable.gen.Value, io.superdurable.gen.Value.Builder, io.superdurable.gen.ValueOrBuilder> blobValueBuilder_; + /** + *
+     * Must use internal_blob_id_for_string_value or internal_blob_id_for_obj_value.
+     * 
+ * + * .dex.Value blob_value = 2; + * @return Whether the blobValue field is set. + */ + public boolean hasBlobValue() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + *
+     * Must use internal_blob_id_for_string_value or internal_blob_id_for_obj_value.
+     * 
+ * + * .dex.Value blob_value = 2; + * @return The blobValue. + */ + public io.superdurable.gen.Value getBlobValue() { + if (blobValueBuilder_ == null) { + return blobValue_ == null ? io.superdurable.gen.Value.getDefaultInstance() : blobValue_; + } else { + return blobValueBuilder_.getMessage(); + } + } + /** + *
+     * Must use internal_blob_id_for_string_value or internal_blob_id_for_obj_value.
+     * 
+ * + * .dex.Value blob_value = 2; + */ + public Builder setBlobValue(io.superdurable.gen.Value value) { + if (blobValueBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + blobValue_ = value; + } else { + blobValueBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + *
+     * Must use internal_blob_id_for_string_value or internal_blob_id_for_obj_value.
+     * 
+ * + * .dex.Value blob_value = 2; + */ + public Builder setBlobValue( + io.superdurable.gen.Value.Builder builderForValue) { + if (blobValueBuilder_ == null) { + blobValue_ = builderForValue.build(); + } else { + blobValueBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + *
+     * Must use internal_blob_id_for_string_value or internal_blob_id_for_obj_value.
+     * 
+ * + * .dex.Value blob_value = 2; + */ + public Builder mergeBlobValue(io.superdurable.gen.Value value) { + if (blobValueBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) && + blobValue_ != null && + blobValue_ != io.superdurable.gen.Value.getDefaultInstance()) { + getBlobValueBuilder().mergeFrom(value); + } else { + blobValue_ = value; + } + } else { + blobValueBuilder_.mergeFrom(value); + } + if (blobValue_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + /** + *
+     * Must use internal_blob_id_for_string_value or internal_blob_id_for_obj_value.
+     * 
+ * + * .dex.Value blob_value = 2; + */ + public Builder clearBlobValue() { + bitField0_ = (bitField0_ & ~0x00000002); + blobValue_ = null; + if (blobValueBuilder_ != null) { + blobValueBuilder_.dispose(); + blobValueBuilder_ = null; + } + onChanged(); + return this; + } + /** + *
+     * Must use internal_blob_id_for_string_value or internal_blob_id_for_obj_value.
+     * 
+ * + * .dex.Value blob_value = 2; + */ + public io.superdurable.gen.Value.Builder getBlobValueBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetBlobValueFieldBuilder().getBuilder(); + } + /** + *
+     * Must use internal_blob_id_for_string_value or internal_blob_id_for_obj_value.
+     * 
+ * + * .dex.Value blob_value = 2; + */ + public io.superdurable.gen.ValueOrBuilder getBlobValueOrBuilder() { + if (blobValueBuilder_ != null) { + return blobValueBuilder_.getMessageOrBuilder(); + } else { + return blobValue_ == null ? + io.superdurable.gen.Value.getDefaultInstance() : blobValue_; + } + } + /** + *
+     * Must use internal_blob_id_for_string_value or internal_blob_id_for_obj_value.
+     * 
+ * + * .dex.Value blob_value = 2; + */ + private com.google.protobuf.SingleFieldBuilder< + io.superdurable.gen.Value, io.superdurable.gen.Value.Builder, io.superdurable.gen.ValueOrBuilder> + internalGetBlobValueFieldBuilder() { + if (blobValueBuilder_ == null) { + blobValueBuilder_ = new com.google.protobuf.SingleFieldBuilder< + io.superdurable.gen.Value, io.superdurable.gen.Value.Builder, io.superdurable.gen.ValueOrBuilder>( + getBlobValue(), + getParentForChildren(), + isClean()); + blobValue_ = null; + } + return blobValueBuilder_; + } + + // @@protoc_insertion_point(builder_scope:dex.LoadBlobRequestEntry) + } + + // @@protoc_insertion_point(class_scope:dex.LoadBlobRequestEntry) + private static final io.superdurable.gen.LoadBlobRequestEntry DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new io.superdurable.gen.LoadBlobRequestEntry(); + } + + public static io.superdurable.gen.LoadBlobRequestEntry getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public LoadBlobRequestEntry parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public io.superdurable.gen.LoadBlobRequestEntry getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + +} + diff --git a/sdk-java/src/main/java/io/superdurable/gen/LoadBlobRequestEntryOrBuilder.java b/sdk-java/src/main/java/io/superdurable/gen/LoadBlobRequestEntryOrBuilder.java new file mode 100644 index 000000000..a3feefeda --- /dev/null +++ b/sdk-java/src/main/java/io/superdurable/gen/LoadBlobRequestEntryOrBuilder.java @@ -0,0 +1,59 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: dex.proto +// Protobuf Java Version: 4.35.1 + +package io.superdurable.gen; + +@com.google.protobuf.Generated +public interface LoadBlobRequestEntryOrBuilder extends + // @@protoc_insertion_point(interface_extends:dex.LoadBlobRequestEntry) + com.google.protobuf.MessageOrBuilder { + + /** + *
+   * Flow that owns blob_value and supplies the omitted Blob path segment.
+   * 
+ * + * string flow_id = 1; + * @return The flowId. + */ + java.lang.String getFlowId(); + /** + *
+   * Flow that owns blob_value and supplies the omitted Blob path segment.
+   * 
+ * + * string flow_id = 1; + * @return The bytes for flowId. + */ + com.google.protobuf.ByteString + getFlowIdBytes(); + + /** + *
+   * Must use internal_blob_id_for_string_value or internal_blob_id_for_obj_value.
+   * 
+ * + * .dex.Value blob_value = 2; + * @return Whether the blobValue field is set. + */ + boolean hasBlobValue(); + /** + *
+   * Must use internal_blob_id_for_string_value or internal_blob_id_for_obj_value.
+   * 
+ * + * .dex.Value blob_value = 2; + * @return The blobValue. + */ + io.superdurable.gen.Value getBlobValue(); + /** + *
+   * Must use internal_blob_id_for_string_value or internal_blob_id_for_obj_value.
+   * 
+ * + * .dex.Value blob_value = 2; + */ + io.superdurable.gen.ValueOrBuilder getBlobValueOrBuilder(); +} diff --git a/sdk-java/src/main/java/io/superdurable/gen/LoadBlobsRequest.java b/sdk-java/src/main/java/io/superdurable/gen/LoadBlobsRequest.java index 5b40cc648..2eb08d880 100644 --- a/sdk-java/src/main/java/io/superdurable/gen/LoadBlobsRequest.java +++ b/sdk-java/src/main/java/io/superdurable/gen/LoadBlobsRequest.java @@ -28,7 +28,7 @@ private LoadBlobsRequest(com.google.protobuf.GeneratedMessage.Builder builder super(builder); } private LoadBlobsRequest() { - values_ = java.util.Collections.emptyList(); + entries_ = java.util.Collections.emptyList(); } public static final com.google.protobuf.Descriptors.Descriptor @@ -49,75 +49,45 @@ public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { io.superdurable.gen.LoadBlobsRequest.class, io.superdurable.gen.LoadBlobsRequest.Builder.class); } - public static final int VALUES_FIELD_NUMBER = 1; + public static final int ENTRIES_FIELD_NUMBER = 1; @SuppressWarnings("serial") - private java.util.List values_; + private java.util.List entries_; /** - *
-   * Each value must be a blob-id only
-   * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-   * Concrete payload arms (string_value / obj_value) are rejected.
-   * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ @java.lang.Override - public java.util.List getValuesList() { - return values_; + public java.util.List getEntriesList() { + return entries_; } /** - *
-   * Each value must be a blob-id only
-   * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-   * Concrete payload arms (string_value / obj_value) are rejected.
-   * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ @java.lang.Override - public java.util.List - getValuesOrBuilderList() { - return values_; + public java.util.List + getEntriesOrBuilderList() { + return entries_; } /** - *
-   * Each value must be a blob-id only
-   * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-   * Concrete payload arms (string_value / obj_value) are rejected.
-   * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ @java.lang.Override - public int getValuesCount() { - return values_.size(); + public int getEntriesCount() { + return entries_.size(); } /** - *
-   * Each value must be a blob-id only
-   * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-   * Concrete payload arms (string_value / obj_value) are rejected.
-   * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ @java.lang.Override - public io.superdurable.gen.Value getValues(int index) { - return values_.get(index); + public io.superdurable.gen.LoadBlobRequestEntry getEntries(int index) { + return entries_.get(index); } /** - *
-   * Each value must be a blob-id only
-   * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-   * Concrete payload arms (string_value / obj_value) are rejected.
-   * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ @java.lang.Override - public io.superdurable.gen.ValueOrBuilder getValuesOrBuilder( + public io.superdurable.gen.LoadBlobRequestEntryOrBuilder getEntriesOrBuilder( int index) { - return values_.get(index); + return entries_.get(index); } private byte memoizedIsInitialized = -1; @@ -134,8 +104,8 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - for (int i = 0; i < values_.size(); i++) { - output.writeMessage(1, values_.get(i)); + for (int i = 0; i < entries_.size(); i++) { + output.writeMessage(1, entries_.get(i)); } getUnknownFields().writeTo(output); } @@ -143,10 +113,10 @@ private int computeSerializedSize_0() { int size = 0; { - final int count = values_.size(); + final int count = entries_.size(); for (int i = 0; i < count; i++) { size += com.google.protobuf.CodedOutputStream - .computeMessageSizeNoTag(values_.get(i)); + .computeMessageSizeNoTag(entries_.get(i)); } size += 1 * count; } @@ -174,8 +144,8 @@ public boolean equals(final java.lang.Object obj) { } io.superdurable.gen.LoadBlobsRequest other = (io.superdurable.gen.LoadBlobsRequest) obj; - if (!getValuesList() - .equals(other.getValuesList())) return false; + if (!getEntriesList() + .equals(other.getEntriesList())) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -187,9 +157,9 @@ public int hashCode() { } int hash = 41; hash = (19 * hash) + getDescriptor().hashCode(); - if (getValuesCount() > 0) { - hash = (37 * hash) + VALUES_FIELD_NUMBER; - hash = (53 * hash) + getValuesList().hashCode(); + if (getEntriesCount() > 0) { + hash = (37 * hash) + ENTRIES_FIELD_NUMBER; + hash = (53 * hash) + getEntriesList().hashCode(); } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; @@ -322,11 +292,11 @@ private Builder( public Builder clear() { super.clear(); bitField0_ = 0; - if (valuesBuilder_ == null) { - values_ = java.util.Collections.emptyList(); + if (entriesBuilder_ == null) { + entries_ = java.util.Collections.emptyList(); } else { - values_ = null; - valuesBuilder_.clear(); + entries_ = null; + entriesBuilder_.clear(); } bitField0_ = (bitField0_ & ~0x00000001); return this; @@ -362,14 +332,14 @@ public io.superdurable.gen.LoadBlobsRequest buildPartial() { } private void buildPartialRepeatedFields(io.superdurable.gen.LoadBlobsRequest result) { - if (valuesBuilder_ == null) { + if (entriesBuilder_ == null) { if (((bitField0_ & 0x00000001) != 0)) { - values_ = java.util.Collections.unmodifiableList(values_); + entries_ = java.util.Collections.unmodifiableList(entries_); bitField0_ = (bitField0_ & ~0x00000001); } - result.values_ = values_; + result.entries_ = entries_; } else { - result.values_ = valuesBuilder_.build(); + result.entries_ = entriesBuilder_.build(); } } @@ -389,29 +359,29 @@ public Builder mergeFrom(com.google.protobuf.Message other) { public Builder mergeFrom(io.superdurable.gen.LoadBlobsRequest other) { if (other == io.superdurable.gen.LoadBlobsRequest.getDefaultInstance()) return this; - if (valuesBuilder_ == null) { - if (!other.values_.isEmpty()) { - if (values_.isEmpty()) { - values_ = other.values_; + if (entriesBuilder_ == null) { + if (!other.entries_.isEmpty()) { + if (entries_.isEmpty()) { + entries_ = other.entries_; bitField0_ = (bitField0_ & ~0x00000001); } else { - ensureValuesIsMutable(); - values_.addAll(other.values_); + ensureEntriesIsMutable(); + entries_.addAll(other.entries_); } onChanged(); } } else { - if (!other.values_.isEmpty()) { - if (valuesBuilder_.isEmpty()) { - valuesBuilder_.dispose(); - valuesBuilder_ = null; - values_ = other.values_; + if (!other.entries_.isEmpty()) { + if (entriesBuilder_.isEmpty()) { + entriesBuilder_.dispose(); + entriesBuilder_ = null; + entries_ = other.entries_; bitField0_ = (bitField0_ & ~0x00000001); - valuesBuilder_ = + entriesBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - internalGetValuesFieldBuilder() : null; + internalGetEntriesFieldBuilder() : null; } else { - valuesBuilder_.addAllMessages(other.values_); + entriesBuilder_.addAllMessages(other.entries_); } } } @@ -442,15 +412,15 @@ public Builder mergeFrom( done = true; break; case 10: { - io.superdurable.gen.Value m = + io.superdurable.gen.LoadBlobRequestEntry m = input.readMessage( - io.superdurable.gen.Value.parser(), + io.superdurable.gen.LoadBlobRequestEntry.parser(), extensionRegistry); - if (valuesBuilder_ == null) { - ensureValuesIsMutable(); - values_.add(m); + if (entriesBuilder_ == null) { + ensureEntriesIsMutable(); + entries_.add(m); } else { - valuesBuilder_.addMessage(m); + entriesBuilder_.addMessage(m); } break; } // case 10 @@ -471,352 +441,244 @@ public Builder mergeFrom( } private int bitField0_; - private java.util.List values_ = + private java.util.List entries_ = java.util.Collections.emptyList(); - private void ensureValuesIsMutable() { + private void ensureEntriesIsMutable() { if (!((bitField0_ & 0x00000001) != 0)) { - values_ = new java.util.ArrayList(values_); + entries_ = new java.util.ArrayList(entries_); bitField0_ |= 0x00000001; } } private com.google.protobuf.RepeatedFieldBuilder< - io.superdurable.gen.Value, io.superdurable.gen.Value.Builder, io.superdurable.gen.ValueOrBuilder> valuesBuilder_; + io.superdurable.gen.LoadBlobRequestEntry, io.superdurable.gen.LoadBlobRequestEntry.Builder, io.superdurable.gen.LoadBlobRequestEntryOrBuilder> entriesBuilder_; /** - *
-     * Each value must be a blob-id only
-     * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-     * Concrete payload arms (string_value / obj_value) are rejected.
-     * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - public java.util.List getValuesList() { - if (valuesBuilder_ == null) { - return java.util.Collections.unmodifiableList(values_); + public java.util.List getEntriesList() { + if (entriesBuilder_ == null) { + return java.util.Collections.unmodifiableList(entries_); } else { - return valuesBuilder_.getMessageList(); + return entriesBuilder_.getMessageList(); } } /** - *
-     * Each value must be a blob-id only
-     * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-     * Concrete payload arms (string_value / obj_value) are rejected.
-     * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - public int getValuesCount() { - if (valuesBuilder_ == null) { - return values_.size(); + public int getEntriesCount() { + if (entriesBuilder_ == null) { + return entries_.size(); } else { - return valuesBuilder_.getCount(); + return entriesBuilder_.getCount(); } } /** - *
-     * Each value must be a blob-id only
-     * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-     * Concrete payload arms (string_value / obj_value) are rejected.
-     * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - public io.superdurable.gen.Value getValues(int index) { - if (valuesBuilder_ == null) { - return values_.get(index); + public io.superdurable.gen.LoadBlobRequestEntry getEntries(int index) { + if (entriesBuilder_ == null) { + return entries_.get(index); } else { - return valuesBuilder_.getMessage(index); + return entriesBuilder_.getMessage(index); } } /** - *
-     * Each value must be a blob-id only
-     * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-     * Concrete payload arms (string_value / obj_value) are rejected.
-     * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - public Builder setValues( - int index, io.superdurable.gen.Value value) { - if (valuesBuilder_ == null) { + public Builder setEntries( + int index, io.superdurable.gen.LoadBlobRequestEntry value) { + if (entriesBuilder_ == null) { if (value == null) { throw new NullPointerException(); } - ensureValuesIsMutable(); - values_.set(index, value); + ensureEntriesIsMutable(); + entries_.set(index, value); onChanged(); } else { - valuesBuilder_.setMessage(index, value); + entriesBuilder_.setMessage(index, value); } return this; } /** - *
-     * Each value must be a blob-id only
-     * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-     * Concrete payload arms (string_value / obj_value) are rejected.
-     * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - public Builder setValues( - int index, io.superdurable.gen.Value.Builder builderForValue) { - if (valuesBuilder_ == null) { - ensureValuesIsMutable(); - values_.set(index, builderForValue.build()); + public Builder setEntries( + int index, io.superdurable.gen.LoadBlobRequestEntry.Builder builderForValue) { + if (entriesBuilder_ == null) { + ensureEntriesIsMutable(); + entries_.set(index, builderForValue.build()); onChanged(); } else { - valuesBuilder_.setMessage(index, builderForValue.build()); + entriesBuilder_.setMessage(index, builderForValue.build()); } return this; } /** - *
-     * Each value must be a blob-id only
-     * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-     * Concrete payload arms (string_value / obj_value) are rejected.
-     * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - public Builder addValues(io.superdurable.gen.Value value) { - if (valuesBuilder_ == null) { + public Builder addEntries(io.superdurable.gen.LoadBlobRequestEntry value) { + if (entriesBuilder_ == null) { if (value == null) { throw new NullPointerException(); } - ensureValuesIsMutable(); - values_.add(value); + ensureEntriesIsMutable(); + entries_.add(value); onChanged(); } else { - valuesBuilder_.addMessage(value); + entriesBuilder_.addMessage(value); } return this; } /** - *
-     * Each value must be a blob-id only
-     * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-     * Concrete payload arms (string_value / obj_value) are rejected.
-     * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - public Builder addValues( - int index, io.superdurable.gen.Value value) { - if (valuesBuilder_ == null) { + public Builder addEntries( + int index, io.superdurable.gen.LoadBlobRequestEntry value) { + if (entriesBuilder_ == null) { if (value == null) { throw new NullPointerException(); } - ensureValuesIsMutable(); - values_.add(index, value); + ensureEntriesIsMutable(); + entries_.add(index, value); onChanged(); } else { - valuesBuilder_.addMessage(index, value); + entriesBuilder_.addMessage(index, value); } return this; } /** - *
-     * Each value must be a blob-id only
-     * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-     * Concrete payload arms (string_value / obj_value) are rejected.
-     * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - public Builder addValues( - io.superdurable.gen.Value.Builder builderForValue) { - if (valuesBuilder_ == null) { - ensureValuesIsMutable(); - values_.add(builderForValue.build()); + public Builder addEntries( + io.superdurable.gen.LoadBlobRequestEntry.Builder builderForValue) { + if (entriesBuilder_ == null) { + ensureEntriesIsMutable(); + entries_.add(builderForValue.build()); onChanged(); } else { - valuesBuilder_.addMessage(builderForValue.build()); + entriesBuilder_.addMessage(builderForValue.build()); } return this; } /** - *
-     * Each value must be a blob-id only
-     * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-     * Concrete payload arms (string_value / obj_value) are rejected.
-     * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - public Builder addValues( - int index, io.superdurable.gen.Value.Builder builderForValue) { - if (valuesBuilder_ == null) { - ensureValuesIsMutable(); - values_.add(index, builderForValue.build()); + public Builder addEntries( + int index, io.superdurable.gen.LoadBlobRequestEntry.Builder builderForValue) { + if (entriesBuilder_ == null) { + ensureEntriesIsMutable(); + entries_.add(index, builderForValue.build()); onChanged(); } else { - valuesBuilder_.addMessage(index, builderForValue.build()); + entriesBuilder_.addMessage(index, builderForValue.build()); } return this; } /** - *
-     * Each value must be a blob-id only
-     * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-     * Concrete payload arms (string_value / obj_value) are rejected.
-     * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - public Builder addAllValues( - java.lang.Iterable values) { - if (valuesBuilder_ == null) { - ensureValuesIsMutable(); + public Builder addAllEntries( + java.lang.Iterable values) { + if (entriesBuilder_ == null) { + ensureEntriesIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, values_); + values, entries_); onChanged(); } else { - valuesBuilder_.addAllMessages(values); + entriesBuilder_.addAllMessages(values); } return this; } /** - *
-     * Each value must be a blob-id only
-     * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-     * Concrete payload arms (string_value / obj_value) are rejected.
-     * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - public Builder clearValues() { - if (valuesBuilder_ == null) { - values_ = java.util.Collections.emptyList(); + public Builder clearEntries() { + if (entriesBuilder_ == null) { + entries_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000001); onChanged(); } else { - valuesBuilder_.clear(); + entriesBuilder_.clear(); } return this; } /** - *
-     * Each value must be a blob-id only
-     * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-     * Concrete payload arms (string_value / obj_value) are rejected.
-     * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - public Builder removeValues(int index) { - if (valuesBuilder_ == null) { - ensureValuesIsMutable(); - values_.remove(index); + public Builder removeEntries(int index) { + if (entriesBuilder_ == null) { + ensureEntriesIsMutable(); + entries_.remove(index); onChanged(); } else { - valuesBuilder_.remove(index); + entriesBuilder_.remove(index); } return this; } /** - *
-     * Each value must be a blob-id only
-     * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-     * Concrete payload arms (string_value / obj_value) are rejected.
-     * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - public io.superdurable.gen.Value.Builder getValuesBuilder( + public io.superdurable.gen.LoadBlobRequestEntry.Builder getEntriesBuilder( int index) { - return internalGetValuesFieldBuilder().getBuilder(index); + return internalGetEntriesFieldBuilder().getBuilder(index); } /** - *
-     * Each value must be a blob-id only
-     * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-     * Concrete payload arms (string_value / obj_value) are rejected.
-     * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - public io.superdurable.gen.ValueOrBuilder getValuesOrBuilder( + public io.superdurable.gen.LoadBlobRequestEntryOrBuilder getEntriesOrBuilder( int index) { - if (valuesBuilder_ == null) { - return values_.get(index); } else { - return valuesBuilder_.getMessageOrBuilder(index); + if (entriesBuilder_ == null) { + return entries_.get(index); } else { + return entriesBuilder_.getMessageOrBuilder(index); } } /** - *
-     * Each value must be a blob-id only
-     * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-     * Concrete payload arms (string_value / obj_value) are rejected.
-     * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - public java.util.List - getValuesOrBuilderList() { - if (valuesBuilder_ != null) { - return valuesBuilder_.getMessageOrBuilderList(); + public java.util.List + getEntriesOrBuilderList() { + if (entriesBuilder_ != null) { + return entriesBuilder_.getMessageOrBuilderList(); } else { - return java.util.Collections.unmodifiableList(values_); + return java.util.Collections.unmodifiableList(entries_); } } /** - *
-     * Each value must be a blob-id only
-     * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-     * Concrete payload arms (string_value / obj_value) are rejected.
-     * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - public io.superdurable.gen.Value.Builder addValuesBuilder() { - return internalGetValuesFieldBuilder().addBuilder( - io.superdurable.gen.Value.getDefaultInstance()); + public io.superdurable.gen.LoadBlobRequestEntry.Builder addEntriesBuilder() { + return internalGetEntriesFieldBuilder().addBuilder( + io.superdurable.gen.LoadBlobRequestEntry.getDefaultInstance()); } /** - *
-     * Each value must be a blob-id only
-     * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-     * Concrete payload arms (string_value / obj_value) are rejected.
-     * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - public io.superdurable.gen.Value.Builder addValuesBuilder( + public io.superdurable.gen.LoadBlobRequestEntry.Builder addEntriesBuilder( int index) { - return internalGetValuesFieldBuilder().addBuilder( - index, io.superdurable.gen.Value.getDefaultInstance()); + return internalGetEntriesFieldBuilder().addBuilder( + index, io.superdurable.gen.LoadBlobRequestEntry.getDefaultInstance()); } /** - *
-     * Each value must be a blob-id only
-     * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-     * Concrete payload arms (string_value / obj_value) are rejected.
-     * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - public java.util.List - getValuesBuilderList() { - return internalGetValuesFieldBuilder().getBuilderList(); + public java.util.List + getEntriesBuilderList() { + return internalGetEntriesFieldBuilder().getBuilderList(); } private com.google.protobuf.RepeatedFieldBuilder< - io.superdurable.gen.Value, io.superdurable.gen.Value.Builder, io.superdurable.gen.ValueOrBuilder> - internalGetValuesFieldBuilder() { - if (valuesBuilder_ == null) { - valuesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - io.superdurable.gen.Value, io.superdurable.gen.Value.Builder, io.superdurable.gen.ValueOrBuilder>( - values_, + io.superdurable.gen.LoadBlobRequestEntry, io.superdurable.gen.LoadBlobRequestEntry.Builder, io.superdurable.gen.LoadBlobRequestEntryOrBuilder> + internalGetEntriesFieldBuilder() { + if (entriesBuilder_ == null) { + entriesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + io.superdurable.gen.LoadBlobRequestEntry, io.superdurable.gen.LoadBlobRequestEntry.Builder, io.superdurable.gen.LoadBlobRequestEntryOrBuilder>( + entries_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean()); - values_ = null; + entries_ = null; } - return valuesBuilder_; + return entriesBuilder_; } // @@protoc_insertion_point(builder_scope:dex.LoadBlobsRequest) diff --git a/sdk-java/src/main/java/io/superdurable/gen/LoadBlobsRequestOrBuilder.java b/sdk-java/src/main/java/io/superdurable/gen/LoadBlobsRequestOrBuilder.java index be4c3d15c..2f84be2db 100644 --- a/sdk-java/src/main/java/io/superdurable/gen/LoadBlobsRequestOrBuilder.java +++ b/sdk-java/src/main/java/io/superdurable/gen/LoadBlobsRequestOrBuilder.java @@ -11,56 +11,26 @@ public interface LoadBlobsRequestOrBuilder extends com.google.protobuf.MessageOrBuilder { /** - *
-   * Each value must be a blob-id only
-   * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-   * Concrete payload arms (string_value / obj_value) are rejected.
-   * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - java.util.List - getValuesList(); + java.util.List + getEntriesList(); /** - *
-   * Each value must be a blob-id only
-   * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-   * Concrete payload arms (string_value / obj_value) are rejected.
-   * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - io.superdurable.gen.Value getValues(int index); + io.superdurable.gen.LoadBlobRequestEntry getEntries(int index); /** - *
-   * Each value must be a blob-id only
-   * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-   * Concrete payload arms (string_value / obj_value) are rejected.
-   * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - int getValuesCount(); + int getEntriesCount(); /** - *
-   * Each value must be a blob-id only
-   * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-   * Concrete payload arms (string_value / obj_value) are rejected.
-   * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - java.util.List - getValuesOrBuilderList(); + java.util.List + getEntriesOrBuilderList(); /** - *
-   * Each value must be a blob-id only
-   * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value).
-   * Concrete payload arms (string_value / obj_value) are rejected.
-   * 
- * - * repeated .dex.Value values = 1; + * repeated .dex.LoadBlobRequestEntry entries = 1; */ - io.superdurable.gen.ValueOrBuilder getValuesOrBuilder( + io.superdurable.gen.LoadBlobRequestEntryOrBuilder getEntriesOrBuilder( int index); } diff --git a/sdk-java/src/test/java/io/superdurable/dex/ClientExceptionIntegrationTest.java b/sdk-java/src/test/java/io/superdurable/dex/ClientExceptionIntegrationTest.java index 7daa3e4bd..f644819f0 100644 --- a/sdk-java/src/test/java/io/superdurable/dex/ClientExceptionIntegrationTest.java +++ b/sdk-java/src/test/java/io/superdurable/dex/ClientExceptionIntegrationTest.java @@ -443,7 +443,9 @@ public void loadBlobs( final LoadBlobsRequest request, final StreamObserver observer) { final LoadBlobsResponse.Builder response = LoadBlobsResponse.newBuilder(); - for (final Value value : request.getValuesList()) { + for (final io.superdurable.gen.LoadBlobRequestEntry entry + : request.getEntriesList()) { + final Value value = entry.getBlobValue(); if (value.hasInternalBlobIdForStringValue()) { response.putValues( value.getInternalBlobIdForStringValue(), @@ -453,7 +455,7 @@ public void loadBlobs( value.getInternalBlobIdForObjValue(), Value.newBuilder() .setObjValue(EncodedObject.newBuilder() - .setEncoding("rawbytes") + .setEncoding("r") .setPayload(ByteString.copyFromUtf8("done"))) .build()); } diff --git a/sdk-java/src/test/java/io/superdurable/dex/WorkerServiceIntegrationTest.java b/sdk-java/src/test/java/io/superdurable/dex/WorkerServiceIntegrationTest.java index e4a48566e..c650debca 100644 --- a/sdk-java/src/test/java/io/superdurable/dex/WorkerServiceIntegrationTest.java +++ b/sdk-java/src/test/java/io/superdurable/dex/WorkerServiceIntegrationTest.java @@ -76,6 +76,15 @@ import static org.junit.jupiter.api.Assertions.assertTrue; final class WorkerServiceIntegrationTest { + @Test + void usesCompactObjectEncodingWireValues() { + final ValueMapper values = new ValueMapper(new ObjectMapper()); + assertEquals("j", values.encode(Collections.singletonMap("key", "value")) + .getObjValue().getEncoding()); + assertEquals("r", values.encode(new byte[] {1, 2, 3}) + .getObjValue().getEncoding()); + } + @Test void derivesAdvertisedTargetFromDefaultBindAddress() { final Worker worker = new Worker( @@ -863,7 +872,9 @@ public void loadBlobs( final StreamObserver observer) { loads.incrementAndGet(); final LoadBlobsResponse.Builder response = LoadBlobsResponse.newBuilder(); - for (Value value : request.getValuesList()) { + for (io.superdurable.gen.LoadBlobRequestEntry entry + : request.getEntriesList()) { + final Value value = entry.getBlobValue(); final String blobId = value.getInternalBlobIdForStringValue(); response.putValues(blobId, concrete("hydrated")); } @@ -909,7 +920,7 @@ public void loadBlobs( .getCloseInput() .getStringValue()); assertEquals(1, loads.get()); - assertTrue(cache.get("blob-1").isPresent()); + assertTrue(cache.get("6:flow-1blob-1").isPresent()); } finally { running.close(); flowServer.shutdownNow().awaitTermination(5, TimeUnit.SECONDS); diff --git a/sdk-python/README.md b/sdk-python/README.md index 65336eded..6ed6c407a 100644 --- a/sdk-python/README.md +++ b/sdk-python/README.md @@ -439,7 +439,10 @@ client operations, and assertions as the Java suite against an isolated The strongly typed contracts, registry, synchronous Client/Worker, optional `AsyncClient`/`AsyncWorker` (`grpc.aio`), and Rust-backed BlobCache are implemented. Python owns its gRPC transport; the native bridge is limited to -the shared BlobCache. Design notes: +the shared BlobCache. Serialized object values use wire encoding `j` for JSON +and `r` for raw bytes. Internal Blob references are opaque. Hydration sends the +owning Flow ID with each reference, and the cache is isolated by +`(flow_id, blob_ref)`. Design notes: [`python-sdk-async-apis.md`](../docs/design/plan/python-sdk-async-apis.md) and [`python-sdk-step-streaming.md`](../docs/design/plan/python-sdk-step-streaming.md). diff --git a/sdk-python/dex/_async_value_hydrator.py b/sdk-python/dex/_async_value_hydrator.py index 80d4d7723..51143535a 100644 --- a/sdk-python/dex/_async_value_hydrator.py +++ b/sdk-python/dex/_async_value_hydrator.py @@ -20,6 +20,7 @@ @dataclass class _PendingBlob: + flow_id: str blob_id: str is_object: bool request: pb.Value @@ -36,21 +37,37 @@ def __init__( self._service = service self._cache = cache - async def hydrate(self, value: pb.Value) -> pb.Value: - return (await self.hydrate_all([value]))[0] + async def hydrate(self, flow_id: str, value: pb.Value) -> pb.Value: + return (await self.hydrate_all(flow_id, [value]))[0] - async def hydrate_all(self, values: list[pb.Value]) -> list[pb.Value]: + async def hydrate_all( + self, + flow_id: str, + values: list[pb.Value], + ) -> list[pb.Value]: + return await self.hydrate_all_for_flows( + [(flow_id, value) for value in values] + ) + + async def hydrate_all_for_flows( + self, + flow_values: list[tuple[str, pb.Value]], + ) -> list[pb.Value]: + values = [value for _, value in flow_values] hydrated = list(values) - pending: dict[tuple[str, bool], _PendingBlob] = {} - for index, value in enumerate(values): + pending: dict[tuple[str, str, bool], _PendingBlob] = {} + for index, (flow_id, value) in enumerate(flow_values): + if not flow_id: + raise ValueError(f"Flow ID at index {index} is required") key = self._blob_key(value) if key is None: self._validate_concrete(value) continue - blob = pending.get(key) + flow_blob_key = (flow_id, key[0], key[1]) + blob = pending.get(flow_blob_key) if blob is None: - blob = _PendingBlob(key[0], key[1], value) - pending[key] = blob + blob = _PendingBlob(flow_id, key[0], key[1], value) + pending[flow_blob_key] = blob blob.indexes.append(index) misses: list[_PendingBlob] = [] @@ -86,7 +103,7 @@ async def wait_for_request( for message in channel_values.messages ] values.extend(message.value for message in channel_messages) - hydrated = iter(await self.hydrate_all(values)) + hydrated = iter(await self.hydrate_all(request.context.flow_id, values)) result.step_input.CopyFrom(next(hydrated)) if has_heartbeat: result.context.last_heartbeat_value.CopyFrom(next(hydrated)) @@ -122,7 +139,11 @@ async def execute_request( values.extend(message.value for message in channel_messages) for channel_result in request.condition_results.channel_results: values.extend(channel_result.values) - hydrated = iter(await self.hydrate_all(values)) + for flow_result in request.condition_results.sub_flow_results: + values.extend( + completion.completed_step_output for completion in flow_result.results + ) + hydrated = iter(await self.hydrate_all(request.context.flow_id, values)) if has_step_input: result.step_input.CopyFrom(next(hydrated)) if has_heartbeat: @@ -141,6 +162,9 @@ async def execute_request( for channel_result in result.condition_results.channel_results: for value in channel_result.values: value.CopyFrom(next(hydrated)) + for flow_result in result.condition_results.sub_flow_results: + for completion in flow_result.results: + completion.completed_step_output.CopyFrom(next(hydrated)) return result async def rpc_request( @@ -156,7 +180,7 @@ async def rpc_request( for message in channel_values.messages ] values.extend(message.value for message in channel_messages) - hydrated = await self.hydrate_all(values) + hydrated = await self.hydrate_all(request.context.flow_id, values) result.input.CopyFrom(hydrated[0]) hydrated_entries = iter(hydrated[1:]) for entry in result.attributes: @@ -172,10 +196,11 @@ async def rpc_request( async def step_outputs( self, + flow_id: str, outputs: list[pb.StepCompletionOutput], ) -> list[pb.StepCompletionOutput]: values = [output.completed_step_output for output in outputs] - hydrated = await self.hydrate_all(values) + hydrated = await self.hydrate_all(flow_id, values) results: list[pb.StepCompletionOutput] = [] for output, value in zip(outputs, hydrated): result = pb.StepCompletionOutput() @@ -188,7 +213,15 @@ async def _load_misses(self, misses: list[_PendingBlob]) -> None: if not misses: return response = await self._service.LoadBlobs( - pb.LoadBlobsRequest(values=[miss.request for miss in misses]) + pb.LoadBlobsRequest( + entries=[ + pb.LoadBlobRequestEntry( + flow_id=miss.flow_id, + blob_value=miss.request, + ) + for miss in misses + ] + ) ) for miss in misses: concrete = response.values.get(miss.blob_id) @@ -200,7 +233,7 @@ async def _load_misses(self, misses: list[_PendingBlob]) -> None: def _read_cache(self, blob: _PendingBlob) -> pb.Value | None: try: - payload = self._cache.get(blob.blob_id) + payload = self._cache.get(self._cache_key(blob)) if payload is None: return None if blob.is_object: @@ -212,7 +245,7 @@ def _read_cache(self, blob: _PendingBlob) -> pb.Value | None: except Exception: _LOGGER.warning("cannot read cached blob %s", blob.blob_id, exc_info=True) try: - self._cache.delete(blob.blob_id) + self._cache.delete(self._cache_key(blob)) except Exception: _LOGGER.warning( "cannot delete cached blob %s", @@ -228,7 +261,7 @@ def _write_cache(self, blob: _PendingBlob, concrete: pb.Value) -> None: if blob.is_object else concrete.string_value.encode("utf-8") ) - self._cache.put(blob.blob_id, payload) + self._cache.put(self._cache_key(blob), payload) except Exception: _LOGGER.warning("cannot cache blob %s", blob.blob_id, exc_info=True) @@ -247,6 +280,10 @@ def _blob_key(value: pb.Value) -> tuple[str, bool] | None: return blob_id, True return None + @staticmethod + def _cache_key(blob: _PendingBlob) -> str: + return f"{len(blob.flow_id)}:{blob.flow_id}{blob.blob_id}" + @staticmethod def _validate_hydrated(blob: _PendingBlob, value: pb.Value) -> None: expected = "obj_value" if blob.is_object else "string_value" @@ -268,7 +305,7 @@ def _validate_concrete(value: pb.Value) -> None: raise ValueError("non-finite numbers are unsupported") return if kind == "obj_value": - if value.obj_value.encoding not in ("json", "rawbytes"): + if value.obj_value.encoding not in ("j", "r"): raise ValueError( f"unsupported object encoding {value.obj_value.encoding}" ) diff --git a/sdk-python/dex/_value_hydrator.py b/sdk-python/dex/_value_hydrator.py index 6e0c176cc..61bfcdca3 100644 --- a/sdk-python/dex/_value_hydrator.py +++ b/sdk-python/dex/_value_hydrator.py @@ -20,6 +20,7 @@ @dataclass class _PendingBlob: + flow_id: str blob_id: str is_object: bool request: pb.Value @@ -36,21 +37,31 @@ def __init__( self._service = service self._cache = cache - def hydrate(self, value: pb.Value) -> pb.Value: - return self.hydrate_all([value])[0] + def hydrate(self, flow_id: str, value: pb.Value) -> pb.Value: + return self.hydrate_all(flow_id, [value])[0] - def hydrate_all(self, values: list[pb.Value]) -> list[pb.Value]: + def hydrate_all(self, flow_id: str, values: list[pb.Value]) -> list[pb.Value]: + return self.hydrate_all_for_flows([(flow_id, value) for value in values]) + + def hydrate_all_for_flows( + self, + flow_values: list[tuple[str, pb.Value]], + ) -> list[pb.Value]: + values = [value for _, value in flow_values] hydrated = list(values) - pending: dict[tuple[str, bool], _PendingBlob] = {} - for index, value in enumerate(values): + pending: dict[tuple[str, str, bool], _PendingBlob] = {} + for index, (flow_id, value) in enumerate(flow_values): + if not flow_id: + raise ValueError(f"Flow ID at index {index} is required") key = self._blob_key(value) if key is None: self._validate_concrete(value) continue - blob = pending.get(key) + flow_blob_key = (flow_id, key[0], key[1]) + blob = pending.get(flow_blob_key) if blob is None: - blob = _PendingBlob(key[0], key[1], value) - pending[key] = blob + blob = _PendingBlob(flow_id, key[0], key[1], value) + pending[flow_blob_key] = blob blob.indexes.append(index) misses: list[_PendingBlob] = [] @@ -86,7 +97,7 @@ def wait_for_request( for message in channel_values.messages ] values.extend(message.value for message in channel_messages) - hydrated = iter(self.hydrate_all(values)) + hydrated = iter(self.hydrate_all(request.context.flow_id, values)) result.step_input.CopyFrom(next(hydrated)) if has_heartbeat: result.context.last_heartbeat_value.CopyFrom(next(hydrated)) @@ -126,7 +137,7 @@ def execute_request( values.extend( completion.completed_step_output for completion in flow_result.results ) - hydrated = iter(self.hydrate_all(values)) + hydrated = iter(self.hydrate_all(request.context.flow_id, values)) if has_step_input: result.step_input.CopyFrom(next(hydrated)) if has_heartbeat: @@ -163,7 +174,7 @@ def rpc_request( for message in channel_values.messages ] values.extend(message.value for message in channel_messages) - hydrated = self.hydrate_all(values) + hydrated = self.hydrate_all(request.context.flow_id, values) result.input.CopyFrom(hydrated[0]) hydrated_entries = iter(hydrated[1:]) for entry in result.attributes: @@ -179,10 +190,11 @@ def rpc_request( def step_outputs( self, + flow_id: str, outputs: list[pb.StepCompletionOutput], ) -> list[pb.StepCompletionOutput]: values = [output.completed_step_output for output in outputs] - hydrated = self.hydrate_all(values) + hydrated = self.hydrate_all(flow_id, values) results: list[pb.StepCompletionOutput] = [] for output, value in zip(outputs, hydrated): result = pb.StepCompletionOutput() @@ -195,7 +207,15 @@ def _load_misses(self, misses: list[_PendingBlob]) -> None: if not misses: return response = self._service.LoadBlobs( - pb.LoadBlobsRequest(values=[miss.request for miss in misses]) + pb.LoadBlobsRequest( + entries=[ + pb.LoadBlobRequestEntry( + flow_id=miss.flow_id, + blob_value=miss.request, + ) + for miss in misses + ] + ) ) for miss in misses: concrete = response.values.get(miss.blob_id) @@ -207,7 +227,7 @@ def _load_misses(self, misses: list[_PendingBlob]) -> None: def _read_cache(self, blob: _PendingBlob) -> pb.Value | None: try: - payload = self._cache.get(blob.blob_id) + payload = self._cache.get(self._cache_key(blob)) if payload is None: return None if blob.is_object: @@ -219,7 +239,7 @@ def _read_cache(self, blob: _PendingBlob) -> pb.Value | None: except Exception: _LOGGER.warning("cannot read cached blob %s", blob.blob_id, exc_info=True) try: - self._cache.delete(blob.blob_id) + self._cache.delete(self._cache_key(blob)) except Exception: _LOGGER.warning( "cannot delete cached blob %s", @@ -235,7 +255,7 @@ def _write_cache(self, blob: _PendingBlob, concrete: pb.Value) -> None: if blob.is_object else concrete.string_value.encode("utf-8") ) - self._cache.put(blob.blob_id, payload) + self._cache.put(self._cache_key(blob), payload) except Exception: _LOGGER.warning("cannot cache blob %s", blob.blob_id, exc_info=True) @@ -254,6 +274,10 @@ def _blob_key(value: pb.Value) -> tuple[str, bool] | None: return blob_id, True return None + @staticmethod + def _cache_key(blob: _PendingBlob) -> str: + return f"{len(blob.flow_id)}:{blob.flow_id}{blob.blob_id}" + @staticmethod def _validate_hydrated(blob: _PendingBlob, value: pb.Value) -> None: expected = "obj_value" if blob.is_object else "string_value" @@ -275,7 +299,7 @@ def _validate_concrete(value: pb.Value) -> None: raise ValueError("non-finite numbers are unsupported") return if kind == "obj_value": - if value.obj_value.encoding not in ("json", "rawbytes"): + if value.obj_value.encoding not in ("j", "r"): raise ValueError( f"unsupported object encoding {value.obj_value.encoding}" ) diff --git a/sdk-python/dex/_value_mapper.py b/sdk-python/dex/_value_mapper.py index 8957a8e42..a7363ad25 100644 --- a/sdk-python/dex/_value_mapper.py +++ b/sdk-python/dex/_value_mapper.py @@ -21,8 +21,8 @@ from dex.dexpb import dex_pb2 as pb from dex.runtime_errors import ValueMappingError -_JSON_ENCODING = "json" -_RAW_BYTES_ENCODING = "rawbytes" +_JSON_ENCODING = "j" +_RAW_BYTES_ENCODING = "r" class ValueMapper: diff --git a/sdk-python/dex/async_client.py b/sdk-python/dex/async_client.py index 47aa18a1c..896376a4f 100644 --- a/sdk-python/dex/async_client.py +++ b/sdk-python/dex/async_client.py @@ -308,7 +308,7 @@ async def invoke_rpc( if rpc.output_codec is None: return None return self._values.decode( - await self._hydrator.hydrate(response.output), + await self._hydrator.hydrate(flow_id, response.output), rpc.output_codec, ) @@ -505,7 +505,7 @@ async def wait_for_flow( DexServiceError: If FlowService cannot perform the wait. """ response = await self._wait_for_flow_response(flow_id, timeout) - hydrated = await self._hydrator.step_outputs(list(response.results)) + hydrated = await self._hydrator.step_outputs(flow_id, list(response.results)) mapped = pb.FlowResult() mapped.CopyFrom(response) del mapped.results[:] @@ -625,7 +625,9 @@ async def _map_search_entry( self, entry: pb.SearchFlowsResponseEntry ) -> SearchFlowEntry: attributes = { - kv.key: self._values.to_value(await self._hydrator.hydrate(kv.value)) + kv.key: self._values.to_value( + await self._hydrator.hydrate(entry.flow_id, kv.value) + ) for kv in entry.indexed_attributes } closed_at = ( diff --git a/sdk-python/dex/client.py b/sdk-python/dex/client.py index bd02fbe77..5dd015f6a 100644 --- a/sdk-python/dex/client.py +++ b/sdk-python/dex/client.py @@ -308,7 +308,7 @@ def invoke_rpc( if rpc.output_codec is None: return None return self._values.decode( - self._hydrator.hydrate(response.output), + self._hydrator.hydrate(flow_id, response.output), rpc.output_codec, ) @@ -505,7 +505,7 @@ def wait_for_flow( DexServiceError: If FlowService cannot perform the wait. """ response = self._wait_for_flow_response(flow_id, timeout) - hydrated = self._hydrator.step_outputs(list(response.results)) + hydrated = self._hydrator.step_outputs(flow_id, list(response.results)) mapped = pb.FlowResult() mapped.CopyFrom(response) del mapped.results[:] @@ -624,7 +624,9 @@ def search_flows( def _map_search_entry(self, entry: pb.SearchFlowsResponseEntry) -> SearchFlowEntry: attributes = { - kv.key: self._values.to_value(self._hydrator.hydrate(kv.value)) + kv.key: self._values.to_value( + self._hydrator.hydrate(entry.flow_id, kv.value) + ) for kv in entry.indexed_attributes } closed_at = ( diff --git a/sdk-python/dex/dexpb/dex_pb2.py b/sdk-python/dex/dexpb/dex_pb2.py index bc4dc3e71..b87711e50 100644 --- a/sdk-python/dex/dexpb/dex_pb2.py +++ b/sdk-python/dex/dexpb/dex_pb2.py @@ -28,7 +28,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\tdex.proto\x12\x03\x64\x65x\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x9c\x02\n\x05Value\x12+\n!internal_blob_id_for_string_value\x18\x01 \x01(\tH\x00\x12(\n\x1einternal_blob_id_for_obj_value\x18\x02 \x01(\tH\x00\x12\x16\n\x0cstring_value\x18\x03 \x01(\tH\x00\x12\'\n\tobj_value\x18\x04 \x01(\x0b\x32\x12.dex.EncodedObjectH\x00\x12\x13\n\tint_value\x18\x05 \x01(\x03H\x00\x12\x16\n\x0c\x64ouble_value\x18\x06 \x01(\x01H\x00\x12\x14\n\nbool_value\x18\x07 \x01(\x08H\x00\x12\x30\n\nnull_value\x18\x08 \x01(\x0e\x32\x1a.google.protobuf.NullValueH\x00\x42\x06\n\x04kind\"2\n\rEncodedObject\x12\x10\n\x08\x65ncoding\x18\x01 \x01(\t\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\"\x8f\x01\n\x0e\x41ttributeWrite\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x19\n\x05value\x18\x02 \x01(\x0b\x32\n.dex.Value\x12&\n\x0cindex_config\x18\x03 \x01(\x0b\x32\x10.dex.IndexConfig\x12-\n\x0bsync_config\x18\x04 \x01(\x0b\x32\x18.dex.AttributeSyncConfig\"&\n\x13\x41ttributeSyncConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\",\n\x02KV\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x19\n\x05value\x18\x02 \x01(\x0b\x32\n.dex.Value\"N\n\x0bIndexConfig\x12\x0e\n\x06\x65nable\x18\x01 \x01(\x08\x12\x1c\n\x04type\x18\x02 \x01(\x0e\x32\x0e.dex.IndexType\x12\x11\n\tindex_key\x18\x03 \x01(\t\"\x91\x02\n\x07\x43ontext\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x1e\n\x16\x66low_started_timestamp\x18\x03 \x01(\x03\x12\x19\n\x11step_execution_id\x18\x04 \x01(\t\x12\x1f\n\x17\x66irst_attempt_timestamp\x18\x05 \x01(\x03\x12\x0f\n\x07\x61ttempt\x18\x06 \x01(\x05\x12\x1e\n\x16\x66rom_step_execution_id\x18\x07 \x01(\t\x12.\n\x0erecovery_error\x18\x08 \x01(\x0b\x32\x16.dex.RecoveryErrorInfo\x12(\n\x14last_heartbeat_value\x18\t \x01(\x0b\x32\n.dex.Value\"Z\n\x15LocalActivityMetadata\x12!\n\x19\x63urrent_step_execution_id\x18\x01 \x01(\t\x12\x1e\n\x16\x66rom_step_execution_id\x18\x02 \x01(\t\"\xa8\x01\n\x0bRetryPolicy\x12 \n\x18initial_interval_seconds\x18\x01 \x01(\x05\x12\x1b\n\x13\x62\x61\x63koff_coefficient\x18\x02 \x01(\x02\x12 \n\x18maximum_interval_seconds\x18\x03 \x01(\x05\x12\x18\n\x10maximum_attempts\x18\x04 \x01(\x05\x12\x1e\n\x16total_duration_seconds\x18\x05 \x01(\x05\"\x8c\x01\n\x0f\x46lowRetryPolicy\x12 \n\x18initial_interval_seconds\x18\x01 \x01(\x05\x12\x1b\n\x13\x62\x61\x63koff_coefficient\x18\x02 \x01(\x02\x12 \n\x18maximum_interval_seconds\x18\x03 \x01(\x05\x12\x18\n\x10maximum_attempts\x18\x04 \x01(\x05\"\x98\x07\n\x0bStepOptions\x12 \n\x18wait_for_timeout_seconds\x18\x01 \x01(\x05\x12\x1f\n\x17\x65xecute_timeout_seconds\x18\x02 \x01(\x05\x12/\n\x15wait_for_retry_policy\x18\x03 \x01(\x0b\x32\x10.dex.RetryPolicy\x12.\n\x14\x65xecute_retry_policy\x18\x04 \x01(\x0b\x32\x10.dex.RetryPolicy\x12@\n\x17wait_for_failure_policy\x18\x05 \x01(\x0e\x32\x1f.dex.WaitForMethodFailurePolicy\x12?\n\x16\x65xecute_failure_policy\x18\x06 \x01(\x0e\x32\x1f.dex.ExecuteMethodFailurePolicy\x12)\n!execute_failure_proceed_step_type\x18\x07 \x01(\t\x12>\n$execute_failure_proceed_step_options\x18\x08 \x01(\x0b\x32\x10.dex.StepOptions\x12\x15\n\rskip_wait_for\x18\t \x01(\x08\x12\x39\n\x1cwait_for_durability_override\x18\n \x01(\x0e\x32\x13.dex.StepDurability\x12\x38\n\x1b\x65xecute_durability_override\x18\x0b \x01(\x0e\x32\x13.dex.StepDurability\x12$\n\x1cwait_for_lock_attribute_keys\x18\x0c \x03(\t\x12#\n\x1b\x65xecute_lock_attribute_keys\x18\r \x03(\t\x12!\n\x19heartbeat_timeout_seconds\x18\x0e \x01(\x05\x12-\n%wait_for_load_attribute_map_instances\x18\x0f \x03(\t\x12#\n\x1bwait_for_load_channel_names\x18\x10 \x03(\t\x12+\n#wait_for_load_channel_map_instances\x18\x11 \x03(\t\x12,\n$execute_load_attribute_map_instances\x18\x12 \x03(\t\x12\"\n\x1a\x65xecute_load_channel_names\x18\x13 \x03(\t\x12*\n\"execute_load_channel_map_instances\x18\x14 \x03(\t\"\xcf\x03\n\x19\x46lowTimeoutHandlerOptions\x12\x1e\n\x16method_timeout_seconds\x18\x01 \x01(\x05\x12!\n\x19heartbeat_timeout_seconds\x18\x02 \x01(\x05\x12&\n\x0cretry_policy\x18\x03 \x01(\x0b\x32\x10.dex.RetryPolicy\x12\x37\n\x0e\x66\x61ilure_policy\x18\x04 \x01(\x0e\x32\x1f.dex.ExecuteMethodFailurePolicy\x12!\n\x19\x66\x61ilure_proceed_step_type\x18\x05 \x01(\t\x12\x36\n\x1c\x66\x61ilure_proceed_step_options\x18\x06 \x01(\x0b\x32\x10.dex.StepOptions\x12\x30\n\x13\x64urability_override\x18\x07 \x01(\x0e\x32\x13.dex.StepDurability\x12\x1b\n\x13lock_attribute_keys\x18\x08 \x03(\t\x12$\n\x1cload_attribute_map_instances\x18\t \x03(\t\x12\x1a\n\x12load_channel_names\x18\n \x03(\t\x12\"\n\x1aload_channel_map_instances\x18\x0b \x03(\t\"A\n\x19\x46lowAlreadyStartedOptions\x12$\n\x1cignore_already_started_error\x18\x01 \x01(\x08\"\xec\x02\n\x10\x46lowStartOptions\x12+\n\x0fid_reuse_policy\x18\x01 \x01(\x0e\x32\x12.dex.IdReusePolicy\x12 \n\x18\x66low_start_delay_seconds\x18\x02 \x01(\x05\x12*\n\x0cretry_policy\x18\x03 \x01(\x0b\x32\x14.dex.FlowRetryPolicy\x12\'\n\nattributes\x18\x04 \x03(\x0b\x32\x13.dex.AttributeWrite\x12-\n\x14\x66low_config_override\x18\x05 \x01(\x0b\x32\x0f.dex.FlowConfig\x12\x44\n\x1c\x66low_already_started_options\x18\x06 \x01(\x0b\x32\x1e.dex.FlowAlreadyStartedOptions\x12?\n\x17timeout_handler_options\x18\x07 \x01(\x0b\x32\x1e.dex.FlowTimeoutHandlerOptions\"\xd0\x03\n\nFlowConfig\x12?\n\x17\x61\x63tive_step_search_mode\x18\x01 \x01(\x0e\x32\x19.dex.ActiveStepSearchModeH\x00\x88\x01\x01\x12&\n\x19\x63ontinue_as_new_threshold\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12/\n\"continue_as_new_page_size_in_bytes\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x31\n\x0fstep_durability\x18\x04 \x01(\x0e\x32\x13.dex.StepDurabilityH\x03\x88\x01\x01\x12(\n\rworker_target\x18\x05 \x01(\x0b\x32\x11.dex.WorkerTarget\x12<\n\x15\x61ttribute_store_names\x18\x06 \x01(\x0b\x32\x18.dex.AttributeStoreNamesH\x04\x88\x01\x01\x42\x1a\n\x18_active_step_search_modeB\x1c\n\x1a_continue_as_new_thresholdB%\n#_continue_as_new_page_size_in_bytesB\x12\n\x10_step_durabilityB\x18\n\x16_attribute_store_names\"$\n\x13\x41ttributeStoreNames\x12\r\n\x05names\x18\x01 \x03(\t\"<\n\x0cWorkerTarget\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x1b\n\x13is_headless_address\x18\x02 \x01(\x08\"\xb1\x02\n\x10StartFlowRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x11\n\tflow_type\x18\x02 \x01(\t\x12\x1c\n\x14\x66low_timeout_seconds\x18\x03 \x01(\x05\x12\x33\n\x13\x66low_timeout_policy\x18\x04 \x01(\x0e\x32\x16.dex.FlowTimeoutPolicy\x12\x17\n\x0fstart_step_type\x18\x05 \x01(\t\x12\x1e\n\nstep_input\x18\x08 \x01(\x0b\x32\n.dex.Value\x12&\n\x0cstep_options\x18\t \x01(\x0b\x32\x10.dex.StepOptions\x12\x31\n\x12\x66low_start_options\x18\n \x01(\x0b\x32\x15.dex.FlowStartOptions\x12\x12\n\nrequest_id\x18\x0b \x01(\t\"#\n\x11StartFlowResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"a\n\x17PublishToChannelRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12%\n\x08messages\x18\x03 \x03(\x0b\x32\x13.dex.ChannelMessage\"U\n\x0e\x43hannelMessage\x12\x14\n\x0c\x63hannel_name\x18\x01 \x01(\t\x12\x19\n\x05value\x18\x02 \x01(\x0b\x32\n.dex.Value\x12\x12\n\nmessage_id\x18\x03 \x01(\t\"R\n\x19GetChannelMessagesRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x14\n\x0c\x63hannel_name\x18\x03 \x01(\t\"C\n\x1aGetChannelMessagesResponse\x12%\n\x08messages\x18\x01 \x03(\x0b\x32\x13.dex.ChannelMessage\"|\n\x1b\x44\x65leteChannelMessageRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x14\n\x0c\x63hannel_name\x18\x03 \x01(\t\x12\x12\n\nmessage_id\x18\x04 \x01(\t\x12\x12\n\nrequest_id\x18\x05 \x01(\t\"B\n\x16\x43hannelMessageDeletion\x12\x14\n\x0c\x63hannel_name\x18\x01 \x01(\t\x12\x12\n\nmessage_id\x18\x02 \x01(\t\"\x97\x01\n\x12WriteStreamRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x11\n\tflow_type\x18\x02 \x01(\t\x12\x13\n\x0bstream_name\x18\x03 \x01(\t\x12\x1d\n\x15stream_capacity_bytes\x18\x04 \x01(\x03\x12\x19\n\x05value\x18\x05 \x01(\x0b\x32\n.dex.Value\x12\x0e\n\x06source\x18\x06 \x01(\t\"}\n\x11ReadStreamRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x11\n\tflow_type\x18\x02 \x01(\t\x12\x13\n\x0bstream_name\x18\x03 \x01(\t\x12\x14\n\x0cresume_token\x18\x04 \x01(\t\x12\x19\n\x11wait_time_seconds\x18\x05 \x01(\x05\"9\n\x12ReadStreamResponse\x12#\n\x07message\x18\x01 \x01(\x0b\x32\x12.dex.StreamMessage\"\x82\x01\n\x19ListStreamMessagesRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x11\n\tflow_type\x18\x02 \x01(\t\x12\x13\n\x0bstream_name\x18\x03 \x01(\t\x12\x11\n\tpage_size\x18\x04 \x01(\x05\x12\x19\n\x11\x62\x65\x66ore_page_token\x18\x05 \x01(\t\"[\n\x1aListStreamMessagesResponse\x12$\n\x08messages\x18\x01 \x03(\x0b\x32\x12.dex.StreamMessage\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"\x82\x01\n\rStreamMessage\x12\x19\n\x05value\x18\x01 \x01(\x0b\x32\n.dex.Value\x12\x14\n\x0cresume_token\x18\x02 \x01(\t\x12\x30\n\x0c\x63reated_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0e\n\x06source\x18\x04 \x01(\t\"d\n\x0fStopFlowRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x0e\n\x06reason\x18\x03 \x01(\t\x12 \n\tstop_type\x18\x04 \x01(\x0e\x32\r.dex.StopType\"W\n\x14GetAttributesRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x0c\n\x04keys\x18\x03 \x03(\t\x12\x10\n\x08\x61ll_keys\x18\x04 \x01(\x08\"4\n\x15GetAttributesResponse\x12\x1b\n\nattributes\x18\x01 \x03(\x0b\x32\x07.dex.KV\"t\n\x14SetAttributesRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\'\n\nattributes\x18\x03 \x03(\x0b\x32\x13.dex.AttributeWrite\x12\x12\n\nrequest_id\x18\x04 \x01(\t\".\n\x10LoadBlobsRequest\x12\x1a\n\x06values\x18\x01 \x03(\x0b\x32\n.dex.Value\"\x82\x01\n\x11LoadBlobsResponse\x12\x32\n\x06values\x18\x01 \x03(\x0b\x32\".dex.LoadBlobsResponse.ValuesEntry\x1a\x39\n\x0bValuesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x19\n\x05value\x18\x02 \x01(\x0b\x32\n.dex.Value:\x02\x38\x01\"g\n\x12WaitForFlowRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x15\n\rneeds_results\x18\x03 \x01(\x08\x12\x19\n\x11wait_time_seconds\x18\x04 \x01(\x05\"\x83\x01\n\x14StepCompletionOutput\x12\x1b\n\x13\x63ompleted_step_type\x18\x01 \x01(\t\x12#\n\x1b\x63ompleted_step_execution_id\x18\x02 \x01(\t\x12)\n\x15\x63ompleted_step_output\x18\x03 \x01(\x0b\x32\n.dex.Value\"\x9d\x01\n\nFlowResult\x12$\n\x0b\x66low_status\x18\x01 \x01(\x0e\x32\x0f.dex.FlowStatus\x12*\n\x07results\x18\x02 \x03(\x0b\x32\x19.dex.StepCompletionOutput\x12&\n\nerror_type\x18\x03 \x01(\x0e\x32\x12.dex.FlowErrorType\x12\x15\n\rerror_message\x18\x04 \x01(\t\"O\n\x12SearchFlowsRequest\x12\r\n\x05query\x18\x01 \x01(\t\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x17\n\x0fnext_page_token\x18\x03 \x01(\t\"`\n\x13SearchFlowsResponse\x12\x30\n\tflow_runs\x18\x01 \x03(\x0b\x32\x1d.dex.SearchFlowsResponseEntry\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"\xf9\x01\n\x18SearchFlowsResponseEntry\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12#\n\x12indexed_attributes\x18\x03 \x03(\x0b\x32\x07.dex.KV\x12\x11\n\tflow_type\x18\x04 \x01(\t\x12$\n\x0b\x66low_status\x18\x05 \x01(\x0e\x32\x0f.dex.FlowStatus\x12.\n\nstart_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nclose_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xb5\x01\n\x19SyncAttributeIndexRequest\x12O\n\x11\x61ttribute_indexes\x18\x01 \x03(\x0b\x32\x34.dex.SyncAttributeIndexRequest.AttributeIndexesEntry\x1aG\n\x15\x41ttributeIndexesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1d\n\x05value\x18\x02 \x01(\x0e\x32\x0e.dex.IndexType:\x02\x38\x01\"\x1c\n\x1aSyncAttributeIndexResponse\"2\n\x0f\x46lowExecutionID\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\"8\n\x15GetFlowSummaryRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\"\x8c\x02\n\x16GetFlowSummaryResponse\x12/\n\x11\x66low_execution_id\x18\x01 \x01(\x0b\x32\x14.dex.FlowExecutionID\x12\x14\n\x0c\x66irst_run_id\x18\x02 \x01(\t\x12\x12\n\nrequest_id\x18\x03 \x01(\t\x12\x11\n\tflow_type\x18\x04 \x01(\t\x12$\n\x0b\x66low_status\x18\x05 \x01(\x0e\x32\x0f.dex.FlowStatus\x12.\n\nstart_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nclose_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xd4\x01\n\x1eInternalAsyncStepInputSnapshot\x12.\n\x0emethod_options\x18\x01 \x01(\x0b\x32\x16.dex.StepMethodOptions\x12;\n\x10wait_for_request\x18\x02 \x01(\x0b\x32\x1f.dex.InvokeWaitForMethodRequestH\x00\x12:\n\x0f\x65xecute_request\x18\x03 \x01(\x0b\x32\x1f.dex.InvokeExecuteMethodRequestH\x00\x42\t\n\x07request\"s\n\x1aInternalLocalActivityInput\x12%\n\x1d\x63urrent_run_started_timestamp\x18\x01 \x01(\x03\x12.\n\x0emethod_options\x18\x02 \x01(\x0b\x32\x16.dex.StepMethodOptions\"\x90\x01\n\x17GetHistoryEventsRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x1f\n\x17start_internal_event_id\x18\x03 \x01(\x03\x12\x1a\n\x12\x65stimate_page_size\x18\x04 \x01(\x05\x12\x17\n\x0fnext_page_token\x18\x05 \x01(\x0c\"z\n\x18GetHistoryEventsResponse\x12%\n\x06\x65vents\x18\x01 \x03(\x0b\x32\x15.dex.FlowHistoryEvent\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\x0c\x12\x1e\n\x16next_internal_event_id\x18\x03 \x01(\x03\"\xe5\x06\n\x10\x46lowHistoryEvent\x12\x10\n\x08\x65vent_id\x18\x01 \x01(\x03\x12.\n\nevent_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12L\n\x19\x66low_started_or_continued\x18\x14 \x01(\x0b\x32\'.dex.FlowStartedOrContinuedHistoryEventH\x00\x12\x32\n\x0b\x66low_closed\x18\x15 \x01(\x0b\x32\x1b.dex.FlowClosedHistoryEventH\x00\x12\x41\n\x17step_wait_for_completed\x18\x16 \x01(\x0b\x32\x1e.dex.StepWaitForCompletedEventH\x00\x12;\n\x14step_wait_for_failed\x18\x17 \x01(\x0b\x32\x1b.dex.StepWaitForFailedEventH\x00\x12@\n\x16step_execute_completed\x18\x18 \x01(\x0b\x32\x1e.dex.StepExecuteCompletedEventH\x00\x12:\n\x13step_execute_failed\x18\x19 \x01(\x0b\x32\x1b.dex.StepExecuteFailedEventH\x00\x12\x42\n\x17rpc_execution_completed\x18\x1a \x01(\x0b\x32\x1f.dex.RpcExecutionCompletedEventH\x00\x12\x44\n\x18\x63hannel_external_publish\x18\x1b \x01(\x0b\x32 .dex.ChannelExternalPublishEventH\x00\x12<\n\x15step_wait_for_pending\x18\x1c \x01(\x0b\x32\x1b.dex.StepMethodPendingEventH\x00\x12;\n\x14step_execute_pending\x18\x1d \x01(\x0b\x32\x1b.dex.StepMethodPendingEventH\x00\x12;\n\x10time_travel_fork\x18\x1e \x01(\x0b\x32\x1f.dex.TimeTravelForkHistoryEventH\x00\x12\x42\n\x17\x63hannel_external_delete\x18\x1f \x01(\x0b\x32\x1f.dex.ChannelExternalDeleteEventH\x00\x42\t\n\x07payload\"5\n\x1aTimeTravelForkHistoryEvent\x12\x17\n\x0fprevious_run_id\x18\x01 \x01(\t\"\xae\x03\n\"FlowStartedOrContinuedHistoryEvent\x12/\n\x11\x66low_execution_id\x18\x01 \x01(\x0b\x32\x14.dex.FlowExecutionID\x12\x11\n\tflow_type\x18\x02 \x01(\t\x12$\n\x0b\x66low_config\x18\x03 \x01(\x0b\x32\x0f.dex.FlowConfig\x12/\n\x0c\x66low_timeout\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x33\n\x13\x66low_timeout_policy\x18\x05 \x01(\x0e\x32\x16.dex.FlowTimeoutPolicy\x12?\n\x17timeout_handler_options\x18\x06 \x01(\x0b\x32\x1e.dex.FlowTimeoutHandlerOptions\x12.\n\rinitial_start\x18\n \x01(\x0b\x32\x15.dex.FlowInitialStartH\x00\x12\x32\n\x0f\x63ontinued_start\x18\x0b \x01(\x0b\x32\x17.dex.FlowContinuedStartH\x00\x42\x13\n\x11start_or_continue\"\x98\x01\n\x10\x46lowInitialStart\x12\x17\n\x0fstart_step_type\x18\x01 \x01(\t\x12\x1e\n\nstep_input\x18\x02 \x01(\x0b\x32\n.dex.Value\x12&\n\x0cstep_options\x18\x03 \x01(\x0b\x32\x10.dex.StepOptions\x12#\n\x12initial_attributes\x18\x04 \x03(\x0b\x32\x07.dex.KV\"\x8a\x03\n\x12\x46lowContinuedStart\x12\x17\n\x0fprevious_run_id\x18\x01 \x01(\t\x12)\n\x0esteps_to_start\x18\x02 \x03(\x0b\x32\x11.dex.StepMovement\x12\x35\n\x0fsteps_to_resume\x18\x03 \x03(\x0b\x32\x1c.dex.StepExecutionResumeInfo\x12U\n\x18pending_channel_messages\x18\x04 \x03(\x0b\x32\x33.dex.FlowContinuedStart.PendingChannelMessagesEntry\x12\x1b\n\nattributes\x18\x05 \x03(\x0b\x32\x07.dex.KV\x12\x32\n\x0f\x63ompleted_steps\x18\x06 \x03(\x0b\x32\x19.dex.StepCompletionOutput\x1aQ\n\x1bPendingChannelMessagesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.dex.ChannelValues:\x02\x38\x01\"\xc6\x01\n\x16\x46lowClosedHistoryEvent\x12$\n\x0b\x66low_status\x18\x01 \x01(\x0e\x32\x0f.dex.FlowStatus\x12*\n\x07results\x18\x02 \x03(\x0b\x32\x19.dex.StepCompletionOutput\x12&\n\nerror_type\x18\x03 \x01(\x0e\x32\x12.dex.FlowErrorType\x12\x15\n\rerror_message\x18\x04 \x01(\t\x12\x1b\n\x13\x63ontinued_to_run_id\x18\x05 \x01(\t\"\x9c\x01\n\x16StepMethodPendingEvent\x12(\n\x05input\x18\x01 \x01(\x0b\x32\x19.dex.StepMethodEventInput\x12,\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x1b.dex.StepMethodEventContext\x12*\n\x05phase\x18\x03 \x01(\x0e\x32\x1b.dex.PendingStepMethodPhase\"g\n\x11StepMethodFailure\x12\x15\n\rbackend_error\x18\x01 \x01(\t\x12*\n\x07\x64\x65tails\x18\x02 \x01(\x0b\x32\x19.dex.ServiceErrorResponse\x12\x0f\n\x07\x61ttempt\x18\x03 \x01(\x05\"w\n\x11StepMethodOptions\x12\x17\n\x0ftimeout_seconds\x18\x01 \x01(\x05\x12&\n\x0cretry_policy\x18\x02 \x01(\x0b\x32\x10.dex.RetryPolicy\x12!\n\x19heartbeat_timeout_seconds\x18\x03 \x01(\x05\"\xc2\x01\n\x14StepMethodEventInput\x12\x13\n\x0bunavailable\x18\x01 \x01(\x08\x12\x1e\n\nstep_input\x18\x02 \x01(\x0b\x32\n.dex.Value\x12\x30\n\x11\x63ondition_results\x18\x03 \x01(\x0b\x32\x15.dex.ConditionResults\x12\x1b\n\nattributes\x18\x04 \x03(\x0b\x32\x07.dex.KV\x12&\n\x15step_execution_locals\x18\x05 \x03(\x0b\x32\x07.dex.KV\"\xe8\x02\n\x16StepMethodEventContext\x12\x19\n\x11step_execution_id\x18\x01 \x01(\t\x12\x1e\n\x16\x66rom_step_execution_id\x18\x02 \x01(\t\x12\x11\n\tstep_type\x18\x03 \x01(\t\x12\'\n\ndurability\x18\x04 \x01(\x0e\x32\x13.dex.StepDurability\x12\x15\n\rfinal_attempt\x18\x05 \x01(\x05\x12\x30\n\x0cstarted_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12+\n\x08\x64uration\x18\x07 \x01(\x0b\x32\x19.google.protobuf.Duration\x12.\n\x0emethod_options\x18\x08 \x01(\x0b\x32\x16.dex.StepMethodOptions\x12\x31\n\x11last_failure_info\x18\t \x01(\x0b\x32\x16.dex.StepMethodFailure\"\xb9\x02\n\x1aStepWaitForCompletedOutput\x12\x31\n\x12wait_for_condition\x18\x01 \x01(\x0b\x32\x15.dex.WaitingCondition\x12.\n\x11upsert_attributes\x18\x02 \x03(\x0b\x32\x13.dex.AttributeWrite\x12/\n\x12publish_to_channel\x18\x03 \x03(\x0b\x32\x13.dex.ChannelMessage\x12\x1e\n\rrecord_events\x18\x04 \x03(\x0b\x32\x07.dex.KV\x12-\n\x1cupsert_step_execution_locals\x18\x05 \x03(\x0b\x32\x07.dex.KV\x12\x38\n\x13\x64\x65lete_from_channel\x18\x06 \x03(\x0b\x32\x1b.dex.ChannelMessageDeletion\"\xb0\x02\n\x1aStepExecuteCompletedOutput\x12(\n\rstep_decision\x18\x01 \x01(\x0b\x32\x11.dex.StepDecision\x12.\n\x11upsert_attributes\x18\x02 \x03(\x0b\x32\x13.dex.AttributeWrite\x12/\n\x12publish_to_channel\x18\x03 \x03(\x0b\x32\x13.dex.ChannelMessage\x12\x1e\n\rrecord_events\x18\x04 \x03(\x0b\x32\x07.dex.KV\x12-\n\x1cupsert_step_execution_locals\x18\x05 \x03(\x0b\x32\x07.dex.KV\x12\x38\n\x13\x64\x65lete_from_channel\x18\x06 \x03(\x0b\x32\x1b.dex.ChannelMessageDeletion\"A\n\x16StepMethodFailedOutput\x12\'\n\x07\x66\x61ilure\x18\x01 \x01(\x0b\x32\x16.dex.StepMethodFailure\"\xa4\x01\n\x19StepWaitForCompletedEvent\x12(\n\x05input\x18\x01 \x01(\x0b\x32\x19.dex.StepMethodEventInput\x12/\n\x06output\x18\x02 \x01(\x0b\x32\x1f.dex.StepWaitForCompletedOutput\x12,\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x1b.dex.StepMethodEventContext\"\x9d\x01\n\x16StepWaitForFailedEvent\x12(\n\x05input\x18\x01 \x01(\x0b\x32\x19.dex.StepMethodEventInput\x12+\n\x06output\x18\x02 \x01(\x0b\x32\x1b.dex.StepMethodFailedOutput\x12,\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x1b.dex.StepMethodEventContext\"\xa4\x01\n\x19StepExecuteCompletedEvent\x12(\n\x05input\x18\x01 \x01(\x0b\x32\x19.dex.StepMethodEventInput\x12/\n\x06output\x18\x02 \x01(\x0b\x32\x1f.dex.StepExecuteCompletedOutput\x12,\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x1b.dex.StepMethodEventContext\"\x9d\x01\n\x16StepExecuteFailedEvent\x12(\n\x05input\x18\x01 \x01(\x0b\x32\x19.dex.StepMethodEventInput\x12+\n\x06output\x18\x02 \x01(\x0b\x32\x1b.dex.StepMethodFailedOutput\x12,\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x1b.dex.StepMethodEventContext\"\xe8\x02\n\x1aRpcExecutionCompletedEvent\x12\x10\n\x08rpc_name\x18\x01 \x01(\t\x12\x19\n\x05input\x18\x02 \x01(\x0b\x32\n.dex.Value\x12\x1a\n\x06output\x18\x03 \x01(\x0b\x32\n.dex.Value\x12(\n\rstep_decision\x18\x04 \x01(\x0b\x32\x11.dex.StepDecision\x12.\n\x11upsert_attributes\x18\x05 \x03(\x0b\x32\x13.dex.AttributeWrite\x12\x1e\n\rrecord_events\x18\x06 \x03(\x0b\x32\x07.dex.KV\x12/\n\x12publish_to_channel\x18\x07 \x03(\x0b\x32\x13.dex.ChannelMessage\x12\x1c\n\x14is_set_attribute_api\x18\x08 \x01(\x08\x12\x38\n\x13\x64\x65lete_from_channel\x18\t \x03(\x0b\x32\x1b.dex.ChannelMessageDeletion\"D\n\x1b\x43hannelExternalPublishEvent\x12%\n\x08messages\x18\x01 \x03(\x0b\x32\x13.dex.ChannelMessage\"K\n\x1a\x43hannelExternalDeleteEvent\x12-\n\x08messages\x18\x01 \x03(\x0b\x32\x1b.dex.ChannelMessageDeletion\"]\n\x1aWaitForHistoryEventRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x1e\n\x16next_internal_event_id\x18\x03 \x01(\x03\"\x81\x01\n\x1bWaitForHistoryEventResponse\x12\x17\n\x0f\x65vent_available\x18\x01 \x01(\x08\x12#\n\x1b\x61vailable_internal_event_id\x18\x02 \x01(\x03\x12$\n\x0b\x66low_status\x18\x03 \x01(\x0e\x32\x0f.dex.FlowStatus\"\xa9\x03\n\x18\x41\x63tiveStepExecutionState\x12\x19\n\x11step_execution_id\x18\x01 \x01(\t\x12\x1e\n\x16\x66rom_step_execution_id\x18\x02 \x01(\t\x12\x11\n\tstep_type\x18\x03 \x01(\t\x12#\n\x05phase\x18\x04 \x01(\x0e\x32\x14.dex.ActiveStepPhase\x12#\n\x08movement\x18\x05 \x01(\x0b\x32\x11.dex.StepMovement\x12\x35\n\x11waiting_condition\x18\x06 \x01(\x0b\x32\x1a.dex.WaitingConditionState\x12\x43\n\x14\x63ompleted_conditions\x18\x07 \x01(\x0b\x32%.dex.StepExecutionCompletedConditions\x12&\n\x15step_execution_locals\x18\x08 \x03(\x0b\x32\x07.dex.KV\x12\x1e\n\x06timers\x18\t \x03(\x0b\x32\x0e.dex.TimerInfo\x12\x31\n\x11last_failure_info\x18\n \x01(\x0b\x32\x16.dex.StepMethodFailure\"6\n\x13GetFlowStateRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\"\xa1\x03\n\x14GetFlowStateResponse\x12$\n\x0b\x66low_config\x18\x01 \x01(\x0b\x32\x0f.dex.FlowConfig\x12\x1b\n\nattributes\x18\x02 \x03(\x0b\x32\x07.dex.KV\x12=\n\x16\x61\x63tive_step_executions\x18\x03 \x03(\x0b\x32\x1d.dex.ActiveStepExecutionState\x12\'\n\x0cqueued_steps\x18\x04 \x03(\x0b\x32\x11.dex.StepMovement\x12W\n\x18pending_channel_messages\x18\x05 \x03(\x0b\x32\x35.dex.GetFlowStateResponse.PendingChannelMessagesEntry\x12\x32\n\x0f\x63ompleted_steps\x18\x06 \x03(\x0b\x32\x19.dex.StepCompletionOutput\x1aQ\n\x1bPendingChannelMessagesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.dex.ChannelValues:\x02\x38\x01\"\x81\x02\n\x10ResetFlowRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12&\n\nreset_type\x18\x03 \x01(\x0e\x32\x12.dex.FlowResetType\x12\x0e\n\x06reason\x18\x04 \x01(\t\x12\x1a\n\x12history_event_time\x18\x05 \x01(\t\x12\x11\n\tstep_type\x18\x06 \x01(\t\x12\x19\n\x11step_execution_id\x18\x07 \x01(\t\x12\x1b\n\x13skip_writes_reapply\x18\x08 \x01(\x08\x12-\n\x0bstep_method\x18\t \x01(\x0e\x32\x18.dex.FlowResetStepMethod\"#\n\x11ResetFlowResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"\xaa\x02\n\x10InvokeRPCRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x10\n\x08rpc_name\x18\x03 \x01(\t\x12\x19\n\x05input\x18\x04 \x01(\x0b\x32\n.dex.Value\x12\x17\n\x0ftimeout_seconds\x18\x05 \x01(\x05\x12\x1b\n\x13lock_attribute_keys\x18\x06 \x03(\t\x12\x12\n\nrequest_id\x18\x07 \x01(\t\x12\x18\n\x10is_transactional\x18\x08 \x01(\x08\x12$\n\x1cload_attribute_map_instances\x18\t \x03(\t\x12\x1a\n\x12load_channel_names\x18\n \x03(\t\x12\"\n\x1aload_channel_map_instances\x18\x0b \x03(\t\"/\n\x11InvokeRPCResponse\x12\x1a\n\x06output\x18\x01 \x01(\x0b\x32\n.dex.Value\"\xa8\x01\n\x10SkipTimerRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x19\n\x11step_execution_id\x18\x03 \x01(\t\x12\x1a\n\x12timer_condition_id\x18\x04 \x01(\t\x12\"\n\x15timer_condition_index\x18\x05 \x01(\x05H\x00\x88\x01\x01\x42\x18\n\x16_timer_condition_index\"`\n\x17UpdateFlowConfigRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12$\n\x0b\x66low_config\x18\x03 \x01(\x0b\x32\x0f.dex.FlowConfig\"\x90\x01\n\x1cWaitForStepCompletionRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x11\n\tstep_type\x18\x02 \x01(\t\x12\x1d\n\x15step_execution_number\x18\x03 \x01(\t\x12\x19\n\x11wait_time_seconds\x18\x05 \x01(\x05\x12\x12\n\nrequest_id\x18\x06 \x01(\t\"\x1f\n\x1dWaitForStepCompletionResponse\"}\n\x17WaitForAttributeRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\"\n\x05match\x18\x02 \x01(\x0b\x32\x13.dex.AttributeMatch\x12\x19\n\x11wait_time_seconds\x18\x03 \x01(\x05\x12\x12\n\nrequest_id\x18\x04 \x01(\t\"=\n\x18WaitForAttributeResponse\x12!\n\rmatched_value\x18\x01 \x01(\x0b\x32\n.dex.Value\"i\n\x0e\x41ttributeMatch\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x08operator\x18\x02 \x01(\x0e\x32\x1b.dex.AttributeMatchOperator\x12\x1b\n\x07operand\x18\x03 \x01(\x0b\x32\n.dex.Value\">\n\x1bTriggerContinueAsNewRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\"C\n\nHealthInfo\x12\x11\n\tcondition\x18\x01 \x01(\t\x12\x10\n\x08hostname\x18\x02 \x01(\t\x12\x10\n\x08\x64uration\x18\x03 \x01(\x05\"\xea\x01\n\x14ServiceErrorResponse\x12\x0e\n\x06\x64\x65tail\x18\x01 \x01(\t\x12\'\n\nsub_status\x18\x02 \x01(\x0e\x32\x13.dex.ErrorSubStatus\x12$\n\x1coriginal_worker_error_detail\x18\x03 \x01(\t\x12\"\n\x1aoriginal_worker_error_type\x18\x04 \x01(\t\x12$\n\x1coriginal_worker_error_status\x18\x05 \x01(\x05\x12)\n!original_worker_error_stack_trace\x18\x06 \x01(\t\"k\n\x13WorkerErrorResponse\x12\x0e\n\x06\x64\x65tail\x18\x01 \x01(\t\x12\x12\n\nerror_type\x18\x02 \x01(\t\x12\x13\n\x0bstack_trace\x18\x03 \x01(\t\x12\x1b\n\x13retry_after_seconds\x18\x04 \x01(\x05\"z\n\x15InternalActivityError\x12\x15\n\rserver_detail\x18\x01 \x01(\t\x12\x1a\n\x12worker_grpc_status\x18\x02 \x01(\x05\x12.\n\x0cworker_error\x18\x03 \x01(\x0b\x32\x18.dex.InternalWorkerError\"N\n\x13InternalWorkerError\x12\x0e\n\x06\x64\x65tail\x18\x01 \x01(\t\x12\x12\n\nerror_type\x18\x02 \x01(\t\x12\x13\n\x0bstack_trace\x18\x03 \x01(\t\"m\n\x11InternalFlowError\x12\x17\n\rserver_detail\x18\x01 \x01(\tH\x00\x12\x34\n\x0e\x61\x63tivity_error\x18\x02 \x01(\x0b\x32\x1a.dex.InternalActivityErrorH\x00\x42\t\n\x07\x66\x61ilure\"\x1b\n\x0b\x43hannelInfo\x12\x0c\n\x04size\x18\x01 \x01(\x05\"\xca\x04\n\x1aInvokeWaitForMethodRequest\x12\x1d\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x0c.dex.Context\x12\x11\n\tflow_type\x18\x02 \x01(\t\x12\x11\n\tstep_type\x18\x03 \x01(\t\x12\x1e\n\nstep_input\x18\x04 \x01(\x0b\x32\n.dex.Value\x12\x1b\n\nattributes\x18\x05 \x03(\x0b\x32\x07.dex.KV\x12H\n\rchannel_infos\x18\x06 \x03(\x0b\x32\x31.dex.InvokeWaitForMethodRequest.ChannelInfosEntry\x12[\n\x17loaded_channel_messages\x18\x07 \x03(\x0b\x32:.dex.InvokeWaitForMethodRequest.LoadedChannelMessagesEntry\x12&\n\x1eloaded_attribute_map_instances\x18\x08 \x03(\t\x12\x1c\n\x14loaded_channel_names\x18\t \x03(\t\x12$\n\x1cloaded_channel_map_instances\x18\n \x03(\t\x1a\x45\n\x11\x43hannelInfosEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1f\n\x05value\x18\x02 \x01(\x0b\x32\x10.dex.ChannelInfo:\x02\x38\x01\x1aP\n\x1aLoadedChannelMessagesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.dex.ChannelValues:\x02\x38\x01\"\xf0\x02\n\x1bInvokeWaitForMethodResponse\x12;\n\x17local_activity_metadata\x18\x01 \x01(\x0b\x32\x1a.dex.LocalActivityMetadata\x12.\n\x11upsert_attributes\x18\x02 \x03(\x0b\x32\x13.dex.AttributeWrite\x12\x30\n\x11waiting_condition\x18\x03 \x01(\x0b\x32\x15.dex.WaitingCondition\x12\'\n\x16upsert_step_exe_locals\x18\x04 \x03(\x0b\x32\x07.dex.KV\x12\x1e\n\rrecord_events\x18\x05 \x03(\x0b\x32\x07.dex.KV\x12/\n\x12publish_to_channel\x18\x06 \x03(\x0b\x32\x13.dex.ChannelMessage\x12\x38\n\x13\x64\x65lete_from_channel\x18\x07 \x03(\x0b\x32\x1b.dex.ChannelMessageDeletion\"0\n\x13StepMethodHeartbeat\x12\x19\n\x05value\x18\x01 \x01(\x0b\x32\n.dex.Value\"`\n\x0fStepStreamWrite\x12\x13\n\x0bstream_name\x18\x01 \x01(\t\x12\x1d\n\x15stream_capacity_bytes\x18\x02 \x01(\x03\x12\x19\n\x05value\x18\x03 \x01(\x0b\x32\n.dex.Value\"\xb6\x01\n\x19InvokeWaitForMethodOutput\x12-\n\theartbeat\x18\x01 \x01(\x0b\x32\x18.dex.StepMethodHeartbeatH\x00\x12,\n\x0cstream_write\x18\x02 \x01(\x0b\x32\x14.dex.StepStreamWriteH\x00\x12\x32\n\x06result\x18\x03 \x01(\x0b\x32 .dex.InvokeWaitForMethodResponseH\x00\x42\x08\n\x06output\"\x9e\x05\n\x1aInvokeExecuteMethodRequest\x12\x1d\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x0c.dex.Context\x12\x11\n\tflow_type\x18\x02 \x01(\t\x12\x11\n\tstep_type\x18\x03 \x01(\t\x12\x1e\n\nstep_input\x18\x04 \x01(\x0b\x32\n.dex.Value\x12\x1b\n\nattributes\x18\x05 \x03(\x0b\x32\x07.dex.KV\x12 \n\x0fstep_exe_locals\x18\x06 \x03(\x0b\x32\x07.dex.KV\x12\x30\n\x11\x63ondition_results\x18\x07 \x01(\x0b\x32\x15.dex.ConditionResults\x12H\n\rchannel_infos\x18\x08 \x03(\x0b\x32\x31.dex.InvokeExecuteMethodRequest.ChannelInfosEntry\x12[\n\x17loaded_channel_messages\x18\t \x03(\x0b\x32:.dex.InvokeExecuteMethodRequest.LoadedChannelMessagesEntry\x12&\n\x1eloaded_attribute_map_instances\x18\n \x03(\t\x12\x1c\n\x14loaded_channel_names\x18\x0b \x03(\t\x12$\n\x1cloaded_channel_map_instances\x18\x0c \x03(\t\x1a\x45\n\x11\x43hannelInfosEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1f\n\x05value\x18\x02 \x01(\x0b\x32\x10.dex.ChannelInfo:\x02\x38\x01\x1aP\n\x1aLoadedChannelMessagesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.dex.ChannelValues:\x02\x38\x01\"\xe8\x02\n\x1bInvokeExecuteMethodResponse\x12;\n\x17local_activity_metadata\x18\x01 \x01(\x0b\x32\x1a.dex.LocalActivityMetadata\x12(\n\rstep_decision\x18\x02 \x01(\x0b\x32\x11.dex.StepDecision\x12.\n\x11upsert_attributes\x18\x03 \x03(\x0b\x32\x13.dex.AttributeWrite\x12\x1e\n\rrecord_events\x18\x04 \x03(\x0b\x32\x07.dex.KV\x12\'\n\x16upsert_step_exe_locals\x18\x05 \x03(\x0b\x32\x07.dex.KV\x12/\n\x12publish_to_channel\x18\x06 \x03(\x0b\x32\x13.dex.ChannelMessage\x12\x38\n\x13\x64\x65lete_from_channel\x18\x07 \x03(\x0b\x32\x1b.dex.ChannelMessageDeletion\"\xb6\x01\n\x19InvokeExecuteMethodOutput\x12-\n\theartbeat\x18\x01 \x01(\x0b\x32\x18.dex.StepMethodHeartbeatH\x00\x12,\n\x0cstream_write\x18\x02 \x01(\x0b\x32\x14.dex.StepStreamWriteH\x00\x12\x32\n\x06result\x18\x03 \x01(\x0b\x32 .dex.InvokeExecuteMethodResponseH\x00\x42\x08\n\x06output\"\xb8\x04\n\x16InvokeWorkerRPCRequest\x12\x1d\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x0c.dex.Context\x12\x11\n\tflow_type\x18\x02 \x01(\t\x12\x10\n\x08rpc_name\x18\x03 \x01(\t\x12\x19\n\x05input\x18\x04 \x01(\x0b\x32\n.dex.Value\x12\x1b\n\nattributes\x18\x05 \x03(\x0b\x32\x07.dex.KV\x12\x44\n\rchannel_infos\x18\x06 \x03(\x0b\x32-.dex.InvokeWorkerRPCRequest.ChannelInfosEntry\x12W\n\x17loaded_channel_messages\x18\x07 \x03(\x0b\x32\x36.dex.InvokeWorkerRPCRequest.LoadedChannelMessagesEntry\x12&\n\x1eloaded_attribute_map_instances\x18\x08 \x03(\t\x12\x1c\n\x14loaded_channel_names\x18\t \x03(\t\x12$\n\x1cloaded_channel_map_instances\x18\n \x03(\t\x1a\x45\n\x11\x43hannelInfosEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1f\n\x05value\x18\x02 \x01(\x0b\x32\x10.dex.ChannelInfo:\x02\x38\x01\x1aP\n\x1aLoadedChannelMessagesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.dex.ChannelValues:\x02\x38\x01\"\x9a\x02\n\x17InvokeWorkerRPCResponse\x12\x1a\n\x06output\x18\x01 \x01(\x0b\x32\n.dex.Value\x12(\n\rstep_decision\x18\x02 \x01(\x0b\x32\x11.dex.StepDecision\x12.\n\x11upsert_attributes\x18\x03 \x03(\x0b\x32\x13.dex.AttributeWrite\x12\x1e\n\rrecord_events\x18\x04 \x03(\x0b\x32\x07.dex.KV\x12\x38\n\x13\x64\x65lete_from_channel\x18\x05 \x03(\x0b\x32\x1b.dex.ChannelMessageDeletion\x12/\n\x12publish_to_channel\x18\x06 \x03(\x0b\x32\x13.dex.ChannelMessage\"\x9f\x01\n\x0cStepDecision\x12%\n\nnext_steps\x18\x01 \x03(\x0b\x32\x11.dex.StepMovement\x12*\n\x0e\x63lose_decision\x18\x02 \x01(\x0b\x32\x12.dex.CloseDecision\x12\x19\n\x11\x63\x61ncel_step_types\x18\x03 \x03(\t\x12!\n\x19\x63\x61ncel_sibling_step_types\x18\x04 \x03(\t\"\x88\x01\n\rCloseDecision\x12\x33\n\x13\x63lose_decision_type\x18\x01 \x01(\x0e\x32\x16.dex.CloseDecisionType\x12!\n\x19\x63onditional_channel_names\x18\x02 \x03(\t\x12\x1f\n\x0b\x63lose_input\x18\x03 \x01(\x0b\x32\n.dex.Value\"\xd5\x01\n\x0cStepMovement\x12\x11\n\tstep_type\x18\x01 \x01(\t\x12\x1e\n\nstep_input\x18\x02 \x01(\x0b\x32\n.dex.Value\x12&\n\x0cstep_options\x18\x03 \x01(\x0b\x32\x10.dex.StepOptions\x12,\n$from_step_execution_id_internal_only\x18\x04 \x01(\t\x12<\n\x1crecovery_error_internal_only\x18\x05 \x01(\x0b\x32\x16.dex.RecoveryErrorInfo\"-\n\x14\x43onditionCombination\x12\x15\n\rcondition_ids\x18\x01 \x03(\t\"\x9e\x02\n\x10WaitingCondition\x12\x39\n\x16waiting_condition_type\x18\x01 \x01(\x0e\x32\x19.dex.WaitingConditionType\x12-\n\x10timer_conditions\x18\x02 \x03(\x0b\x32\x13.dex.TimerCondition\x12\x31\n\x12\x63hannel_conditions\x18\x03 \x03(\x0b\x32\x15.dex.ChannelCondition\x12\x39\n\x16\x63ondition_combinations\x18\x04 \x03(\x0b\x32\x19.dex.ConditionCombination\x12\x32\n\x13sub_flow_conditions\x18\x05 \x03(\x0b\x32\x15.dex.SubFlowCondition\"\xa8\x02\n\x15WaitingConditionState\x12\x39\n\x16waiting_condition_type\x18\x01 \x01(\x0e\x32\x19.dex.WaitingConditionType\x12-\n\x10timer_conditions\x18\x02 \x03(\x0b\x32\x13.dex.TimerCondition\x12\x31\n\x12\x63hannel_conditions\x18\x03 \x03(\x0b\x32\x15.dex.ChannelCondition\x12\x39\n\x16\x63ondition_combinations\x18\x04 \x03(\x0b\x32\x19.dex.ConditionCombination\x12\x37\n\x13sub_flow_conditions\x18\x05 \x03(\x0b\x32\x1a.dex.SubFlowConditionState\"\xf9\x02\n\x0eSubFlowOptions\x12-\n\x0creuse_policy\x18\x01 \x01(\x0e\x32\x17.dex.SubFlowReusePolicy\x12\x1c\n\x14\x66low_timeout_seconds\x18\x02 \x01(\x05\x12 \n\x18\x66low_start_delay_seconds\x18\x03 \x01(\x05\x12*\n\x0cretry_policy\x18\x04 \x01(\x0b\x32\x14.dex.FlowRetryPolicy\x12\'\n\nattributes\x18\x05 \x03(\x0b\x32\x13.dex.AttributeWrite\x12-\n\x14\x66low_config_override\x18\x06 \x01(\x0b\x32\x0f.dex.FlowConfig\x12\x33\n\x13\x66low_timeout_policy\x18\x07 \x01(\x0e\x32\x16.dex.FlowTimeoutPolicy\x12?\n\x17timeout_handler_options\x18\x08 \x01(\x0b\x32\x1e.dex.FlowTimeoutHandlerOptions\"\xde\x01\n\x10SubFlowCondition\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\x12\x15\n\rsub_flow_type\x18\x02 \x01(\t\x12\x17\n\x0fstart_step_type\x18\x03 \x01(\t\x12\x1e\n\nstep_input\x18\x04 \x01(\x0b\x32\n.dex.Value\x12&\n\x0cstep_options\x18\x05 \x01(\x0b\x32\x10.dex.StepOptions\x12$\n\x07options\x18\x06 \x01(\x0b\x32\x13.dex.SubFlowOptions\x12\x16\n\x0esub_flow_index\x18\x07 \x01(\x05\"-\n\x15SubFlowConditionState\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\"g\n\x0eTimerCondition\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\x12\x18\n\x10\x64uration_seconds\x18\x02 \x01(\x03\x12%\n\x1d\x66iring_unix_timestamp_seconds\x18\x03 \x01(\x03\"\x84\x01\n\x10\x43hannelCondition\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\x12\x14\n\x0c\x63hannel_name\x18\x02 \x01(\t\x12\x15\n\x08\x61t_least\x18\x03 \x01(\x05H\x00\x88\x01\x01\x12\x14\n\x07\x61t_most\x18\x04 \x01(\x05H\x01\x88\x01\x01\x42\x0b\n\t_at_leastB\n\n\x08_at_most\"\xac\x01\n\x10\x43onditionResults\x12+\n\x0f\x63hannel_results\x18\x01 \x03(\x0b\x32\x12.dex.ChannelResult\x12\'\n\rtimer_results\x18\x02 \x03(\x0b\x32\x10.dex.TimerResult\x12\x17\n\x0fwait_for_failed\x18\x03 \x01(\x08\x12)\n\x10sub_flow_results\x18\x04 \x03(\x0b\x32\x0f.dex.FlowResult\"S\n\x0bTimerResult\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\x12.\n\x10\x63ondition_status\x18\x02 \x01(\x0e\x32\x14.dex.ConditionStatus\"\x87\x01\n\rChannelResult\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\x12.\n\x10\x63ondition_status\x18\x02 \x01(\x0e\x32\x14.dex.ConditionStatus\x12\x14\n\x0c\x63hannel_name\x18\x03 \x01(\t\x12\x1a\n\x06values\x18\x04 \x03(\x0b\x32\n.dex.Value\"i\n\x18\x43ontinueAsNewDumpRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x10\n\x08page_num\x18\x03 \x01(\x05\x12\x1a\n\x12page_size_in_bytes\x18\x04 \x01(\x05\"j\n\x19\x43ontinueAsNewDumpResponse\x12\x14\n\x0cpage_content\x18\x01 \x01(\x0c\x12\x10\n\x08page_num\x18\x02 \x01(\x05\x12\x13\n\x0btotal_pages\x18\x03 \x01(\x05\x12\x10\n\x08\x63hecksum\x18\x04 \x01(\t\"6\n\rChannelValues\x12%\n\x08messages\x18\x01 \x03(\x0b\x32\x13.dex.ChannelMessage\"\x9f\x03\n StepExecutionCompletedConditions\x12g\n\x1a\x63ompleted_timer_conditions\x18\x01 \x03(\x0b\x32\x43.dex.StepExecutionCompletedConditions.CompletedTimerConditionsEntry\x12\x66\n\x1a\x63ompleted_sub_flow_results\x18\x02 \x03(\x0b\x32\x42.dex.StepExecutionCompletedConditions.CompletedSubFlowResultsEntry\x1aY\n\x1d\x43ompletedTimerConditionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\'\n\x05value\x18\x02 \x01(\x0e\x32\x18.dex.InternalTimerStatus:\x02\x38\x01\x1aO\n\x1c\x43ompletedSubFlowResultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\x1e\n\x05value\x18\x02 \x01(\x0b\x32\x0f.dex.FlowResult:\x02\x38\x01\"\xf3\x01\n\x17StepExecutionResumeInfo\x12\x19\n\x11step_execution_id\x18\x01 \x01(\t\x12\x1f\n\x04step\x18\x02 \x01(\x0b\x32\x11.dex.StepMovement\x12\x43\n\x14\x63ompleted_conditions\x18\x03 \x01(\x0b\x32%.dex.StepExecutionCompletedConditions\x12\x35\n\x11waiting_condition\x18\x04 \x01(\x0b\x32\x1a.dex.WaitingConditionState\x12 \n\x0fstep_exe_locals\x18\x05 \x03(\x0b\x32\x07.dex.KV\"\xce\x04\n\x18StepExecutionCounterInfo\x12X\n\x17step_type_started_count\x18\x01 \x03(\x0b\x32\x37.dex.StepExecutionCounterInfo.StepTypeStartedCountEntry\x12o\n#step_type_currently_executing_count\x18\x02 \x03(\x0b\x32\x42.dex.StepExecutionCounterInfo.StepTypeCurrentlyExecutingCountEntry\x12\'\n\x1ftotal_currently_executing_count\x18\x03 \x01(\x05\x12^\n\x1astep_active_execution_nums\x18\x04 \x03(\x0b\x32:.dex.StepExecutionCounterInfo.StepActiveExecutionNumsEntry\x1a;\n\x19StepTypeStartedCountEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a\x46\n$StepTypeCurrentlyExecutingCountEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1aY\n\x1cStepActiveExecutionNumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.dex.StepExecutionNumbers:\x02\x38\x01\"f\n\x0eStaleSkipTimer\x12\x19\n\x11step_execution_id\x18\x01 \x01(\t\x12\x1a\n\x12timer_condition_id\x18\x02 \x01(\t\x12\x1d\n\x15timer_condition_index\x18\x03 \x01(\x05\"\x92\x04\n\x11\x43ontinueAsNewDump\x12\x38\n\x1dsteps_to_start_from_beginning\x18\x01 \x03(\x0b\x32\x11.dex.StepMovement\x12?\n\x19step_executions_to_resume\x18\x02 \x03(\x0b\x32\x1c.dex.StepExecutionResumeInfo\x12\x45\n\x10\x63hannel_received\x18\x03 \x03(\x0b\x32+.dex.ContinueAsNewDump.ChannelReceivedEntry\x12\x33\n\x0c\x63ounter_info\x18\x04 \x01(\x0b\x32\x1d.dex.StepExecutionCounterInfo\x12/\n\x0cstep_outputs\x18\x05 \x03(\x0b\x32\x19.dex.StepCompletionOutput\x12.\n\x11stale_skip_timers\x18\x06 \x03(\x0b\x32\x13.dex.StaleSkipTimer\x12\x1b\n\nattributes\x18\x07 \x03(\x0b\x32\x07.dex.KV\x12<\n\x1cpending_attribute_sync_items\x18\x08 \x03(\x0b\x32\x16.dex.AttributeSyncItem\x1aJ\n\x14\x43hannelReceivedEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.dex.ChannelValues:\x02\x38\x01\"6\n\x12\x43ontinueAsNewInput\x12 \n\x18previous_internal_run_id\x18\x01 \x01(\t\"\xdc\x03\n\x18InterpreterWorkflowInput\x12\x11\n\tflow_type\x18\x01 \x01(\t\x12\'\n\x1f\x63onfigured_flow_timeout_seconds\x18\x02 \x01(\x05\x12\x33\n\x13\x66low_timeout_policy\x18\x03 \x01(\x0e\x32\x16.dex.FlowTimeoutPolicy\x12\x17\n\x0fstart_step_type\x18\x04 \x01(\t\x12\x1e\n\nstep_input\x18\x05 \x01(\x0b\x32\n.dex.Value\x12&\n\x0cstep_options\x18\x06 \x01(\x0b\x32\x10.dex.StepOptions\x12,\n\x0finit_attributes\x18\x07 \x03(\x0b\x32\x13.dex.AttributeWrite\x12\x1f\n\x06\x63onfig\x18\x08 \x01(\x0b\x32\x0f.dex.FlowConfig\x12&\n\x1eis_resume_from_continue_as_new\x18\t \x01(\x08\x12\x36\n\x15\x63ontinue_as_new_input\x18\n \x01(\x0b\x32\x17.dex.ContinueAsNewInput\x12?\n\x17timeout_handler_options\x18\x0b \x01(\x0b\x32\x1e.dex.FlowTimeoutHandlerOptions\"W\n\x19InterpreterWorkflowOutput\x12:\n\x17step_completion_outputs\x18\x01 \x03(\x0b\x32\x19.dex.StepCompletionOutput\"1\n\x1d\x42lobStoreCleanupWorkflowInput\x12\x10\n\x08store_id\x18\x01 \x01(\t\"7\n\x1e\x42lobStoreCleanupWorkflowOutput\x12\x15\n\rtotal_deleted\x18\x01 \x01(\x05\"~\n InvokeWaitForMethodActivityInput\x12(\n\rworker_target\x18\x01 \x01(\x0b\x32\x11.dex.WorkerTarget\x12\x30\n\x07request\x18\x02 \x01(\x0b\x32\x1f.dex.InvokeWaitForMethodRequest\"W\n!InvokeWaitForMethodActivityOutput\x12\x32\n\x08response\x18\x01 \x01(\x0b\x32 .dex.InvokeWaitForMethodResponse\"~\n InvokeExecuteMethodActivityInput\x12(\n\rworker_target\x18\x01 \x01(\x0b\x32\x11.dex.WorkerTarget\x12\x30\n\x07request\x18\x02 \x01(\x0b\x32\x1f.dex.InvokeExecuteMethodRequest\"7\n\x11RecoveryErrorInfo\x12\x0e\n\x06\x64\x65tail\x18\x01 \x01(\t\x12\x12\n\nerror_type\x18\x02 \x01(\t\"\xf5\x01\n InternalLocalStepActivityFailure\x12;\n\x17local_activity_metadata\x18\x01 \x01(\x0b\x32\x1a.dex.LocalActivityMetadata\x12\x1f\n\x17\x66irst_attempt_timestamp\x18\x02 \x01(\x03\x12.\n\x0emethod_options\x18\x03 \x01(\x0b\x32\x16.dex.StepMethodOptions\x12\x0f\n\x07\x61ttempt\x18\x04 \x01(\x05\x12\x32\n\x0e\x61\x63tivity_error\x18\x05 \x01(\x0b\x32\x1a.dex.InternalActivityError\"W\n!InvokeExecuteMethodActivityOutput\x12\x32\n\x08response\x18\x01 \x01(\x0b\x32 .dex.InvokeExecuteMethodResponse\"W\n%DumpFlowForContinueAsNewActivityInput\x12.\n\x07request\x18\x01 \x01(\x0b\x32\x1d.dex.ContinueAsNewDumpRequest\"Z\n&DumpFlowForContinueAsNewActivityOutput\x12\x30\n\x08response\x18\x01 \x01(\x0b\x32\x1e.dex.ContinueAsNewDumpResponse\"v\n\x1cInvokeWorkerRPCActivityInput\x12.\n\x08rpc_prep\x18\x01 \x01(\x0b\x32\x1c.dex.PrepareRpcQueryResponse\x12&\n\x07request\x18\x02 \x01(\x0b\x32\x15.dex.InvokeRPCRequest\"c\n\x1dInvokeWorkerRPCActivityOutput\x12.\n\x08response\x18\x01 \x01(\x0b\x32\x1c.dex.InvokeWorkerRPCResponse\x12\x12\n\nrequest_id\x18\x02 \x01(\t\"1\n\x1d\x43leanupBlobStoreActivityInput\x12\x10\n\x08store_id\x18\x01 \x01(\t\"7\n\x1e\x43leanupBlobStoreActivityOutput\x12\x15\n\rtotal_deleted\x18\x01 \x01(\x05\"P\n\x11\x41ttributeSyncItem\x12\x13\n\x0b\x63onfig_name\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12\x19\n\x05value\x18\x03 \x01(\x0b\x32\n.dex.Value\"n\n\x1fSyncAttributeBatchActivityInput\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x13\n\x0b\x63onfig_name\x18\x02 \x01(\t\x12%\n\x05items\x18\x03 \x03(\x0b\x32\x16.dex.AttributeSyncItem\"\x94\x01\n\x19StartSubFlowActivityInput\x12(\n\tcondition\x18\x01 \x01(\x0b\x32\x15.dex.SubFlowCondition\x12+\n\x12parent_flow_config\x18\x02 \x01(\x0b\x32\x0f.dex.FlowConfig\x12 \n\x18parent_step_execution_id\x18\x03 \x01(\t\"L\n\x1aStartSubFlowActivityOutput\x12.\n\x15immediate_flow_result\x18\x01 \x01(\x0b\x32\x0f.dex.FlowResult\"[\n\x1eSubFlowCompletionSignalRequest\x12\x13\n\x0bsub_flow_id\x18\x01 \x01(\t\x12$\n\x0b\x66low_result\x18\x02 \x01(\x0b\x32\x0f.dex.FlowResult\"t\n$ReportSubFlowCompletionActivityInput\x12\x16\n\x0eparent_flow_id\x18\x01 \x01(\t\x12\x34\n\x07request\x18\x02 \x01(\x0b\x32#.dex.SubFlowCompletionSignalRequest\"]\n%ReportSubFlowCompletionActivityOutput\x12\x34\n\x06status\x18\x01 \x01(\x0e\x32$.dex.SubFlowCompletionDeliveryStatus\"\x82\x03\n\x17\x45xecuteRpcSignalRequest\x12\x1d\n\trpc_input\x18\x01 \x01(\x0b\x32\n.dex.Value\x12\x1e\n\nrpc_output\x18\x02 \x01(\x0b\x32\n.dex.Value\x12.\n\x11upsert_attributes\x18\x03 \x03(\x0b\x32\x13.dex.AttributeWrite\x12(\n\rstep_decision\x18\x04 \x01(\x0b\x32\x11.dex.StepDecision\x12\x1e\n\rrecord_events\x18\x05 \x03(\x0b\x32\x07.dex.KV\x12/\n\x12publish_to_channel\x18\x06 \x03(\x0b\x32\x13.dex.ChannelMessage\x12\x1c\n\x14is_set_attribute_api\x18\x07 \x01(\x08\x12\x38\n\x13\x64\x65lete_from_channel\x18\x08 \x03(\x0b\x32\x1b.dex.ChannelMessageDeletion\x12%\n\x1dis_delete_channel_message_api\x18\t \x01(\x08\"n\n\x16SkipTimerSignalRequest\x12\x19\n\x11step_execution_id\x18\x01 \x01(\t\x12\x1a\n\x12timer_condition_id\x18\x02 \x01(\t\x12\x1d\n\x15timer_condition_index\x18\x03 \x01(\x05\"I\n\x15StopFlowSignalRequest\x12 \n\tstop_type\x18\x01 \x01(\x0e\x32\r.dex.StopType\x12\x0e\n\x06reason\x18\x02 \x01(\t\";\n\x19GetAttributesQueryRequest\x12\x0c\n\x04keys\x18\x01 \x03(\t\x12\x10\n\x08\x61ll_keys\x18\x02 \x01(\x08\"9\n\x1aGetAttributesQueryResponse\x12\x1b\n\nattributes\x18\x01 \x03(\x0b\x32\x07.dex.KV\"~\n\x16PrepareRpcQueryRequest\x12$\n\x1cload_attribute_map_instances\x18\x01 \x03(\t\x12\x1a\n\x12load_channel_names\x18\x02 \x03(\t\x12\"\n\x1aload_channel_map_instances\x18\x03 \x03(\t\"\xc9\x04\n\x17PrepareRpcQueryResponse\x12\x1b\n\nattributes\x18\x01 \x03(\x0b\x32\x07.dex.KV\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x1e\n\x16\x66low_started_timestamp\x18\x03 \x01(\x03\x12\x11\n\tflow_type\x18\x04 \x01(\t\x12(\n\rworker_target\x18\x05 \x01(\x0b\x32\x11.dex.WorkerTarget\x12\x45\n\rchannel_infos\x18\x06 \x03(\x0b\x32..dex.PrepareRpcQueryResponse.ChannelInfosEntry\x12X\n\x17loaded_channel_messages\x18\x07 \x03(\x0b\x32\x37.dex.PrepareRpcQueryResponse.LoadedChannelMessagesEntry\x12&\n\x1eloaded_attribute_map_instances\x18\x08 \x03(\t\x12\x1c\n\x14loaded_channel_names\x18\t \x03(\t\x12$\n\x1cloaded_channel_map_instances\x18\n \x03(\t\x1a\x45\n\x11\x43hannelInfosEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1f\n\x05value\x18\x02 \x01(\x0b\x32\x10.dex.ChannelInfo:\x02\x38\x01\x1aP\n\x1aLoadedChannelMessagesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.dex.ChannelValues:\x02\x38\x01\"r\n\tTimerInfo\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\x12%\n\x1d\x66iring_unix_timestamp_seconds\x18\x02 \x01(\x03\x12(\n\x06status\x18\x03 \x01(\x0e\x32\x18.dex.InternalTimerStatus\"/\n\rTimerInfoList\x12\x1e\n\x06timers\x18\x01 \x03(\x0b\x32\x0e.dex.TimerInfo\"\xf6\x01\n!GetCurrentTimerInfosQueryResponse\x12v\n\"step_execution_current_timer_infos\x18\x01 \x03(\x0b\x32J.dex.GetCurrentTimerInfosQueryResponse.StepExecutionCurrentTimerInfosEntry\x1aY\n#StepExecutionCurrentTimerInfosEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.dex.TimerInfoList:\x02\x38\x01\"V\n)GetScheduledGreedyTimerTimesQueryResponse\x12)\n\x11pending_scheduled\x18\x01 \x03(\x0b\x32\x0e.dex.TimerInfo\"\xc4\x01\n\x11\x44\x65\x62ugDumpResponse\x12\x1f\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x0f.dex.FlowConfig\x12(\n\x08snapshot\x18\x02 \x01(\x0b\x32\x16.dex.ContinueAsNewDump\x12%\n\x1d\x66iring_timers_unix_timestamps\x18\x03 \x03(\x03\x12=\n\x16\x61\x63tive_step_executions\x18\x04 \x03(\x0b\x32\x1d.dex.ActiveStepExecutionState\"A\n\x15InvokeRpcUpdateResult\x12(\n\x08response\x18\x01 \x01(\x0b\x32\x16.dex.InvokeRPCResponse\"\'\n\x14StepExecutionNumbers\x12\x0f\n\x07numbers\x18\x01 \x03(\x05*\xcb\x01\n\tIndexType\x12\x1a\n\x16INDEX_TYPE_UNSPECIFIED\x10\x00\x12\x16\n\x12INDEX_TYPE_KEYWORD\x10\x01\x12\x13\n\x0fINDEX_TYPE_TEXT\x10\x02\x12\x1c\n\x18INDEX_TYPE_KEYWORD_ARRAY\x10\x03\x12\x12\n\x0eINDEX_TYPE_INT\x10\x04\x12\x15\n\x11INDEX_TYPE_DOUBLE\x10\x05\x12\x13\n\x0fINDEX_TYPE_BOOL\x10\x06\x12\x17\n\x13INDEX_TYPE_DATETIME\x10\x07*\xbc\x01\n\x1aWaitForMethodFailurePolicy\x12.\n*WAIT_FOR_METHOD_FAILURE_POLICY_UNSPECIFIED\x10\x00\x12\x37\n3WAIT_FOR_METHOD_FAILURE_POLICY_FAIL_FLOW_ON_FAILURE\x10\x01\x12\x35\n1WAIT_FOR_METHOD_FAILURE_POLICY_PROCEED_ON_FAILURE\x10\x02*\xd0\x01\n\x1a\x45xecuteMethodFailurePolicy\x12-\n)EXECUTE_METHOD_FAILURE_POLICY_UNSPECIFIED\x10\x00\x12\x45\nAEXECUTE_METHOD_FAILURE_POLICY_FAIL_FLOW_ON_EXECUTE_METHOD_FAILURE\x10\x01\x12<\n8EXECUTE_METHOD_FAILURE_POLICY_PROCEED_TO_CONFIGURED_STEP\x10\x02*\xe6\x01\n\rIdReusePolicy\x12\x1f\n\x1bID_REUSE_POLICY_UNSPECIFIED\x10\x00\x12\x37\n3ID_REUSE_POLICY_ALLOW_IF_PREVIOUS_EXISTS_ABNORMALLY\x10\x01\x12\'\n#ID_REUSE_POLICY_ALLOW_IF_NO_RUNNING\x10\x02\x12\"\n\x1eID_REUSE_POLICY_DISALLOW_REUSE\x10\x03\x12.\n*ID_REUSE_POLICY_ALLOW_TERMINATE_IF_RUNNING\x10\x04*\xcf\x01\n\x14\x41\x63tiveStepSearchMode\x12\'\n#ACTIVE_STEP_SEARCH_MODE_UNSPECIFIED\x10\x00\x12+\n\'ACTIVE_STEP_SEARCH_MODE_ENABLED_FOR_ALL\x10\x01\x12;\n7ACTIVE_STEP_SEARCH_MODE_ENABLED_FOR_STEPS_WITH_WAIT_FOR\x10\x02\x12$\n ACTIVE_STEP_SEARCH_MODE_DISABLED\x10\x03*f\n\x0eStepDurability\x12\x1f\n\x1bSTEP_DURABILITY_UNSPECIFIED\x10\x00\x12\x18\n\x14STEP_DURABILITY_SYNC\x10\x01\x12\x19\n\x15STEP_DURABILITY_ASYNC\x10\x02*\x97\x01\n\x11\x46lowTimeoutPolicy\x12#\n\x1f\x46LOW_TIMEOUT_POLICY_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x46LOW_TIMEOUT_POLICY_FAIL\x10\x01\x12\x1e\n\x1a\x46LOW_TIMEOUT_POLICY_CANCEL\x10\x02\x12\x1f\n\x1b\x46LOW_TIMEOUT_POLICY_HANDLER\x10\x03*h\n\x08StopType\x12\x19\n\x15STOP_TYPE_UNSPECIFIED\x10\x00\x12\x14\n\x10STOP_TYPE_CANCEL\x10\x01\x12\x17\n\x13STOP_TYPE_TERMINATE\x10\x02\x12\x12\n\x0eSTOP_TYPE_FAIL\x10\x03*\x80\x02\n\nFlowStatus\x12\x1b\n\x17\x46LOW_STATUS_UNSPECIFIED\x10\x00\x12\x17\n\x13\x46LOW_STATUS_RUNNING\x10\x01\x12\x19\n\x15\x46LOW_STATUS_COMPLETED\x10\x02\x12\x16\n\x12\x46LOW_STATUS_FAILED\x10\x03\x12\x31\n-FLOW_STATUS_SERVER_SIDE_TIMEOUT_INTERNAL_ONLY\x10\x04\x12\x1a\n\x16\x46LOW_STATUS_TERMINATED\x10\x05\x12\x18\n\x14\x46LOW_STATUS_CANCELED\x10\x06\x12 \n\x1c\x46LOW_STATUS_CONTINUED_AS_NEW\x10\x07*\x9e\x02\n\rFlowErrorType\x12\x1f\n\x1b\x46LOW_ERROR_TYPE_UNSPECIFIED\x10\x00\x12.\n*FLOW_ERROR_TYPE_STEP_DECISION_FAILING_FLOW\x10\x01\x12+\n\'FLOW_ERROR_TYPE_CLIENT_API_FAILING_FLOW\x10\x02\x12#\n\x1f\x46LOW_ERROR_TYPE_WORKER_API_FAIL\x10\x03\x12*\n&FLOW_ERROR_TYPE_INVALID_USER_FLOW_CODE\x10\x04\x12 \n\x1c\x46LOW_ERROR_TYPE_FLOW_TIMEOUT\x10\x05\x12\x1c\n\x18\x46LOW_ERROR_TYPE_INTERNAL\x10\x06*\x93\x01\n\x16PendingStepMethodPhase\x12)\n%PENDING_STEP_METHOD_PHASE_UNSPECIFIED\x10\x00\x12\'\n#PENDING_STEP_METHOD_PHASE_SCHEDULED\x10\x01\x12%\n!PENDING_STEP_METHOD_PHASE_STARTED\x10\x02*q\n\x0f\x41\x63tiveStepPhase\x12!\n\x1d\x41\x43TIVE_STEP_PHASE_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x41\x43TIVE_STEP_PHASE_ACTIVE\x10\x01\x12\x1d\n\x19\x41\x43TIVE_STEP_PHASE_WAITING\x10\x02*\xbd\x01\n\rFlowResetType\x12\x1f\n\x1b\x46LOW_RESET_TYPE_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x46LOW_RESET_TYPE_BEGINNING\x10\x01\x12&\n\"FLOW_RESET_TYPE_HISTORY_EVENT_TIME\x10\x02\x12\x1d\n\x19\x46LOW_RESET_TYPE_STEP_TYPE\x10\x03\x12%\n!FLOW_RESET_TYPE_STEP_EXECUTION_ID\x10\x04*\x86\x01\n\x13\x46lowResetStepMethod\x12&\n\"FLOW_RESET_STEP_METHOD_UNSPECIFIED\x10\x00\x12#\n\x1f\x46LOW_RESET_STEP_METHOD_WAIT_FOR\x10\x01\x12\"\n\x1e\x46LOW_RESET_STEP_METHOD_EXECUTE\x10\x02*\xc6\x02\n\x16\x41ttributeMatchOperator\x12(\n$ATTRIBUTE_MATCH_OPERATOR_UNSPECIFIED\x10\x00\x12\"\n\x1e\x41TTRIBUTE_MATCH_OPERATOR_EQUAL\x10\x01\x12&\n\"ATTRIBUTE_MATCH_OPERATOR_NOT_EQUAL\x10\x02\x12)\n%ATTRIBUTE_MATCH_OPERATOR_GREATER_THAN\x10\x03\x12\x32\n.ATTRIBUTE_MATCH_OPERATOR_GREATER_THAN_OR_EQUAL\x10\x04\x12&\n\"ATTRIBUTE_MATCH_OPERATOR_LESS_THAN\x10\x05\x12/\n+ATTRIBUTE_MATCH_OPERATOR_LESS_THAN_OR_EQUAL\x10\x06*\xd3\x02\n\x0e\x45rrorSubStatus\x12 \n\x1c\x45RROR_SUB_STATUS_UNSPECIFIED\x10\x00\x12\"\n\x1e\x45RROR_SUB_STATUS_UNCATEGORIZED\x10\x01\x12)\n%ERROR_SUB_STATUS_FLOW_ALREADY_STARTED\x10\x02\x12$\n ERROR_SUB_STATUS_FLOW_NOT_EXISTS\x10\x03\x12%\n!ERROR_SUB_STATUS_WORKER_API_ERROR\x10\x04\x12\'\n#ERROR_SUB_STATUS_LONG_POLL_TIME_OUT\x10\x05\x12.\n*ERROR_SUB_STATUS_CHANNEL_MESSAGE_NOT_FOUND\x10\x06\x12*\n&ERROR_SUB_STATUS_WAIT_HANDLER_TIME_OUT\x10\x07*\x8b\x02\n\x11\x43loseDecisionType\x12#\n\x1f\x43LOSE_DECISION_TYPE_UNSPECIFIED\x10\x00\x12\x38\n4CLOSE_DECISION_TYPE_FORCE_COMPLETE_ON_CHANNELS_EMPTY\x10\x01\x12)\n%CLOSE_DECISION_TYPE_GRACEFUL_COMPLETE\x10\x02\x12&\n\"CLOSE_DECISION_TYPE_FORCE_COMPLETE\x10\x03\x12\"\n\x1e\x43LOSE_DECISION_TYPE_FORCE_FAIL\x10\x04\x12 \n\x1c\x43LOSE_DECISION_TYPE_DEAD_END\x10\x05*\xc8\x01\n\x14WaitingConditionType\x12&\n\"WAITING_CONDITION_TYPE_UNSPECIFIED\x10\x00\x12(\n$WAITING_CONDITION_TYPE_ALL_COMPLETED\x10\x01\x12(\n$WAITING_CONDITION_TYPE_ANY_COMPLETED\x10\x02\x12\x34\n0WAITING_CONDITION_TYPE_ANY_COMBINATION_COMPLETED\x10\x03*\xc7\x01\n\x12SubFlowReusePolicy\x12%\n!SUB_FLOW_REUSE_POLICY_UNSPECIFIED\x10\x00\x12 \n\x1cSUB_FLOW_REUSE_POLICY_ATTACH\x10\x01\x12>\n:SUB_FLOW_REUSE_POLICY_RESTART_IF_PREVIOUS_EXITS_ABNORMALLY\x10\x02\x12(\n$SUB_FLOW_REUSE_POLICY_ALWAYS_RESTART\x10\x03*q\n\x0f\x43onditionStatus\x12 \n\x1c\x43ONDITION_STATUS_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x43ONDITION_STATUS_WAITING\x10\x01\x12\x1e\n\x1a\x43ONDITION_STATUS_COMPLETED\x10\x02*\xa3\x01\n\x13InternalTimerStatus\x12%\n!INTERNAL_TIMER_STATUS_UNSPECIFIED\x10\x00\x12!\n\x1dINTERNAL_TIMER_STATUS_PENDING\x10\x01\x12\x1f\n\x1bINTERNAL_TIMER_STATUS_FIRED\x10\x02\x12!\n\x1dINTERNAL_TIMER_STATUS_SKIPPED\x10\x03*\xe9\x02\n\x0fUpdateErrorType\x12!\n\x1dUPDATE_ERROR_TYPE_UNSPECIFIED\x10\x00\x12/\n+UPDATE_ERROR_TYPE_CONTINUE_AS_NEW_PREEMPTED\x10\x01\x12&\n\"UPDATE_ERROR_TYPE_INVALID_ARGUMENT\x10\x02\x12)\n%UPDATE_ERROR_TYPE_FAILED_PRECONDITION\x10\x03\x12\'\n#UPDATE_ERROR_TYPE_DEADLINE_EXCEEDED\x10\x04\x12.\n*UPDATE_ERROR_TYPE_RPC_ACQUIRE_LOCK_FAILURE\x10\x05\x12%\n!UPDATE_ERROR_TYPE_SERVER_INTERNAL\x10\x06\x12/\n+UPDATE_ERROR_TYPE_CHANNEL_MESSAGE_NOT_FOUND\x10\x07*\xcd\x01\n\x1fSubFlowCompletionDeliveryStatus\x12\x33\n/SUB_FLOW_COMPLETION_DELIVERY_STATUS_UNSPECIFIED\x10\x00\x12\x31\n-SUB_FLOW_COMPLETION_DELIVERY_STATUS_DELIVERED\x10\x01\x12\x42\n>SUB_FLOW_COMPLETION_DELIVERY_STATUS_PARENT_CLOSED_OR_NOT_FOUND\x10\x02\x32\xdc\x0e\n\x0b\x46lowService\x12:\n\tStartFlow\x12\x15.dex.StartFlowRequest\x1a\x16.dex.StartFlowResponse\x12H\n\x10PublishToChannel\x12\x1c.dex.PublishToChannelRequest\x1a\x16.google.protobuf.Empty\x12U\n\x12GetChannelMessages\x12\x1e.dex.GetChannelMessagesRequest\x1a\x1f.dex.GetChannelMessagesResponse\x12P\n\x14\x44\x65leteChannelMessage\x12 .dex.DeleteChannelMessageRequest\x1a\x16.google.protobuf.Empty\x12>\n\x0bWriteStream\x12\x17.dex.WriteStreamRequest\x1a\x16.google.protobuf.Empty\x12=\n\nReadStream\x12\x16.dex.ReadStreamRequest\x1a\x17.dex.ReadStreamResponse\x12U\n\x12ListStreamMessages\x12\x1e.dex.ListStreamMessagesRequest\x1a\x1f.dex.ListStreamMessagesResponse\x12\x38\n\x08StopFlow\x12\x14.dex.StopFlowRequest\x1a\x16.google.protobuf.Empty\x12\x46\n\rGetAttributes\x12\x19.dex.GetAttributesRequest\x1a\x1a.dex.GetAttributesResponse\x12\x42\n\rSetAttributes\x12\x19.dex.SetAttributesRequest\x1a\x16.google.protobuf.Empty\x12:\n\tLoadBlobs\x12\x15.dex.LoadBlobsRequest\x1a\x16.dex.LoadBlobsResponse\x12\x37\n\x0bWaitForFlow\x12\x17.dex.WaitForFlowRequest\x1a\x0f.dex.FlowResult\x12@\n\x0bSearchFlows\x12\x17.dex.SearchFlowsRequest\x1a\x18.dex.SearchFlowsResponse\x12W\n\x14SyncAttributeIndexes\x12\x1e.dex.SyncAttributeIndexRequest\x1a\x1f.dex.SyncAttributeIndexResponse\x12I\n\x0eGetFlowSummary\x12\x1a.dex.GetFlowSummaryRequest\x1a\x1b.dex.GetFlowSummaryResponse\x12O\n\x10GetHistoryEvents\x12\x1c.dex.GetHistoryEventsRequest\x1a\x1d.dex.GetHistoryEventsResponse\x12X\n\x13WaitForHistoryEvent\x12\x1f.dex.WaitForHistoryEventRequest\x1a .dex.WaitForHistoryEventResponse\x12\x43\n\x0cGetFlowState\x12\x18.dex.GetFlowStateRequest\x1a\x19.dex.GetFlowStateResponse\x12:\n\tResetFlow\x12\x15.dex.ResetFlowRequest\x1a\x16.dex.ResetFlowResponse\x12:\n\tInvokeRPC\x12\x15.dex.InvokeRPCRequest\x1a\x16.dex.InvokeRPCResponse\x12:\n\tSkipTimer\x12\x15.dex.SkipTimerRequest\x1a\x16.google.protobuf.Empty\x12H\n\x10UpdateFlowConfig\x12\x1c.dex.UpdateFlowConfigRequest\x1a\x16.google.protobuf.Empty\x12^\n\x15WaitForStepCompletion\x12!.dex.WaitForStepCompletionRequest\x1a\".dex.WaitForStepCompletionResponse\x12O\n\x10WaitForAttribute\x12\x1c.dex.WaitForAttributeRequest\x1a\x1d.dex.WaitForAttributeResponse\x12P\n\x14TriggerContinueAsNew\x12 .dex.TriggerContinueAsNewRequest\x1a\x16.google.protobuf.Empty\x12\x36\n\x0bHealthCheck\x12\x16.google.protobuf.Empty\x1a\x0f.dex.HealthInfo2\x91\x02\n\rWorkerService\x12X\n\x13InvokeWaitForMethod\x12\x1f.dex.InvokeWaitForMethodRequest\x1a\x1e.dex.InvokeWaitForMethodOutput0\x01\x12X\n\x13InvokeExecuteMethod\x12\x1f.dex.InvokeExecuteMethodRequest\x1a\x1e.dex.InvokeExecuteMethodOutput0\x01\x12L\n\x0fInvokeWorkerRPC\x12\x1b.dex.InvokeWorkerRPCRequest\x1a\x1c.dex.InvokeWorkerRPCResponse2l\n\x0fInternalService\x12Y\n\x18\x44umpFlowForContinueAsNew\x12\x1d.dex.ContinueAsNewDumpRequest\x1a\x1e.dex.ContinueAsNewDumpResponseB!\n\x13io.superdurable.genB\x08\x44\x65xProtoP\x01\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\tdex.proto\x12\x03\x64\x65x\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x9c\x02\n\x05Value\x12+\n!internal_blob_id_for_string_value\x18\x01 \x01(\tH\x00\x12(\n\x1einternal_blob_id_for_obj_value\x18\x02 \x01(\tH\x00\x12\x16\n\x0cstring_value\x18\x03 \x01(\tH\x00\x12\'\n\tobj_value\x18\x04 \x01(\x0b\x32\x12.dex.EncodedObjectH\x00\x12\x13\n\tint_value\x18\x05 \x01(\x03H\x00\x12\x16\n\x0c\x64ouble_value\x18\x06 \x01(\x01H\x00\x12\x14\n\nbool_value\x18\x07 \x01(\x08H\x00\x12\x30\n\nnull_value\x18\x08 \x01(\x0e\x32\x1a.google.protobuf.NullValueH\x00\x42\x06\n\x04kind\"2\n\rEncodedObject\x12\x10\n\x08\x65ncoding\x18\x01 \x01(\t\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\"\x8f\x01\n\x0e\x41ttributeWrite\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x19\n\x05value\x18\x02 \x01(\x0b\x32\n.dex.Value\x12&\n\x0cindex_config\x18\x03 \x01(\x0b\x32\x10.dex.IndexConfig\x12-\n\x0bsync_config\x18\x04 \x01(\x0b\x32\x18.dex.AttributeSyncConfig\"&\n\x13\x41ttributeSyncConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\",\n\x02KV\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x19\n\x05value\x18\x02 \x01(\x0b\x32\n.dex.Value\"N\n\x0bIndexConfig\x12\x0e\n\x06\x65nable\x18\x01 \x01(\x08\x12\x1c\n\x04type\x18\x02 \x01(\x0e\x32\x0e.dex.IndexType\x12\x11\n\tindex_key\x18\x03 \x01(\t\"\x91\x02\n\x07\x43ontext\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x1e\n\x16\x66low_started_timestamp\x18\x03 \x01(\x03\x12\x19\n\x11step_execution_id\x18\x04 \x01(\t\x12\x1f\n\x17\x66irst_attempt_timestamp\x18\x05 \x01(\x03\x12\x0f\n\x07\x61ttempt\x18\x06 \x01(\x05\x12\x1e\n\x16\x66rom_step_execution_id\x18\x07 \x01(\t\x12.\n\x0erecovery_error\x18\x08 \x01(\x0b\x32\x16.dex.RecoveryErrorInfo\x12(\n\x14last_heartbeat_value\x18\t \x01(\x0b\x32\n.dex.Value\"Z\n\x15LocalActivityMetadata\x12!\n\x19\x63urrent_step_execution_id\x18\x01 \x01(\t\x12\x1e\n\x16\x66rom_step_execution_id\x18\x02 \x01(\t\"\xa8\x01\n\x0bRetryPolicy\x12 \n\x18initial_interval_seconds\x18\x01 \x01(\x05\x12\x1b\n\x13\x62\x61\x63koff_coefficient\x18\x02 \x01(\x02\x12 \n\x18maximum_interval_seconds\x18\x03 \x01(\x05\x12\x18\n\x10maximum_attempts\x18\x04 \x01(\x05\x12\x1e\n\x16total_duration_seconds\x18\x05 \x01(\x05\"\x8c\x01\n\x0f\x46lowRetryPolicy\x12 \n\x18initial_interval_seconds\x18\x01 \x01(\x05\x12\x1b\n\x13\x62\x61\x63koff_coefficient\x18\x02 \x01(\x02\x12 \n\x18maximum_interval_seconds\x18\x03 \x01(\x05\x12\x18\n\x10maximum_attempts\x18\x04 \x01(\x05\"\x98\x07\n\x0bStepOptions\x12 \n\x18wait_for_timeout_seconds\x18\x01 \x01(\x05\x12\x1f\n\x17\x65xecute_timeout_seconds\x18\x02 \x01(\x05\x12/\n\x15wait_for_retry_policy\x18\x03 \x01(\x0b\x32\x10.dex.RetryPolicy\x12.\n\x14\x65xecute_retry_policy\x18\x04 \x01(\x0b\x32\x10.dex.RetryPolicy\x12@\n\x17wait_for_failure_policy\x18\x05 \x01(\x0e\x32\x1f.dex.WaitForMethodFailurePolicy\x12?\n\x16\x65xecute_failure_policy\x18\x06 \x01(\x0e\x32\x1f.dex.ExecuteMethodFailurePolicy\x12)\n!execute_failure_proceed_step_type\x18\x07 \x01(\t\x12>\n$execute_failure_proceed_step_options\x18\x08 \x01(\x0b\x32\x10.dex.StepOptions\x12\x15\n\rskip_wait_for\x18\t \x01(\x08\x12\x39\n\x1cwait_for_durability_override\x18\n \x01(\x0e\x32\x13.dex.StepDurability\x12\x38\n\x1b\x65xecute_durability_override\x18\x0b \x01(\x0e\x32\x13.dex.StepDurability\x12$\n\x1cwait_for_lock_attribute_keys\x18\x0c \x03(\t\x12#\n\x1b\x65xecute_lock_attribute_keys\x18\r \x03(\t\x12!\n\x19heartbeat_timeout_seconds\x18\x0e \x01(\x05\x12-\n%wait_for_load_attribute_map_instances\x18\x0f \x03(\t\x12#\n\x1bwait_for_load_channel_names\x18\x10 \x03(\t\x12+\n#wait_for_load_channel_map_instances\x18\x11 \x03(\t\x12,\n$execute_load_attribute_map_instances\x18\x12 \x03(\t\x12\"\n\x1a\x65xecute_load_channel_names\x18\x13 \x03(\t\x12*\n\"execute_load_channel_map_instances\x18\x14 \x03(\t\"\xcf\x03\n\x19\x46lowTimeoutHandlerOptions\x12\x1e\n\x16method_timeout_seconds\x18\x01 \x01(\x05\x12!\n\x19heartbeat_timeout_seconds\x18\x02 \x01(\x05\x12&\n\x0cretry_policy\x18\x03 \x01(\x0b\x32\x10.dex.RetryPolicy\x12\x37\n\x0e\x66\x61ilure_policy\x18\x04 \x01(\x0e\x32\x1f.dex.ExecuteMethodFailurePolicy\x12!\n\x19\x66\x61ilure_proceed_step_type\x18\x05 \x01(\t\x12\x36\n\x1c\x66\x61ilure_proceed_step_options\x18\x06 \x01(\x0b\x32\x10.dex.StepOptions\x12\x30\n\x13\x64urability_override\x18\x07 \x01(\x0e\x32\x13.dex.StepDurability\x12\x1b\n\x13lock_attribute_keys\x18\x08 \x03(\t\x12$\n\x1cload_attribute_map_instances\x18\t \x03(\t\x12\x1a\n\x12load_channel_names\x18\n \x03(\t\x12\"\n\x1aload_channel_map_instances\x18\x0b \x03(\t\"A\n\x19\x46lowAlreadyStartedOptions\x12$\n\x1cignore_already_started_error\x18\x01 \x01(\x08\"\xec\x02\n\x10\x46lowStartOptions\x12+\n\x0fid_reuse_policy\x18\x01 \x01(\x0e\x32\x12.dex.IdReusePolicy\x12 \n\x18\x66low_start_delay_seconds\x18\x02 \x01(\x05\x12*\n\x0cretry_policy\x18\x03 \x01(\x0b\x32\x14.dex.FlowRetryPolicy\x12\'\n\nattributes\x18\x04 \x03(\x0b\x32\x13.dex.AttributeWrite\x12-\n\x14\x66low_config_override\x18\x05 \x01(\x0b\x32\x0f.dex.FlowConfig\x12\x44\n\x1c\x66low_already_started_options\x18\x06 \x01(\x0b\x32\x1e.dex.FlowAlreadyStartedOptions\x12?\n\x17timeout_handler_options\x18\x07 \x01(\x0b\x32\x1e.dex.FlowTimeoutHandlerOptions\"\xd0\x03\n\nFlowConfig\x12?\n\x17\x61\x63tive_step_search_mode\x18\x01 \x01(\x0e\x32\x19.dex.ActiveStepSearchModeH\x00\x88\x01\x01\x12&\n\x19\x63ontinue_as_new_threshold\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12/\n\"continue_as_new_page_size_in_bytes\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x31\n\x0fstep_durability\x18\x04 \x01(\x0e\x32\x13.dex.StepDurabilityH\x03\x88\x01\x01\x12(\n\rworker_target\x18\x05 \x01(\x0b\x32\x11.dex.WorkerTarget\x12<\n\x15\x61ttribute_store_names\x18\x06 \x01(\x0b\x32\x18.dex.AttributeStoreNamesH\x04\x88\x01\x01\x42\x1a\n\x18_active_step_search_modeB\x1c\n\x1a_continue_as_new_thresholdB%\n#_continue_as_new_page_size_in_bytesB\x12\n\x10_step_durabilityB\x18\n\x16_attribute_store_names\"$\n\x13\x41ttributeStoreNames\x12\r\n\x05names\x18\x01 \x03(\t\"<\n\x0cWorkerTarget\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x1b\n\x13is_headless_address\x18\x02 \x01(\x08\"\xb1\x02\n\x10StartFlowRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x11\n\tflow_type\x18\x02 \x01(\t\x12\x1c\n\x14\x66low_timeout_seconds\x18\x03 \x01(\x05\x12\x33\n\x13\x66low_timeout_policy\x18\x04 \x01(\x0e\x32\x16.dex.FlowTimeoutPolicy\x12\x17\n\x0fstart_step_type\x18\x05 \x01(\t\x12\x1e\n\nstep_input\x18\x08 \x01(\x0b\x32\n.dex.Value\x12&\n\x0cstep_options\x18\t \x01(\x0b\x32\x10.dex.StepOptions\x12\x31\n\x12\x66low_start_options\x18\n \x01(\x0b\x32\x15.dex.FlowStartOptions\x12\x12\n\nrequest_id\x18\x0b \x01(\t\"#\n\x11StartFlowResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"a\n\x17PublishToChannelRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12%\n\x08messages\x18\x03 \x03(\x0b\x32\x13.dex.ChannelMessage\"U\n\x0e\x43hannelMessage\x12\x14\n\x0c\x63hannel_name\x18\x01 \x01(\t\x12\x19\n\x05value\x18\x02 \x01(\x0b\x32\n.dex.Value\x12\x12\n\nmessage_id\x18\x03 \x01(\t\"R\n\x19GetChannelMessagesRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x14\n\x0c\x63hannel_name\x18\x03 \x01(\t\"C\n\x1aGetChannelMessagesResponse\x12%\n\x08messages\x18\x01 \x03(\x0b\x32\x13.dex.ChannelMessage\"|\n\x1b\x44\x65leteChannelMessageRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x14\n\x0c\x63hannel_name\x18\x03 \x01(\t\x12\x12\n\nmessage_id\x18\x04 \x01(\t\x12\x12\n\nrequest_id\x18\x05 \x01(\t\"B\n\x16\x43hannelMessageDeletion\x12\x14\n\x0c\x63hannel_name\x18\x01 \x01(\t\x12\x12\n\nmessage_id\x18\x02 \x01(\t\"\x97\x01\n\x12WriteStreamRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x11\n\tflow_type\x18\x02 \x01(\t\x12\x13\n\x0bstream_name\x18\x03 \x01(\t\x12\x1d\n\x15stream_capacity_bytes\x18\x04 \x01(\x03\x12\x19\n\x05value\x18\x05 \x01(\x0b\x32\n.dex.Value\x12\x0e\n\x06source\x18\x06 \x01(\t\"}\n\x11ReadStreamRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x11\n\tflow_type\x18\x02 \x01(\t\x12\x13\n\x0bstream_name\x18\x03 \x01(\t\x12\x14\n\x0cresume_token\x18\x04 \x01(\t\x12\x19\n\x11wait_time_seconds\x18\x05 \x01(\x05\"9\n\x12ReadStreamResponse\x12#\n\x07message\x18\x01 \x01(\x0b\x32\x12.dex.StreamMessage\"\x82\x01\n\x19ListStreamMessagesRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x11\n\tflow_type\x18\x02 \x01(\t\x12\x13\n\x0bstream_name\x18\x03 \x01(\t\x12\x11\n\tpage_size\x18\x04 \x01(\x05\x12\x19\n\x11\x62\x65\x66ore_page_token\x18\x05 \x01(\t\"[\n\x1aListStreamMessagesResponse\x12$\n\x08messages\x18\x01 \x03(\x0b\x32\x12.dex.StreamMessage\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"\x82\x01\n\rStreamMessage\x12\x19\n\x05value\x18\x01 \x01(\x0b\x32\n.dex.Value\x12\x14\n\x0cresume_token\x18\x02 \x01(\t\x12\x30\n\x0c\x63reated_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0e\n\x06source\x18\x04 \x01(\t\"d\n\x0fStopFlowRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x0e\n\x06reason\x18\x03 \x01(\t\x12 \n\tstop_type\x18\x04 \x01(\x0e\x32\r.dex.StopType\"W\n\x14GetAttributesRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x0c\n\x04keys\x18\x03 \x03(\t\x12\x10\n\x08\x61ll_keys\x18\x04 \x01(\x08\"4\n\x15GetAttributesResponse\x12\x1b\n\nattributes\x18\x01 \x03(\x0b\x32\x07.dex.KV\"t\n\x14SetAttributesRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\'\n\nattributes\x18\x03 \x03(\x0b\x32\x13.dex.AttributeWrite\x12\x12\n\nrequest_id\x18\x04 \x01(\t\"G\n\x14LoadBlobRequestEntry\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x1e\n\nblob_value\x18\x02 \x01(\x0b\x32\n.dex.Value\">\n\x10LoadBlobsRequest\x12*\n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x19.dex.LoadBlobRequestEntry\"\x82\x01\n\x11LoadBlobsResponse\x12\x32\n\x06values\x18\x01 \x03(\x0b\x32\".dex.LoadBlobsResponse.ValuesEntry\x1a\x39\n\x0bValuesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x19\n\x05value\x18\x02 \x01(\x0b\x32\n.dex.Value:\x02\x38\x01\"g\n\x12WaitForFlowRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x15\n\rneeds_results\x18\x03 \x01(\x08\x12\x19\n\x11wait_time_seconds\x18\x04 \x01(\x05\"\x83\x01\n\x14StepCompletionOutput\x12\x1b\n\x13\x63ompleted_step_type\x18\x01 \x01(\t\x12#\n\x1b\x63ompleted_step_execution_id\x18\x02 \x01(\t\x12)\n\x15\x63ompleted_step_output\x18\x03 \x01(\x0b\x32\n.dex.Value\"\x9d\x01\n\nFlowResult\x12$\n\x0b\x66low_status\x18\x01 \x01(\x0e\x32\x0f.dex.FlowStatus\x12*\n\x07results\x18\x02 \x03(\x0b\x32\x19.dex.StepCompletionOutput\x12&\n\nerror_type\x18\x03 \x01(\x0e\x32\x12.dex.FlowErrorType\x12\x15\n\rerror_message\x18\x04 \x01(\t\"O\n\x12SearchFlowsRequest\x12\r\n\x05query\x18\x01 \x01(\t\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x17\n\x0fnext_page_token\x18\x03 \x01(\t\"`\n\x13SearchFlowsResponse\x12\x30\n\tflow_runs\x18\x01 \x03(\x0b\x32\x1d.dex.SearchFlowsResponseEntry\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"\xf9\x01\n\x18SearchFlowsResponseEntry\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12#\n\x12indexed_attributes\x18\x03 \x03(\x0b\x32\x07.dex.KV\x12\x11\n\tflow_type\x18\x04 \x01(\t\x12$\n\x0b\x66low_status\x18\x05 \x01(\x0e\x32\x0f.dex.FlowStatus\x12.\n\nstart_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nclose_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xb5\x01\n\x19SyncAttributeIndexRequest\x12O\n\x11\x61ttribute_indexes\x18\x01 \x03(\x0b\x32\x34.dex.SyncAttributeIndexRequest.AttributeIndexesEntry\x1aG\n\x15\x41ttributeIndexesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1d\n\x05value\x18\x02 \x01(\x0e\x32\x0e.dex.IndexType:\x02\x38\x01\"\x1c\n\x1aSyncAttributeIndexResponse\"2\n\x0f\x46lowExecutionID\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\"8\n\x15GetFlowSummaryRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\"\x8c\x02\n\x16GetFlowSummaryResponse\x12/\n\x11\x66low_execution_id\x18\x01 \x01(\x0b\x32\x14.dex.FlowExecutionID\x12\x14\n\x0c\x66irst_run_id\x18\x02 \x01(\t\x12\x12\n\nrequest_id\x18\x03 \x01(\t\x12\x11\n\tflow_type\x18\x04 \x01(\t\x12$\n\x0b\x66low_status\x18\x05 \x01(\x0e\x32\x0f.dex.FlowStatus\x12.\n\nstart_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nclose_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xd4\x01\n\x1eInternalAsyncStepInputSnapshot\x12.\n\x0emethod_options\x18\x01 \x01(\x0b\x32\x16.dex.StepMethodOptions\x12;\n\x10wait_for_request\x18\x02 \x01(\x0b\x32\x1f.dex.InvokeWaitForMethodRequestH\x00\x12:\n\x0f\x65xecute_request\x18\x03 \x01(\x0b\x32\x1f.dex.InvokeExecuteMethodRequestH\x00\x42\t\n\x07request\"s\n\x1aInternalLocalActivityInput\x12%\n\x1d\x63urrent_run_started_timestamp\x18\x01 \x01(\x03\x12.\n\x0emethod_options\x18\x02 \x01(\x0b\x32\x16.dex.StepMethodOptions\"\x90\x01\n\x17GetHistoryEventsRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x1f\n\x17start_internal_event_id\x18\x03 \x01(\x03\x12\x1a\n\x12\x65stimate_page_size\x18\x04 \x01(\x05\x12\x17\n\x0fnext_page_token\x18\x05 \x01(\x0c\"z\n\x18GetHistoryEventsResponse\x12%\n\x06\x65vents\x18\x01 \x03(\x0b\x32\x15.dex.FlowHistoryEvent\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\x0c\x12\x1e\n\x16next_internal_event_id\x18\x03 \x01(\x03\"\xe5\x06\n\x10\x46lowHistoryEvent\x12\x10\n\x08\x65vent_id\x18\x01 \x01(\x03\x12.\n\nevent_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12L\n\x19\x66low_started_or_continued\x18\x14 \x01(\x0b\x32\'.dex.FlowStartedOrContinuedHistoryEventH\x00\x12\x32\n\x0b\x66low_closed\x18\x15 \x01(\x0b\x32\x1b.dex.FlowClosedHistoryEventH\x00\x12\x41\n\x17step_wait_for_completed\x18\x16 \x01(\x0b\x32\x1e.dex.StepWaitForCompletedEventH\x00\x12;\n\x14step_wait_for_failed\x18\x17 \x01(\x0b\x32\x1b.dex.StepWaitForFailedEventH\x00\x12@\n\x16step_execute_completed\x18\x18 \x01(\x0b\x32\x1e.dex.StepExecuteCompletedEventH\x00\x12:\n\x13step_execute_failed\x18\x19 \x01(\x0b\x32\x1b.dex.StepExecuteFailedEventH\x00\x12\x42\n\x17rpc_execution_completed\x18\x1a \x01(\x0b\x32\x1f.dex.RpcExecutionCompletedEventH\x00\x12\x44\n\x18\x63hannel_external_publish\x18\x1b \x01(\x0b\x32 .dex.ChannelExternalPublishEventH\x00\x12<\n\x15step_wait_for_pending\x18\x1c \x01(\x0b\x32\x1b.dex.StepMethodPendingEventH\x00\x12;\n\x14step_execute_pending\x18\x1d \x01(\x0b\x32\x1b.dex.StepMethodPendingEventH\x00\x12;\n\x10time_travel_fork\x18\x1e \x01(\x0b\x32\x1f.dex.TimeTravelForkHistoryEventH\x00\x12\x42\n\x17\x63hannel_external_delete\x18\x1f \x01(\x0b\x32\x1f.dex.ChannelExternalDeleteEventH\x00\x42\t\n\x07payload\"5\n\x1aTimeTravelForkHistoryEvent\x12\x17\n\x0fprevious_run_id\x18\x01 \x01(\t\"\xae\x03\n\"FlowStartedOrContinuedHistoryEvent\x12/\n\x11\x66low_execution_id\x18\x01 \x01(\x0b\x32\x14.dex.FlowExecutionID\x12\x11\n\tflow_type\x18\x02 \x01(\t\x12$\n\x0b\x66low_config\x18\x03 \x01(\x0b\x32\x0f.dex.FlowConfig\x12/\n\x0c\x66low_timeout\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x33\n\x13\x66low_timeout_policy\x18\x05 \x01(\x0e\x32\x16.dex.FlowTimeoutPolicy\x12?\n\x17timeout_handler_options\x18\x06 \x01(\x0b\x32\x1e.dex.FlowTimeoutHandlerOptions\x12.\n\rinitial_start\x18\n \x01(\x0b\x32\x15.dex.FlowInitialStartH\x00\x12\x32\n\x0f\x63ontinued_start\x18\x0b \x01(\x0b\x32\x17.dex.FlowContinuedStartH\x00\x42\x13\n\x11start_or_continue\"\x98\x01\n\x10\x46lowInitialStart\x12\x17\n\x0fstart_step_type\x18\x01 \x01(\t\x12\x1e\n\nstep_input\x18\x02 \x01(\x0b\x32\n.dex.Value\x12&\n\x0cstep_options\x18\x03 \x01(\x0b\x32\x10.dex.StepOptions\x12#\n\x12initial_attributes\x18\x04 \x03(\x0b\x32\x07.dex.KV\"\x8a\x03\n\x12\x46lowContinuedStart\x12\x17\n\x0fprevious_run_id\x18\x01 \x01(\t\x12)\n\x0esteps_to_start\x18\x02 \x03(\x0b\x32\x11.dex.StepMovement\x12\x35\n\x0fsteps_to_resume\x18\x03 \x03(\x0b\x32\x1c.dex.StepExecutionResumeInfo\x12U\n\x18pending_channel_messages\x18\x04 \x03(\x0b\x32\x33.dex.FlowContinuedStart.PendingChannelMessagesEntry\x12\x1b\n\nattributes\x18\x05 \x03(\x0b\x32\x07.dex.KV\x12\x32\n\x0f\x63ompleted_steps\x18\x06 \x03(\x0b\x32\x19.dex.StepCompletionOutput\x1aQ\n\x1bPendingChannelMessagesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.dex.ChannelValues:\x02\x38\x01\"\xc6\x01\n\x16\x46lowClosedHistoryEvent\x12$\n\x0b\x66low_status\x18\x01 \x01(\x0e\x32\x0f.dex.FlowStatus\x12*\n\x07results\x18\x02 \x03(\x0b\x32\x19.dex.StepCompletionOutput\x12&\n\nerror_type\x18\x03 \x01(\x0e\x32\x12.dex.FlowErrorType\x12\x15\n\rerror_message\x18\x04 \x01(\t\x12\x1b\n\x13\x63ontinued_to_run_id\x18\x05 \x01(\t\"\x9c\x01\n\x16StepMethodPendingEvent\x12(\n\x05input\x18\x01 \x01(\x0b\x32\x19.dex.StepMethodEventInput\x12,\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x1b.dex.StepMethodEventContext\x12*\n\x05phase\x18\x03 \x01(\x0e\x32\x1b.dex.PendingStepMethodPhase\"g\n\x11StepMethodFailure\x12\x15\n\rbackend_error\x18\x01 \x01(\t\x12*\n\x07\x64\x65tails\x18\x02 \x01(\x0b\x32\x19.dex.ServiceErrorResponse\x12\x0f\n\x07\x61ttempt\x18\x03 \x01(\x05\"w\n\x11StepMethodOptions\x12\x17\n\x0ftimeout_seconds\x18\x01 \x01(\x05\x12&\n\x0cretry_policy\x18\x02 \x01(\x0b\x32\x10.dex.RetryPolicy\x12!\n\x19heartbeat_timeout_seconds\x18\x03 \x01(\x05\"\xc2\x01\n\x14StepMethodEventInput\x12\x13\n\x0bunavailable\x18\x01 \x01(\x08\x12\x1e\n\nstep_input\x18\x02 \x01(\x0b\x32\n.dex.Value\x12\x30\n\x11\x63ondition_results\x18\x03 \x01(\x0b\x32\x15.dex.ConditionResults\x12\x1b\n\nattributes\x18\x04 \x03(\x0b\x32\x07.dex.KV\x12&\n\x15step_execution_locals\x18\x05 \x03(\x0b\x32\x07.dex.KV\"\xe8\x02\n\x16StepMethodEventContext\x12\x19\n\x11step_execution_id\x18\x01 \x01(\t\x12\x1e\n\x16\x66rom_step_execution_id\x18\x02 \x01(\t\x12\x11\n\tstep_type\x18\x03 \x01(\t\x12\'\n\ndurability\x18\x04 \x01(\x0e\x32\x13.dex.StepDurability\x12\x15\n\rfinal_attempt\x18\x05 \x01(\x05\x12\x30\n\x0cstarted_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12+\n\x08\x64uration\x18\x07 \x01(\x0b\x32\x19.google.protobuf.Duration\x12.\n\x0emethod_options\x18\x08 \x01(\x0b\x32\x16.dex.StepMethodOptions\x12\x31\n\x11last_failure_info\x18\t \x01(\x0b\x32\x16.dex.StepMethodFailure\"\xb9\x02\n\x1aStepWaitForCompletedOutput\x12\x31\n\x12wait_for_condition\x18\x01 \x01(\x0b\x32\x15.dex.WaitingCondition\x12.\n\x11upsert_attributes\x18\x02 \x03(\x0b\x32\x13.dex.AttributeWrite\x12/\n\x12publish_to_channel\x18\x03 \x03(\x0b\x32\x13.dex.ChannelMessage\x12\x1e\n\rrecord_events\x18\x04 \x03(\x0b\x32\x07.dex.KV\x12-\n\x1cupsert_step_execution_locals\x18\x05 \x03(\x0b\x32\x07.dex.KV\x12\x38\n\x13\x64\x65lete_from_channel\x18\x06 \x03(\x0b\x32\x1b.dex.ChannelMessageDeletion\"\xb0\x02\n\x1aStepExecuteCompletedOutput\x12(\n\rstep_decision\x18\x01 \x01(\x0b\x32\x11.dex.StepDecision\x12.\n\x11upsert_attributes\x18\x02 \x03(\x0b\x32\x13.dex.AttributeWrite\x12/\n\x12publish_to_channel\x18\x03 \x03(\x0b\x32\x13.dex.ChannelMessage\x12\x1e\n\rrecord_events\x18\x04 \x03(\x0b\x32\x07.dex.KV\x12-\n\x1cupsert_step_execution_locals\x18\x05 \x03(\x0b\x32\x07.dex.KV\x12\x38\n\x13\x64\x65lete_from_channel\x18\x06 \x03(\x0b\x32\x1b.dex.ChannelMessageDeletion\"A\n\x16StepMethodFailedOutput\x12\'\n\x07\x66\x61ilure\x18\x01 \x01(\x0b\x32\x16.dex.StepMethodFailure\"\xa4\x01\n\x19StepWaitForCompletedEvent\x12(\n\x05input\x18\x01 \x01(\x0b\x32\x19.dex.StepMethodEventInput\x12/\n\x06output\x18\x02 \x01(\x0b\x32\x1f.dex.StepWaitForCompletedOutput\x12,\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x1b.dex.StepMethodEventContext\"\x9d\x01\n\x16StepWaitForFailedEvent\x12(\n\x05input\x18\x01 \x01(\x0b\x32\x19.dex.StepMethodEventInput\x12+\n\x06output\x18\x02 \x01(\x0b\x32\x1b.dex.StepMethodFailedOutput\x12,\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x1b.dex.StepMethodEventContext\"\xa4\x01\n\x19StepExecuteCompletedEvent\x12(\n\x05input\x18\x01 \x01(\x0b\x32\x19.dex.StepMethodEventInput\x12/\n\x06output\x18\x02 \x01(\x0b\x32\x1f.dex.StepExecuteCompletedOutput\x12,\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x1b.dex.StepMethodEventContext\"\x9d\x01\n\x16StepExecuteFailedEvent\x12(\n\x05input\x18\x01 \x01(\x0b\x32\x19.dex.StepMethodEventInput\x12+\n\x06output\x18\x02 \x01(\x0b\x32\x1b.dex.StepMethodFailedOutput\x12,\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x1b.dex.StepMethodEventContext\"\xe8\x02\n\x1aRpcExecutionCompletedEvent\x12\x10\n\x08rpc_name\x18\x01 \x01(\t\x12\x19\n\x05input\x18\x02 \x01(\x0b\x32\n.dex.Value\x12\x1a\n\x06output\x18\x03 \x01(\x0b\x32\n.dex.Value\x12(\n\rstep_decision\x18\x04 \x01(\x0b\x32\x11.dex.StepDecision\x12.\n\x11upsert_attributes\x18\x05 \x03(\x0b\x32\x13.dex.AttributeWrite\x12\x1e\n\rrecord_events\x18\x06 \x03(\x0b\x32\x07.dex.KV\x12/\n\x12publish_to_channel\x18\x07 \x03(\x0b\x32\x13.dex.ChannelMessage\x12\x1c\n\x14is_set_attribute_api\x18\x08 \x01(\x08\x12\x38\n\x13\x64\x65lete_from_channel\x18\t \x03(\x0b\x32\x1b.dex.ChannelMessageDeletion\"D\n\x1b\x43hannelExternalPublishEvent\x12%\n\x08messages\x18\x01 \x03(\x0b\x32\x13.dex.ChannelMessage\"K\n\x1a\x43hannelExternalDeleteEvent\x12-\n\x08messages\x18\x01 \x03(\x0b\x32\x1b.dex.ChannelMessageDeletion\"]\n\x1aWaitForHistoryEventRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x1e\n\x16next_internal_event_id\x18\x03 \x01(\x03\"\x81\x01\n\x1bWaitForHistoryEventResponse\x12\x17\n\x0f\x65vent_available\x18\x01 \x01(\x08\x12#\n\x1b\x61vailable_internal_event_id\x18\x02 \x01(\x03\x12$\n\x0b\x66low_status\x18\x03 \x01(\x0e\x32\x0f.dex.FlowStatus\"\xa9\x03\n\x18\x41\x63tiveStepExecutionState\x12\x19\n\x11step_execution_id\x18\x01 \x01(\t\x12\x1e\n\x16\x66rom_step_execution_id\x18\x02 \x01(\t\x12\x11\n\tstep_type\x18\x03 \x01(\t\x12#\n\x05phase\x18\x04 \x01(\x0e\x32\x14.dex.ActiveStepPhase\x12#\n\x08movement\x18\x05 \x01(\x0b\x32\x11.dex.StepMovement\x12\x35\n\x11waiting_condition\x18\x06 \x01(\x0b\x32\x1a.dex.WaitingConditionState\x12\x43\n\x14\x63ompleted_conditions\x18\x07 \x01(\x0b\x32%.dex.StepExecutionCompletedConditions\x12&\n\x15step_execution_locals\x18\x08 \x03(\x0b\x32\x07.dex.KV\x12\x1e\n\x06timers\x18\t \x03(\x0b\x32\x0e.dex.TimerInfo\x12\x31\n\x11last_failure_info\x18\n \x01(\x0b\x32\x16.dex.StepMethodFailure\"6\n\x13GetFlowStateRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\"\xa1\x03\n\x14GetFlowStateResponse\x12$\n\x0b\x66low_config\x18\x01 \x01(\x0b\x32\x0f.dex.FlowConfig\x12\x1b\n\nattributes\x18\x02 \x03(\x0b\x32\x07.dex.KV\x12=\n\x16\x61\x63tive_step_executions\x18\x03 \x03(\x0b\x32\x1d.dex.ActiveStepExecutionState\x12\'\n\x0cqueued_steps\x18\x04 \x03(\x0b\x32\x11.dex.StepMovement\x12W\n\x18pending_channel_messages\x18\x05 \x03(\x0b\x32\x35.dex.GetFlowStateResponse.PendingChannelMessagesEntry\x12\x32\n\x0f\x63ompleted_steps\x18\x06 \x03(\x0b\x32\x19.dex.StepCompletionOutput\x1aQ\n\x1bPendingChannelMessagesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.dex.ChannelValues:\x02\x38\x01\"\x81\x02\n\x10ResetFlowRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12&\n\nreset_type\x18\x03 \x01(\x0e\x32\x12.dex.FlowResetType\x12\x0e\n\x06reason\x18\x04 \x01(\t\x12\x1a\n\x12history_event_time\x18\x05 \x01(\t\x12\x11\n\tstep_type\x18\x06 \x01(\t\x12\x19\n\x11step_execution_id\x18\x07 \x01(\t\x12\x1b\n\x13skip_writes_reapply\x18\x08 \x01(\x08\x12-\n\x0bstep_method\x18\t \x01(\x0e\x32\x18.dex.FlowResetStepMethod\"#\n\x11ResetFlowResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"\xaa\x02\n\x10InvokeRPCRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x10\n\x08rpc_name\x18\x03 \x01(\t\x12\x19\n\x05input\x18\x04 \x01(\x0b\x32\n.dex.Value\x12\x17\n\x0ftimeout_seconds\x18\x05 \x01(\x05\x12\x1b\n\x13lock_attribute_keys\x18\x06 \x03(\t\x12\x12\n\nrequest_id\x18\x07 \x01(\t\x12\x18\n\x10is_transactional\x18\x08 \x01(\x08\x12$\n\x1cload_attribute_map_instances\x18\t \x03(\t\x12\x1a\n\x12load_channel_names\x18\n \x03(\t\x12\"\n\x1aload_channel_map_instances\x18\x0b \x03(\t\"/\n\x11InvokeRPCResponse\x12\x1a\n\x06output\x18\x01 \x01(\x0b\x32\n.dex.Value\"\xa8\x01\n\x10SkipTimerRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x19\n\x11step_execution_id\x18\x03 \x01(\t\x12\x1a\n\x12timer_condition_id\x18\x04 \x01(\t\x12\"\n\x15timer_condition_index\x18\x05 \x01(\x05H\x00\x88\x01\x01\x42\x18\n\x16_timer_condition_index\"`\n\x17UpdateFlowConfigRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12$\n\x0b\x66low_config\x18\x03 \x01(\x0b\x32\x0f.dex.FlowConfig\"\x90\x01\n\x1cWaitForStepCompletionRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x11\n\tstep_type\x18\x02 \x01(\t\x12\x1d\n\x15step_execution_number\x18\x03 \x01(\t\x12\x19\n\x11wait_time_seconds\x18\x05 \x01(\x05\x12\x12\n\nrequest_id\x18\x06 \x01(\t\"\x1f\n\x1dWaitForStepCompletionResponse\"}\n\x17WaitForAttributeRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\"\n\x05match\x18\x02 \x01(\x0b\x32\x13.dex.AttributeMatch\x12\x19\n\x11wait_time_seconds\x18\x03 \x01(\x05\x12\x12\n\nrequest_id\x18\x04 \x01(\t\"=\n\x18WaitForAttributeResponse\x12!\n\rmatched_value\x18\x01 \x01(\x0b\x32\n.dex.Value\"i\n\x0e\x41ttributeMatch\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x08operator\x18\x02 \x01(\x0e\x32\x1b.dex.AttributeMatchOperator\x12\x1b\n\x07operand\x18\x03 \x01(\x0b\x32\n.dex.Value\">\n\x1bTriggerContinueAsNewRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\"C\n\nHealthInfo\x12\x11\n\tcondition\x18\x01 \x01(\t\x12\x10\n\x08hostname\x18\x02 \x01(\t\x12\x10\n\x08\x64uration\x18\x03 \x01(\x05\"\xea\x01\n\x14ServiceErrorResponse\x12\x0e\n\x06\x64\x65tail\x18\x01 \x01(\t\x12\'\n\nsub_status\x18\x02 \x01(\x0e\x32\x13.dex.ErrorSubStatus\x12$\n\x1coriginal_worker_error_detail\x18\x03 \x01(\t\x12\"\n\x1aoriginal_worker_error_type\x18\x04 \x01(\t\x12$\n\x1coriginal_worker_error_status\x18\x05 \x01(\x05\x12)\n!original_worker_error_stack_trace\x18\x06 \x01(\t\"k\n\x13WorkerErrorResponse\x12\x0e\n\x06\x64\x65tail\x18\x01 \x01(\t\x12\x12\n\nerror_type\x18\x02 \x01(\t\x12\x13\n\x0bstack_trace\x18\x03 \x01(\t\x12\x1b\n\x13retry_after_seconds\x18\x04 \x01(\x05\"z\n\x15InternalActivityError\x12\x15\n\rserver_detail\x18\x01 \x01(\t\x12\x1a\n\x12worker_grpc_status\x18\x02 \x01(\x05\x12.\n\x0cworker_error\x18\x03 \x01(\x0b\x32\x18.dex.InternalWorkerError\"N\n\x13InternalWorkerError\x12\x0e\n\x06\x64\x65tail\x18\x01 \x01(\t\x12\x12\n\nerror_type\x18\x02 \x01(\t\x12\x13\n\x0bstack_trace\x18\x03 \x01(\t\"m\n\x11InternalFlowError\x12\x17\n\rserver_detail\x18\x01 \x01(\tH\x00\x12\x34\n\x0e\x61\x63tivity_error\x18\x02 \x01(\x0b\x32\x1a.dex.InternalActivityErrorH\x00\x42\t\n\x07\x66\x61ilure\"\x1b\n\x0b\x43hannelInfo\x12\x0c\n\x04size\x18\x01 \x01(\x05\"\xca\x04\n\x1aInvokeWaitForMethodRequest\x12\x1d\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x0c.dex.Context\x12\x11\n\tflow_type\x18\x02 \x01(\t\x12\x11\n\tstep_type\x18\x03 \x01(\t\x12\x1e\n\nstep_input\x18\x04 \x01(\x0b\x32\n.dex.Value\x12\x1b\n\nattributes\x18\x05 \x03(\x0b\x32\x07.dex.KV\x12H\n\rchannel_infos\x18\x06 \x03(\x0b\x32\x31.dex.InvokeWaitForMethodRequest.ChannelInfosEntry\x12[\n\x17loaded_channel_messages\x18\x07 \x03(\x0b\x32:.dex.InvokeWaitForMethodRequest.LoadedChannelMessagesEntry\x12&\n\x1eloaded_attribute_map_instances\x18\x08 \x03(\t\x12\x1c\n\x14loaded_channel_names\x18\t \x03(\t\x12$\n\x1cloaded_channel_map_instances\x18\n \x03(\t\x1a\x45\n\x11\x43hannelInfosEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1f\n\x05value\x18\x02 \x01(\x0b\x32\x10.dex.ChannelInfo:\x02\x38\x01\x1aP\n\x1aLoadedChannelMessagesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.dex.ChannelValues:\x02\x38\x01\"\xf0\x02\n\x1bInvokeWaitForMethodResponse\x12;\n\x17local_activity_metadata\x18\x01 \x01(\x0b\x32\x1a.dex.LocalActivityMetadata\x12.\n\x11upsert_attributes\x18\x02 \x03(\x0b\x32\x13.dex.AttributeWrite\x12\x30\n\x11waiting_condition\x18\x03 \x01(\x0b\x32\x15.dex.WaitingCondition\x12\'\n\x16upsert_step_exe_locals\x18\x04 \x03(\x0b\x32\x07.dex.KV\x12\x1e\n\rrecord_events\x18\x05 \x03(\x0b\x32\x07.dex.KV\x12/\n\x12publish_to_channel\x18\x06 \x03(\x0b\x32\x13.dex.ChannelMessage\x12\x38\n\x13\x64\x65lete_from_channel\x18\x07 \x03(\x0b\x32\x1b.dex.ChannelMessageDeletion\"0\n\x13StepMethodHeartbeat\x12\x19\n\x05value\x18\x01 \x01(\x0b\x32\n.dex.Value\"`\n\x0fStepStreamWrite\x12\x13\n\x0bstream_name\x18\x01 \x01(\t\x12\x1d\n\x15stream_capacity_bytes\x18\x02 \x01(\x03\x12\x19\n\x05value\x18\x03 \x01(\x0b\x32\n.dex.Value\"\xb6\x01\n\x19InvokeWaitForMethodOutput\x12-\n\theartbeat\x18\x01 \x01(\x0b\x32\x18.dex.StepMethodHeartbeatH\x00\x12,\n\x0cstream_write\x18\x02 \x01(\x0b\x32\x14.dex.StepStreamWriteH\x00\x12\x32\n\x06result\x18\x03 \x01(\x0b\x32 .dex.InvokeWaitForMethodResponseH\x00\x42\x08\n\x06output\"\x9e\x05\n\x1aInvokeExecuteMethodRequest\x12\x1d\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x0c.dex.Context\x12\x11\n\tflow_type\x18\x02 \x01(\t\x12\x11\n\tstep_type\x18\x03 \x01(\t\x12\x1e\n\nstep_input\x18\x04 \x01(\x0b\x32\n.dex.Value\x12\x1b\n\nattributes\x18\x05 \x03(\x0b\x32\x07.dex.KV\x12 \n\x0fstep_exe_locals\x18\x06 \x03(\x0b\x32\x07.dex.KV\x12\x30\n\x11\x63ondition_results\x18\x07 \x01(\x0b\x32\x15.dex.ConditionResults\x12H\n\rchannel_infos\x18\x08 \x03(\x0b\x32\x31.dex.InvokeExecuteMethodRequest.ChannelInfosEntry\x12[\n\x17loaded_channel_messages\x18\t \x03(\x0b\x32:.dex.InvokeExecuteMethodRequest.LoadedChannelMessagesEntry\x12&\n\x1eloaded_attribute_map_instances\x18\n \x03(\t\x12\x1c\n\x14loaded_channel_names\x18\x0b \x03(\t\x12$\n\x1cloaded_channel_map_instances\x18\x0c \x03(\t\x1a\x45\n\x11\x43hannelInfosEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1f\n\x05value\x18\x02 \x01(\x0b\x32\x10.dex.ChannelInfo:\x02\x38\x01\x1aP\n\x1aLoadedChannelMessagesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.dex.ChannelValues:\x02\x38\x01\"\xe8\x02\n\x1bInvokeExecuteMethodResponse\x12;\n\x17local_activity_metadata\x18\x01 \x01(\x0b\x32\x1a.dex.LocalActivityMetadata\x12(\n\rstep_decision\x18\x02 \x01(\x0b\x32\x11.dex.StepDecision\x12.\n\x11upsert_attributes\x18\x03 \x03(\x0b\x32\x13.dex.AttributeWrite\x12\x1e\n\rrecord_events\x18\x04 \x03(\x0b\x32\x07.dex.KV\x12\'\n\x16upsert_step_exe_locals\x18\x05 \x03(\x0b\x32\x07.dex.KV\x12/\n\x12publish_to_channel\x18\x06 \x03(\x0b\x32\x13.dex.ChannelMessage\x12\x38\n\x13\x64\x65lete_from_channel\x18\x07 \x03(\x0b\x32\x1b.dex.ChannelMessageDeletion\"\xb6\x01\n\x19InvokeExecuteMethodOutput\x12-\n\theartbeat\x18\x01 \x01(\x0b\x32\x18.dex.StepMethodHeartbeatH\x00\x12,\n\x0cstream_write\x18\x02 \x01(\x0b\x32\x14.dex.StepStreamWriteH\x00\x12\x32\n\x06result\x18\x03 \x01(\x0b\x32 .dex.InvokeExecuteMethodResponseH\x00\x42\x08\n\x06output\"\xb8\x04\n\x16InvokeWorkerRPCRequest\x12\x1d\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x0c.dex.Context\x12\x11\n\tflow_type\x18\x02 \x01(\t\x12\x10\n\x08rpc_name\x18\x03 \x01(\t\x12\x19\n\x05input\x18\x04 \x01(\x0b\x32\n.dex.Value\x12\x1b\n\nattributes\x18\x05 \x03(\x0b\x32\x07.dex.KV\x12\x44\n\rchannel_infos\x18\x06 \x03(\x0b\x32-.dex.InvokeWorkerRPCRequest.ChannelInfosEntry\x12W\n\x17loaded_channel_messages\x18\x07 \x03(\x0b\x32\x36.dex.InvokeWorkerRPCRequest.LoadedChannelMessagesEntry\x12&\n\x1eloaded_attribute_map_instances\x18\x08 \x03(\t\x12\x1c\n\x14loaded_channel_names\x18\t \x03(\t\x12$\n\x1cloaded_channel_map_instances\x18\n \x03(\t\x1a\x45\n\x11\x43hannelInfosEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1f\n\x05value\x18\x02 \x01(\x0b\x32\x10.dex.ChannelInfo:\x02\x38\x01\x1aP\n\x1aLoadedChannelMessagesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.dex.ChannelValues:\x02\x38\x01\"\x9a\x02\n\x17InvokeWorkerRPCResponse\x12\x1a\n\x06output\x18\x01 \x01(\x0b\x32\n.dex.Value\x12(\n\rstep_decision\x18\x02 \x01(\x0b\x32\x11.dex.StepDecision\x12.\n\x11upsert_attributes\x18\x03 \x03(\x0b\x32\x13.dex.AttributeWrite\x12\x1e\n\rrecord_events\x18\x04 \x03(\x0b\x32\x07.dex.KV\x12\x38\n\x13\x64\x65lete_from_channel\x18\x05 \x03(\x0b\x32\x1b.dex.ChannelMessageDeletion\x12/\n\x12publish_to_channel\x18\x06 \x03(\x0b\x32\x13.dex.ChannelMessage\"\x9f\x01\n\x0cStepDecision\x12%\n\nnext_steps\x18\x01 \x03(\x0b\x32\x11.dex.StepMovement\x12*\n\x0e\x63lose_decision\x18\x02 \x01(\x0b\x32\x12.dex.CloseDecision\x12\x19\n\x11\x63\x61ncel_step_types\x18\x03 \x03(\t\x12!\n\x19\x63\x61ncel_sibling_step_types\x18\x04 \x03(\t\"\x88\x01\n\rCloseDecision\x12\x33\n\x13\x63lose_decision_type\x18\x01 \x01(\x0e\x32\x16.dex.CloseDecisionType\x12!\n\x19\x63onditional_channel_names\x18\x02 \x03(\t\x12\x1f\n\x0b\x63lose_input\x18\x03 \x01(\x0b\x32\n.dex.Value\"\xd5\x01\n\x0cStepMovement\x12\x11\n\tstep_type\x18\x01 \x01(\t\x12\x1e\n\nstep_input\x18\x02 \x01(\x0b\x32\n.dex.Value\x12&\n\x0cstep_options\x18\x03 \x01(\x0b\x32\x10.dex.StepOptions\x12,\n$from_step_execution_id_internal_only\x18\x04 \x01(\t\x12<\n\x1crecovery_error_internal_only\x18\x05 \x01(\x0b\x32\x16.dex.RecoveryErrorInfo\"-\n\x14\x43onditionCombination\x12\x15\n\rcondition_ids\x18\x01 \x03(\t\"\x9e\x02\n\x10WaitingCondition\x12\x39\n\x16waiting_condition_type\x18\x01 \x01(\x0e\x32\x19.dex.WaitingConditionType\x12-\n\x10timer_conditions\x18\x02 \x03(\x0b\x32\x13.dex.TimerCondition\x12\x31\n\x12\x63hannel_conditions\x18\x03 \x03(\x0b\x32\x15.dex.ChannelCondition\x12\x39\n\x16\x63ondition_combinations\x18\x04 \x03(\x0b\x32\x19.dex.ConditionCombination\x12\x32\n\x13sub_flow_conditions\x18\x05 \x03(\x0b\x32\x15.dex.SubFlowCondition\"\xa8\x02\n\x15WaitingConditionState\x12\x39\n\x16waiting_condition_type\x18\x01 \x01(\x0e\x32\x19.dex.WaitingConditionType\x12-\n\x10timer_conditions\x18\x02 \x03(\x0b\x32\x13.dex.TimerCondition\x12\x31\n\x12\x63hannel_conditions\x18\x03 \x03(\x0b\x32\x15.dex.ChannelCondition\x12\x39\n\x16\x63ondition_combinations\x18\x04 \x03(\x0b\x32\x19.dex.ConditionCombination\x12\x37\n\x13sub_flow_conditions\x18\x05 \x03(\x0b\x32\x1a.dex.SubFlowConditionState\"\xf9\x02\n\x0eSubFlowOptions\x12-\n\x0creuse_policy\x18\x01 \x01(\x0e\x32\x17.dex.SubFlowReusePolicy\x12\x1c\n\x14\x66low_timeout_seconds\x18\x02 \x01(\x05\x12 \n\x18\x66low_start_delay_seconds\x18\x03 \x01(\x05\x12*\n\x0cretry_policy\x18\x04 \x01(\x0b\x32\x14.dex.FlowRetryPolicy\x12\'\n\nattributes\x18\x05 \x03(\x0b\x32\x13.dex.AttributeWrite\x12-\n\x14\x66low_config_override\x18\x06 \x01(\x0b\x32\x0f.dex.FlowConfig\x12\x33\n\x13\x66low_timeout_policy\x18\x07 \x01(\x0e\x32\x16.dex.FlowTimeoutPolicy\x12?\n\x17timeout_handler_options\x18\x08 \x01(\x0b\x32\x1e.dex.FlowTimeoutHandlerOptions\"\xde\x01\n\x10SubFlowCondition\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\x12\x15\n\rsub_flow_type\x18\x02 \x01(\t\x12\x17\n\x0fstart_step_type\x18\x03 \x01(\t\x12\x1e\n\nstep_input\x18\x04 \x01(\x0b\x32\n.dex.Value\x12&\n\x0cstep_options\x18\x05 \x01(\x0b\x32\x10.dex.StepOptions\x12$\n\x07options\x18\x06 \x01(\x0b\x32\x13.dex.SubFlowOptions\x12\x16\n\x0esub_flow_index\x18\x07 \x01(\x05\"-\n\x15SubFlowConditionState\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\"g\n\x0eTimerCondition\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\x12\x18\n\x10\x64uration_seconds\x18\x02 \x01(\x03\x12%\n\x1d\x66iring_unix_timestamp_seconds\x18\x03 \x01(\x03\"\x84\x01\n\x10\x43hannelCondition\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\x12\x14\n\x0c\x63hannel_name\x18\x02 \x01(\t\x12\x15\n\x08\x61t_least\x18\x03 \x01(\x05H\x00\x88\x01\x01\x12\x14\n\x07\x61t_most\x18\x04 \x01(\x05H\x01\x88\x01\x01\x42\x0b\n\t_at_leastB\n\n\x08_at_most\"\xac\x01\n\x10\x43onditionResults\x12+\n\x0f\x63hannel_results\x18\x01 \x03(\x0b\x32\x12.dex.ChannelResult\x12\'\n\rtimer_results\x18\x02 \x03(\x0b\x32\x10.dex.TimerResult\x12\x17\n\x0fwait_for_failed\x18\x03 \x01(\x08\x12)\n\x10sub_flow_results\x18\x04 \x03(\x0b\x32\x0f.dex.FlowResult\"S\n\x0bTimerResult\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\x12.\n\x10\x63ondition_status\x18\x02 \x01(\x0e\x32\x14.dex.ConditionStatus\"\x87\x01\n\rChannelResult\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\x12.\n\x10\x63ondition_status\x18\x02 \x01(\x0e\x32\x14.dex.ConditionStatus\x12\x14\n\x0c\x63hannel_name\x18\x03 \x01(\t\x12\x1a\n\x06values\x18\x04 \x03(\x0b\x32\n.dex.Value\"i\n\x18\x43ontinueAsNewDumpRequest\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x10\n\x08page_num\x18\x03 \x01(\x05\x12\x1a\n\x12page_size_in_bytes\x18\x04 \x01(\x05\"j\n\x19\x43ontinueAsNewDumpResponse\x12\x14\n\x0cpage_content\x18\x01 \x01(\x0c\x12\x10\n\x08page_num\x18\x02 \x01(\x05\x12\x13\n\x0btotal_pages\x18\x03 \x01(\x05\x12\x10\n\x08\x63hecksum\x18\x04 \x01(\t\"6\n\rChannelValues\x12%\n\x08messages\x18\x01 \x03(\x0b\x32\x13.dex.ChannelMessage\"\x9f\x03\n StepExecutionCompletedConditions\x12g\n\x1a\x63ompleted_timer_conditions\x18\x01 \x03(\x0b\x32\x43.dex.StepExecutionCompletedConditions.CompletedTimerConditionsEntry\x12\x66\n\x1a\x63ompleted_sub_flow_results\x18\x02 \x03(\x0b\x32\x42.dex.StepExecutionCompletedConditions.CompletedSubFlowResultsEntry\x1aY\n\x1d\x43ompletedTimerConditionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\'\n\x05value\x18\x02 \x01(\x0e\x32\x18.dex.InternalTimerStatus:\x02\x38\x01\x1aO\n\x1c\x43ompletedSubFlowResultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\x1e\n\x05value\x18\x02 \x01(\x0b\x32\x0f.dex.FlowResult:\x02\x38\x01\"\xf3\x01\n\x17StepExecutionResumeInfo\x12\x19\n\x11step_execution_id\x18\x01 \x01(\t\x12\x1f\n\x04step\x18\x02 \x01(\x0b\x32\x11.dex.StepMovement\x12\x43\n\x14\x63ompleted_conditions\x18\x03 \x01(\x0b\x32%.dex.StepExecutionCompletedConditions\x12\x35\n\x11waiting_condition\x18\x04 \x01(\x0b\x32\x1a.dex.WaitingConditionState\x12 \n\x0fstep_exe_locals\x18\x05 \x03(\x0b\x32\x07.dex.KV\"\xce\x04\n\x18StepExecutionCounterInfo\x12X\n\x17step_type_started_count\x18\x01 \x03(\x0b\x32\x37.dex.StepExecutionCounterInfo.StepTypeStartedCountEntry\x12o\n#step_type_currently_executing_count\x18\x02 \x03(\x0b\x32\x42.dex.StepExecutionCounterInfo.StepTypeCurrentlyExecutingCountEntry\x12\'\n\x1ftotal_currently_executing_count\x18\x03 \x01(\x05\x12^\n\x1astep_active_execution_nums\x18\x04 \x03(\x0b\x32:.dex.StepExecutionCounterInfo.StepActiveExecutionNumsEntry\x1a;\n\x19StepTypeStartedCountEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a\x46\n$StepTypeCurrentlyExecutingCountEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1aY\n\x1cStepActiveExecutionNumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.dex.StepExecutionNumbers:\x02\x38\x01\"f\n\x0eStaleSkipTimer\x12\x19\n\x11step_execution_id\x18\x01 \x01(\t\x12\x1a\n\x12timer_condition_id\x18\x02 \x01(\t\x12\x1d\n\x15timer_condition_index\x18\x03 \x01(\x05\"\x92\x04\n\x11\x43ontinueAsNewDump\x12\x38\n\x1dsteps_to_start_from_beginning\x18\x01 \x03(\x0b\x32\x11.dex.StepMovement\x12?\n\x19step_executions_to_resume\x18\x02 \x03(\x0b\x32\x1c.dex.StepExecutionResumeInfo\x12\x45\n\x10\x63hannel_received\x18\x03 \x03(\x0b\x32+.dex.ContinueAsNewDump.ChannelReceivedEntry\x12\x33\n\x0c\x63ounter_info\x18\x04 \x01(\x0b\x32\x1d.dex.StepExecutionCounterInfo\x12/\n\x0cstep_outputs\x18\x05 \x03(\x0b\x32\x19.dex.StepCompletionOutput\x12.\n\x11stale_skip_timers\x18\x06 \x03(\x0b\x32\x13.dex.StaleSkipTimer\x12\x1b\n\nattributes\x18\x07 \x03(\x0b\x32\x07.dex.KV\x12<\n\x1cpending_attribute_sync_items\x18\x08 \x03(\x0b\x32\x16.dex.AttributeSyncItem\x1aJ\n\x14\x43hannelReceivedEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.dex.ChannelValues:\x02\x38\x01\"6\n\x12\x43ontinueAsNewInput\x12 \n\x18previous_internal_run_id\x18\x01 \x01(\t\"\xdc\x03\n\x18InterpreterWorkflowInput\x12\x11\n\tflow_type\x18\x01 \x01(\t\x12\'\n\x1f\x63onfigured_flow_timeout_seconds\x18\x02 \x01(\x05\x12\x33\n\x13\x66low_timeout_policy\x18\x03 \x01(\x0e\x32\x16.dex.FlowTimeoutPolicy\x12\x17\n\x0fstart_step_type\x18\x04 \x01(\t\x12\x1e\n\nstep_input\x18\x05 \x01(\x0b\x32\n.dex.Value\x12&\n\x0cstep_options\x18\x06 \x01(\x0b\x32\x10.dex.StepOptions\x12,\n\x0finit_attributes\x18\x07 \x03(\x0b\x32\x13.dex.AttributeWrite\x12\x1f\n\x06\x63onfig\x18\x08 \x01(\x0b\x32\x0f.dex.FlowConfig\x12&\n\x1eis_resume_from_continue_as_new\x18\t \x01(\x08\x12\x36\n\x15\x63ontinue_as_new_input\x18\n \x01(\x0b\x32\x17.dex.ContinueAsNewInput\x12?\n\x17timeout_handler_options\x18\x0b \x01(\x0b\x32\x1e.dex.FlowTimeoutHandlerOptions\"W\n\x19InterpreterWorkflowOutput\x12:\n\x17step_completion_outputs\x18\x01 \x03(\x0b\x32\x19.dex.StepCompletionOutput\"1\n\x1d\x42lobStoreCleanupWorkflowInput\x12\x10\n\x08store_id\x18\x01 \x01(\t\"7\n\x1e\x42lobStoreCleanupWorkflowOutput\x12\x15\n\rtotal_deleted\x18\x01 \x01(\x05\"~\n InvokeWaitForMethodActivityInput\x12(\n\rworker_target\x18\x01 \x01(\x0b\x32\x11.dex.WorkerTarget\x12\x30\n\x07request\x18\x02 \x01(\x0b\x32\x1f.dex.InvokeWaitForMethodRequest\"W\n!InvokeWaitForMethodActivityOutput\x12\x32\n\x08response\x18\x01 \x01(\x0b\x32 .dex.InvokeWaitForMethodResponse\"~\n InvokeExecuteMethodActivityInput\x12(\n\rworker_target\x18\x01 \x01(\x0b\x32\x11.dex.WorkerTarget\x12\x30\n\x07request\x18\x02 \x01(\x0b\x32\x1f.dex.InvokeExecuteMethodRequest\"7\n\x11RecoveryErrorInfo\x12\x0e\n\x06\x64\x65tail\x18\x01 \x01(\t\x12\x12\n\nerror_type\x18\x02 \x01(\t\"\xf5\x01\n InternalLocalStepActivityFailure\x12;\n\x17local_activity_metadata\x18\x01 \x01(\x0b\x32\x1a.dex.LocalActivityMetadata\x12\x1f\n\x17\x66irst_attempt_timestamp\x18\x02 \x01(\x03\x12.\n\x0emethod_options\x18\x03 \x01(\x0b\x32\x16.dex.StepMethodOptions\x12\x0f\n\x07\x61ttempt\x18\x04 \x01(\x05\x12\x32\n\x0e\x61\x63tivity_error\x18\x05 \x01(\x0b\x32\x1a.dex.InternalActivityError\"W\n!InvokeExecuteMethodActivityOutput\x12\x32\n\x08response\x18\x01 \x01(\x0b\x32 .dex.InvokeExecuteMethodResponse\"W\n%DumpFlowForContinueAsNewActivityInput\x12.\n\x07request\x18\x01 \x01(\x0b\x32\x1d.dex.ContinueAsNewDumpRequest\"Z\n&DumpFlowForContinueAsNewActivityOutput\x12\x30\n\x08response\x18\x01 \x01(\x0b\x32\x1e.dex.ContinueAsNewDumpResponse\"v\n\x1cInvokeWorkerRPCActivityInput\x12.\n\x08rpc_prep\x18\x01 \x01(\x0b\x32\x1c.dex.PrepareRpcQueryResponse\x12&\n\x07request\x18\x02 \x01(\x0b\x32\x15.dex.InvokeRPCRequest\"c\n\x1dInvokeWorkerRPCActivityOutput\x12.\n\x08response\x18\x01 \x01(\x0b\x32\x1c.dex.InvokeWorkerRPCResponse\x12\x12\n\nrequest_id\x18\x02 \x01(\t\"1\n\x1d\x43leanupBlobStoreActivityInput\x12\x10\n\x08store_id\x18\x01 \x01(\t\"7\n\x1e\x43leanupBlobStoreActivityOutput\x12\x15\n\rtotal_deleted\x18\x01 \x01(\x05\"P\n\x11\x41ttributeSyncItem\x12\x13\n\x0b\x63onfig_name\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12\x19\n\x05value\x18\x03 \x01(\x0b\x32\n.dex.Value\"n\n\x1fSyncAttributeBatchActivityInput\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12\x13\n\x0b\x63onfig_name\x18\x02 \x01(\t\x12%\n\x05items\x18\x03 \x03(\x0b\x32\x16.dex.AttributeSyncItem\"\x94\x01\n\x19StartSubFlowActivityInput\x12(\n\tcondition\x18\x01 \x01(\x0b\x32\x15.dex.SubFlowCondition\x12+\n\x12parent_flow_config\x18\x02 \x01(\x0b\x32\x0f.dex.FlowConfig\x12 \n\x18parent_step_execution_id\x18\x03 \x01(\t\"L\n\x1aStartSubFlowActivityOutput\x12.\n\x15immediate_flow_result\x18\x01 \x01(\x0b\x32\x0f.dex.FlowResult\"[\n\x1eSubFlowCompletionSignalRequest\x12\x13\n\x0bsub_flow_id\x18\x01 \x01(\t\x12$\n\x0b\x66low_result\x18\x02 \x01(\x0b\x32\x0f.dex.FlowResult\"t\n$ReportSubFlowCompletionActivityInput\x12\x16\n\x0eparent_flow_id\x18\x01 \x01(\t\x12\x34\n\x07request\x18\x02 \x01(\x0b\x32#.dex.SubFlowCompletionSignalRequest\"]\n%ReportSubFlowCompletionActivityOutput\x12\x34\n\x06status\x18\x01 \x01(\x0e\x32$.dex.SubFlowCompletionDeliveryStatus\"\x82\x03\n\x17\x45xecuteRpcSignalRequest\x12\x1d\n\trpc_input\x18\x01 \x01(\x0b\x32\n.dex.Value\x12\x1e\n\nrpc_output\x18\x02 \x01(\x0b\x32\n.dex.Value\x12.\n\x11upsert_attributes\x18\x03 \x03(\x0b\x32\x13.dex.AttributeWrite\x12(\n\rstep_decision\x18\x04 \x01(\x0b\x32\x11.dex.StepDecision\x12\x1e\n\rrecord_events\x18\x05 \x03(\x0b\x32\x07.dex.KV\x12/\n\x12publish_to_channel\x18\x06 \x03(\x0b\x32\x13.dex.ChannelMessage\x12\x1c\n\x14is_set_attribute_api\x18\x07 \x01(\x08\x12\x38\n\x13\x64\x65lete_from_channel\x18\x08 \x03(\x0b\x32\x1b.dex.ChannelMessageDeletion\x12%\n\x1dis_delete_channel_message_api\x18\t \x01(\x08\"n\n\x16SkipTimerSignalRequest\x12\x19\n\x11step_execution_id\x18\x01 \x01(\t\x12\x1a\n\x12timer_condition_id\x18\x02 \x01(\t\x12\x1d\n\x15timer_condition_index\x18\x03 \x01(\x05\"I\n\x15StopFlowSignalRequest\x12 \n\tstop_type\x18\x01 \x01(\x0e\x32\r.dex.StopType\x12\x0e\n\x06reason\x18\x02 \x01(\t\";\n\x19GetAttributesQueryRequest\x12\x0c\n\x04keys\x18\x01 \x03(\t\x12\x10\n\x08\x61ll_keys\x18\x02 \x01(\x08\"9\n\x1aGetAttributesQueryResponse\x12\x1b\n\nattributes\x18\x01 \x03(\x0b\x32\x07.dex.KV\"~\n\x16PrepareRpcQueryRequest\x12$\n\x1cload_attribute_map_instances\x18\x01 \x03(\t\x12\x1a\n\x12load_channel_names\x18\x02 \x03(\t\x12\"\n\x1aload_channel_map_instances\x18\x03 \x03(\t\"\xc9\x04\n\x17PrepareRpcQueryResponse\x12\x1b\n\nattributes\x18\x01 \x03(\x0b\x32\x07.dex.KV\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x1e\n\x16\x66low_started_timestamp\x18\x03 \x01(\x03\x12\x11\n\tflow_type\x18\x04 \x01(\t\x12(\n\rworker_target\x18\x05 \x01(\x0b\x32\x11.dex.WorkerTarget\x12\x45\n\rchannel_infos\x18\x06 \x03(\x0b\x32..dex.PrepareRpcQueryResponse.ChannelInfosEntry\x12X\n\x17loaded_channel_messages\x18\x07 \x03(\x0b\x32\x37.dex.PrepareRpcQueryResponse.LoadedChannelMessagesEntry\x12&\n\x1eloaded_attribute_map_instances\x18\x08 \x03(\t\x12\x1c\n\x14loaded_channel_names\x18\t \x03(\t\x12$\n\x1cloaded_channel_map_instances\x18\n \x03(\t\x1a\x45\n\x11\x43hannelInfosEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1f\n\x05value\x18\x02 \x01(\x0b\x32\x10.dex.ChannelInfo:\x02\x38\x01\x1aP\n\x1aLoadedChannelMessagesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.dex.ChannelValues:\x02\x38\x01\"r\n\tTimerInfo\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\x12%\n\x1d\x66iring_unix_timestamp_seconds\x18\x02 \x01(\x03\x12(\n\x06status\x18\x03 \x01(\x0e\x32\x18.dex.InternalTimerStatus\"/\n\rTimerInfoList\x12\x1e\n\x06timers\x18\x01 \x03(\x0b\x32\x0e.dex.TimerInfo\"\xf6\x01\n!GetCurrentTimerInfosQueryResponse\x12v\n\"step_execution_current_timer_infos\x18\x01 \x03(\x0b\x32J.dex.GetCurrentTimerInfosQueryResponse.StepExecutionCurrentTimerInfosEntry\x1aY\n#StepExecutionCurrentTimerInfosEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.dex.TimerInfoList:\x02\x38\x01\"V\n)GetScheduledGreedyTimerTimesQueryResponse\x12)\n\x11pending_scheduled\x18\x01 \x03(\x0b\x32\x0e.dex.TimerInfo\"\xc4\x01\n\x11\x44\x65\x62ugDumpResponse\x12\x1f\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x0f.dex.FlowConfig\x12(\n\x08snapshot\x18\x02 \x01(\x0b\x32\x16.dex.ContinueAsNewDump\x12%\n\x1d\x66iring_timers_unix_timestamps\x18\x03 \x03(\x03\x12=\n\x16\x61\x63tive_step_executions\x18\x04 \x03(\x0b\x32\x1d.dex.ActiveStepExecutionState\"A\n\x15InvokeRpcUpdateResult\x12(\n\x08response\x18\x01 \x01(\x0b\x32\x16.dex.InvokeRPCResponse\"\'\n\x14StepExecutionNumbers\x12\x0f\n\x07numbers\x18\x01 \x03(\x05*\xcb\x01\n\tIndexType\x12\x1a\n\x16INDEX_TYPE_UNSPECIFIED\x10\x00\x12\x16\n\x12INDEX_TYPE_KEYWORD\x10\x01\x12\x13\n\x0fINDEX_TYPE_TEXT\x10\x02\x12\x1c\n\x18INDEX_TYPE_KEYWORD_ARRAY\x10\x03\x12\x12\n\x0eINDEX_TYPE_INT\x10\x04\x12\x15\n\x11INDEX_TYPE_DOUBLE\x10\x05\x12\x13\n\x0fINDEX_TYPE_BOOL\x10\x06\x12\x17\n\x13INDEX_TYPE_DATETIME\x10\x07*\xbc\x01\n\x1aWaitForMethodFailurePolicy\x12.\n*WAIT_FOR_METHOD_FAILURE_POLICY_UNSPECIFIED\x10\x00\x12\x37\n3WAIT_FOR_METHOD_FAILURE_POLICY_FAIL_FLOW_ON_FAILURE\x10\x01\x12\x35\n1WAIT_FOR_METHOD_FAILURE_POLICY_PROCEED_ON_FAILURE\x10\x02*\xd0\x01\n\x1a\x45xecuteMethodFailurePolicy\x12-\n)EXECUTE_METHOD_FAILURE_POLICY_UNSPECIFIED\x10\x00\x12\x45\nAEXECUTE_METHOD_FAILURE_POLICY_FAIL_FLOW_ON_EXECUTE_METHOD_FAILURE\x10\x01\x12<\n8EXECUTE_METHOD_FAILURE_POLICY_PROCEED_TO_CONFIGURED_STEP\x10\x02*\xe6\x01\n\rIdReusePolicy\x12\x1f\n\x1bID_REUSE_POLICY_UNSPECIFIED\x10\x00\x12\x37\n3ID_REUSE_POLICY_ALLOW_IF_PREVIOUS_EXISTS_ABNORMALLY\x10\x01\x12\'\n#ID_REUSE_POLICY_ALLOW_IF_NO_RUNNING\x10\x02\x12\"\n\x1eID_REUSE_POLICY_DISALLOW_REUSE\x10\x03\x12.\n*ID_REUSE_POLICY_ALLOW_TERMINATE_IF_RUNNING\x10\x04*\xcf\x01\n\x14\x41\x63tiveStepSearchMode\x12\'\n#ACTIVE_STEP_SEARCH_MODE_UNSPECIFIED\x10\x00\x12+\n\'ACTIVE_STEP_SEARCH_MODE_ENABLED_FOR_ALL\x10\x01\x12;\n7ACTIVE_STEP_SEARCH_MODE_ENABLED_FOR_STEPS_WITH_WAIT_FOR\x10\x02\x12$\n ACTIVE_STEP_SEARCH_MODE_DISABLED\x10\x03*f\n\x0eStepDurability\x12\x1f\n\x1bSTEP_DURABILITY_UNSPECIFIED\x10\x00\x12\x18\n\x14STEP_DURABILITY_SYNC\x10\x01\x12\x19\n\x15STEP_DURABILITY_ASYNC\x10\x02*\x97\x01\n\x11\x46lowTimeoutPolicy\x12#\n\x1f\x46LOW_TIMEOUT_POLICY_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x46LOW_TIMEOUT_POLICY_FAIL\x10\x01\x12\x1e\n\x1a\x46LOW_TIMEOUT_POLICY_CANCEL\x10\x02\x12\x1f\n\x1b\x46LOW_TIMEOUT_POLICY_HANDLER\x10\x03*h\n\x08StopType\x12\x19\n\x15STOP_TYPE_UNSPECIFIED\x10\x00\x12\x14\n\x10STOP_TYPE_CANCEL\x10\x01\x12\x17\n\x13STOP_TYPE_TERMINATE\x10\x02\x12\x12\n\x0eSTOP_TYPE_FAIL\x10\x03*\x80\x02\n\nFlowStatus\x12\x1b\n\x17\x46LOW_STATUS_UNSPECIFIED\x10\x00\x12\x17\n\x13\x46LOW_STATUS_RUNNING\x10\x01\x12\x19\n\x15\x46LOW_STATUS_COMPLETED\x10\x02\x12\x16\n\x12\x46LOW_STATUS_FAILED\x10\x03\x12\x31\n-FLOW_STATUS_SERVER_SIDE_TIMEOUT_INTERNAL_ONLY\x10\x04\x12\x1a\n\x16\x46LOW_STATUS_TERMINATED\x10\x05\x12\x18\n\x14\x46LOW_STATUS_CANCELED\x10\x06\x12 \n\x1c\x46LOW_STATUS_CONTINUED_AS_NEW\x10\x07*\x9e\x02\n\rFlowErrorType\x12\x1f\n\x1b\x46LOW_ERROR_TYPE_UNSPECIFIED\x10\x00\x12.\n*FLOW_ERROR_TYPE_STEP_DECISION_FAILING_FLOW\x10\x01\x12+\n\'FLOW_ERROR_TYPE_CLIENT_API_FAILING_FLOW\x10\x02\x12#\n\x1f\x46LOW_ERROR_TYPE_WORKER_API_FAIL\x10\x03\x12*\n&FLOW_ERROR_TYPE_INVALID_USER_FLOW_CODE\x10\x04\x12 \n\x1c\x46LOW_ERROR_TYPE_FLOW_TIMEOUT\x10\x05\x12\x1c\n\x18\x46LOW_ERROR_TYPE_INTERNAL\x10\x06*\x93\x01\n\x16PendingStepMethodPhase\x12)\n%PENDING_STEP_METHOD_PHASE_UNSPECIFIED\x10\x00\x12\'\n#PENDING_STEP_METHOD_PHASE_SCHEDULED\x10\x01\x12%\n!PENDING_STEP_METHOD_PHASE_STARTED\x10\x02*q\n\x0f\x41\x63tiveStepPhase\x12!\n\x1d\x41\x43TIVE_STEP_PHASE_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x41\x43TIVE_STEP_PHASE_ACTIVE\x10\x01\x12\x1d\n\x19\x41\x43TIVE_STEP_PHASE_WAITING\x10\x02*\xbd\x01\n\rFlowResetType\x12\x1f\n\x1b\x46LOW_RESET_TYPE_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x46LOW_RESET_TYPE_BEGINNING\x10\x01\x12&\n\"FLOW_RESET_TYPE_HISTORY_EVENT_TIME\x10\x02\x12\x1d\n\x19\x46LOW_RESET_TYPE_STEP_TYPE\x10\x03\x12%\n!FLOW_RESET_TYPE_STEP_EXECUTION_ID\x10\x04*\x86\x01\n\x13\x46lowResetStepMethod\x12&\n\"FLOW_RESET_STEP_METHOD_UNSPECIFIED\x10\x00\x12#\n\x1f\x46LOW_RESET_STEP_METHOD_WAIT_FOR\x10\x01\x12\"\n\x1e\x46LOW_RESET_STEP_METHOD_EXECUTE\x10\x02*\xc6\x02\n\x16\x41ttributeMatchOperator\x12(\n$ATTRIBUTE_MATCH_OPERATOR_UNSPECIFIED\x10\x00\x12\"\n\x1e\x41TTRIBUTE_MATCH_OPERATOR_EQUAL\x10\x01\x12&\n\"ATTRIBUTE_MATCH_OPERATOR_NOT_EQUAL\x10\x02\x12)\n%ATTRIBUTE_MATCH_OPERATOR_GREATER_THAN\x10\x03\x12\x32\n.ATTRIBUTE_MATCH_OPERATOR_GREATER_THAN_OR_EQUAL\x10\x04\x12&\n\"ATTRIBUTE_MATCH_OPERATOR_LESS_THAN\x10\x05\x12/\n+ATTRIBUTE_MATCH_OPERATOR_LESS_THAN_OR_EQUAL\x10\x06*\xd3\x02\n\x0e\x45rrorSubStatus\x12 \n\x1c\x45RROR_SUB_STATUS_UNSPECIFIED\x10\x00\x12\"\n\x1e\x45RROR_SUB_STATUS_UNCATEGORIZED\x10\x01\x12)\n%ERROR_SUB_STATUS_FLOW_ALREADY_STARTED\x10\x02\x12$\n ERROR_SUB_STATUS_FLOW_NOT_EXISTS\x10\x03\x12%\n!ERROR_SUB_STATUS_WORKER_API_ERROR\x10\x04\x12\'\n#ERROR_SUB_STATUS_LONG_POLL_TIME_OUT\x10\x05\x12.\n*ERROR_SUB_STATUS_CHANNEL_MESSAGE_NOT_FOUND\x10\x06\x12*\n&ERROR_SUB_STATUS_WAIT_HANDLER_TIME_OUT\x10\x07*\x8b\x02\n\x11\x43loseDecisionType\x12#\n\x1f\x43LOSE_DECISION_TYPE_UNSPECIFIED\x10\x00\x12\x38\n4CLOSE_DECISION_TYPE_FORCE_COMPLETE_ON_CHANNELS_EMPTY\x10\x01\x12)\n%CLOSE_DECISION_TYPE_GRACEFUL_COMPLETE\x10\x02\x12&\n\"CLOSE_DECISION_TYPE_FORCE_COMPLETE\x10\x03\x12\"\n\x1e\x43LOSE_DECISION_TYPE_FORCE_FAIL\x10\x04\x12 \n\x1c\x43LOSE_DECISION_TYPE_DEAD_END\x10\x05*\xc8\x01\n\x14WaitingConditionType\x12&\n\"WAITING_CONDITION_TYPE_UNSPECIFIED\x10\x00\x12(\n$WAITING_CONDITION_TYPE_ALL_COMPLETED\x10\x01\x12(\n$WAITING_CONDITION_TYPE_ANY_COMPLETED\x10\x02\x12\x34\n0WAITING_CONDITION_TYPE_ANY_COMBINATION_COMPLETED\x10\x03*\xc7\x01\n\x12SubFlowReusePolicy\x12%\n!SUB_FLOW_REUSE_POLICY_UNSPECIFIED\x10\x00\x12 \n\x1cSUB_FLOW_REUSE_POLICY_ATTACH\x10\x01\x12>\n:SUB_FLOW_REUSE_POLICY_RESTART_IF_PREVIOUS_EXITS_ABNORMALLY\x10\x02\x12(\n$SUB_FLOW_REUSE_POLICY_ALWAYS_RESTART\x10\x03*q\n\x0f\x43onditionStatus\x12 \n\x1c\x43ONDITION_STATUS_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x43ONDITION_STATUS_WAITING\x10\x01\x12\x1e\n\x1a\x43ONDITION_STATUS_COMPLETED\x10\x02*\xa3\x01\n\x13InternalTimerStatus\x12%\n!INTERNAL_TIMER_STATUS_UNSPECIFIED\x10\x00\x12!\n\x1dINTERNAL_TIMER_STATUS_PENDING\x10\x01\x12\x1f\n\x1bINTERNAL_TIMER_STATUS_FIRED\x10\x02\x12!\n\x1dINTERNAL_TIMER_STATUS_SKIPPED\x10\x03*\xe9\x02\n\x0fUpdateErrorType\x12!\n\x1dUPDATE_ERROR_TYPE_UNSPECIFIED\x10\x00\x12/\n+UPDATE_ERROR_TYPE_CONTINUE_AS_NEW_PREEMPTED\x10\x01\x12&\n\"UPDATE_ERROR_TYPE_INVALID_ARGUMENT\x10\x02\x12)\n%UPDATE_ERROR_TYPE_FAILED_PRECONDITION\x10\x03\x12\'\n#UPDATE_ERROR_TYPE_DEADLINE_EXCEEDED\x10\x04\x12.\n*UPDATE_ERROR_TYPE_RPC_ACQUIRE_LOCK_FAILURE\x10\x05\x12%\n!UPDATE_ERROR_TYPE_SERVER_INTERNAL\x10\x06\x12/\n+UPDATE_ERROR_TYPE_CHANNEL_MESSAGE_NOT_FOUND\x10\x07*\xcd\x01\n\x1fSubFlowCompletionDeliveryStatus\x12\x33\n/SUB_FLOW_COMPLETION_DELIVERY_STATUS_UNSPECIFIED\x10\x00\x12\x31\n-SUB_FLOW_COMPLETION_DELIVERY_STATUS_DELIVERED\x10\x01\x12\x42\n>SUB_FLOW_COMPLETION_DELIVERY_STATUS_PARENT_CLOSED_OR_NOT_FOUND\x10\x02\x32\xdc\x0e\n\x0b\x46lowService\x12:\n\tStartFlow\x12\x15.dex.StartFlowRequest\x1a\x16.dex.StartFlowResponse\x12H\n\x10PublishToChannel\x12\x1c.dex.PublishToChannelRequest\x1a\x16.google.protobuf.Empty\x12U\n\x12GetChannelMessages\x12\x1e.dex.GetChannelMessagesRequest\x1a\x1f.dex.GetChannelMessagesResponse\x12P\n\x14\x44\x65leteChannelMessage\x12 .dex.DeleteChannelMessageRequest\x1a\x16.google.protobuf.Empty\x12>\n\x0bWriteStream\x12\x17.dex.WriteStreamRequest\x1a\x16.google.protobuf.Empty\x12=\n\nReadStream\x12\x16.dex.ReadStreamRequest\x1a\x17.dex.ReadStreamResponse\x12U\n\x12ListStreamMessages\x12\x1e.dex.ListStreamMessagesRequest\x1a\x1f.dex.ListStreamMessagesResponse\x12\x38\n\x08StopFlow\x12\x14.dex.StopFlowRequest\x1a\x16.google.protobuf.Empty\x12\x46\n\rGetAttributes\x12\x19.dex.GetAttributesRequest\x1a\x1a.dex.GetAttributesResponse\x12\x42\n\rSetAttributes\x12\x19.dex.SetAttributesRequest\x1a\x16.google.protobuf.Empty\x12:\n\tLoadBlobs\x12\x15.dex.LoadBlobsRequest\x1a\x16.dex.LoadBlobsResponse\x12\x37\n\x0bWaitForFlow\x12\x17.dex.WaitForFlowRequest\x1a\x0f.dex.FlowResult\x12@\n\x0bSearchFlows\x12\x17.dex.SearchFlowsRequest\x1a\x18.dex.SearchFlowsResponse\x12W\n\x14SyncAttributeIndexes\x12\x1e.dex.SyncAttributeIndexRequest\x1a\x1f.dex.SyncAttributeIndexResponse\x12I\n\x0eGetFlowSummary\x12\x1a.dex.GetFlowSummaryRequest\x1a\x1b.dex.GetFlowSummaryResponse\x12O\n\x10GetHistoryEvents\x12\x1c.dex.GetHistoryEventsRequest\x1a\x1d.dex.GetHistoryEventsResponse\x12X\n\x13WaitForHistoryEvent\x12\x1f.dex.WaitForHistoryEventRequest\x1a .dex.WaitForHistoryEventResponse\x12\x43\n\x0cGetFlowState\x12\x18.dex.GetFlowStateRequest\x1a\x19.dex.GetFlowStateResponse\x12:\n\tResetFlow\x12\x15.dex.ResetFlowRequest\x1a\x16.dex.ResetFlowResponse\x12:\n\tInvokeRPC\x12\x15.dex.InvokeRPCRequest\x1a\x16.dex.InvokeRPCResponse\x12:\n\tSkipTimer\x12\x15.dex.SkipTimerRequest\x1a\x16.google.protobuf.Empty\x12H\n\x10UpdateFlowConfig\x12\x1c.dex.UpdateFlowConfigRequest\x1a\x16.google.protobuf.Empty\x12^\n\x15WaitForStepCompletion\x12!.dex.WaitForStepCompletionRequest\x1a\".dex.WaitForStepCompletionResponse\x12O\n\x10WaitForAttribute\x12\x1c.dex.WaitForAttributeRequest\x1a\x1d.dex.WaitForAttributeResponse\x12P\n\x14TriggerContinueAsNew\x12 .dex.TriggerContinueAsNewRequest\x1a\x16.google.protobuf.Empty\x12\x36\n\x0bHealthCheck\x12\x16.google.protobuf.Empty\x1a\x0f.dex.HealthInfo2\x91\x02\n\rWorkerService\x12X\n\x13InvokeWaitForMethod\x12\x1f.dex.InvokeWaitForMethodRequest\x1a\x1e.dex.InvokeWaitForMethodOutput0\x01\x12X\n\x13InvokeExecuteMethod\x12\x1f.dex.InvokeExecuteMethodRequest\x1a\x1e.dex.InvokeExecuteMethodOutput0\x01\x12L\n\x0fInvokeWorkerRPC\x12\x1b.dex.InvokeWorkerRPCRequest\x1a\x1c.dex.InvokeWorkerRPCResponse2l\n\x0fInternalService\x12Y\n\x18\x44umpFlowForContinueAsNew\x12\x1d.dex.ContinueAsNewDumpRequest\x1a\x1e.dex.ContinueAsNewDumpResponseB!\n\x13io.superdurable.genB\x08\x44\x65xProtoP\x01\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -74,52 +74,52 @@ _globals['_PREPARERPCQUERYRESPONSE_LOADEDCHANNELMESSAGESENTRY']._serialized_options = b'8\001' _globals['_GETCURRENTTIMERINFOSQUERYRESPONSE_STEPEXECUTIONCURRENTTIMERINFOSENTRY']._loaded_options = None _globals['_GETCURRENTTIMERINFOSQUERYRESPONSE_STEPEXECUTIONCURRENTTIMERINFOSENTRY']._serialized_options = b'8\001' - _globals['_INDEXTYPE']._serialized_start=29182 - _globals['_INDEXTYPE']._serialized_end=29385 - _globals['_WAITFORMETHODFAILUREPOLICY']._serialized_start=29388 - _globals['_WAITFORMETHODFAILUREPOLICY']._serialized_end=29576 - _globals['_EXECUTEMETHODFAILUREPOLICY']._serialized_start=29579 - _globals['_EXECUTEMETHODFAILUREPOLICY']._serialized_end=29787 - _globals['_IDREUSEPOLICY']._serialized_start=29790 - _globals['_IDREUSEPOLICY']._serialized_end=30020 - _globals['_ACTIVESTEPSEARCHMODE']._serialized_start=30023 - _globals['_ACTIVESTEPSEARCHMODE']._serialized_end=30230 - _globals['_STEPDURABILITY']._serialized_start=30232 - _globals['_STEPDURABILITY']._serialized_end=30334 - _globals['_FLOWTIMEOUTPOLICY']._serialized_start=30337 - _globals['_FLOWTIMEOUTPOLICY']._serialized_end=30488 - _globals['_STOPTYPE']._serialized_start=30490 - _globals['_STOPTYPE']._serialized_end=30594 - _globals['_FLOWSTATUS']._serialized_start=30597 - _globals['_FLOWSTATUS']._serialized_end=30853 - _globals['_FLOWERRORTYPE']._serialized_start=30856 - _globals['_FLOWERRORTYPE']._serialized_end=31142 - _globals['_PENDINGSTEPMETHODPHASE']._serialized_start=31145 - _globals['_PENDINGSTEPMETHODPHASE']._serialized_end=31292 - _globals['_ACTIVESTEPPHASE']._serialized_start=31294 - _globals['_ACTIVESTEPPHASE']._serialized_end=31407 - _globals['_FLOWRESETTYPE']._serialized_start=31410 - _globals['_FLOWRESETTYPE']._serialized_end=31599 - _globals['_FLOWRESETSTEPMETHOD']._serialized_start=31602 - _globals['_FLOWRESETSTEPMETHOD']._serialized_end=31736 - _globals['_ATTRIBUTEMATCHOPERATOR']._serialized_start=31739 - _globals['_ATTRIBUTEMATCHOPERATOR']._serialized_end=32065 - _globals['_ERRORSUBSTATUS']._serialized_start=32068 - _globals['_ERRORSUBSTATUS']._serialized_end=32407 - _globals['_CLOSEDECISIONTYPE']._serialized_start=32410 - _globals['_CLOSEDECISIONTYPE']._serialized_end=32677 - _globals['_WAITINGCONDITIONTYPE']._serialized_start=32680 - _globals['_WAITINGCONDITIONTYPE']._serialized_end=32880 - _globals['_SUBFLOWREUSEPOLICY']._serialized_start=32883 - _globals['_SUBFLOWREUSEPOLICY']._serialized_end=33082 - _globals['_CONDITIONSTATUS']._serialized_start=33084 - _globals['_CONDITIONSTATUS']._serialized_end=33197 - _globals['_INTERNALTIMERSTATUS']._serialized_start=33200 - _globals['_INTERNALTIMERSTATUS']._serialized_end=33363 - _globals['_UPDATEERRORTYPE']._serialized_start=33366 - _globals['_UPDATEERRORTYPE']._serialized_end=33727 - _globals['_SUBFLOWCOMPLETIONDELIVERYSTATUS']._serialized_start=33730 - _globals['_SUBFLOWCOMPLETIONDELIVERYSTATUS']._serialized_end=33935 + _globals['_INDEXTYPE']._serialized_start=29271 + _globals['_INDEXTYPE']._serialized_end=29474 + _globals['_WAITFORMETHODFAILUREPOLICY']._serialized_start=29477 + _globals['_WAITFORMETHODFAILUREPOLICY']._serialized_end=29665 + _globals['_EXECUTEMETHODFAILUREPOLICY']._serialized_start=29668 + _globals['_EXECUTEMETHODFAILUREPOLICY']._serialized_end=29876 + _globals['_IDREUSEPOLICY']._serialized_start=29879 + _globals['_IDREUSEPOLICY']._serialized_end=30109 + _globals['_ACTIVESTEPSEARCHMODE']._serialized_start=30112 + _globals['_ACTIVESTEPSEARCHMODE']._serialized_end=30319 + _globals['_STEPDURABILITY']._serialized_start=30321 + _globals['_STEPDURABILITY']._serialized_end=30423 + _globals['_FLOWTIMEOUTPOLICY']._serialized_start=30426 + _globals['_FLOWTIMEOUTPOLICY']._serialized_end=30577 + _globals['_STOPTYPE']._serialized_start=30579 + _globals['_STOPTYPE']._serialized_end=30683 + _globals['_FLOWSTATUS']._serialized_start=30686 + _globals['_FLOWSTATUS']._serialized_end=30942 + _globals['_FLOWERRORTYPE']._serialized_start=30945 + _globals['_FLOWERRORTYPE']._serialized_end=31231 + _globals['_PENDINGSTEPMETHODPHASE']._serialized_start=31234 + _globals['_PENDINGSTEPMETHODPHASE']._serialized_end=31381 + _globals['_ACTIVESTEPPHASE']._serialized_start=31383 + _globals['_ACTIVESTEPPHASE']._serialized_end=31496 + _globals['_FLOWRESETTYPE']._serialized_start=31499 + _globals['_FLOWRESETTYPE']._serialized_end=31688 + _globals['_FLOWRESETSTEPMETHOD']._serialized_start=31691 + _globals['_FLOWRESETSTEPMETHOD']._serialized_end=31825 + _globals['_ATTRIBUTEMATCHOPERATOR']._serialized_start=31828 + _globals['_ATTRIBUTEMATCHOPERATOR']._serialized_end=32154 + _globals['_ERRORSUBSTATUS']._serialized_start=32157 + _globals['_ERRORSUBSTATUS']._serialized_end=32496 + _globals['_CLOSEDECISIONTYPE']._serialized_start=32499 + _globals['_CLOSEDECISIONTYPE']._serialized_end=32766 + _globals['_WAITINGCONDITIONTYPE']._serialized_start=32769 + _globals['_WAITINGCONDITIONTYPE']._serialized_end=32969 + _globals['_SUBFLOWREUSEPOLICY']._serialized_start=32972 + _globals['_SUBFLOWREUSEPOLICY']._serialized_end=33171 + _globals['_CONDITIONSTATUS']._serialized_start=33173 + _globals['_CONDITIONSTATUS']._serialized_end=33286 + _globals['_INTERNALTIMERSTATUS']._serialized_start=33289 + _globals['_INTERNALTIMERSTATUS']._serialized_end=33452 + _globals['_UPDATEERRORTYPE']._serialized_start=33455 + _globals['_UPDATEERRORTYPE']._serialized_end=33816 + _globals['_SUBFLOWCOMPLETIONDELIVERYSTATUS']._serialized_start=33819 + _globals['_SUBFLOWCOMPLETIONDELIVERYSTATUS']._serialized_end=34024 _globals['_VALUE']._serialized_start=143 _globals['_VALUE']._serialized_end=427 _globals['_ENCODEDOBJECT']._serialized_start=429 @@ -190,312 +190,314 @@ _globals['_GETATTRIBUTESRESPONSE']._serialized_end=5685 _globals['_SETATTRIBUTESREQUEST']._serialized_start=5687 _globals['_SETATTRIBUTESREQUEST']._serialized_end=5803 - _globals['_LOADBLOBSREQUEST']._serialized_start=5805 - _globals['_LOADBLOBSREQUEST']._serialized_end=5851 - _globals['_LOADBLOBSRESPONSE']._serialized_start=5854 - _globals['_LOADBLOBSRESPONSE']._serialized_end=5984 - _globals['_LOADBLOBSRESPONSE_VALUESENTRY']._serialized_start=5927 - _globals['_LOADBLOBSRESPONSE_VALUESENTRY']._serialized_end=5984 - _globals['_WAITFORFLOWREQUEST']._serialized_start=5986 - _globals['_WAITFORFLOWREQUEST']._serialized_end=6089 - _globals['_STEPCOMPLETIONOUTPUT']._serialized_start=6092 - _globals['_STEPCOMPLETIONOUTPUT']._serialized_end=6223 - _globals['_FLOWRESULT']._serialized_start=6226 - _globals['_FLOWRESULT']._serialized_end=6383 - _globals['_SEARCHFLOWSREQUEST']._serialized_start=6385 - _globals['_SEARCHFLOWSREQUEST']._serialized_end=6464 - _globals['_SEARCHFLOWSRESPONSE']._serialized_start=6466 - _globals['_SEARCHFLOWSRESPONSE']._serialized_end=6562 - _globals['_SEARCHFLOWSRESPONSEENTRY']._serialized_start=6565 - _globals['_SEARCHFLOWSRESPONSEENTRY']._serialized_end=6814 - _globals['_SYNCATTRIBUTEINDEXREQUEST']._serialized_start=6817 - _globals['_SYNCATTRIBUTEINDEXREQUEST']._serialized_end=6998 - _globals['_SYNCATTRIBUTEINDEXREQUEST_ATTRIBUTEINDEXESENTRY']._serialized_start=6927 - _globals['_SYNCATTRIBUTEINDEXREQUEST_ATTRIBUTEINDEXESENTRY']._serialized_end=6998 - _globals['_SYNCATTRIBUTEINDEXRESPONSE']._serialized_start=7000 - _globals['_SYNCATTRIBUTEINDEXRESPONSE']._serialized_end=7028 - _globals['_FLOWEXECUTIONID']._serialized_start=7030 - _globals['_FLOWEXECUTIONID']._serialized_end=7080 - _globals['_GETFLOWSUMMARYREQUEST']._serialized_start=7082 - _globals['_GETFLOWSUMMARYREQUEST']._serialized_end=7138 - _globals['_GETFLOWSUMMARYRESPONSE']._serialized_start=7141 - _globals['_GETFLOWSUMMARYRESPONSE']._serialized_end=7409 - _globals['_INTERNALASYNCSTEPINPUTSNAPSHOT']._serialized_start=7412 - _globals['_INTERNALASYNCSTEPINPUTSNAPSHOT']._serialized_end=7624 - _globals['_INTERNALLOCALACTIVITYINPUT']._serialized_start=7626 - _globals['_INTERNALLOCALACTIVITYINPUT']._serialized_end=7741 - _globals['_GETHISTORYEVENTSREQUEST']._serialized_start=7744 - _globals['_GETHISTORYEVENTSREQUEST']._serialized_end=7888 - _globals['_GETHISTORYEVENTSRESPONSE']._serialized_start=7890 - _globals['_GETHISTORYEVENTSRESPONSE']._serialized_end=8012 - _globals['_FLOWHISTORYEVENT']._serialized_start=8015 - _globals['_FLOWHISTORYEVENT']._serialized_end=8884 - _globals['_TIMETRAVELFORKHISTORYEVENT']._serialized_start=8886 - _globals['_TIMETRAVELFORKHISTORYEVENT']._serialized_end=8939 - _globals['_FLOWSTARTEDORCONTINUEDHISTORYEVENT']._serialized_start=8942 - _globals['_FLOWSTARTEDORCONTINUEDHISTORYEVENT']._serialized_end=9372 - _globals['_FLOWINITIALSTART']._serialized_start=9375 - _globals['_FLOWINITIALSTART']._serialized_end=9527 - _globals['_FLOWCONTINUEDSTART']._serialized_start=9530 - _globals['_FLOWCONTINUEDSTART']._serialized_end=9924 - _globals['_FLOWCONTINUEDSTART_PENDINGCHANNELMESSAGESENTRY']._serialized_start=9843 - _globals['_FLOWCONTINUEDSTART_PENDINGCHANNELMESSAGESENTRY']._serialized_end=9924 - _globals['_FLOWCLOSEDHISTORYEVENT']._serialized_start=9927 - _globals['_FLOWCLOSEDHISTORYEVENT']._serialized_end=10125 - _globals['_STEPMETHODPENDINGEVENT']._serialized_start=10128 - _globals['_STEPMETHODPENDINGEVENT']._serialized_end=10284 - _globals['_STEPMETHODFAILURE']._serialized_start=10286 - _globals['_STEPMETHODFAILURE']._serialized_end=10389 - _globals['_STEPMETHODOPTIONS']._serialized_start=10391 - _globals['_STEPMETHODOPTIONS']._serialized_end=10510 - _globals['_STEPMETHODEVENTINPUT']._serialized_start=10513 - _globals['_STEPMETHODEVENTINPUT']._serialized_end=10707 - _globals['_STEPMETHODEVENTCONTEXT']._serialized_start=10710 - _globals['_STEPMETHODEVENTCONTEXT']._serialized_end=11070 - _globals['_STEPWAITFORCOMPLETEDOUTPUT']._serialized_start=11073 - _globals['_STEPWAITFORCOMPLETEDOUTPUT']._serialized_end=11386 - _globals['_STEPEXECUTECOMPLETEDOUTPUT']._serialized_start=11389 - _globals['_STEPEXECUTECOMPLETEDOUTPUT']._serialized_end=11693 - _globals['_STEPMETHODFAILEDOUTPUT']._serialized_start=11695 - _globals['_STEPMETHODFAILEDOUTPUT']._serialized_end=11760 - _globals['_STEPWAITFORCOMPLETEDEVENT']._serialized_start=11763 - _globals['_STEPWAITFORCOMPLETEDEVENT']._serialized_end=11927 - _globals['_STEPWAITFORFAILEDEVENT']._serialized_start=11930 - _globals['_STEPWAITFORFAILEDEVENT']._serialized_end=12087 - _globals['_STEPEXECUTECOMPLETEDEVENT']._serialized_start=12090 - _globals['_STEPEXECUTECOMPLETEDEVENT']._serialized_end=12254 - _globals['_STEPEXECUTEFAILEDEVENT']._serialized_start=12257 - _globals['_STEPEXECUTEFAILEDEVENT']._serialized_end=12414 - _globals['_RPCEXECUTIONCOMPLETEDEVENT']._serialized_start=12417 - _globals['_RPCEXECUTIONCOMPLETEDEVENT']._serialized_end=12777 - _globals['_CHANNELEXTERNALPUBLISHEVENT']._serialized_start=12779 - _globals['_CHANNELEXTERNALPUBLISHEVENT']._serialized_end=12847 - _globals['_CHANNELEXTERNALDELETEEVENT']._serialized_start=12849 - _globals['_CHANNELEXTERNALDELETEEVENT']._serialized_end=12924 - _globals['_WAITFORHISTORYEVENTREQUEST']._serialized_start=12926 - _globals['_WAITFORHISTORYEVENTREQUEST']._serialized_end=13019 - _globals['_WAITFORHISTORYEVENTRESPONSE']._serialized_start=13022 - _globals['_WAITFORHISTORYEVENTRESPONSE']._serialized_end=13151 - _globals['_ACTIVESTEPEXECUTIONSTATE']._serialized_start=13154 - _globals['_ACTIVESTEPEXECUTIONSTATE']._serialized_end=13579 - _globals['_GETFLOWSTATEREQUEST']._serialized_start=13581 - _globals['_GETFLOWSTATEREQUEST']._serialized_end=13635 - _globals['_GETFLOWSTATERESPONSE']._serialized_start=13638 - _globals['_GETFLOWSTATERESPONSE']._serialized_end=14055 - _globals['_GETFLOWSTATERESPONSE_PENDINGCHANNELMESSAGESENTRY']._serialized_start=9843 - _globals['_GETFLOWSTATERESPONSE_PENDINGCHANNELMESSAGESENTRY']._serialized_end=9924 - _globals['_RESETFLOWREQUEST']._serialized_start=14058 - _globals['_RESETFLOWREQUEST']._serialized_end=14315 - _globals['_RESETFLOWRESPONSE']._serialized_start=14317 - _globals['_RESETFLOWRESPONSE']._serialized_end=14352 - _globals['_INVOKERPCREQUEST']._serialized_start=14355 - _globals['_INVOKERPCREQUEST']._serialized_end=14653 - _globals['_INVOKERPCRESPONSE']._serialized_start=14655 - _globals['_INVOKERPCRESPONSE']._serialized_end=14702 - _globals['_SKIPTIMERREQUEST']._serialized_start=14705 - _globals['_SKIPTIMERREQUEST']._serialized_end=14873 - _globals['_UPDATEFLOWCONFIGREQUEST']._serialized_start=14875 - _globals['_UPDATEFLOWCONFIGREQUEST']._serialized_end=14971 - _globals['_WAITFORSTEPCOMPLETIONREQUEST']._serialized_start=14974 - _globals['_WAITFORSTEPCOMPLETIONREQUEST']._serialized_end=15118 - _globals['_WAITFORSTEPCOMPLETIONRESPONSE']._serialized_start=15120 - _globals['_WAITFORSTEPCOMPLETIONRESPONSE']._serialized_end=15151 - _globals['_WAITFORATTRIBUTEREQUEST']._serialized_start=15153 - _globals['_WAITFORATTRIBUTEREQUEST']._serialized_end=15278 - _globals['_WAITFORATTRIBUTERESPONSE']._serialized_start=15280 - _globals['_WAITFORATTRIBUTERESPONSE']._serialized_end=15341 - _globals['_ATTRIBUTEMATCH']._serialized_start=15343 - _globals['_ATTRIBUTEMATCH']._serialized_end=15448 - _globals['_TRIGGERCONTINUEASNEWREQUEST']._serialized_start=15450 - _globals['_TRIGGERCONTINUEASNEWREQUEST']._serialized_end=15512 - _globals['_HEALTHINFO']._serialized_start=15514 - _globals['_HEALTHINFO']._serialized_end=15581 - _globals['_SERVICEERRORRESPONSE']._serialized_start=15584 - _globals['_SERVICEERRORRESPONSE']._serialized_end=15818 - _globals['_WORKERERRORRESPONSE']._serialized_start=15820 - _globals['_WORKERERRORRESPONSE']._serialized_end=15927 - _globals['_INTERNALACTIVITYERROR']._serialized_start=15929 - _globals['_INTERNALACTIVITYERROR']._serialized_end=16051 - _globals['_INTERNALWORKERERROR']._serialized_start=16053 - _globals['_INTERNALWORKERERROR']._serialized_end=16131 - _globals['_INTERNALFLOWERROR']._serialized_start=16133 - _globals['_INTERNALFLOWERROR']._serialized_end=16242 - _globals['_CHANNELINFO']._serialized_start=16244 - _globals['_CHANNELINFO']._serialized_end=16271 - _globals['_INVOKEWAITFORMETHODREQUEST']._serialized_start=16274 - _globals['_INVOKEWAITFORMETHODREQUEST']._serialized_end=16860 - _globals['_INVOKEWAITFORMETHODREQUEST_CHANNELINFOSENTRY']._serialized_start=16709 - _globals['_INVOKEWAITFORMETHODREQUEST_CHANNELINFOSENTRY']._serialized_end=16778 - _globals['_INVOKEWAITFORMETHODREQUEST_LOADEDCHANNELMESSAGESENTRY']._serialized_start=16780 - _globals['_INVOKEWAITFORMETHODREQUEST_LOADEDCHANNELMESSAGESENTRY']._serialized_end=16860 - _globals['_INVOKEWAITFORMETHODRESPONSE']._serialized_start=16863 - _globals['_INVOKEWAITFORMETHODRESPONSE']._serialized_end=17231 - _globals['_STEPMETHODHEARTBEAT']._serialized_start=17233 - _globals['_STEPMETHODHEARTBEAT']._serialized_end=17281 - _globals['_STEPSTREAMWRITE']._serialized_start=17283 - _globals['_STEPSTREAMWRITE']._serialized_end=17379 - _globals['_INVOKEWAITFORMETHODOUTPUT']._serialized_start=17382 - _globals['_INVOKEWAITFORMETHODOUTPUT']._serialized_end=17564 - _globals['_INVOKEEXECUTEMETHODREQUEST']._serialized_start=17567 - _globals['_INVOKEEXECUTEMETHODREQUEST']._serialized_end=18237 - _globals['_INVOKEEXECUTEMETHODREQUEST_CHANNELINFOSENTRY']._serialized_start=16709 - _globals['_INVOKEEXECUTEMETHODREQUEST_CHANNELINFOSENTRY']._serialized_end=16778 - _globals['_INVOKEEXECUTEMETHODREQUEST_LOADEDCHANNELMESSAGESENTRY']._serialized_start=16780 - _globals['_INVOKEEXECUTEMETHODREQUEST_LOADEDCHANNELMESSAGESENTRY']._serialized_end=16860 - _globals['_INVOKEEXECUTEMETHODRESPONSE']._serialized_start=18240 - _globals['_INVOKEEXECUTEMETHODRESPONSE']._serialized_end=18600 - _globals['_INVOKEEXECUTEMETHODOUTPUT']._serialized_start=18603 - _globals['_INVOKEEXECUTEMETHODOUTPUT']._serialized_end=18785 - _globals['_INVOKEWORKERRPCREQUEST']._serialized_start=18788 - _globals['_INVOKEWORKERRPCREQUEST']._serialized_end=19356 - _globals['_INVOKEWORKERRPCREQUEST_CHANNELINFOSENTRY']._serialized_start=16709 - _globals['_INVOKEWORKERRPCREQUEST_CHANNELINFOSENTRY']._serialized_end=16778 - _globals['_INVOKEWORKERRPCREQUEST_LOADEDCHANNELMESSAGESENTRY']._serialized_start=16780 - _globals['_INVOKEWORKERRPCREQUEST_LOADEDCHANNELMESSAGESENTRY']._serialized_end=16860 - _globals['_INVOKEWORKERRPCRESPONSE']._serialized_start=19359 - _globals['_INVOKEWORKERRPCRESPONSE']._serialized_end=19641 - _globals['_STEPDECISION']._serialized_start=19644 - _globals['_STEPDECISION']._serialized_end=19803 - _globals['_CLOSEDECISION']._serialized_start=19806 - _globals['_CLOSEDECISION']._serialized_end=19942 - _globals['_STEPMOVEMENT']._serialized_start=19945 - _globals['_STEPMOVEMENT']._serialized_end=20158 - _globals['_CONDITIONCOMBINATION']._serialized_start=20160 - _globals['_CONDITIONCOMBINATION']._serialized_end=20205 - _globals['_WAITINGCONDITION']._serialized_start=20208 - _globals['_WAITINGCONDITION']._serialized_end=20494 - _globals['_WAITINGCONDITIONSTATE']._serialized_start=20497 - _globals['_WAITINGCONDITIONSTATE']._serialized_end=20793 - _globals['_SUBFLOWOPTIONS']._serialized_start=20796 - _globals['_SUBFLOWOPTIONS']._serialized_end=21173 - _globals['_SUBFLOWCONDITION']._serialized_start=21176 - _globals['_SUBFLOWCONDITION']._serialized_end=21398 - _globals['_SUBFLOWCONDITIONSTATE']._serialized_start=21400 - _globals['_SUBFLOWCONDITIONSTATE']._serialized_end=21445 - _globals['_TIMERCONDITION']._serialized_start=21447 - _globals['_TIMERCONDITION']._serialized_end=21550 - _globals['_CHANNELCONDITION']._serialized_start=21553 - _globals['_CHANNELCONDITION']._serialized_end=21685 - _globals['_CONDITIONRESULTS']._serialized_start=21688 - _globals['_CONDITIONRESULTS']._serialized_end=21860 - _globals['_TIMERRESULT']._serialized_start=21862 - _globals['_TIMERRESULT']._serialized_end=21945 - _globals['_CHANNELRESULT']._serialized_start=21948 - _globals['_CHANNELRESULT']._serialized_end=22083 - _globals['_CONTINUEASNEWDUMPREQUEST']._serialized_start=22085 - _globals['_CONTINUEASNEWDUMPREQUEST']._serialized_end=22190 - _globals['_CONTINUEASNEWDUMPRESPONSE']._serialized_start=22192 - _globals['_CONTINUEASNEWDUMPRESPONSE']._serialized_end=22298 - _globals['_CHANNELVALUES']._serialized_start=22300 - _globals['_CHANNELVALUES']._serialized_end=22354 - _globals['_STEPEXECUTIONCOMPLETEDCONDITIONS']._serialized_start=22357 - _globals['_STEPEXECUTIONCOMPLETEDCONDITIONS']._serialized_end=22772 - _globals['_STEPEXECUTIONCOMPLETEDCONDITIONS_COMPLETEDTIMERCONDITIONSENTRY']._serialized_start=22602 - _globals['_STEPEXECUTIONCOMPLETEDCONDITIONS_COMPLETEDTIMERCONDITIONSENTRY']._serialized_end=22691 - _globals['_STEPEXECUTIONCOMPLETEDCONDITIONS_COMPLETEDSUBFLOWRESULTSENTRY']._serialized_start=22693 - _globals['_STEPEXECUTIONCOMPLETEDCONDITIONS_COMPLETEDSUBFLOWRESULTSENTRY']._serialized_end=22772 - _globals['_STEPEXECUTIONRESUMEINFO']._serialized_start=22775 - _globals['_STEPEXECUTIONRESUMEINFO']._serialized_end=23018 - _globals['_STEPEXECUTIONCOUNTERINFO']._serialized_start=23021 - _globals['_STEPEXECUTIONCOUNTERINFO']._serialized_end=23611 - _globals['_STEPEXECUTIONCOUNTERINFO_STEPTYPESTARTEDCOUNTENTRY']._serialized_start=23389 - _globals['_STEPEXECUTIONCOUNTERINFO_STEPTYPESTARTEDCOUNTENTRY']._serialized_end=23448 - _globals['_STEPEXECUTIONCOUNTERINFO_STEPTYPECURRENTLYEXECUTINGCOUNTENTRY']._serialized_start=23450 - _globals['_STEPEXECUTIONCOUNTERINFO_STEPTYPECURRENTLYEXECUTINGCOUNTENTRY']._serialized_end=23520 - _globals['_STEPEXECUTIONCOUNTERINFO_STEPACTIVEEXECUTIONNUMSENTRY']._serialized_start=23522 - _globals['_STEPEXECUTIONCOUNTERINFO_STEPACTIVEEXECUTIONNUMSENTRY']._serialized_end=23611 - _globals['_STALESKIPTIMER']._serialized_start=23613 - _globals['_STALESKIPTIMER']._serialized_end=23715 - _globals['_CONTINUEASNEWDUMP']._serialized_start=23718 - _globals['_CONTINUEASNEWDUMP']._serialized_end=24248 - _globals['_CONTINUEASNEWDUMP_CHANNELRECEIVEDENTRY']._serialized_start=24174 - _globals['_CONTINUEASNEWDUMP_CHANNELRECEIVEDENTRY']._serialized_end=24248 - _globals['_CONTINUEASNEWINPUT']._serialized_start=24250 - _globals['_CONTINUEASNEWINPUT']._serialized_end=24304 - _globals['_INTERPRETERWORKFLOWINPUT']._serialized_start=24307 - _globals['_INTERPRETERWORKFLOWINPUT']._serialized_end=24783 - _globals['_INTERPRETERWORKFLOWOUTPUT']._serialized_start=24785 - _globals['_INTERPRETERWORKFLOWOUTPUT']._serialized_end=24872 - _globals['_BLOBSTORECLEANUPWORKFLOWINPUT']._serialized_start=24874 - _globals['_BLOBSTORECLEANUPWORKFLOWINPUT']._serialized_end=24923 - _globals['_BLOBSTORECLEANUPWORKFLOWOUTPUT']._serialized_start=24925 - _globals['_BLOBSTORECLEANUPWORKFLOWOUTPUT']._serialized_end=24980 - _globals['_INVOKEWAITFORMETHODACTIVITYINPUT']._serialized_start=24982 - _globals['_INVOKEWAITFORMETHODACTIVITYINPUT']._serialized_end=25108 - _globals['_INVOKEWAITFORMETHODACTIVITYOUTPUT']._serialized_start=25110 - _globals['_INVOKEWAITFORMETHODACTIVITYOUTPUT']._serialized_end=25197 - _globals['_INVOKEEXECUTEMETHODACTIVITYINPUT']._serialized_start=25199 - _globals['_INVOKEEXECUTEMETHODACTIVITYINPUT']._serialized_end=25325 - _globals['_RECOVERYERRORINFO']._serialized_start=25327 - _globals['_RECOVERYERRORINFO']._serialized_end=25382 - _globals['_INTERNALLOCALSTEPACTIVITYFAILURE']._serialized_start=25385 - _globals['_INTERNALLOCALSTEPACTIVITYFAILURE']._serialized_end=25630 - _globals['_INVOKEEXECUTEMETHODACTIVITYOUTPUT']._serialized_start=25632 - _globals['_INVOKEEXECUTEMETHODACTIVITYOUTPUT']._serialized_end=25719 - _globals['_DUMPFLOWFORCONTINUEASNEWACTIVITYINPUT']._serialized_start=25721 - _globals['_DUMPFLOWFORCONTINUEASNEWACTIVITYINPUT']._serialized_end=25808 - _globals['_DUMPFLOWFORCONTINUEASNEWACTIVITYOUTPUT']._serialized_start=25810 - _globals['_DUMPFLOWFORCONTINUEASNEWACTIVITYOUTPUT']._serialized_end=25900 - _globals['_INVOKEWORKERRPCACTIVITYINPUT']._serialized_start=25902 - _globals['_INVOKEWORKERRPCACTIVITYINPUT']._serialized_end=26020 - _globals['_INVOKEWORKERRPCACTIVITYOUTPUT']._serialized_start=26022 - _globals['_INVOKEWORKERRPCACTIVITYOUTPUT']._serialized_end=26121 - _globals['_CLEANUPBLOBSTOREACTIVITYINPUT']._serialized_start=26123 - _globals['_CLEANUPBLOBSTOREACTIVITYINPUT']._serialized_end=26172 - _globals['_CLEANUPBLOBSTOREACTIVITYOUTPUT']._serialized_start=26174 - _globals['_CLEANUPBLOBSTOREACTIVITYOUTPUT']._serialized_end=26229 - _globals['_ATTRIBUTESYNCITEM']._serialized_start=26231 - _globals['_ATTRIBUTESYNCITEM']._serialized_end=26311 - _globals['_SYNCATTRIBUTEBATCHACTIVITYINPUT']._serialized_start=26313 - _globals['_SYNCATTRIBUTEBATCHACTIVITYINPUT']._serialized_end=26423 - _globals['_STARTSUBFLOWACTIVITYINPUT']._serialized_start=26426 - _globals['_STARTSUBFLOWACTIVITYINPUT']._serialized_end=26574 - _globals['_STARTSUBFLOWACTIVITYOUTPUT']._serialized_start=26576 - _globals['_STARTSUBFLOWACTIVITYOUTPUT']._serialized_end=26652 - _globals['_SUBFLOWCOMPLETIONSIGNALREQUEST']._serialized_start=26654 - _globals['_SUBFLOWCOMPLETIONSIGNALREQUEST']._serialized_end=26745 - _globals['_REPORTSUBFLOWCOMPLETIONACTIVITYINPUT']._serialized_start=26747 - _globals['_REPORTSUBFLOWCOMPLETIONACTIVITYINPUT']._serialized_end=26863 - _globals['_REPORTSUBFLOWCOMPLETIONACTIVITYOUTPUT']._serialized_start=26865 - _globals['_REPORTSUBFLOWCOMPLETIONACTIVITYOUTPUT']._serialized_end=26958 - _globals['_EXECUTERPCSIGNALREQUEST']._serialized_start=26961 - _globals['_EXECUTERPCSIGNALREQUEST']._serialized_end=27347 - _globals['_SKIPTIMERSIGNALREQUEST']._serialized_start=27349 - _globals['_SKIPTIMERSIGNALREQUEST']._serialized_end=27459 - _globals['_STOPFLOWSIGNALREQUEST']._serialized_start=27461 - _globals['_STOPFLOWSIGNALREQUEST']._serialized_end=27534 - _globals['_GETATTRIBUTESQUERYREQUEST']._serialized_start=27536 - _globals['_GETATTRIBUTESQUERYREQUEST']._serialized_end=27595 - _globals['_GETATTRIBUTESQUERYRESPONSE']._serialized_start=27597 - _globals['_GETATTRIBUTESQUERYRESPONSE']._serialized_end=27654 - _globals['_PREPARERPCQUERYREQUEST']._serialized_start=27656 - _globals['_PREPARERPCQUERYREQUEST']._serialized_end=27782 - _globals['_PREPARERPCQUERYRESPONSE']._serialized_start=27785 - _globals['_PREPARERPCQUERYRESPONSE']._serialized_end=28370 - _globals['_PREPARERPCQUERYRESPONSE_CHANNELINFOSENTRY']._serialized_start=16709 - _globals['_PREPARERPCQUERYRESPONSE_CHANNELINFOSENTRY']._serialized_end=16778 - _globals['_PREPARERPCQUERYRESPONSE_LOADEDCHANNELMESSAGESENTRY']._serialized_start=16780 - _globals['_PREPARERPCQUERYRESPONSE_LOADEDCHANNELMESSAGESENTRY']._serialized_end=16860 - _globals['_TIMERINFO']._serialized_start=28372 - _globals['_TIMERINFO']._serialized_end=28486 - _globals['_TIMERINFOLIST']._serialized_start=28488 - _globals['_TIMERINFOLIST']._serialized_end=28535 - _globals['_GETCURRENTTIMERINFOSQUERYRESPONSE']._serialized_start=28538 - _globals['_GETCURRENTTIMERINFOSQUERYRESPONSE']._serialized_end=28784 - _globals['_GETCURRENTTIMERINFOSQUERYRESPONSE_STEPEXECUTIONCURRENTTIMERINFOSENTRY']._serialized_start=28695 - _globals['_GETCURRENTTIMERINFOSQUERYRESPONSE_STEPEXECUTIONCURRENTTIMERINFOSENTRY']._serialized_end=28784 - _globals['_GETSCHEDULEDGREEDYTIMERTIMESQUERYRESPONSE']._serialized_start=28786 - _globals['_GETSCHEDULEDGREEDYTIMERTIMESQUERYRESPONSE']._serialized_end=28872 - _globals['_DEBUGDUMPRESPONSE']._serialized_start=28875 - _globals['_DEBUGDUMPRESPONSE']._serialized_end=29071 - _globals['_INVOKERPCUPDATERESULT']._serialized_start=29073 - _globals['_INVOKERPCUPDATERESULT']._serialized_end=29138 - _globals['_STEPEXECUTIONNUMBERS']._serialized_start=29140 - _globals['_STEPEXECUTIONNUMBERS']._serialized_end=29179 - _globals['_FLOWSERVICE']._serialized_start=33938 - _globals['_FLOWSERVICE']._serialized_end=35822 - _globals['_WORKERSERVICE']._serialized_start=35825 - _globals['_WORKERSERVICE']._serialized_end=36098 - _globals['_INTERNALSERVICE']._serialized_start=36100 - _globals['_INTERNALSERVICE']._serialized_end=36208 + _globals['_LOADBLOBREQUESTENTRY']._serialized_start=5805 + _globals['_LOADBLOBREQUESTENTRY']._serialized_end=5876 + _globals['_LOADBLOBSREQUEST']._serialized_start=5878 + _globals['_LOADBLOBSREQUEST']._serialized_end=5940 + _globals['_LOADBLOBSRESPONSE']._serialized_start=5943 + _globals['_LOADBLOBSRESPONSE']._serialized_end=6073 + _globals['_LOADBLOBSRESPONSE_VALUESENTRY']._serialized_start=6016 + _globals['_LOADBLOBSRESPONSE_VALUESENTRY']._serialized_end=6073 + _globals['_WAITFORFLOWREQUEST']._serialized_start=6075 + _globals['_WAITFORFLOWREQUEST']._serialized_end=6178 + _globals['_STEPCOMPLETIONOUTPUT']._serialized_start=6181 + _globals['_STEPCOMPLETIONOUTPUT']._serialized_end=6312 + _globals['_FLOWRESULT']._serialized_start=6315 + _globals['_FLOWRESULT']._serialized_end=6472 + _globals['_SEARCHFLOWSREQUEST']._serialized_start=6474 + _globals['_SEARCHFLOWSREQUEST']._serialized_end=6553 + _globals['_SEARCHFLOWSRESPONSE']._serialized_start=6555 + _globals['_SEARCHFLOWSRESPONSE']._serialized_end=6651 + _globals['_SEARCHFLOWSRESPONSEENTRY']._serialized_start=6654 + _globals['_SEARCHFLOWSRESPONSEENTRY']._serialized_end=6903 + _globals['_SYNCATTRIBUTEINDEXREQUEST']._serialized_start=6906 + _globals['_SYNCATTRIBUTEINDEXREQUEST']._serialized_end=7087 + _globals['_SYNCATTRIBUTEINDEXREQUEST_ATTRIBUTEINDEXESENTRY']._serialized_start=7016 + _globals['_SYNCATTRIBUTEINDEXREQUEST_ATTRIBUTEINDEXESENTRY']._serialized_end=7087 + _globals['_SYNCATTRIBUTEINDEXRESPONSE']._serialized_start=7089 + _globals['_SYNCATTRIBUTEINDEXRESPONSE']._serialized_end=7117 + _globals['_FLOWEXECUTIONID']._serialized_start=7119 + _globals['_FLOWEXECUTIONID']._serialized_end=7169 + _globals['_GETFLOWSUMMARYREQUEST']._serialized_start=7171 + _globals['_GETFLOWSUMMARYREQUEST']._serialized_end=7227 + _globals['_GETFLOWSUMMARYRESPONSE']._serialized_start=7230 + _globals['_GETFLOWSUMMARYRESPONSE']._serialized_end=7498 + _globals['_INTERNALASYNCSTEPINPUTSNAPSHOT']._serialized_start=7501 + _globals['_INTERNALASYNCSTEPINPUTSNAPSHOT']._serialized_end=7713 + _globals['_INTERNALLOCALACTIVITYINPUT']._serialized_start=7715 + _globals['_INTERNALLOCALACTIVITYINPUT']._serialized_end=7830 + _globals['_GETHISTORYEVENTSREQUEST']._serialized_start=7833 + _globals['_GETHISTORYEVENTSREQUEST']._serialized_end=7977 + _globals['_GETHISTORYEVENTSRESPONSE']._serialized_start=7979 + _globals['_GETHISTORYEVENTSRESPONSE']._serialized_end=8101 + _globals['_FLOWHISTORYEVENT']._serialized_start=8104 + _globals['_FLOWHISTORYEVENT']._serialized_end=8973 + _globals['_TIMETRAVELFORKHISTORYEVENT']._serialized_start=8975 + _globals['_TIMETRAVELFORKHISTORYEVENT']._serialized_end=9028 + _globals['_FLOWSTARTEDORCONTINUEDHISTORYEVENT']._serialized_start=9031 + _globals['_FLOWSTARTEDORCONTINUEDHISTORYEVENT']._serialized_end=9461 + _globals['_FLOWINITIALSTART']._serialized_start=9464 + _globals['_FLOWINITIALSTART']._serialized_end=9616 + _globals['_FLOWCONTINUEDSTART']._serialized_start=9619 + _globals['_FLOWCONTINUEDSTART']._serialized_end=10013 + _globals['_FLOWCONTINUEDSTART_PENDINGCHANNELMESSAGESENTRY']._serialized_start=9932 + _globals['_FLOWCONTINUEDSTART_PENDINGCHANNELMESSAGESENTRY']._serialized_end=10013 + _globals['_FLOWCLOSEDHISTORYEVENT']._serialized_start=10016 + _globals['_FLOWCLOSEDHISTORYEVENT']._serialized_end=10214 + _globals['_STEPMETHODPENDINGEVENT']._serialized_start=10217 + _globals['_STEPMETHODPENDINGEVENT']._serialized_end=10373 + _globals['_STEPMETHODFAILURE']._serialized_start=10375 + _globals['_STEPMETHODFAILURE']._serialized_end=10478 + _globals['_STEPMETHODOPTIONS']._serialized_start=10480 + _globals['_STEPMETHODOPTIONS']._serialized_end=10599 + _globals['_STEPMETHODEVENTINPUT']._serialized_start=10602 + _globals['_STEPMETHODEVENTINPUT']._serialized_end=10796 + _globals['_STEPMETHODEVENTCONTEXT']._serialized_start=10799 + _globals['_STEPMETHODEVENTCONTEXT']._serialized_end=11159 + _globals['_STEPWAITFORCOMPLETEDOUTPUT']._serialized_start=11162 + _globals['_STEPWAITFORCOMPLETEDOUTPUT']._serialized_end=11475 + _globals['_STEPEXECUTECOMPLETEDOUTPUT']._serialized_start=11478 + _globals['_STEPEXECUTECOMPLETEDOUTPUT']._serialized_end=11782 + _globals['_STEPMETHODFAILEDOUTPUT']._serialized_start=11784 + _globals['_STEPMETHODFAILEDOUTPUT']._serialized_end=11849 + _globals['_STEPWAITFORCOMPLETEDEVENT']._serialized_start=11852 + _globals['_STEPWAITFORCOMPLETEDEVENT']._serialized_end=12016 + _globals['_STEPWAITFORFAILEDEVENT']._serialized_start=12019 + _globals['_STEPWAITFORFAILEDEVENT']._serialized_end=12176 + _globals['_STEPEXECUTECOMPLETEDEVENT']._serialized_start=12179 + _globals['_STEPEXECUTECOMPLETEDEVENT']._serialized_end=12343 + _globals['_STEPEXECUTEFAILEDEVENT']._serialized_start=12346 + _globals['_STEPEXECUTEFAILEDEVENT']._serialized_end=12503 + _globals['_RPCEXECUTIONCOMPLETEDEVENT']._serialized_start=12506 + _globals['_RPCEXECUTIONCOMPLETEDEVENT']._serialized_end=12866 + _globals['_CHANNELEXTERNALPUBLISHEVENT']._serialized_start=12868 + _globals['_CHANNELEXTERNALPUBLISHEVENT']._serialized_end=12936 + _globals['_CHANNELEXTERNALDELETEEVENT']._serialized_start=12938 + _globals['_CHANNELEXTERNALDELETEEVENT']._serialized_end=13013 + _globals['_WAITFORHISTORYEVENTREQUEST']._serialized_start=13015 + _globals['_WAITFORHISTORYEVENTREQUEST']._serialized_end=13108 + _globals['_WAITFORHISTORYEVENTRESPONSE']._serialized_start=13111 + _globals['_WAITFORHISTORYEVENTRESPONSE']._serialized_end=13240 + _globals['_ACTIVESTEPEXECUTIONSTATE']._serialized_start=13243 + _globals['_ACTIVESTEPEXECUTIONSTATE']._serialized_end=13668 + _globals['_GETFLOWSTATEREQUEST']._serialized_start=13670 + _globals['_GETFLOWSTATEREQUEST']._serialized_end=13724 + _globals['_GETFLOWSTATERESPONSE']._serialized_start=13727 + _globals['_GETFLOWSTATERESPONSE']._serialized_end=14144 + _globals['_GETFLOWSTATERESPONSE_PENDINGCHANNELMESSAGESENTRY']._serialized_start=9932 + _globals['_GETFLOWSTATERESPONSE_PENDINGCHANNELMESSAGESENTRY']._serialized_end=10013 + _globals['_RESETFLOWREQUEST']._serialized_start=14147 + _globals['_RESETFLOWREQUEST']._serialized_end=14404 + _globals['_RESETFLOWRESPONSE']._serialized_start=14406 + _globals['_RESETFLOWRESPONSE']._serialized_end=14441 + _globals['_INVOKERPCREQUEST']._serialized_start=14444 + _globals['_INVOKERPCREQUEST']._serialized_end=14742 + _globals['_INVOKERPCRESPONSE']._serialized_start=14744 + _globals['_INVOKERPCRESPONSE']._serialized_end=14791 + _globals['_SKIPTIMERREQUEST']._serialized_start=14794 + _globals['_SKIPTIMERREQUEST']._serialized_end=14962 + _globals['_UPDATEFLOWCONFIGREQUEST']._serialized_start=14964 + _globals['_UPDATEFLOWCONFIGREQUEST']._serialized_end=15060 + _globals['_WAITFORSTEPCOMPLETIONREQUEST']._serialized_start=15063 + _globals['_WAITFORSTEPCOMPLETIONREQUEST']._serialized_end=15207 + _globals['_WAITFORSTEPCOMPLETIONRESPONSE']._serialized_start=15209 + _globals['_WAITFORSTEPCOMPLETIONRESPONSE']._serialized_end=15240 + _globals['_WAITFORATTRIBUTEREQUEST']._serialized_start=15242 + _globals['_WAITFORATTRIBUTEREQUEST']._serialized_end=15367 + _globals['_WAITFORATTRIBUTERESPONSE']._serialized_start=15369 + _globals['_WAITFORATTRIBUTERESPONSE']._serialized_end=15430 + _globals['_ATTRIBUTEMATCH']._serialized_start=15432 + _globals['_ATTRIBUTEMATCH']._serialized_end=15537 + _globals['_TRIGGERCONTINUEASNEWREQUEST']._serialized_start=15539 + _globals['_TRIGGERCONTINUEASNEWREQUEST']._serialized_end=15601 + _globals['_HEALTHINFO']._serialized_start=15603 + _globals['_HEALTHINFO']._serialized_end=15670 + _globals['_SERVICEERRORRESPONSE']._serialized_start=15673 + _globals['_SERVICEERRORRESPONSE']._serialized_end=15907 + _globals['_WORKERERRORRESPONSE']._serialized_start=15909 + _globals['_WORKERERRORRESPONSE']._serialized_end=16016 + _globals['_INTERNALACTIVITYERROR']._serialized_start=16018 + _globals['_INTERNALACTIVITYERROR']._serialized_end=16140 + _globals['_INTERNALWORKERERROR']._serialized_start=16142 + _globals['_INTERNALWORKERERROR']._serialized_end=16220 + _globals['_INTERNALFLOWERROR']._serialized_start=16222 + _globals['_INTERNALFLOWERROR']._serialized_end=16331 + _globals['_CHANNELINFO']._serialized_start=16333 + _globals['_CHANNELINFO']._serialized_end=16360 + _globals['_INVOKEWAITFORMETHODREQUEST']._serialized_start=16363 + _globals['_INVOKEWAITFORMETHODREQUEST']._serialized_end=16949 + _globals['_INVOKEWAITFORMETHODREQUEST_CHANNELINFOSENTRY']._serialized_start=16798 + _globals['_INVOKEWAITFORMETHODREQUEST_CHANNELINFOSENTRY']._serialized_end=16867 + _globals['_INVOKEWAITFORMETHODREQUEST_LOADEDCHANNELMESSAGESENTRY']._serialized_start=16869 + _globals['_INVOKEWAITFORMETHODREQUEST_LOADEDCHANNELMESSAGESENTRY']._serialized_end=16949 + _globals['_INVOKEWAITFORMETHODRESPONSE']._serialized_start=16952 + _globals['_INVOKEWAITFORMETHODRESPONSE']._serialized_end=17320 + _globals['_STEPMETHODHEARTBEAT']._serialized_start=17322 + _globals['_STEPMETHODHEARTBEAT']._serialized_end=17370 + _globals['_STEPSTREAMWRITE']._serialized_start=17372 + _globals['_STEPSTREAMWRITE']._serialized_end=17468 + _globals['_INVOKEWAITFORMETHODOUTPUT']._serialized_start=17471 + _globals['_INVOKEWAITFORMETHODOUTPUT']._serialized_end=17653 + _globals['_INVOKEEXECUTEMETHODREQUEST']._serialized_start=17656 + _globals['_INVOKEEXECUTEMETHODREQUEST']._serialized_end=18326 + _globals['_INVOKEEXECUTEMETHODREQUEST_CHANNELINFOSENTRY']._serialized_start=16798 + _globals['_INVOKEEXECUTEMETHODREQUEST_CHANNELINFOSENTRY']._serialized_end=16867 + _globals['_INVOKEEXECUTEMETHODREQUEST_LOADEDCHANNELMESSAGESENTRY']._serialized_start=16869 + _globals['_INVOKEEXECUTEMETHODREQUEST_LOADEDCHANNELMESSAGESENTRY']._serialized_end=16949 + _globals['_INVOKEEXECUTEMETHODRESPONSE']._serialized_start=18329 + _globals['_INVOKEEXECUTEMETHODRESPONSE']._serialized_end=18689 + _globals['_INVOKEEXECUTEMETHODOUTPUT']._serialized_start=18692 + _globals['_INVOKEEXECUTEMETHODOUTPUT']._serialized_end=18874 + _globals['_INVOKEWORKERRPCREQUEST']._serialized_start=18877 + _globals['_INVOKEWORKERRPCREQUEST']._serialized_end=19445 + _globals['_INVOKEWORKERRPCREQUEST_CHANNELINFOSENTRY']._serialized_start=16798 + _globals['_INVOKEWORKERRPCREQUEST_CHANNELINFOSENTRY']._serialized_end=16867 + _globals['_INVOKEWORKERRPCREQUEST_LOADEDCHANNELMESSAGESENTRY']._serialized_start=16869 + _globals['_INVOKEWORKERRPCREQUEST_LOADEDCHANNELMESSAGESENTRY']._serialized_end=16949 + _globals['_INVOKEWORKERRPCRESPONSE']._serialized_start=19448 + _globals['_INVOKEWORKERRPCRESPONSE']._serialized_end=19730 + _globals['_STEPDECISION']._serialized_start=19733 + _globals['_STEPDECISION']._serialized_end=19892 + _globals['_CLOSEDECISION']._serialized_start=19895 + _globals['_CLOSEDECISION']._serialized_end=20031 + _globals['_STEPMOVEMENT']._serialized_start=20034 + _globals['_STEPMOVEMENT']._serialized_end=20247 + _globals['_CONDITIONCOMBINATION']._serialized_start=20249 + _globals['_CONDITIONCOMBINATION']._serialized_end=20294 + _globals['_WAITINGCONDITION']._serialized_start=20297 + _globals['_WAITINGCONDITION']._serialized_end=20583 + _globals['_WAITINGCONDITIONSTATE']._serialized_start=20586 + _globals['_WAITINGCONDITIONSTATE']._serialized_end=20882 + _globals['_SUBFLOWOPTIONS']._serialized_start=20885 + _globals['_SUBFLOWOPTIONS']._serialized_end=21262 + _globals['_SUBFLOWCONDITION']._serialized_start=21265 + _globals['_SUBFLOWCONDITION']._serialized_end=21487 + _globals['_SUBFLOWCONDITIONSTATE']._serialized_start=21489 + _globals['_SUBFLOWCONDITIONSTATE']._serialized_end=21534 + _globals['_TIMERCONDITION']._serialized_start=21536 + _globals['_TIMERCONDITION']._serialized_end=21639 + _globals['_CHANNELCONDITION']._serialized_start=21642 + _globals['_CHANNELCONDITION']._serialized_end=21774 + _globals['_CONDITIONRESULTS']._serialized_start=21777 + _globals['_CONDITIONRESULTS']._serialized_end=21949 + _globals['_TIMERRESULT']._serialized_start=21951 + _globals['_TIMERRESULT']._serialized_end=22034 + _globals['_CHANNELRESULT']._serialized_start=22037 + _globals['_CHANNELRESULT']._serialized_end=22172 + _globals['_CONTINUEASNEWDUMPREQUEST']._serialized_start=22174 + _globals['_CONTINUEASNEWDUMPREQUEST']._serialized_end=22279 + _globals['_CONTINUEASNEWDUMPRESPONSE']._serialized_start=22281 + _globals['_CONTINUEASNEWDUMPRESPONSE']._serialized_end=22387 + _globals['_CHANNELVALUES']._serialized_start=22389 + _globals['_CHANNELVALUES']._serialized_end=22443 + _globals['_STEPEXECUTIONCOMPLETEDCONDITIONS']._serialized_start=22446 + _globals['_STEPEXECUTIONCOMPLETEDCONDITIONS']._serialized_end=22861 + _globals['_STEPEXECUTIONCOMPLETEDCONDITIONS_COMPLETEDTIMERCONDITIONSENTRY']._serialized_start=22691 + _globals['_STEPEXECUTIONCOMPLETEDCONDITIONS_COMPLETEDTIMERCONDITIONSENTRY']._serialized_end=22780 + _globals['_STEPEXECUTIONCOMPLETEDCONDITIONS_COMPLETEDSUBFLOWRESULTSENTRY']._serialized_start=22782 + _globals['_STEPEXECUTIONCOMPLETEDCONDITIONS_COMPLETEDSUBFLOWRESULTSENTRY']._serialized_end=22861 + _globals['_STEPEXECUTIONRESUMEINFO']._serialized_start=22864 + _globals['_STEPEXECUTIONRESUMEINFO']._serialized_end=23107 + _globals['_STEPEXECUTIONCOUNTERINFO']._serialized_start=23110 + _globals['_STEPEXECUTIONCOUNTERINFO']._serialized_end=23700 + _globals['_STEPEXECUTIONCOUNTERINFO_STEPTYPESTARTEDCOUNTENTRY']._serialized_start=23478 + _globals['_STEPEXECUTIONCOUNTERINFO_STEPTYPESTARTEDCOUNTENTRY']._serialized_end=23537 + _globals['_STEPEXECUTIONCOUNTERINFO_STEPTYPECURRENTLYEXECUTINGCOUNTENTRY']._serialized_start=23539 + _globals['_STEPEXECUTIONCOUNTERINFO_STEPTYPECURRENTLYEXECUTINGCOUNTENTRY']._serialized_end=23609 + _globals['_STEPEXECUTIONCOUNTERINFO_STEPACTIVEEXECUTIONNUMSENTRY']._serialized_start=23611 + _globals['_STEPEXECUTIONCOUNTERINFO_STEPACTIVEEXECUTIONNUMSENTRY']._serialized_end=23700 + _globals['_STALESKIPTIMER']._serialized_start=23702 + _globals['_STALESKIPTIMER']._serialized_end=23804 + _globals['_CONTINUEASNEWDUMP']._serialized_start=23807 + _globals['_CONTINUEASNEWDUMP']._serialized_end=24337 + _globals['_CONTINUEASNEWDUMP_CHANNELRECEIVEDENTRY']._serialized_start=24263 + _globals['_CONTINUEASNEWDUMP_CHANNELRECEIVEDENTRY']._serialized_end=24337 + _globals['_CONTINUEASNEWINPUT']._serialized_start=24339 + _globals['_CONTINUEASNEWINPUT']._serialized_end=24393 + _globals['_INTERPRETERWORKFLOWINPUT']._serialized_start=24396 + _globals['_INTERPRETERWORKFLOWINPUT']._serialized_end=24872 + _globals['_INTERPRETERWORKFLOWOUTPUT']._serialized_start=24874 + _globals['_INTERPRETERWORKFLOWOUTPUT']._serialized_end=24961 + _globals['_BLOBSTORECLEANUPWORKFLOWINPUT']._serialized_start=24963 + _globals['_BLOBSTORECLEANUPWORKFLOWINPUT']._serialized_end=25012 + _globals['_BLOBSTORECLEANUPWORKFLOWOUTPUT']._serialized_start=25014 + _globals['_BLOBSTORECLEANUPWORKFLOWOUTPUT']._serialized_end=25069 + _globals['_INVOKEWAITFORMETHODACTIVITYINPUT']._serialized_start=25071 + _globals['_INVOKEWAITFORMETHODACTIVITYINPUT']._serialized_end=25197 + _globals['_INVOKEWAITFORMETHODACTIVITYOUTPUT']._serialized_start=25199 + _globals['_INVOKEWAITFORMETHODACTIVITYOUTPUT']._serialized_end=25286 + _globals['_INVOKEEXECUTEMETHODACTIVITYINPUT']._serialized_start=25288 + _globals['_INVOKEEXECUTEMETHODACTIVITYINPUT']._serialized_end=25414 + _globals['_RECOVERYERRORINFO']._serialized_start=25416 + _globals['_RECOVERYERRORINFO']._serialized_end=25471 + _globals['_INTERNALLOCALSTEPACTIVITYFAILURE']._serialized_start=25474 + _globals['_INTERNALLOCALSTEPACTIVITYFAILURE']._serialized_end=25719 + _globals['_INVOKEEXECUTEMETHODACTIVITYOUTPUT']._serialized_start=25721 + _globals['_INVOKEEXECUTEMETHODACTIVITYOUTPUT']._serialized_end=25808 + _globals['_DUMPFLOWFORCONTINUEASNEWACTIVITYINPUT']._serialized_start=25810 + _globals['_DUMPFLOWFORCONTINUEASNEWACTIVITYINPUT']._serialized_end=25897 + _globals['_DUMPFLOWFORCONTINUEASNEWACTIVITYOUTPUT']._serialized_start=25899 + _globals['_DUMPFLOWFORCONTINUEASNEWACTIVITYOUTPUT']._serialized_end=25989 + _globals['_INVOKEWORKERRPCACTIVITYINPUT']._serialized_start=25991 + _globals['_INVOKEWORKERRPCACTIVITYINPUT']._serialized_end=26109 + _globals['_INVOKEWORKERRPCACTIVITYOUTPUT']._serialized_start=26111 + _globals['_INVOKEWORKERRPCACTIVITYOUTPUT']._serialized_end=26210 + _globals['_CLEANUPBLOBSTOREACTIVITYINPUT']._serialized_start=26212 + _globals['_CLEANUPBLOBSTOREACTIVITYINPUT']._serialized_end=26261 + _globals['_CLEANUPBLOBSTOREACTIVITYOUTPUT']._serialized_start=26263 + _globals['_CLEANUPBLOBSTOREACTIVITYOUTPUT']._serialized_end=26318 + _globals['_ATTRIBUTESYNCITEM']._serialized_start=26320 + _globals['_ATTRIBUTESYNCITEM']._serialized_end=26400 + _globals['_SYNCATTRIBUTEBATCHACTIVITYINPUT']._serialized_start=26402 + _globals['_SYNCATTRIBUTEBATCHACTIVITYINPUT']._serialized_end=26512 + _globals['_STARTSUBFLOWACTIVITYINPUT']._serialized_start=26515 + _globals['_STARTSUBFLOWACTIVITYINPUT']._serialized_end=26663 + _globals['_STARTSUBFLOWACTIVITYOUTPUT']._serialized_start=26665 + _globals['_STARTSUBFLOWACTIVITYOUTPUT']._serialized_end=26741 + _globals['_SUBFLOWCOMPLETIONSIGNALREQUEST']._serialized_start=26743 + _globals['_SUBFLOWCOMPLETIONSIGNALREQUEST']._serialized_end=26834 + _globals['_REPORTSUBFLOWCOMPLETIONACTIVITYINPUT']._serialized_start=26836 + _globals['_REPORTSUBFLOWCOMPLETIONACTIVITYINPUT']._serialized_end=26952 + _globals['_REPORTSUBFLOWCOMPLETIONACTIVITYOUTPUT']._serialized_start=26954 + _globals['_REPORTSUBFLOWCOMPLETIONACTIVITYOUTPUT']._serialized_end=27047 + _globals['_EXECUTERPCSIGNALREQUEST']._serialized_start=27050 + _globals['_EXECUTERPCSIGNALREQUEST']._serialized_end=27436 + _globals['_SKIPTIMERSIGNALREQUEST']._serialized_start=27438 + _globals['_SKIPTIMERSIGNALREQUEST']._serialized_end=27548 + _globals['_STOPFLOWSIGNALREQUEST']._serialized_start=27550 + _globals['_STOPFLOWSIGNALREQUEST']._serialized_end=27623 + _globals['_GETATTRIBUTESQUERYREQUEST']._serialized_start=27625 + _globals['_GETATTRIBUTESQUERYREQUEST']._serialized_end=27684 + _globals['_GETATTRIBUTESQUERYRESPONSE']._serialized_start=27686 + _globals['_GETATTRIBUTESQUERYRESPONSE']._serialized_end=27743 + _globals['_PREPARERPCQUERYREQUEST']._serialized_start=27745 + _globals['_PREPARERPCQUERYREQUEST']._serialized_end=27871 + _globals['_PREPARERPCQUERYRESPONSE']._serialized_start=27874 + _globals['_PREPARERPCQUERYRESPONSE']._serialized_end=28459 + _globals['_PREPARERPCQUERYRESPONSE_CHANNELINFOSENTRY']._serialized_start=16798 + _globals['_PREPARERPCQUERYRESPONSE_CHANNELINFOSENTRY']._serialized_end=16867 + _globals['_PREPARERPCQUERYRESPONSE_LOADEDCHANNELMESSAGESENTRY']._serialized_start=16869 + _globals['_PREPARERPCQUERYRESPONSE_LOADEDCHANNELMESSAGESENTRY']._serialized_end=16949 + _globals['_TIMERINFO']._serialized_start=28461 + _globals['_TIMERINFO']._serialized_end=28575 + _globals['_TIMERINFOLIST']._serialized_start=28577 + _globals['_TIMERINFOLIST']._serialized_end=28624 + _globals['_GETCURRENTTIMERINFOSQUERYRESPONSE']._serialized_start=28627 + _globals['_GETCURRENTTIMERINFOSQUERYRESPONSE']._serialized_end=28873 + _globals['_GETCURRENTTIMERINFOSQUERYRESPONSE_STEPEXECUTIONCURRENTTIMERINFOSENTRY']._serialized_start=28784 + _globals['_GETCURRENTTIMERINFOSQUERYRESPONSE_STEPEXECUTIONCURRENTTIMERINFOSENTRY']._serialized_end=28873 + _globals['_GETSCHEDULEDGREEDYTIMERTIMESQUERYRESPONSE']._serialized_start=28875 + _globals['_GETSCHEDULEDGREEDYTIMERTIMESQUERYRESPONSE']._serialized_end=28961 + _globals['_DEBUGDUMPRESPONSE']._serialized_start=28964 + _globals['_DEBUGDUMPRESPONSE']._serialized_end=29160 + _globals['_INVOKERPCUPDATERESULT']._serialized_start=29162 + _globals['_INVOKERPCUPDATERESULT']._serialized_end=29227 + _globals['_STEPEXECUTIONNUMBERS']._serialized_start=29229 + _globals['_STEPEXECUTIONNUMBERS']._serialized_end=29268 + _globals['_FLOWSERVICE']._serialized_start=34027 + _globals['_FLOWSERVICE']._serialized_end=35911 + _globals['_WORKERSERVICE']._serialized_start=35914 + _globals['_WORKERSERVICE']._serialized_end=36187 + _globals['_INTERNALSERVICE']._serialized_start=36189 + _globals['_INTERNALSERVICE']._serialized_end=36297 # @@protoc_insertion_point(module_scope) diff --git a/sdk-python/dex/dexpb/dex_pb2.pyi b/sdk-python/dex/dexpb/dex_pb2.pyi index a173a895b..7f82fc44b 100644 --- a/sdk-python/dex/dexpb/dex_pb2.pyi +++ b/sdk-python/dex/dexpb/dex_pb2.pyi @@ -744,11 +744,19 @@ class SetAttributesRequest(_message.Message): request_id: str def __init__(self, flow_id: _Optional[str] = ..., run_id: _Optional[str] = ..., attributes: _Optional[_Iterable[_Union[AttributeWrite, _Mapping]]] = ..., request_id: _Optional[str] = ...) -> None: ... +class LoadBlobRequestEntry(_message.Message): + __slots__ = ("flow_id", "blob_value") + FLOW_ID_FIELD_NUMBER: _ClassVar[int] + BLOB_VALUE_FIELD_NUMBER: _ClassVar[int] + flow_id: str + blob_value: Value + def __init__(self, flow_id: _Optional[str] = ..., blob_value: _Optional[_Union[Value, _Mapping]] = ...) -> None: ... + class LoadBlobsRequest(_message.Message): - __slots__ = ("values",) - VALUES_FIELD_NUMBER: _ClassVar[int] - values: _containers.RepeatedCompositeFieldContainer[Value] - def __init__(self, values: _Optional[_Iterable[_Union[Value, _Mapping]]] = ...) -> None: ... + __slots__ = ("entries",) + ENTRIES_FIELD_NUMBER: _ClassVar[int] + entries: _containers.RepeatedCompositeFieldContainer[LoadBlobRequestEntry] + def __init__(self, entries: _Optional[_Iterable[_Union[LoadBlobRequestEntry, _Mapping]]] = ...) -> None: ... class LoadBlobsResponse(_message.Message): __slots__ = ("values",) diff --git a/sdk-python/tests/test_contracts.py b/sdk-python/tests/test_contracts.py index 6e6424b2b..3880bfaae 100644 --- a/sdk-python/tests/test_contracts.py +++ b/sdk-python/tests/test_contracts.py @@ -535,6 +535,12 @@ def test_builtin_codecs_enforce_wire_types_and_ranges() -> None: INT64.decode(STRING.encode("42")) +def test_object_codecs_use_compact_wire_encodings() -> None: + values = ValueMapper(CodecRegistry()) + assert values.encode_dynamic({"order_id": "order-1"}).obj_value.encoding == "j" + assert values.encode_dynamic(b"payload").obj_value.encoding == "r" + + def test_fluent_wait_factories_validate_channel_bounds() -> None: wait = Wait.until(Timer.by_duration(timedelta(seconds=1))) assert len(wait.conditions) == 1 diff --git a/sdk-python/tests/test_flow_result.py b/sdk-python/tests/test_flow_result.py index 0fbafffee..e20278503 100644 --- a/sdk-python/tests/test_flow_result.py +++ b/sdk-python/tests/test_flow_result.py @@ -84,7 +84,8 @@ def LoadBlobs( # noqa: N802 ) -> pb.LoadBlobsResponse: del context values: dict[str, pb.Value] = {} - for value in request.values: + for entry in request.entries: + value = entry.blob_value blob_id = value.WhichOneof("kind") if blob_id == "internal_blob_id_for_string_value": key = value.internal_blob_id_for_string_value @@ -92,7 +93,7 @@ def LoadBlobs( # noqa: N802 elif blob_id == "internal_blob_id_for_obj_value": key = value.internal_blob_id_for_obj_value values[key] = pb.Value( - obj_value=pb.EncodedObject(encoding="rawbytes", payload=b"done") + obj_value=pb.EncodedObject(encoding="r", payload=b"done") ) else: raise AssertionError("unexpected LoadBlobs value") diff --git a/sdk-rust/README.md b/sdk-rust/README.md index a0a6dd0c2..c704ed36b 100644 --- a/sdk-rust/README.md +++ b/sdk-rust/README.md @@ -336,6 +336,10 @@ retaining protocol presence. The shared cache keeps opaque payload bytes on disk and uses Stretto only for metadata admission and eviction: +Serialized object values use wire encoding `j` for JSON and `r` for raw bytes. +Internal Blob references are opaque. Hydration sends the owning Flow ID with +each reference, and SDK cache keys are isolated by `(flow_id, blob_ref)`. + ```rust use dex_blob_cache::{BlobCache, BlobCacheConfig}; diff --git a/sdk-rust/crates/dex-sdk/src/client.rs b/sdk-rust/crates/dex-sdk/src/client.rs index b98469bb8..85587dac3 100644 --- a/sdk-rust/crates/dex-sdk/src/client.rs +++ b/sdk-rust/crates/dex-sdk/src/client.rs @@ -470,15 +470,17 @@ impl Client { let values = response .flow_runs .iter() - .flat_map(|entry| entry.indexed_attributes.iter()) - .map(|attribute| { - attribute - .value - .clone() - .ok_or_else(|| invalid("Indexed Attribute has no Value")) + .flat_map(|entry| { + entry.indexed_attributes.iter().map(|attribute| { + attribute + .value + .clone() + .map(|value| (entry.flow_id.clone(), value)) + .ok_or_else(|| invalid("Indexed Attribute has no Value")) + }) }) .collect::>>()?; - let mut values = self.hydrator.hydrate_all(values).await?.into_iter(); + let mut values = self.hydrator.hydrate_for_flows(values).await?.into_iter(); let mut flows = Vec::with_capacity(response.flow_runs.len()); for entry in response.flow_runs { let mut indexed_attributes = BTreeMap::new(); @@ -869,7 +871,9 @@ impl Client { }) })?; let output = output.ok_or_else(|| invalid("InvokeRPC omitted output"))?; - let output = self.runtime.block_on(self.hydrator.hydrate(output))?; + let output = self + .runtime + .block_on(self.hydrator.hydrate(flow_id, output))?; value_mapper::decode(&output) } @@ -960,7 +964,9 @@ impl Client { } })?); } - let outputs = self.runtime.block_on(self.hydrator.hydrate_all(outputs))?; + let outputs = self + .runtime + .block_on(self.hydrator.hydrate_all(flow_id, outputs))?; let completions = response .results .into_iter() diff --git a/sdk-rust/crates/dex-sdk/src/value_hydrator.rs b/sdk-rust/crates/dex-sdk/src/value_hydrator.rs index f82f92dc5..69e146bbd 100644 --- a/sdk-rust/crates/dex-sdk/src/value_hydrator.rs +++ b/sdk-rust/crates/dex-sdk/src/value_hydrator.rs @@ -11,7 +11,7 @@ use std::str; use dex_blob_cache::BlobCache; use dex_protocol::dex::flow_service_client::FlowServiceClient; -use dex_protocol::dex::{EncodedObject, LoadBlobsRequest, Value, value}; +use dex_protocol::dex::{EncodedObject, LoadBlobRequestEntry, LoadBlobsRequest, Value, value}; use prost::Message; use tonic::transport::Channel; @@ -32,16 +32,39 @@ impl ValueHydrator { Self { service, cache } } - pub(crate) async fn hydrate(&self, value: Value) -> SdkResult { - let mut values = self.hydrate_all(vec![value]).await?; + pub(crate) async fn hydrate(&self, flow_id: &str, value: Value) -> SdkResult { + let mut values = self.hydrate_all(flow_id, vec![value]).await?; Ok(values.remove(0)) } - pub(crate) async fn hydrate_all(&self, values: Vec) -> SdkResult> { - let mut hydrated = values; + pub(crate) async fn hydrate_all( + &self, + flow_id: &str, + values: Vec, + ) -> SdkResult> { + self.hydrate_for_flows( + values + .into_iter() + .map(|value| (flow_id.to_string(), value)) + .collect(), + ) + .await + } + + pub(crate) async fn hydrate_for_flows( + &self, + flow_values: Vec<(String, Value)>, + ) -> SdkResult> { + let mut hydrated = flow_values + .iter() + .map(|(_, value)| value.clone()) + .collect::>(); let mut pending: HashMap> = HashMap::new(); - for (index, value) in hydrated.iter().enumerate() { - if let Some(key) = BlobKey::from_value(value)? { + for (index, (flow_id, value)) in flow_values.iter().enumerate() { + if flow_id.is_empty() { + return Err(mapping_error("Flow ID is required")); + } + if let Some(key) = BlobKey::from_value(flow_id, value)? { pending.entry(key).or_default().push(index); } else { validate_concrete(value)?; @@ -60,7 +83,13 @@ impl ValueHydrator { } if !misses.is_empty() { let request = LoadBlobsRequest { - values: misses.iter().map(BlobKey::request_value).collect(), + entries: misses + .iter() + .map(|key| LoadBlobRequestEntry { + flow_id: key.flow_id.clone(), + blob_value: Some(key.request_value()), + }) + .collect(), }; let response = self .service @@ -96,7 +125,7 @@ impl ValueHydrator { } fn read_cache(&self, key: &BlobKey) -> SdkResult> { - let payload = self.cache.get(&key.id).map_err(cache_error)?; + let payload = self.cache.get(&key.cache_key()).map_err(cache_error)?; let Some(payload) = payload else { return Ok(None); }; @@ -123,25 +152,30 @@ impl ValueHydrator { Some(value::Kind::StringValue(text)) if !key.object => text.as_bytes().to_vec(), _ => return Err(mapping_error("hydrated blob has the wrong kind")), }; - self.cache.put(&key.id, &payload).map_err(cache_error)?; + self.cache + .put(&key.cache_key(), &payload) + .map_err(cache_error)?; Ok(()) } } #[derive(Clone, Debug, Eq, Hash, PartialEq)] struct BlobKey { + flow_id: String, id: String, object: bool, } impl BlobKey { - fn from_value(value: &Value) -> SdkResult> { + fn from_value(flow_id: &str, value: &Value) -> SdkResult> { let key = match value.kind.as_ref() { Some(value::Kind::InternalBlobIdForStringValue(id)) => Self { + flow_id: flow_id.to_string(), id: require_blob_id(id)?, object: false, }, Some(value::Kind::InternalBlobIdForObjValue(id)) => Self { + flow_id: flow_id.to_string(), id: require_blob_id(id)?, object: true, }, @@ -161,6 +195,10 @@ impl BlobKey { } } + fn cache_key(&self) -> String { + format!("{}:{}{}", self.flow_id.len(), self.flow_id, self.id) + } + fn validate_hydrated(&self, value: &Value) -> SdkResult<()> { match value.kind.as_ref() { Some(value::Kind::ObjValue(_)) if self.object => validate_concrete(value), @@ -179,9 +217,7 @@ fn validate_concrete(value: &Value) -> SdkResult<()> { Some(value::Kind::DoubleValue(_)) => { Err(mapping_error("non-finite numbers are unsupported")) } - Some(value::Kind::ObjValue(object)) - if object.encoding == "json" || object.encoding == "rawbytes" => - { + Some(value::Kind::ObjValue(object)) if object.encoding == "j" || object.encoding == "r" => { Ok(()) } Some(value::Kind::ObjValue(object)) => Err(mapping_error(format!( diff --git a/sdk-rust/crates/dex-sdk/src/value_mapper.rs b/sdk-rust/crates/dex-sdk/src/value_mapper.rs index cab8c8a65..2fd7440c0 100644 --- a/sdk-rust/crates/dex-sdk/src/value_mapper.rs +++ b/sdk-rust/crates/dex-sdk/src/value_mapper.rs @@ -65,7 +65,7 @@ fn encode_json(json: JsonValue) -> SdkResult { } } other => value::Kind::ObjValue(EncodedObject { - encoding: "json".to_string(), + encoding: "j".to_string(), payload: serde_json::to_vec(&other).map_err(mapping_error)?, }), }; @@ -81,19 +81,17 @@ fn decode_json(input: &ProtoValue) -> SdkResult { } Some(value::Kind::DoubleValue(_)) => Err(value_error("non-finite numbers are unsupported")), Some(value::Kind::BoolValue(value)) => Ok(JsonValue::Bool(*value)), - Some(value::Kind::ObjValue(object)) if object.encoding == "json" => { + Some(value::Kind::ObjValue(object)) if object.encoding == "j" => { serde_json::from_slice(&object.payload).map_err(mapping_error) } - Some(value::Kind::ObjValue(object)) if object.encoding == "rawbytes" => { - Ok(JsonValue::Array( - object - .payload - .iter() - .copied() - .map(JsonValue::from) - .collect(), - )) - } + Some(value::Kind::ObjValue(object)) if object.encoding == "r" => Ok(JsonValue::Array( + object + .payload + .iter() + .copied() + .map(JsonValue::from) + .collect(), + )), Some(value::Kind::ObjValue(object)) => Err(value_error(format!( "unsupported object encoding {}", object.encoding @@ -122,3 +120,28 @@ fn value_error(message: impl Into) -> SdkError { fn handler_mapping_error(error: SdkError) -> HandlerError { HandlerError::from_error(error) } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn uses_compact_object_encoding_wire_values() { + let encoded_json = encode(&vec![1, 2, 3]).expect("encode JSON"); + let Some(value::Kind::ObjValue(encoded_json)) = encoded_json.kind else { + panic!("expected encoded object"); + }; + assert_eq!(encoded_json.encoding, "j"); + + let encoded_bytes = ProtoValue { + kind: Some(value::Kind::ObjValue(EncodedObject { + encoding: "r".to_string(), + payload: vec![1, 2, 3], + })), + }; + assert_eq!( + decode::>(&encoded_bytes).expect("decode bytes"), + vec![1, 2, 3] + ); + } +} diff --git a/sdk-rust/crates/dex-sdk/src/worker_dispatcher.rs b/sdk-rust/crates/dex-sdk/src/worker_dispatcher.rs index f59e11a81..d354c93d4 100644 --- a/sdk-rust/crates/dex-sdk/src/worker_dispatcher.rs +++ b/sdk-rust/crates/dex-sdk/src/worker_dispatcher.rs @@ -382,6 +382,11 @@ impl WorkerDispatcher { &self, mut request: InvokeWaitForMethodRequest, ) -> HandlerResult { + let flow_id = request + .context + .as_ref() + .map(|context| context.flow_id.clone()) + .unwrap_or_default(); let last_heartbeat_value = request .context .as_mut() @@ -395,7 +400,7 @@ impl WorkerDispatcher { take_channel_message_values(&mut request.loaded_channel_messages, &mut values)?; let hydrated = self .hydrator - .hydrate_all(values) + .hydrate_all(&flow_id, values) .await .map_err(handler_error)?; let mut hydrated = hydrated.into_iter(); @@ -421,6 +426,11 @@ impl WorkerDispatcher { &self, mut request: InvokeExecuteMethodRequest, ) -> HandlerResult { + let flow_id = request + .context + .as_ref() + .map(|context| context.flow_id.clone()) + .unwrap_or_default(); let last_heartbeat_value = request .context .as_mut() @@ -475,7 +485,7 @@ impl WorkerDispatcher { take_channel_message_values(&mut request.loaded_channel_messages, &mut values)?; let mut hydrated = self .hydrator - .hydrate_all(values) + .hydrate_all(&flow_id, values) .await .map_err(handler_error)? .into_iter(); @@ -515,6 +525,11 @@ impl WorkerDispatcher { &self, mut request: InvokeWorkerRpcRequest, ) -> HandlerResult { + let flow_id = request + .context + .as_ref() + .map(|context| context.flow_id.clone()) + .unwrap_or_default(); let mut values = vec![request.input.take().unwrap_or_default()]; let attribute_count = request.attributes.len(); values.extend(take_entry_values(&mut request.attributes)?); @@ -522,7 +537,7 @@ impl WorkerDispatcher { take_channel_message_values(&mut request.loaded_channel_messages, &mut values)?; let hydrated = self .hydrator - .hydrate_all(values) + .hydrate_all(&flow_id, values) .await .map_err(handler_error)?; let mut hydrated = hydrated.into_iter(); diff --git a/sdk-typescript/README.md b/sdk-typescript/README.md index 4d484d218..7512bfacf 100644 --- a/sdk-typescript/README.md +++ b/sdk-typescript/README.md @@ -409,6 +409,10 @@ continue importing only from `@superdurable/dex`. - `blob-cache.ts`: DXBC BlobCache contract and Node-API binding loader - `gen/`: checked-in protobuf and grpc-js bindings +Serialized object values use wire encoding `j` for JSON and `r` for raw bytes. +Internal Blob references are opaque. Hydration sends the owning Flow ID with +each reference, and the cache is isolated by `(flowId, blobRef)`. + Run `npm run build:native` once to stage the DXBC Node addon for the current platform, then `npm test` for runtime contracts, `npm run typecheck` for strict static contracts, and `npm run docs:check` for public API documentation. The diff --git a/sdk-typescript/src/client.ts b/sdk-typescript/src/client.ts index 0e9054363..c83ccc2ab 100644 --- a/sdk-typescript/src/client.ts +++ b/sdk-typescript/src/client.ts @@ -334,7 +334,7 @@ export class Client { } return decodeValue( codecOrJson(rpc.options.outputCodec), - await this.hydrator.hydrate(response.output), + await this.hydrator.hydrate(flowId, response.output), ); } @@ -482,6 +482,7 @@ export class Client { ), ); const values = await this.hydrator.hydrateAll( + flowId, response.results.map((result) => result.completedStepOutput), ); return createFlowResultFromProto(response, values); @@ -562,7 +563,10 @@ export class Client { } const indexedAttributes = new Map(); for (const attribute of entry.indexedAttributes) { - indexedAttributes.set(attribute.key, decodeUnknown(await this.hydrator.hydrate(attribute.value))); + indexedAttributes.set( + attribute.key, + decodeUnknown(await this.hydrator.hydrate(entry.flowId, attribute.value)), + ); } return { flowId: entry.flowId, diff --git a/sdk-typescript/src/gen/dex.ts b/sdk-typescript/src/gen/dex.ts index 787bd8510..a06e6f3a2 100644 --- a/sdk-typescript/src/gen/dex.ts +++ b/sdk-typescript/src/gen/dex.ts @@ -256,6 +256,7 @@ export interface Value { } export interface EncodedObject { + /** "j" is JSON and "r" is raw bytes. Other values are passed through. */ encoding: string; payload: Uint8Array; } @@ -515,13 +516,15 @@ export interface SetAttributesRequest { requestId: string; } +export interface LoadBlobRequestEntry { + /** Flow that owns blob_value and supplies the omitted Blob path segment. */ + flowId: string; + /** Must use internal_blob_id_for_string_value or internal_blob_id_for_obj_value. */ + blobValue: Value | undefined; +} + export interface LoadBlobsRequest { - /** - * Each value must be a blob-id only - * (internal_blob_id_for_string_value or internal_blob_id_for_obj_value). - * Concrete payload arms (string_value / obj_value) are rejected. - */ - values: Value[]; + entries: LoadBlobRequestEntry[]; } export interface LoadBlobsResponse { @@ -4763,14 +4766,74 @@ export const SetAttributesRequest: MessageFns = { }, }; +function createBaseLoadBlobRequestEntry(): LoadBlobRequestEntry { + return { flowId: "", blobValue: undefined }; +} + +export const LoadBlobRequestEntry: MessageFns = { + encode(message: LoadBlobRequestEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + if (message.flowId !== "") { + writer.uint32(10).string(message.flowId); + } + if (message.blobValue !== undefined) { + Value.encode(message.blobValue, writer.uint32(18).fork()).join(); + } + return writer; + }, + + decode(input: BinaryReader | Uint8Array, length?: number): LoadBlobRequestEntry { + const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + const end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseLoadBlobRequestEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: { + if (tag !== 10) { + break; + } + + message.flowId = reader.string(); + continue; + } + case 2: { + if (tag !== 18) { + break; + } + + message.blobValue = Value.decode(reader, reader.uint32()); + continue; + } + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skip(tag & 7); + } + return message; + }, + + create, I>>(base?: I): LoadBlobRequestEntry { + return LoadBlobRequestEntry.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): LoadBlobRequestEntry { + const message = createBaseLoadBlobRequestEntry(); + message.flowId = object.flowId ?? ""; + message.blobValue = (object.blobValue !== undefined && object.blobValue !== null) + ? Value.fromPartial(object.blobValue) + : undefined; + return message; + }, +}; + function createBaseLoadBlobsRequest(): LoadBlobsRequest { - return { values: [] }; + return { entries: [] }; } export const LoadBlobsRequest: MessageFns = { encode(message: LoadBlobsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { - for (const v of message.values) { - Value.encode(v!, writer.uint32(10).fork()).join(); + for (const v of message.entries) { + LoadBlobRequestEntry.encode(v!, writer.uint32(10).fork()).join(); } return writer; }, @@ -4787,7 +4850,7 @@ export const LoadBlobsRequest: MessageFns = { break; } - message.values.push(Value.decode(reader, reader.uint32())); + message.entries.push(LoadBlobRequestEntry.decode(reader, reader.uint32())); continue; } } @@ -4804,7 +4867,7 @@ export const LoadBlobsRequest: MessageFns = { }, fromPartial, I>>(object: I): LoadBlobsRequest { const message = createBaseLoadBlobsRequest(); - message.values = object.values?.map((e) => Value.fromPartial(e)) || []; + message.entries = object.entries?.map((e) => LoadBlobRequestEntry.fromPartial(e)) || []; return message; }, }; diff --git a/sdk-typescript/src/value-mapper.ts b/sdk-typescript/src/value-mapper.ts index 67b83fb63..cf7a0e150 100644 --- a/sdk-typescript/src/value-mapper.ts +++ b/sdk-typescript/src/value-mapper.ts @@ -28,7 +28,7 @@ const textDecoder = new TextDecoder(); export function encodeValue(codec: Codec, value: T): ProtoValue { if (value === undefined || value === null) { - return objectValue("json", textEncoder.encode("null")); + return objectValue("j", textEncoder.encode("null")); } let encoded: CodecValue; try { @@ -46,15 +46,15 @@ export function encodeValue(codec: Codec, value: T): ProtoValue { case "double": return ProtoValue.create({ kind: { $case: "doubleValue", value: encoded.data } }); case "bytes": - return objectValue("rawbytes", encoded.data); + return objectValue("r", encoded.data); case "json": - return objectValue("json", textEncoder.encode(encoded.data)); + return objectValue("j", textEncoder.encode(encoded.data)); } } export function encodeUnknown(value: unknown): ProtoValue { if (value === undefined || value === null) { - return objectValue("json", textEncoder.encode("null")); + return objectValue("j", textEncoder.encode("null")); } if (typeof value === "string") { return ProtoValue.create({ kind: { $case: "stringValue", value } }); @@ -72,7 +72,7 @@ export function encodeUnknown(value: unknown): ProtoValue { return ProtoValue.create({ kind: { $case: "doubleValue", value } }); } if (value instanceof Uint8Array) { - return objectValue("rawbytes", value); + return objectValue("r", value); } let json: string | undefined; try { @@ -83,13 +83,13 @@ export function encodeUnknown(value: unknown): ProtoValue { if (json === undefined) { throw new ValueMappingError("encode", "value cannot be encoded as JSON"); } - return objectValue("json", textEncoder.encode(json)); + return objectValue("j", textEncoder.encode(json)); } export function decodeValue(codec: Codec, value: ProtoValue): T { if ( value.kind?.$case === "objValue" && - value.kind.value.encoding === "json" && + value.kind.value.encoding === "j" && textDecoder.decode(value.kind.value.payload) === "null" ) { return undefined as T; @@ -117,10 +117,10 @@ export function decodeUnknown(value: ProtoValue): unknown { return kind.value; case "objValue": { const object = kind.value; - if (object.encoding === "rawbytes") { + if (object.encoding === "r") { return object.payload; } - if (object.encoding === "json") { + if (object.encoding === "j") { try { return JSON.parse(textDecoder.decode(object.payload)); } catch (failure) { @@ -149,7 +149,10 @@ export class ValueHydrator { private readonly blobCache: BlobCache, ) {} - public async hydrate(value: ProtoValue | undefined): Promise { + public async hydrate(flowId: string, value: ProtoValue | undefined): Promise { + if (flowId.length === 0) { + throw new ValueMappingError("hydrate", "Flow ID is required"); + } if (value?.kind === undefined) { throw new ValueMappingError("hydrate", "Value has no concrete kind"); } @@ -157,22 +160,29 @@ export class ValueHydrator { if (blobId === undefined) { return value; } - const cached = this.blobCache.get(blobId); + const cacheKey = flowBlobCacheKey(flowId, blobId); + const cached = this.blobCache.get(cacheKey); if (cached !== undefined) { return ProtoValue.decode(cached); } const response = await unary((callback) => - this.service.loadBlobs({ values: [value] }, callback), + this.service.loadBlobs({ entries: [{ flowId, blobValue: value }] }, callback), ); const hydrated = response.values[blobId]; if (hydrated?.kind === undefined || blobIdOf(hydrated) !== undefined) { throw new ValueMappingError("hydrate", `Dex did not hydrate blob ${blobId}`); } - this.blobCache.put(blobId, ProtoValue.encode(hydrated).finish()); + this.blobCache.put(cacheKey, ProtoValue.encode(hydrated).finish()); return hydrated; } - public async hydrateAll(values: readonly (ProtoValue | undefined)[]): Promise { + public async hydrateAll( + flowId: string, + values: readonly (ProtoValue | undefined)[], + ): Promise { + if (flowId.length === 0) { + throw new ValueMappingError("hydrate", "Flow ID is required"); + } const hydrated: Array = new Array(values.length); const missing = new Map(); for (let index = 0; index < values.length; index += 1) { @@ -185,7 +195,7 @@ export class ValueHydrator { hydrated[index] = value; continue; } - const cached = this.blobCache.get(blobId); + const cached = this.blobCache.get(flowBlobCacheKey(flowId, blobId)); if (cached !== undefined) { hydrated[index] = ProtoValue.decode(cached); continue; @@ -200,7 +210,12 @@ export class ValueHydrator { if (missing.size > 0) { const response = await unary((callback) => this.service.loadBlobs( - { values: [...missing.values()].map((pending) => pending.value) }, + { + entries: [...missing.values()].map((pending) => ({ + flowId, + blobValue: pending.value, + })), + }, callback, ), ); @@ -209,7 +224,7 @@ export class ValueHydrator { if (value?.kind === undefined || blobIdOf(value) !== undefined) { throw new ValueMappingError("hydrate", `Dex did not hydrate blob ${blobId}`); } - this.blobCache.put(blobId, ProtoValue.encode(value).finish()); + this.blobCache.put(flowBlobCacheKey(flowId, blobId), ProtoValue.encode(value).finish()); for (const index of pending.indexes) { hydrated[index] = value; } @@ -245,10 +260,10 @@ function toCodecValue(value: ProtoValue): CodecValue { case "doubleValue": return { kind: "double", data: kind.value }; case "objValue": - if (kind.value.encoding === "rawbytes") { + if (kind.value.encoding === "r") { return { kind: "bytes", data: kind.value.payload }; } - if (kind.value.encoding === "json") { + if (kind.value.encoding === "j") { return { kind: "json", data: textDecoder.decode(kind.value.payload) }; } throw new ValueMappingError("decode", `unsupported object encoding ${kind.value.encoding}`); @@ -270,6 +285,10 @@ function blobIdOf(value: ProtoValue): string | undefined { return undefined; } +function flowBlobCacheKey(flowId: string, blobId: string): string { + return `${flowId.length}:${flowId}${blobId}`; +} + function unary( invoke: (callback: (error: Error | null, response: Response) => void) => unknown, ): Promise { diff --git a/sdk-typescript/src/worker-dispatcher.ts b/sdk-typescript/src/worker-dispatcher.ts index 25d68ab02..9fc722069 100644 --- a/sdk-typescript/src/worker-dispatcher.ts +++ b/sdk-typescript/src/worker-dispatcher.ts @@ -306,7 +306,7 @@ export class WorkerDispatcher { ): Promise { const lastHeartbeatValue = request.context?.lastHeartbeatValue; const hasLastHeartbeatValue = lastHeartbeatValue !== undefined; - const values = await this.hydrator.hydrateAll([ + const values = await this.hydrator.hydrateAll(request.context?.flowId ?? "", [ ...(hasLastHeartbeatValue ? [lastHeartbeatValue] : []), request.stepInput, ...request.attributes.map((entry) => entry.value), @@ -343,7 +343,7 @@ export class WorkerDispatcher { (result) => result.results.map((completion) => completion.completedStepOutput), ) ?? []; const hasInput = request.stepInput !== undefined; - const values = await this.hydrator.hydrateAll([ + const values = await this.hydrator.hydrateAll(request.context?.flowId ?? "", [ ...(hasLastHeartbeatValue ? [lastHeartbeatValue] : []), ...(hasInput ? [request.stepInput] : []), ...request.attributes.map((entry) => entry.value), @@ -387,7 +387,7 @@ export class WorkerDispatcher { private async hydrateRPC(request: InvokeWorkerRPCRequest): Promise { const hasInput = request.input !== undefined; const channelMessages = loadedMessageValues(request.loadedChannelMessages); - const values = await this.hydrator.hydrateAll([ + const values = await this.hydrator.hydrateAll(request.context?.flowId ?? "", [ ...(hasInput ? [request.input] : []), ...request.attributes.map((entry) => entry.value), ...channelMessages, diff --git a/sdk-typescript/test/client.integration.test.ts b/sdk-typescript/test/client.integration.test.ts index e6572fbe0..6043c3949 100644 --- a/sdk-typescript/test/client.integration.test.ts +++ b/sdk-typescript/test/client.integration.test.ts @@ -251,7 +251,9 @@ test("Client maps typed calls and hydrates blob-backed outputs", async () => { }); }, loadBlobs(call, callback: sendUnaryData) { - assert.equal((call.request as LoadBlobsRequest).values.length, 2); + const entries = (call.request as LoadBlobsRequest).entries; + assert.ok(entries.length > 0); + assert.ok(entries.every((entry) => entry.flowId.length > 0)); callback(null, { values: { "blob-1": hydratedOutput, @@ -426,8 +428,8 @@ test("Client maps typed calls and hydrates blob-backed outputs", async () => { assert.equal(requests.readStream?.waitTimeSeconds, 2); assert.equal(requests.listStreamMessages?.pageSize, 2); assert.equal(requests.listStreamMessages?.beforePageToken, "before-page"); - assert.equal(cache.get("blob-1") === undefined, false); - assert.equal(cache.get("blob-2") === undefined, false); + assert.equal(cache.get("6:flow-1blob-1") === undefined, false); + assert.equal(cache.get("6:flow-1blob-2") === undefined, false); } finally { await client.close(); await shutdown(server); @@ -462,7 +464,7 @@ function protoJson(value: unknown): Value { return Value.create({ kind: { $case: "objValue", - value: { encoding: "json", payload: new TextEncoder().encode(JSON.stringify(value)) }, + value: { encoding: "j", payload: new TextEncoder().encode(JSON.stringify(value)) }, }, }); } diff --git a/sdk-typescript/test/contracts.test.ts b/sdk-typescript/test/contracts.test.ts index a0162079b..569a2e4d3 100644 --- a/sdk-typescript/test/contracts.test.ts +++ b/sdk-typescript/test/contracts.test.ts @@ -30,6 +30,7 @@ import { Timer, ValueMappingError, Wait, + bytesCodec, gracefulComplete, int64Codec, jsonCodec, @@ -212,9 +213,11 @@ test("omitted codecs use identity JSON rather than scalar wire kinds", () => { assert.deepEqual(identity.decode(identity.encode(order)), order); const jsonString = encodeValue(codecOrJson(), "hello"); assert.equal(jsonString.kind?.$case, "objValue"); - assert.equal(jsonString.kind?.$case === "objValue" ? jsonString.kind.value.encoding : "", "json"); + assert.equal(jsonString.kind?.$case === "objValue" ? jsonString.kind.value.encoding : "", "j"); const scalarString = encodeValue(stringCodec, "hello"); assert.equal(scalarString.kind?.$case, "stringValue"); + const rawBytes = encodeValue(bytesCodec, new Uint8Array([1, 2, 3])); + assert.equal(rawBytes.kind?.$case === "objValue" ? rawBytes.kind.value.encoding : "", "r"); }); test("object Step and RPC omit codecs and still encode JSON", async () => { @@ -250,7 +253,7 @@ test("object Step and RPC omit codecs and still encode JSON", async () => { const flow = new JsonFlow(); const hydrator = { - hydrateAll: async (values: readonly unknown[]) => values, + hydrateAll: async (_flowId: string, values: readonly unknown[]) => values, } as unknown as ValueHydrator; const dispatcher = new WorkerDispatcher(new Registry([flow]), hydrator); const executed = await dispatcher.invokeExecute( @@ -363,7 +366,7 @@ test("invalid Step results include Flow and Step context", async () => { const flow = new InvalidFlow(); const hydrator = { - hydrateAll: async (values: readonly unknown[]) => values, + hydrateAll: async (_flowId: string, values: readonly unknown[]) => values, } as unknown as ValueHydrator; const dispatcher = new WorkerDispatcher(new Registry([flow]), hydrator); const invocation = dispatcher.invokeExecute( @@ -437,7 +440,7 @@ test("Worker maps only user-provided Condition IDs", async () => { } const flow = new ConditionFlow(); const hydrator = { - hydrateAll: async (values: readonly unknown[]) => values, + hydrateAll: async (_flowId: string, values: readonly unknown[]) => values, } as unknown as ValueHydrator; const dispatcher = new WorkerDispatcher(new Registry([flow]), hydrator); const invoke = (input: string) => @@ -515,7 +518,7 @@ test("Step Stream writes emit every message on the active invocation", async () }; const flow = new StreamFlow(); const hydrator = { - hydrateAll: async (values: readonly unknown[]) => values, + hydrateAll: async (_flowId: string, values: readonly unknown[]) => values, } as unknown as ValueHydrator; const registry = new Registry([flow]); const dispatcher = new WorkerDispatcher(registry, hydrator); @@ -629,7 +632,9 @@ test("buffered text Stream flushes on timer and before the final result", async const flow = new BufferedFlow(); const dispatcher = new WorkerDispatcher( new Registry([flow]), - { hydrateAll: async (values: readonly unknown[]) => values } as unknown as ValueHydrator, + { + hydrateAll: async (_flowId: string, values: readonly unknown[]) => values, + } as unknown as ValueHydrator, ); await dispatcher.invokeExecute( InvokeExecuteMethodRequest.create({ @@ -695,7 +700,7 @@ test("Async Step Context preserves heartbeat Value presence and codecs", async ( }; const flow = new HeartbeatFlow(); const hydrator = { - hydrateAll: async (values: readonly unknown[]) => values, + hydrateAll: async (_flowId: string, values: readonly unknown[]) => values, } as unknown as ValueHydrator; const dispatcher = new WorkerDispatcher(new Registry([flow]), hydrator); const invoke = async (input: string, lastHeartbeatValue?: Value): Promise => { diff --git a/server/Makefile b/server/Makefile index 50f483e0b..358e7a16d 100644 --- a/server/Makefile +++ b/server/Makefile @@ -247,7 +247,7 @@ integTestsNoSearch: prepareIntegrationCoverage unitTests: @GOWORK=off go test -v ./config $$(GOWORK=off go list ./service/... | grep -v ./service/common/blobstore) - @GOWORK=off go test -v ./service/common/blobstore -run '^TestDeterministicBlobUUID' + @GOWORK=off go test -v ./service/common/blobstore -run '^TestDeterministicBlobObjectID' # Requires SQL dependencies and covers both workflow backends in dedicated CI. attributeStoreIntegTests: prepareIntegrationCoverage diff --git a/server/config/attribute_store_test.go b/server/config/attribute_store_test.go index b58aa0d40..a2ceb2c8d 100644 --- a/server/config/attribute_store_test.go +++ b/server/config/attribute_store_test.go @@ -60,10 +60,21 @@ func TestBlobStoreDefaults(t *testing.T) { cfg, err := NewConfig(path) require.NoError(t, err) require.True(t, cfg.BlobStore.EffectiveEnabled()) - require.Equal(t, 1024, cfg.BlobStore.EffectiveThresholdInBytes()) + require.Equal(t, 100, cfg.BlobStore.EffectiveThresholdInBytes()) + require.Equal(t, DefaultBlobStoreObjectIDLength, cfg.BlobStore.EffectiveObjectIDLength()) require.Equal(t, 100*time.Millisecond, cfg.AttributeStore.EffectiveSyncRetryPolicy().InitialInterval) } +func TestBlobStoreObjectIDLengthValidation(t *testing.T) { + for _, objectIDLength := range []int{0, 10, 12, 16, 22, 50} { + require.NoError(t, (BlobStoreConfig{ObjectIDLength: objectIDLength}).Validate()) + } + for _, objectIDLength := range []int{-1, 1, 9, 51} { + err := (BlobStoreConfig{ObjectIDLength: objectIDLength}).Validate() + require.ErrorContains(t, err, "objectIdLength") + } +} + func TestExternalStorageConfigKeyIsRejected(t *testing.T) { path := writeTestConfig(t, "externalStorage:\n enabled: true\n") _, err := NewConfig(path) diff --git a/server/config/config.go b/server/config/config.go index 8042bc1d1..a663ba0f1 100644 --- a/server/config/config.go +++ b/server/config/config.go @@ -68,8 +68,14 @@ const ( DefaultWorkerServiceRequestMaxAttempts = 3 // DefaultBlobCacheMaxBytes caps the Server Attribute blob cache at one GiB. DefaultBlobCacheMaxBytes int64 = 1 << 30 - // DefaultBlobStoreThresholdInBytes offloads Attribute payloads larger than one KiB. - DefaultBlobStoreThresholdInBytes = 1 << 10 + // DefaultBlobStoreThresholdInBytes offloads payloads larger than 100 bytes. + DefaultBlobStoreThresholdInBytes = 100 + // DefaultBlobStoreObjectIDLength is the default Base36 object identifier length. + DefaultBlobStoreObjectIDLength = 10 + // MinimumBlobStoreObjectIDLength is the shortest supported Base36 object identifier. + MinimumBlobStoreObjectIDLength = 10 + // MaximumBlobStoreObjectIDLength is the longest supported Base36 object identifier. + MaximumBlobStoreObjectIDLength = 50 // DefaultAttributeStoreSchemaSyncInterval refreshes table schemas every minute before jitter. DefaultAttributeStoreSchemaSyncInterval = time.Minute // DefaultAttributeStoreSyncBatchSize caps items in one Attribute Store upsert. @@ -212,8 +218,10 @@ type ( // So that worker & server can minimize the data transfer, and worker can cache the values if needed. // Default true when omitted (nil). LazyLoading *bool `yaml:"lazyLoading"` - // ThresholdInBytes triggers blob offload above this payload size. Default 1024. Zero uses the default. + // ThresholdInBytes triggers blob offload above this payload size. Default 100. Zero uses the default. ThresholdInBytes int `yaml:"thresholdInBytes"` + // ObjectIDLength sets deterministic lowercase Base36 Blob object IDs. Default 10. Valid range 10-50; zero uses the default. Immutable after startup and identical across Servers sharing a namespace. + ObjectIDLength int `yaml:"objectIdLength"` // SupportedStorages lists blob backends. Exactly one may have Status active for writes; others are read-only. SupportedStorages []BlobStoreConfigEntry `yaml:"supportedStorages"` // HistoryRetentionInDays must match the Temporal/Cadence history retention. Default 0; configure it explicitly. @@ -725,7 +733,7 @@ func (c BlobStoreConfig) EffectiveEnabled() bool { return *c.Enabled } -// EffectiveThresholdInBytes returns the offload threshold or its one-KiB default. +// EffectiveThresholdInBytes returns the offload threshold or its 100-byte default. func (c BlobStoreConfig) EffectiveThresholdInBytes() int { if c.ThresholdInBytes == 0 { return DefaultBlobStoreThresholdInBytes @@ -733,6 +741,27 @@ func (c BlobStoreConfig) EffectiveThresholdInBytes() int { return c.ThresholdInBytes } +// EffectiveObjectIDLength returns the configured Blob object ID length or its default. +func (c BlobStoreConfig) EffectiveObjectIDLength() int { + if c.ObjectIDLength == 0 { + return DefaultBlobStoreObjectIDLength + } + return c.ObjectIDLength +} + +// Validate checks Blob Store identifier and cache settings. +func (c BlobStoreConfig) Validate() error { + objectIDLength := c.EffectiveObjectIDLength() + if objectIDLength < MinimumBlobStoreObjectIDLength || objectIDLength > MaximumBlobStoreObjectIDLength { + return fmt.Errorf( + "blobStore objectIdLength must be between %d and %d", + MinimumBlobStoreObjectIDLength, + MaximumBlobStoreObjectIDLength, + ) + } + return c.BlobCache.Validate() +} + // EffectiveMaxBytes returns the configured cache budget or its one-GiB default. func (c BlobCacheConfig) EffectiveMaxBytes() int64 { if c.MaxBytes == 0 { diff --git a/server/config/config_template.yaml b/server/config/config_template.yaml index 50e05ddf5..fcb0f62e6 100644 --- a/server/config/config_template.yaml +++ b/server/config/config_template.yaml @@ -53,7 +53,8 @@ interpreter: cloudAPIKey: "" blobStore: enabled: true - thresholdInBytes: 1024 + thresholdInBytes: 100 + objectIdLength: 10 historyRetentionInDays: 3 supportedStorages: - status: active diff --git a/server/config/development.yaml b/server/config/development.yaml index 765e22069..a8cc519ec 100644 --- a/server/config/development.yaml +++ b/server/config/development.yaml @@ -43,7 +43,8 @@ interpreter: timerType: histogram blobStore: enabled: true - thresholdInBytes: 1024 # 1 KiB + thresholdInBytes: 100 + objectIdLength: 10 historyRetentionInDays: 3 # S3 Attribute cache. The directory must be exclusive to this Server process. # TinyLFU may bypass writes when existing entries are hotter. diff --git a/server/config/development_cadence.yaml b/server/config/development_cadence.yaml index dd53e474f..bc42f92d9 100644 --- a/server/config/development_cadence.yaml +++ b/server/config/development_cadence.yaml @@ -39,7 +39,8 @@ interpreter: adminSecurityToken: "" blobStore: enabled: true - thresholdInBytes: 1024 + thresholdInBytes: 100 + objectIdLength: 10 historyRetentionInDays: 3 supportedStorages: - status: active diff --git a/server/gen/dexpb/dex.pb.go b/server/gen/dexpb/dex.pb.go index e8d5d2e69..4c274e5b2 100644 --- a/server/gen/dexpb/dex.pb.go +++ b/server/gen/dexpb/dex.pb.go @@ -1472,9 +1472,10 @@ func (*Value_BoolValue) isValue_Kind() {} func (*Value_NullValue) isValue_Kind() {} type EncodedObject struct { - state protoimpl.MessageState `protogen:"open.v1"` - Encoding string `protobuf:"bytes,1,opt,name=encoding,proto3" json:"encoding,omitempty"` - Payload []byte `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + // "j" is JSON and "r" is raw bytes. Other values are passed through. + Encoding string `protobuf:"bytes,1,opt,name=encoding,proto3" json:"encoding,omitempty"` + Payload []byte `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3848,19 +3849,70 @@ func (x *SetAttributesRequest) GetRequestId() string { return "" } -type LoadBlobsRequest struct { +type LoadBlobRequestEntry struct { state protoimpl.MessageState `protogen:"open.v1"` - // Each value must be a blob-id only - // (internal_blob_id_for_string_value or internal_blob_id_for_obj_value). - // Concrete payload arms (string_value / obj_value) are rejected. - Values []*Value `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` + // Flow that owns blob_value and supplies the omitted Blob path segment. + FlowId string `protobuf:"bytes,1,opt,name=flow_id,json=flowId,proto3" json:"flow_id,omitempty"` + // Must use internal_blob_id_for_string_value or internal_blob_id_for_obj_value. + BlobValue *Value `protobuf:"bytes,2,opt,name=blob_value,json=blobValue,proto3" json:"blob_value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LoadBlobRequestEntry) Reset() { + *x = LoadBlobRequestEntry{} + mi := &file_dex_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LoadBlobRequestEntry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LoadBlobRequestEntry) ProtoMessage() {} + +func (x *LoadBlobRequestEntry) ProtoReflect() protoreflect.Message { + mi := &file_dex_proto_msgTypes[35] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LoadBlobRequestEntry.ProtoReflect.Descriptor instead. +func (*LoadBlobRequestEntry) Descriptor() ([]byte, []int) { + return file_dex_proto_rawDescGZIP(), []int{35} +} + +func (x *LoadBlobRequestEntry) GetFlowId() string { + if x != nil { + return x.FlowId + } + return "" +} + +func (x *LoadBlobRequestEntry) GetBlobValue() *Value { + if x != nil { + return x.BlobValue + } + return nil +} + +type LoadBlobsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Entries []*LoadBlobRequestEntry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *LoadBlobsRequest) Reset() { *x = LoadBlobsRequest{} - mi := &file_dex_proto_msgTypes[35] + mi := &file_dex_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3872,7 +3924,7 @@ func (x *LoadBlobsRequest) String() string { func (*LoadBlobsRequest) ProtoMessage() {} func (x *LoadBlobsRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[35] + mi := &file_dex_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3885,12 +3937,12 @@ func (x *LoadBlobsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LoadBlobsRequest.ProtoReflect.Descriptor instead. func (*LoadBlobsRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{35} + return file_dex_proto_rawDescGZIP(), []int{36} } -func (x *LoadBlobsRequest) GetValues() []*Value { +func (x *LoadBlobsRequest) GetEntries() []*LoadBlobRequestEntry { if x != nil { - return x.Values + return x.Entries } return nil } @@ -3905,7 +3957,7 @@ type LoadBlobsResponse struct { func (x *LoadBlobsResponse) Reset() { *x = LoadBlobsResponse{} - mi := &file_dex_proto_msgTypes[36] + mi := &file_dex_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3917,7 +3969,7 @@ func (x *LoadBlobsResponse) String() string { func (*LoadBlobsResponse) ProtoMessage() {} func (x *LoadBlobsResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[36] + mi := &file_dex_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3930,7 +3982,7 @@ func (x *LoadBlobsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LoadBlobsResponse.ProtoReflect.Descriptor instead. func (*LoadBlobsResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{36} + return file_dex_proto_rawDescGZIP(), []int{37} } func (x *LoadBlobsResponse) GetValues() map[string]*Value { @@ -3953,7 +4005,7 @@ type WaitForFlowRequest struct { func (x *WaitForFlowRequest) Reset() { *x = WaitForFlowRequest{} - mi := &file_dex_proto_msgTypes[37] + mi := &file_dex_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3965,7 +4017,7 @@ func (x *WaitForFlowRequest) String() string { func (*WaitForFlowRequest) ProtoMessage() {} func (x *WaitForFlowRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[37] + mi := &file_dex_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3978,7 +4030,7 @@ func (x *WaitForFlowRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitForFlowRequest.ProtoReflect.Descriptor instead. func (*WaitForFlowRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{37} + return file_dex_proto_rawDescGZIP(), []int{38} } func (x *WaitForFlowRequest) GetFlowId() string { @@ -4020,7 +4072,7 @@ type StepCompletionOutput struct { func (x *StepCompletionOutput) Reset() { *x = StepCompletionOutput{} - mi := &file_dex_proto_msgTypes[38] + mi := &file_dex_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4032,7 +4084,7 @@ func (x *StepCompletionOutput) String() string { func (*StepCompletionOutput) ProtoMessage() {} func (x *StepCompletionOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[38] + mi := &file_dex_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4045,7 +4097,7 @@ func (x *StepCompletionOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use StepCompletionOutput.ProtoReflect.Descriptor instead. func (*StepCompletionOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{38} + return file_dex_proto_rawDescGZIP(), []int{39} } func (x *StepCompletionOutput) GetCompletedStepType() string { @@ -4081,7 +4133,7 @@ type FlowResult struct { func (x *FlowResult) Reset() { *x = FlowResult{} - mi := &file_dex_proto_msgTypes[39] + mi := &file_dex_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4093,7 +4145,7 @@ func (x *FlowResult) String() string { func (*FlowResult) ProtoMessage() {} func (x *FlowResult) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[39] + mi := &file_dex_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4106,7 +4158,7 @@ func (x *FlowResult) ProtoReflect() protoreflect.Message { // Deprecated: Use FlowResult.ProtoReflect.Descriptor instead. func (*FlowResult) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{39} + return file_dex_proto_rawDescGZIP(), []int{40} } func (x *FlowResult) GetFlowStatus() FlowStatus { @@ -4148,7 +4200,7 @@ type SearchFlowsRequest struct { func (x *SearchFlowsRequest) Reset() { *x = SearchFlowsRequest{} - mi := &file_dex_proto_msgTypes[40] + mi := &file_dex_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4160,7 +4212,7 @@ func (x *SearchFlowsRequest) String() string { func (*SearchFlowsRequest) ProtoMessage() {} func (x *SearchFlowsRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[40] + mi := &file_dex_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4173,7 +4225,7 @@ func (x *SearchFlowsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SearchFlowsRequest.ProtoReflect.Descriptor instead. func (*SearchFlowsRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{40} + return file_dex_proto_rawDescGZIP(), []int{41} } func (x *SearchFlowsRequest) GetQuery() string { @@ -4207,7 +4259,7 @@ type SearchFlowsResponse struct { func (x *SearchFlowsResponse) Reset() { *x = SearchFlowsResponse{} - mi := &file_dex_proto_msgTypes[41] + mi := &file_dex_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4219,7 +4271,7 @@ func (x *SearchFlowsResponse) String() string { func (*SearchFlowsResponse) ProtoMessage() {} func (x *SearchFlowsResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[41] + mi := &file_dex_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4232,7 +4284,7 @@ func (x *SearchFlowsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SearchFlowsResponse.ProtoReflect.Descriptor instead. func (*SearchFlowsResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{41} + return file_dex_proto_rawDescGZIP(), []int{42} } func (x *SearchFlowsResponse) GetFlowRuns() []*SearchFlowsResponseEntry { @@ -4264,7 +4316,7 @@ type SearchFlowsResponseEntry struct { func (x *SearchFlowsResponseEntry) Reset() { *x = SearchFlowsResponseEntry{} - mi := &file_dex_proto_msgTypes[42] + mi := &file_dex_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4276,7 +4328,7 @@ func (x *SearchFlowsResponseEntry) String() string { func (*SearchFlowsResponseEntry) ProtoMessage() {} func (x *SearchFlowsResponseEntry) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[42] + mi := &file_dex_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4289,7 +4341,7 @@ func (x *SearchFlowsResponseEntry) ProtoReflect() protoreflect.Message { // Deprecated: Use SearchFlowsResponseEntry.ProtoReflect.Descriptor instead. func (*SearchFlowsResponseEntry) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{42} + return file_dex_proto_rawDescGZIP(), []int{43} } func (x *SearchFlowsResponseEntry) GetFlowId() string { @@ -4350,7 +4402,7 @@ type SyncAttributeIndexRequest struct { func (x *SyncAttributeIndexRequest) Reset() { *x = SyncAttributeIndexRequest{} - mi := &file_dex_proto_msgTypes[43] + mi := &file_dex_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4362,7 +4414,7 @@ func (x *SyncAttributeIndexRequest) String() string { func (*SyncAttributeIndexRequest) ProtoMessage() {} func (x *SyncAttributeIndexRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[43] + mi := &file_dex_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4375,7 +4427,7 @@ func (x *SyncAttributeIndexRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAttributeIndexRequest.ProtoReflect.Descriptor instead. func (*SyncAttributeIndexRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{43} + return file_dex_proto_rawDescGZIP(), []int{44} } func (x *SyncAttributeIndexRequest) GetAttributeIndexes() map[string]IndexType { @@ -4393,7 +4445,7 @@ type SyncAttributeIndexResponse struct { func (x *SyncAttributeIndexResponse) Reset() { *x = SyncAttributeIndexResponse{} - mi := &file_dex_proto_msgTypes[44] + mi := &file_dex_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4405,7 +4457,7 @@ func (x *SyncAttributeIndexResponse) String() string { func (*SyncAttributeIndexResponse) ProtoMessage() {} func (x *SyncAttributeIndexResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[44] + mi := &file_dex_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4418,7 +4470,7 @@ func (x *SyncAttributeIndexResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAttributeIndexResponse.ProtoReflect.Descriptor instead. func (*SyncAttributeIndexResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{44} + return file_dex_proto_rawDescGZIP(), []int{45} } type FlowExecutionID struct { @@ -4431,7 +4483,7 @@ type FlowExecutionID struct { func (x *FlowExecutionID) Reset() { *x = FlowExecutionID{} - mi := &file_dex_proto_msgTypes[45] + mi := &file_dex_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4443,7 +4495,7 @@ func (x *FlowExecutionID) String() string { func (*FlowExecutionID) ProtoMessage() {} func (x *FlowExecutionID) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[45] + mi := &file_dex_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4456,7 +4508,7 @@ func (x *FlowExecutionID) ProtoReflect() protoreflect.Message { // Deprecated: Use FlowExecutionID.ProtoReflect.Descriptor instead. func (*FlowExecutionID) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{45} + return file_dex_proto_rawDescGZIP(), []int{46} } func (x *FlowExecutionID) GetFlowId() string { @@ -4483,7 +4535,7 @@ type GetFlowSummaryRequest struct { func (x *GetFlowSummaryRequest) Reset() { *x = GetFlowSummaryRequest{} - mi := &file_dex_proto_msgTypes[46] + mi := &file_dex_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4495,7 +4547,7 @@ func (x *GetFlowSummaryRequest) String() string { func (*GetFlowSummaryRequest) ProtoMessage() {} func (x *GetFlowSummaryRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[46] + mi := &file_dex_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4508,7 +4560,7 @@ func (x *GetFlowSummaryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlowSummaryRequest.ProtoReflect.Descriptor instead. func (*GetFlowSummaryRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{46} + return file_dex_proto_rawDescGZIP(), []int{47} } func (x *GetFlowSummaryRequest) GetFlowId() string { @@ -4540,7 +4592,7 @@ type GetFlowSummaryResponse struct { func (x *GetFlowSummaryResponse) Reset() { *x = GetFlowSummaryResponse{} - mi := &file_dex_proto_msgTypes[47] + mi := &file_dex_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4552,7 +4604,7 @@ func (x *GetFlowSummaryResponse) String() string { func (*GetFlowSummaryResponse) ProtoMessage() {} func (x *GetFlowSummaryResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[47] + mi := &file_dex_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4565,7 +4617,7 @@ func (x *GetFlowSummaryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlowSummaryResponse.ProtoReflect.Descriptor instead. func (*GetFlowSummaryResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{47} + return file_dex_proto_rawDescGZIP(), []int{48} } func (x *GetFlowSummaryResponse) GetFlowExecutionId() *FlowExecutionID { @@ -4631,7 +4683,7 @@ type InternalAsyncStepInputSnapshot struct { func (x *InternalAsyncStepInputSnapshot) Reset() { *x = InternalAsyncStepInputSnapshot{} - mi := &file_dex_proto_msgTypes[48] + mi := &file_dex_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4643,7 +4695,7 @@ func (x *InternalAsyncStepInputSnapshot) String() string { func (*InternalAsyncStepInputSnapshot) ProtoMessage() {} func (x *InternalAsyncStepInputSnapshot) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[48] + mi := &file_dex_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4656,7 +4708,7 @@ func (x *InternalAsyncStepInputSnapshot) ProtoReflect() protoreflect.Message { // Deprecated: Use InternalAsyncStepInputSnapshot.ProtoReflect.Descriptor instead. func (*InternalAsyncStepInputSnapshot) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{48} + return file_dex_proto_rawDescGZIP(), []int{49} } func (x *InternalAsyncStepInputSnapshot) GetMethodOptions() *StepMethodOptions { @@ -4717,7 +4769,7 @@ type InternalLocalActivityInput struct { func (x *InternalLocalActivityInput) Reset() { *x = InternalLocalActivityInput{} - mi := &file_dex_proto_msgTypes[49] + mi := &file_dex_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4729,7 +4781,7 @@ func (x *InternalLocalActivityInput) String() string { func (*InternalLocalActivityInput) ProtoMessage() {} func (x *InternalLocalActivityInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[49] + mi := &file_dex_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4742,7 +4794,7 @@ func (x *InternalLocalActivityInput) ProtoReflect() protoreflect.Message { // Deprecated: Use InternalLocalActivityInput.ProtoReflect.Descriptor instead. func (*InternalLocalActivityInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{49} + return file_dex_proto_rawDescGZIP(), []int{50} } func (x *InternalLocalActivityInput) GetCurrentRunStartedTimestamp() int64 { @@ -4772,7 +4824,7 @@ type GetHistoryEventsRequest struct { func (x *GetHistoryEventsRequest) Reset() { *x = GetHistoryEventsRequest{} - mi := &file_dex_proto_msgTypes[50] + mi := &file_dex_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4784,7 +4836,7 @@ func (x *GetHistoryEventsRequest) String() string { func (*GetHistoryEventsRequest) ProtoMessage() {} func (x *GetHistoryEventsRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[50] + mi := &file_dex_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4797,7 +4849,7 @@ func (x *GetHistoryEventsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetHistoryEventsRequest.ProtoReflect.Descriptor instead. func (*GetHistoryEventsRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{50} + return file_dex_proto_rawDescGZIP(), []int{51} } func (x *GetHistoryEventsRequest) GetFlowId() string { @@ -4846,7 +4898,7 @@ type GetHistoryEventsResponse struct { func (x *GetHistoryEventsResponse) Reset() { *x = GetHistoryEventsResponse{} - mi := &file_dex_proto_msgTypes[51] + mi := &file_dex_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4858,7 +4910,7 @@ func (x *GetHistoryEventsResponse) String() string { func (*GetHistoryEventsResponse) ProtoMessage() {} func (x *GetHistoryEventsResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[51] + mi := &file_dex_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4871,7 +4923,7 @@ func (x *GetHistoryEventsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetHistoryEventsResponse.ProtoReflect.Descriptor instead. func (*GetHistoryEventsResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{51} + return file_dex_proto_rawDescGZIP(), []int{52} } func (x *GetHistoryEventsResponse) GetEvents() []*FlowHistoryEvent { @@ -4920,7 +4972,7 @@ type FlowHistoryEvent struct { func (x *FlowHistoryEvent) Reset() { *x = FlowHistoryEvent{} - mi := &file_dex_proto_msgTypes[52] + mi := &file_dex_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4932,7 +4984,7 @@ func (x *FlowHistoryEvent) String() string { func (*FlowHistoryEvent) ProtoMessage() {} func (x *FlowHistoryEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[52] + mi := &file_dex_proto_msgTypes[53] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4945,7 +4997,7 @@ func (x *FlowHistoryEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use FlowHistoryEvent.ProtoReflect.Descriptor instead. func (*FlowHistoryEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{52} + return file_dex_proto_rawDescGZIP(), []int{53} } func (x *FlowHistoryEvent) GetEventId() int64 { @@ -5164,7 +5216,7 @@ type TimeTravelForkHistoryEvent struct { func (x *TimeTravelForkHistoryEvent) Reset() { *x = TimeTravelForkHistoryEvent{} - mi := &file_dex_proto_msgTypes[53] + mi := &file_dex_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5176,7 +5228,7 @@ func (x *TimeTravelForkHistoryEvent) String() string { func (*TimeTravelForkHistoryEvent) ProtoMessage() {} func (x *TimeTravelForkHistoryEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[53] + mi := &file_dex_proto_msgTypes[54] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5189,7 +5241,7 @@ func (x *TimeTravelForkHistoryEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use TimeTravelForkHistoryEvent.ProtoReflect.Descriptor instead. func (*TimeTravelForkHistoryEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{53} + return file_dex_proto_rawDescGZIP(), []int{54} } func (x *TimeTravelForkHistoryEvent) GetPreviousRunId() string { @@ -5218,7 +5270,7 @@ type FlowStartedOrContinuedHistoryEvent struct { func (x *FlowStartedOrContinuedHistoryEvent) Reset() { *x = FlowStartedOrContinuedHistoryEvent{} - mi := &file_dex_proto_msgTypes[54] + mi := &file_dex_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5230,7 +5282,7 @@ func (x *FlowStartedOrContinuedHistoryEvent) String() string { func (*FlowStartedOrContinuedHistoryEvent) ProtoMessage() {} func (x *FlowStartedOrContinuedHistoryEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[54] + mi := &file_dex_proto_msgTypes[55] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5243,7 +5295,7 @@ func (x *FlowStartedOrContinuedHistoryEvent) ProtoReflect() protoreflect.Message // Deprecated: Use FlowStartedOrContinuedHistoryEvent.ProtoReflect.Descriptor instead. func (*FlowStartedOrContinuedHistoryEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{54} + return file_dex_proto_rawDescGZIP(), []int{55} } func (x *FlowStartedOrContinuedHistoryEvent) GetFlowExecutionId() *FlowExecutionID { @@ -5343,7 +5395,7 @@ type FlowInitialStart struct { func (x *FlowInitialStart) Reset() { *x = FlowInitialStart{} - mi := &file_dex_proto_msgTypes[55] + mi := &file_dex_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5355,7 +5407,7 @@ func (x *FlowInitialStart) String() string { func (*FlowInitialStart) ProtoMessage() {} func (x *FlowInitialStart) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[55] + mi := &file_dex_proto_msgTypes[56] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5368,7 +5420,7 @@ func (x *FlowInitialStart) ProtoReflect() protoreflect.Message { // Deprecated: Use FlowInitialStart.ProtoReflect.Descriptor instead. func (*FlowInitialStart) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{55} + return file_dex_proto_rawDescGZIP(), []int{56} } func (x *FlowInitialStart) GetStartStepType() string { @@ -5413,7 +5465,7 @@ type FlowContinuedStart struct { func (x *FlowContinuedStart) Reset() { *x = FlowContinuedStart{} - mi := &file_dex_proto_msgTypes[56] + mi := &file_dex_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5425,7 +5477,7 @@ func (x *FlowContinuedStart) String() string { func (*FlowContinuedStart) ProtoMessage() {} func (x *FlowContinuedStart) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[56] + mi := &file_dex_proto_msgTypes[57] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5438,7 +5490,7 @@ func (x *FlowContinuedStart) ProtoReflect() protoreflect.Message { // Deprecated: Use FlowContinuedStart.ProtoReflect.Descriptor instead. func (*FlowContinuedStart) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{56} + return file_dex_proto_rawDescGZIP(), []int{57} } func (x *FlowContinuedStart) GetPreviousRunId() string { @@ -5496,7 +5548,7 @@ type FlowClosedHistoryEvent struct { func (x *FlowClosedHistoryEvent) Reset() { *x = FlowClosedHistoryEvent{} - mi := &file_dex_proto_msgTypes[57] + mi := &file_dex_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5508,7 +5560,7 @@ func (x *FlowClosedHistoryEvent) String() string { func (*FlowClosedHistoryEvent) ProtoMessage() {} func (x *FlowClosedHistoryEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[57] + mi := &file_dex_proto_msgTypes[58] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5521,7 +5573,7 @@ func (x *FlowClosedHistoryEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use FlowClosedHistoryEvent.ProtoReflect.Descriptor instead. func (*FlowClosedHistoryEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{57} + return file_dex_proto_rawDescGZIP(), []int{58} } func (x *FlowClosedHistoryEvent) GetFlowStatus() FlowStatus { @@ -5571,7 +5623,7 @@ type StepMethodPendingEvent struct { func (x *StepMethodPendingEvent) Reset() { *x = StepMethodPendingEvent{} - mi := &file_dex_proto_msgTypes[58] + mi := &file_dex_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5583,7 +5635,7 @@ func (x *StepMethodPendingEvent) String() string { func (*StepMethodPendingEvent) ProtoMessage() {} func (x *StepMethodPendingEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[58] + mi := &file_dex_proto_msgTypes[59] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5596,7 +5648,7 @@ func (x *StepMethodPendingEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use StepMethodPendingEvent.ProtoReflect.Descriptor instead. func (*StepMethodPendingEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{58} + return file_dex_proto_rawDescGZIP(), []int{59} } func (x *StepMethodPendingEvent) GetInput() *StepMethodEventInput { @@ -5631,7 +5683,7 @@ type StepMethodFailure struct { func (x *StepMethodFailure) Reset() { *x = StepMethodFailure{} - mi := &file_dex_proto_msgTypes[59] + mi := &file_dex_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5643,7 +5695,7 @@ func (x *StepMethodFailure) String() string { func (*StepMethodFailure) ProtoMessage() {} func (x *StepMethodFailure) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[59] + mi := &file_dex_proto_msgTypes[60] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5656,7 +5708,7 @@ func (x *StepMethodFailure) ProtoReflect() protoreflect.Message { // Deprecated: Use StepMethodFailure.ProtoReflect.Descriptor instead. func (*StepMethodFailure) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{59} + return file_dex_proto_rawDescGZIP(), []int{60} } func (x *StepMethodFailure) GetBackendError() string { @@ -5691,7 +5743,7 @@ type StepMethodOptions struct { func (x *StepMethodOptions) Reset() { *x = StepMethodOptions{} - mi := &file_dex_proto_msgTypes[60] + mi := &file_dex_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5703,7 +5755,7 @@ func (x *StepMethodOptions) String() string { func (*StepMethodOptions) ProtoMessage() {} func (x *StepMethodOptions) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[60] + mi := &file_dex_proto_msgTypes[61] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5716,7 +5768,7 @@ func (x *StepMethodOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use StepMethodOptions.ProtoReflect.Descriptor instead. func (*StepMethodOptions) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{60} + return file_dex_proto_rawDescGZIP(), []int{61} } func (x *StepMethodOptions) GetTimeoutSeconds() int32 { @@ -5753,7 +5805,7 @@ type StepMethodEventInput struct { func (x *StepMethodEventInput) Reset() { *x = StepMethodEventInput{} - mi := &file_dex_proto_msgTypes[61] + mi := &file_dex_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5765,7 +5817,7 @@ func (x *StepMethodEventInput) String() string { func (*StepMethodEventInput) ProtoMessage() {} func (x *StepMethodEventInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[61] + mi := &file_dex_proto_msgTypes[62] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5778,7 +5830,7 @@ func (x *StepMethodEventInput) ProtoReflect() protoreflect.Message { // Deprecated: Use StepMethodEventInput.ProtoReflect.Descriptor instead. func (*StepMethodEventInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{61} + return file_dex_proto_rawDescGZIP(), []int{62} } func (x *StepMethodEventInput) GetUnavailable() bool { @@ -5833,7 +5885,7 @@ type StepMethodEventContext struct { func (x *StepMethodEventContext) Reset() { *x = StepMethodEventContext{} - mi := &file_dex_proto_msgTypes[62] + mi := &file_dex_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5845,7 +5897,7 @@ func (x *StepMethodEventContext) String() string { func (*StepMethodEventContext) ProtoMessage() {} func (x *StepMethodEventContext) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[62] + mi := &file_dex_proto_msgTypes[63] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5858,7 +5910,7 @@ func (x *StepMethodEventContext) ProtoReflect() protoreflect.Message { // Deprecated: Use StepMethodEventContext.ProtoReflect.Descriptor instead. func (*StepMethodEventContext) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{62} + return file_dex_proto_rawDescGZIP(), []int{63} } func (x *StepMethodEventContext) GetStepExecutionId() string { @@ -5938,7 +5990,7 @@ type StepWaitForCompletedOutput struct { func (x *StepWaitForCompletedOutput) Reset() { *x = StepWaitForCompletedOutput{} - mi := &file_dex_proto_msgTypes[63] + mi := &file_dex_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5950,7 +6002,7 @@ func (x *StepWaitForCompletedOutput) String() string { func (*StepWaitForCompletedOutput) ProtoMessage() {} func (x *StepWaitForCompletedOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[63] + mi := &file_dex_proto_msgTypes[64] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5963,7 +6015,7 @@ func (x *StepWaitForCompletedOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use StepWaitForCompletedOutput.ProtoReflect.Descriptor instead. func (*StepWaitForCompletedOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{63} + return file_dex_proto_rawDescGZIP(), []int{64} } func (x *StepWaitForCompletedOutput) GetWaitForCondition() *WaitingCondition { @@ -6022,7 +6074,7 @@ type StepExecuteCompletedOutput struct { func (x *StepExecuteCompletedOutput) Reset() { *x = StepExecuteCompletedOutput{} - mi := &file_dex_proto_msgTypes[64] + mi := &file_dex_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6034,7 +6086,7 @@ func (x *StepExecuteCompletedOutput) String() string { func (*StepExecuteCompletedOutput) ProtoMessage() {} func (x *StepExecuteCompletedOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[64] + mi := &file_dex_proto_msgTypes[65] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6047,7 +6099,7 @@ func (x *StepExecuteCompletedOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use StepExecuteCompletedOutput.ProtoReflect.Descriptor instead. func (*StepExecuteCompletedOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{64} + return file_dex_proto_rawDescGZIP(), []int{65} } func (x *StepExecuteCompletedOutput) GetStepDecision() *StepDecision { @@ -6101,7 +6153,7 @@ type StepMethodFailedOutput struct { func (x *StepMethodFailedOutput) Reset() { *x = StepMethodFailedOutput{} - mi := &file_dex_proto_msgTypes[65] + mi := &file_dex_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6113,7 +6165,7 @@ func (x *StepMethodFailedOutput) String() string { func (*StepMethodFailedOutput) ProtoMessage() {} func (x *StepMethodFailedOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[65] + mi := &file_dex_proto_msgTypes[66] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6126,7 +6178,7 @@ func (x *StepMethodFailedOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use StepMethodFailedOutput.ProtoReflect.Descriptor instead. func (*StepMethodFailedOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{65} + return file_dex_proto_rawDescGZIP(), []int{66} } func (x *StepMethodFailedOutput) GetFailure() *StepMethodFailure { @@ -6147,7 +6199,7 @@ type StepWaitForCompletedEvent struct { func (x *StepWaitForCompletedEvent) Reset() { *x = StepWaitForCompletedEvent{} - mi := &file_dex_proto_msgTypes[66] + mi := &file_dex_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6159,7 +6211,7 @@ func (x *StepWaitForCompletedEvent) String() string { func (*StepWaitForCompletedEvent) ProtoMessage() {} func (x *StepWaitForCompletedEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[66] + mi := &file_dex_proto_msgTypes[67] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6172,7 +6224,7 @@ func (x *StepWaitForCompletedEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use StepWaitForCompletedEvent.ProtoReflect.Descriptor instead. func (*StepWaitForCompletedEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{66} + return file_dex_proto_rawDescGZIP(), []int{67} } func (x *StepWaitForCompletedEvent) GetInput() *StepMethodEventInput { @@ -6207,7 +6259,7 @@ type StepWaitForFailedEvent struct { func (x *StepWaitForFailedEvent) Reset() { *x = StepWaitForFailedEvent{} - mi := &file_dex_proto_msgTypes[67] + mi := &file_dex_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6219,7 +6271,7 @@ func (x *StepWaitForFailedEvent) String() string { func (*StepWaitForFailedEvent) ProtoMessage() {} func (x *StepWaitForFailedEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[67] + mi := &file_dex_proto_msgTypes[68] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6232,7 +6284,7 @@ func (x *StepWaitForFailedEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use StepWaitForFailedEvent.ProtoReflect.Descriptor instead. func (*StepWaitForFailedEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{67} + return file_dex_proto_rawDescGZIP(), []int{68} } func (x *StepWaitForFailedEvent) GetInput() *StepMethodEventInput { @@ -6267,7 +6319,7 @@ type StepExecuteCompletedEvent struct { func (x *StepExecuteCompletedEvent) Reset() { *x = StepExecuteCompletedEvent{} - mi := &file_dex_proto_msgTypes[68] + mi := &file_dex_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6279,7 +6331,7 @@ func (x *StepExecuteCompletedEvent) String() string { func (*StepExecuteCompletedEvent) ProtoMessage() {} func (x *StepExecuteCompletedEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[68] + mi := &file_dex_proto_msgTypes[69] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6292,7 +6344,7 @@ func (x *StepExecuteCompletedEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use StepExecuteCompletedEvent.ProtoReflect.Descriptor instead. func (*StepExecuteCompletedEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{68} + return file_dex_proto_rawDescGZIP(), []int{69} } func (x *StepExecuteCompletedEvent) GetInput() *StepMethodEventInput { @@ -6327,7 +6379,7 @@ type StepExecuteFailedEvent struct { func (x *StepExecuteFailedEvent) Reset() { *x = StepExecuteFailedEvent{} - mi := &file_dex_proto_msgTypes[69] + mi := &file_dex_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6339,7 +6391,7 @@ func (x *StepExecuteFailedEvent) String() string { func (*StepExecuteFailedEvent) ProtoMessage() {} func (x *StepExecuteFailedEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[69] + mi := &file_dex_proto_msgTypes[70] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6352,7 +6404,7 @@ func (x *StepExecuteFailedEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use StepExecuteFailedEvent.ProtoReflect.Descriptor instead. func (*StepExecuteFailedEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{69} + return file_dex_proto_rawDescGZIP(), []int{70} } func (x *StepExecuteFailedEvent) GetInput() *StepMethodEventInput { @@ -6395,7 +6447,7 @@ type RpcExecutionCompletedEvent struct { func (x *RpcExecutionCompletedEvent) Reset() { *x = RpcExecutionCompletedEvent{} - mi := &file_dex_proto_msgTypes[70] + mi := &file_dex_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6407,7 +6459,7 @@ func (x *RpcExecutionCompletedEvent) String() string { func (*RpcExecutionCompletedEvent) ProtoMessage() {} func (x *RpcExecutionCompletedEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[70] + mi := &file_dex_proto_msgTypes[71] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6420,7 +6472,7 @@ func (x *RpcExecutionCompletedEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use RpcExecutionCompletedEvent.ProtoReflect.Descriptor instead. func (*RpcExecutionCompletedEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{70} + return file_dex_proto_rawDescGZIP(), []int{71} } func (x *RpcExecutionCompletedEvent) GetRpcName() string { @@ -6495,7 +6547,7 @@ type ChannelExternalPublishEvent struct { func (x *ChannelExternalPublishEvent) Reset() { *x = ChannelExternalPublishEvent{} - mi := &file_dex_proto_msgTypes[71] + mi := &file_dex_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6507,7 +6559,7 @@ func (x *ChannelExternalPublishEvent) String() string { func (*ChannelExternalPublishEvent) ProtoMessage() {} func (x *ChannelExternalPublishEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[71] + mi := &file_dex_proto_msgTypes[72] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6520,7 +6572,7 @@ func (x *ChannelExternalPublishEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use ChannelExternalPublishEvent.ProtoReflect.Descriptor instead. func (*ChannelExternalPublishEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{71} + return file_dex_proto_rawDescGZIP(), []int{72} } func (x *ChannelExternalPublishEvent) GetMessages() []*ChannelMessage { @@ -6539,7 +6591,7 @@ type ChannelExternalDeleteEvent struct { func (x *ChannelExternalDeleteEvent) Reset() { *x = ChannelExternalDeleteEvent{} - mi := &file_dex_proto_msgTypes[72] + mi := &file_dex_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6551,7 +6603,7 @@ func (x *ChannelExternalDeleteEvent) String() string { func (*ChannelExternalDeleteEvent) ProtoMessage() {} func (x *ChannelExternalDeleteEvent) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[72] + mi := &file_dex_proto_msgTypes[73] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6564,7 +6616,7 @@ func (x *ChannelExternalDeleteEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use ChannelExternalDeleteEvent.ProtoReflect.Descriptor instead. func (*ChannelExternalDeleteEvent) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{72} + return file_dex_proto_rawDescGZIP(), []int{73} } func (x *ChannelExternalDeleteEvent) GetMessages() []*ChannelMessageDeletion { @@ -6585,7 +6637,7 @@ type WaitForHistoryEventRequest struct { func (x *WaitForHistoryEventRequest) Reset() { *x = WaitForHistoryEventRequest{} - mi := &file_dex_proto_msgTypes[73] + mi := &file_dex_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6597,7 +6649,7 @@ func (x *WaitForHistoryEventRequest) String() string { func (*WaitForHistoryEventRequest) ProtoMessage() {} func (x *WaitForHistoryEventRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[73] + mi := &file_dex_proto_msgTypes[74] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6610,7 +6662,7 @@ func (x *WaitForHistoryEventRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitForHistoryEventRequest.ProtoReflect.Descriptor instead. func (*WaitForHistoryEventRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{73} + return file_dex_proto_rawDescGZIP(), []int{74} } func (x *WaitForHistoryEventRequest) GetFlowId() string { @@ -6645,7 +6697,7 @@ type WaitForHistoryEventResponse struct { func (x *WaitForHistoryEventResponse) Reset() { *x = WaitForHistoryEventResponse{} - mi := &file_dex_proto_msgTypes[74] + mi := &file_dex_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6657,7 +6709,7 @@ func (x *WaitForHistoryEventResponse) String() string { func (*WaitForHistoryEventResponse) ProtoMessage() {} func (x *WaitForHistoryEventResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[74] + mi := &file_dex_proto_msgTypes[75] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6670,7 +6722,7 @@ func (x *WaitForHistoryEventResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitForHistoryEventResponse.ProtoReflect.Descriptor instead. func (*WaitForHistoryEventResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{74} + return file_dex_proto_rawDescGZIP(), []int{75} } func (x *WaitForHistoryEventResponse) GetEventAvailable() bool { @@ -6712,7 +6764,7 @@ type ActiveStepExecutionState struct { func (x *ActiveStepExecutionState) Reset() { *x = ActiveStepExecutionState{} - mi := &file_dex_proto_msgTypes[75] + mi := &file_dex_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6724,7 +6776,7 @@ func (x *ActiveStepExecutionState) String() string { func (*ActiveStepExecutionState) ProtoMessage() {} func (x *ActiveStepExecutionState) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[75] + mi := &file_dex_proto_msgTypes[76] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6737,7 +6789,7 @@ func (x *ActiveStepExecutionState) ProtoReflect() protoreflect.Message { // Deprecated: Use ActiveStepExecutionState.ProtoReflect.Descriptor instead. func (*ActiveStepExecutionState) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{75} + return file_dex_proto_rawDescGZIP(), []int{76} } func (x *ActiveStepExecutionState) GetStepExecutionId() string { @@ -6820,7 +6872,7 @@ type GetFlowStateRequest struct { func (x *GetFlowStateRequest) Reset() { *x = GetFlowStateRequest{} - mi := &file_dex_proto_msgTypes[76] + mi := &file_dex_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6832,7 +6884,7 @@ func (x *GetFlowStateRequest) String() string { func (*GetFlowStateRequest) ProtoMessage() {} func (x *GetFlowStateRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[76] + mi := &file_dex_proto_msgTypes[77] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6845,7 +6897,7 @@ func (x *GetFlowStateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlowStateRequest.ProtoReflect.Descriptor instead. func (*GetFlowStateRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{76} + return file_dex_proto_rawDescGZIP(), []int{77} } func (x *GetFlowStateRequest) GetFlowId() string { @@ -6876,7 +6928,7 @@ type GetFlowStateResponse struct { func (x *GetFlowStateResponse) Reset() { *x = GetFlowStateResponse{} - mi := &file_dex_proto_msgTypes[77] + mi := &file_dex_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6888,7 +6940,7 @@ func (x *GetFlowStateResponse) String() string { func (*GetFlowStateResponse) ProtoMessage() {} func (x *GetFlowStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[77] + mi := &file_dex_proto_msgTypes[78] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6901,7 +6953,7 @@ func (x *GetFlowStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlowStateResponse.ProtoReflect.Descriptor instead. func (*GetFlowStateResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{77} + return file_dex_proto_rawDescGZIP(), []int{78} } func (x *GetFlowStateResponse) GetFlowConfig() *FlowConfig { @@ -6964,7 +7016,7 @@ type ResetFlowRequest struct { func (x *ResetFlowRequest) Reset() { *x = ResetFlowRequest{} - mi := &file_dex_proto_msgTypes[78] + mi := &file_dex_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6976,7 +7028,7 @@ func (x *ResetFlowRequest) String() string { func (*ResetFlowRequest) ProtoMessage() {} func (x *ResetFlowRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[78] + mi := &file_dex_proto_msgTypes[79] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6989,7 +7041,7 @@ func (x *ResetFlowRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetFlowRequest.ProtoReflect.Descriptor instead. func (*ResetFlowRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{78} + return file_dex_proto_rawDescGZIP(), []int{79} } func (x *ResetFlowRequest) GetFlowId() string { @@ -7064,7 +7116,7 @@ type ResetFlowResponse struct { func (x *ResetFlowResponse) Reset() { *x = ResetFlowResponse{} - mi := &file_dex_proto_msgTypes[79] + mi := &file_dex_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7076,7 +7128,7 @@ func (x *ResetFlowResponse) String() string { func (*ResetFlowResponse) ProtoMessage() {} func (x *ResetFlowResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[79] + mi := &file_dex_proto_msgTypes[80] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7089,7 +7141,7 @@ func (x *ResetFlowResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetFlowResponse.ProtoReflect.Descriptor instead. func (*ResetFlowResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{79} + return file_dex_proto_rawDescGZIP(), []int{80} } func (x *ResetFlowResponse) GetRunId() string { @@ -7129,7 +7181,7 @@ type InvokeRPCRequest struct { func (x *InvokeRPCRequest) Reset() { *x = InvokeRPCRequest{} - mi := &file_dex_proto_msgTypes[80] + mi := &file_dex_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7141,7 +7193,7 @@ func (x *InvokeRPCRequest) String() string { func (*InvokeRPCRequest) ProtoMessage() {} func (x *InvokeRPCRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[80] + mi := &file_dex_proto_msgTypes[81] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7154,7 +7206,7 @@ func (x *InvokeRPCRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeRPCRequest.ProtoReflect.Descriptor instead. func (*InvokeRPCRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{80} + return file_dex_proto_rawDescGZIP(), []int{81} } func (x *InvokeRPCRequest) GetFlowId() string { @@ -7243,7 +7295,7 @@ type InvokeRPCResponse struct { func (x *InvokeRPCResponse) Reset() { *x = InvokeRPCResponse{} - mi := &file_dex_proto_msgTypes[81] + mi := &file_dex_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7255,7 +7307,7 @@ func (x *InvokeRPCResponse) String() string { func (*InvokeRPCResponse) ProtoMessage() {} func (x *InvokeRPCResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[81] + mi := &file_dex_proto_msgTypes[82] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7268,7 +7320,7 @@ func (x *InvokeRPCResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeRPCResponse.ProtoReflect.Descriptor instead. func (*InvokeRPCResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{81} + return file_dex_proto_rawDescGZIP(), []int{82} } func (x *InvokeRPCResponse) GetOutput() *Value { @@ -7291,7 +7343,7 @@ type SkipTimerRequest struct { func (x *SkipTimerRequest) Reset() { *x = SkipTimerRequest{} - mi := &file_dex_proto_msgTypes[82] + mi := &file_dex_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7303,7 +7355,7 @@ func (x *SkipTimerRequest) String() string { func (*SkipTimerRequest) ProtoMessage() {} func (x *SkipTimerRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[82] + mi := &file_dex_proto_msgTypes[83] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7316,7 +7368,7 @@ func (x *SkipTimerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SkipTimerRequest.ProtoReflect.Descriptor instead. func (*SkipTimerRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{82} + return file_dex_proto_rawDescGZIP(), []int{83} } func (x *SkipTimerRequest) GetFlowId() string { @@ -7365,7 +7417,7 @@ type UpdateFlowConfigRequest struct { func (x *UpdateFlowConfigRequest) Reset() { *x = UpdateFlowConfigRequest{} - mi := &file_dex_proto_msgTypes[83] + mi := &file_dex_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7377,7 +7429,7 @@ func (x *UpdateFlowConfigRequest) String() string { func (*UpdateFlowConfigRequest) ProtoMessage() {} func (x *UpdateFlowConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[83] + mi := &file_dex_proto_msgTypes[84] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7390,7 +7442,7 @@ func (x *UpdateFlowConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateFlowConfigRequest.ProtoReflect.Descriptor instead. func (*UpdateFlowConfigRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{83} + return file_dex_proto_rawDescGZIP(), []int{84} } func (x *UpdateFlowConfigRequest) GetFlowId() string { @@ -7435,7 +7487,7 @@ type WaitForStepCompletionRequest struct { func (x *WaitForStepCompletionRequest) Reset() { *x = WaitForStepCompletionRequest{} - mi := &file_dex_proto_msgTypes[84] + mi := &file_dex_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7447,7 +7499,7 @@ func (x *WaitForStepCompletionRequest) String() string { func (*WaitForStepCompletionRequest) ProtoMessage() {} func (x *WaitForStepCompletionRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[84] + mi := &file_dex_proto_msgTypes[85] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7460,7 +7512,7 @@ func (x *WaitForStepCompletionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitForStepCompletionRequest.ProtoReflect.Descriptor instead. func (*WaitForStepCompletionRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{84} + return file_dex_proto_rawDescGZIP(), []int{85} } func (x *WaitForStepCompletionRequest) GetFlowId() string { @@ -7506,7 +7558,7 @@ type WaitForStepCompletionResponse struct { func (x *WaitForStepCompletionResponse) Reset() { *x = WaitForStepCompletionResponse{} - mi := &file_dex_proto_msgTypes[85] + mi := &file_dex_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7518,7 +7570,7 @@ func (x *WaitForStepCompletionResponse) String() string { func (*WaitForStepCompletionResponse) ProtoMessage() {} func (x *WaitForStepCompletionResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[85] + mi := &file_dex_proto_msgTypes[86] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7531,7 +7583,7 @@ func (x *WaitForStepCompletionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitForStepCompletionResponse.ProtoReflect.Descriptor instead. func (*WaitForStepCompletionResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{85} + return file_dex_proto_rawDescGZIP(), []int{86} } type WaitForAttributeRequest struct { @@ -7553,7 +7605,7 @@ type WaitForAttributeRequest struct { func (x *WaitForAttributeRequest) Reset() { *x = WaitForAttributeRequest{} - mi := &file_dex_proto_msgTypes[86] + mi := &file_dex_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7565,7 +7617,7 @@ func (x *WaitForAttributeRequest) String() string { func (*WaitForAttributeRequest) ProtoMessage() {} func (x *WaitForAttributeRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[86] + mi := &file_dex_proto_msgTypes[87] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7578,7 +7630,7 @@ func (x *WaitForAttributeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitForAttributeRequest.ProtoReflect.Descriptor instead. func (*WaitForAttributeRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{86} + return file_dex_proto_rawDescGZIP(), []int{87} } func (x *WaitForAttributeRequest) GetFlowId() string { @@ -7618,7 +7670,7 @@ type WaitForAttributeResponse struct { func (x *WaitForAttributeResponse) Reset() { *x = WaitForAttributeResponse{} - mi := &file_dex_proto_msgTypes[87] + mi := &file_dex_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7630,7 +7682,7 @@ func (x *WaitForAttributeResponse) String() string { func (*WaitForAttributeResponse) ProtoMessage() {} func (x *WaitForAttributeResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[87] + mi := &file_dex_proto_msgTypes[88] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7643,7 +7695,7 @@ func (x *WaitForAttributeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitForAttributeResponse.ProtoReflect.Descriptor instead. func (*WaitForAttributeResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{87} + return file_dex_proto_rawDescGZIP(), []int{88} } func (x *WaitForAttributeResponse) GetMatchedValue() *Value { @@ -7664,7 +7716,7 @@ type AttributeMatch struct { func (x *AttributeMatch) Reset() { *x = AttributeMatch{} - mi := &file_dex_proto_msgTypes[88] + mi := &file_dex_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7676,7 +7728,7 @@ func (x *AttributeMatch) String() string { func (*AttributeMatch) ProtoMessage() {} func (x *AttributeMatch) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[88] + mi := &file_dex_proto_msgTypes[89] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7689,7 +7741,7 @@ func (x *AttributeMatch) ProtoReflect() protoreflect.Message { // Deprecated: Use AttributeMatch.ProtoReflect.Descriptor instead. func (*AttributeMatch) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{88} + return file_dex_proto_rawDescGZIP(), []int{89} } func (x *AttributeMatch) GetKey() string { @@ -7723,7 +7775,7 @@ type TriggerContinueAsNewRequest struct { func (x *TriggerContinueAsNewRequest) Reset() { *x = TriggerContinueAsNewRequest{} - mi := &file_dex_proto_msgTypes[89] + mi := &file_dex_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7735,7 +7787,7 @@ func (x *TriggerContinueAsNewRequest) String() string { func (*TriggerContinueAsNewRequest) ProtoMessage() {} func (x *TriggerContinueAsNewRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[89] + mi := &file_dex_proto_msgTypes[90] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7748,7 +7800,7 @@ func (x *TriggerContinueAsNewRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TriggerContinueAsNewRequest.ProtoReflect.Descriptor instead. func (*TriggerContinueAsNewRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{89} + return file_dex_proto_rawDescGZIP(), []int{90} } func (x *TriggerContinueAsNewRequest) GetFlowId() string { @@ -7776,7 +7828,7 @@ type HealthInfo struct { func (x *HealthInfo) Reset() { *x = HealthInfo{} - mi := &file_dex_proto_msgTypes[90] + mi := &file_dex_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7788,7 +7840,7 @@ func (x *HealthInfo) String() string { func (*HealthInfo) ProtoMessage() {} func (x *HealthInfo) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[90] + mi := &file_dex_proto_msgTypes[91] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7801,7 +7853,7 @@ func (x *HealthInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use HealthInfo.ProtoReflect.Descriptor instead. func (*HealthInfo) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{90} + return file_dex_proto_rawDescGZIP(), []int{91} } func (x *HealthInfo) GetCondition() string { @@ -7839,7 +7891,7 @@ type ServiceErrorResponse struct { func (x *ServiceErrorResponse) Reset() { *x = ServiceErrorResponse{} - mi := &file_dex_proto_msgTypes[91] + mi := &file_dex_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7851,7 +7903,7 @@ func (x *ServiceErrorResponse) String() string { func (*ServiceErrorResponse) ProtoMessage() {} func (x *ServiceErrorResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[91] + mi := &file_dex_proto_msgTypes[92] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7864,7 +7916,7 @@ func (x *ServiceErrorResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceErrorResponse.ProtoReflect.Descriptor instead. func (*ServiceErrorResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{91} + return file_dex_proto_rawDescGZIP(), []int{92} } func (x *ServiceErrorResponse) GetDetail() string { @@ -7921,7 +7973,7 @@ type WorkerErrorResponse struct { func (x *WorkerErrorResponse) Reset() { *x = WorkerErrorResponse{} - mi := &file_dex_proto_msgTypes[92] + mi := &file_dex_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7933,7 +7985,7 @@ func (x *WorkerErrorResponse) String() string { func (*WorkerErrorResponse) ProtoMessage() {} func (x *WorkerErrorResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[92] + mi := &file_dex_proto_msgTypes[93] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7946,7 +7998,7 @@ func (x *WorkerErrorResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkerErrorResponse.ProtoReflect.Descriptor instead. func (*WorkerErrorResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{92} + return file_dex_proto_rawDescGZIP(), []int{93} } func (x *WorkerErrorResponse) GetDetail() string { @@ -7988,7 +8040,7 @@ type InternalActivityError struct { func (x *InternalActivityError) Reset() { *x = InternalActivityError{} - mi := &file_dex_proto_msgTypes[93] + mi := &file_dex_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8000,7 +8052,7 @@ func (x *InternalActivityError) String() string { func (*InternalActivityError) ProtoMessage() {} func (x *InternalActivityError) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[93] + mi := &file_dex_proto_msgTypes[94] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8013,7 +8065,7 @@ func (x *InternalActivityError) ProtoReflect() protoreflect.Message { // Deprecated: Use InternalActivityError.ProtoReflect.Descriptor instead. func (*InternalActivityError) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{93} + return file_dex_proto_rawDescGZIP(), []int{94} } func (x *InternalActivityError) GetServerDetail() string { @@ -8048,7 +8100,7 @@ type InternalWorkerError struct { func (x *InternalWorkerError) Reset() { *x = InternalWorkerError{} - mi := &file_dex_proto_msgTypes[94] + mi := &file_dex_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8060,7 +8112,7 @@ func (x *InternalWorkerError) String() string { func (*InternalWorkerError) ProtoMessage() {} func (x *InternalWorkerError) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[94] + mi := &file_dex_proto_msgTypes[95] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8073,7 +8125,7 @@ func (x *InternalWorkerError) ProtoReflect() protoreflect.Message { // Deprecated: Use InternalWorkerError.ProtoReflect.Descriptor instead. func (*InternalWorkerError) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{94} + return file_dex_proto_rawDescGZIP(), []int{95} } func (x *InternalWorkerError) GetDetail() string { @@ -8110,7 +8162,7 @@ type InternalFlowError struct { func (x *InternalFlowError) Reset() { *x = InternalFlowError{} - mi := &file_dex_proto_msgTypes[95] + mi := &file_dex_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8122,7 +8174,7 @@ func (x *InternalFlowError) String() string { func (*InternalFlowError) ProtoMessage() {} func (x *InternalFlowError) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[95] + mi := &file_dex_proto_msgTypes[96] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8135,7 +8187,7 @@ func (x *InternalFlowError) ProtoReflect() protoreflect.Message { // Deprecated: Use InternalFlowError.ProtoReflect.Descriptor instead. func (*InternalFlowError) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{95} + return file_dex_proto_rawDescGZIP(), []int{96} } func (x *InternalFlowError) GetFailure() isInternalFlowError_Failure { @@ -8188,7 +8240,7 @@ type ChannelInfo struct { func (x *ChannelInfo) Reset() { *x = ChannelInfo{} - mi := &file_dex_proto_msgTypes[96] + mi := &file_dex_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8200,7 +8252,7 @@ func (x *ChannelInfo) String() string { func (*ChannelInfo) ProtoMessage() {} func (x *ChannelInfo) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[96] + mi := &file_dex_proto_msgTypes[97] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8213,7 +8265,7 @@ func (x *ChannelInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ChannelInfo.ProtoReflect.Descriptor instead. func (*ChannelInfo) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{96} + return file_dex_proto_rawDescGZIP(), []int{97} } func (x *ChannelInfo) GetSize() int32 { @@ -8241,7 +8293,7 @@ type InvokeWaitForMethodRequest struct { func (x *InvokeWaitForMethodRequest) Reset() { *x = InvokeWaitForMethodRequest{} - mi := &file_dex_proto_msgTypes[97] + mi := &file_dex_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8253,7 +8305,7 @@ func (x *InvokeWaitForMethodRequest) String() string { func (*InvokeWaitForMethodRequest) ProtoMessage() {} func (x *InvokeWaitForMethodRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[97] + mi := &file_dex_proto_msgTypes[98] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8266,7 +8318,7 @@ func (x *InvokeWaitForMethodRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeWaitForMethodRequest.ProtoReflect.Descriptor instead. func (*InvokeWaitForMethodRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{97} + return file_dex_proto_rawDescGZIP(), []int{98} } func (x *InvokeWaitForMethodRequest) GetContext() *Context { @@ -8355,7 +8407,7 @@ type InvokeWaitForMethodResponse struct { func (x *InvokeWaitForMethodResponse) Reset() { *x = InvokeWaitForMethodResponse{} - mi := &file_dex_proto_msgTypes[98] + mi := &file_dex_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8367,7 +8419,7 @@ func (x *InvokeWaitForMethodResponse) String() string { func (*InvokeWaitForMethodResponse) ProtoMessage() {} func (x *InvokeWaitForMethodResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[98] + mi := &file_dex_proto_msgTypes[99] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8380,7 +8432,7 @@ func (x *InvokeWaitForMethodResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeWaitForMethodResponse.ProtoReflect.Descriptor instead. func (*InvokeWaitForMethodResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{98} + return file_dex_proto_rawDescGZIP(), []int{99} } func (x *InvokeWaitForMethodResponse) GetLocalActivityMetadata() *LocalActivityMetadata { @@ -8441,7 +8493,7 @@ type StepMethodHeartbeat struct { func (x *StepMethodHeartbeat) Reset() { *x = StepMethodHeartbeat{} - mi := &file_dex_proto_msgTypes[99] + mi := &file_dex_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8453,7 +8505,7 @@ func (x *StepMethodHeartbeat) String() string { func (*StepMethodHeartbeat) ProtoMessage() {} func (x *StepMethodHeartbeat) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[99] + mi := &file_dex_proto_msgTypes[100] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8466,7 +8518,7 @@ func (x *StepMethodHeartbeat) ProtoReflect() protoreflect.Message { // Deprecated: Use StepMethodHeartbeat.ProtoReflect.Descriptor instead. func (*StepMethodHeartbeat) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{99} + return file_dex_proto_rawDescGZIP(), []int{100} } func (x *StepMethodHeartbeat) GetValue() *Value { @@ -8487,7 +8539,7 @@ type StepStreamWrite struct { func (x *StepStreamWrite) Reset() { *x = StepStreamWrite{} - mi := &file_dex_proto_msgTypes[100] + mi := &file_dex_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8499,7 +8551,7 @@ func (x *StepStreamWrite) String() string { func (*StepStreamWrite) ProtoMessage() {} func (x *StepStreamWrite) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[100] + mi := &file_dex_proto_msgTypes[101] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8512,7 +8564,7 @@ func (x *StepStreamWrite) ProtoReflect() protoreflect.Message { // Deprecated: Use StepStreamWrite.ProtoReflect.Descriptor instead. func (*StepStreamWrite) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{100} + return file_dex_proto_rawDescGZIP(), []int{101} } func (x *StepStreamWrite) GetStreamName() string { @@ -8550,7 +8602,7 @@ type InvokeWaitForMethodOutput struct { func (x *InvokeWaitForMethodOutput) Reset() { *x = InvokeWaitForMethodOutput{} - mi := &file_dex_proto_msgTypes[101] + mi := &file_dex_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8562,7 +8614,7 @@ func (x *InvokeWaitForMethodOutput) String() string { func (*InvokeWaitForMethodOutput) ProtoMessage() {} func (x *InvokeWaitForMethodOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[101] + mi := &file_dex_proto_msgTypes[102] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8575,7 +8627,7 @@ func (x *InvokeWaitForMethodOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeWaitForMethodOutput.ProtoReflect.Descriptor instead. func (*InvokeWaitForMethodOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{101} + return file_dex_proto_rawDescGZIP(), []int{102} } func (x *InvokeWaitForMethodOutput) GetOutput() isInvokeWaitForMethodOutput_Output { @@ -8654,7 +8706,7 @@ type InvokeExecuteMethodRequest struct { func (x *InvokeExecuteMethodRequest) Reset() { *x = InvokeExecuteMethodRequest{} - mi := &file_dex_proto_msgTypes[102] + mi := &file_dex_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8666,7 +8718,7 @@ func (x *InvokeExecuteMethodRequest) String() string { func (*InvokeExecuteMethodRequest) ProtoMessage() {} func (x *InvokeExecuteMethodRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[102] + mi := &file_dex_proto_msgTypes[103] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8679,7 +8731,7 @@ func (x *InvokeExecuteMethodRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeExecuteMethodRequest.ProtoReflect.Descriptor instead. func (*InvokeExecuteMethodRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{102} + return file_dex_proto_rawDescGZIP(), []int{103} } func (x *InvokeExecuteMethodRequest) GetContext() *Context { @@ -8782,7 +8834,7 @@ type InvokeExecuteMethodResponse struct { func (x *InvokeExecuteMethodResponse) Reset() { *x = InvokeExecuteMethodResponse{} - mi := &file_dex_proto_msgTypes[103] + mi := &file_dex_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8794,7 +8846,7 @@ func (x *InvokeExecuteMethodResponse) String() string { func (*InvokeExecuteMethodResponse) ProtoMessage() {} func (x *InvokeExecuteMethodResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[103] + mi := &file_dex_proto_msgTypes[104] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8807,7 +8859,7 @@ func (x *InvokeExecuteMethodResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeExecuteMethodResponse.ProtoReflect.Descriptor instead. func (*InvokeExecuteMethodResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{103} + return file_dex_proto_rawDescGZIP(), []int{104} } func (x *InvokeExecuteMethodResponse) GetLocalActivityMetadata() *LocalActivityMetadata { @@ -8873,7 +8925,7 @@ type InvokeExecuteMethodOutput struct { func (x *InvokeExecuteMethodOutput) Reset() { *x = InvokeExecuteMethodOutput{} - mi := &file_dex_proto_msgTypes[104] + mi := &file_dex_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8885,7 +8937,7 @@ func (x *InvokeExecuteMethodOutput) String() string { func (*InvokeExecuteMethodOutput) ProtoMessage() {} func (x *InvokeExecuteMethodOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[104] + mi := &file_dex_proto_msgTypes[105] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8898,7 +8950,7 @@ func (x *InvokeExecuteMethodOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeExecuteMethodOutput.ProtoReflect.Descriptor instead. func (*InvokeExecuteMethodOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{104} + return file_dex_proto_rawDescGZIP(), []int{105} } func (x *InvokeExecuteMethodOutput) GetOutput() isInvokeExecuteMethodOutput_Output { @@ -8975,7 +9027,7 @@ type InvokeWorkerRPCRequest struct { func (x *InvokeWorkerRPCRequest) Reset() { *x = InvokeWorkerRPCRequest{} - mi := &file_dex_proto_msgTypes[105] + mi := &file_dex_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8987,7 +9039,7 @@ func (x *InvokeWorkerRPCRequest) String() string { func (*InvokeWorkerRPCRequest) ProtoMessage() {} func (x *InvokeWorkerRPCRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[105] + mi := &file_dex_proto_msgTypes[106] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9000,7 +9052,7 @@ func (x *InvokeWorkerRPCRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeWorkerRPCRequest.ProtoReflect.Descriptor instead. func (*InvokeWorkerRPCRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{105} + return file_dex_proto_rawDescGZIP(), []int{106} } func (x *InvokeWorkerRPCRequest) GetContext() *Context { @@ -9087,7 +9139,7 @@ type InvokeWorkerRPCResponse struct { func (x *InvokeWorkerRPCResponse) Reset() { *x = InvokeWorkerRPCResponse{} - mi := &file_dex_proto_msgTypes[106] + mi := &file_dex_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9099,7 +9151,7 @@ func (x *InvokeWorkerRPCResponse) String() string { func (*InvokeWorkerRPCResponse) ProtoMessage() {} func (x *InvokeWorkerRPCResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[106] + mi := &file_dex_proto_msgTypes[107] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9112,7 +9164,7 @@ func (x *InvokeWorkerRPCResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeWorkerRPCResponse.ProtoReflect.Descriptor instead. func (*InvokeWorkerRPCResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{106} + return file_dex_proto_rawDescGZIP(), []int{107} } func (x *InvokeWorkerRPCResponse) GetOutput() *Value { @@ -9169,7 +9221,7 @@ type StepDecision struct { func (x *StepDecision) Reset() { *x = StepDecision{} - mi := &file_dex_proto_msgTypes[107] + mi := &file_dex_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9181,7 +9233,7 @@ func (x *StepDecision) String() string { func (*StepDecision) ProtoMessage() {} func (x *StepDecision) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[107] + mi := &file_dex_proto_msgTypes[108] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9194,7 +9246,7 @@ func (x *StepDecision) ProtoReflect() protoreflect.Message { // Deprecated: Use StepDecision.ProtoReflect.Descriptor instead. func (*StepDecision) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{107} + return file_dex_proto_rawDescGZIP(), []int{108} } func (x *StepDecision) GetNextSteps() []*StepMovement { @@ -9236,7 +9288,7 @@ type CloseDecision struct { func (x *CloseDecision) Reset() { *x = CloseDecision{} - mi := &file_dex_proto_msgTypes[108] + mi := &file_dex_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9248,7 +9300,7 @@ func (x *CloseDecision) String() string { func (*CloseDecision) ProtoMessage() {} func (x *CloseDecision) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[108] + mi := &file_dex_proto_msgTypes[109] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9261,7 +9313,7 @@ func (x *CloseDecision) ProtoReflect() protoreflect.Message { // Deprecated: Use CloseDecision.ProtoReflect.Descriptor instead. func (*CloseDecision) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{108} + return file_dex_proto_rawDescGZIP(), []int{109} } func (x *CloseDecision) GetCloseDecisionType() CloseDecisionType { @@ -9300,7 +9352,7 @@ type StepMovement struct { func (x *StepMovement) Reset() { *x = StepMovement{} - mi := &file_dex_proto_msgTypes[109] + mi := &file_dex_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9312,7 +9364,7 @@ func (x *StepMovement) String() string { func (*StepMovement) ProtoMessage() {} func (x *StepMovement) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[109] + mi := &file_dex_proto_msgTypes[110] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9325,7 +9377,7 @@ func (x *StepMovement) ProtoReflect() protoreflect.Message { // Deprecated: Use StepMovement.ProtoReflect.Descriptor instead. func (*StepMovement) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{109} + return file_dex_proto_rawDescGZIP(), []int{110} } func (x *StepMovement) GetStepType() string { @@ -9372,7 +9424,7 @@ type ConditionCombination struct { func (x *ConditionCombination) Reset() { *x = ConditionCombination{} - mi := &file_dex_proto_msgTypes[110] + mi := &file_dex_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9384,7 +9436,7 @@ func (x *ConditionCombination) String() string { func (*ConditionCombination) ProtoMessage() {} func (x *ConditionCombination) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[110] + mi := &file_dex_proto_msgTypes[111] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9397,7 +9449,7 @@ func (x *ConditionCombination) ProtoReflect() protoreflect.Message { // Deprecated: Use ConditionCombination.ProtoReflect.Descriptor instead. func (*ConditionCombination) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{110} + return file_dex_proto_rawDescGZIP(), []int{111} } func (x *ConditionCombination) GetConditionIds() []string { @@ -9420,7 +9472,7 @@ type WaitingCondition struct { func (x *WaitingCondition) Reset() { *x = WaitingCondition{} - mi := &file_dex_proto_msgTypes[111] + mi := &file_dex_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9432,7 +9484,7 @@ func (x *WaitingCondition) String() string { func (*WaitingCondition) ProtoMessage() {} func (x *WaitingCondition) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[111] + mi := &file_dex_proto_msgTypes[112] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9445,7 +9497,7 @@ func (x *WaitingCondition) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitingCondition.ProtoReflect.Descriptor instead. func (*WaitingCondition) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{111} + return file_dex_proto_rawDescGZIP(), []int{112} } func (x *WaitingCondition) GetWaitingConditionType() WaitingConditionType { @@ -9496,7 +9548,7 @@ type WaitingConditionState struct { func (x *WaitingConditionState) Reset() { *x = WaitingConditionState{} - mi := &file_dex_proto_msgTypes[112] + mi := &file_dex_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9508,7 +9560,7 @@ func (x *WaitingConditionState) String() string { func (*WaitingConditionState) ProtoMessage() {} func (x *WaitingConditionState) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[112] + mi := &file_dex_proto_msgTypes[113] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9521,7 +9573,7 @@ func (x *WaitingConditionState) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitingConditionState.ProtoReflect.Descriptor instead. func (*WaitingConditionState) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{112} + return file_dex_proto_rawDescGZIP(), []int{113} } func (x *WaitingConditionState) GetWaitingConditionType() WaitingConditionType { @@ -9575,7 +9627,7 @@ type SubFlowOptions struct { func (x *SubFlowOptions) Reset() { *x = SubFlowOptions{} - mi := &file_dex_proto_msgTypes[113] + mi := &file_dex_proto_msgTypes[114] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9587,7 +9639,7 @@ func (x *SubFlowOptions) String() string { func (*SubFlowOptions) ProtoMessage() {} func (x *SubFlowOptions) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[113] + mi := &file_dex_proto_msgTypes[114] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9600,7 +9652,7 @@ func (x *SubFlowOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use SubFlowOptions.ProtoReflect.Descriptor instead. func (*SubFlowOptions) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{113} + return file_dex_proto_rawDescGZIP(), []int{114} } func (x *SubFlowOptions) GetReusePolicy() SubFlowReusePolicy { @@ -9675,7 +9727,7 @@ type SubFlowCondition struct { func (x *SubFlowCondition) Reset() { *x = SubFlowCondition{} - mi := &file_dex_proto_msgTypes[114] + mi := &file_dex_proto_msgTypes[115] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9687,7 +9739,7 @@ func (x *SubFlowCondition) String() string { func (*SubFlowCondition) ProtoMessage() {} func (x *SubFlowCondition) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[114] + mi := &file_dex_proto_msgTypes[115] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9700,7 +9752,7 @@ func (x *SubFlowCondition) ProtoReflect() protoreflect.Message { // Deprecated: Use SubFlowCondition.ProtoReflect.Descriptor instead. func (*SubFlowCondition) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{114} + return file_dex_proto_rawDescGZIP(), []int{115} } func (x *SubFlowCondition) GetConditionId() string { @@ -9761,7 +9813,7 @@ type SubFlowConditionState struct { func (x *SubFlowConditionState) Reset() { *x = SubFlowConditionState{} - mi := &file_dex_proto_msgTypes[115] + mi := &file_dex_proto_msgTypes[116] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9773,7 +9825,7 @@ func (x *SubFlowConditionState) String() string { func (*SubFlowConditionState) ProtoMessage() {} func (x *SubFlowConditionState) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[115] + mi := &file_dex_proto_msgTypes[116] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9786,7 +9838,7 @@ func (x *SubFlowConditionState) ProtoReflect() protoreflect.Message { // Deprecated: Use SubFlowConditionState.ProtoReflect.Descriptor instead. func (*SubFlowConditionState) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{115} + return file_dex_proto_rawDescGZIP(), []int{116} } func (x *SubFlowConditionState) GetConditionId() string { @@ -9810,7 +9862,7 @@ type TimerCondition struct { func (x *TimerCondition) Reset() { *x = TimerCondition{} - mi := &file_dex_proto_msgTypes[116] + mi := &file_dex_proto_msgTypes[117] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9822,7 +9874,7 @@ func (x *TimerCondition) String() string { func (*TimerCondition) ProtoMessage() {} func (x *TimerCondition) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[116] + mi := &file_dex_proto_msgTypes[117] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9835,7 +9887,7 @@ func (x *TimerCondition) ProtoReflect() protoreflect.Message { // Deprecated: Use TimerCondition.ProtoReflect.Descriptor instead. func (*TimerCondition) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{116} + return file_dex_proto_rawDescGZIP(), []int{117} } func (x *TimerCondition) GetConditionId() string { @@ -9873,7 +9925,7 @@ type ChannelCondition struct { func (x *ChannelCondition) Reset() { *x = ChannelCondition{} - mi := &file_dex_proto_msgTypes[117] + mi := &file_dex_proto_msgTypes[118] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9885,7 +9937,7 @@ func (x *ChannelCondition) String() string { func (*ChannelCondition) ProtoMessage() {} func (x *ChannelCondition) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[117] + mi := &file_dex_proto_msgTypes[118] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9898,7 +9950,7 @@ func (x *ChannelCondition) ProtoReflect() protoreflect.Message { // Deprecated: Use ChannelCondition.ProtoReflect.Descriptor instead. func (*ChannelCondition) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{117} + return file_dex_proto_rawDescGZIP(), []int{118} } func (x *ChannelCondition) GetConditionId() string { @@ -9941,7 +9993,7 @@ type ConditionResults struct { func (x *ConditionResults) Reset() { *x = ConditionResults{} - mi := &file_dex_proto_msgTypes[118] + mi := &file_dex_proto_msgTypes[119] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9953,7 +10005,7 @@ func (x *ConditionResults) String() string { func (*ConditionResults) ProtoMessage() {} func (x *ConditionResults) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[118] + mi := &file_dex_proto_msgTypes[119] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9966,7 +10018,7 @@ func (x *ConditionResults) ProtoReflect() protoreflect.Message { // Deprecated: Use ConditionResults.ProtoReflect.Descriptor instead. func (*ConditionResults) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{118} + return file_dex_proto_rawDescGZIP(), []int{119} } func (x *ConditionResults) GetChannelResults() []*ChannelResult { @@ -10007,7 +10059,7 @@ type TimerResult struct { func (x *TimerResult) Reset() { *x = TimerResult{} - mi := &file_dex_proto_msgTypes[119] + mi := &file_dex_proto_msgTypes[120] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10019,7 +10071,7 @@ func (x *TimerResult) String() string { func (*TimerResult) ProtoMessage() {} func (x *TimerResult) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[119] + mi := &file_dex_proto_msgTypes[120] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10032,7 +10084,7 @@ func (x *TimerResult) ProtoReflect() protoreflect.Message { // Deprecated: Use TimerResult.ProtoReflect.Descriptor instead. func (*TimerResult) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{119} + return file_dex_proto_rawDescGZIP(), []int{120} } func (x *TimerResult) GetConditionId() string { @@ -10061,7 +10113,7 @@ type ChannelResult struct { func (x *ChannelResult) Reset() { *x = ChannelResult{} - mi := &file_dex_proto_msgTypes[120] + mi := &file_dex_proto_msgTypes[121] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10073,7 +10125,7 @@ func (x *ChannelResult) String() string { func (*ChannelResult) ProtoMessage() {} func (x *ChannelResult) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[120] + mi := &file_dex_proto_msgTypes[121] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10086,7 +10138,7 @@ func (x *ChannelResult) ProtoReflect() protoreflect.Message { // Deprecated: Use ChannelResult.ProtoReflect.Descriptor instead. func (*ChannelResult) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{120} + return file_dex_proto_rawDescGZIP(), []int{121} } func (x *ChannelResult) GetConditionId() string { @@ -10129,7 +10181,7 @@ type ContinueAsNewDumpRequest struct { func (x *ContinueAsNewDumpRequest) Reset() { *x = ContinueAsNewDumpRequest{} - mi := &file_dex_proto_msgTypes[121] + mi := &file_dex_proto_msgTypes[122] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10141,7 +10193,7 @@ func (x *ContinueAsNewDumpRequest) String() string { func (*ContinueAsNewDumpRequest) ProtoMessage() {} func (x *ContinueAsNewDumpRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[121] + mi := &file_dex_proto_msgTypes[122] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10154,7 +10206,7 @@ func (x *ContinueAsNewDumpRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ContinueAsNewDumpRequest.ProtoReflect.Descriptor instead. func (*ContinueAsNewDumpRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{121} + return file_dex_proto_rawDescGZIP(), []int{122} } func (x *ContinueAsNewDumpRequest) GetFlowId() string { @@ -10199,7 +10251,7 @@ type ContinueAsNewDumpResponse struct { func (x *ContinueAsNewDumpResponse) Reset() { *x = ContinueAsNewDumpResponse{} - mi := &file_dex_proto_msgTypes[122] + mi := &file_dex_proto_msgTypes[123] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10211,7 +10263,7 @@ func (x *ContinueAsNewDumpResponse) String() string { func (*ContinueAsNewDumpResponse) ProtoMessage() {} func (x *ContinueAsNewDumpResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[122] + mi := &file_dex_proto_msgTypes[123] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10224,7 +10276,7 @@ func (x *ContinueAsNewDumpResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ContinueAsNewDumpResponse.ProtoReflect.Descriptor instead. func (*ContinueAsNewDumpResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{122} + return file_dex_proto_rawDescGZIP(), []int{123} } func (x *ContinueAsNewDumpResponse) GetPageContent() []byte { @@ -10264,7 +10316,7 @@ type ChannelValues struct { func (x *ChannelValues) Reset() { *x = ChannelValues{} - mi := &file_dex_proto_msgTypes[123] + mi := &file_dex_proto_msgTypes[124] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10276,7 +10328,7 @@ func (x *ChannelValues) String() string { func (*ChannelValues) ProtoMessage() {} func (x *ChannelValues) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[123] + mi := &file_dex_proto_msgTypes[124] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10289,7 +10341,7 @@ func (x *ChannelValues) ProtoReflect() protoreflect.Message { // Deprecated: Use ChannelValues.ProtoReflect.Descriptor instead. func (*ChannelValues) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{123} + return file_dex_proto_rawDescGZIP(), []int{124} } func (x *ChannelValues) GetMessages() []*ChannelMessage { @@ -10309,7 +10361,7 @@ type StepExecutionCompletedConditions struct { func (x *StepExecutionCompletedConditions) Reset() { *x = StepExecutionCompletedConditions{} - mi := &file_dex_proto_msgTypes[124] + mi := &file_dex_proto_msgTypes[125] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10321,7 +10373,7 @@ func (x *StepExecutionCompletedConditions) String() string { func (*StepExecutionCompletedConditions) ProtoMessage() {} func (x *StepExecutionCompletedConditions) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[124] + mi := &file_dex_proto_msgTypes[125] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10334,7 +10386,7 @@ func (x *StepExecutionCompletedConditions) ProtoReflect() protoreflect.Message { // Deprecated: Use StepExecutionCompletedConditions.ProtoReflect.Descriptor instead. func (*StepExecutionCompletedConditions) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{124} + return file_dex_proto_rawDescGZIP(), []int{125} } func (x *StepExecutionCompletedConditions) GetCompletedTimerConditions() map[int32]InternalTimerStatus { @@ -10364,7 +10416,7 @@ type StepExecutionResumeInfo struct { func (x *StepExecutionResumeInfo) Reset() { *x = StepExecutionResumeInfo{} - mi := &file_dex_proto_msgTypes[125] + mi := &file_dex_proto_msgTypes[126] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10376,7 +10428,7 @@ func (x *StepExecutionResumeInfo) String() string { func (*StepExecutionResumeInfo) ProtoMessage() {} func (x *StepExecutionResumeInfo) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[125] + mi := &file_dex_proto_msgTypes[126] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10389,7 +10441,7 @@ func (x *StepExecutionResumeInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use StepExecutionResumeInfo.ProtoReflect.Descriptor instead. func (*StepExecutionResumeInfo) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{125} + return file_dex_proto_rawDescGZIP(), []int{126} } func (x *StepExecutionResumeInfo) GetStepExecutionId() string { @@ -10439,7 +10491,7 @@ type StepExecutionCounterInfo struct { func (x *StepExecutionCounterInfo) Reset() { *x = StepExecutionCounterInfo{} - mi := &file_dex_proto_msgTypes[126] + mi := &file_dex_proto_msgTypes[127] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10451,7 +10503,7 @@ func (x *StepExecutionCounterInfo) String() string { func (*StepExecutionCounterInfo) ProtoMessage() {} func (x *StepExecutionCounterInfo) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[126] + mi := &file_dex_proto_msgTypes[127] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10464,7 +10516,7 @@ func (x *StepExecutionCounterInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use StepExecutionCounterInfo.ProtoReflect.Descriptor instead. func (*StepExecutionCounterInfo) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{126} + return file_dex_proto_rawDescGZIP(), []int{127} } func (x *StepExecutionCounterInfo) GetStepTypeStartedCount() map[string]int32 { @@ -10506,7 +10558,7 @@ type StaleSkipTimer struct { func (x *StaleSkipTimer) Reset() { *x = StaleSkipTimer{} - mi := &file_dex_proto_msgTypes[127] + mi := &file_dex_proto_msgTypes[128] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10518,7 +10570,7 @@ func (x *StaleSkipTimer) String() string { func (*StaleSkipTimer) ProtoMessage() {} func (x *StaleSkipTimer) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[127] + mi := &file_dex_proto_msgTypes[128] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10531,7 +10583,7 @@ func (x *StaleSkipTimer) ProtoReflect() protoreflect.Message { // Deprecated: Use StaleSkipTimer.ProtoReflect.Descriptor instead. func (*StaleSkipTimer) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{127} + return file_dex_proto_rawDescGZIP(), []int{128} } func (x *StaleSkipTimer) GetStepExecutionId() string { @@ -10572,7 +10624,7 @@ type ContinueAsNewDump struct { func (x *ContinueAsNewDump) Reset() { *x = ContinueAsNewDump{} - mi := &file_dex_proto_msgTypes[128] + mi := &file_dex_proto_msgTypes[129] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10584,7 +10636,7 @@ func (x *ContinueAsNewDump) String() string { func (*ContinueAsNewDump) ProtoMessage() {} func (x *ContinueAsNewDump) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[128] + mi := &file_dex_proto_msgTypes[129] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10597,7 +10649,7 @@ func (x *ContinueAsNewDump) ProtoReflect() protoreflect.Message { // Deprecated: Use ContinueAsNewDump.ProtoReflect.Descriptor instead. func (*ContinueAsNewDump) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{128} + return file_dex_proto_rawDescGZIP(), []int{129} } func (x *ContinueAsNewDump) GetStepsToStartFromBeginning() []*StepMovement { @@ -10665,7 +10717,7 @@ type ContinueAsNewInput struct { func (x *ContinueAsNewInput) Reset() { *x = ContinueAsNewInput{} - mi := &file_dex_proto_msgTypes[129] + mi := &file_dex_proto_msgTypes[130] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10677,7 +10729,7 @@ func (x *ContinueAsNewInput) String() string { func (*ContinueAsNewInput) ProtoMessage() {} func (x *ContinueAsNewInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[129] + mi := &file_dex_proto_msgTypes[130] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10690,7 +10742,7 @@ func (x *ContinueAsNewInput) ProtoReflect() protoreflect.Message { // Deprecated: Use ContinueAsNewInput.ProtoReflect.Descriptor instead. func (*ContinueAsNewInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{129} + return file_dex_proto_rawDescGZIP(), []int{130} } func (x *ContinueAsNewInput) GetPreviousInternalRunId() string { @@ -10720,7 +10772,7 @@ type InterpreterWorkflowInput struct { func (x *InterpreterWorkflowInput) Reset() { *x = InterpreterWorkflowInput{} - mi := &file_dex_proto_msgTypes[130] + mi := &file_dex_proto_msgTypes[131] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10732,7 +10784,7 @@ func (x *InterpreterWorkflowInput) String() string { func (*InterpreterWorkflowInput) ProtoMessage() {} func (x *InterpreterWorkflowInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[130] + mi := &file_dex_proto_msgTypes[131] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10745,7 +10797,7 @@ func (x *InterpreterWorkflowInput) ProtoReflect() protoreflect.Message { // Deprecated: Use InterpreterWorkflowInput.ProtoReflect.Descriptor instead. func (*InterpreterWorkflowInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{130} + return file_dex_proto_rawDescGZIP(), []int{131} } func (x *InterpreterWorkflowInput) GetFlowType() string { @@ -10834,7 +10886,7 @@ type InterpreterWorkflowOutput struct { func (x *InterpreterWorkflowOutput) Reset() { *x = InterpreterWorkflowOutput{} - mi := &file_dex_proto_msgTypes[131] + mi := &file_dex_proto_msgTypes[132] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10846,7 +10898,7 @@ func (x *InterpreterWorkflowOutput) String() string { func (*InterpreterWorkflowOutput) ProtoMessage() {} func (x *InterpreterWorkflowOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[131] + mi := &file_dex_proto_msgTypes[132] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10859,7 +10911,7 @@ func (x *InterpreterWorkflowOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use InterpreterWorkflowOutput.ProtoReflect.Descriptor instead. func (*InterpreterWorkflowOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{131} + return file_dex_proto_rawDescGZIP(), []int{132} } func (x *InterpreterWorkflowOutput) GetStepCompletionOutputs() []*StepCompletionOutput { @@ -10878,7 +10930,7 @@ type BlobStoreCleanupWorkflowInput struct { func (x *BlobStoreCleanupWorkflowInput) Reset() { *x = BlobStoreCleanupWorkflowInput{} - mi := &file_dex_proto_msgTypes[132] + mi := &file_dex_proto_msgTypes[133] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10890,7 +10942,7 @@ func (x *BlobStoreCleanupWorkflowInput) String() string { func (*BlobStoreCleanupWorkflowInput) ProtoMessage() {} func (x *BlobStoreCleanupWorkflowInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[132] + mi := &file_dex_proto_msgTypes[133] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10903,7 +10955,7 @@ func (x *BlobStoreCleanupWorkflowInput) ProtoReflect() protoreflect.Message { // Deprecated: Use BlobStoreCleanupWorkflowInput.ProtoReflect.Descriptor instead. func (*BlobStoreCleanupWorkflowInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{132} + return file_dex_proto_rawDescGZIP(), []int{133} } func (x *BlobStoreCleanupWorkflowInput) GetStoreId() string { @@ -10922,7 +10974,7 @@ type BlobStoreCleanupWorkflowOutput struct { func (x *BlobStoreCleanupWorkflowOutput) Reset() { *x = BlobStoreCleanupWorkflowOutput{} - mi := &file_dex_proto_msgTypes[133] + mi := &file_dex_proto_msgTypes[134] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10934,7 +10986,7 @@ func (x *BlobStoreCleanupWorkflowOutput) String() string { func (*BlobStoreCleanupWorkflowOutput) ProtoMessage() {} func (x *BlobStoreCleanupWorkflowOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[133] + mi := &file_dex_proto_msgTypes[134] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10947,7 +10999,7 @@ func (x *BlobStoreCleanupWorkflowOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use BlobStoreCleanupWorkflowOutput.ProtoReflect.Descriptor instead. func (*BlobStoreCleanupWorkflowOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{133} + return file_dex_proto_rawDescGZIP(), []int{134} } func (x *BlobStoreCleanupWorkflowOutput) GetTotalDeleted() int32 { @@ -10967,7 +11019,7 @@ type InvokeWaitForMethodActivityInput struct { func (x *InvokeWaitForMethodActivityInput) Reset() { *x = InvokeWaitForMethodActivityInput{} - mi := &file_dex_proto_msgTypes[134] + mi := &file_dex_proto_msgTypes[135] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10979,7 +11031,7 @@ func (x *InvokeWaitForMethodActivityInput) String() string { func (*InvokeWaitForMethodActivityInput) ProtoMessage() {} func (x *InvokeWaitForMethodActivityInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[134] + mi := &file_dex_proto_msgTypes[135] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10992,7 +11044,7 @@ func (x *InvokeWaitForMethodActivityInput) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeWaitForMethodActivityInput.ProtoReflect.Descriptor instead. func (*InvokeWaitForMethodActivityInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{134} + return file_dex_proto_rawDescGZIP(), []int{135} } func (x *InvokeWaitForMethodActivityInput) GetWorkerTarget() *WorkerTarget { @@ -11018,7 +11070,7 @@ type InvokeWaitForMethodActivityOutput struct { func (x *InvokeWaitForMethodActivityOutput) Reset() { *x = InvokeWaitForMethodActivityOutput{} - mi := &file_dex_proto_msgTypes[135] + mi := &file_dex_proto_msgTypes[136] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11030,7 +11082,7 @@ func (x *InvokeWaitForMethodActivityOutput) String() string { func (*InvokeWaitForMethodActivityOutput) ProtoMessage() {} func (x *InvokeWaitForMethodActivityOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[135] + mi := &file_dex_proto_msgTypes[136] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11043,7 +11095,7 @@ func (x *InvokeWaitForMethodActivityOutput) ProtoReflect() protoreflect.Message // Deprecated: Use InvokeWaitForMethodActivityOutput.ProtoReflect.Descriptor instead. func (*InvokeWaitForMethodActivityOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{135} + return file_dex_proto_rawDescGZIP(), []int{136} } func (x *InvokeWaitForMethodActivityOutput) GetResponse() *InvokeWaitForMethodResponse { @@ -11063,7 +11115,7 @@ type InvokeExecuteMethodActivityInput struct { func (x *InvokeExecuteMethodActivityInput) Reset() { *x = InvokeExecuteMethodActivityInput{} - mi := &file_dex_proto_msgTypes[136] + mi := &file_dex_proto_msgTypes[137] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11075,7 +11127,7 @@ func (x *InvokeExecuteMethodActivityInput) String() string { func (*InvokeExecuteMethodActivityInput) ProtoMessage() {} func (x *InvokeExecuteMethodActivityInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[136] + mi := &file_dex_proto_msgTypes[137] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11088,7 +11140,7 @@ func (x *InvokeExecuteMethodActivityInput) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeExecuteMethodActivityInput.ProtoReflect.Descriptor instead. func (*InvokeExecuteMethodActivityInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{136} + return file_dex_proto_rawDescGZIP(), []int{137} } func (x *InvokeExecuteMethodActivityInput) GetWorkerTarget() *WorkerTarget { @@ -11115,7 +11167,7 @@ type RecoveryErrorInfo struct { func (x *RecoveryErrorInfo) Reset() { *x = RecoveryErrorInfo{} - mi := &file_dex_proto_msgTypes[137] + mi := &file_dex_proto_msgTypes[138] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11127,7 +11179,7 @@ func (x *RecoveryErrorInfo) String() string { func (*RecoveryErrorInfo) ProtoMessage() {} func (x *RecoveryErrorInfo) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[137] + mi := &file_dex_proto_msgTypes[138] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11140,7 +11192,7 @@ func (x *RecoveryErrorInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use RecoveryErrorInfo.ProtoReflect.Descriptor instead. func (*RecoveryErrorInfo) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{137} + return file_dex_proto_rawDescGZIP(), []int{138} } func (x *RecoveryErrorInfo) GetDetail() string { @@ -11170,7 +11222,7 @@ type InternalLocalStepActivityFailure struct { func (x *InternalLocalStepActivityFailure) Reset() { *x = InternalLocalStepActivityFailure{} - mi := &file_dex_proto_msgTypes[138] + mi := &file_dex_proto_msgTypes[139] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11182,7 +11234,7 @@ func (x *InternalLocalStepActivityFailure) String() string { func (*InternalLocalStepActivityFailure) ProtoMessage() {} func (x *InternalLocalStepActivityFailure) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[138] + mi := &file_dex_proto_msgTypes[139] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11195,7 +11247,7 @@ func (x *InternalLocalStepActivityFailure) ProtoReflect() protoreflect.Message { // Deprecated: Use InternalLocalStepActivityFailure.ProtoReflect.Descriptor instead. func (*InternalLocalStepActivityFailure) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{138} + return file_dex_proto_rawDescGZIP(), []int{139} } func (x *InternalLocalStepActivityFailure) GetLocalActivityMetadata() *LocalActivityMetadata { @@ -11242,7 +11294,7 @@ type InvokeExecuteMethodActivityOutput struct { func (x *InvokeExecuteMethodActivityOutput) Reset() { *x = InvokeExecuteMethodActivityOutput{} - mi := &file_dex_proto_msgTypes[139] + mi := &file_dex_proto_msgTypes[140] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11254,7 +11306,7 @@ func (x *InvokeExecuteMethodActivityOutput) String() string { func (*InvokeExecuteMethodActivityOutput) ProtoMessage() {} func (x *InvokeExecuteMethodActivityOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[139] + mi := &file_dex_proto_msgTypes[140] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11267,7 +11319,7 @@ func (x *InvokeExecuteMethodActivityOutput) ProtoReflect() protoreflect.Message // Deprecated: Use InvokeExecuteMethodActivityOutput.ProtoReflect.Descriptor instead. func (*InvokeExecuteMethodActivityOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{139} + return file_dex_proto_rawDescGZIP(), []int{140} } func (x *InvokeExecuteMethodActivityOutput) GetResponse() *InvokeExecuteMethodResponse { @@ -11286,7 +11338,7 @@ type DumpFlowForContinueAsNewActivityInput struct { func (x *DumpFlowForContinueAsNewActivityInput) Reset() { *x = DumpFlowForContinueAsNewActivityInput{} - mi := &file_dex_proto_msgTypes[140] + mi := &file_dex_proto_msgTypes[141] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11298,7 +11350,7 @@ func (x *DumpFlowForContinueAsNewActivityInput) String() string { func (*DumpFlowForContinueAsNewActivityInput) ProtoMessage() {} func (x *DumpFlowForContinueAsNewActivityInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[140] + mi := &file_dex_proto_msgTypes[141] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11311,7 +11363,7 @@ func (x *DumpFlowForContinueAsNewActivityInput) ProtoReflect() protoreflect.Mess // Deprecated: Use DumpFlowForContinueAsNewActivityInput.ProtoReflect.Descriptor instead. func (*DumpFlowForContinueAsNewActivityInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{140} + return file_dex_proto_rawDescGZIP(), []int{141} } func (x *DumpFlowForContinueAsNewActivityInput) GetRequest() *ContinueAsNewDumpRequest { @@ -11330,7 +11382,7 @@ type DumpFlowForContinueAsNewActivityOutput struct { func (x *DumpFlowForContinueAsNewActivityOutput) Reset() { *x = DumpFlowForContinueAsNewActivityOutput{} - mi := &file_dex_proto_msgTypes[141] + mi := &file_dex_proto_msgTypes[142] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11342,7 +11394,7 @@ func (x *DumpFlowForContinueAsNewActivityOutput) String() string { func (*DumpFlowForContinueAsNewActivityOutput) ProtoMessage() {} func (x *DumpFlowForContinueAsNewActivityOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[141] + mi := &file_dex_proto_msgTypes[142] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11355,7 +11407,7 @@ func (x *DumpFlowForContinueAsNewActivityOutput) ProtoReflect() protoreflect.Mes // Deprecated: Use DumpFlowForContinueAsNewActivityOutput.ProtoReflect.Descriptor instead. func (*DumpFlowForContinueAsNewActivityOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{141} + return file_dex_proto_rawDescGZIP(), []int{142} } func (x *DumpFlowForContinueAsNewActivityOutput) GetResponse() *ContinueAsNewDumpResponse { @@ -11375,7 +11427,7 @@ type InvokeWorkerRPCActivityInput struct { func (x *InvokeWorkerRPCActivityInput) Reset() { *x = InvokeWorkerRPCActivityInput{} - mi := &file_dex_proto_msgTypes[142] + mi := &file_dex_proto_msgTypes[143] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11387,7 +11439,7 @@ func (x *InvokeWorkerRPCActivityInput) String() string { func (*InvokeWorkerRPCActivityInput) ProtoMessage() {} func (x *InvokeWorkerRPCActivityInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[142] + mi := &file_dex_proto_msgTypes[143] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11400,7 +11452,7 @@ func (x *InvokeWorkerRPCActivityInput) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeWorkerRPCActivityInput.ProtoReflect.Descriptor instead. func (*InvokeWorkerRPCActivityInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{142} + return file_dex_proto_rawDescGZIP(), []int{143} } func (x *InvokeWorkerRPCActivityInput) GetRpcPrep() *PrepareRpcQueryResponse { @@ -11428,7 +11480,7 @@ type InvokeWorkerRPCActivityOutput struct { func (x *InvokeWorkerRPCActivityOutput) Reset() { *x = InvokeWorkerRPCActivityOutput{} - mi := &file_dex_proto_msgTypes[143] + mi := &file_dex_proto_msgTypes[144] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11440,7 +11492,7 @@ func (x *InvokeWorkerRPCActivityOutput) String() string { func (*InvokeWorkerRPCActivityOutput) ProtoMessage() {} func (x *InvokeWorkerRPCActivityOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[143] + mi := &file_dex_proto_msgTypes[144] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11453,7 +11505,7 @@ func (x *InvokeWorkerRPCActivityOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeWorkerRPCActivityOutput.ProtoReflect.Descriptor instead. func (*InvokeWorkerRPCActivityOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{143} + return file_dex_proto_rawDescGZIP(), []int{144} } func (x *InvokeWorkerRPCActivityOutput) GetResponse() *InvokeWorkerRPCResponse { @@ -11479,7 +11531,7 @@ type CleanupBlobStoreActivityInput struct { func (x *CleanupBlobStoreActivityInput) Reset() { *x = CleanupBlobStoreActivityInput{} - mi := &file_dex_proto_msgTypes[144] + mi := &file_dex_proto_msgTypes[145] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11491,7 +11543,7 @@ func (x *CleanupBlobStoreActivityInput) String() string { func (*CleanupBlobStoreActivityInput) ProtoMessage() {} func (x *CleanupBlobStoreActivityInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[144] + mi := &file_dex_proto_msgTypes[145] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11504,7 +11556,7 @@ func (x *CleanupBlobStoreActivityInput) ProtoReflect() protoreflect.Message { // Deprecated: Use CleanupBlobStoreActivityInput.ProtoReflect.Descriptor instead. func (*CleanupBlobStoreActivityInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{144} + return file_dex_proto_rawDescGZIP(), []int{145} } func (x *CleanupBlobStoreActivityInput) GetStoreId() string { @@ -11523,7 +11575,7 @@ type CleanupBlobStoreActivityOutput struct { func (x *CleanupBlobStoreActivityOutput) Reset() { *x = CleanupBlobStoreActivityOutput{} - mi := &file_dex_proto_msgTypes[145] + mi := &file_dex_proto_msgTypes[146] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11535,7 +11587,7 @@ func (x *CleanupBlobStoreActivityOutput) String() string { func (*CleanupBlobStoreActivityOutput) ProtoMessage() {} func (x *CleanupBlobStoreActivityOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[145] + mi := &file_dex_proto_msgTypes[146] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11548,7 +11600,7 @@ func (x *CleanupBlobStoreActivityOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use CleanupBlobStoreActivityOutput.ProtoReflect.Descriptor instead. func (*CleanupBlobStoreActivityOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{145} + return file_dex_proto_rawDescGZIP(), []int{146} } func (x *CleanupBlobStoreActivityOutput) GetTotalDeleted() int32 { @@ -11569,7 +11621,7 @@ type AttributeSyncItem struct { func (x *AttributeSyncItem) Reset() { *x = AttributeSyncItem{} - mi := &file_dex_proto_msgTypes[146] + mi := &file_dex_proto_msgTypes[147] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11581,7 +11633,7 @@ func (x *AttributeSyncItem) String() string { func (*AttributeSyncItem) ProtoMessage() {} func (x *AttributeSyncItem) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[146] + mi := &file_dex_proto_msgTypes[147] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11594,7 +11646,7 @@ func (x *AttributeSyncItem) ProtoReflect() protoreflect.Message { // Deprecated: Use AttributeSyncItem.ProtoReflect.Descriptor instead. func (*AttributeSyncItem) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{146} + return file_dex_proto_rawDescGZIP(), []int{147} } func (x *AttributeSyncItem) GetConfigName() string { @@ -11629,7 +11681,7 @@ type SyncAttributeBatchActivityInput struct { func (x *SyncAttributeBatchActivityInput) Reset() { *x = SyncAttributeBatchActivityInput{} - mi := &file_dex_proto_msgTypes[147] + mi := &file_dex_proto_msgTypes[148] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11641,7 +11693,7 @@ func (x *SyncAttributeBatchActivityInput) String() string { func (*SyncAttributeBatchActivityInput) ProtoMessage() {} func (x *SyncAttributeBatchActivityInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[147] + mi := &file_dex_proto_msgTypes[148] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11654,7 +11706,7 @@ func (x *SyncAttributeBatchActivityInput) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAttributeBatchActivityInput.ProtoReflect.Descriptor instead. func (*SyncAttributeBatchActivityInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{147} + return file_dex_proto_rawDescGZIP(), []int{148} } func (x *SyncAttributeBatchActivityInput) GetFlowId() string { @@ -11690,7 +11742,7 @@ type StartSubFlowActivityInput struct { func (x *StartSubFlowActivityInput) Reset() { *x = StartSubFlowActivityInput{} - mi := &file_dex_proto_msgTypes[148] + mi := &file_dex_proto_msgTypes[149] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11702,7 +11754,7 @@ func (x *StartSubFlowActivityInput) String() string { func (*StartSubFlowActivityInput) ProtoMessage() {} func (x *StartSubFlowActivityInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[148] + mi := &file_dex_proto_msgTypes[149] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11715,7 +11767,7 @@ func (x *StartSubFlowActivityInput) ProtoReflect() protoreflect.Message { // Deprecated: Use StartSubFlowActivityInput.ProtoReflect.Descriptor instead. func (*StartSubFlowActivityInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{148} + return file_dex_proto_rawDescGZIP(), []int{149} } func (x *StartSubFlowActivityInput) GetCondition() *SubFlowCondition { @@ -11748,7 +11800,7 @@ type StartSubFlowActivityOutput struct { func (x *StartSubFlowActivityOutput) Reset() { *x = StartSubFlowActivityOutput{} - mi := &file_dex_proto_msgTypes[149] + mi := &file_dex_proto_msgTypes[150] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11760,7 +11812,7 @@ func (x *StartSubFlowActivityOutput) String() string { func (*StartSubFlowActivityOutput) ProtoMessage() {} func (x *StartSubFlowActivityOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[149] + mi := &file_dex_proto_msgTypes[150] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11773,7 +11825,7 @@ func (x *StartSubFlowActivityOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use StartSubFlowActivityOutput.ProtoReflect.Descriptor instead. func (*StartSubFlowActivityOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{149} + return file_dex_proto_rawDescGZIP(), []int{150} } func (x *StartSubFlowActivityOutput) GetImmediateFlowResult() *FlowResult { @@ -11793,7 +11845,7 @@ type SubFlowCompletionSignalRequest struct { func (x *SubFlowCompletionSignalRequest) Reset() { *x = SubFlowCompletionSignalRequest{} - mi := &file_dex_proto_msgTypes[150] + mi := &file_dex_proto_msgTypes[151] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11805,7 +11857,7 @@ func (x *SubFlowCompletionSignalRequest) String() string { func (*SubFlowCompletionSignalRequest) ProtoMessage() {} func (x *SubFlowCompletionSignalRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[150] + mi := &file_dex_proto_msgTypes[151] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11818,7 +11870,7 @@ func (x *SubFlowCompletionSignalRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubFlowCompletionSignalRequest.ProtoReflect.Descriptor instead. func (*SubFlowCompletionSignalRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{150} + return file_dex_proto_rawDescGZIP(), []int{151} } func (x *SubFlowCompletionSignalRequest) GetSubFlowId() string { @@ -11845,7 +11897,7 @@ type ReportSubFlowCompletionActivityInput struct { func (x *ReportSubFlowCompletionActivityInput) Reset() { *x = ReportSubFlowCompletionActivityInput{} - mi := &file_dex_proto_msgTypes[151] + mi := &file_dex_proto_msgTypes[152] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11857,7 +11909,7 @@ func (x *ReportSubFlowCompletionActivityInput) String() string { func (*ReportSubFlowCompletionActivityInput) ProtoMessage() {} func (x *ReportSubFlowCompletionActivityInput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[151] + mi := &file_dex_proto_msgTypes[152] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11870,7 +11922,7 @@ func (x *ReportSubFlowCompletionActivityInput) ProtoReflect() protoreflect.Messa // Deprecated: Use ReportSubFlowCompletionActivityInput.ProtoReflect.Descriptor instead. func (*ReportSubFlowCompletionActivityInput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{151} + return file_dex_proto_rawDescGZIP(), []int{152} } func (x *ReportSubFlowCompletionActivityInput) GetParentFlowId() string { @@ -11896,7 +11948,7 @@ type ReportSubFlowCompletionActivityOutput struct { func (x *ReportSubFlowCompletionActivityOutput) Reset() { *x = ReportSubFlowCompletionActivityOutput{} - mi := &file_dex_proto_msgTypes[152] + mi := &file_dex_proto_msgTypes[153] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11908,7 +11960,7 @@ func (x *ReportSubFlowCompletionActivityOutput) String() string { func (*ReportSubFlowCompletionActivityOutput) ProtoMessage() {} func (x *ReportSubFlowCompletionActivityOutput) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[152] + mi := &file_dex_proto_msgTypes[153] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11921,7 +11973,7 @@ func (x *ReportSubFlowCompletionActivityOutput) ProtoReflect() protoreflect.Mess // Deprecated: Use ReportSubFlowCompletionActivityOutput.ProtoReflect.Descriptor instead. func (*ReportSubFlowCompletionActivityOutput) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{152} + return file_dex_proto_rawDescGZIP(), []int{153} } func (x *ReportSubFlowCompletionActivityOutput) GetStatus() SubFlowCompletionDeliveryStatus { @@ -11948,7 +12000,7 @@ type ExecuteRpcSignalRequest struct { func (x *ExecuteRpcSignalRequest) Reset() { *x = ExecuteRpcSignalRequest{} - mi := &file_dex_proto_msgTypes[153] + mi := &file_dex_proto_msgTypes[154] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11960,7 +12012,7 @@ func (x *ExecuteRpcSignalRequest) String() string { func (*ExecuteRpcSignalRequest) ProtoMessage() {} func (x *ExecuteRpcSignalRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[153] + mi := &file_dex_proto_msgTypes[154] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11973,7 +12025,7 @@ func (x *ExecuteRpcSignalRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecuteRpcSignalRequest.ProtoReflect.Descriptor instead. func (*ExecuteRpcSignalRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{153} + return file_dex_proto_rawDescGZIP(), []int{154} } func (x *ExecuteRpcSignalRequest) GetRpcInput() *Value { @@ -12050,7 +12102,7 @@ type SkipTimerSignalRequest struct { func (x *SkipTimerSignalRequest) Reset() { *x = SkipTimerSignalRequest{} - mi := &file_dex_proto_msgTypes[154] + mi := &file_dex_proto_msgTypes[155] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12062,7 +12114,7 @@ func (x *SkipTimerSignalRequest) String() string { func (*SkipTimerSignalRequest) ProtoMessage() {} func (x *SkipTimerSignalRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[154] + mi := &file_dex_proto_msgTypes[155] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12075,7 +12127,7 @@ func (x *SkipTimerSignalRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SkipTimerSignalRequest.ProtoReflect.Descriptor instead. func (*SkipTimerSignalRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{154} + return file_dex_proto_rawDescGZIP(), []int{155} } func (x *SkipTimerSignalRequest) GetStepExecutionId() string { @@ -12109,7 +12161,7 @@ type StopFlowSignalRequest struct { func (x *StopFlowSignalRequest) Reset() { *x = StopFlowSignalRequest{} - mi := &file_dex_proto_msgTypes[155] + mi := &file_dex_proto_msgTypes[156] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12121,7 +12173,7 @@ func (x *StopFlowSignalRequest) String() string { func (*StopFlowSignalRequest) ProtoMessage() {} func (x *StopFlowSignalRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[155] + mi := &file_dex_proto_msgTypes[156] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12134,7 +12186,7 @@ func (x *StopFlowSignalRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StopFlowSignalRequest.ProtoReflect.Descriptor instead. func (*StopFlowSignalRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{155} + return file_dex_proto_rawDescGZIP(), []int{156} } func (x *StopFlowSignalRequest) GetStopType() StopType { @@ -12161,7 +12213,7 @@ type GetAttributesQueryRequest struct { func (x *GetAttributesQueryRequest) Reset() { *x = GetAttributesQueryRequest{} - mi := &file_dex_proto_msgTypes[156] + mi := &file_dex_proto_msgTypes[157] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12173,7 +12225,7 @@ func (x *GetAttributesQueryRequest) String() string { func (*GetAttributesQueryRequest) ProtoMessage() {} func (x *GetAttributesQueryRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[156] + mi := &file_dex_proto_msgTypes[157] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12186,7 +12238,7 @@ func (x *GetAttributesQueryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAttributesQueryRequest.ProtoReflect.Descriptor instead. func (*GetAttributesQueryRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{156} + return file_dex_proto_rawDescGZIP(), []int{157} } func (x *GetAttributesQueryRequest) GetKeys() []string { @@ -12212,7 +12264,7 @@ type GetAttributesQueryResponse struct { func (x *GetAttributesQueryResponse) Reset() { *x = GetAttributesQueryResponse{} - mi := &file_dex_proto_msgTypes[157] + mi := &file_dex_proto_msgTypes[158] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12224,7 +12276,7 @@ func (x *GetAttributesQueryResponse) String() string { func (*GetAttributesQueryResponse) ProtoMessage() {} func (x *GetAttributesQueryResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[157] + mi := &file_dex_proto_msgTypes[158] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12237,7 +12289,7 @@ func (x *GetAttributesQueryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAttributesQueryResponse.ProtoReflect.Descriptor instead. func (*GetAttributesQueryResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{157} + return file_dex_proto_rawDescGZIP(), []int{158} } func (x *GetAttributesQueryResponse) GetAttributes() []*KV { @@ -12258,7 +12310,7 @@ type PrepareRpcQueryRequest struct { func (x *PrepareRpcQueryRequest) Reset() { *x = PrepareRpcQueryRequest{} - mi := &file_dex_proto_msgTypes[158] + mi := &file_dex_proto_msgTypes[159] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12270,7 +12322,7 @@ func (x *PrepareRpcQueryRequest) String() string { func (*PrepareRpcQueryRequest) ProtoMessage() {} func (x *PrepareRpcQueryRequest) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[158] + mi := &file_dex_proto_msgTypes[159] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12283,7 +12335,7 @@ func (x *PrepareRpcQueryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PrepareRpcQueryRequest.ProtoReflect.Descriptor instead. func (*PrepareRpcQueryRequest) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{158} + return file_dex_proto_rawDescGZIP(), []int{159} } func (x *PrepareRpcQueryRequest) GetLoadAttributeMapInstances() []string { @@ -12325,7 +12377,7 @@ type PrepareRpcQueryResponse struct { func (x *PrepareRpcQueryResponse) Reset() { *x = PrepareRpcQueryResponse{} - mi := &file_dex_proto_msgTypes[159] + mi := &file_dex_proto_msgTypes[160] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12337,7 +12389,7 @@ func (x *PrepareRpcQueryResponse) String() string { func (*PrepareRpcQueryResponse) ProtoMessage() {} func (x *PrepareRpcQueryResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[159] + mi := &file_dex_proto_msgTypes[160] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12350,7 +12402,7 @@ func (x *PrepareRpcQueryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PrepareRpcQueryResponse.ProtoReflect.Descriptor instead. func (*PrepareRpcQueryResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{159} + return file_dex_proto_rawDescGZIP(), []int{160} } func (x *PrepareRpcQueryResponse) GetAttributes() []*KV { @@ -12435,7 +12487,7 @@ type TimerInfo struct { func (x *TimerInfo) Reset() { *x = TimerInfo{} - mi := &file_dex_proto_msgTypes[160] + mi := &file_dex_proto_msgTypes[161] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12447,7 +12499,7 @@ func (x *TimerInfo) String() string { func (*TimerInfo) ProtoMessage() {} func (x *TimerInfo) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[160] + mi := &file_dex_proto_msgTypes[161] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12460,7 +12512,7 @@ func (x *TimerInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use TimerInfo.ProtoReflect.Descriptor instead. func (*TimerInfo) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{160} + return file_dex_proto_rawDescGZIP(), []int{161} } func (x *TimerInfo) GetConditionId() string { @@ -12493,7 +12545,7 @@ type TimerInfoList struct { func (x *TimerInfoList) Reset() { *x = TimerInfoList{} - mi := &file_dex_proto_msgTypes[161] + mi := &file_dex_proto_msgTypes[162] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12505,7 +12557,7 @@ func (x *TimerInfoList) String() string { func (*TimerInfoList) ProtoMessage() {} func (x *TimerInfoList) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[161] + mi := &file_dex_proto_msgTypes[162] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12518,7 +12570,7 @@ func (x *TimerInfoList) ProtoReflect() protoreflect.Message { // Deprecated: Use TimerInfoList.ProtoReflect.Descriptor instead. func (*TimerInfoList) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{161} + return file_dex_proto_rawDescGZIP(), []int{162} } func (x *TimerInfoList) GetTimers() []*TimerInfo { @@ -12538,7 +12590,7 @@ type GetCurrentTimerInfosQueryResponse struct { func (x *GetCurrentTimerInfosQueryResponse) Reset() { *x = GetCurrentTimerInfosQueryResponse{} - mi := &file_dex_proto_msgTypes[162] + mi := &file_dex_proto_msgTypes[163] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12550,7 +12602,7 @@ func (x *GetCurrentTimerInfosQueryResponse) String() string { func (*GetCurrentTimerInfosQueryResponse) ProtoMessage() {} func (x *GetCurrentTimerInfosQueryResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[162] + mi := &file_dex_proto_msgTypes[163] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12563,7 +12615,7 @@ func (x *GetCurrentTimerInfosQueryResponse) ProtoReflect() protoreflect.Message // Deprecated: Use GetCurrentTimerInfosQueryResponse.ProtoReflect.Descriptor instead. func (*GetCurrentTimerInfosQueryResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{162} + return file_dex_proto_rawDescGZIP(), []int{163} } func (x *GetCurrentTimerInfosQueryResponse) GetStepExecutionCurrentTimerInfos() map[string]*TimerInfoList { @@ -12582,7 +12634,7 @@ type GetScheduledGreedyTimerTimesQueryResponse struct { func (x *GetScheduledGreedyTimerTimesQueryResponse) Reset() { *x = GetScheduledGreedyTimerTimesQueryResponse{} - mi := &file_dex_proto_msgTypes[163] + mi := &file_dex_proto_msgTypes[164] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12594,7 +12646,7 @@ func (x *GetScheduledGreedyTimerTimesQueryResponse) String() string { func (*GetScheduledGreedyTimerTimesQueryResponse) ProtoMessage() {} func (x *GetScheduledGreedyTimerTimesQueryResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[163] + mi := &file_dex_proto_msgTypes[164] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12607,7 +12659,7 @@ func (x *GetScheduledGreedyTimerTimesQueryResponse) ProtoReflect() protoreflect. // Deprecated: Use GetScheduledGreedyTimerTimesQueryResponse.ProtoReflect.Descriptor instead. func (*GetScheduledGreedyTimerTimesQueryResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{163} + return file_dex_proto_rawDescGZIP(), []int{164} } func (x *GetScheduledGreedyTimerTimesQueryResponse) GetPendingScheduled() []*TimerInfo { @@ -12629,7 +12681,7 @@ type DebugDumpResponse struct { func (x *DebugDumpResponse) Reset() { *x = DebugDumpResponse{} - mi := &file_dex_proto_msgTypes[164] + mi := &file_dex_proto_msgTypes[165] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12641,7 +12693,7 @@ func (x *DebugDumpResponse) String() string { func (*DebugDumpResponse) ProtoMessage() {} func (x *DebugDumpResponse) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[164] + mi := &file_dex_proto_msgTypes[165] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12654,7 +12706,7 @@ func (x *DebugDumpResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DebugDumpResponse.ProtoReflect.Descriptor instead. func (*DebugDumpResponse) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{164} + return file_dex_proto_rawDescGZIP(), []int{165} } func (x *DebugDumpResponse) GetConfig() *FlowConfig { @@ -12695,7 +12747,7 @@ type InvokeRpcUpdateResult struct { func (x *InvokeRpcUpdateResult) Reset() { *x = InvokeRpcUpdateResult{} - mi := &file_dex_proto_msgTypes[165] + mi := &file_dex_proto_msgTypes[166] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12707,7 +12759,7 @@ func (x *InvokeRpcUpdateResult) String() string { func (*InvokeRpcUpdateResult) ProtoMessage() {} func (x *InvokeRpcUpdateResult) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[165] + mi := &file_dex_proto_msgTypes[166] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12720,7 +12772,7 @@ func (x *InvokeRpcUpdateResult) ProtoReflect() protoreflect.Message { // Deprecated: Use InvokeRpcUpdateResult.ProtoReflect.Descriptor instead. func (*InvokeRpcUpdateResult) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{165} + return file_dex_proto_rawDescGZIP(), []int{166} } func (x *InvokeRpcUpdateResult) GetResponse() *InvokeRPCResponse { @@ -12739,7 +12791,7 @@ type StepExecutionNumbers struct { func (x *StepExecutionNumbers) Reset() { *x = StepExecutionNumbers{} - mi := &file_dex_proto_msgTypes[166] + mi := &file_dex_proto_msgTypes[167] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12751,7 +12803,7 @@ func (x *StepExecutionNumbers) String() string { func (*StepExecutionNumbers) ProtoMessage() {} func (x *StepExecutionNumbers) ProtoReflect() protoreflect.Message { - mi := &file_dex_proto_msgTypes[166] + mi := &file_dex_proto_msgTypes[167] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12764,7 +12816,7 @@ func (x *StepExecutionNumbers) ProtoReflect() protoreflect.Message { // Deprecated: Use StepExecutionNumbers.ProtoReflect.Descriptor instead. func (*StepExecutionNumbers) Descriptor() ([]byte, []int) { - return file_dex_proto_rawDescGZIP(), []int{166} + return file_dex_proto_rawDescGZIP(), []int{167} } func (x *StepExecutionNumbers) GetNumbers() []int32 { @@ -13000,10 +13052,14 @@ const file_dex_proto_rawDesc = "" + "attributes\x18\x03 \x03(\v2\x13.dex.AttributeWriteR\n" + "attributes\x12\x1d\n" + "\n" + - "request_id\x18\x04 \x01(\tR\trequestId\"6\n" + - "\x10LoadBlobsRequest\x12\"\n" + - "\x06values\x18\x01 \x03(\v2\n" + - ".dex.ValueR\x06values\"\x96\x01\n" + + "request_id\x18\x04 \x01(\tR\trequestId\"Z\n" + + "\x14LoadBlobRequestEntry\x12\x17\n" + + "\aflow_id\x18\x01 \x01(\tR\x06flowId\x12)\n" + + "\n" + + "blob_value\x18\x02 \x01(\v2\n" + + ".dex.ValueR\tblobValue\"G\n" + + "\x10LoadBlobsRequest\x123\n" + + "\aentries\x18\x01 \x03(\v2\x19.dex.LoadBlobRequestEntryR\aentries\"\x96\x01\n" + "\x11LoadBlobsResponse\x12:\n" + "\x06values\x18\x01 \x03(\v2\".dex.LoadBlobsResponse.ValuesEntryR\x06values\x1aE\n" + "\vValuesEntry\x12\x10\n" + @@ -13965,7 +14021,7 @@ func file_dex_proto_rawDescGZIP() []byte { } var file_dex_proto_enumTypes = make([]protoimpl.EnumInfo, 23) -var file_dex_proto_msgTypes = make([]protoimpl.MessageInfo, 186) +var file_dex_proto_msgTypes = make([]protoimpl.MessageInfo, 187) var file_dex_proto_goTypes = []any{ (IndexType)(0), // 0: dex.IndexType (WaitForMethodFailurePolicy)(0), // 1: dex.WaitForMethodFailurePolicy @@ -14025,171 +14081,172 @@ var file_dex_proto_goTypes = []any{ (*GetAttributesRequest)(nil), // 55: dex.GetAttributesRequest (*GetAttributesResponse)(nil), // 56: dex.GetAttributesResponse (*SetAttributesRequest)(nil), // 57: dex.SetAttributesRequest - (*LoadBlobsRequest)(nil), // 58: dex.LoadBlobsRequest - (*LoadBlobsResponse)(nil), // 59: dex.LoadBlobsResponse - (*WaitForFlowRequest)(nil), // 60: dex.WaitForFlowRequest - (*StepCompletionOutput)(nil), // 61: dex.StepCompletionOutput - (*FlowResult)(nil), // 62: dex.FlowResult - (*SearchFlowsRequest)(nil), // 63: dex.SearchFlowsRequest - (*SearchFlowsResponse)(nil), // 64: dex.SearchFlowsResponse - (*SearchFlowsResponseEntry)(nil), // 65: dex.SearchFlowsResponseEntry - (*SyncAttributeIndexRequest)(nil), // 66: dex.SyncAttributeIndexRequest - (*SyncAttributeIndexResponse)(nil), // 67: dex.SyncAttributeIndexResponse - (*FlowExecutionID)(nil), // 68: dex.FlowExecutionID - (*GetFlowSummaryRequest)(nil), // 69: dex.GetFlowSummaryRequest - (*GetFlowSummaryResponse)(nil), // 70: dex.GetFlowSummaryResponse - (*InternalAsyncStepInputSnapshot)(nil), // 71: dex.InternalAsyncStepInputSnapshot - (*InternalLocalActivityInput)(nil), // 72: dex.InternalLocalActivityInput - (*GetHistoryEventsRequest)(nil), // 73: dex.GetHistoryEventsRequest - (*GetHistoryEventsResponse)(nil), // 74: dex.GetHistoryEventsResponse - (*FlowHistoryEvent)(nil), // 75: dex.FlowHistoryEvent - (*TimeTravelForkHistoryEvent)(nil), // 76: dex.TimeTravelForkHistoryEvent - (*FlowStartedOrContinuedHistoryEvent)(nil), // 77: dex.FlowStartedOrContinuedHistoryEvent - (*FlowInitialStart)(nil), // 78: dex.FlowInitialStart - (*FlowContinuedStart)(nil), // 79: dex.FlowContinuedStart - (*FlowClosedHistoryEvent)(nil), // 80: dex.FlowClosedHistoryEvent - (*StepMethodPendingEvent)(nil), // 81: dex.StepMethodPendingEvent - (*StepMethodFailure)(nil), // 82: dex.StepMethodFailure - (*StepMethodOptions)(nil), // 83: dex.StepMethodOptions - (*StepMethodEventInput)(nil), // 84: dex.StepMethodEventInput - (*StepMethodEventContext)(nil), // 85: dex.StepMethodEventContext - (*StepWaitForCompletedOutput)(nil), // 86: dex.StepWaitForCompletedOutput - (*StepExecuteCompletedOutput)(nil), // 87: dex.StepExecuteCompletedOutput - (*StepMethodFailedOutput)(nil), // 88: dex.StepMethodFailedOutput - (*StepWaitForCompletedEvent)(nil), // 89: dex.StepWaitForCompletedEvent - (*StepWaitForFailedEvent)(nil), // 90: dex.StepWaitForFailedEvent - (*StepExecuteCompletedEvent)(nil), // 91: dex.StepExecuteCompletedEvent - (*StepExecuteFailedEvent)(nil), // 92: dex.StepExecuteFailedEvent - (*RpcExecutionCompletedEvent)(nil), // 93: dex.RpcExecutionCompletedEvent - (*ChannelExternalPublishEvent)(nil), // 94: dex.ChannelExternalPublishEvent - (*ChannelExternalDeleteEvent)(nil), // 95: dex.ChannelExternalDeleteEvent - (*WaitForHistoryEventRequest)(nil), // 96: dex.WaitForHistoryEventRequest - (*WaitForHistoryEventResponse)(nil), // 97: dex.WaitForHistoryEventResponse - (*ActiveStepExecutionState)(nil), // 98: dex.ActiveStepExecutionState - (*GetFlowStateRequest)(nil), // 99: dex.GetFlowStateRequest - (*GetFlowStateResponse)(nil), // 100: dex.GetFlowStateResponse - (*ResetFlowRequest)(nil), // 101: dex.ResetFlowRequest - (*ResetFlowResponse)(nil), // 102: dex.ResetFlowResponse - (*InvokeRPCRequest)(nil), // 103: dex.InvokeRPCRequest - (*InvokeRPCResponse)(nil), // 104: dex.InvokeRPCResponse - (*SkipTimerRequest)(nil), // 105: dex.SkipTimerRequest - (*UpdateFlowConfigRequest)(nil), // 106: dex.UpdateFlowConfigRequest - (*WaitForStepCompletionRequest)(nil), // 107: dex.WaitForStepCompletionRequest - (*WaitForStepCompletionResponse)(nil), // 108: dex.WaitForStepCompletionResponse - (*WaitForAttributeRequest)(nil), // 109: dex.WaitForAttributeRequest - (*WaitForAttributeResponse)(nil), // 110: dex.WaitForAttributeResponse - (*AttributeMatch)(nil), // 111: dex.AttributeMatch - (*TriggerContinueAsNewRequest)(nil), // 112: dex.TriggerContinueAsNewRequest - (*HealthInfo)(nil), // 113: dex.HealthInfo - (*ServiceErrorResponse)(nil), // 114: dex.ServiceErrorResponse - (*WorkerErrorResponse)(nil), // 115: dex.WorkerErrorResponse - (*InternalActivityError)(nil), // 116: dex.InternalActivityError - (*InternalWorkerError)(nil), // 117: dex.InternalWorkerError - (*InternalFlowError)(nil), // 118: dex.InternalFlowError - (*ChannelInfo)(nil), // 119: dex.ChannelInfo - (*InvokeWaitForMethodRequest)(nil), // 120: dex.InvokeWaitForMethodRequest - (*InvokeWaitForMethodResponse)(nil), // 121: dex.InvokeWaitForMethodResponse - (*StepMethodHeartbeat)(nil), // 122: dex.StepMethodHeartbeat - (*StepStreamWrite)(nil), // 123: dex.StepStreamWrite - (*InvokeWaitForMethodOutput)(nil), // 124: dex.InvokeWaitForMethodOutput - (*InvokeExecuteMethodRequest)(nil), // 125: dex.InvokeExecuteMethodRequest - (*InvokeExecuteMethodResponse)(nil), // 126: dex.InvokeExecuteMethodResponse - (*InvokeExecuteMethodOutput)(nil), // 127: dex.InvokeExecuteMethodOutput - (*InvokeWorkerRPCRequest)(nil), // 128: dex.InvokeWorkerRPCRequest - (*InvokeWorkerRPCResponse)(nil), // 129: dex.InvokeWorkerRPCResponse - (*StepDecision)(nil), // 130: dex.StepDecision - (*CloseDecision)(nil), // 131: dex.CloseDecision - (*StepMovement)(nil), // 132: dex.StepMovement - (*ConditionCombination)(nil), // 133: dex.ConditionCombination - (*WaitingCondition)(nil), // 134: dex.WaitingCondition - (*WaitingConditionState)(nil), // 135: dex.WaitingConditionState - (*SubFlowOptions)(nil), // 136: dex.SubFlowOptions - (*SubFlowCondition)(nil), // 137: dex.SubFlowCondition - (*SubFlowConditionState)(nil), // 138: dex.SubFlowConditionState - (*TimerCondition)(nil), // 139: dex.TimerCondition - (*ChannelCondition)(nil), // 140: dex.ChannelCondition - (*ConditionResults)(nil), // 141: dex.ConditionResults - (*TimerResult)(nil), // 142: dex.TimerResult - (*ChannelResult)(nil), // 143: dex.ChannelResult - (*ContinueAsNewDumpRequest)(nil), // 144: dex.ContinueAsNewDumpRequest - (*ContinueAsNewDumpResponse)(nil), // 145: dex.ContinueAsNewDumpResponse - (*ChannelValues)(nil), // 146: dex.ChannelValues - (*StepExecutionCompletedConditions)(nil), // 147: dex.StepExecutionCompletedConditions - (*StepExecutionResumeInfo)(nil), // 148: dex.StepExecutionResumeInfo - (*StepExecutionCounterInfo)(nil), // 149: dex.StepExecutionCounterInfo - (*StaleSkipTimer)(nil), // 150: dex.StaleSkipTimer - (*ContinueAsNewDump)(nil), // 151: dex.ContinueAsNewDump - (*ContinueAsNewInput)(nil), // 152: dex.ContinueAsNewInput - (*InterpreterWorkflowInput)(nil), // 153: dex.InterpreterWorkflowInput - (*InterpreterWorkflowOutput)(nil), // 154: dex.InterpreterWorkflowOutput - (*BlobStoreCleanupWorkflowInput)(nil), // 155: dex.BlobStoreCleanupWorkflowInput - (*BlobStoreCleanupWorkflowOutput)(nil), // 156: dex.BlobStoreCleanupWorkflowOutput - (*InvokeWaitForMethodActivityInput)(nil), // 157: dex.InvokeWaitForMethodActivityInput - (*InvokeWaitForMethodActivityOutput)(nil), // 158: dex.InvokeWaitForMethodActivityOutput - (*InvokeExecuteMethodActivityInput)(nil), // 159: dex.InvokeExecuteMethodActivityInput - (*RecoveryErrorInfo)(nil), // 160: dex.RecoveryErrorInfo - (*InternalLocalStepActivityFailure)(nil), // 161: dex.InternalLocalStepActivityFailure - (*InvokeExecuteMethodActivityOutput)(nil), // 162: dex.InvokeExecuteMethodActivityOutput - (*DumpFlowForContinueAsNewActivityInput)(nil), // 163: dex.DumpFlowForContinueAsNewActivityInput - (*DumpFlowForContinueAsNewActivityOutput)(nil), // 164: dex.DumpFlowForContinueAsNewActivityOutput - (*InvokeWorkerRPCActivityInput)(nil), // 165: dex.InvokeWorkerRPCActivityInput - (*InvokeWorkerRPCActivityOutput)(nil), // 166: dex.InvokeWorkerRPCActivityOutput - (*CleanupBlobStoreActivityInput)(nil), // 167: dex.CleanupBlobStoreActivityInput - (*CleanupBlobStoreActivityOutput)(nil), // 168: dex.CleanupBlobStoreActivityOutput - (*AttributeSyncItem)(nil), // 169: dex.AttributeSyncItem - (*SyncAttributeBatchActivityInput)(nil), // 170: dex.SyncAttributeBatchActivityInput - (*StartSubFlowActivityInput)(nil), // 171: dex.StartSubFlowActivityInput - (*StartSubFlowActivityOutput)(nil), // 172: dex.StartSubFlowActivityOutput - (*SubFlowCompletionSignalRequest)(nil), // 173: dex.SubFlowCompletionSignalRequest - (*ReportSubFlowCompletionActivityInput)(nil), // 174: dex.ReportSubFlowCompletionActivityInput - (*ReportSubFlowCompletionActivityOutput)(nil), // 175: dex.ReportSubFlowCompletionActivityOutput - (*ExecuteRpcSignalRequest)(nil), // 176: dex.ExecuteRpcSignalRequest - (*SkipTimerSignalRequest)(nil), // 177: dex.SkipTimerSignalRequest - (*StopFlowSignalRequest)(nil), // 178: dex.StopFlowSignalRequest - (*GetAttributesQueryRequest)(nil), // 179: dex.GetAttributesQueryRequest - (*GetAttributesQueryResponse)(nil), // 180: dex.GetAttributesQueryResponse - (*PrepareRpcQueryRequest)(nil), // 181: dex.PrepareRpcQueryRequest - (*PrepareRpcQueryResponse)(nil), // 182: dex.PrepareRpcQueryResponse - (*TimerInfo)(nil), // 183: dex.TimerInfo - (*TimerInfoList)(nil), // 184: dex.TimerInfoList - (*GetCurrentTimerInfosQueryResponse)(nil), // 185: dex.GetCurrentTimerInfosQueryResponse - (*GetScheduledGreedyTimerTimesQueryResponse)(nil), // 186: dex.GetScheduledGreedyTimerTimesQueryResponse - (*DebugDumpResponse)(nil), // 187: dex.DebugDumpResponse - (*InvokeRpcUpdateResult)(nil), // 188: dex.InvokeRpcUpdateResult - (*StepExecutionNumbers)(nil), // 189: dex.StepExecutionNumbers - nil, // 190: dex.LoadBlobsResponse.ValuesEntry - nil, // 191: dex.SyncAttributeIndexRequest.AttributeIndexesEntry - nil, // 192: dex.FlowContinuedStart.PendingChannelMessagesEntry - nil, // 193: dex.GetFlowStateResponse.PendingChannelMessagesEntry - nil, // 194: dex.InvokeWaitForMethodRequest.ChannelInfosEntry - nil, // 195: dex.InvokeWaitForMethodRequest.LoadedChannelMessagesEntry - nil, // 196: dex.InvokeExecuteMethodRequest.ChannelInfosEntry - nil, // 197: dex.InvokeExecuteMethodRequest.LoadedChannelMessagesEntry - nil, // 198: dex.InvokeWorkerRPCRequest.ChannelInfosEntry - nil, // 199: dex.InvokeWorkerRPCRequest.LoadedChannelMessagesEntry - nil, // 200: dex.StepExecutionCompletedConditions.CompletedTimerConditionsEntry - nil, // 201: dex.StepExecutionCompletedConditions.CompletedSubFlowResultsEntry - nil, // 202: dex.StepExecutionCounterInfo.StepTypeStartedCountEntry - nil, // 203: dex.StepExecutionCounterInfo.StepTypeCurrentlyExecutingCountEntry - nil, // 204: dex.StepExecutionCounterInfo.StepActiveExecutionNumsEntry - nil, // 205: dex.ContinueAsNewDump.ChannelReceivedEntry - nil, // 206: dex.PrepareRpcQueryResponse.ChannelInfosEntry - nil, // 207: dex.PrepareRpcQueryResponse.LoadedChannelMessagesEntry - nil, // 208: dex.GetCurrentTimerInfosQueryResponse.StepExecutionCurrentTimerInfosEntry - (structpb.NullValue)(0), // 209: google.protobuf.NullValue - (*timestamppb.Timestamp)(nil), // 210: google.protobuf.Timestamp - (*durationpb.Duration)(nil), // 211: google.protobuf.Duration - (*emptypb.Empty)(nil), // 212: google.protobuf.Empty + (*LoadBlobRequestEntry)(nil), // 58: dex.LoadBlobRequestEntry + (*LoadBlobsRequest)(nil), // 59: dex.LoadBlobsRequest + (*LoadBlobsResponse)(nil), // 60: dex.LoadBlobsResponse + (*WaitForFlowRequest)(nil), // 61: dex.WaitForFlowRequest + (*StepCompletionOutput)(nil), // 62: dex.StepCompletionOutput + (*FlowResult)(nil), // 63: dex.FlowResult + (*SearchFlowsRequest)(nil), // 64: dex.SearchFlowsRequest + (*SearchFlowsResponse)(nil), // 65: dex.SearchFlowsResponse + (*SearchFlowsResponseEntry)(nil), // 66: dex.SearchFlowsResponseEntry + (*SyncAttributeIndexRequest)(nil), // 67: dex.SyncAttributeIndexRequest + (*SyncAttributeIndexResponse)(nil), // 68: dex.SyncAttributeIndexResponse + (*FlowExecutionID)(nil), // 69: dex.FlowExecutionID + (*GetFlowSummaryRequest)(nil), // 70: dex.GetFlowSummaryRequest + (*GetFlowSummaryResponse)(nil), // 71: dex.GetFlowSummaryResponse + (*InternalAsyncStepInputSnapshot)(nil), // 72: dex.InternalAsyncStepInputSnapshot + (*InternalLocalActivityInput)(nil), // 73: dex.InternalLocalActivityInput + (*GetHistoryEventsRequest)(nil), // 74: dex.GetHistoryEventsRequest + (*GetHistoryEventsResponse)(nil), // 75: dex.GetHistoryEventsResponse + (*FlowHistoryEvent)(nil), // 76: dex.FlowHistoryEvent + (*TimeTravelForkHistoryEvent)(nil), // 77: dex.TimeTravelForkHistoryEvent + (*FlowStartedOrContinuedHistoryEvent)(nil), // 78: dex.FlowStartedOrContinuedHistoryEvent + (*FlowInitialStart)(nil), // 79: dex.FlowInitialStart + (*FlowContinuedStart)(nil), // 80: dex.FlowContinuedStart + (*FlowClosedHistoryEvent)(nil), // 81: dex.FlowClosedHistoryEvent + (*StepMethodPendingEvent)(nil), // 82: dex.StepMethodPendingEvent + (*StepMethodFailure)(nil), // 83: dex.StepMethodFailure + (*StepMethodOptions)(nil), // 84: dex.StepMethodOptions + (*StepMethodEventInput)(nil), // 85: dex.StepMethodEventInput + (*StepMethodEventContext)(nil), // 86: dex.StepMethodEventContext + (*StepWaitForCompletedOutput)(nil), // 87: dex.StepWaitForCompletedOutput + (*StepExecuteCompletedOutput)(nil), // 88: dex.StepExecuteCompletedOutput + (*StepMethodFailedOutput)(nil), // 89: dex.StepMethodFailedOutput + (*StepWaitForCompletedEvent)(nil), // 90: dex.StepWaitForCompletedEvent + (*StepWaitForFailedEvent)(nil), // 91: dex.StepWaitForFailedEvent + (*StepExecuteCompletedEvent)(nil), // 92: dex.StepExecuteCompletedEvent + (*StepExecuteFailedEvent)(nil), // 93: dex.StepExecuteFailedEvent + (*RpcExecutionCompletedEvent)(nil), // 94: dex.RpcExecutionCompletedEvent + (*ChannelExternalPublishEvent)(nil), // 95: dex.ChannelExternalPublishEvent + (*ChannelExternalDeleteEvent)(nil), // 96: dex.ChannelExternalDeleteEvent + (*WaitForHistoryEventRequest)(nil), // 97: dex.WaitForHistoryEventRequest + (*WaitForHistoryEventResponse)(nil), // 98: dex.WaitForHistoryEventResponse + (*ActiveStepExecutionState)(nil), // 99: dex.ActiveStepExecutionState + (*GetFlowStateRequest)(nil), // 100: dex.GetFlowStateRequest + (*GetFlowStateResponse)(nil), // 101: dex.GetFlowStateResponse + (*ResetFlowRequest)(nil), // 102: dex.ResetFlowRequest + (*ResetFlowResponse)(nil), // 103: dex.ResetFlowResponse + (*InvokeRPCRequest)(nil), // 104: dex.InvokeRPCRequest + (*InvokeRPCResponse)(nil), // 105: dex.InvokeRPCResponse + (*SkipTimerRequest)(nil), // 106: dex.SkipTimerRequest + (*UpdateFlowConfigRequest)(nil), // 107: dex.UpdateFlowConfigRequest + (*WaitForStepCompletionRequest)(nil), // 108: dex.WaitForStepCompletionRequest + (*WaitForStepCompletionResponse)(nil), // 109: dex.WaitForStepCompletionResponse + (*WaitForAttributeRequest)(nil), // 110: dex.WaitForAttributeRequest + (*WaitForAttributeResponse)(nil), // 111: dex.WaitForAttributeResponse + (*AttributeMatch)(nil), // 112: dex.AttributeMatch + (*TriggerContinueAsNewRequest)(nil), // 113: dex.TriggerContinueAsNewRequest + (*HealthInfo)(nil), // 114: dex.HealthInfo + (*ServiceErrorResponse)(nil), // 115: dex.ServiceErrorResponse + (*WorkerErrorResponse)(nil), // 116: dex.WorkerErrorResponse + (*InternalActivityError)(nil), // 117: dex.InternalActivityError + (*InternalWorkerError)(nil), // 118: dex.InternalWorkerError + (*InternalFlowError)(nil), // 119: dex.InternalFlowError + (*ChannelInfo)(nil), // 120: dex.ChannelInfo + (*InvokeWaitForMethodRequest)(nil), // 121: dex.InvokeWaitForMethodRequest + (*InvokeWaitForMethodResponse)(nil), // 122: dex.InvokeWaitForMethodResponse + (*StepMethodHeartbeat)(nil), // 123: dex.StepMethodHeartbeat + (*StepStreamWrite)(nil), // 124: dex.StepStreamWrite + (*InvokeWaitForMethodOutput)(nil), // 125: dex.InvokeWaitForMethodOutput + (*InvokeExecuteMethodRequest)(nil), // 126: dex.InvokeExecuteMethodRequest + (*InvokeExecuteMethodResponse)(nil), // 127: dex.InvokeExecuteMethodResponse + (*InvokeExecuteMethodOutput)(nil), // 128: dex.InvokeExecuteMethodOutput + (*InvokeWorkerRPCRequest)(nil), // 129: dex.InvokeWorkerRPCRequest + (*InvokeWorkerRPCResponse)(nil), // 130: dex.InvokeWorkerRPCResponse + (*StepDecision)(nil), // 131: dex.StepDecision + (*CloseDecision)(nil), // 132: dex.CloseDecision + (*StepMovement)(nil), // 133: dex.StepMovement + (*ConditionCombination)(nil), // 134: dex.ConditionCombination + (*WaitingCondition)(nil), // 135: dex.WaitingCondition + (*WaitingConditionState)(nil), // 136: dex.WaitingConditionState + (*SubFlowOptions)(nil), // 137: dex.SubFlowOptions + (*SubFlowCondition)(nil), // 138: dex.SubFlowCondition + (*SubFlowConditionState)(nil), // 139: dex.SubFlowConditionState + (*TimerCondition)(nil), // 140: dex.TimerCondition + (*ChannelCondition)(nil), // 141: dex.ChannelCondition + (*ConditionResults)(nil), // 142: dex.ConditionResults + (*TimerResult)(nil), // 143: dex.TimerResult + (*ChannelResult)(nil), // 144: dex.ChannelResult + (*ContinueAsNewDumpRequest)(nil), // 145: dex.ContinueAsNewDumpRequest + (*ContinueAsNewDumpResponse)(nil), // 146: dex.ContinueAsNewDumpResponse + (*ChannelValues)(nil), // 147: dex.ChannelValues + (*StepExecutionCompletedConditions)(nil), // 148: dex.StepExecutionCompletedConditions + (*StepExecutionResumeInfo)(nil), // 149: dex.StepExecutionResumeInfo + (*StepExecutionCounterInfo)(nil), // 150: dex.StepExecutionCounterInfo + (*StaleSkipTimer)(nil), // 151: dex.StaleSkipTimer + (*ContinueAsNewDump)(nil), // 152: dex.ContinueAsNewDump + (*ContinueAsNewInput)(nil), // 153: dex.ContinueAsNewInput + (*InterpreterWorkflowInput)(nil), // 154: dex.InterpreterWorkflowInput + (*InterpreterWorkflowOutput)(nil), // 155: dex.InterpreterWorkflowOutput + (*BlobStoreCleanupWorkflowInput)(nil), // 156: dex.BlobStoreCleanupWorkflowInput + (*BlobStoreCleanupWorkflowOutput)(nil), // 157: dex.BlobStoreCleanupWorkflowOutput + (*InvokeWaitForMethodActivityInput)(nil), // 158: dex.InvokeWaitForMethodActivityInput + (*InvokeWaitForMethodActivityOutput)(nil), // 159: dex.InvokeWaitForMethodActivityOutput + (*InvokeExecuteMethodActivityInput)(nil), // 160: dex.InvokeExecuteMethodActivityInput + (*RecoveryErrorInfo)(nil), // 161: dex.RecoveryErrorInfo + (*InternalLocalStepActivityFailure)(nil), // 162: dex.InternalLocalStepActivityFailure + (*InvokeExecuteMethodActivityOutput)(nil), // 163: dex.InvokeExecuteMethodActivityOutput + (*DumpFlowForContinueAsNewActivityInput)(nil), // 164: dex.DumpFlowForContinueAsNewActivityInput + (*DumpFlowForContinueAsNewActivityOutput)(nil), // 165: dex.DumpFlowForContinueAsNewActivityOutput + (*InvokeWorkerRPCActivityInput)(nil), // 166: dex.InvokeWorkerRPCActivityInput + (*InvokeWorkerRPCActivityOutput)(nil), // 167: dex.InvokeWorkerRPCActivityOutput + (*CleanupBlobStoreActivityInput)(nil), // 168: dex.CleanupBlobStoreActivityInput + (*CleanupBlobStoreActivityOutput)(nil), // 169: dex.CleanupBlobStoreActivityOutput + (*AttributeSyncItem)(nil), // 170: dex.AttributeSyncItem + (*SyncAttributeBatchActivityInput)(nil), // 171: dex.SyncAttributeBatchActivityInput + (*StartSubFlowActivityInput)(nil), // 172: dex.StartSubFlowActivityInput + (*StartSubFlowActivityOutput)(nil), // 173: dex.StartSubFlowActivityOutput + (*SubFlowCompletionSignalRequest)(nil), // 174: dex.SubFlowCompletionSignalRequest + (*ReportSubFlowCompletionActivityInput)(nil), // 175: dex.ReportSubFlowCompletionActivityInput + (*ReportSubFlowCompletionActivityOutput)(nil), // 176: dex.ReportSubFlowCompletionActivityOutput + (*ExecuteRpcSignalRequest)(nil), // 177: dex.ExecuteRpcSignalRequest + (*SkipTimerSignalRequest)(nil), // 178: dex.SkipTimerSignalRequest + (*StopFlowSignalRequest)(nil), // 179: dex.StopFlowSignalRequest + (*GetAttributesQueryRequest)(nil), // 180: dex.GetAttributesQueryRequest + (*GetAttributesQueryResponse)(nil), // 181: dex.GetAttributesQueryResponse + (*PrepareRpcQueryRequest)(nil), // 182: dex.PrepareRpcQueryRequest + (*PrepareRpcQueryResponse)(nil), // 183: dex.PrepareRpcQueryResponse + (*TimerInfo)(nil), // 184: dex.TimerInfo + (*TimerInfoList)(nil), // 185: dex.TimerInfoList + (*GetCurrentTimerInfosQueryResponse)(nil), // 186: dex.GetCurrentTimerInfosQueryResponse + (*GetScheduledGreedyTimerTimesQueryResponse)(nil), // 187: dex.GetScheduledGreedyTimerTimesQueryResponse + (*DebugDumpResponse)(nil), // 188: dex.DebugDumpResponse + (*InvokeRpcUpdateResult)(nil), // 189: dex.InvokeRpcUpdateResult + (*StepExecutionNumbers)(nil), // 190: dex.StepExecutionNumbers + nil, // 191: dex.LoadBlobsResponse.ValuesEntry + nil, // 192: dex.SyncAttributeIndexRequest.AttributeIndexesEntry + nil, // 193: dex.FlowContinuedStart.PendingChannelMessagesEntry + nil, // 194: dex.GetFlowStateResponse.PendingChannelMessagesEntry + nil, // 195: dex.InvokeWaitForMethodRequest.ChannelInfosEntry + nil, // 196: dex.InvokeWaitForMethodRequest.LoadedChannelMessagesEntry + nil, // 197: dex.InvokeExecuteMethodRequest.ChannelInfosEntry + nil, // 198: dex.InvokeExecuteMethodRequest.LoadedChannelMessagesEntry + nil, // 199: dex.InvokeWorkerRPCRequest.ChannelInfosEntry + nil, // 200: dex.InvokeWorkerRPCRequest.LoadedChannelMessagesEntry + nil, // 201: dex.StepExecutionCompletedConditions.CompletedTimerConditionsEntry + nil, // 202: dex.StepExecutionCompletedConditions.CompletedSubFlowResultsEntry + nil, // 203: dex.StepExecutionCounterInfo.StepTypeStartedCountEntry + nil, // 204: dex.StepExecutionCounterInfo.StepTypeCurrentlyExecutingCountEntry + nil, // 205: dex.StepExecutionCounterInfo.StepActiveExecutionNumsEntry + nil, // 206: dex.ContinueAsNewDump.ChannelReceivedEntry + nil, // 207: dex.PrepareRpcQueryResponse.ChannelInfosEntry + nil, // 208: dex.PrepareRpcQueryResponse.LoadedChannelMessagesEntry + nil, // 209: dex.GetCurrentTimerInfosQueryResponse.StepExecutionCurrentTimerInfosEntry + (structpb.NullValue)(0), // 210: google.protobuf.NullValue + (*timestamppb.Timestamp)(nil), // 211: google.protobuf.Timestamp + (*durationpb.Duration)(nil), // 212: google.protobuf.Duration + (*emptypb.Empty)(nil), // 213: google.protobuf.Empty } var file_dex_proto_depIdxs = []int32{ 24, // 0: dex.Value.obj_value:type_name -> dex.EncodedObject - 209, // 1: dex.Value.null_value:type_name -> google.protobuf.NullValue + 210, // 1: dex.Value.null_value:type_name -> google.protobuf.NullValue 23, // 2: dex.AttributeWrite.value:type_name -> dex.Value 28, // 3: dex.AttributeWrite.index_config:type_name -> dex.IndexConfig 26, // 4: dex.AttributeWrite.sync_config:type_name -> dex.AttributeSyncConfig 23, // 5: dex.KV.value:type_name -> dex.Value 0, // 6: dex.IndexConfig.type:type_name -> dex.IndexType - 160, // 7: dex.Context.recovery_error:type_name -> dex.RecoveryErrorInfo + 161, // 7: dex.Context.recovery_error:type_name -> dex.RecoveryErrorInfo 23, // 8: dex.Context.last_heartbeat_value:type_name -> dex.Value 31, // 9: dex.StepOptions.wait_for_retry_policy:type_name -> dex.RetryPolicy 31, // 10: dex.StepOptions.execute_retry_policy:type_name -> dex.RetryPolicy @@ -14223,364 +14280,365 @@ var file_dex_proto_depIdxs = []int32{ 53, // 38: dex.ReadStreamResponse.message:type_name -> dex.StreamMessage 53, // 39: dex.ListStreamMessagesResponse.messages:type_name -> dex.StreamMessage 23, // 40: dex.StreamMessage.value:type_name -> dex.Value - 210, // 41: dex.StreamMessage.created_time:type_name -> google.protobuf.Timestamp + 211, // 41: dex.StreamMessage.created_time:type_name -> google.protobuf.Timestamp 7, // 42: dex.StopFlowRequest.stop_type:type_name -> dex.StopType 27, // 43: dex.GetAttributesResponse.attributes:type_name -> dex.KV 25, // 44: dex.SetAttributesRequest.attributes:type_name -> dex.AttributeWrite - 23, // 45: dex.LoadBlobsRequest.values:type_name -> dex.Value - 190, // 46: dex.LoadBlobsResponse.values:type_name -> dex.LoadBlobsResponse.ValuesEntry - 23, // 47: dex.StepCompletionOutput.completed_step_output:type_name -> dex.Value - 8, // 48: dex.FlowResult.flow_status:type_name -> dex.FlowStatus - 61, // 49: dex.FlowResult.results:type_name -> dex.StepCompletionOutput - 9, // 50: dex.FlowResult.error_type:type_name -> dex.FlowErrorType - 65, // 51: dex.SearchFlowsResponse.flow_runs:type_name -> dex.SearchFlowsResponseEntry - 27, // 52: dex.SearchFlowsResponseEntry.indexed_attributes:type_name -> dex.KV - 8, // 53: dex.SearchFlowsResponseEntry.flow_status:type_name -> dex.FlowStatus - 210, // 54: dex.SearchFlowsResponseEntry.start_time:type_name -> google.protobuf.Timestamp - 210, // 55: dex.SearchFlowsResponseEntry.close_time:type_name -> google.protobuf.Timestamp - 191, // 56: dex.SyncAttributeIndexRequest.attribute_indexes:type_name -> dex.SyncAttributeIndexRequest.AttributeIndexesEntry - 68, // 57: dex.GetFlowSummaryResponse.flow_execution_id:type_name -> dex.FlowExecutionID - 8, // 58: dex.GetFlowSummaryResponse.flow_status:type_name -> dex.FlowStatus - 210, // 59: dex.GetFlowSummaryResponse.start_time:type_name -> google.protobuf.Timestamp - 210, // 60: dex.GetFlowSummaryResponse.close_time:type_name -> google.protobuf.Timestamp - 83, // 61: dex.InternalAsyncStepInputSnapshot.method_options:type_name -> dex.StepMethodOptions - 120, // 62: dex.InternalAsyncStepInputSnapshot.wait_for_request:type_name -> dex.InvokeWaitForMethodRequest - 125, // 63: dex.InternalAsyncStepInputSnapshot.execute_request:type_name -> dex.InvokeExecuteMethodRequest - 83, // 64: dex.InternalLocalActivityInput.method_options:type_name -> dex.StepMethodOptions - 75, // 65: dex.GetHistoryEventsResponse.events:type_name -> dex.FlowHistoryEvent - 210, // 66: dex.FlowHistoryEvent.event_time:type_name -> google.protobuf.Timestamp - 77, // 67: dex.FlowHistoryEvent.flow_started_or_continued:type_name -> dex.FlowStartedOrContinuedHistoryEvent - 80, // 68: dex.FlowHistoryEvent.flow_closed:type_name -> dex.FlowClosedHistoryEvent - 89, // 69: dex.FlowHistoryEvent.step_wait_for_completed:type_name -> dex.StepWaitForCompletedEvent - 90, // 70: dex.FlowHistoryEvent.step_wait_for_failed:type_name -> dex.StepWaitForFailedEvent - 91, // 71: dex.FlowHistoryEvent.step_execute_completed:type_name -> dex.StepExecuteCompletedEvent - 92, // 72: dex.FlowHistoryEvent.step_execute_failed:type_name -> dex.StepExecuteFailedEvent - 93, // 73: dex.FlowHistoryEvent.rpc_execution_completed:type_name -> dex.RpcExecutionCompletedEvent - 94, // 74: dex.FlowHistoryEvent.channel_external_publish:type_name -> dex.ChannelExternalPublishEvent - 81, // 75: dex.FlowHistoryEvent.step_wait_for_pending:type_name -> dex.StepMethodPendingEvent - 81, // 76: dex.FlowHistoryEvent.step_execute_pending:type_name -> dex.StepMethodPendingEvent - 76, // 77: dex.FlowHistoryEvent.time_travel_fork:type_name -> dex.TimeTravelForkHistoryEvent - 95, // 78: dex.FlowHistoryEvent.channel_external_delete:type_name -> dex.ChannelExternalDeleteEvent - 68, // 79: dex.FlowStartedOrContinuedHistoryEvent.flow_execution_id:type_name -> dex.FlowExecutionID - 37, // 80: dex.FlowStartedOrContinuedHistoryEvent.flow_config:type_name -> dex.FlowConfig - 211, // 81: dex.FlowStartedOrContinuedHistoryEvent.flow_timeout:type_name -> google.protobuf.Duration - 6, // 82: dex.FlowStartedOrContinuedHistoryEvent.flow_timeout_policy:type_name -> dex.FlowTimeoutPolicy - 34, // 83: dex.FlowStartedOrContinuedHistoryEvent.timeout_handler_options:type_name -> dex.FlowTimeoutHandlerOptions - 78, // 84: dex.FlowStartedOrContinuedHistoryEvent.initial_start:type_name -> dex.FlowInitialStart - 79, // 85: dex.FlowStartedOrContinuedHistoryEvent.continued_start:type_name -> dex.FlowContinuedStart - 23, // 86: dex.FlowInitialStart.step_input:type_name -> dex.Value - 33, // 87: dex.FlowInitialStart.step_options:type_name -> dex.StepOptions - 27, // 88: dex.FlowInitialStart.initial_attributes:type_name -> dex.KV - 132, // 89: dex.FlowContinuedStart.steps_to_start:type_name -> dex.StepMovement - 148, // 90: dex.FlowContinuedStart.steps_to_resume:type_name -> dex.StepExecutionResumeInfo - 192, // 91: dex.FlowContinuedStart.pending_channel_messages:type_name -> dex.FlowContinuedStart.PendingChannelMessagesEntry - 27, // 92: dex.FlowContinuedStart.attributes:type_name -> dex.KV - 61, // 93: dex.FlowContinuedStart.completed_steps:type_name -> dex.StepCompletionOutput - 8, // 94: dex.FlowClosedHistoryEvent.flow_status:type_name -> dex.FlowStatus - 61, // 95: dex.FlowClosedHistoryEvent.results:type_name -> dex.StepCompletionOutput - 9, // 96: dex.FlowClosedHistoryEvent.error_type:type_name -> dex.FlowErrorType - 84, // 97: dex.StepMethodPendingEvent.input:type_name -> dex.StepMethodEventInput - 85, // 98: dex.StepMethodPendingEvent.context:type_name -> dex.StepMethodEventContext - 10, // 99: dex.StepMethodPendingEvent.phase:type_name -> dex.PendingStepMethodPhase - 114, // 100: dex.StepMethodFailure.details:type_name -> dex.ServiceErrorResponse - 31, // 101: dex.StepMethodOptions.retry_policy:type_name -> dex.RetryPolicy - 23, // 102: dex.StepMethodEventInput.step_input:type_name -> dex.Value - 141, // 103: dex.StepMethodEventInput.condition_results:type_name -> dex.ConditionResults - 27, // 104: dex.StepMethodEventInput.attributes:type_name -> dex.KV - 27, // 105: dex.StepMethodEventInput.step_execution_locals:type_name -> dex.KV - 5, // 106: dex.StepMethodEventContext.durability:type_name -> dex.StepDurability - 210, // 107: dex.StepMethodEventContext.started_time:type_name -> google.protobuf.Timestamp - 211, // 108: dex.StepMethodEventContext.duration:type_name -> google.protobuf.Duration - 83, // 109: dex.StepMethodEventContext.method_options:type_name -> dex.StepMethodOptions - 82, // 110: dex.StepMethodEventContext.last_failure_info:type_name -> dex.StepMethodFailure - 134, // 111: dex.StepWaitForCompletedOutput.wait_for_condition:type_name -> dex.WaitingCondition - 25, // 112: dex.StepWaitForCompletedOutput.upsert_attributes:type_name -> dex.AttributeWrite - 43, // 113: dex.StepWaitForCompletedOutput.publish_to_channel:type_name -> dex.ChannelMessage - 27, // 114: dex.StepWaitForCompletedOutput.record_events:type_name -> dex.KV - 27, // 115: dex.StepWaitForCompletedOutput.upsert_step_execution_locals:type_name -> dex.KV - 47, // 116: dex.StepWaitForCompletedOutput.delete_from_channel:type_name -> dex.ChannelMessageDeletion - 130, // 117: dex.StepExecuteCompletedOutput.step_decision:type_name -> dex.StepDecision - 25, // 118: dex.StepExecuteCompletedOutput.upsert_attributes:type_name -> dex.AttributeWrite - 43, // 119: dex.StepExecuteCompletedOutput.publish_to_channel:type_name -> dex.ChannelMessage - 27, // 120: dex.StepExecuteCompletedOutput.record_events:type_name -> dex.KV - 27, // 121: dex.StepExecuteCompletedOutput.upsert_step_execution_locals:type_name -> dex.KV - 47, // 122: dex.StepExecuteCompletedOutput.delete_from_channel:type_name -> dex.ChannelMessageDeletion - 82, // 123: dex.StepMethodFailedOutput.failure:type_name -> dex.StepMethodFailure - 84, // 124: dex.StepWaitForCompletedEvent.input:type_name -> dex.StepMethodEventInput - 86, // 125: dex.StepWaitForCompletedEvent.output:type_name -> dex.StepWaitForCompletedOutput - 85, // 126: dex.StepWaitForCompletedEvent.context:type_name -> dex.StepMethodEventContext - 84, // 127: dex.StepWaitForFailedEvent.input:type_name -> dex.StepMethodEventInput - 88, // 128: dex.StepWaitForFailedEvent.output:type_name -> dex.StepMethodFailedOutput - 85, // 129: dex.StepWaitForFailedEvent.context:type_name -> dex.StepMethodEventContext - 84, // 130: dex.StepExecuteCompletedEvent.input:type_name -> dex.StepMethodEventInput - 87, // 131: dex.StepExecuteCompletedEvent.output:type_name -> dex.StepExecuteCompletedOutput - 85, // 132: dex.StepExecuteCompletedEvent.context:type_name -> dex.StepMethodEventContext - 84, // 133: dex.StepExecuteFailedEvent.input:type_name -> dex.StepMethodEventInput - 88, // 134: dex.StepExecuteFailedEvent.output:type_name -> dex.StepMethodFailedOutput - 85, // 135: dex.StepExecuteFailedEvent.context:type_name -> dex.StepMethodEventContext - 23, // 136: dex.RpcExecutionCompletedEvent.input:type_name -> dex.Value - 23, // 137: dex.RpcExecutionCompletedEvent.output:type_name -> dex.Value - 130, // 138: dex.RpcExecutionCompletedEvent.step_decision:type_name -> dex.StepDecision - 25, // 139: dex.RpcExecutionCompletedEvent.upsert_attributes:type_name -> dex.AttributeWrite - 27, // 140: dex.RpcExecutionCompletedEvent.record_events:type_name -> dex.KV - 43, // 141: dex.RpcExecutionCompletedEvent.publish_to_channel:type_name -> dex.ChannelMessage - 47, // 142: dex.RpcExecutionCompletedEvent.delete_from_channel:type_name -> dex.ChannelMessageDeletion - 43, // 143: dex.ChannelExternalPublishEvent.messages:type_name -> dex.ChannelMessage - 47, // 144: dex.ChannelExternalDeleteEvent.messages:type_name -> dex.ChannelMessageDeletion - 8, // 145: dex.WaitForHistoryEventResponse.flow_status:type_name -> dex.FlowStatus - 11, // 146: dex.ActiveStepExecutionState.phase:type_name -> dex.ActiveStepPhase - 132, // 147: dex.ActiveStepExecutionState.movement:type_name -> dex.StepMovement - 135, // 148: dex.ActiveStepExecutionState.waiting_condition:type_name -> dex.WaitingConditionState - 147, // 149: dex.ActiveStepExecutionState.completed_conditions:type_name -> dex.StepExecutionCompletedConditions - 27, // 150: dex.ActiveStepExecutionState.step_execution_locals:type_name -> dex.KV - 183, // 151: dex.ActiveStepExecutionState.timers:type_name -> dex.TimerInfo - 82, // 152: dex.ActiveStepExecutionState.last_failure_info:type_name -> dex.StepMethodFailure - 37, // 153: dex.GetFlowStateResponse.flow_config:type_name -> dex.FlowConfig - 27, // 154: dex.GetFlowStateResponse.attributes:type_name -> dex.KV - 98, // 155: dex.GetFlowStateResponse.active_step_executions:type_name -> dex.ActiveStepExecutionState - 132, // 156: dex.GetFlowStateResponse.queued_steps:type_name -> dex.StepMovement - 193, // 157: dex.GetFlowStateResponse.pending_channel_messages:type_name -> dex.GetFlowStateResponse.PendingChannelMessagesEntry - 61, // 158: dex.GetFlowStateResponse.completed_steps:type_name -> dex.StepCompletionOutput - 12, // 159: dex.ResetFlowRequest.reset_type:type_name -> dex.FlowResetType - 13, // 160: dex.ResetFlowRequest.step_method:type_name -> dex.FlowResetStepMethod - 23, // 161: dex.InvokeRPCRequest.input:type_name -> dex.Value - 23, // 162: dex.InvokeRPCResponse.output:type_name -> dex.Value - 37, // 163: dex.UpdateFlowConfigRequest.flow_config:type_name -> dex.FlowConfig - 111, // 164: dex.WaitForAttributeRequest.match:type_name -> dex.AttributeMatch - 23, // 165: dex.WaitForAttributeResponse.matched_value:type_name -> dex.Value - 14, // 166: dex.AttributeMatch.operator:type_name -> dex.AttributeMatchOperator - 23, // 167: dex.AttributeMatch.operand:type_name -> dex.Value - 15, // 168: dex.ServiceErrorResponse.sub_status:type_name -> dex.ErrorSubStatus - 117, // 169: dex.InternalActivityError.worker_error:type_name -> dex.InternalWorkerError - 116, // 170: dex.InternalFlowError.activity_error:type_name -> dex.InternalActivityError - 29, // 171: dex.InvokeWaitForMethodRequest.context:type_name -> dex.Context - 23, // 172: dex.InvokeWaitForMethodRequest.step_input:type_name -> dex.Value - 27, // 173: dex.InvokeWaitForMethodRequest.attributes:type_name -> dex.KV - 194, // 174: dex.InvokeWaitForMethodRequest.channel_infos:type_name -> dex.InvokeWaitForMethodRequest.ChannelInfosEntry - 195, // 175: dex.InvokeWaitForMethodRequest.loaded_channel_messages:type_name -> dex.InvokeWaitForMethodRequest.LoadedChannelMessagesEntry - 30, // 176: dex.InvokeWaitForMethodResponse.local_activity_metadata:type_name -> dex.LocalActivityMetadata - 25, // 177: dex.InvokeWaitForMethodResponse.upsert_attributes:type_name -> dex.AttributeWrite - 134, // 178: dex.InvokeWaitForMethodResponse.waiting_condition:type_name -> dex.WaitingCondition - 27, // 179: dex.InvokeWaitForMethodResponse.upsert_step_exe_locals:type_name -> dex.KV - 27, // 180: dex.InvokeWaitForMethodResponse.record_events:type_name -> dex.KV - 43, // 181: dex.InvokeWaitForMethodResponse.publish_to_channel:type_name -> dex.ChannelMessage - 47, // 182: dex.InvokeWaitForMethodResponse.delete_from_channel:type_name -> dex.ChannelMessageDeletion - 23, // 183: dex.StepMethodHeartbeat.value:type_name -> dex.Value - 23, // 184: dex.StepStreamWrite.value:type_name -> dex.Value - 122, // 185: dex.InvokeWaitForMethodOutput.heartbeat:type_name -> dex.StepMethodHeartbeat - 123, // 186: dex.InvokeWaitForMethodOutput.stream_write:type_name -> dex.StepStreamWrite - 121, // 187: dex.InvokeWaitForMethodOutput.result:type_name -> dex.InvokeWaitForMethodResponse - 29, // 188: dex.InvokeExecuteMethodRequest.context:type_name -> dex.Context - 23, // 189: dex.InvokeExecuteMethodRequest.step_input:type_name -> dex.Value - 27, // 190: dex.InvokeExecuteMethodRequest.attributes:type_name -> dex.KV - 27, // 191: dex.InvokeExecuteMethodRequest.step_exe_locals:type_name -> dex.KV - 141, // 192: dex.InvokeExecuteMethodRequest.condition_results:type_name -> dex.ConditionResults - 196, // 193: dex.InvokeExecuteMethodRequest.channel_infos:type_name -> dex.InvokeExecuteMethodRequest.ChannelInfosEntry - 197, // 194: dex.InvokeExecuteMethodRequest.loaded_channel_messages:type_name -> dex.InvokeExecuteMethodRequest.LoadedChannelMessagesEntry - 30, // 195: dex.InvokeExecuteMethodResponse.local_activity_metadata:type_name -> dex.LocalActivityMetadata - 130, // 196: dex.InvokeExecuteMethodResponse.step_decision:type_name -> dex.StepDecision - 25, // 197: dex.InvokeExecuteMethodResponse.upsert_attributes:type_name -> dex.AttributeWrite - 27, // 198: dex.InvokeExecuteMethodResponse.record_events:type_name -> dex.KV - 27, // 199: dex.InvokeExecuteMethodResponse.upsert_step_exe_locals:type_name -> dex.KV - 43, // 200: dex.InvokeExecuteMethodResponse.publish_to_channel:type_name -> dex.ChannelMessage - 47, // 201: dex.InvokeExecuteMethodResponse.delete_from_channel:type_name -> dex.ChannelMessageDeletion - 122, // 202: dex.InvokeExecuteMethodOutput.heartbeat:type_name -> dex.StepMethodHeartbeat - 123, // 203: dex.InvokeExecuteMethodOutput.stream_write:type_name -> dex.StepStreamWrite - 126, // 204: dex.InvokeExecuteMethodOutput.result:type_name -> dex.InvokeExecuteMethodResponse - 29, // 205: dex.InvokeWorkerRPCRequest.context:type_name -> dex.Context - 23, // 206: dex.InvokeWorkerRPCRequest.input:type_name -> dex.Value - 27, // 207: dex.InvokeWorkerRPCRequest.attributes:type_name -> dex.KV - 198, // 208: dex.InvokeWorkerRPCRequest.channel_infos:type_name -> dex.InvokeWorkerRPCRequest.ChannelInfosEntry - 199, // 209: dex.InvokeWorkerRPCRequest.loaded_channel_messages:type_name -> dex.InvokeWorkerRPCRequest.LoadedChannelMessagesEntry - 23, // 210: dex.InvokeWorkerRPCResponse.output:type_name -> dex.Value - 130, // 211: dex.InvokeWorkerRPCResponse.step_decision:type_name -> dex.StepDecision - 25, // 212: dex.InvokeWorkerRPCResponse.upsert_attributes:type_name -> dex.AttributeWrite - 27, // 213: dex.InvokeWorkerRPCResponse.record_events:type_name -> dex.KV - 47, // 214: dex.InvokeWorkerRPCResponse.delete_from_channel:type_name -> dex.ChannelMessageDeletion - 43, // 215: dex.InvokeWorkerRPCResponse.publish_to_channel:type_name -> dex.ChannelMessage - 132, // 216: dex.StepDecision.next_steps:type_name -> dex.StepMovement - 131, // 217: dex.StepDecision.close_decision:type_name -> dex.CloseDecision - 16, // 218: dex.CloseDecision.close_decision_type:type_name -> dex.CloseDecisionType - 23, // 219: dex.CloseDecision.close_input:type_name -> dex.Value - 23, // 220: dex.StepMovement.step_input:type_name -> dex.Value - 33, // 221: dex.StepMovement.step_options:type_name -> dex.StepOptions - 160, // 222: dex.StepMovement.recovery_error_internal_only:type_name -> dex.RecoveryErrorInfo - 17, // 223: dex.WaitingCondition.waiting_condition_type:type_name -> dex.WaitingConditionType - 139, // 224: dex.WaitingCondition.timer_conditions:type_name -> dex.TimerCondition - 140, // 225: dex.WaitingCondition.channel_conditions:type_name -> dex.ChannelCondition - 133, // 226: dex.WaitingCondition.condition_combinations:type_name -> dex.ConditionCombination - 137, // 227: dex.WaitingCondition.sub_flow_conditions:type_name -> dex.SubFlowCondition - 17, // 228: dex.WaitingConditionState.waiting_condition_type:type_name -> dex.WaitingConditionType - 139, // 229: dex.WaitingConditionState.timer_conditions:type_name -> dex.TimerCondition - 140, // 230: dex.WaitingConditionState.channel_conditions:type_name -> dex.ChannelCondition - 133, // 231: dex.WaitingConditionState.condition_combinations:type_name -> dex.ConditionCombination - 138, // 232: dex.WaitingConditionState.sub_flow_conditions:type_name -> dex.SubFlowConditionState - 18, // 233: dex.SubFlowOptions.reuse_policy:type_name -> dex.SubFlowReusePolicy - 32, // 234: dex.SubFlowOptions.retry_policy:type_name -> dex.FlowRetryPolicy - 25, // 235: dex.SubFlowOptions.attributes:type_name -> dex.AttributeWrite - 37, // 236: dex.SubFlowOptions.flow_config_override:type_name -> dex.FlowConfig - 6, // 237: dex.SubFlowOptions.flow_timeout_policy:type_name -> dex.FlowTimeoutPolicy - 34, // 238: dex.SubFlowOptions.timeout_handler_options:type_name -> dex.FlowTimeoutHandlerOptions - 23, // 239: dex.SubFlowCondition.step_input:type_name -> dex.Value - 33, // 240: dex.SubFlowCondition.step_options:type_name -> dex.StepOptions - 136, // 241: dex.SubFlowCondition.options:type_name -> dex.SubFlowOptions - 143, // 242: dex.ConditionResults.channel_results:type_name -> dex.ChannelResult - 142, // 243: dex.ConditionResults.timer_results:type_name -> dex.TimerResult - 62, // 244: dex.ConditionResults.sub_flow_results:type_name -> dex.FlowResult - 19, // 245: dex.TimerResult.condition_status:type_name -> dex.ConditionStatus - 19, // 246: dex.ChannelResult.condition_status:type_name -> dex.ConditionStatus - 23, // 247: dex.ChannelResult.values:type_name -> dex.Value - 43, // 248: dex.ChannelValues.messages:type_name -> dex.ChannelMessage - 200, // 249: dex.StepExecutionCompletedConditions.completed_timer_conditions:type_name -> dex.StepExecutionCompletedConditions.CompletedTimerConditionsEntry - 201, // 250: dex.StepExecutionCompletedConditions.completed_sub_flow_results:type_name -> dex.StepExecutionCompletedConditions.CompletedSubFlowResultsEntry - 132, // 251: dex.StepExecutionResumeInfo.step:type_name -> dex.StepMovement - 147, // 252: dex.StepExecutionResumeInfo.completed_conditions:type_name -> dex.StepExecutionCompletedConditions - 135, // 253: dex.StepExecutionResumeInfo.waiting_condition:type_name -> dex.WaitingConditionState - 27, // 254: dex.StepExecutionResumeInfo.step_exe_locals:type_name -> dex.KV - 202, // 255: dex.StepExecutionCounterInfo.step_type_started_count:type_name -> dex.StepExecutionCounterInfo.StepTypeStartedCountEntry - 203, // 256: dex.StepExecutionCounterInfo.step_type_currently_executing_count:type_name -> dex.StepExecutionCounterInfo.StepTypeCurrentlyExecutingCountEntry - 204, // 257: dex.StepExecutionCounterInfo.step_active_execution_nums:type_name -> dex.StepExecutionCounterInfo.StepActiveExecutionNumsEntry - 132, // 258: dex.ContinueAsNewDump.steps_to_start_from_beginning:type_name -> dex.StepMovement - 148, // 259: dex.ContinueAsNewDump.step_executions_to_resume:type_name -> dex.StepExecutionResumeInfo - 205, // 260: dex.ContinueAsNewDump.channel_received:type_name -> dex.ContinueAsNewDump.ChannelReceivedEntry - 149, // 261: dex.ContinueAsNewDump.counter_info:type_name -> dex.StepExecutionCounterInfo - 61, // 262: dex.ContinueAsNewDump.step_outputs:type_name -> dex.StepCompletionOutput - 150, // 263: dex.ContinueAsNewDump.stale_skip_timers:type_name -> dex.StaleSkipTimer - 27, // 264: dex.ContinueAsNewDump.attributes:type_name -> dex.KV - 169, // 265: dex.ContinueAsNewDump.pending_attribute_sync_items:type_name -> dex.AttributeSyncItem - 6, // 266: dex.InterpreterWorkflowInput.flow_timeout_policy:type_name -> dex.FlowTimeoutPolicy - 23, // 267: dex.InterpreterWorkflowInput.step_input:type_name -> dex.Value - 33, // 268: dex.InterpreterWorkflowInput.step_options:type_name -> dex.StepOptions - 25, // 269: dex.InterpreterWorkflowInput.init_attributes:type_name -> dex.AttributeWrite - 37, // 270: dex.InterpreterWorkflowInput.config:type_name -> dex.FlowConfig - 152, // 271: dex.InterpreterWorkflowInput.continue_as_new_input:type_name -> dex.ContinueAsNewInput - 34, // 272: dex.InterpreterWorkflowInput.timeout_handler_options:type_name -> dex.FlowTimeoutHandlerOptions - 61, // 273: dex.InterpreterWorkflowOutput.step_completion_outputs:type_name -> dex.StepCompletionOutput - 39, // 274: dex.InvokeWaitForMethodActivityInput.worker_target:type_name -> dex.WorkerTarget - 120, // 275: dex.InvokeWaitForMethodActivityInput.request:type_name -> dex.InvokeWaitForMethodRequest - 121, // 276: dex.InvokeWaitForMethodActivityOutput.response:type_name -> dex.InvokeWaitForMethodResponse - 39, // 277: dex.InvokeExecuteMethodActivityInput.worker_target:type_name -> dex.WorkerTarget - 125, // 278: dex.InvokeExecuteMethodActivityInput.request:type_name -> dex.InvokeExecuteMethodRequest - 30, // 279: dex.InternalLocalStepActivityFailure.local_activity_metadata:type_name -> dex.LocalActivityMetadata - 83, // 280: dex.InternalLocalStepActivityFailure.method_options:type_name -> dex.StepMethodOptions - 116, // 281: dex.InternalLocalStepActivityFailure.activity_error:type_name -> dex.InternalActivityError - 126, // 282: dex.InvokeExecuteMethodActivityOutput.response:type_name -> dex.InvokeExecuteMethodResponse - 144, // 283: dex.DumpFlowForContinueAsNewActivityInput.request:type_name -> dex.ContinueAsNewDumpRequest - 145, // 284: dex.DumpFlowForContinueAsNewActivityOutput.response:type_name -> dex.ContinueAsNewDumpResponse - 182, // 285: dex.InvokeWorkerRPCActivityInput.rpc_prep:type_name -> dex.PrepareRpcQueryResponse - 103, // 286: dex.InvokeWorkerRPCActivityInput.request:type_name -> dex.InvokeRPCRequest - 129, // 287: dex.InvokeWorkerRPCActivityOutput.response:type_name -> dex.InvokeWorkerRPCResponse - 23, // 288: dex.AttributeSyncItem.value:type_name -> dex.Value - 169, // 289: dex.SyncAttributeBatchActivityInput.items:type_name -> dex.AttributeSyncItem - 137, // 290: dex.StartSubFlowActivityInput.condition:type_name -> dex.SubFlowCondition - 37, // 291: dex.StartSubFlowActivityInput.parent_flow_config:type_name -> dex.FlowConfig - 62, // 292: dex.StartSubFlowActivityOutput.immediate_flow_result:type_name -> dex.FlowResult - 62, // 293: dex.SubFlowCompletionSignalRequest.flow_result:type_name -> dex.FlowResult - 173, // 294: dex.ReportSubFlowCompletionActivityInput.request:type_name -> dex.SubFlowCompletionSignalRequest - 22, // 295: dex.ReportSubFlowCompletionActivityOutput.status:type_name -> dex.SubFlowCompletionDeliveryStatus - 23, // 296: dex.ExecuteRpcSignalRequest.rpc_input:type_name -> dex.Value - 23, // 297: dex.ExecuteRpcSignalRequest.rpc_output:type_name -> dex.Value - 25, // 298: dex.ExecuteRpcSignalRequest.upsert_attributes:type_name -> dex.AttributeWrite - 130, // 299: dex.ExecuteRpcSignalRequest.step_decision:type_name -> dex.StepDecision - 27, // 300: dex.ExecuteRpcSignalRequest.record_events:type_name -> dex.KV - 43, // 301: dex.ExecuteRpcSignalRequest.publish_to_channel:type_name -> dex.ChannelMessage - 47, // 302: dex.ExecuteRpcSignalRequest.delete_from_channel:type_name -> dex.ChannelMessageDeletion - 7, // 303: dex.StopFlowSignalRequest.stop_type:type_name -> dex.StopType - 27, // 304: dex.GetAttributesQueryResponse.attributes:type_name -> dex.KV - 27, // 305: dex.PrepareRpcQueryResponse.attributes:type_name -> dex.KV - 39, // 306: dex.PrepareRpcQueryResponse.worker_target:type_name -> dex.WorkerTarget - 206, // 307: dex.PrepareRpcQueryResponse.channel_infos:type_name -> dex.PrepareRpcQueryResponse.ChannelInfosEntry - 207, // 308: dex.PrepareRpcQueryResponse.loaded_channel_messages:type_name -> dex.PrepareRpcQueryResponse.LoadedChannelMessagesEntry - 20, // 309: dex.TimerInfo.status:type_name -> dex.InternalTimerStatus - 183, // 310: dex.TimerInfoList.timers:type_name -> dex.TimerInfo - 208, // 311: dex.GetCurrentTimerInfosQueryResponse.step_execution_current_timer_infos:type_name -> dex.GetCurrentTimerInfosQueryResponse.StepExecutionCurrentTimerInfosEntry - 183, // 312: dex.GetScheduledGreedyTimerTimesQueryResponse.pending_scheduled:type_name -> dex.TimerInfo - 37, // 313: dex.DebugDumpResponse.config:type_name -> dex.FlowConfig - 151, // 314: dex.DebugDumpResponse.snapshot:type_name -> dex.ContinueAsNewDump - 98, // 315: dex.DebugDumpResponse.active_step_executions:type_name -> dex.ActiveStepExecutionState - 104, // 316: dex.InvokeRpcUpdateResult.response:type_name -> dex.InvokeRPCResponse - 23, // 317: dex.LoadBlobsResponse.ValuesEntry.value:type_name -> dex.Value - 0, // 318: dex.SyncAttributeIndexRequest.AttributeIndexesEntry.value:type_name -> dex.IndexType - 146, // 319: dex.FlowContinuedStart.PendingChannelMessagesEntry.value:type_name -> dex.ChannelValues - 146, // 320: dex.GetFlowStateResponse.PendingChannelMessagesEntry.value:type_name -> dex.ChannelValues - 119, // 321: dex.InvokeWaitForMethodRequest.ChannelInfosEntry.value:type_name -> dex.ChannelInfo - 146, // 322: dex.InvokeWaitForMethodRequest.LoadedChannelMessagesEntry.value:type_name -> dex.ChannelValues - 119, // 323: dex.InvokeExecuteMethodRequest.ChannelInfosEntry.value:type_name -> dex.ChannelInfo - 146, // 324: dex.InvokeExecuteMethodRequest.LoadedChannelMessagesEntry.value:type_name -> dex.ChannelValues - 119, // 325: dex.InvokeWorkerRPCRequest.ChannelInfosEntry.value:type_name -> dex.ChannelInfo - 146, // 326: dex.InvokeWorkerRPCRequest.LoadedChannelMessagesEntry.value:type_name -> dex.ChannelValues - 20, // 327: dex.StepExecutionCompletedConditions.CompletedTimerConditionsEntry.value:type_name -> dex.InternalTimerStatus - 62, // 328: dex.StepExecutionCompletedConditions.CompletedSubFlowResultsEntry.value:type_name -> dex.FlowResult - 189, // 329: dex.StepExecutionCounterInfo.StepActiveExecutionNumsEntry.value:type_name -> dex.StepExecutionNumbers - 146, // 330: dex.ContinueAsNewDump.ChannelReceivedEntry.value:type_name -> dex.ChannelValues - 119, // 331: dex.PrepareRpcQueryResponse.ChannelInfosEntry.value:type_name -> dex.ChannelInfo - 146, // 332: dex.PrepareRpcQueryResponse.LoadedChannelMessagesEntry.value:type_name -> dex.ChannelValues - 184, // 333: dex.GetCurrentTimerInfosQueryResponse.StepExecutionCurrentTimerInfosEntry.value:type_name -> dex.TimerInfoList - 40, // 334: dex.FlowService.StartFlow:input_type -> dex.StartFlowRequest - 42, // 335: dex.FlowService.PublishToChannel:input_type -> dex.PublishToChannelRequest - 44, // 336: dex.FlowService.GetChannelMessages:input_type -> dex.GetChannelMessagesRequest - 46, // 337: dex.FlowService.DeleteChannelMessage:input_type -> dex.DeleteChannelMessageRequest - 48, // 338: dex.FlowService.WriteStream:input_type -> dex.WriteStreamRequest - 49, // 339: dex.FlowService.ReadStream:input_type -> dex.ReadStreamRequest - 51, // 340: dex.FlowService.ListStreamMessages:input_type -> dex.ListStreamMessagesRequest - 54, // 341: dex.FlowService.StopFlow:input_type -> dex.StopFlowRequest - 55, // 342: dex.FlowService.GetAttributes:input_type -> dex.GetAttributesRequest - 57, // 343: dex.FlowService.SetAttributes:input_type -> dex.SetAttributesRequest - 58, // 344: dex.FlowService.LoadBlobs:input_type -> dex.LoadBlobsRequest - 60, // 345: dex.FlowService.WaitForFlow:input_type -> dex.WaitForFlowRequest - 63, // 346: dex.FlowService.SearchFlows:input_type -> dex.SearchFlowsRequest - 66, // 347: dex.FlowService.SyncAttributeIndexes:input_type -> dex.SyncAttributeIndexRequest - 69, // 348: dex.FlowService.GetFlowSummary:input_type -> dex.GetFlowSummaryRequest - 73, // 349: dex.FlowService.GetHistoryEvents:input_type -> dex.GetHistoryEventsRequest - 96, // 350: dex.FlowService.WaitForHistoryEvent:input_type -> dex.WaitForHistoryEventRequest - 99, // 351: dex.FlowService.GetFlowState:input_type -> dex.GetFlowStateRequest - 101, // 352: dex.FlowService.ResetFlow:input_type -> dex.ResetFlowRequest - 103, // 353: dex.FlowService.InvokeRPC:input_type -> dex.InvokeRPCRequest - 105, // 354: dex.FlowService.SkipTimer:input_type -> dex.SkipTimerRequest - 106, // 355: dex.FlowService.UpdateFlowConfig:input_type -> dex.UpdateFlowConfigRequest - 107, // 356: dex.FlowService.WaitForStepCompletion:input_type -> dex.WaitForStepCompletionRequest - 109, // 357: dex.FlowService.WaitForAttribute:input_type -> dex.WaitForAttributeRequest - 112, // 358: dex.FlowService.TriggerContinueAsNew:input_type -> dex.TriggerContinueAsNewRequest - 212, // 359: dex.FlowService.HealthCheck:input_type -> google.protobuf.Empty - 120, // 360: dex.WorkerService.InvokeWaitForMethod:input_type -> dex.InvokeWaitForMethodRequest - 125, // 361: dex.WorkerService.InvokeExecuteMethod:input_type -> dex.InvokeExecuteMethodRequest - 128, // 362: dex.WorkerService.InvokeWorkerRPC:input_type -> dex.InvokeWorkerRPCRequest - 144, // 363: dex.InternalService.DumpFlowForContinueAsNew:input_type -> dex.ContinueAsNewDumpRequest - 41, // 364: dex.FlowService.StartFlow:output_type -> dex.StartFlowResponse - 212, // 365: dex.FlowService.PublishToChannel:output_type -> google.protobuf.Empty - 45, // 366: dex.FlowService.GetChannelMessages:output_type -> dex.GetChannelMessagesResponse - 212, // 367: dex.FlowService.DeleteChannelMessage:output_type -> google.protobuf.Empty - 212, // 368: dex.FlowService.WriteStream:output_type -> google.protobuf.Empty - 50, // 369: dex.FlowService.ReadStream:output_type -> dex.ReadStreamResponse - 52, // 370: dex.FlowService.ListStreamMessages:output_type -> dex.ListStreamMessagesResponse - 212, // 371: dex.FlowService.StopFlow:output_type -> google.protobuf.Empty - 56, // 372: dex.FlowService.GetAttributes:output_type -> dex.GetAttributesResponse - 212, // 373: dex.FlowService.SetAttributes:output_type -> google.protobuf.Empty - 59, // 374: dex.FlowService.LoadBlobs:output_type -> dex.LoadBlobsResponse - 62, // 375: dex.FlowService.WaitForFlow:output_type -> dex.FlowResult - 64, // 376: dex.FlowService.SearchFlows:output_type -> dex.SearchFlowsResponse - 67, // 377: dex.FlowService.SyncAttributeIndexes:output_type -> dex.SyncAttributeIndexResponse - 70, // 378: dex.FlowService.GetFlowSummary:output_type -> dex.GetFlowSummaryResponse - 74, // 379: dex.FlowService.GetHistoryEvents:output_type -> dex.GetHistoryEventsResponse - 97, // 380: dex.FlowService.WaitForHistoryEvent:output_type -> dex.WaitForHistoryEventResponse - 100, // 381: dex.FlowService.GetFlowState:output_type -> dex.GetFlowStateResponse - 102, // 382: dex.FlowService.ResetFlow:output_type -> dex.ResetFlowResponse - 104, // 383: dex.FlowService.InvokeRPC:output_type -> dex.InvokeRPCResponse - 212, // 384: dex.FlowService.SkipTimer:output_type -> google.protobuf.Empty - 212, // 385: dex.FlowService.UpdateFlowConfig:output_type -> google.protobuf.Empty - 108, // 386: dex.FlowService.WaitForStepCompletion:output_type -> dex.WaitForStepCompletionResponse - 110, // 387: dex.FlowService.WaitForAttribute:output_type -> dex.WaitForAttributeResponse - 212, // 388: dex.FlowService.TriggerContinueAsNew:output_type -> google.protobuf.Empty - 113, // 389: dex.FlowService.HealthCheck:output_type -> dex.HealthInfo - 124, // 390: dex.WorkerService.InvokeWaitForMethod:output_type -> dex.InvokeWaitForMethodOutput - 127, // 391: dex.WorkerService.InvokeExecuteMethod:output_type -> dex.InvokeExecuteMethodOutput - 129, // 392: dex.WorkerService.InvokeWorkerRPC:output_type -> dex.InvokeWorkerRPCResponse - 145, // 393: dex.InternalService.DumpFlowForContinueAsNew:output_type -> dex.ContinueAsNewDumpResponse - 364, // [364:394] is the sub-list for method output_type - 334, // [334:364] is the sub-list for method input_type - 334, // [334:334] is the sub-list for extension type_name - 334, // [334:334] is the sub-list for extension extendee - 0, // [0:334] is the sub-list for field type_name + 23, // 45: dex.LoadBlobRequestEntry.blob_value:type_name -> dex.Value + 58, // 46: dex.LoadBlobsRequest.entries:type_name -> dex.LoadBlobRequestEntry + 191, // 47: dex.LoadBlobsResponse.values:type_name -> dex.LoadBlobsResponse.ValuesEntry + 23, // 48: dex.StepCompletionOutput.completed_step_output:type_name -> dex.Value + 8, // 49: dex.FlowResult.flow_status:type_name -> dex.FlowStatus + 62, // 50: dex.FlowResult.results:type_name -> dex.StepCompletionOutput + 9, // 51: dex.FlowResult.error_type:type_name -> dex.FlowErrorType + 66, // 52: dex.SearchFlowsResponse.flow_runs:type_name -> dex.SearchFlowsResponseEntry + 27, // 53: dex.SearchFlowsResponseEntry.indexed_attributes:type_name -> dex.KV + 8, // 54: dex.SearchFlowsResponseEntry.flow_status:type_name -> dex.FlowStatus + 211, // 55: dex.SearchFlowsResponseEntry.start_time:type_name -> google.protobuf.Timestamp + 211, // 56: dex.SearchFlowsResponseEntry.close_time:type_name -> google.protobuf.Timestamp + 192, // 57: dex.SyncAttributeIndexRequest.attribute_indexes:type_name -> dex.SyncAttributeIndexRequest.AttributeIndexesEntry + 69, // 58: dex.GetFlowSummaryResponse.flow_execution_id:type_name -> dex.FlowExecutionID + 8, // 59: dex.GetFlowSummaryResponse.flow_status:type_name -> dex.FlowStatus + 211, // 60: dex.GetFlowSummaryResponse.start_time:type_name -> google.protobuf.Timestamp + 211, // 61: dex.GetFlowSummaryResponse.close_time:type_name -> google.protobuf.Timestamp + 84, // 62: dex.InternalAsyncStepInputSnapshot.method_options:type_name -> dex.StepMethodOptions + 121, // 63: dex.InternalAsyncStepInputSnapshot.wait_for_request:type_name -> dex.InvokeWaitForMethodRequest + 126, // 64: dex.InternalAsyncStepInputSnapshot.execute_request:type_name -> dex.InvokeExecuteMethodRequest + 84, // 65: dex.InternalLocalActivityInput.method_options:type_name -> dex.StepMethodOptions + 76, // 66: dex.GetHistoryEventsResponse.events:type_name -> dex.FlowHistoryEvent + 211, // 67: dex.FlowHistoryEvent.event_time:type_name -> google.protobuf.Timestamp + 78, // 68: dex.FlowHistoryEvent.flow_started_or_continued:type_name -> dex.FlowStartedOrContinuedHistoryEvent + 81, // 69: dex.FlowHistoryEvent.flow_closed:type_name -> dex.FlowClosedHistoryEvent + 90, // 70: dex.FlowHistoryEvent.step_wait_for_completed:type_name -> dex.StepWaitForCompletedEvent + 91, // 71: dex.FlowHistoryEvent.step_wait_for_failed:type_name -> dex.StepWaitForFailedEvent + 92, // 72: dex.FlowHistoryEvent.step_execute_completed:type_name -> dex.StepExecuteCompletedEvent + 93, // 73: dex.FlowHistoryEvent.step_execute_failed:type_name -> dex.StepExecuteFailedEvent + 94, // 74: dex.FlowHistoryEvent.rpc_execution_completed:type_name -> dex.RpcExecutionCompletedEvent + 95, // 75: dex.FlowHistoryEvent.channel_external_publish:type_name -> dex.ChannelExternalPublishEvent + 82, // 76: dex.FlowHistoryEvent.step_wait_for_pending:type_name -> dex.StepMethodPendingEvent + 82, // 77: dex.FlowHistoryEvent.step_execute_pending:type_name -> dex.StepMethodPendingEvent + 77, // 78: dex.FlowHistoryEvent.time_travel_fork:type_name -> dex.TimeTravelForkHistoryEvent + 96, // 79: dex.FlowHistoryEvent.channel_external_delete:type_name -> dex.ChannelExternalDeleteEvent + 69, // 80: dex.FlowStartedOrContinuedHistoryEvent.flow_execution_id:type_name -> dex.FlowExecutionID + 37, // 81: dex.FlowStartedOrContinuedHistoryEvent.flow_config:type_name -> dex.FlowConfig + 212, // 82: dex.FlowStartedOrContinuedHistoryEvent.flow_timeout:type_name -> google.protobuf.Duration + 6, // 83: dex.FlowStartedOrContinuedHistoryEvent.flow_timeout_policy:type_name -> dex.FlowTimeoutPolicy + 34, // 84: dex.FlowStartedOrContinuedHistoryEvent.timeout_handler_options:type_name -> dex.FlowTimeoutHandlerOptions + 79, // 85: dex.FlowStartedOrContinuedHistoryEvent.initial_start:type_name -> dex.FlowInitialStart + 80, // 86: dex.FlowStartedOrContinuedHistoryEvent.continued_start:type_name -> dex.FlowContinuedStart + 23, // 87: dex.FlowInitialStart.step_input:type_name -> dex.Value + 33, // 88: dex.FlowInitialStart.step_options:type_name -> dex.StepOptions + 27, // 89: dex.FlowInitialStart.initial_attributes:type_name -> dex.KV + 133, // 90: dex.FlowContinuedStart.steps_to_start:type_name -> dex.StepMovement + 149, // 91: dex.FlowContinuedStart.steps_to_resume:type_name -> dex.StepExecutionResumeInfo + 193, // 92: dex.FlowContinuedStart.pending_channel_messages:type_name -> dex.FlowContinuedStart.PendingChannelMessagesEntry + 27, // 93: dex.FlowContinuedStart.attributes:type_name -> dex.KV + 62, // 94: dex.FlowContinuedStart.completed_steps:type_name -> dex.StepCompletionOutput + 8, // 95: dex.FlowClosedHistoryEvent.flow_status:type_name -> dex.FlowStatus + 62, // 96: dex.FlowClosedHistoryEvent.results:type_name -> dex.StepCompletionOutput + 9, // 97: dex.FlowClosedHistoryEvent.error_type:type_name -> dex.FlowErrorType + 85, // 98: dex.StepMethodPendingEvent.input:type_name -> dex.StepMethodEventInput + 86, // 99: dex.StepMethodPendingEvent.context:type_name -> dex.StepMethodEventContext + 10, // 100: dex.StepMethodPendingEvent.phase:type_name -> dex.PendingStepMethodPhase + 115, // 101: dex.StepMethodFailure.details:type_name -> dex.ServiceErrorResponse + 31, // 102: dex.StepMethodOptions.retry_policy:type_name -> dex.RetryPolicy + 23, // 103: dex.StepMethodEventInput.step_input:type_name -> dex.Value + 142, // 104: dex.StepMethodEventInput.condition_results:type_name -> dex.ConditionResults + 27, // 105: dex.StepMethodEventInput.attributes:type_name -> dex.KV + 27, // 106: dex.StepMethodEventInput.step_execution_locals:type_name -> dex.KV + 5, // 107: dex.StepMethodEventContext.durability:type_name -> dex.StepDurability + 211, // 108: dex.StepMethodEventContext.started_time:type_name -> google.protobuf.Timestamp + 212, // 109: dex.StepMethodEventContext.duration:type_name -> google.protobuf.Duration + 84, // 110: dex.StepMethodEventContext.method_options:type_name -> dex.StepMethodOptions + 83, // 111: dex.StepMethodEventContext.last_failure_info:type_name -> dex.StepMethodFailure + 135, // 112: dex.StepWaitForCompletedOutput.wait_for_condition:type_name -> dex.WaitingCondition + 25, // 113: dex.StepWaitForCompletedOutput.upsert_attributes:type_name -> dex.AttributeWrite + 43, // 114: dex.StepWaitForCompletedOutput.publish_to_channel:type_name -> dex.ChannelMessage + 27, // 115: dex.StepWaitForCompletedOutput.record_events:type_name -> dex.KV + 27, // 116: dex.StepWaitForCompletedOutput.upsert_step_execution_locals:type_name -> dex.KV + 47, // 117: dex.StepWaitForCompletedOutput.delete_from_channel:type_name -> dex.ChannelMessageDeletion + 131, // 118: dex.StepExecuteCompletedOutput.step_decision:type_name -> dex.StepDecision + 25, // 119: dex.StepExecuteCompletedOutput.upsert_attributes:type_name -> dex.AttributeWrite + 43, // 120: dex.StepExecuteCompletedOutput.publish_to_channel:type_name -> dex.ChannelMessage + 27, // 121: dex.StepExecuteCompletedOutput.record_events:type_name -> dex.KV + 27, // 122: dex.StepExecuteCompletedOutput.upsert_step_execution_locals:type_name -> dex.KV + 47, // 123: dex.StepExecuteCompletedOutput.delete_from_channel:type_name -> dex.ChannelMessageDeletion + 83, // 124: dex.StepMethodFailedOutput.failure:type_name -> dex.StepMethodFailure + 85, // 125: dex.StepWaitForCompletedEvent.input:type_name -> dex.StepMethodEventInput + 87, // 126: dex.StepWaitForCompletedEvent.output:type_name -> dex.StepWaitForCompletedOutput + 86, // 127: dex.StepWaitForCompletedEvent.context:type_name -> dex.StepMethodEventContext + 85, // 128: dex.StepWaitForFailedEvent.input:type_name -> dex.StepMethodEventInput + 89, // 129: dex.StepWaitForFailedEvent.output:type_name -> dex.StepMethodFailedOutput + 86, // 130: dex.StepWaitForFailedEvent.context:type_name -> dex.StepMethodEventContext + 85, // 131: dex.StepExecuteCompletedEvent.input:type_name -> dex.StepMethodEventInput + 88, // 132: dex.StepExecuteCompletedEvent.output:type_name -> dex.StepExecuteCompletedOutput + 86, // 133: dex.StepExecuteCompletedEvent.context:type_name -> dex.StepMethodEventContext + 85, // 134: dex.StepExecuteFailedEvent.input:type_name -> dex.StepMethodEventInput + 89, // 135: dex.StepExecuteFailedEvent.output:type_name -> dex.StepMethodFailedOutput + 86, // 136: dex.StepExecuteFailedEvent.context:type_name -> dex.StepMethodEventContext + 23, // 137: dex.RpcExecutionCompletedEvent.input:type_name -> dex.Value + 23, // 138: dex.RpcExecutionCompletedEvent.output:type_name -> dex.Value + 131, // 139: dex.RpcExecutionCompletedEvent.step_decision:type_name -> dex.StepDecision + 25, // 140: dex.RpcExecutionCompletedEvent.upsert_attributes:type_name -> dex.AttributeWrite + 27, // 141: dex.RpcExecutionCompletedEvent.record_events:type_name -> dex.KV + 43, // 142: dex.RpcExecutionCompletedEvent.publish_to_channel:type_name -> dex.ChannelMessage + 47, // 143: dex.RpcExecutionCompletedEvent.delete_from_channel:type_name -> dex.ChannelMessageDeletion + 43, // 144: dex.ChannelExternalPublishEvent.messages:type_name -> dex.ChannelMessage + 47, // 145: dex.ChannelExternalDeleteEvent.messages:type_name -> dex.ChannelMessageDeletion + 8, // 146: dex.WaitForHistoryEventResponse.flow_status:type_name -> dex.FlowStatus + 11, // 147: dex.ActiveStepExecutionState.phase:type_name -> dex.ActiveStepPhase + 133, // 148: dex.ActiveStepExecutionState.movement:type_name -> dex.StepMovement + 136, // 149: dex.ActiveStepExecutionState.waiting_condition:type_name -> dex.WaitingConditionState + 148, // 150: dex.ActiveStepExecutionState.completed_conditions:type_name -> dex.StepExecutionCompletedConditions + 27, // 151: dex.ActiveStepExecutionState.step_execution_locals:type_name -> dex.KV + 184, // 152: dex.ActiveStepExecutionState.timers:type_name -> dex.TimerInfo + 83, // 153: dex.ActiveStepExecutionState.last_failure_info:type_name -> dex.StepMethodFailure + 37, // 154: dex.GetFlowStateResponse.flow_config:type_name -> dex.FlowConfig + 27, // 155: dex.GetFlowStateResponse.attributes:type_name -> dex.KV + 99, // 156: dex.GetFlowStateResponse.active_step_executions:type_name -> dex.ActiveStepExecutionState + 133, // 157: dex.GetFlowStateResponse.queued_steps:type_name -> dex.StepMovement + 194, // 158: dex.GetFlowStateResponse.pending_channel_messages:type_name -> dex.GetFlowStateResponse.PendingChannelMessagesEntry + 62, // 159: dex.GetFlowStateResponse.completed_steps:type_name -> dex.StepCompletionOutput + 12, // 160: dex.ResetFlowRequest.reset_type:type_name -> dex.FlowResetType + 13, // 161: dex.ResetFlowRequest.step_method:type_name -> dex.FlowResetStepMethod + 23, // 162: dex.InvokeRPCRequest.input:type_name -> dex.Value + 23, // 163: dex.InvokeRPCResponse.output:type_name -> dex.Value + 37, // 164: dex.UpdateFlowConfigRequest.flow_config:type_name -> dex.FlowConfig + 112, // 165: dex.WaitForAttributeRequest.match:type_name -> dex.AttributeMatch + 23, // 166: dex.WaitForAttributeResponse.matched_value:type_name -> dex.Value + 14, // 167: dex.AttributeMatch.operator:type_name -> dex.AttributeMatchOperator + 23, // 168: dex.AttributeMatch.operand:type_name -> dex.Value + 15, // 169: dex.ServiceErrorResponse.sub_status:type_name -> dex.ErrorSubStatus + 118, // 170: dex.InternalActivityError.worker_error:type_name -> dex.InternalWorkerError + 117, // 171: dex.InternalFlowError.activity_error:type_name -> dex.InternalActivityError + 29, // 172: dex.InvokeWaitForMethodRequest.context:type_name -> dex.Context + 23, // 173: dex.InvokeWaitForMethodRequest.step_input:type_name -> dex.Value + 27, // 174: dex.InvokeWaitForMethodRequest.attributes:type_name -> dex.KV + 195, // 175: dex.InvokeWaitForMethodRequest.channel_infos:type_name -> dex.InvokeWaitForMethodRequest.ChannelInfosEntry + 196, // 176: dex.InvokeWaitForMethodRequest.loaded_channel_messages:type_name -> dex.InvokeWaitForMethodRequest.LoadedChannelMessagesEntry + 30, // 177: dex.InvokeWaitForMethodResponse.local_activity_metadata:type_name -> dex.LocalActivityMetadata + 25, // 178: dex.InvokeWaitForMethodResponse.upsert_attributes:type_name -> dex.AttributeWrite + 135, // 179: dex.InvokeWaitForMethodResponse.waiting_condition:type_name -> dex.WaitingCondition + 27, // 180: dex.InvokeWaitForMethodResponse.upsert_step_exe_locals:type_name -> dex.KV + 27, // 181: dex.InvokeWaitForMethodResponse.record_events:type_name -> dex.KV + 43, // 182: dex.InvokeWaitForMethodResponse.publish_to_channel:type_name -> dex.ChannelMessage + 47, // 183: dex.InvokeWaitForMethodResponse.delete_from_channel:type_name -> dex.ChannelMessageDeletion + 23, // 184: dex.StepMethodHeartbeat.value:type_name -> dex.Value + 23, // 185: dex.StepStreamWrite.value:type_name -> dex.Value + 123, // 186: dex.InvokeWaitForMethodOutput.heartbeat:type_name -> dex.StepMethodHeartbeat + 124, // 187: dex.InvokeWaitForMethodOutput.stream_write:type_name -> dex.StepStreamWrite + 122, // 188: dex.InvokeWaitForMethodOutput.result:type_name -> dex.InvokeWaitForMethodResponse + 29, // 189: dex.InvokeExecuteMethodRequest.context:type_name -> dex.Context + 23, // 190: dex.InvokeExecuteMethodRequest.step_input:type_name -> dex.Value + 27, // 191: dex.InvokeExecuteMethodRequest.attributes:type_name -> dex.KV + 27, // 192: dex.InvokeExecuteMethodRequest.step_exe_locals:type_name -> dex.KV + 142, // 193: dex.InvokeExecuteMethodRequest.condition_results:type_name -> dex.ConditionResults + 197, // 194: dex.InvokeExecuteMethodRequest.channel_infos:type_name -> dex.InvokeExecuteMethodRequest.ChannelInfosEntry + 198, // 195: dex.InvokeExecuteMethodRequest.loaded_channel_messages:type_name -> dex.InvokeExecuteMethodRequest.LoadedChannelMessagesEntry + 30, // 196: dex.InvokeExecuteMethodResponse.local_activity_metadata:type_name -> dex.LocalActivityMetadata + 131, // 197: dex.InvokeExecuteMethodResponse.step_decision:type_name -> dex.StepDecision + 25, // 198: dex.InvokeExecuteMethodResponse.upsert_attributes:type_name -> dex.AttributeWrite + 27, // 199: dex.InvokeExecuteMethodResponse.record_events:type_name -> dex.KV + 27, // 200: dex.InvokeExecuteMethodResponse.upsert_step_exe_locals:type_name -> dex.KV + 43, // 201: dex.InvokeExecuteMethodResponse.publish_to_channel:type_name -> dex.ChannelMessage + 47, // 202: dex.InvokeExecuteMethodResponse.delete_from_channel:type_name -> dex.ChannelMessageDeletion + 123, // 203: dex.InvokeExecuteMethodOutput.heartbeat:type_name -> dex.StepMethodHeartbeat + 124, // 204: dex.InvokeExecuteMethodOutput.stream_write:type_name -> dex.StepStreamWrite + 127, // 205: dex.InvokeExecuteMethodOutput.result:type_name -> dex.InvokeExecuteMethodResponse + 29, // 206: dex.InvokeWorkerRPCRequest.context:type_name -> dex.Context + 23, // 207: dex.InvokeWorkerRPCRequest.input:type_name -> dex.Value + 27, // 208: dex.InvokeWorkerRPCRequest.attributes:type_name -> dex.KV + 199, // 209: dex.InvokeWorkerRPCRequest.channel_infos:type_name -> dex.InvokeWorkerRPCRequest.ChannelInfosEntry + 200, // 210: dex.InvokeWorkerRPCRequest.loaded_channel_messages:type_name -> dex.InvokeWorkerRPCRequest.LoadedChannelMessagesEntry + 23, // 211: dex.InvokeWorkerRPCResponse.output:type_name -> dex.Value + 131, // 212: dex.InvokeWorkerRPCResponse.step_decision:type_name -> dex.StepDecision + 25, // 213: dex.InvokeWorkerRPCResponse.upsert_attributes:type_name -> dex.AttributeWrite + 27, // 214: dex.InvokeWorkerRPCResponse.record_events:type_name -> dex.KV + 47, // 215: dex.InvokeWorkerRPCResponse.delete_from_channel:type_name -> dex.ChannelMessageDeletion + 43, // 216: dex.InvokeWorkerRPCResponse.publish_to_channel:type_name -> dex.ChannelMessage + 133, // 217: dex.StepDecision.next_steps:type_name -> dex.StepMovement + 132, // 218: dex.StepDecision.close_decision:type_name -> dex.CloseDecision + 16, // 219: dex.CloseDecision.close_decision_type:type_name -> dex.CloseDecisionType + 23, // 220: dex.CloseDecision.close_input:type_name -> dex.Value + 23, // 221: dex.StepMovement.step_input:type_name -> dex.Value + 33, // 222: dex.StepMovement.step_options:type_name -> dex.StepOptions + 161, // 223: dex.StepMovement.recovery_error_internal_only:type_name -> dex.RecoveryErrorInfo + 17, // 224: dex.WaitingCondition.waiting_condition_type:type_name -> dex.WaitingConditionType + 140, // 225: dex.WaitingCondition.timer_conditions:type_name -> dex.TimerCondition + 141, // 226: dex.WaitingCondition.channel_conditions:type_name -> dex.ChannelCondition + 134, // 227: dex.WaitingCondition.condition_combinations:type_name -> dex.ConditionCombination + 138, // 228: dex.WaitingCondition.sub_flow_conditions:type_name -> dex.SubFlowCondition + 17, // 229: dex.WaitingConditionState.waiting_condition_type:type_name -> dex.WaitingConditionType + 140, // 230: dex.WaitingConditionState.timer_conditions:type_name -> dex.TimerCondition + 141, // 231: dex.WaitingConditionState.channel_conditions:type_name -> dex.ChannelCondition + 134, // 232: dex.WaitingConditionState.condition_combinations:type_name -> dex.ConditionCombination + 139, // 233: dex.WaitingConditionState.sub_flow_conditions:type_name -> dex.SubFlowConditionState + 18, // 234: dex.SubFlowOptions.reuse_policy:type_name -> dex.SubFlowReusePolicy + 32, // 235: dex.SubFlowOptions.retry_policy:type_name -> dex.FlowRetryPolicy + 25, // 236: dex.SubFlowOptions.attributes:type_name -> dex.AttributeWrite + 37, // 237: dex.SubFlowOptions.flow_config_override:type_name -> dex.FlowConfig + 6, // 238: dex.SubFlowOptions.flow_timeout_policy:type_name -> dex.FlowTimeoutPolicy + 34, // 239: dex.SubFlowOptions.timeout_handler_options:type_name -> dex.FlowTimeoutHandlerOptions + 23, // 240: dex.SubFlowCondition.step_input:type_name -> dex.Value + 33, // 241: dex.SubFlowCondition.step_options:type_name -> dex.StepOptions + 137, // 242: dex.SubFlowCondition.options:type_name -> dex.SubFlowOptions + 144, // 243: dex.ConditionResults.channel_results:type_name -> dex.ChannelResult + 143, // 244: dex.ConditionResults.timer_results:type_name -> dex.TimerResult + 63, // 245: dex.ConditionResults.sub_flow_results:type_name -> dex.FlowResult + 19, // 246: dex.TimerResult.condition_status:type_name -> dex.ConditionStatus + 19, // 247: dex.ChannelResult.condition_status:type_name -> dex.ConditionStatus + 23, // 248: dex.ChannelResult.values:type_name -> dex.Value + 43, // 249: dex.ChannelValues.messages:type_name -> dex.ChannelMessage + 201, // 250: dex.StepExecutionCompletedConditions.completed_timer_conditions:type_name -> dex.StepExecutionCompletedConditions.CompletedTimerConditionsEntry + 202, // 251: dex.StepExecutionCompletedConditions.completed_sub_flow_results:type_name -> dex.StepExecutionCompletedConditions.CompletedSubFlowResultsEntry + 133, // 252: dex.StepExecutionResumeInfo.step:type_name -> dex.StepMovement + 148, // 253: dex.StepExecutionResumeInfo.completed_conditions:type_name -> dex.StepExecutionCompletedConditions + 136, // 254: dex.StepExecutionResumeInfo.waiting_condition:type_name -> dex.WaitingConditionState + 27, // 255: dex.StepExecutionResumeInfo.step_exe_locals:type_name -> dex.KV + 203, // 256: dex.StepExecutionCounterInfo.step_type_started_count:type_name -> dex.StepExecutionCounterInfo.StepTypeStartedCountEntry + 204, // 257: dex.StepExecutionCounterInfo.step_type_currently_executing_count:type_name -> dex.StepExecutionCounterInfo.StepTypeCurrentlyExecutingCountEntry + 205, // 258: dex.StepExecutionCounterInfo.step_active_execution_nums:type_name -> dex.StepExecutionCounterInfo.StepActiveExecutionNumsEntry + 133, // 259: dex.ContinueAsNewDump.steps_to_start_from_beginning:type_name -> dex.StepMovement + 149, // 260: dex.ContinueAsNewDump.step_executions_to_resume:type_name -> dex.StepExecutionResumeInfo + 206, // 261: dex.ContinueAsNewDump.channel_received:type_name -> dex.ContinueAsNewDump.ChannelReceivedEntry + 150, // 262: dex.ContinueAsNewDump.counter_info:type_name -> dex.StepExecutionCounterInfo + 62, // 263: dex.ContinueAsNewDump.step_outputs:type_name -> dex.StepCompletionOutput + 151, // 264: dex.ContinueAsNewDump.stale_skip_timers:type_name -> dex.StaleSkipTimer + 27, // 265: dex.ContinueAsNewDump.attributes:type_name -> dex.KV + 170, // 266: dex.ContinueAsNewDump.pending_attribute_sync_items:type_name -> dex.AttributeSyncItem + 6, // 267: dex.InterpreterWorkflowInput.flow_timeout_policy:type_name -> dex.FlowTimeoutPolicy + 23, // 268: dex.InterpreterWorkflowInput.step_input:type_name -> dex.Value + 33, // 269: dex.InterpreterWorkflowInput.step_options:type_name -> dex.StepOptions + 25, // 270: dex.InterpreterWorkflowInput.init_attributes:type_name -> dex.AttributeWrite + 37, // 271: dex.InterpreterWorkflowInput.config:type_name -> dex.FlowConfig + 153, // 272: dex.InterpreterWorkflowInput.continue_as_new_input:type_name -> dex.ContinueAsNewInput + 34, // 273: dex.InterpreterWorkflowInput.timeout_handler_options:type_name -> dex.FlowTimeoutHandlerOptions + 62, // 274: dex.InterpreterWorkflowOutput.step_completion_outputs:type_name -> dex.StepCompletionOutput + 39, // 275: dex.InvokeWaitForMethodActivityInput.worker_target:type_name -> dex.WorkerTarget + 121, // 276: dex.InvokeWaitForMethodActivityInput.request:type_name -> dex.InvokeWaitForMethodRequest + 122, // 277: dex.InvokeWaitForMethodActivityOutput.response:type_name -> dex.InvokeWaitForMethodResponse + 39, // 278: dex.InvokeExecuteMethodActivityInput.worker_target:type_name -> dex.WorkerTarget + 126, // 279: dex.InvokeExecuteMethodActivityInput.request:type_name -> dex.InvokeExecuteMethodRequest + 30, // 280: dex.InternalLocalStepActivityFailure.local_activity_metadata:type_name -> dex.LocalActivityMetadata + 84, // 281: dex.InternalLocalStepActivityFailure.method_options:type_name -> dex.StepMethodOptions + 117, // 282: dex.InternalLocalStepActivityFailure.activity_error:type_name -> dex.InternalActivityError + 127, // 283: dex.InvokeExecuteMethodActivityOutput.response:type_name -> dex.InvokeExecuteMethodResponse + 145, // 284: dex.DumpFlowForContinueAsNewActivityInput.request:type_name -> dex.ContinueAsNewDumpRequest + 146, // 285: dex.DumpFlowForContinueAsNewActivityOutput.response:type_name -> dex.ContinueAsNewDumpResponse + 183, // 286: dex.InvokeWorkerRPCActivityInput.rpc_prep:type_name -> dex.PrepareRpcQueryResponse + 104, // 287: dex.InvokeWorkerRPCActivityInput.request:type_name -> dex.InvokeRPCRequest + 130, // 288: dex.InvokeWorkerRPCActivityOutput.response:type_name -> dex.InvokeWorkerRPCResponse + 23, // 289: dex.AttributeSyncItem.value:type_name -> dex.Value + 170, // 290: dex.SyncAttributeBatchActivityInput.items:type_name -> dex.AttributeSyncItem + 138, // 291: dex.StartSubFlowActivityInput.condition:type_name -> dex.SubFlowCondition + 37, // 292: dex.StartSubFlowActivityInput.parent_flow_config:type_name -> dex.FlowConfig + 63, // 293: dex.StartSubFlowActivityOutput.immediate_flow_result:type_name -> dex.FlowResult + 63, // 294: dex.SubFlowCompletionSignalRequest.flow_result:type_name -> dex.FlowResult + 174, // 295: dex.ReportSubFlowCompletionActivityInput.request:type_name -> dex.SubFlowCompletionSignalRequest + 22, // 296: dex.ReportSubFlowCompletionActivityOutput.status:type_name -> dex.SubFlowCompletionDeliveryStatus + 23, // 297: dex.ExecuteRpcSignalRequest.rpc_input:type_name -> dex.Value + 23, // 298: dex.ExecuteRpcSignalRequest.rpc_output:type_name -> dex.Value + 25, // 299: dex.ExecuteRpcSignalRequest.upsert_attributes:type_name -> dex.AttributeWrite + 131, // 300: dex.ExecuteRpcSignalRequest.step_decision:type_name -> dex.StepDecision + 27, // 301: dex.ExecuteRpcSignalRequest.record_events:type_name -> dex.KV + 43, // 302: dex.ExecuteRpcSignalRequest.publish_to_channel:type_name -> dex.ChannelMessage + 47, // 303: dex.ExecuteRpcSignalRequest.delete_from_channel:type_name -> dex.ChannelMessageDeletion + 7, // 304: dex.StopFlowSignalRequest.stop_type:type_name -> dex.StopType + 27, // 305: dex.GetAttributesQueryResponse.attributes:type_name -> dex.KV + 27, // 306: dex.PrepareRpcQueryResponse.attributes:type_name -> dex.KV + 39, // 307: dex.PrepareRpcQueryResponse.worker_target:type_name -> dex.WorkerTarget + 207, // 308: dex.PrepareRpcQueryResponse.channel_infos:type_name -> dex.PrepareRpcQueryResponse.ChannelInfosEntry + 208, // 309: dex.PrepareRpcQueryResponse.loaded_channel_messages:type_name -> dex.PrepareRpcQueryResponse.LoadedChannelMessagesEntry + 20, // 310: dex.TimerInfo.status:type_name -> dex.InternalTimerStatus + 184, // 311: dex.TimerInfoList.timers:type_name -> dex.TimerInfo + 209, // 312: dex.GetCurrentTimerInfosQueryResponse.step_execution_current_timer_infos:type_name -> dex.GetCurrentTimerInfosQueryResponse.StepExecutionCurrentTimerInfosEntry + 184, // 313: dex.GetScheduledGreedyTimerTimesQueryResponse.pending_scheduled:type_name -> dex.TimerInfo + 37, // 314: dex.DebugDumpResponse.config:type_name -> dex.FlowConfig + 152, // 315: dex.DebugDumpResponse.snapshot:type_name -> dex.ContinueAsNewDump + 99, // 316: dex.DebugDumpResponse.active_step_executions:type_name -> dex.ActiveStepExecutionState + 105, // 317: dex.InvokeRpcUpdateResult.response:type_name -> dex.InvokeRPCResponse + 23, // 318: dex.LoadBlobsResponse.ValuesEntry.value:type_name -> dex.Value + 0, // 319: dex.SyncAttributeIndexRequest.AttributeIndexesEntry.value:type_name -> dex.IndexType + 147, // 320: dex.FlowContinuedStart.PendingChannelMessagesEntry.value:type_name -> dex.ChannelValues + 147, // 321: dex.GetFlowStateResponse.PendingChannelMessagesEntry.value:type_name -> dex.ChannelValues + 120, // 322: dex.InvokeWaitForMethodRequest.ChannelInfosEntry.value:type_name -> dex.ChannelInfo + 147, // 323: dex.InvokeWaitForMethodRequest.LoadedChannelMessagesEntry.value:type_name -> dex.ChannelValues + 120, // 324: dex.InvokeExecuteMethodRequest.ChannelInfosEntry.value:type_name -> dex.ChannelInfo + 147, // 325: dex.InvokeExecuteMethodRequest.LoadedChannelMessagesEntry.value:type_name -> dex.ChannelValues + 120, // 326: dex.InvokeWorkerRPCRequest.ChannelInfosEntry.value:type_name -> dex.ChannelInfo + 147, // 327: dex.InvokeWorkerRPCRequest.LoadedChannelMessagesEntry.value:type_name -> dex.ChannelValues + 20, // 328: dex.StepExecutionCompletedConditions.CompletedTimerConditionsEntry.value:type_name -> dex.InternalTimerStatus + 63, // 329: dex.StepExecutionCompletedConditions.CompletedSubFlowResultsEntry.value:type_name -> dex.FlowResult + 190, // 330: dex.StepExecutionCounterInfo.StepActiveExecutionNumsEntry.value:type_name -> dex.StepExecutionNumbers + 147, // 331: dex.ContinueAsNewDump.ChannelReceivedEntry.value:type_name -> dex.ChannelValues + 120, // 332: dex.PrepareRpcQueryResponse.ChannelInfosEntry.value:type_name -> dex.ChannelInfo + 147, // 333: dex.PrepareRpcQueryResponse.LoadedChannelMessagesEntry.value:type_name -> dex.ChannelValues + 185, // 334: dex.GetCurrentTimerInfosQueryResponse.StepExecutionCurrentTimerInfosEntry.value:type_name -> dex.TimerInfoList + 40, // 335: dex.FlowService.StartFlow:input_type -> dex.StartFlowRequest + 42, // 336: dex.FlowService.PublishToChannel:input_type -> dex.PublishToChannelRequest + 44, // 337: dex.FlowService.GetChannelMessages:input_type -> dex.GetChannelMessagesRequest + 46, // 338: dex.FlowService.DeleteChannelMessage:input_type -> dex.DeleteChannelMessageRequest + 48, // 339: dex.FlowService.WriteStream:input_type -> dex.WriteStreamRequest + 49, // 340: dex.FlowService.ReadStream:input_type -> dex.ReadStreamRequest + 51, // 341: dex.FlowService.ListStreamMessages:input_type -> dex.ListStreamMessagesRequest + 54, // 342: dex.FlowService.StopFlow:input_type -> dex.StopFlowRequest + 55, // 343: dex.FlowService.GetAttributes:input_type -> dex.GetAttributesRequest + 57, // 344: dex.FlowService.SetAttributes:input_type -> dex.SetAttributesRequest + 59, // 345: dex.FlowService.LoadBlobs:input_type -> dex.LoadBlobsRequest + 61, // 346: dex.FlowService.WaitForFlow:input_type -> dex.WaitForFlowRequest + 64, // 347: dex.FlowService.SearchFlows:input_type -> dex.SearchFlowsRequest + 67, // 348: dex.FlowService.SyncAttributeIndexes:input_type -> dex.SyncAttributeIndexRequest + 70, // 349: dex.FlowService.GetFlowSummary:input_type -> dex.GetFlowSummaryRequest + 74, // 350: dex.FlowService.GetHistoryEvents:input_type -> dex.GetHistoryEventsRequest + 97, // 351: dex.FlowService.WaitForHistoryEvent:input_type -> dex.WaitForHistoryEventRequest + 100, // 352: dex.FlowService.GetFlowState:input_type -> dex.GetFlowStateRequest + 102, // 353: dex.FlowService.ResetFlow:input_type -> dex.ResetFlowRequest + 104, // 354: dex.FlowService.InvokeRPC:input_type -> dex.InvokeRPCRequest + 106, // 355: dex.FlowService.SkipTimer:input_type -> dex.SkipTimerRequest + 107, // 356: dex.FlowService.UpdateFlowConfig:input_type -> dex.UpdateFlowConfigRequest + 108, // 357: dex.FlowService.WaitForStepCompletion:input_type -> dex.WaitForStepCompletionRequest + 110, // 358: dex.FlowService.WaitForAttribute:input_type -> dex.WaitForAttributeRequest + 113, // 359: dex.FlowService.TriggerContinueAsNew:input_type -> dex.TriggerContinueAsNewRequest + 213, // 360: dex.FlowService.HealthCheck:input_type -> google.protobuf.Empty + 121, // 361: dex.WorkerService.InvokeWaitForMethod:input_type -> dex.InvokeWaitForMethodRequest + 126, // 362: dex.WorkerService.InvokeExecuteMethod:input_type -> dex.InvokeExecuteMethodRequest + 129, // 363: dex.WorkerService.InvokeWorkerRPC:input_type -> dex.InvokeWorkerRPCRequest + 145, // 364: dex.InternalService.DumpFlowForContinueAsNew:input_type -> dex.ContinueAsNewDumpRequest + 41, // 365: dex.FlowService.StartFlow:output_type -> dex.StartFlowResponse + 213, // 366: dex.FlowService.PublishToChannel:output_type -> google.protobuf.Empty + 45, // 367: dex.FlowService.GetChannelMessages:output_type -> dex.GetChannelMessagesResponse + 213, // 368: dex.FlowService.DeleteChannelMessage:output_type -> google.protobuf.Empty + 213, // 369: dex.FlowService.WriteStream:output_type -> google.protobuf.Empty + 50, // 370: dex.FlowService.ReadStream:output_type -> dex.ReadStreamResponse + 52, // 371: dex.FlowService.ListStreamMessages:output_type -> dex.ListStreamMessagesResponse + 213, // 372: dex.FlowService.StopFlow:output_type -> google.protobuf.Empty + 56, // 373: dex.FlowService.GetAttributes:output_type -> dex.GetAttributesResponse + 213, // 374: dex.FlowService.SetAttributes:output_type -> google.protobuf.Empty + 60, // 375: dex.FlowService.LoadBlobs:output_type -> dex.LoadBlobsResponse + 63, // 376: dex.FlowService.WaitForFlow:output_type -> dex.FlowResult + 65, // 377: dex.FlowService.SearchFlows:output_type -> dex.SearchFlowsResponse + 68, // 378: dex.FlowService.SyncAttributeIndexes:output_type -> dex.SyncAttributeIndexResponse + 71, // 379: dex.FlowService.GetFlowSummary:output_type -> dex.GetFlowSummaryResponse + 75, // 380: dex.FlowService.GetHistoryEvents:output_type -> dex.GetHistoryEventsResponse + 98, // 381: dex.FlowService.WaitForHistoryEvent:output_type -> dex.WaitForHistoryEventResponse + 101, // 382: dex.FlowService.GetFlowState:output_type -> dex.GetFlowStateResponse + 103, // 383: dex.FlowService.ResetFlow:output_type -> dex.ResetFlowResponse + 105, // 384: dex.FlowService.InvokeRPC:output_type -> dex.InvokeRPCResponse + 213, // 385: dex.FlowService.SkipTimer:output_type -> google.protobuf.Empty + 213, // 386: dex.FlowService.UpdateFlowConfig:output_type -> google.protobuf.Empty + 109, // 387: dex.FlowService.WaitForStepCompletion:output_type -> dex.WaitForStepCompletionResponse + 111, // 388: dex.FlowService.WaitForAttribute:output_type -> dex.WaitForAttributeResponse + 213, // 389: dex.FlowService.TriggerContinueAsNew:output_type -> google.protobuf.Empty + 114, // 390: dex.FlowService.HealthCheck:output_type -> dex.HealthInfo + 125, // 391: dex.WorkerService.InvokeWaitForMethod:output_type -> dex.InvokeWaitForMethodOutput + 128, // 392: dex.WorkerService.InvokeExecuteMethod:output_type -> dex.InvokeExecuteMethodOutput + 130, // 393: dex.WorkerService.InvokeWorkerRPC:output_type -> dex.InvokeWorkerRPCResponse + 146, // 394: dex.InternalService.DumpFlowForContinueAsNew:output_type -> dex.ContinueAsNewDumpResponse + 365, // [365:395] is the sub-list for method output_type + 335, // [335:365] is the sub-list for method input_type + 335, // [335:335] is the sub-list for extension type_name + 335, // [335:335] is the sub-list for extension extendee + 0, // [0:335] is the sub-list for field type_name } func init() { file_dex_proto_init() } @@ -14599,11 +14657,11 @@ func file_dex_proto_init() { (*Value_NullValue)(nil), } file_dex_proto_msgTypes[14].OneofWrappers = []any{} - file_dex_proto_msgTypes[48].OneofWrappers = []any{ + file_dex_proto_msgTypes[49].OneofWrappers = []any{ (*InternalAsyncStepInputSnapshot_WaitForRequest)(nil), (*InternalAsyncStepInputSnapshot_ExecuteRequest)(nil), } - file_dex_proto_msgTypes[52].OneofWrappers = []any{ + file_dex_proto_msgTypes[53].OneofWrappers = []any{ (*FlowHistoryEvent_FlowStartedOrContinued)(nil), (*FlowHistoryEvent_FlowClosed)(nil), (*FlowHistoryEvent_StepWaitForCompleted)(nil), @@ -14617,33 +14675,33 @@ func file_dex_proto_init() { (*FlowHistoryEvent_TimeTravelFork)(nil), (*FlowHistoryEvent_ChannelExternalDelete)(nil), } - file_dex_proto_msgTypes[54].OneofWrappers = []any{ + file_dex_proto_msgTypes[55].OneofWrappers = []any{ (*FlowStartedOrContinuedHistoryEvent_InitialStart)(nil), (*FlowStartedOrContinuedHistoryEvent_ContinuedStart)(nil), } - file_dex_proto_msgTypes[82].OneofWrappers = []any{} - file_dex_proto_msgTypes[95].OneofWrappers = []any{ + file_dex_proto_msgTypes[83].OneofWrappers = []any{} + file_dex_proto_msgTypes[96].OneofWrappers = []any{ (*InternalFlowError_ServerDetail)(nil), (*InternalFlowError_ActivityError)(nil), } - file_dex_proto_msgTypes[101].OneofWrappers = []any{ + file_dex_proto_msgTypes[102].OneofWrappers = []any{ (*InvokeWaitForMethodOutput_Heartbeat)(nil), (*InvokeWaitForMethodOutput_StreamWrite)(nil), (*InvokeWaitForMethodOutput_Result)(nil), } - file_dex_proto_msgTypes[104].OneofWrappers = []any{ + file_dex_proto_msgTypes[105].OneofWrappers = []any{ (*InvokeExecuteMethodOutput_Heartbeat)(nil), (*InvokeExecuteMethodOutput_StreamWrite)(nil), (*InvokeExecuteMethodOutput_Result)(nil), } - file_dex_proto_msgTypes[117].OneofWrappers = []any{} + file_dex_proto_msgTypes[118].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_dex_proto_rawDesc), len(file_dex_proto_rawDesc)), NumEnums: 23, - NumMessages: 186, + NumMessages: 187, NumExtensions: 0, NumServices: 3, }, diff --git a/server/integ/any_command_close_test.go b/server/integ/any_command_close_test.go index 2b078ccab..a143b9007 100644 --- a/server/integ/any_command_close_test.go +++ b/server/integ/any_command_close_test.go @@ -98,7 +98,7 @@ func doTestAnyCommandCloseFlow( }) require.NoError(t, err) - signalValue := encodedObjectValue("json", []byte("test-data-1")) + signalValue := encodedObjectValue("j", []byte("test-data-1")) _, err = flowClient.PublishToChannel(ctx, &dexpb.PublishToChannelRequest{ FlowId: flowId, Messages: []*dexpb.ChannelMessage{ diff --git a/server/integ/any_command_combination_test.go b/server/integ/any_command_combination_test.go index bd2a6ecc5..94a867527 100644 --- a/server/integ/any_command_combination_test.go +++ b/server/integ/any_command_combination_test.go @@ -99,7 +99,7 @@ func doTestAnyCommandCombinationFlow( }) require.NoError(t, err) - signalValue := encodedObjectValue("json", []byte("test-data-1")) + signalValue := encodedObjectValue("j", []byte("test-data-1")) publishSignal := func() { _, publishErr := flowClient.PublishToChannel(ctx, &dexpb.PublishToChannelRequest{ FlowId: flowId, diff --git a/server/integ/any_timer_signal_test.go b/server/integ/any_timer_signal_test.go index 62cfc402c..86c1adaa7 100644 --- a/server/integ/any_timer_signal_test.go +++ b/server/integ/any_timer_signal_test.go @@ -139,7 +139,7 @@ func doTestAnyTimerSignalFlow( require.NoError(t, err) time.Sleep(3 * time.Second) - signalValue := encodedObjectValue("json", []byte("test-data-1")) + signalValue := encodedObjectValue("j", []byte("test-data-1")) _, err = flowClient.PublishToChannel(ctx, &dexpb.PublishToChannelRequest{ FlowId: flowId, Messages: []*dexpb.ChannelMessage{ diff --git a/server/integ/basic_test.go b/server/integ/basic_test.go index ff73fd660..4f7cef9ff 100644 --- a/server/integ/basic_test.go +++ b/server/integ/basic_test.go @@ -101,7 +101,7 @@ func doTestBasicFlow( flowInput := &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: []byte("test data"), }, }, diff --git a/server/integ/channel_message_queue_test.go b/server/integ/channel_message_queue_test.go index 77b1795b9..9efb11540 100644 --- a/server/integ/channel_message_queue_test.go +++ b/server/integ/channel_message_queue_test.go @@ -18,6 +18,7 @@ import ( "github.com/google/uuid" "github.com/stretchr/testify/require" "github.com/superdurable/dex/gen/dexpb" + "github.com/superdurable/dex/integ/workflow/common" "github.com/superdurable/dex/integ/workflow/rpc" "github.com/superdurable/dex/service" "github.com/superdurable/dex/service/common/ptr" @@ -233,10 +234,17 @@ func testChannelMessageTransactionalRpcDeletion(t *testing.T) { Keys: []string{rpc.TestDataAttributeKey}, }) require.NoError(t, err) + attributeValue, err := common.LoadBlobsValue( + ctx, + runtime.FlowClient, + flowID, + attributes.GetAttributes()[0].GetValue(), + ) + require.NoError(t, err) require.Equal( t, rpc.TestDataAttributeVal1.GetObjValue().GetPayload(), - attributes.GetAttributes()[0].GetValue().GetObjValue().GetPayload(), + attributeValue.GetObjValue().GetPayload(), ) response, err := runtime.FlowClient.GetChannelMessages(ctx, &dexpb.GetChannelMessagesRequest{ FlowId: flowID, diff --git a/server/integ/command_thread_completion_test.go b/server/integ/command_thread_completion_test.go index dbc1d855c..9fd0b1652 100644 --- a/server/integ/command_thread_completion_test.go +++ b/server/integ/command_thread_completion_test.go @@ -237,7 +237,7 @@ func doTestCommandThreadCompletion( expected := &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: []byte("channel-data"), }, }, diff --git a/server/integ/greedy_timer_test.go b/server/integ/greedy_timer_test.go index 683cc04a0..4f9f39762 100644 --- a/server/integ/greedy_timer_test.go +++ b/server/integ/greedy_timer_test.go @@ -97,7 +97,7 @@ func doTestGreedyTimerFlowCustomConfig( FlowTimeoutSeconds: 300, StartStepType: greedy_timer.ScheduleTimerState, - StepInput: encodedObjectValue("json", inputData), + StepInput: encodedObjectValue("j", inputData), FlowStartOptions: withWorkerTarget(&dexpb.FlowStartOptions{ FlowConfigOverride: flowConfig, }, workerTarget), @@ -159,7 +159,7 @@ func scheduleTimerAndAssertExpectedScheduled( RequestId: newRequestID(), FlowId: flowId, RpcName: greedy_timer.SubmitDurationsRPC, - Input: encodedObjectValue("json", inputData), + Input: encodedObjectValue("j", inputData), TimeoutSeconds: 2, }) require.NoError(t, err) diff --git a/server/integ/headers_test.go b/server/integ/headers_test.go index 5ff2fdc20..54aa9efb6 100644 --- a/server/integ/headers_test.go +++ b/server/integ/headers_test.go @@ -83,7 +83,7 @@ func doTestFlowWithHeaders( defer cancel() flowId := headers.WorkflowType + "-" + uuid.NewString() - stepInput := encodedObjectValue("json", []byte("test data")) + stepInput := encodedObjectValue("j", []byte("test data")) _, err := flowClient.StartFlow(ctx, &dexpb.StartFlowRequest{ RequestId: newRequestID(), FlowId: flowId, diff --git a/server/integ/parallel_test.go b/server/integ/parallel_test.go index 025137e2b..a3fecf940 100644 --- a/server/integ/parallel_test.go +++ b/server/integ/parallel_test.go @@ -116,7 +116,7 @@ func doTestParallelFlow( CompletedStepType: parallel.State13, CompletedStepExecutionId: parallel.State13 + "-1", CompletedStepOutput: encodedObjectValue( - "json", + "j", []byte("from "+parallel.State13), ), }, @@ -124,7 +124,7 @@ func doTestParallelFlow( CompletedStepType: parallel.State111, CompletedStepExecutionId: parallel.State111 + "-1", CompletedStepOutput: encodedObjectValue( - "json", + "j", []byte("from "+parallel.State111), ), }, @@ -132,7 +132,7 @@ func doTestParallelFlow( CompletedStepType: parallel.State112, CompletedStepExecutionId: parallel.State112 + "-1", CompletedStepOutput: encodedObjectValue( - "json", + "j", []byte("from "+parallel.State112), ), }, @@ -140,7 +140,7 @@ func doTestParallelFlow( CompletedStepType: parallel.State121, CompletedStepExecutionId: parallel.State121 + "-1", CompletedStepOutput: encodedObjectValue( - "json", + "j", []byte("from "+parallel.State121), ), }, @@ -148,7 +148,7 @@ func doTestParallelFlow( CompletedStepType: parallel.State122, CompletedStepExecutionId: parallel.State122 + "-1", CompletedStepOutput: encodedObjectValue( - "json", + "j", []byte("from "+parallel.State122), ), }, diff --git a/server/integ/rpc_external_storage_test.go b/server/integ/rpc_external_storage_test.go index 0f13c3750..857d3a177 100644 --- a/server/integ/rpc_external_storage_test.go +++ b/server/integ/rpc_external_storage_test.go @@ -232,7 +232,7 @@ func doTestRpcExternalStorage( require.NoError(t, err) rpcOutput := rpcResp.GetOutput() require.Equal(t, lazyLoading, integcommon.BlobIdFromValue(rpcOutput) != "") - rpcOutput, err = integcommon.LoadBlobsValue(ctx, flowClient, rpcOutput) + rpcOutput, err = integcommon.LoadBlobsValue(ctx, flowClient, flowId, rpcOutput) require.NoError(t, err) require.True(t, proto.Equal(rpcStorage.TestOutput, rpcOutput)) @@ -383,10 +383,10 @@ func assertTemporalRpcBlobHistory( require.NotEmpty(t, integcommon.BlobIdFromValue(rpcEvent.GetOutput())) require.Len(t, rpcEvent.GetUpsertAttributes(), 2) require.Len(t, rpcEvent.GetPublishToChannel(), 1) - loadedInput, err := integcommon.LoadBlobsValue(ctx, runtime.FlowClient, rpcEvent.GetInput()) + loadedInput, err := integcommon.LoadBlobsValue(ctx, runtime.FlowClient, flowID, rpcEvent.GetInput()) require.NoError(t, err) require.True(t, proto.Equal(rpcStorage.TestInput, loadedInput)) - loadedOutput, err := integcommon.LoadBlobsValue(ctx, runtime.FlowClient, rpcEvent.GetOutput()) + loadedOutput, err := integcommon.LoadBlobsValue(ctx, runtime.FlowClient, flowID, rpcEvent.GetOutput()) require.NoError(t, err) require.True(t, proto.Equal(rpcStorage.TestOutput, loadedOutput)) } @@ -427,10 +427,10 @@ func assertSignalRpcHistory( require.NotNil(t, rpcEvent) require.NotEmpty(t, integcommon.BlobIdFromValue(rpcEvent.GetInput())) require.NotEmpty(t, integcommon.BlobIdFromValue(rpcEvent.GetOutput())) - loadedInput, err := integcommon.LoadBlobsValue(ctx, runtime.FlowClient, rpcEvent.GetInput()) + loadedInput, err := integcommon.LoadBlobsValue(ctx, runtime.FlowClient, flowID, rpcEvent.GetInput()) require.NoError(t, err) require.True(t, proto.Equal(rpcStorage.TestInput, loadedInput)) - loadedOutput, err := integcommon.LoadBlobsValue(ctx, runtime.FlowClient, rpcEvent.GetOutput()) + loadedOutput, err := integcommon.LoadBlobsValue(ctx, runtime.FlowClient, flowID, rpcEvent.GetOutput()) require.NoError(t, err) require.True(t, proto.Equal(rpcStorage.TestOutput, loadedOutput)) } diff --git a/server/integ/runtime.go b/server/integ/runtime.go index 45f44008f..fcb830a60 100644 --- a/server/integ/runtime.go +++ b/server/integ/runtime.go @@ -599,7 +599,7 @@ func jsonObjValue(payload any) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: bytes, }, }, @@ -632,7 +632,7 @@ func objJSONValue(payload string) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: []byte(payload), }, }, diff --git a/server/integ/s3_cleanup_test.go b/server/integ/s3_cleanup_test.go index 705c5eff7..4983c563e 100644 --- a/server/integ/s3_cleanup_test.go +++ b/server/integ/s3_cleanup_test.go @@ -12,6 +12,7 @@ package integ import ( "context" + "encoding/base64" "fmt" "testing" "time" @@ -127,7 +128,11 @@ func doTestWorkflowWithS3Cleanup(t *testing.T, backendType service.BackendType) todayPrefix := time.Now().UTC().Format("20060102") foundCount := 0 for _, flowId := range flowIds { - expectedPath := fmt.Sprintf("%s$%s", todayPrefix, flowId) + expectedPath := fmt.Sprintf( + "%s$%s", + todayPrefix, + base64.RawURLEncoding.EncodeToString([]byte(flowId)), + ) for _, path := range allWorkflowPaths { if path == expectedPath { foundCount++ diff --git a/server/integ/s3_get_set_data_attributes_api_test.go b/server/integ/s3_get_set_data_attributes_api_test.go index 684caacc3..4a08d561c 100644 --- a/server/integ/s3_get_set_data_attributes_api_test.go +++ b/server/integ/s3_get_set_data_attributes_api_test.go @@ -149,11 +149,11 @@ func doTestS3GetSetDataAttributes(t *testing.T, backendType service.BackendType, require.Nil(t, retrieved[s3GetSetDataAttributes.LargeDataKey].GetObjValue()) require.Nil(t, retrieved[s3GetSetDataAttributes.AnotherLargeDataKey].GetObjValue()) requireLoadedBlobPayload( - t, ctx, flowClient, largeBlobId, + t, ctx, flowClient, flowId, largeBlobId, string(s3GetSetDataAttributes.LargeDataValue.GetObjValue().GetPayload()), ) requireLoadedBlobPayload( - t, ctx, flowClient, anotherBlobId, + t, ctx, flowClient, flowId, anotherBlobId, string(s3GetSetDataAttributes.AnotherLargeDataValue.GetObjValue().GetPayload()), ) } else { @@ -264,7 +264,7 @@ func doTestS3GetSetDataAttributesWithInitialData(t *testing.T, backendType servi require.NotEmpty(t, largeBlobId) require.Nil(t, retrieved["initial-large"].GetObjValue()) requireLoadedBlobPayload( - t, ctx, flowClient, largeBlobId, + t, ctx, flowClient, flowId, largeBlobId, string(s3GetSetDataAttributes.LargeDataValue.GetObjValue().GetPayload()), ) } else { @@ -334,17 +334,18 @@ func requireLoadedBlobPayload( t *testing.T, ctx context.Context, flowClient dexpb.FlowServiceClient, + flowID string, blobId string, expectedPayload string, ) { t.Helper() loadResult, err := flowClient.LoadBlobs(ctx, &dexpb.LoadBlobsRequest{ - Values: []*dexpb.Value{ - { + Entries: []*dexpb.LoadBlobRequestEntry{ + {FlowId: flowID, BlobValue: &dexpb.Value{ Kind: &dexpb.Value_InternalBlobIdForObjValue{ InternalBlobIdForObjValue: blobId, }, - }, + }}, }, }) require.NoError(t, err) diff --git a/server/integ/skip_start_test.go b/server/integ/skip_start_test.go index 5a1c23fb5..01779cb48 100644 --- a/server/integ/skip_start_test.go +++ b/server/integ/skip_start_test.go @@ -77,7 +77,7 @@ func doTestSkipStartFlow( defer cancel() flowId := skipstart.WorkflowType + "-" + uuid.NewString() - stepInput := encodedObjectValue("json", []byte("test data")) + stepInput := encodedObjectValue("j", []byte("test data")) _, err := flowClient.StartFlow(ctx, &dexpb.StartFlowRequest{ RequestId: newRequestID(), FlowId: flowId, diff --git a/server/integ/start_delay_test.go b/server/integ/start_delay_test.go index b2b80995e..091730342 100644 --- a/server/integ/start_delay_test.go +++ b/server/integ/start_delay_test.go @@ -49,7 +49,7 @@ func doTestStartDelay( defer cancel() flowId := basic.FlowType + "-" + uuid.NewString() - stepInput := encodedObjectValue("json", []byte("test data")) + stepInput := encodedObjectValue("j", []byte("test data")) timeSentReq := time.Now() _, err := flowClient.StartFlow(ctx, &dexpb.StartFlowRequest{ RequestId: newRequestID(), diff --git a/server/integ/start_with_no_options_test.go b/server/integ/start_with_no_options_test.go index ecf20f8dc..746015c1c 100644 --- a/server/integ/start_with_no_options_test.go +++ b/server/integ/start_with_no_options_test.go @@ -45,7 +45,7 @@ func doTestStartFlowWithoutStartOptions(t *testing.T, backendType service.Backen defer cancel() flowId := "TestStartFlowWithoutStartOptions-" + uuid.NewString() - stepInput := encodedObjectValue("json", []byte("test data")) + stepInput := encodedObjectValue("j", []byte("test data")) _, err := flowClient.StartFlow(ctx, &dexpb.StartFlowRequest{ RequestId: newRequestID(), FlowId: flowId, diff --git a/server/integ/subflow_test.go b/server/integ/subflow_test.go index ce835b674..d1ec5f267 100644 --- a/server/integ/subflow_test.go +++ b/server/integ/subflow_test.go @@ -159,6 +159,7 @@ func doTestSubFlowCondition( completedOutput, err := common.LoadBlobsValue( ctx, flowClient, + parentFlowID, firstResult.GetResults()[0].GetCompletedStepOutput(), ) require.NoError(t, err) diff --git a/server/integ/wait_for_attribute_test.go b/server/integ/wait_for_attribute_test.go index d934bc580..add99feee 100644 --- a/server/integ/wait_for_attribute_test.go +++ b/server/integ/wait_for_attribute_test.go @@ -300,7 +300,7 @@ func doTestWaitForAttributeOperators(t *testing.T) { }{ {name: "unspecified", match: waitForAttributeMatch("match-int", dexpb.AttributeMatchOperator_ATTRIBUTE_MATCH_OPERATOR_UNSPECIFIED, intValue(0))}, {name: "string ordering", match: waitForAttributeMatch("match-string", dexpb.AttributeMatchOperator_ATTRIBUTE_MATCH_OPERATOR_GREATER_THAN, stringValue("a"))}, - {name: "object", match: equalAttributeMatch("match-string", &dexpb.Value{Kind: &dexpb.Value_ObjValue{ObjValue: &dexpb.EncodedObject{Encoding: "json", Payload: []byte("{}")}}})}, + {name: "object", match: equalAttributeMatch("match-string", &dexpb.Value{Kind: &dexpb.Value_ObjValue{ObjValue: &dexpb.EncodedObject{Encoding: "j", Payload: []byte("{}")}}})}, {name: "null", match: equalAttributeMatch("match-string", &dexpb.Value{Kind: &dexpb.Value_NullValue{}})}, {name: "non-finite", match: equalAttributeMatch("match-double", doubleValue(math.Inf(1)))}, } diff --git a/server/integ/web_api_test.go b/server/integ/web_api_test.go index 75a210e3d..3327b1290 100644 --- a/server/integ/web_api_test.go +++ b/server/integ/web_api_test.go @@ -12,6 +12,7 @@ package integ import ( "context" + "encoding/base64" "fmt" "os" "path/filepath" @@ -1005,7 +1006,7 @@ func testWebParallelAttributeSnapshots(t *testing.T, backendType service.Backend require.Equal(t, "snapshot", executeEvent.GetInput().GetAttributes()[0].GetKey()) values = append(values, executeEvent.GetInput().GetAttributes()[0].GetValue()) } - loadedValues := loadWebBlobValues(t, ctx, runtime.FlowClient, values) + loadedValues := loadWebBlobValues(t, ctx, runtime.FlowClient, flowID, values) for _, executeEvent := range executeEvents { require.Equal( t, @@ -1240,7 +1241,7 @@ func testWebConditionResults( for _, channelResult := range executeInput.GetConditionResults().GetChannelResults() { values = append(values, channelResult.GetValues()...) } - loadedValues := loadWebBlobValues(t, ctx, runtime.FlowClient, values) + loadedValues := loadWebBlobValues(t, ctx, runtime.FlowClient, flowID, values) require.Equal( t, largeWebTestValue("condition-step-input"), @@ -1399,7 +1400,7 @@ func testWebHistoryAndSummary( Attributes: []*dexpb.AttributeWrite{{ Key: "web-test-attribute", Value: &dexpb.Value{Kind: &dexpb.Value_ObjValue{ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: attributePayload, }}}, }}, @@ -1459,10 +1460,13 @@ func testWebHistoryAndSummary( require.NotEmpty(t, initialStart.GetStepInput().GetInternalBlobIdForStringValue()) require.Len(t, initialStart.GetInitialAttributes(), 1) require.NotEmpty(t, initialStart.GetInitialAttributes()[0].GetValue().GetInternalBlobIdForObjValue()) - loadedStartValues, err := runtime.FlowClient.LoadBlobs(ctx, &dexpb.LoadBlobsRequest{Values: []*dexpb.Value{ - initialStart.GetStepInput(), - initialStart.GetInitialAttributes()[0].GetValue(), - }}) + loadedStartValues, err := runtime.FlowClient.LoadBlobs(ctx, &dexpb.LoadBlobsRequest{Entries: blobRequestEntries( + flowID, + []*dexpb.Value{ + initialStart.GetStepInput(), + initialStart.GetInitialAttributes()[0].GetValue(), + }, + )}) require.NoError(t, err) require.Equal(t, stepInput, loadedStartValues.GetValues()[initialStart.GetStepInput().GetInternalBlobIdForStringValue()].GetStringValue()) require.Equal(t, attributePayload, loadedStartValues.GetValues()[initialStart.GetInitialAttributes()[0].GetValue().GetInternalBlobIdForObjValue()].GetObjValue().GetPayload()) @@ -1481,6 +1485,7 @@ func testWebHistoryAndSummary( t, ctx, runtime.FlowClient, + flowID, firstStep.GetInput().GetStepInput(), firstStep.GetInput().GetAttributes(), stepInput, @@ -1490,6 +1495,7 @@ func testWebHistoryAndSummary( t, ctx, runtime.FlowClient, + flowID, firstExecute.GetInput().GetStepInput(), firstExecute.GetInput().GetAttributes(), stepInput, @@ -1534,6 +1540,7 @@ func testWebHistoryAndSummary( t, ctx, runtime.FlowClient, + flowID, continuedStep.GetInput().GetStepInput(), continuedStep.GetInput().GetAttributes(), stepInput, @@ -1543,6 +1550,7 @@ func testWebHistoryAndSummary( t, ctx, runtime.FlowClient, + flowID, continuedExecute.GetInput().GetStepInput(), continuedExecute.GetInput().GetAttributes(), stepInput, @@ -1553,7 +1561,7 @@ func testWebHistoryAndSummary( require.NotEmpty(t, closeOutput.GetInternalBlobIdForStringValue()) loadedCloseOutput, err := runtime.FlowClient.LoadBlobs( ctx, - &dexpb.LoadBlobsRequest{Values: []*dexpb.Value{closeOutput}}, + &dexpb.LoadBlobsRequest{Entries: blobRequestEntries(flowID, []*dexpb.Value{closeOutput})}, ) require.NoError(t, err) require.Equal( @@ -1568,12 +1576,12 @@ func testWebHistoryAndSummary( )[1] partiallyLoaded, err := runtime.FlowClient.LoadBlobs( ctx, - &dexpb.LoadBlobsRequest{Values: []*dexpb.Value{ + &dexpb.LoadBlobsRequest{Entries: blobRequestEntries(flowID, []*dexpb.Value{ closeOutput, {Kind: &dexpb.Value_InternalBlobIdForStringValue{ InternalBlobIdForStringValue: unknownStoreBlobID, }}, - }}, + })}, ) require.NoError(t, err) require.Len(t, partiallyLoaded.GetValues(), 1) @@ -1593,15 +1601,19 @@ func testWebHistoryAndSummary( if durability == dexpb.StepDurability_STEP_DURABILITY_ASYNC && lazyLoading && *dexServerAddress == "" { stepInputBlobID := firstStep.GetInput().GetStepInput().GetInternalBlobIdForStringValue() require.NotEmpty(t, stepInputBlobID) - stepInputObjectPath := strings.SplitN(stepInputBlobID, "|", 2)[1] - require.NoError(t, os.Remove(filepath.Join(blobDirectory, "default", stepInputObjectPath))) + stepInputLocator := strings.SplitN(stepInputBlobID, "|", 2)[1] + locatorParts := strings.SplitN(stepInputLocator, "/", 2) + stepInputObjectPath := locatorParts[0] + "$" + encodeWebPathPart(flowID) + "/" + locatorParts[1] + require.NoError(t, os.Remove(filepath.Join(blobDirectory, "default", "v2", stepInputObjectPath))) valueMissingEvents, _ := getAllWebHistoryEvents( t, ctx, runtime.FlowClient, flowID, startResponse.GetRunId(), ) require.False(t, firstStepEvent(valueMissingEvents).GetInput().GetUnavailable()) missingValue, loadErr := runtime.FlowClient.LoadBlobs( ctx, - &dexpb.LoadBlobsRequest{Values: []*dexpb.Value{firstStep.GetInput().GetStepInput()}}, + &dexpb.LoadBlobsRequest{Entries: blobRequestEntries( + flowID, []*dexpb.Value{firstStep.GetInput().GetStepInput()}, + )}, ) require.NoError(t, loadErr) require.Empty(t, missingValue.GetValues()) @@ -1609,7 +1621,7 @@ func testWebHistoryAndSummary( require.NoError(t, os.RemoveAll(blobDirectory)) unavailableBlobs, loadErr := runtime.FlowClient.LoadBlobs( ctx, - &dexpb.LoadBlobsRequest{Values: []*dexpb.Value{closeOutput}}, + &dexpb.LoadBlobsRequest{Entries: blobRequestEntries(flowID, []*dexpb.Value{closeOutput})}, ) require.NoError(t, loadErr) require.Empty(t, unavailableBlobs.GetValues()) @@ -1697,7 +1709,7 @@ func testWebCurrentState(t *testing.T, backendType service.BackendType, lazyLoad for _, result := range channelResults { values = append(values, result.GetValues()...) } - loadedValues := loadWebBlobValues(t, ctx, runtime.FlowClient, values) + loadedValues := loadWebBlobValues(t, ctx, runtime.FlowClient, flowID, values) for index, result := range channelResults { require.Equal(t, signal.SignalName, result.GetChannelName()) require.Equal(t, dexpb.ConditionStatus_CONDITION_STATUS_COMPLETED, result.GetConditionStatus()) @@ -1708,7 +1720,7 @@ func testWebCurrentState(t *testing.T, backendType service.BackendType, lazyLoad resolvedWebStringValue(result.GetValues()[0], loadedValues), ) } - assertExternalChannelValuesLoad(t, ctx, runtime.FlowClient, events) + assertExternalChannelValuesLoad(t, ctx, runtime.FlowClient, flowID, events) } func testWebSetAttributesHistory(t *testing.T, backendType service.BackendType) { @@ -1921,6 +1933,7 @@ func assertStepMethodRequestValues( t *testing.T, ctx context.Context, flowClient dexpb.FlowServiceClient, + flowID string, stepInput *dexpb.Value, attributes []*dexpb.KV, expectedInput string, @@ -1933,6 +1946,7 @@ func assertStepMethodRequestValues( t, ctx, flowClient, + flowID, []*dexpb.Value{stepInput, attributes[0].GetValue()}, ) require.Equal(t, expectedInput, resolvedWebStringValue(stepInput, loadedValues)) @@ -1947,6 +1961,7 @@ func loadWebBlobValues( t *testing.T, ctx context.Context, flowClient dexpb.FlowServiceClient, + flowID string, values []*dexpb.Value, ) map[string]*dexpb.Value { t.Helper() @@ -1968,12 +1983,26 @@ func loadWebBlobValues( if len(blobValues) == 0 { return nil } - response, err := flowClient.LoadBlobs(ctx, &dexpb.LoadBlobsRequest{Values: blobValues}) + response, err := flowClient.LoadBlobs(ctx, &dexpb.LoadBlobsRequest{ + Entries: blobRequestEntries(flowID, blobValues), + }) require.NoError(t, err) require.Len(t, response.GetValues(), len(blobValues)) return response.GetValues() } +func blobRequestEntries(flowID string, values []*dexpb.Value) []*dexpb.LoadBlobRequestEntry { + entries := make([]*dexpb.LoadBlobRequestEntry, 0, len(values)) + for _, value := range values { + entries = append(entries, &dexpb.LoadBlobRequestEntry{FlowId: flowID, BlobValue: value}) + } + return entries +} + +func encodeWebPathPart(value string) string { + return base64.RawURLEncoding.EncodeToString([]byte(value)) +} + func resolvedWebStringValue(value *dexpb.Value, loadedValues map[string]*dexpb.Value) string { if blobID := value.GetInternalBlobIdForStringValue(); blobID != "" { return loadedValues[blobID].GetStringValue() @@ -1985,6 +2014,7 @@ func assertExternalChannelValuesLoad( t *testing.T, ctx context.Context, flowClient dexpb.FlowServiceClient, + flowID string, events []*dexpb.FlowHistoryEvent, ) { t.Helper() @@ -1998,7 +2028,9 @@ func assertExternalChannelValuesLoad( for _, value := range values { require.NotEmpty(t, value.GetInternalBlobIdForStringValue()) } - response, err := flowClient.LoadBlobs(ctx, &dexpb.LoadBlobsRequest{Values: values}) + response, err := flowClient.LoadBlobs(ctx, &dexpb.LoadBlobsRequest{ + Entries: blobRequestEntries(flowID, values), + }) require.NoError(t, err) for index, value := range values { loaded := response.GetValues()[value.GetInternalBlobIdForStringValue()] diff --git a/server/integ/wf_timeout_test.go b/server/integ/wf_timeout_test.go index 4255a6de2..25af89050 100644 --- a/server/integ/wf_timeout_test.go +++ b/server/integ/wf_timeout_test.go @@ -537,7 +537,7 @@ func doTestFlowTimeoutHandlerExecutionOptions( if shouldRecover { require.Equal(t, "recovered", result.GetResults()[0].GetCompletedStepOutput().GetStringValue()) recoveryRequest := receiveTimeoutExecuteRequest(t, ctx, workerHandler.recoveryRequests) - require.Equal(t, "json", recoveryRequest.GetStepInput().GetObjValue().GetEncoding()) + require.Equal(t, "j", recoveryRequest.GetStepInput().GetObjValue().GetEncoding()) require.Equal(t, []byte("null"), recoveryRequest.GetStepInput().GetObjValue().GetPayload()) require.NotNil(t, recoveryRequest.GetContext().GetRecoveryError()) require.Contains(t, recoveryRequest.GetContext().GetRecoveryError().GetDetail(), "retryable timeout handler failure") diff --git a/server/integ/workflow/command_thread_completion/routers.go b/server/integ/workflow/command_thread_completion/routers.go index 54dc46083..52e32b77c 100644 --- a/server/integ/workflow/command_thread_completion/routers.go +++ b/server/integ/workflow/command_thread_completion/routers.go @@ -51,7 +51,7 @@ const ( ) var testChannelValue = &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: []byte("channel-data"), } diff --git a/server/integ/workflow/common/load_blobs.go b/server/integ/workflow/common/load_blobs.go index 59698a037..318360f83 100644 --- a/server/integ/workflow/common/load_blobs.go +++ b/server/integ/workflow/common/load_blobs.go @@ -33,6 +33,7 @@ func BlobIdFromValue(value *dexpb.Value) string { func LoadBlobsValue( ctx context.Context, client dexpb.FlowServiceClient, + flowID string, value *dexpb.Value, ) (*dexpb.Value, error) { if value == nil { @@ -46,7 +47,10 @@ func LoadBlobsValue( return nil, fmt.Errorf("FlowServiceClient is required to LoadBlobs") } resp, err := client.LoadBlobs(ctx, &dexpb.LoadBlobsRequest{ - Values: []*dexpb.Value{blobArmCopy(value)}, + Entries: []*dexpb.LoadBlobRequestEntry{{ + FlowId: flowID, + BlobValue: blobArmCopy(value), + }}, }) if err != nil { return nil, err @@ -75,9 +79,10 @@ func blobArmCopy(value *dexpb.Value) *dexpb.Value { func ObjPayloadString( ctx context.Context, client dexpb.FlowServiceClient, + flowID string, value *dexpb.Value, ) (string, error) { - resolved, err := LoadBlobsValue(ctx, client, value) + resolved, err := LoadBlobsValue(ctx, client, flowID, value) if err != nil { return "", err } diff --git a/server/integ/workflow/conditional_close/routers.go b/server/integ/workflow/conditional_close/routers.go index 79554f281..97dc5918d 100644 --- a/server/integ/workflow/conditional_close/routers.go +++ b/server/integ/workflow/conditional_close/routers.go @@ -41,7 +41,7 @@ const ( var TestInput = &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: []byte("test-data"), }, }, @@ -179,7 +179,7 @@ func stepInputString(stepInput *dexpb.Value) string { return stringValue.StringValue } if objValue, ok := stepInput.Kind.(*dexpb.Value_ObjValue); ok { - if objValue.ObjValue.GetEncoding() == "json" { + if objValue.ObjValue.GetEncoding() == "j" { return string(objValue.ObjValue.GetPayload()) } } diff --git a/server/integ/workflow/interstate/routers.go b/server/integ/workflow/interstate/routers.go index cd139699e..1ddad9862 100644 --- a/server/integ/workflow/interstate/routers.go +++ b/server/integ/workflow/interstate/routers.go @@ -49,12 +49,12 @@ const ( ) var TestVal1 = &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: []byte("test-value1"), } var TestVal2 = &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: []byte("test-value2"), } diff --git a/server/integ/workflow/locking/routers.go b/server/integ/workflow/locking/routers.go index d8185d35b..b04c4d4fe 100644 --- a/server/integ/workflow/locking/routers.go +++ b/server/integ/workflow/locking/routers.go @@ -114,7 +114,7 @@ func (h *handler) InvokeWorkerRPC( } inputObj := request.GetInput().GetObjValue() - if inputObj == nil || inputObj.GetEncoding() != "json" { + if inputObj == nil || inputObj.GetEncoding() != "j" { return nil, status.Error(codes.InvalidArgument, "input is incorrect") } inputPayload := string(inputObj.GetPayload()) @@ -418,7 +418,7 @@ func jsonObjValue(payload string) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: []byte(payload), }, }, diff --git a/server/integ/workflow/parallel/routers.go b/server/integ/workflow/parallel/routers.go index b28a2aeea..88477a851 100644 --- a/server/integ/workflow/parallel/routers.go +++ b/server/integ/workflow/parallel/routers.go @@ -158,7 +158,7 @@ func parallelCloseInput(stepType string) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: []byte("from " + stepType), }, }, diff --git a/server/integ/workflow/persistence/routers.go b/server/integ/workflow/persistence/routers.go index 5639c48c0..c50a3ef2f 100644 --- a/server/integ/workflow/persistence/routers.go +++ b/server/integ/workflow/persistence/routers.go @@ -316,7 +316,7 @@ func jsonObjValue(payload string) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: []byte(payload), }, }, diff --git a/server/integ/workflow/persistence_loading_policy/routers.go b/server/integ/workflow/persistence_loading_policy/routers.go index 160657e66..c14f8557c 100644 --- a/server/integ/workflow/persistence_loading_policy/routers.go +++ b/server/integ/workflow/persistence_loading_policy/routers.go @@ -248,7 +248,7 @@ func jsonObjValue(payload string) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: []byte(payload), }, }, diff --git a/server/integ/workflow/reset/routers.go b/server/integ/workflow/reset/routers.go index f3c3b6135..b9a44ef85 100644 --- a/server/integ/workflow/reset/routers.go +++ b/server/integ/workflow/reset/routers.go @@ -106,7 +106,7 @@ func (h *handler) InvokeExecuteMethod( updatedInput := &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: []byte(fmt.Sprintf("%v", counter+1)), }, }, @@ -143,7 +143,7 @@ func stepInputString(stepInput *dexpb.Value) string { return stringValue.StringValue } if objValue, ok := stepInput.Kind.(*dexpb.Value_ObjValue); ok { - if objValue.ObjValue.GetEncoding() == "json" { + if objValue.ObjValue.GetEncoding() == "j" { return string(objValue.ObjValue.GetPayload()) } } diff --git a/server/integ/workflow/rpc-external-storage/routers.go b/server/integ/workflow/rpc-external-storage/routers.go index 3a65cb4ad..b78c4189d 100644 --- a/server/integ/workflow/rpc-external-storage/routers.go +++ b/server/integ/workflow/rpc-external-storage/routers.go @@ -96,7 +96,7 @@ func (h *handler) InvokeWorkerRPC( } h.testData.Store(request.GetRpcName()+"-raw-input", request.GetInput()) - resolvedInput, err := common.LoadBlobsValue(ctx, h.flowClient, request.GetInput()) + resolvedInput, err := common.LoadBlobsValue(ctx, h.flowClient, flowContext.GetFlowId(), request.GetInput()) if err != nil { return nil, status.Errorf(codes.Internal, "LoadBlobs for RPC input: %v", err) } @@ -107,7 +107,7 @@ func (h *handler) InvokeWorkerRPC( if attribute.GetValue().GetKind() == nil { return nil, status.Error(codes.InvalidArgument, "RPC attribute value kind is required") } - resolved, err := common.LoadBlobsValue(ctx, h.flowClient, attribute.GetValue()) + resolved, err := common.LoadBlobsValue(ctx, h.flowClient, flowContext.GetFlowId(), attribute.GetValue()) if err != nil { return nil, status.Errorf(codes.Internal, "LoadBlobs for %s: %v", attribute.GetKey(), err) } @@ -122,7 +122,9 @@ func (h *handler) InvokeWorkerRPC( for channelName, values := range request.GetLoadedChannelMessages() { resolvedMessages := make([]*dexpb.ChannelMessage, 0, len(values.GetMessages())) for _, message := range values.GetMessages() { - resolved, loadErr := common.LoadBlobsValue(ctx, h.flowClient, message.GetValue()) + resolved, loadErr := common.LoadBlobsValue( + ctx, h.flowClient, flowContext.GetFlowId(), message.GetValue(), + ) if loadErr != nil { return nil, status.Errorf(codes.Internal, "LoadBlobs for %s: %v", channelName, loadErr) } @@ -240,7 +242,7 @@ func jsonStringValue(value string) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: payload, }, }, diff --git a/server/integ/workflow/rpc/routers.go b/server/integ/workflow/rpc/routers.go index 6d0ba901d..f69e0ad65 100644 --- a/server/integ/workflow/rpc/routers.go +++ b/server/integ/workflow/rpc/routers.go @@ -332,7 +332,7 @@ func jsonObjValue(payload string) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: []byte(payload), }, }, diff --git a/server/integ/workflow/s3-get-set-data-attributes/routers.go b/server/integ/workflow/s3-get-set-data-attributes/routers.go index d7a72782c..47bc6d65e 100644 --- a/server/integ/workflow/s3-get-set-data-attributes/routers.go +++ b/server/integ/workflow/s3-get-set-data-attributes/routers.go @@ -146,7 +146,7 @@ func jsonObjValue(payload string) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: []byte(payload), }, }, diff --git a/server/integ/workflow/s3-init-data-attributes/routers.go b/server/integ/workflow/s3-init-data-attributes/routers.go index a34e7ee72..09328f092 100644 --- a/server/integ/workflow/s3-init-data-attributes/routers.go +++ b/server/integ/workflow/s3-init-data-attributes/routers.go @@ -91,7 +91,9 @@ func (h *handler) InvokeWaitForMethod( if stepType == State1 { h.invokeHistory.Store(stepType+"_waitFor_input", request.GetStepInput()) - if err := h.validateInitialAttributes(ctx, request.GetAttributes(), "S1 WaitUntil", "S1_waitFor"); err != nil { + if err := h.validateInitialAttributes( + ctx, request.GetContext().GetFlowId(), request.GetAttributes(), "S1 WaitUntil", "S1_waitFor", + ); err != nil { return nil, err } return &dexpb.InvokeWaitForMethodResponse{}, nil @@ -141,7 +143,9 @@ func (h *handler) InvokeExecuteMethod( if stepType == State2 { h.invokeHistory.Store(stepType+"_execute_input", request.GetStepInput()) - if err := h.validateInitialAttributes(ctx, request.GetAttributes(), "S2 Execute", "S2_execute"); err != nil { + if err := h.validateInitialAttributes( + ctx, request.GetContext().GetFlowId(), request.GetAttributes(), "S2 Execute", "S2_execute", + ); err != nil { return nil, err } return &dexpb.InvokeExecuteMethodResponse{ @@ -183,7 +187,11 @@ func (h *handler) incrementInvokeHistory(key string) { } func (h *handler) validateInitialAttributes( - ctx context.Context, attributes []*dexpb.KV, logPrefix, storePrefix string, + ctx context.Context, + flowID string, + attributes []*dexpb.KV, + logPrefix string, + storePrefix string, ) error { log.Printf("%s: Received %d data attributes, validating they match initial values", logPrefix, len(attributes)) @@ -193,7 +201,7 @@ func (h *handler) validateInitialAttributes( validationErrors := []string{} for _, attribute := range attributes { - receivedData, err := common.ObjPayloadString(ctx, h.flowClient, attribute.GetValue()) + receivedData, err := common.ObjPayloadString(ctx, h.flowClient, flowID, attribute.GetValue()) if err != nil { return status.Errorf(codes.Internal, "LoadBlobs for %s: %v", attribute.GetKey(), err) } @@ -265,7 +273,7 @@ func jsonObjValue(payload string) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: []byte(payload), }, }, diff --git a/server/integ/workflow/s3-start-input/routers.go b/server/integ/workflow/s3-start-input/routers.go index 2c15b73d3..b3e58c3b0 100644 --- a/server/integ/workflow/s3-start-input/routers.go +++ b/server/integ/workflow/s3-start-input/routers.go @@ -64,7 +64,9 @@ func (h *handler) InvokeWaitForMethod( if request.GetFlowType() == WorkflowType && request.GetStepType() == State1 { h.incrementInvokeHistory(State1 + "_waitFor") - resolved, err := common.LoadBlobsValue(ctx, h.flowClient, request.GetStepInput()) + resolved, err := common.LoadBlobsValue( + ctx, h.flowClient, stepContext.GetFlowId(), request.GetStepInput(), + ) if err != nil { return nil, status.Errorf(codes.Internal, "LoadBlobs step input: %v", err) } @@ -94,7 +96,9 @@ func (h *handler) InvokeExecuteMethod( } h.incrementInvokeHistory(request.GetStepType() + "_execute") - resolved, err := common.LoadBlobsValue(ctx, h.flowClient, request.GetStepInput()) + resolved, err := common.LoadBlobsValue( + ctx, h.flowClient, stepContext.GetFlowId(), request.GetStepInput(), + ) if err != nil { return nil, status.Errorf(codes.Internal, "LoadBlobs step input: %v", err) } diff --git a/server/integ/workflow/s3-state-input-optimization/routers.go b/server/integ/workflow/s3-state-input-optimization/routers.go index 0a71069ca..71fc5c74d 100644 --- a/server/integ/workflow/s3-state-input-optimization/routers.go +++ b/server/integ/workflow/s3-state-input-optimization/routers.go @@ -86,7 +86,9 @@ func (h *handler) InvokeWaitForMethod( } h.incrementInvokeHistory(stepType + "_waitFor") - if err := h.storeStepInputData(ctx, stepType, request.GetStepInput()); err != nil { + if err := h.storeStepInputData( + ctx, request.GetContext().GetFlowId(), stepType, request.GetStepInput(), + ); err != nil { return nil, err } @@ -176,8 +178,13 @@ func (h *handler) incrementInvokeHistory(key string) { h.invokeHistory.Store(key, int64(1)) } -func (h *handler) storeStepInputData(ctx context.Context, stepType string, stepInput *dexpb.Value) error { - inputData, err := common.ObjPayloadString(ctx, h.flowClient, stepInput) +func (h *handler) storeStepInputData( + ctx context.Context, + flowID string, + stepType string, + stepInput *dexpb.Value, +) error { + inputData, err := common.ObjPayloadString(ctx, h.flowClient, flowID, stepInput) if err != nil { return status.Errorf(codes.Internal, "LoadBlobs step input: %v", err) } diff --git a/server/integ/workflow/s3-upsert-data-objects/routers.go b/server/integ/workflow/s3-upsert-data-objects/routers.go index 34157cd25..e85fd02f6 100644 --- a/server/integ/workflow/s3-upsert-data-objects/routers.go +++ b/server/integ/workflow/s3-upsert-data-objects/routers.go @@ -88,7 +88,9 @@ func (h *handler) InvokeWaitForMethod( } if stepType == State2 { - if err := h.validateUpsertedAttributes(ctx, request.GetAttributes()); err != nil { + if err := h.validateUpsertedAttributes( + ctx, request.GetContext().GetFlowId(), request.GetAttributes(), + ); err != nil { return nil, err } return &dexpb.InvokeWaitForMethodResponse{}, nil @@ -185,7 +187,11 @@ func (h *handler) incrementInvokeHistory(key string) { h.invokeHistory.Store(key, int64(1)) } -func (h *handler) validateUpsertedAttributes(ctx context.Context, attributes []*dexpb.KV) error { +func (h *handler) validateUpsertedAttributes( + ctx context.Context, + flowID string, + attributes []*dexpb.KV, +) error { log.Printf("S2 WaitUntil: Received %d data objects, validating they match upserted values", len(attributes)) foundLargeObj1 := false @@ -193,7 +199,7 @@ func (h *handler) validateUpsertedAttributes(ctx context.Context, attributes []* foundSmallObj3 := false for _, attribute := range attributes { - receivedData, err := common.ObjPayloadString(ctx, h.flowClient, attribute.GetValue()) + receivedData, err := common.ObjPayloadString(ctx, h.flowClient, flowID, attribute.GetValue()) if err != nil { return status.Errorf(codes.Internal, "LoadBlobs for %s: %v", attribute.GetKey(), err) } @@ -257,7 +263,7 @@ func jsonObjValue(payload string) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: []byte(payload), }, }, diff --git a/server/integ/workflow/signal/routers.go b/server/integ/workflow/signal/routers.go index ffea4bc25..51bb38cc2 100644 --- a/server/integ/workflow/signal/routers.go +++ b/server/integ/workflow/signal/routers.go @@ -72,7 +72,7 @@ func (h *handler) InvokeWorkerRPC( Output: &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: data, }, }, @@ -88,7 +88,7 @@ func (h *handler) InvokeWorkerRPC( Output: &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: data, }, }, diff --git a/server/integ/workflow/wait_for_state_completion/routers.go b/server/integ/workflow/wait_for_state_completion/routers.go index 68d73215c..e24cebb7d 100644 --- a/server/integ/workflow/wait_for_state_completion/routers.go +++ b/server/integ/workflow/wait_for_state_completion/routers.go @@ -162,7 +162,7 @@ func stepInputString(stepInput *dexpb.Value) string { return stringValue.StringValue } if objValue, ok := stepInput.Kind.(*dexpb.Value_ObjValue); ok { - if objValue.ObjValue.GetEncoding() == "json" { + if objValue.ObjValue.GetEncoding() == "j" { return string(objValue.ObjValue.GetPayload()) } } diff --git a/server/integ/workflow/wf_state_options_data_attributes_loading/routers.go b/server/integ/workflow/wf_state_options_data_attributes_loading/routers.go index 92eef17a5f..ee50f007b 100644 --- a/server/integ/workflow/wf_state_options_data_attributes_loading/routers.go +++ b/server/integ/workflow/wf_state_options_data_attributes_loading/routers.go @@ -234,7 +234,7 @@ func dataObjectWrite(key, payload string) *dexpb.AttributeWrite { Value: &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: []byte(payload), }, }, diff --git a/server/integ/workflow/wf_state_options_search_attributes_loading/routers.go b/server/integ/workflow/wf_state_options_search_attributes_loading/routers.go index fa70245ea..91c8b5f4d 100644 --- a/server/integ/workflow/wf_state_options_search_attributes_loading/routers.go +++ b/server/integ/workflow/wf_state_options_search_attributes_loading/routers.go @@ -209,7 +209,7 @@ func upsertSearchAttributes(keywordArraySearchAttributeKey string) []*dexpb.Attr Value: &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: keywordArrayPayload, }, }, diff --git a/server/script/http/local/home.http b/server/script/http/local/home.http index 40bb142e7..72a836d12 100644 --- a/server/script/http/local/home.http +++ b/server/script/http/local/home.http @@ -12,7 +12,7 @@ Content-Type: application/json "dexWorkerUrl": "http://localhost:8080", "startStateId": "test_state_1", "stateInput": { - "encoding": "json", + "encoding": "j", "data": "\"a string\"" } } diff --git a/server/service/api/service.go b/server/service/api/service.go index 81a4b437a..9a4b4b180 100644 --- a/server/service/api/service.go +++ b/server/service/api/service.go @@ -645,7 +645,7 @@ func (s *serviceImpl) GetChannelMessages( for _, message := range response.GetMessages() { values = append(values, message.GetValue()) } - if err := blobstore.HydrateValues(ctx, values, s.store); err != nil { + if err := blobstore.HydrateFlowValues(ctx, req.GetFlowId(), values, s.store); err != nil { return nil, s.handleError(err) } } @@ -1075,7 +1075,7 @@ func (s *serviceImpl) GetAttributes( } attributes := queryResponse.GetAttributes() if !s.blobStoreCfg.EffectiveLazyLoading() { - if err := blobstore.HydrateKVs(ctx, attributes, s.store); err != nil { + if err := blobstore.HydrateKVs(ctx, req.GetFlowId(), attributes, s.store); err != nil { return nil, s.handleError(err) } } @@ -1123,16 +1123,19 @@ func (s *serviceImpl) SetAttributes( } func (s *serviceImpl) LoadBlobs(ctx context.Context, req *dexpb.LoadBlobsRequest) (*dexpb.LoadBlobsResponse, error) { - if req == nil || len(req.GetValues()) == 0 { + if req == nil || len(req.GetEntries()) == 0 { return &dexpb.LoadBlobsResponse{Values: map[string]*dexpb.Value{}}, nil } - values := make(map[string]*dexpb.Value, len(req.GetValues())) - for _, value := range req.GetValues() { - blobId, hydrateValue, err := blobArmForLoad(value) + values := make(map[string]*dexpb.Value, len(req.GetEntries())) + for _, entry := range req.GetEntries() { + if entry == nil || entry.GetFlowId() == "" { + return nil, makeInvalidRequestError("Flow ID is required for every Blob") + } + blobId, hydrateValue, err := blobArmForLoad(entry.GetBlobValue()) if err != nil { return nil, makeInvalidRequestError(err.Error()) } - if err := blobstore.HydrateValue(ctx, hydrateValue, s.store); err != nil { + if err := blobstore.HydrateValue(ctx, entry.GetFlowId(), hydrateValue, s.store); err != nil { if blobstore.IsObjectUnavailable(err) { continue } @@ -1492,7 +1495,7 @@ func (s *serviceImpl) InvokeRPC( response, err := s.doInvokeRPC(ctx, req, runID, isTransactional) if err == nil { if !s.blobStoreCfg.EffectiveLazyLoading() { - if err := blobstore.HydrateValue(ctx, response.GetOutput(), s.store); err != nil { + if err := blobstore.HydrateValue(ctx, req.GetFlowId(), response.GetOutput(), s.store); err != nil { return nil, s.handleError(err) } } diff --git a/server/service/client/temporal/memo_test.go b/server/service/client/temporal/memo_test.go index fdeaa468a..a93ab84b4 100644 --- a/server/service/client/temporal/memo_test.go +++ b/server/service/client/temporal/memo_test.go @@ -74,7 +74,7 @@ func TestGetMemoAndDecryptIfNeeded(t *testing.T) { client := &temporalClient{dataConverter: cryptoConverter, memoEncryption: true} encoded := &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: []byte("TestValue"), } expected := &dexpb.Value{Kind: &dexpb.Value_ObjValue{ObjValue: encoded}} diff --git a/server/service/common/attributestore/manager.go b/server/service/common/attributestore/manager.go index d84eade41..14c065d6c 100644 --- a/server/service/common/attributestore/manager.go +++ b/server/service/common/attributestore/manager.go @@ -632,7 +632,7 @@ func (c columnSchema) convertObject( if object == nil { return nil, fmt.Errorf("object is missing") } - if strings.EqualFold(object.GetEncoding(), "json") { + if object.GetEncoding() == "j" { if !json.Valid(object.GetPayload()) { return nil, fmt.Errorf("JSON payload is invalid") } diff --git a/server/service/common/attributestore/manager_integ_test.go b/server/service/common/attributestore/manager_integ_test.go index feda1f7fe..02b6cb47e 100644 --- a/server/service/common/attributestore/manager_integ_test.go +++ b/server/service/common/attributestore/manager_integ_test.go @@ -174,8 +174,8 @@ func writeIntegrationBatch(t *testing.T, manager *Manager, configName, flowID st {ConfigName: configName, Key: "count_value", Value: intValue(42)}, {ConfigName: configName, Key: "ratio", Value: doubleValue(2.5)}, {ConfigName: configName, Key: "active", Value: boolValue(true)}, - {ConfigName: configName, Key: "logged_at", Value: objectValue("json", `"2026-08-11T15:30:00Z"`)}, - {ConfigName: configName, Key: "json_value", Value: objectValue("json", `{"ok":true}`)}, + {ConfigName: configName, Key: "logged_at", Value: objectValue("j", `"2026-08-11T15:30:00Z"`)}, + {ConfigName: configName, Key: "json_value", Value: objectValue("j", `{"ok":true}`)}, {ConfigName: configName, Key: "binary_value", Value: objectValue("proto", "bytes")}, {ConfigName: configName, Key: "nullable_value", Value: nullValue()}, {ConfigName: configName, Key: "missing", Value: stringValue("filtered")}, diff --git a/server/service/common/attributestore/manager_test.go b/server/service/common/attributestore/manager_test.go index 2c1ca6791..99497cb6e 100644 --- a/server/service/common/attributestore/manager_test.go +++ b/server/service/common/attributestore/manager_test.go @@ -63,9 +63,9 @@ func TestColumnConversionBoundaries(t *testing.T) { require.ErrorContains(t, err, "bool") jsonColumn := columnSchema{dataType: "jsonb"} - _, err = jsonColumn.convert(objectValue("json", `{"valid":true}`), config.AttributeStoreTypePostgres) + _, err = jsonColumn.convert(objectValue("j", `{"valid":true}`), config.AttributeStoreTypePostgres) require.NoError(t, err) - _, err = jsonColumn.convert(objectValue("json", `{invalid`), config.AttributeStoreTypePostgres) + _, err = jsonColumn.convert(objectValue("j", `{invalid`), config.AttributeStoreTypePostgres) require.ErrorContains(t, err, "invalid") postgresDatetime := columnSchema{dataType: "timestamp with time zone"} @@ -76,13 +76,13 @@ func TestColumnConversionBoundaries(t *testing.T) { require.NoError(t, err) require.Equal(t, time.Date(2026, 8, 11, 15, 30, 0, 123456789, time.UTC), datetime) datetime, err = postgresDatetime.convert( - objectValue("json", `"2026-08-11T15:30:00Z"`), + objectValue("j", `"2026-08-11T15:30:00Z"`), config.AttributeStoreTypePostgres, ) require.NoError(t, err) require.Equal(t, time.Date(2026, 8, 11, 15, 30, 0, 0, time.UTC), datetime) datetime, err = postgresDatetime.convert( - objectValue("json", `1786462200.123456789`), + objectValue("j", `1786462200.123456789`), config.AttributeStoreTypePostgres, ) require.NoError(t, err) diff --git a/server/service/common/blobstore/blob_cache_integ_test.go b/server/service/common/blobstore/blob_cache_integ_test.go index c491207e7..1a3a3d08e 100644 --- a/server/service/common/blobstore/blob_cache_integ_test.go +++ b/server/service/common/blobstore/blob_cache_integ_test.go @@ -40,29 +40,32 @@ func TestS3AttributeBlobCacheIntegration(t *testing.T) { t.Run("write through serves data after source deletion", func(t *testing.T) { payload := []byte("write-through payload") + flowID := uniqueCacheWorkflowID("write-through") storeID, path, err := store.WriteObject( ctx, - uniqueCacheWorkflowID("write-through"), + flowID, "write-through", payload, ) require.NoError(t, err) - deleteS3Object(t, ctx, store, path) - loaded, err := store.ReadObject(ctx, storeID, path) + deleteS3ValueObject(t, ctx, store, flowID, path) + loaded, err := store.ReadObject(ctx, storeID, flowID, path) require.NoError(t, err) require.Equal(t, payload, loaded) }) t.Run("read miss fills cache", func(t *testing.T) { payload := []byte("read-fill payload") - path := time.Now().UTC().Format("20060102") + "$" + - uniqueCacheWorkflowID("read-fill") + "/manual" + flowID := uniqueCacheWorkflowID("read-fill") + locator := time.Now().UTC().Format("20060102") + "/0000000000" + path, err := ValueObjectPath(flowID, locator) + require.NoError(t, err) require.NoError(t, store.writeObject(ctx, store.activeStorage, path, payload)) - loaded, err := store.ReadObject(ctx, testStorageId, path) + loaded, err := store.ReadObject(ctx, testStorageId, flowID, locator) require.NoError(t, err) require.Equal(t, payload, loaded) deleteS3Object(t, ctx, store, path) - loaded, err = store.ReadObject(ctx, testStorageId, path) + loaded, err = store.ReadObject(ctx, testStorageId, flowID, locator) require.NoError(t, err) require.Equal(t, payload, loaded) }) @@ -103,41 +106,44 @@ func TestS3AttributeBlobCacheIntegration(t *testing.T) { t.Run("workflow deletion preserves cache", func(t *testing.T) { payload := []byte("retained cache payload") + flowID := uniqueCacheWorkflowID("delete") storeID, path, err := store.WriteObject( ctx, - uniqueCacheWorkflowID("delete"), + flowID, "delete", payload, ) require.NoError(t, err) - workflowPath := strings.SplitN(path, "/", 2)[0] + workflowPath := strings.SplitN(mustValueObjectPath(t, flowID, path), "/", 2)[0] require.NoError(t, store.DeleteWorkflowObjects(ctx, storeID, workflowPath)) - loaded, err := store.ReadObject(ctx, storeID, path) + loaded, err := store.ReadObject(ctx, storeID, flowID, path) require.NoError(t, err) require.Equal(t, payload, loaded) }) t.Run("corruption invalidates and refills from source", func(t *testing.T) { payload := []byte("corruption payload") + flowID := uniqueCacheWorkflowID("corrupt") storeID, path, err := store.WriteObject( ctx, - uniqueCacheWorkflowID("corrupt"), + flowID, "corrupt", payload, ) require.NoError(t, err) - cachePath := attributeCachePath(cacheDirectory, store.attributeCacheKey(storeID, path)) + physicalPath := mustValueObjectPath(t, flowID, path) + cachePath := attributeCachePath(cacheDirectory, store.attributeCacheKey(storeID, physicalPath)) file, err := os.OpenFile(cachePath, os.O_WRONLY, 0) require.NoError(t, err) _, err = file.WriteAt([]byte{0xff}, 24) require.NoError(t, err) require.NoError(t, file.Close()) - loaded, err := store.ReadObject(ctx, storeID, path) + loaded, err := store.ReadObject(ctx, storeID, flowID, path) require.NoError(t, err) require.Equal(t, payload, loaded) - deleteS3Object(t, ctx, store, path) - loaded, err = store.ReadObject(ctx, storeID, path) + deleteS3Object(t, ctx, store, physicalPath) + loaded, err = store.ReadObject(ctx, storeID, flowID, path) require.NoError(t, err) require.Equal(t, payload, loaded) }) @@ -153,15 +159,16 @@ func TestS3AttributeBlobCacheOversizedBypass(t *testing.T) { }).(*blobStoreImpl) ctx := context.Background() payload := make([]byte, 128) + flowID := uniqueCacheWorkflowID("oversized") storeID, path, err := store.WriteObject( ctx, - uniqueCacheWorkflowID("oversized"), + flowID, "oversized", payload, ) require.NoError(t, err) - deleteS3Object(t, ctx, store, path) - _, err = store.ReadObject(ctx, storeID, path) + deleteS3ValueObject(t, ctx, store, flowID, path) + _, err = store.ReadObject(ctx, storeID, flowID, path) require.Error(t, err) } @@ -169,6 +176,18 @@ func uniqueCacheWorkflowID(prefix string) string { return prefix + "-" + strconv.FormatInt(time.Now().UnixNano(), 10) } +func deleteS3ValueObject(t *testing.T, ctx context.Context, store *blobStoreImpl, flowID string, locator string) { + t.Helper() + deleteS3Object(t, ctx, store, mustValueObjectPath(t, flowID, locator)) +} + +func mustValueObjectPath(t *testing.T, flowID string, locator string) string { + t.Helper() + path, err := ValueObjectPath(flowID, locator) + require.NoError(t, err) + return path +} + func deleteS3Object(t *testing.T, ctx context.Context, store *blobStoreImpl, path string) { t.Helper() _, err := store.s3Client.DeleteObject(ctx, &s3.DeleteObjectInput{ diff --git a/server/service/common/blobstore/helpers.go b/server/service/common/blobstore/helpers.go index 049b3fcf0..b083f9f2b 100644 --- a/server/service/common/blobstore/helpers.go +++ b/server/service/common/blobstore/helpers.go @@ -141,10 +141,10 @@ func offloadValue( } } -// HydrateValues replaces internal_blob_id_for_* arms with concrete string/object values. -func HydrateValues(ctx context.Context, values []*dexpb.Value, blobStore BlobStore) error { +// HydrateFlowValues replaces Blob references with values owned by flowID. +func HydrateFlowValues(ctx context.Context, flowID string, values []*dexpb.Value, blobStore BlobStore) error { for _, value := range values { - if err := HydrateValue(ctx, value, blobStore); err != nil { + if err := HydrateValue(ctx, flowID, value, blobStore); err != nil { return err } } @@ -152,12 +152,17 @@ func HydrateValues(ctx context.Context, values []*dexpb.Value, blobStore BlobSto } // HydrateAttributeWrites hydrates Value arms on AttributeWrites / KVs. -func HydrateAttributeWrites(ctx context.Context, writes []*dexpb.AttributeWrite, blobStore BlobStore) error { +func HydrateAttributeWrites( + ctx context.Context, + flowID string, + writes []*dexpb.AttributeWrite, + blobStore BlobStore, +) error { for _, write := range writes { if write == nil { continue } - if err := HydrateValue(ctx, write.GetValue(), blobStore); err != nil { + if err := HydrateValue(ctx, flowID, write.GetValue(), blobStore); err != nil { return err } } @@ -165,12 +170,12 @@ func HydrateAttributeWrites(ctx context.Context, writes []*dexpb.AttributeWrite, } // HydrateKVs hydrates Value arms on KV pairs. -func HydrateKVs(ctx context.Context, kvs []*dexpb.KV, blobStore BlobStore) error { +func HydrateKVs(ctx context.Context, flowID string, kvs []*dexpb.KV, blobStore BlobStore) error { for _, kv := range kvs { if kv == nil { continue } - if err := HydrateValue(ctx, kv.GetValue(), blobStore); err != nil { + if err := HydrateValue(ctx, flowID, kv.GetValue(), blobStore); err != nil { return err } } @@ -180,6 +185,7 @@ func HydrateKVs(ctx context.Context, kvs []*dexpb.KV, blobStore BlobStore) error // HydrateChannelValues hydrates every pending Channel message Value. func HydrateChannelValues( ctx context.Context, + flowID string, channels map[string]*dexpb.ChannelValues, blobStore BlobStore, ) error { @@ -191,7 +197,7 @@ func HydrateChannelValues( if message == nil { continue } - if err := HydrateValue(ctx, message.GetValue(), blobStore); err != nil { + if err := HydrateValue(ctx, flowID, message.GetValue(), blobStore); err != nil { return err } } @@ -201,19 +207,20 @@ func HydrateChannelValues( func HydrateConditionResults( ctx context.Context, + flowID string, results *dexpb.ConditionResults, blobStore BlobStore, ) error { for _, result := range results.GetChannelResults() { - if err := HydrateValues(ctx, result.GetValues(), blobStore); err != nil { + if err := HydrateFlowValues(ctx, flowID, result.GetValues(), blobStore); err != nil { return err } } return nil } -// HydrateValue hydrates a single Value in place. -func HydrateValue(ctx context.Context, value *dexpb.Value, blobStore BlobStore) error { +// HydrateValue hydrates a Flow-owned Value in place. +func HydrateValue(ctx context.Context, flowID string, value *dexpb.Value, blobStore BlobStore) error { if value == nil { return nil } @@ -223,7 +230,7 @@ func HydrateValue(ctx context.Context, value *dexpb.Value, blobStore BlobStore) if err != nil { return err } - data, err := blobStore.ReadObject(ctx, storeId, path) + data, err := blobStore.ReadObject(ctx, storeId, flowID, path) if err != nil { return err } @@ -234,7 +241,7 @@ func HydrateValue(ctx context.Context, value *dexpb.Value, blobStore BlobStore) if err != nil { return err } - data, err := blobStore.ReadObject(ctx, storeId, path) + data, err := blobStore.ReadObject(ctx, storeId, flowID, path) if err != nil { return err } @@ -248,6 +255,92 @@ func HydrateValue(ctx context.Context, value *dexpb.Value, blobStore BlobStore) } } +// TransferValueBlobOwnership ensures value is inline or owned by destinationFlowID. +func TransferValueBlobOwnership( + ctx context.Context, + value *dexpb.Value, + sourceFlowID string, + destinationFlowID string, + invocationID string, + threshold int, + blobStore BlobStore, + enabled bool, +) error { + if value == nil { + return nil + } + if destinationFlowID == "" { + return fmt.Errorf("destination Flow ID is required to transfer Blob ownership") + } + _, isBlobReference, err := blobIDFromValue(value) + if err != nil { + return err + } + if isBlobReference { + if sourceFlowID == "" { + return fmt.Errorf("source Flow ID is required to transfer Blob ownership") + } + if sourceFlowID == destinationFlowID { + return nil + } + if err := HydrateValue(ctx, sourceFlowID, value, blobStore); err != nil { + return err + } + } + return OffloadLargeValue(ctx, value, destinationFlowID, invocationID, threshold, blobStore, enabled) +} + +// TransferFlowResultBlobOwnership transfers every completed Step output in result. +func TransferFlowResultBlobOwnership( + ctx context.Context, + result *dexpb.FlowResult, + sourceFlowID string, + destinationFlowID string, + invocationID string, + threshold int, + blobStore BlobStore, + enabled bool, +) error { + if result == nil { + return nil + } + for _, completion := range result.GetResults() { + if completion == nil { + continue + } + if err := TransferValueBlobOwnership( + ctx, + completion.GetCompletedStepOutput(), + sourceFlowID, + destinationFlowID, + invocationID, + threshold, + blobStore, + enabled, + ); err != nil { + return err + } + } + return nil +} + +func blobIDFromValue(value *dexpb.Value) (string, bool, error) { + switch kind := value.GetKind().(type) { + case *dexpb.Value_InternalBlobIdForStringValue: + if kind.InternalBlobIdForStringValue == "" { + return "", false, fmt.Errorf("Blob ID is required") + } + return kind.InternalBlobIdForStringValue, true, nil + case *dexpb.Value_InternalBlobIdForObjValue: + if kind.InternalBlobIdForObjValue == "" { + return "", false, fmt.Errorf("Blob ID is required") + } + return kind.InternalBlobIdForObjValue, true, nil + default: + return "", false, nil + } +} + func formatStringBlobId(storeId, path string) string { return storeId + "|" + path } diff --git a/server/service/common/blobstore/interfaces.go b/server/service/common/blobstore/interfaces.go index b1ab25eb0..f51064e8b 100644 --- a/server/service/common/blobstore/interfaces.go +++ b/server/service/common/blobstore/interfaces.go @@ -16,6 +16,8 @@ import ( "fmt" "strings" "time" + + "github.com/superdurable/dex/config" ) const ( @@ -36,11 +38,15 @@ func ExtractWorkflowId(workflowPath string) (string, error) { if len(parts) != 2 { return "", fmt.Errorf("invalid workflow path: %s", workflowPath) } - return parts[1], nil + flowID, err := decodePathPart(parts[1]) + if err != nil { + return "", fmt.Errorf("decode flow ID: %w", err) + } + return flowID, nil } func ExtractYyyymmddToUnixSeconds(workflowPath string) (int64, bool) { - // yyyymmdd$workflowId + // yyyymmdd$encodedFlowId yyyymmdd, err := ExtractYyyymmdd(workflowPath) if err != nil { return 0, false @@ -74,13 +80,13 @@ func ParseWorkflowPath(workflowPath string) (WorkflowPath, error) { if _, err := time.Parse("20060102", parts[0]); err != nil { return WorkflowPath{}, fmt.Errorf("invalid workflow path date: %w", err) } - if len(parts) == 2 { - return WorkflowPath{StartedDate: parts[0], FlowID: parts[1]}, nil - } flowID, err := decodePathPart(parts[1]) if err != nil { return WorkflowPath{}, fmt.Errorf("decode flow ID: %w", err) } + if len(parts) == 2 { + return WorkflowPath{StartedDate: parts[0], FlowID: flowID}, nil + } runID, err := decodePathPart(parts[2]) if err != nil { return WorkflowPath{}, fmt.Errorf("decode run ID: %w", err) @@ -103,6 +109,29 @@ func StepEventInputPath( return strings.Join([]string{workflowPath, encodePathPart(stepExecutionID), method + ".pb"}, "/") } +func ValueObjectPath(flowID string, locator string) (string, error) { + if flowID == "" { + return "", fmt.Errorf("Blob locator requires a Flow ID") + } + parts := strings.Split(locator, "/") + if len(parts) != 2 { + return "", fmt.Errorf("invalid Blob locator %q", locator) + } + if _, err := time.Parse("20060102", parts[0]); err != nil { + return "", fmt.Errorf("invalid Blob locator date: %w", err) + } + objectID := parts[1] + if len(objectID) < config.MinimumBlobStoreObjectIDLength || len(objectID) > config.MaximumBlobStoreObjectIDLength { + return "", fmt.Errorf("invalid Blob object ID length %d", len(objectID)) + } + for _, character := range objectID { + if (character < '0' || character > '9') && (character < 'a' || character > 'z') { + return "", fmt.Errorf("invalid Blob object ID %q", objectID) + } + } + return parts[0] + "$" + encodePathPart(flowID) + "/" + objectID, nil +} + func encodePathPart(value string) string { return base64.RawURLEncoding.EncodeToString([]byte(value)) } @@ -117,14 +146,10 @@ func decodePathPart(value string) (string, error) { type BlobStore interface { Close() error - // WriteObject will write to the current active store - // returns the active storeId - // The final path pattern is pathPrefix + yyyymmdd$workflowId/uuid - // But the returned path doesn't include pathPrefix, only yymmdd$workflowId/uuid - WriteObject(ctx context.Context, workflowId, invocationId string, data []byte) (storeId, path string, err error) - // ReadObject will read from the store by storeId and path - // The path should be the one returned from WriteObject, in format of yyyymmdd$workflowId/uuid - ReadObject(ctx context.Context, storeId, path string) ([]byte, error) + // WriteObject stores data under the Flow-owned path and returns its compact locator. + WriteObject(ctx context.Context, flowID, invocationID string, data []byte) (storeID, locator string, err error) + // ReadObject resolves a compact locator under its owning Flow. + ReadObject(ctx context.Context, storeID, flowID, locator string) ([]byte, error) WriteStepEventInput( ctx context.Context, runStarted time.Time, @@ -143,10 +168,10 @@ type BlobStore interface { method string, ) ([]byte, bool, error) // DeleteWorkflowObjects will delete all the objects of the workflowId - // workflowPath is yyyymmdd$workflowId, where yymmdd is needed to compose the path + // workflowPath is yyyymmdd$encodedFlowId, where yymmdd is needed to compose the path DeleteWorkflowObjects(ctx context.Context, storeId, workflowPath string) error - // ListWorkflowPaths will list the workflowPaths ( yyyymmdd$workflowId ) as CommonPrefixes from S3 - // It uses of delimiter "/" before the uuid to get all the CommonPrefixes + // ListWorkflowPaths will list the workflowPaths ( yyyymmdd$encodedFlowId ) as CommonPrefixes from S3 + // It uses of delimiter "/" before the object ID to get all the CommonPrefixes // StartAfterYyyymmdd is the yyyymmdd to exclude the date when listing ListWorkflowPaths(ctx context.Context, input ListObjectPathsInput) (*ListObjectPathsOutput, error) // CountWorkflowObjectsForTesting is for testing ONLY. @@ -154,7 +179,7 @@ type BlobStore interface { // Limitation: // 1. It doesn't count across two days(so expect test to fail if you happen to run the test across day boundary :) // 2. Only count less than 1000 objects(because it only make one API call to S3 which return at most 1000 objects) - CountWorkflowObjectsForTesting(ctx context.Context, workflowId string) (int64, error) + CountWorkflowObjectsForTesting(ctx context.Context, flowID string) (int64, error) } type ListObjectPathsInput struct { diff --git a/server/service/common/blobstore/local_integ_test.go b/server/service/common/blobstore/local_integ_test.go index 3e6ca8257..cb1bd965b 100644 --- a/server/service/common/blobstore/local_integ_test.go +++ b/server/service/common/blobstore/local_integ_test.go @@ -11,15 +11,18 @@ package blobstore import ( + "bytes" "context" "os" "path/filepath" + "regexp" "strings" "testing" "time" "github.com/stretchr/testify/require" "github.com/superdurable/dex/config" + "github.com/superdurable/dex/gen/dexpb" "github.com/superdurable/dex/service/common/log/loggerimpl" "github.com/superdurable/dex/service/common/ptr" "go.temporal.io/sdk/client" @@ -42,10 +45,11 @@ func TestLocalBlobStoreIntegration(t *testing.T) { t.Cleanup(func() { require.NoError(t, store.Close()) }) ctx := context.Background() - storeID, objectPath, err := store.WriteObject(ctx, "legacy-flow", "invocation", []byte("value")) + valueFlowID := "value-flow" + storeID, objectPath, err := store.WriteObject(ctx, valueFlowID, "invocation", []byte("value")) require.NoError(t, err) require.Equal(t, "local", storeID) - loaded, err := store.ReadObject(ctx, storeID, objectPath) + loaded, err := store.ReadObject(ctx, storeID, valueFlowID, objectPath) require.NoError(t, err) require.Equal(t, []byte("value"), loaded) @@ -112,3 +116,59 @@ func TestLocalBlobStoreRejectsEscapingPaths(t *testing.T) { _, err := localObjectPath(t.TempDir(), "../../outside") require.Error(t, err) } + +func TestLocalBlobStoreTransfersCrossFlowOwnership(t *testing.T) { + root := t.TempDir() + logger, err := loggerimpl.NewDevelopment() + require.NoError(t, err) + store, err := NewBlobStore(nil, "local-namespace", &config.BlobStoreConfig{ + Enabled: ptr.Any(true), + SupportedStorages: []config.BlobStoreConfigEntry{{ + Status: config.StorageStatusActive, + StorageId: "local", + StorageType: config.StorageTypeLocal, + LocalDirectory: root, + }}, + }, logger, client.MetricsNopHandler) + require.NoError(t, err) + t.Cleanup(func() { require.NoError(t, store.Close()) }) + + ctx := context.Background() + sourceFlowID := "source-flow" + destinationFlowID := "destination-flow" + threshold := config.DefaultBlobStoreThresholdInBytes + payload := bytes.Repeat([]byte("x"), threshold+1) + value := &dexpb.Value{Kind: &dexpb.Value_ObjValue{ObjValue: &dexpb.EncodedObject{ + Encoding: "j", + Payload: payload, + }}} + require.NoError(t, OffloadLargeValue(ctx, value, sourceFlowID, "invocation", threshold, store, true)) + sourceRef := value.GetInternalBlobIdForObjValue() + require.Regexp(t, regexp.MustCompile(`^local\|[0-9]{8}/[0-9a-z]{10}\|j$`), sourceRef) + + require.NoError(t, TransferValueBlobOwnership( + ctx, value, sourceFlowID, destinationFlowID, "invocation", threshold, store, true, + )) + require.Equal(t, sourceRef, value.GetInternalBlobIdForObjValue()) + require.Equal(t, int64(1), mustCountFlowObjects(t, ctx, store, sourceFlowID)) + require.Equal(t, int64(1), mustCountFlowObjects(t, ctx, store, destinationFlowID)) + + date := strings.SplitN(strings.SplitN(sourceRef, "|", 3)[1], "/", 2)[0] + require.NoError(t, store.DeleteWorkflowObjects( + ctx, "local", date+"$"+encodePathPart(sourceFlowID), + )) + require.NoError(t, HydrateValue(ctx, destinationFlowID, value, store)) + require.Equal(t, "j", value.GetObjValue().GetEncoding()) + require.Equal(t, payload, value.GetObjValue().GetPayload()) + + inline := &dexpb.Value{Kind: &dexpb.Value_StringValue{StringValue: string(bytes.Repeat([]byte("y"), threshold))}} + require.NoError(t, OffloadLargeValue(ctx, inline, destinationFlowID, "inline", threshold, store, true)) + require.NotEmpty(t, inline.GetStringValue()) +} + +func mustCountFlowObjects(t *testing.T, ctx context.Context, store BlobStore, flowID string) int64 { + t.Helper() + count, err := store.CountWorkflowObjectsForTesting(ctx, flowID) + require.NoError(t, err) + return count +} diff --git a/server/service/common/blobstore/store_impl.go b/server/service/common/blobstore/store_impl.go index 1cd5bae8d..a67f3fbb4 100644 --- a/server/service/common/blobstore/store_impl.go +++ b/server/service/common/blobstore/store_impl.go @@ -20,6 +20,7 @@ import ( "hash" "io" "io/fs" + "math/big" "sort" "strings" "time" @@ -28,7 +29,6 @@ import ( "github.com/aws/aws-sdk-go-v2/service/s3" "github.com/aws/aws-sdk-go-v2/service/s3/types" "github.com/aws/smithy-go" - "github.com/google/uuid" "github.com/superdurable/dex/blob-cache-go/blobcache" "github.com/superdurable/dex/config" "github.com/superdurable/dex/service/common/log" @@ -38,6 +38,8 @@ import ( var errStoreNotFound = errors.New("store not found") +const base36Alphabet = "0123456789abcdefghijklmnopqrstuvwxyz" + type blobStoreImpl struct { s3Client *s3.Client pathPrefix string // the Temporal namespace or Cadence domain + "/" @@ -48,6 +50,7 @@ type blobStoreImpl struct { readObjectErrorCounter client.MetricsCounter writeObjectSuccessHistogram client.MetricsTimer readObjectSuccessHistogram client.MetricsTimer + objectIDLength int blobCache *blobcache.Cache blobCacheHitCounter client.MetricsCounter blobCacheMissCounter client.MetricsCounter @@ -67,12 +70,12 @@ func NewBlobStore( if storeConfig == nil { panic("NewBlobStore requires BlobStoreConfig") } + if err := storeConfig.Validate(); err != nil { + return nil, err + } if !storeConfig.EffectiveEnabled() { return nil, nil } - if err := storeConfig.BlobCache.Validate(); err != nil { - return nil, err - } var activeStorage *config.BlobStoreConfigEntry supportedStores := map[string]config.BlobStoreConfigEntry{} @@ -119,7 +122,7 @@ func NewBlobStore( return &blobStoreImpl{ s3Client: s3Client, - pathPrefix: temporalOrCadenceNamespace + "/", + pathPrefix: temporalOrCadenceNamespace + "/v2/", activeStorage: *activeStorage, supportedStore: supportedStores, logger: logger, @@ -127,6 +130,7 @@ func NewBlobStore( readObjectErrorCounter: readObjectErrorCounter, writeObjectSuccessHistogram: writeObjectSuccessHistogram, readObjectSuccessHistogram: readObjectSuccessHistogram, + objectIDLength: storeConfig.EffectiveObjectIDLength(), blobCache: attributeCache, blobCacheHitCounter: metricsHandler.Counter("blob_cache_hit"), blobCacheMissCounter: metricsHandler.Counter("blob_cache_miss"), @@ -139,19 +143,21 @@ func NewBlobStore( func (b *blobStoreImpl) WriteObject( ctx context.Context, - workflowId string, - invocationId string, + flowID string, + invocationID string, data []byte, -) (storeId, path string, err error) { - storeId = b.activeStorage.StorageId - objectID, err := deterministicBlobUUID(invocationId, data) +) (storeID, locator string, err error) { + storeID = b.activeStorage.StorageId + objectID, err := deterministicBlobObjectID(invocationID, data, b.objectIDLength) + if err != nil { + return "", "", err + } + startedDate := time.Now().UTC().Format("20060102") + locator = startedDate + "/" + objectID + path, err := ValueObjectPath(flowID, locator) if err != nil { return "", "", err } - yyyymmdd := time.Now().UTC().Format("20060102") - // yyyymmdd$workflowId/uuid - // Note: using $ here so that the listing can be much easier to implement for pagination - path = fmt.Sprintf("%s$%s/%s", yyyymmdd, workflowId, objectID) err = b.writeObject(ctx, b.activeStorage, path, data) if err != nil { @@ -162,25 +168,25 @@ func (b *blobStoreImpl) WriteObject( tag.RequestID(re.ServiceRequestID()), tag.HostID(re.ServiceHostID()), tag.Bucket(b.activeStorage.S3Bucket), - tag.WorkflowID(workflowId), + tag.WorkflowID(flowID), tag.Error(err)) err = fmt.Errorf("failed to write object (requestId=%s, hostId=%s): %w", re.ServiceRequestID(), re.ServiceHostID(), err) } else { b.logger.Error("PutObject error", tag.Bucket(b.activeStorage.S3Bucket), - tag.WorkflowID(workflowId), + tag.WorkflowID(flowID), tag.Error(err)) err = fmt.Errorf("failed to write object: %w", err) } return } if b.activeStorage.StorageType == config.StorageTypeS3 { - if err = b.cacheAttributeObject(storeId, path, data, b.blobCacheWriteCounter); err != nil { + if err = b.cacheAttributeObject(storeID, path, data, b.blobCacheWriteCounter); err != nil { b.writeObjectErrorCounter.Inc(1) b.logger.Error("Attribute blob cache write failed", tag.Path(path), - tag.StoreID(storeId), + tag.StoreID(storeID), tag.Error(err)) err = fmt.Errorf("failed to cache written object: %w", err) return @@ -267,25 +273,31 @@ func (b *blobStoreImpl) writeObject( } } -func deterministicBlobUUID(invocationId string, data []byte) (uuid.UUID, error) { +func deterministicBlobObjectID(invocationID string, data []byte, objectIDLength int) (string, error) { hasher := sha256.New() components := [][]byte{ - []byte("dex-blob-v1"), - []byte(invocationId), + []byte("dex-blob-v2"), + []byte(invocationID), data, } for _, component := range components { if err := writeHashComponent(hasher, component); err != nil { - return uuid.Nil, err + return "", err } } + return fixedWidthBase36(hasher.Sum(nil), objectIDLength), nil +} - digest := hasher.Sum(nil) - var objectID uuid.UUID - copy(objectID[:], digest[:16]) - objectID[6] = (objectID[6] & 0x0f) | 0x80 - objectID[8] = (objectID[8] & 0x3f) | 0x80 - return objectID, nil +func fixedWidthBase36(digest []byte, length int) string { + value := new(big.Int).SetBytes(digest) + base := big.NewInt(int64(len(base36Alphabet))) + remainder := new(big.Int) + encoded := make([]byte, length) + for index := length - 1; index >= 0; index-- { + value.DivMod(value, base, remainder) + encoded[index] = base36Alphabet[remainder.Int64()] + } + return string(encoded) } func writeHashComponent(hasher hash.Hash, component []byte) error { @@ -308,19 +320,23 @@ func writeHashBytes(hasher hash.Hash, data []byte) error { return nil } -func (b *blobStoreImpl) ReadObject(ctx context.Context, storeId, path string) ([]byte, error) { - storeConfig, ok := b.supportedStore[storeId] +func (b *blobStoreImpl) ReadObject(ctx context.Context, storeID, flowID, locator string) ([]byte, error) { + path, err := ValueObjectPath(flowID, locator) + if err != nil { + return nil, err + } + storeConfig, ok := b.supportedStore[storeID] if !ok { b.readObjectErrorCounter.Inc(1) - return nil, fmt.Errorf("%w for %s", errStoreNotFound, storeId) + return nil, fmt.Errorf("%w for %s", errStoreNotFound, storeID) } if storeConfig.StorageType == config.StorageTypeS3 && b.blobCache != nil { - data, found, err := b.readCachedAttributeObject(storeId, path) + data, found, err := b.readCachedAttributeObject(storeID, path) if err != nil { b.readObjectErrorCounter.Inc(1) b.logger.Error("Attribute blob cache read failed", tag.Path(path), - tag.StoreID(storeId), + tag.StoreID(storeID), tag.Error(err)) return nil, fmt.Errorf("failed to read cached object: %w", err) } @@ -339,7 +355,7 @@ func (b *blobStoreImpl) ReadObject(ctx context.Context, storeId, path string) ([ tag.HostID(re.ServiceHostID()), tag.Bucket(storeConfig.S3Bucket), tag.Path(path), - tag.StoreID(storeId), + tag.StoreID(storeID), tag.Error(err)) return nil, fmt.Errorf("failed to read object (requestId=%s, hostId=%s): %w", re.ServiceRequestID(), re.ServiceHostID(), err) @@ -347,16 +363,16 @@ func (b *blobStoreImpl) ReadObject(ctx context.Context, storeId, path string) ([ b.logger.Error("GetObject error", tag.Bucket(storeConfig.S3Bucket), tag.Path(path), - tag.StoreID(storeId), + tag.StoreID(storeID), tag.Error(err)) return nil, fmt.Errorf("failed to read object: %w", err) } if storeConfig.StorageType == config.StorageTypeS3 { - if err := b.cacheAttributeObject(storeId, path, data, b.blobCacheReadFillCounter); err != nil { + if err := b.cacheAttributeObject(storeID, path, data, b.blobCacheReadFillCounter); err != nil { b.readObjectErrorCounter.Inc(1) b.logger.Error("Attribute blob cache fill failed", tag.Path(path), - tag.StoreID(storeId), + tag.StoreID(storeID), tag.Error(err)) return nil, fmt.Errorf("failed to fill object cache: %w", err) } @@ -486,10 +502,10 @@ func getObject(ctx context.Context, client *s3.Client, bucketName, key string) ( return data, nil } -func (b *blobStoreImpl) CountWorkflowObjectsForTesting(ctx context.Context, workflowId string) (int64, error) { - // Create the prefix to match objects for this workflowId for today +func (b *blobStoreImpl) CountWorkflowObjectsForTesting(ctx context.Context, flowID string) (int64, error) { + // Create the prefix to match objects for this Flow for today. yyyymmdd := time.Now().UTC().Format("20060102") - prefix := fmt.Sprintf("%s%s$%s/", b.pathPrefix, yyyymmdd, workflowId) + prefix := fmt.Sprintf("%s%s$%s/", b.pathPrefix, yyyymmdd, encodePathPart(flowID)) if b.activeStorage.StorageType == config.StorageTypeLocal { return countLocalObjects(ctx, b.activeStorage.LocalDirectory, prefix) } @@ -681,7 +697,7 @@ func (b *blobStoreImpl) ListWorkflowPaths(ctx context.Context, input ListObjectP workflowPaths := make([]string, 0, len(result.CommonPrefixes)) for _, commonPrefix := range result.CommonPrefixes { if commonPrefix.Prefix != nil { - // Remove the pathPrefix to get the workflow path (yyyymmdd$workflowId) + // Remove the pathPrefix to get the workflow path (yyyymmdd$encodedFlowId) prefixStr := *commonPrefix.Prefix if strings.HasPrefix(prefixStr, b.pathPrefix) { workflowPath := strings.TrimPrefix(prefixStr, b.pathPrefix) diff --git a/server/service/common/blobstore/store_impl_test.go b/server/service/common/blobstore/store_impl_test.go index f3f7748ed..77d835ea0 100644 --- a/server/service/common/blobstore/store_impl_test.go +++ b/server/service/common/blobstore/store_impl_test.go @@ -188,7 +188,7 @@ func TestBlobStoreIntegration(t *testing.T) { assert.NoError(t, err) // Read it back - retrievedData, err := blobStore.ReadObject(ctx, storeId, path) + retrievedData, err := blobStore.ReadObject(ctx, storeId, workflowId1, path) assert.NoError(t, err) assert.Equal(t, []byte(testData), retrievedData) }) @@ -223,8 +223,8 @@ func TestBlobStoreIntegration(t *testing.T) { // Verify workflow paths contain expected patterns todayPrefix := time.Now().UTC().Format("20060102") - expectedPath1 := fmt.Sprintf("%s$%s", todayPrefix, workflowId1) - expectedPath2 := fmt.Sprintf("%s$%s", todayPrefix, workflowId2) + expectedPath1 := fmt.Sprintf("%s$%s", todayPrefix, encodePathPart(workflowId1)) + expectedPath2 := fmt.Sprintf("%s$%s", todayPrefix, encodePathPart(workflowId2)) foundPath1 := false foundPath2 := false @@ -274,7 +274,7 @@ func TestBlobStoreIntegration(t *testing.T) { // Delete all objects for the workflow todayPrefix := time.Now().UTC().Format("20060102") - workflowPath := fmt.Sprintf("%s$%s", todayPrefix, deleteTestWorkflowId) + workflowPath := fmt.Sprintf("%s$%s", todayPrefix, encodePathPart(deleteTestWorkflowId)) err = blobStore.DeleteWorkflowObjects(ctx, testStorageId, workflowPath) assert.NoError(t, err) @@ -308,7 +308,7 @@ func TestBlobStoreIntegration(t *testing.T) { // Delete all objects for the workflow todayPrefix := time.Now().UTC().Format("20060102") - workflowPath := fmt.Sprintf("%s$%s", todayPrefix, multiDeleteWorkflowId) + workflowPath := fmt.Sprintf("%s$%s", todayPrefix, encodePathPart(multiDeleteWorkflowId)) err = blobStore.DeleteWorkflowObjects(ctx, testStorageId, workflowPath) assert.NoError(t, err) @@ -321,7 +321,7 @@ func TestBlobStoreIntegration(t *testing.T) { t.Run("DeleteWorkflowObjectsNonExistent", func(t *testing.T) { // Try to delete objects for a workflow that doesn't exist todayPrefix := time.Now().UTC().Format("20060102") - workflowPath := fmt.Sprintf("%s$%s", todayPrefix, "non-existent-workflow") + workflowPath := fmt.Sprintf("%s$%s", todayPrefix, encodePathPart("non-existent-workflow")) err := blobStore.DeleteWorkflowObjects(ctx, testStorageId, workflowPath) assert.NoError(t, err) // Should succeed even if no objects to delete }) @@ -336,7 +336,9 @@ func TestBlobStoreIntegration(t *testing.T) { assert.Contains(t, err.Error(), "store not found") // Test reading with invalid store ID - _, err = blobStore.ReadObject(ctx, "invalid-store-id", "some-path") + _, err = blobStore.ReadObject( + ctx, "invalid-store-id", "flow", time.Now().UTC().Format("20060102")+"/0000000000", + ) assert.Error(t, err) assert.Contains(t, err.Error(), "store not found") @@ -346,7 +348,9 @@ func TestBlobStoreIntegration(t *testing.T) { assert.Contains(t, err.Error(), "store not found") // Test reading a non-existent key from a valid store triggers the new error wrapping - _, err = blobStore.ReadObject(ctx, testStorageId, "nonexistent/path/that/does/not/exist") + _, err = blobStore.ReadObject( + ctx, testStorageId, "flow", time.Now().UTC().Format("20060102")+"/0000000000", + ) assert.Error(t, err) assert.Contains(t, err.Error(), "failed to read object") }) @@ -399,9 +403,9 @@ func TestBlobStoreIntegration(t *testing.T) { assert.NoError(t, err) err = OffloadLargeValue(ctx, objectValue, workflowID, "round-trip", 1, blobStore, true) assert.NoError(t, err) - err = HydrateValue(ctx, stringValue, blobStore) + err = HydrateValue(ctx, workflowID, stringValue, blobStore) assert.NoError(t, err) - err = HydrateValue(ctx, objectValue, blobStore) + err = HydrateValue(ctx, workflowID, objectValue, blobStore) assert.NoError(t, err) assert.Equal(t, "large string value", stringValue.GetStringValue()) diff --git a/server/service/common/blobstore/store_impl_unit_test.go b/server/service/common/blobstore/store_impl_unit_test.go index a2d6d5889..24766fcea 100644 --- a/server/service/common/blobstore/store_impl_unit_test.go +++ b/server/service/common/blobstore/store_impl_unit_test.go @@ -11,29 +11,47 @@ package blobstore import ( + "regexp" "testing" - "github.com/google/uuid" "github.com/stretchr/testify/require" ) -func TestDeterministicBlobUUIDStableVector(t *testing.T) { - objectID, err := deterministicBlobUUID("run-123activity-456", []byte("payload")) +func TestDeterministicBlobObjectIDStableVector(t *testing.T) { + objectID, err := deterministicBlobObjectID("run-123activity-456", []byte("payload"), 10) require.NoError(t, err) - require.Equal(t, "d3333fb9-f46d-8815-8359-9892fd394a6e", objectID.String()) + require.Equal(t, "8d1zvkzfui", objectID) } -func TestDeterministicBlobUUIDVersionAndVariant(t *testing.T) { - objectID, err := deterministicBlobUUID("request", []byte("payload")) - require.NoError(t, err) - require.Equal(t, uuid.Version(8), objectID.Version()) - require.Equal(t, uuid.RFC4122, objectID.Variant()) +func TestDeterministicBlobObjectIDLengthsAndAlphabet(t *testing.T) { + for _, objectIDLength := range []int{10, 12, 16, 22, 50} { + objectID, err := deterministicBlobObjectID("request", []byte("payload"), objectIDLength) + require.NoError(t, err) + require.Len(t, objectID, objectIDLength) + require.True(t, regexp.MustCompile(`^[0-9a-z]+$`).MatchString(objectID)) + } } -func TestDeterministicBlobUUIDFramesComponents(t *testing.T) { - firstID, err := deterministicBlobUUID("ab", []byte("c")) +func TestDeterministicBlobObjectIDFramesComponents(t *testing.T) { + firstID, err := deterministicBlobObjectID("ab", []byte("c"), 10) require.NoError(t, err) - secondID, err := deterministicBlobUUID("a", []byte("bc")) + secondID, err := deterministicBlobObjectID("a", []byte("bc"), 10) require.NoError(t, err) require.NotEqual(t, firstID, secondID) } + +func TestDeterministicBlobObjectIDValuePathUsesContextualFlow(t *testing.T) { + path, err := ValueObjectPath("flow/one", "20260913/0abcde1234") + require.NoError(t, err) + require.Equal(t, "20260913$Zmxvdy9vbmU/0abcde1234", path) + + for _, locator := range []string{ + "20260913/abcdefghi", + "20260913/ABCDEF1234", + "20260913/abcdef1234/extra", + "20261340/abcdef1234", + } { + _, err := ValueObjectPath("flow", locator) + require.Error(t, err) + } +} diff --git a/server/service/common/index/searchAttribute.go b/server/service/common/index/searchAttribute.go index 8d4bb72ae..186ef8355 100644 --- a/server/service/common/index/searchAttribute.go +++ b/server/service/common/index/searchAttribute.go @@ -203,7 +203,7 @@ func MapCadenceSearchAttributeFieldsToKVs(searchAttributes *shared.SearchAttribu for _, key := range keys { result = append(result, &dexpb.KV{ Key: key, - Value: jsonPayloadToBestEffortValue(searchAttributes.GetIndexedFields()[key], "json"), + Value: jsonPayloadToBestEffortValue(searchAttributes.GetIndexedFields()[key], "j"), }) } return result @@ -423,7 +423,7 @@ func backendObjectToValue(object interface{}, indexType dexpb.IndexType, cadence return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: payload, }, }, diff --git a/server/service/common/index/searchAttribute_test.go b/server/service/common/index/searchAttribute_test.go index 791758bf5..adb505cb6 100644 --- a/server/service/common/index/searchAttribute_test.go +++ b/server/service/common/index/searchAttribute_test.go @@ -125,7 +125,7 @@ func TestMapCadenceSearchAttributeFieldsToKVs(t *testing.T) { actual := MapCadenceSearchAttributeFieldsToKVs(searchAttributes) require.Len(t, actual, 5) require.Equal(t, "Array", actual[0].GetKey()) - require.Equal(t, "json", actual[0].GetValue().GetObjValue().GetEncoding()) + require.Equal(t, "j", actual[0].GetValue().GetObjValue().GetEncoding()) require.Equal(t, []byte(`["a","b"]`), actual[0].GetValue().GetObjValue().GetPayload()) require.Equal(t, true, actual[1].GetValue().GetBoolValue()) require.Equal(t, 0.5, actual[2].GetValue().GetDoubleValue()) diff --git a/server/service/common/rpc/invoke.go b/server/service/common/rpc/invoke.go index ced498812..185c7a7ee 100644 --- a/server/service/common/rpc/invoke.go +++ b/server/service/common/rpc/invoke.go @@ -42,11 +42,12 @@ func InvokeWorkerRpc( workerInput := req.GetInput() if !blobStoreCfg.EffectiveLazyLoading() { - if err := blobstore.HydrateKVs(ctx, rpcPrep.GetAttributes(), blobStore); err != nil { + if err := blobstore.HydrateKVs(ctx, req.GetFlowId(), rpcPrep.GetAttributes(), blobStore); err != nil { return nil, err } if err := blobstore.HydrateChannelValues( ctx, + req.GetFlowId(), rpcPrep.GetLoadedChannelMessages(), blobStore, ); err != nil { @@ -59,7 +60,7 @@ func InvokeWorkerRpc( // want it to be hydrated. workerInput = &dexpb.Value{Kind: workerInput.GetKind()} } - if err := blobstore.HydrateValue(ctx, workerInput, blobStore); err != nil { + if err := blobstore.HydrateValue(ctx, req.GetFlowId(), workerInput, blobStore); err != nil { return nil, err } } diff --git a/server/service/interpreter/activityImpl.go b/server/service/interpreter/activityImpl.go index 65ce5f956..8c8f3950d 100644 --- a/server/service/interpreter/activityImpl.go +++ b/server/service/interpreter/activityImpl.go @@ -101,7 +101,7 @@ func (a *Activities) SyncAttributeBatch( if item == nil { continue } - if err := blobstore.HydrateValue(ctx, item.GetValue(), a.blobStore); err != nil { + if err := blobstore.HydrateValue(ctx, input.GetFlowId(), item.GetValue(), a.blobStore); err != nil { return fmt.Errorf("hydrate Attribute Store item: %w", err) } } @@ -143,7 +143,9 @@ func (a *Activities) InvokeWaitForMethod( a.logLocalActivityWarn(logger, activityInfo, "InvokeWaitForMethod", req.GetContext().GetStepExecutionId(), req, err) return nil, newServerSideActivityError(ctx, provider, err, localActivityFailure) } - if err := blobstore.HydrateChannelValues(ctx, req.GetLoadedChannelMessages(), a.blobStore); err != nil { + if err := blobstore.HydrateChannelValues( + ctx, req.GetContext().GetFlowId(), req.GetLoadedChannelMessages(), a.blobStore, + ); err != nil { return nil, newServerSideActivityError(ctx, provider, err, localActivityFailure) } } @@ -236,15 +238,16 @@ func (a *Activities) offloadSubFlowStartInputs( conditions []*dexpb.SubFlowCondition, ) error { for index, condition := range conditions { - _, subFlowID, requestID, err := a.subFlowStartIdentity( + parentFlowID, subFlowID, requestID, err := a.subFlowStartIdentity( ctx, stepExecutionID, int32(index), ) if err != nil { return err } - if err := blobstore.OffloadLargeValue( + if err := blobstore.TransferValueBlobOwnership( ctx, condition.GetStepInput(), + parentFlowID, subFlowID, requestID, a.cfg.BlobStore.EffectiveThresholdInBytes(), @@ -253,16 +256,22 @@ func (a *Activities) offloadSubFlowStartInputs( ); err != nil { return err } - if err := blobstore.OffloadLargeAttributeWrites( - ctx, - condition.GetOptions().GetAttributes(), - subFlowID, - requestID, - a.cfg.BlobStore.EffectiveThresholdInBytes(), - a.blobStore, - a.cfg.BlobStore.EffectiveEnabled(), - ); err != nil { - return err + for _, attribute := range condition.GetOptions().GetAttributes() { + if attribute == nil { + continue + } + if err := blobstore.TransferValueBlobOwnership( + ctx, + attribute.GetValue(), + parentFlowID, + subFlowID, + requestID, + a.cfg.BlobStore.EffectiveThresholdInBytes(), + a.blobStore, + a.cfg.BlobStore.EffectiveEnabled(), + ); err != nil { + return err + } } } return nil @@ -304,13 +313,17 @@ func (a *Activities) InvokeExecuteMethod( a.logLocalActivityWarn(logger, activityInfo, "InvokeExecuteMethod", req.GetContext().GetStepExecutionId(), req, err) return nil, newServerSideActivityError(ctx, provider, err, localActivityFailure) } - if err := blobstore.HydrateKVs(ctx, req.GetStepExeLocals(), a.blobStore); err != nil { + if err := blobstore.HydrateKVs(ctx, req.GetContext().GetFlowId(), req.GetStepExeLocals(), a.blobStore); err != nil { return nil, newServerSideActivityError(ctx, provider, err, localActivityFailure) } - if err := blobstore.HydrateConditionResults(ctx, req.GetConditionResults(), a.blobStore); err != nil { + if err := blobstore.HydrateConditionResults( + ctx, req.GetContext().GetFlowId(), req.GetConditionResults(), a.blobStore, + ); err != nil { return nil, newServerSideActivityError(ctx, provider, err, localActivityFailure) } - if err := blobstore.HydrateChannelValues(ctx, req.GetLoadedChannelMessages(), a.blobStore); err != nil { + if err := blobstore.HydrateChannelValues( + ctx, req.GetContext().GetFlowId(), req.GetLoadedChannelMessages(), a.blobStore, + ); err != nil { return nil, newServerSideActivityError(ctx, provider, err, localActivityFailure) } } @@ -840,9 +853,25 @@ func (a *Activities) StartSubFlow( Config: flowConfig, TimeoutHandlerOptions: options.GetTimeoutHandlerOptions(), } - return a.subFlowResolver.Resolve( + output, err := a.subFlowResolver.Resolve( ctx, condition, subFlowID, requestID, workflowOptions, workflowInput, ) + if err != nil { + return nil, err + } + if err := blobstore.TransferFlowResultBlobOwnership( + ctx, + output.GetImmediateFlowResult(), + subFlowID, + parentFlowID, + requestID, + a.cfg.BlobStore.EffectiveThresholdInBytes(), + a.blobStore, + a.cfg.BlobStore.EffectiveEnabled(), + ); err != nil { + return nil, fmt.Errorf("transfer immediate SubFlow result Blob ownership: %w", err) + } + return output, nil } func (a *Activities) subFlowStartIdentity( @@ -878,8 +907,21 @@ func (a *Activities) ReportSubFlowCompletion( if result == nil || request.GetSubFlowId() != activityInfo.WorkflowExecution.ID { return nil, fmt.Errorf("SubFlow completion result does not match the reporting workflow") } + destinationRequest := copySubFlowCompletionRequestForBlobOwnershipTransfer(request) + if err := blobstore.TransferFlowResultBlobOwnership( + ctx, + destinationRequest.GetFlowResult(), + activityInfo.WorkflowExecution.ID, + parentFlowID, + activityInvocationId(activityInfo), + a.cfg.BlobStore.EffectiveThresholdInBytes(), + a.blobStore, + a.cfg.BlobStore.EffectiveEnabled(), + ); err != nil { + return nil, fmt.Errorf("transfer SubFlow completion Blob ownership: %w", err) + } err := a.unifiedClient.SignalWorkflow( - ctx, parentFlowID, "", service.SubFlowCompletionSignalChannelName, request, + ctx, parentFlowID, "", service.SubFlowCompletionSignalChannelName, destinationRequest, ) if err == nil { return &dexpb.ReportSubFlowCompletionActivityOutput{ @@ -894,6 +936,37 @@ func (a *Activities) ReportSubFlowCompletion( return nil, fmt.Errorf("report SubFlow completion: %w", err) } +func copySubFlowCompletionRequestForBlobOwnershipTransfer( + request *dexpb.SubFlowCompletionSignalRequest, +) *dexpb.SubFlowCompletionSignalRequest { + result := request.GetFlowResult() + copiedResult := &dexpb.FlowResult{ + FlowStatus: result.GetFlowStatus(), + ErrorType: result.GetErrorType(), + ErrorMessage: result.GetErrorMessage(), + Results: make([]*dexpb.StepCompletionOutput, 0, len(result.GetResults())), + } + for _, completion := range result.GetResults() { + if completion == nil { + copiedResult.Results = append(copiedResult.Results, nil) + continue + } + var copiedValue *dexpb.Value + if completion.GetCompletedStepOutput() != nil { + copiedValue = &dexpb.Value{Kind: completion.GetCompletedStepOutput().GetKind()} + } + copiedResult.Results = append(copiedResult.Results, &dexpb.StepCompletionOutput{ + CompletedStepType: completion.GetCompletedStepType(), + CompletedStepExecutionId: completion.GetCompletedStepExecutionId(), + CompletedStepOutput: copiedValue, + }) + } + return &dexpb.SubFlowCompletionSignalRequest{ + SubFlowId: request.GetSubFlowId(), + FlowResult: copiedResult, + } +} + func buildSubFlowConfig(parent, override *dexpb.FlowConfig) (*dexpb.FlowConfig, error) { if parent == nil { parent = config.DefaultWorkflowConfig @@ -1016,10 +1089,12 @@ func (a *Activities) CleanupBlobsAfterAllRunsDeleted( func (a *Activities) hydrateWorkerRequestValues( ctx context.Context, stepInput *dexpb.Value, attributes []*dexpb.KV, ) error { - if err := blobstore.HydrateValue(ctx, stepInput, a.blobStore); err != nil { + activityInfo := a.activityProvider.GetActivityInfo(ctx) + flowID := activityInfo.WorkflowExecution.ID + if err := blobstore.HydrateValue(ctx, flowID, stepInput, a.blobStore); err != nil { return err } - return blobstore.HydrateKVs(ctx, attributes, a.blobStore) + return blobstore.HydrateKVs(ctx, flowID, attributes, a.blobStore) } func (a *Activities) offloadWorkerAttributeWrites( diff --git a/server/service/interpreter/persistence_test.go b/server/service/interpreter/persistence_test.go index 106b8ab13..93280525a 100644 --- a/server/service/interpreter/persistence_test.go +++ b/server/service/interpreter/persistence_test.go @@ -83,7 +83,7 @@ func TestPersistenceBatchSerializedEquality(t *testing.T) { object := &dexpb.AttributeWrite{ Key: "object", Value: &dexpb.Value{Kind: &dexpb.Value_ObjValue{ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: []byte(`{"value":1}`), }}}, } @@ -93,7 +93,7 @@ func TestPersistenceBatchSerializedEquality(t *testing.T) { equalSerializedObject := &dexpb.AttributeWrite{ Key: "object", Value: &dexpb.Value{Kind: &dexpb.Value_ObjValue{ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: []byte(`{"value":1}`), }}}, } diff --git a/server/service/interpreter/workflowImpl.go b/server/service/interpreter/workflowImpl.go index 4eabeb924..c2af56b94 100644 --- a/server/service/interpreter/workflowImpl.go +++ b/server/service/interpreter/workflowImpl.go @@ -1345,7 +1345,7 @@ func stepFailureInput(step *dexpb.StepMovement) *dexpb.Value { } return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ - ObjValue: &dexpb.EncodedObject{Encoding: "json", Payload: []byte("null")}, + ObjValue: &dexpb.EncodedObject{Encoding: "j", Payload: []byte("null")}, }, } } diff --git a/web/api/handlers.go b/web/api/handlers.go index b7d19048a..206d93db4 100644 --- a/web/api/handlers.go +++ b/web/api/handlers.go @@ -339,7 +339,11 @@ func (h *handler) loadBlobs(response http.ResponseWriter, request *http.Request) WriteError(response, http.StatusBadRequest, err.Error(), nil) return } - values := make([]*dexpb.Value, 0, len(body.Values)) + if body.FlowID == "" { + WriteError(response, http.StatusBadRequest, "flowId is required", nil) + return + } + entries := make([]*dexpb.LoadBlobRequestEntry, 0, len(body.Values)) seen := make(map[string]struct{}, len(body.Values)) for _, reference := range body.Values { cacheKey := blobCacheKey(reference) @@ -361,9 +365,9 @@ func (h *handler) loadBlobs(response http.ResponseWriter, request *http.Request) WriteError(response, http.StatusBadRequest, "blob kind must be string or object", nil) return } - values = append(values, value) + entries = append(entries, &dexpb.LoadBlobRequestEntry{FlowId: body.FlowID, BlobValue: value}) } - result, err := h.client.LoadBlobs(request.Context(), &dexpb.LoadBlobsRequest{Values: values}) + result, err := h.client.LoadBlobs(request.Context(), &dexpb.LoadBlobsRequest{Entries: entries}) if err != nil { writeGRPCError( response, diff --git a/web/api/mapping.go b/web/api/mapping.go index 81377abab..fe7aa5a55 100644 --- a/web/api/mapping.go +++ b/web/api/mapping.go @@ -191,7 +191,7 @@ func dexValue(value *dexpb.Value) interface{} { case *dexpb.Value_NullValue: return nil case *dexpb.Value_ObjValue: - if kind.ObjValue.GetEncoding() == "json" { + if kind.ObjValue.GetEncoding() == "j" { var decoded interface{} if err := json.Unmarshal(kind.ObjValue.GetPayload(), &decoded); err == nil { return decoded diff --git a/web/api/types.go b/web/api/types.go index fcb0461bd..cfb9932b7 100644 --- a/web/api/types.go +++ b/web/api/types.go @@ -46,6 +46,7 @@ type blobReference struct { } type loadBlobsRequest struct { + FlowID string `json:"flowId"` Values []blobReference `json:"values"` } diff --git a/web/app/flows/RunDetailsPage.tsx b/web/app/flows/RunDetailsPage.tsx index 8aaad902c..311198478 100644 --- a/web/app/flows/RunDetailsPage.tsx +++ b/web/app/flows/RunDetailsPage.tsx @@ -186,13 +186,13 @@ export function RunDetailsPage({ flowId, runId }: { flowId: string; runId: strin try { const rawState = await readResponseJSON(await fetch(stateURL, { cache: 'no-store' })); setState(rawState); - const hydrated = await hydrateBlobs(rawState, blobCache.current); + const hydrated = await hydrateBlobs(flowId, rawState, blobCache.current); setState(hydrated.value); if (hydrated.error) addDataWarning(hydrated.error); } catch (stateError) { setError(stateError instanceof Error ? stateError.message : 'State query failed'); } - }, [addDataWarning, stateURL]); + }, [addDataWarning, flowId, stateURL]); const deleteChannelMessage = useCallback(async (channelName: string, messageId: string) => { if (!summary) return; @@ -217,7 +217,7 @@ export function RunDetailsPage({ flowId, runId }: { flowId: string; runId: strin || hydratingEventIDs.current.has(event.eventId)) return; hydratingEventIDs.current.add(event.eventId); try { - const hydrated = await hydrateBlobs(event, blobCache.current); + const hydrated = await hydrateBlobs(flowId, event, blobCache.current); setHydratedEvents((current) => ({ ...current, [event.eventId]: hydrated.value })); hydratedEventIDs.current.add(event.eventId); if (hydrated.error) addDataWarning(hydrated.error); @@ -226,7 +226,7 @@ export function RunDetailsPage({ flowId, runId }: { flowId: string; runId: strin } finally { hydratingEventIDs.current.delete(event.eventId); } - }, [addDataWarning]); + }, [addDataWarning, flowId]); const loadSummary = useCallback(async () => { const value = await readResponseJSON(await fetch(summaryURL, { cache: 'no-store' })); diff --git a/web/app/flows/details/StreamPanel.tsx b/web/app/flows/details/StreamPanel.tsx index efaf03a47..8ef213291 100644 --- a/web/app/flows/details/StreamPanel.tsx +++ b/web/app/flows/details/StreamPanel.tsx @@ -84,7 +84,12 @@ export function StreamPanel({ flowId, flowType }: StreamPanelProps) { streamName: activeStreamName, signal: controller.signal, onMessage: async (rawMessage) => { - const hydrated = await hydrateBlobs(rawMessage.value, blobCache.current, controller.signal); + const hydrated = await hydrateBlobs( + flowId, + rawMessage.value, + blobCache.current, + controller.signal, + ); if (!isActive) return; setMessages((current) => [...current, { ...rawMessage, value: hydrated.value }]); if (hydrated.error) setBlobWarning(hydrated.error); diff --git a/web/lib/blobs.test.ts b/web/lib/blobs.test.ts index 18b14ea15..902bd5fa3 100644 --- a/web/lib/blobs.test.ts +++ b/web/lib/blobs.test.ts @@ -45,8 +45,10 @@ describe('blob hydration', () => { it('batches replacements and reuses cached values', async () => { const fetcher = vi.fn(async (_input: RequestInfo | URL, init?: RequestInit) => { const body = JSON.parse(String(init?.body)) as { + flowId: string; values: Array<{ id: string; kind: string }>; }; + expect(body.flowId).toBe('flow-1'); expect(body.values).toEqual([ { id: 'input', kind: 'object' }, { id: 'attribute', kind: 'string' }, @@ -67,13 +69,13 @@ describe('blob hydration', () => { }, }; - const first = await hydrateBlobs(source, cache, undefined, fetcher as typeof fetch); + const first = await hydrateBlobs('flow-1', source, cache, undefined, fetcher as typeof fetch); expect(first.value).toEqual({ stepInput: { order: 42 }, attributes: [{ value: 'ready' }], conditionResults: { channelResults: [{ values: [{ order: 42 }] }] }, }); - await hydrateBlobs(source, cache, undefined, fetcher as typeof fetch); + await hydrateBlobs('flow-1', source, cache, undefined, fetcher as typeof fetch); expect(fetcher).toHaveBeenCalledTimes(1); }); @@ -83,6 +85,7 @@ describe('blob hydration', () => { { status: 502 }, )); const result = await hydrateBlobs( + 'flow-1', { stepInput: reference('secret-object-id', 'object') }, new Map(), undefined, diff --git a/web/lib/blobs.ts b/web/lib/blobs.ts index d3b70aa93..37083466a 100644 --- a/web/lib/blobs.ts +++ b/web/lib/blobs.ts @@ -27,8 +27,8 @@ type BlobReferenceValue = { const unavailableValue = { __dexStoredValueUnavailable: true } as const; -export function blobCacheKey(reference: BlobReference): string { - return `${reference.kind}:${reference.id}`; +export function blobCacheKey(flowId: string, reference: BlobReference): string { + return `${flowId.length}:${flowId}${blobReferenceKey(reference)}`; } export function isBlobReferenceValue(value: unknown): value is BlobReferenceValue { @@ -56,37 +56,43 @@ export function collectBlobReferences(value: unknown): BlobReference[] { } export async function hydrateBlobs( + flowId: string, value: T, cache: Map, signal?: AbortSignal, fetcher: typeof fetch = fetch, ): Promise> { const references = collectBlobReferences(value); - const missing = references.filter((reference) => !cache.has(blobCacheKey(reference))); + const missing = references.filter((reference) => !cache.has(blobCacheKey(flowId, reference))); if (missing.length === 0) { - return { value: replaceBlobReferences(value, cache, false) as T }; + return { value: replaceBlobReferences(flowId, value, cache, false) as T }; } try { const response = await fetcher('/api/blobs/load', { method: 'POST', headers: { 'content-type': 'application/json' }, - body: JSON.stringify({ values: missing }), + body: JSON.stringify({ flowId, values: missing }), cache: 'no-store', signal, }); const result = await readResponseJSON<{ values?: Record }>(response); for (const [key, resolved] of Object.entries(result.values ?? {})) { - cache.set(key, resolved); + const separator = key.indexOf(':'); + if (separator < 0) continue; + cache.set(blobCacheKey(flowId, { + kind: key.slice(0, separator) as BlobKind, + id: key.slice(separator + 1), + }), resolved); } - const unresolved = missing.some((reference) => !cache.has(blobCacheKey(reference))); + const unresolved = missing.some((reference) => !cache.has(blobCacheKey(flowId, reference))); return { - value: replaceBlobReferences(value, cache, true) as T, + value: replaceBlobReferences(flowId, value, cache, true) as T, ...(unresolved ? { error: VALUE_BLOB_UNAVAILABLE } : {}), }; } catch (error) { if (error instanceof DOMException && error.name === 'AbortError') throw error; return { - value: replaceBlobReferences(value, cache, true) as T, + value: replaceBlobReferences(flowId, value, cache, true) as T, error: VALUE_BLOB_UNAVAILABLE, }; } @@ -95,7 +101,7 @@ export async function hydrateBlobs( function collect(value: unknown, references: Map) { if (isBlobReferenceValue(value)) { const reference = value.__dexBlobReference; - references.set(blobCacheKey(reference), reference); + references.set(blobReferenceKey(reference), reference); return; } if (Array.isArray(value)) { @@ -108,27 +114,32 @@ function collect(value: unknown, references: Map) { } function replaceBlobReferences( + flowId: string, value: unknown, cache: Map, unavailableWhenMissing: boolean, ): unknown { if (isBlobReferenceValue(value)) { - const key = blobCacheKey(value.__dexBlobReference); + const key = blobCacheKey(flowId, value.__dexBlobReference); if (cache.has(key)) return cache.get(key); return unavailableWhenMissing ? unavailableValue : value; } if (Array.isArray(value)) { - return value.map((entry) => replaceBlobReferences(entry, cache, unavailableWhenMissing)); + return value.map((entry) => replaceBlobReferences(flowId, entry, cache, unavailableWhenMissing)); } if (isRecord(value)) { return Object.fromEntries(Object.entries(value).map(([key, entry]) => [ key, - replaceBlobReferences(entry, cache, unavailableWhenMissing), + replaceBlobReferences(flowId, entry, cache, unavailableWhenMissing), ])); } return value; } +function blobReferenceKey(reference: BlobReference): string { + return `${reference.kind}:${reference.id}`; +} + function isRecord(value: unknown): value is Record { return value !== null && typeof value === 'object' && !Array.isArray(value); } diff --git a/web/server_integ_test.go b/web/server_integ_test.go index 41099acc3..da71ccffa 100644 --- a/web/server_integ_test.go +++ b/web/server_integ_test.go @@ -295,6 +295,7 @@ func TestWebServerLoadsBlobs(t *testing.T) { harness := newHarness(t, service) blobResponse := postJSON(t, harness.http.URL+"/api/blobs/load", `{ + "flowId": "flow-1", "values": [ {"id":"string-id","kind":"string"}, {"id":"object-id","kind":"object"}, @@ -317,9 +318,11 @@ func TestWebServerLoadsBlobs(t *testing.T) { t.Fatalf("unexpected object blob: %+v", blobResult.Values) } loadRequest := <-service.loadBlobsRequests - if len(loadRequest.GetValues()) != 2 || - loadRequest.GetValues()[0].GetInternalBlobIdForStringValue() != "string-id" || - loadRequest.GetValues()[1].GetInternalBlobIdForObjValue() != "object-id" { + if len(loadRequest.GetEntries()) != 2 || + loadRequest.GetEntries()[0].GetFlowId() != "flow-1" || + loadRequest.GetEntries()[0].GetBlobValue().GetInternalBlobIdForStringValue() != "string-id" || + loadRequest.GetEntries()[1].GetFlowId() != "flow-1" || + loadRequest.GetEntries()[1].GetBlobValue().GetInternalBlobIdForObjValue() != "object-id" { t.Fatalf("unexpected LoadBlobs request: %+v", loadRequest) } @@ -329,7 +332,7 @@ func TestWebServerLoadsBlobs(t *testing.T) { errorResponse := postJSON( t, errorHarness.http.URL+"/api/blobs/load", - `{"values":[{"id":"string-id","kind":"string"}]}`, + `{"flowId":"flow-1","values":[{"id":"string-id","kind":"string"}]}`, ) defer errorResponse.Body.Close() if errorResponse.StatusCode != http.StatusBadGateway { @@ -488,7 +491,7 @@ func (s *flowService) LoadBlobs( return &dexpb.LoadBlobsResponse{Values: map[string]*dexpb.Value{ "string-id": {Kind: &dexpb.Value_StringValue{StringValue: "loaded string"}}, "object-id": {Kind: &dexpb.Value_ObjValue{ObjValue: &dexpb.EncodedObject{ - Encoding: "json", + Encoding: "j", Payload: []byte(`{"answer":42}`), }}}, }}, nil From 045ea340ba200ef8a71000ff233ca67b72787db1 Mon Sep 17 00:00:00 2001 From: Quanzheng Long Date: Tue, 15 Sep 2026 16:28:13 -0700 Subject: [PATCH 2/8] Compact Blob refs without encoding suffixes --- .../command/flow_client_operations.go | 2 +- cli/internal/command/values.go | 2 +- docs/content/production/server-operations.mdx | 26 ++++---- docs/design/deterministic-blob-identity.md | 18 +++--- docs/design/plan/go-sdk-rewrite.md | 4 +- .../current/production/server-operations.mdx | 24 +++++--- protos/dex.proto | 2 +- sdk-go/README.md | 4 +- sdk-go/dex/value.go | 4 +- sdk-go/dex/value_test.go | 4 +- sdk-go/gen/dexpb/dex.pb.go | 2 +- sdk-java/README.md | 2 +- .../io/superdurable/dex/ValueHydrator.java | 2 +- .../java/io/superdurable/dex/ValueMapper.java | 4 +- .../io/superdurable/gen/EncodedObject.java | 14 ++--- .../gen/EncodedObjectOrBuilder.java | 4 +- .../dex/ClientExceptionIntegrationTest.java | 2 +- .../dex/WorkerServiceIntegrationTest.java | 4 +- sdk-python/README.md | 4 +- sdk-python/dex/_async_value_hydrator.py | 2 +- sdk-python/dex/_value_hydrator.py | 2 +- sdk-python/dex/_value_mapper.py | 4 +- sdk-python/tests/test_contracts.py | 4 +- sdk-python/tests/test_flow_result.py | 2 +- sdk-rust/README.md | 2 +- sdk-rust/crates/dex-sdk/src/value_hydrator.rs | 2 +- sdk-rust/crates/dex-sdk/src/value_mapper.rs | 10 ++-- sdk-typescript/README.md | 2 +- sdk-typescript/src/gen/dex.ts | 2 +- sdk-typescript/src/value-mapper.ts | 22 +++---- .../test/client.integration.test.ts | 2 +- sdk-typescript/test/contracts.test.ts | 4 +- server/gen/dexpb/dex.pb.go | 2 +- server/integ/any_command_close_test.go | 2 +- server/integ/any_command_combination_test.go | 2 +- server/integ/any_timer_signal_test.go | 2 +- server/integ/basic_test.go | 2 +- .../integ/command_thread_completion_test.go | 2 +- server/integ/greedy_timer_test.go | 4 +- server/integ/headers_test.go | 2 +- server/integ/parallel_test.go | 10 ++-- server/integ/runtime.go | 4 +- server/integ/s3_cleanup_test.go | 2 +- server/integ/skip_start_test.go | 2 +- server/integ/start_delay_test.go | 2 +- server/integ/start_with_no_options_test.go | 2 +- server/integ/wait_for_attribute_test.go | 2 +- server/integ/web_api_test.go | 2 +- server/integ/wf_timeout_test.go | 2 +- .../command_thread_completion/routers.go | 2 +- .../workflow/conditional_close/routers.go | 4 +- server/integ/workflow/interstate/routers.go | 4 +- server/integ/workflow/locking/routers.go | 4 +- server/integ/workflow/parallel/routers.go | 2 +- server/integ/workflow/persistence/routers.go | 2 +- .../persistence_loading_policy/routers.go | 2 +- server/integ/workflow/reset/routers.go | 4 +- .../workflow/rpc-external-storage/routers.go | 2 +- server/integ/workflow/rpc/routers.go | 2 +- .../s3-get-set-data-attributes/routers.go | 2 +- .../s3-init-data-attributes/routers.go | 2 +- .../s3-upsert-data-objects/routers.go | 2 +- server/integ/workflow/signal/routers.go | 4 +- .../wait_for_state_completion/routers.go | 2 +- .../routers.go | 2 +- .../routers.go | 2 +- server/script/http/local/home.http | 2 +- server/service/client/temporal/memo_test.go | 2 +- .../service/common/attributestore/manager.go | 2 +- .../attributestore/manager_integ_test.go | 4 +- .../common/attributestore/manager_test.go | 8 +-- .../common/blobstore/blob_cache_integ_test.go | 2 +- server/service/common/blobstore/helpers.go | 59 +++++++------------ server/service/common/blobstore/interfaces.go | 29 +++++---- .../common/blobstore/local_integ_test.go | 38 ++++++++++-- server/service/common/blobstore/store_impl.go | 12 ++-- .../common/blobstore/store_impl_test.go | 12 ++-- .../common/blobstore/store_impl_unit_test.go | 13 ++-- .../service/common/index/searchAttribute.go | 4 +- .../common/index/searchAttribute_test.go | 2 +- server/service/identifiers.go | 2 +- .../service/interpreter/persistence_test.go | 4 +- server/service/interpreter/workflowImpl.go | 2 +- web/api/mapping.go | 2 +- web/server_integ_test.go | 2 +- 85 files changed, 258 insertions(+), 221 deletions(-) diff --git a/cli/internal/command/flow_client_operations.go b/cli/internal/command/flow_client_operations.go index 034ce888b..cd04c1e4e 100644 --- a/cli/internal/command/flow_client_operations.go +++ b/cli/internal/command/flow_client_operations.go @@ -385,7 +385,7 @@ func jsonObjectValue(value any) (*dexpb.Value, error) { if err != nil { return nil, fmt.Errorf("encode JSON value: %w", err) } - return &dexpb.Value{Kind: &dexpb.Value_ObjValue{ObjValue: &dexpb.EncodedObject{Encoding: "j", Payload: payload}}}, nil + return &dexpb.Value{Kind: &dexpb.Value_ObjValue{ObjValue: &dexpb.EncodedObject{Encoding: "json", Payload: payload}}}, nil } func parseInitialAttributes(reader io.Reader, source string) ([]*dexpb.AttributeWrite, error) { diff --git a/cli/internal/command/values.go b/cli/internal/command/values.go index 4ad0f948f..cbbcd7cf5 100644 --- a/cli/internal/command/values.go +++ b/cli/internal/command/values.go @@ -208,7 +208,7 @@ func decodedObject(value map[string]any) any { if current, ok := value["payload"].(string); ok { payload = current } - if encoding == "j" { + if encoding == "json" { decoded, err := base64.StdEncoding.DecodeString(payload) if err == nil { var mapped any diff --git a/docs/content/production/server-operations.mdx b/docs/content/production/server-operations.mdx index 1ef2f6a6b..3c73b73bd 100644 --- a/docs/content/production/server-operations.mdx +++ b/docs/content/production/server-operations.mdx @@ -113,19 +113,24 @@ is still operationally clear. Blob references are opaque application values. Their wire forms are: ~~~text -String: |/ -Object: |/| +String: |/ +Object: |/ + +Example: p1|260913/ab3de7kp2x ~~~ -The standard encodings are **j** for JSON and **r** for raw bytes. Custom -encodings pass through unchanged. The reference keeps the storage ID and UTC -write date, but omits the Flow ID. Dex obtains the owning Flow ID from trusted -request or Worker context. The physical object path is: +The Value arm distinguishes String and Object references. An Object Blob stores +the complete **EncodedObject**, including its **json**, **raw**, or custom +encoding. The reference keeps the storage ID and UTC write date, but omits the +Flow ID and encoding. Dex obtains the owning Flow ID from trusted request or +Worker context. The physical object path is: ~~~text -/v2/$/ +/$/ ~~~ +The two-digit year represents 2000 through 2099. + Internal references belong to exactly one Flow. Dex rehydrates and rewrites a reference before it crosses a Flow boundary. The destination receives an inline value or a new object under its own Flow prefix. Deleting the source @@ -133,9 +138,10 @@ Flow therefore cannot corrupt the destination Flow. Public APIs reject client-supplied internal references. Object IDs use deterministic lowercase Base36 characters. Retries with the -same invocation ID and payload overwrite the same object instead of creating -duplicates. Dex does not perform a read-before-write, conditional create, or -collision retry. **blobStore.objectIdLength** defaults to 10 and accepts values +same invocation ID and stored bytes overwrite the same object instead of +creating duplicates. Object stored bytes include the encoding. Dex does not +perform a read-before-write, conditional create, or collision retry. +**blobStore.objectIdLength** defaults to 10 and accepts values from 10 through 50. Every Server writing the same Blob Store namespace must use the same value, and the setting must not change while those Servers are running. Readers accept every supported length, so a deployment can increase diff --git a/docs/design/deterministic-blob-identity.md b/docs/design/deterministic-blob-identity.md index 2af62ff20..5b9e7707f 100644 --- a/docs/design/deterministic-blob-identity.md +++ b/docs/design/deterministic-blob-identity.md @@ -18,8 +18,7 @@ For `StartFlow`, the server stores the request ID in workflow memo. When `ignore_already_started_error` is enabled, an AlreadyStarted error is ignored only when the running workflow has the same request ID. -`FlowAlreadyStartedOptions.request_id` is removed and its field number and name -are reserved. +`FlowAlreadyStartedOptions.request_id` is removed without a compatibility field. ## Blob object ID @@ -29,7 +28,7 @@ Blob object names use a configurable deterministic lowercase Base36 ID: digest = SHA-256(lengthPrefixed( "dex-blob-v2", invocationID, - payload, + storedBytes, )) objectID = fixedWidthBase36(digest mod 36^objectIdLength) ``` @@ -39,16 +38,20 @@ alphabet is `0123456789abcdefghijklmnopqrstuvwxyz`. The configured length defaul to 10 and accepts 10 through 50. All Servers writing the same namespace use the same immutable value. -Durable History stores a compact locator without the Flow ID: +String blobs store their UTF-8 bytes. Object blobs store a deterministic protobuf +serialization of the complete `EncodedObject`, including its encoding and +payload. The offload threshold still compares the original payload length. + +Durable History stores a compact locator without the Flow ID or encoding: ```text -|/[|] +|/ ``` The Server combines the locator with the contextual Flow ID: ```text -/v2/$/ +/$/ ``` Activity writes use the workflow run ID plus activity ID as `invocationID`. @@ -64,7 +67,8 @@ boundary, the Server reads it with the source Flow ID and writes any still-large value under the destination Flow ID. This makes cleanup of the source Flow safe. The date prefix uses the server's UTC date when the object is written. A retry -crossing a UTC date boundary can create another path. +crossing a UTC date boundary can create another path. Its two-digit year covers +2000 through 2099. S3 bucket versioning must remain disabled. Otherwise, repeated writes to one deterministic key retain hidden object versions. diff --git a/docs/design/plan/go-sdk-rewrite.md b/docs/design/plan/go-sdk-rewrite.md index e39c25675..b2b5c16b2 100644 --- a/docs/design/plan/go-sdk-rewrite.md +++ b/docs/design/plan/go-sdk-rewrite.md @@ -134,8 +134,8 @@ remains internal. | unsigned integers up to `math.MaxInt64` | `int_value` | | float32 and float64 | `double_value` | | bool and named bools | `bool_value` | -| `[]byte` and named byte slices | `obj_value`, encoding `"r"` | -| all other JSON-compatible values | `obj_value`, encoding `"j"` | +| `[]byte` and named byte slices | `obj_value`, encoding `"raw"` | +| all other JSON-compatible values | `obj_value`, encoding `"json"` | Strings with invalid UTF-8 return an encoding error; arbitrary binary data uses `[]byte`. Raw-byte object payloads contain the bytes directly without JSON or diff --git a/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/production/server-operations.mdx b/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/production/server-operations.mdx index f060b06a8..3a581b830 100644 --- a/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/production/server-operations.mdx +++ b/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/production/server-operations.mdx @@ -103,26 +103,32 @@ blobStore: 应用必须将 Blob reference 视为 opaque value。其 wire format 为: ~~~text -String: |/ -Object: |/| +String: |/ +Object: |/ + +示例:p1|260913/ab3de7kp2x ~~~ -标准 encoding 使用 **j** 表示 JSON,使用 **r** 表示 raw bytes。custom encoding 保持透传。 -reference 保留 storage ID 和 UTC write date,但不保存 Flow ID。Dex 从可信的 request 或 -Worker context 获取 owner Flow ID。物理 object path 为: +Value arm 用于区分 String 和 Object reference。Object Blob 保存完整的 **EncodedObject**, +其中包括 **json**、**raw** 或 custom encoding。reference 保留 storage ID 和 UTC write date, +但不保存 Flow ID 和 encoding。Dex 从可信的 request 或 Worker context 获取 owner Flow ID。 +物理 object path 为: ~~~text -/v2/$/ +/$/ ~~~ +两位年份表示 2000 到 2099 年。 + internal reference 只属于一个 Flow。在 reference 跨越 Flow boundary 前,Dex 会先 hydrate, 再为目标 Flow 重写。目标 Flow 会收到 inline value,或收到存储在自身 Flow prefix 下的新 object。因此,删除源 Flow 不会损坏目标 Flow。public API 会拒绝客户端提交的 internal reference。 -object ID 使用确定性的全小写 Base36 字符。同一个 invocation ID 和 payload 的 retry 会覆盖 -同一个 object,不会生成重复 object。Dex 不执行 read-before-write、conditional create 或 -collision retry。**blobStore.objectIdLength** 默认值为 10,有效范围是 10 到 50。写入同一个 +object ID 使用确定性的全小写 Base36 字符。同一个 invocation ID 和 stored bytes 的 retry 会 +覆盖同一个 object,不会生成重复 object。Object stored bytes 包含 encoding。Dex 不执行 +read-before-write、conditional create 或 collision retry。**blobStore.objectIdLength** 默认值为 +10,有效范围是 10 到 50。写入同一个 Blob Store namespace 的所有 Server 必须使用相同值,而且 Server 运行期间不能修改该值。 reader 接受范围内的所有长度,因此 deployment 可在协调重启时提高配置长度。 diff --git a/protos/dex.proto b/protos/dex.proto index f7a1819c6..ef5974c3e 100644 --- a/protos/dex.proto +++ b/protos/dex.proto @@ -132,7 +132,7 @@ message Value { } message EncodedObject { - // "j" is JSON and "r" is raw bytes. Other values are passed through. + // "json" is JSON and "raw" is raw bytes. Other values are passed through. string encoding = 1; bytes payload = 2; } diff --git a/sdk-go/README.md b/sdk-go/README.md index 49144f99d..9243a85b4 100644 --- a/sdk-go/README.md +++ b/sdk-go/README.md @@ -566,9 +566,9 @@ argument and context errors remain ordinary Go errors. Strings, booleans, signed integers, representable unsigned integers, and floating-point values use native Dex value arms. Strings must contain valid UTF-8; use `[]byte` for arbitrary binary data. Byte slices use an object arm -with wire encoding `"r"` and store the bytes directly without base64. +with wire encoding `"raw"` and store the bytes directly without base64. Structs, maps, other slices, arrays, and JSON-compatible values use an object -arm with wire encoding `"j"`. +arm with wire encoding `"json"`. Internal Blob references are opaque. Hydration sends the owning Flow ID with each reference, and the local cache is isolated by `(flowID, blobRef)`. diff --git a/sdk-go/dex/value.go b/sdk-go/dex/value.go index 341d7ba63..5e602085a 100644 --- a/sdk-go/dex/value.go +++ b/sdk-go/dex/value.go @@ -24,8 +24,8 @@ import ( ) const ( - jsonEncoding = "j" - rawBytesEncoding = "r" + jsonEncoding = "json" + rawBytesEncoding = "raw" dateTimeFormat = time.RFC3339Nano ) diff --git a/sdk-go/dex/value_test.go b/sdk-go/dex/value_test.go index 6f2effdf2..934c2ed3f 100644 --- a/sdk-go/dex/value_test.go +++ b/sdk-go/dex/value_test.go @@ -34,8 +34,8 @@ type codecInterface interface { } func TestValueCodecNativeAndJSONRoundTrips(t *testing.T) { - require.Equal(t, "j", jsonEncoding) - require.Equal(t, "r", rawBytesEncoding) + require.Equal(t, "json", jsonEncoding) + require.Equal(t, "raw", rawBytesEncoding) testCases := []struct { name string diff --git a/sdk-go/gen/dexpb/dex.pb.go b/sdk-go/gen/dexpb/dex.pb.go index 4c274e5b2..062c1b020 100644 --- a/sdk-go/gen/dexpb/dex.pb.go +++ b/sdk-go/gen/dexpb/dex.pb.go @@ -1473,7 +1473,7 @@ func (*Value_NullValue) isValue_Kind() {} type EncodedObject struct { state protoimpl.MessageState `protogen:"open.v1"` - // "j" is JSON and "r" is raw bytes. Other values are passed through. + // "json" is JSON and "raw" is raw bytes. Other values are passed through. Encoding string `protobuf:"bytes,1,opt,name=encoding,proto3" json:"encoding,omitempty"` Payload []byte `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"` unknownFields protoimpl.UnknownFields diff --git a/sdk-java/README.md b/sdk-java/README.md index 06a6b717b..80511f62d 100644 --- a/sdk-java/README.md +++ b/sdk-java/README.md @@ -297,7 +297,7 @@ to hydrate blob-backed values through Dex FlowService. `workerTarget` is the address advertised in Flow configuration; when omitted, Worker derives it from the bind address and exposes it through `worker.getWorkerTarget()`. -Serialized object values use wire encoding `j` for JSON and `r` for raw bytes. +Serialized object values use wire encoding `json` for JSON and `raw` for raw bytes. Internal Blob references are opaque. Hydration sends the owning Flow ID with each reference, and the local cache is isolated by `(flowId, blobRef)`. diff --git a/sdk-java/src/main/java/io/superdurable/dex/ValueHydrator.java b/sdk-java/src/main/java/io/superdurable/dex/ValueHydrator.java index 396c92c0a..46d21e216 100644 --- a/sdk-java/src/main/java/io/superdurable/dex/ValueHydrator.java +++ b/sdk-java/src/main/java/io/superdurable/dex/ValueHydrator.java @@ -406,7 +406,7 @@ private static void validateConcrete(final Value value) { return; case OBJ_VALUE: final String encoding = value.getObjValue().getEncoding(); - if (!"j".equals(encoding) && !"r".equals(encoding)) { + if (!"json".equals(encoding) && !"raw".equals(encoding)) { throw new IllegalArgumentException("unsupported object encoding " + encoding); } return; diff --git a/sdk-java/src/main/java/io/superdurable/dex/ValueMapper.java b/sdk-java/src/main/java/io/superdurable/dex/ValueMapper.java index 8e00719e9..cb026b377 100644 --- a/sdk-java/src/main/java/io/superdurable/dex/ValueMapper.java +++ b/sdk-java/src/main/java/io/superdurable/dex/ValueMapper.java @@ -28,8 +28,8 @@ import java.time.Instant; final class ValueMapper { - private static final String JSON = "j"; - private static final String RAW_BYTES = "r"; + private static final String JSON = "json"; + private static final String RAW_BYTES = "raw"; private final ObjectMapper objectMapper; diff --git a/sdk-java/src/main/java/io/superdurable/gen/EncodedObject.java b/sdk-java/src/main/java/io/superdurable/gen/EncodedObject.java index 4d66ff4c2..be6604438 100644 --- a/sdk-java/src/main/java/io/superdurable/gen/EncodedObject.java +++ b/sdk-java/src/main/java/io/superdurable/gen/EncodedObject.java @@ -55,7 +55,7 @@ public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { private volatile java.lang.Object encoding_ = ""; /** *
-   * "j" is JSON and "r" is raw bytes. Other values are passed through.
+   * "json" is JSON and "raw" is raw bytes. Other values are passed through.
    * 
* * string encoding = 1; @@ -76,7 +76,7 @@ public java.lang.String getEncoding() { } /** *
-   * "j" is JSON and "r" is raw bytes. Other values are passed through.
+   * "json" is JSON and "raw" is raw bytes. Other values are passed through.
    * 
* * string encoding = 1; @@ -432,7 +432,7 @@ public Builder mergeFrom( private java.lang.Object encoding_ = ""; /** *
-     * "j" is JSON and "r" is raw bytes. Other values are passed through.
+     * "json" is JSON and "raw" is raw bytes. Other values are passed through.
      * 
* * string encoding = 1; @@ -452,7 +452,7 @@ public java.lang.String getEncoding() { } /** *
-     * "j" is JSON and "r" is raw bytes. Other values are passed through.
+     * "json" is JSON and "raw" is raw bytes. Other values are passed through.
      * 
* * string encoding = 1; @@ -473,7 +473,7 @@ public java.lang.String getEncoding() { } /** *
-     * "j" is JSON and "r" is raw bytes. Other values are passed through.
+     * "json" is JSON and "raw" is raw bytes. Other values are passed through.
      * 
* * string encoding = 1; @@ -490,7 +490,7 @@ public Builder setEncoding( } /** *
-     * "j" is JSON and "r" is raw bytes. Other values are passed through.
+     * "json" is JSON and "raw" is raw bytes. Other values are passed through.
      * 
* * string encoding = 1; @@ -504,7 +504,7 @@ public Builder clearEncoding() { } /** *
-     * "j" is JSON and "r" is raw bytes. Other values are passed through.
+     * "json" is JSON and "raw" is raw bytes. Other values are passed through.
      * 
* * string encoding = 1; diff --git a/sdk-java/src/main/java/io/superdurable/gen/EncodedObjectOrBuilder.java b/sdk-java/src/main/java/io/superdurable/gen/EncodedObjectOrBuilder.java index c84fbfeb9..2f14da32e 100644 --- a/sdk-java/src/main/java/io/superdurable/gen/EncodedObjectOrBuilder.java +++ b/sdk-java/src/main/java/io/superdurable/gen/EncodedObjectOrBuilder.java @@ -12,7 +12,7 @@ public interface EncodedObjectOrBuilder extends /** *
-   * "j" is JSON and "r" is raw bytes. Other values are passed through.
+   * "json" is JSON and "raw" is raw bytes. Other values are passed through.
    * 
* * string encoding = 1; @@ -21,7 +21,7 @@ public interface EncodedObjectOrBuilder extends java.lang.String getEncoding(); /** *
-   * "j" is JSON and "r" is raw bytes. Other values are passed through.
+   * "json" is JSON and "raw" is raw bytes. Other values are passed through.
    * 
* * string encoding = 1; diff --git a/sdk-java/src/test/java/io/superdurable/dex/ClientExceptionIntegrationTest.java b/sdk-java/src/test/java/io/superdurable/dex/ClientExceptionIntegrationTest.java index f644819f0..31c4a557a 100644 --- a/sdk-java/src/test/java/io/superdurable/dex/ClientExceptionIntegrationTest.java +++ b/sdk-java/src/test/java/io/superdurable/dex/ClientExceptionIntegrationTest.java @@ -455,7 +455,7 @@ public void loadBlobs( value.getInternalBlobIdForObjValue(), Value.newBuilder() .setObjValue(EncodedObject.newBuilder() - .setEncoding("r") + .setEncoding("raw") .setPayload(ByteString.copyFromUtf8("done"))) .build()); } diff --git a/sdk-java/src/test/java/io/superdurable/dex/WorkerServiceIntegrationTest.java b/sdk-java/src/test/java/io/superdurable/dex/WorkerServiceIntegrationTest.java index c650debca..187a361e0 100644 --- a/sdk-java/src/test/java/io/superdurable/dex/WorkerServiceIntegrationTest.java +++ b/sdk-java/src/test/java/io/superdurable/dex/WorkerServiceIntegrationTest.java @@ -79,9 +79,9 @@ final class WorkerServiceIntegrationTest { @Test void usesCompactObjectEncodingWireValues() { final ValueMapper values = new ValueMapper(new ObjectMapper()); - assertEquals("j", values.encode(Collections.singletonMap("key", "value")) + assertEquals("json", values.encode(Collections.singletonMap("key", "value")) .getObjValue().getEncoding()); - assertEquals("r", values.encode(new byte[] {1, 2, 3}) + assertEquals("raw", values.encode(new byte[] {1, 2, 3}) .getObjValue().getEncoding()); } diff --git a/sdk-python/README.md b/sdk-python/README.md index 6ed6c407a..d2706eff6 100644 --- a/sdk-python/README.md +++ b/sdk-python/README.md @@ -439,8 +439,8 @@ client operations, and assertions as the Java suite against an isolated The strongly typed contracts, registry, synchronous Client/Worker, optional `AsyncClient`/`AsyncWorker` (`grpc.aio`), and Rust-backed BlobCache are implemented. Python owns its gRPC transport; the native bridge is limited to -the shared BlobCache. Serialized object values use wire encoding `j` for JSON -and `r` for raw bytes. Internal Blob references are opaque. Hydration sends the +the shared BlobCache. Serialized object values use wire encoding `json` for JSON +and `raw` for raw bytes. Internal Blob references are opaque. Hydration sends the owning Flow ID with each reference, and the cache is isolated by `(flow_id, blob_ref)`. Design notes: [`python-sdk-async-apis.md`](../docs/design/plan/python-sdk-async-apis.md) and diff --git a/sdk-python/dex/_async_value_hydrator.py b/sdk-python/dex/_async_value_hydrator.py index 51143535a..2fc607b8a 100644 --- a/sdk-python/dex/_async_value_hydrator.py +++ b/sdk-python/dex/_async_value_hydrator.py @@ -305,7 +305,7 @@ def _validate_concrete(value: pb.Value) -> None: raise ValueError("non-finite numbers are unsupported") return if kind == "obj_value": - if value.obj_value.encoding not in ("j", "r"): + if value.obj_value.encoding not in ("json", "raw"): raise ValueError( f"unsupported object encoding {value.obj_value.encoding}" ) diff --git a/sdk-python/dex/_value_hydrator.py b/sdk-python/dex/_value_hydrator.py index 61bfcdca3..b745e8729 100644 --- a/sdk-python/dex/_value_hydrator.py +++ b/sdk-python/dex/_value_hydrator.py @@ -299,7 +299,7 @@ def _validate_concrete(value: pb.Value) -> None: raise ValueError("non-finite numbers are unsupported") return if kind == "obj_value": - if value.obj_value.encoding not in ("j", "r"): + if value.obj_value.encoding not in ("json", "raw"): raise ValueError( f"unsupported object encoding {value.obj_value.encoding}" ) diff --git a/sdk-python/dex/_value_mapper.py b/sdk-python/dex/_value_mapper.py index a7363ad25..963d2f670 100644 --- a/sdk-python/dex/_value_mapper.py +++ b/sdk-python/dex/_value_mapper.py @@ -21,8 +21,8 @@ from dex.dexpb import dex_pb2 as pb from dex.runtime_errors import ValueMappingError -_JSON_ENCODING = "j" -_RAW_BYTES_ENCODING = "r" +_JSON_ENCODING = "json" +_RAW_BYTES_ENCODING = "raw" class ValueMapper: diff --git a/sdk-python/tests/test_contracts.py b/sdk-python/tests/test_contracts.py index 3880bfaae..fc9e398c1 100644 --- a/sdk-python/tests/test_contracts.py +++ b/sdk-python/tests/test_contracts.py @@ -537,8 +537,8 @@ def test_builtin_codecs_enforce_wire_types_and_ranges() -> None: def test_object_codecs_use_compact_wire_encodings() -> None: values = ValueMapper(CodecRegistry()) - assert values.encode_dynamic({"order_id": "order-1"}).obj_value.encoding == "j" - assert values.encode_dynamic(b"payload").obj_value.encoding == "r" + assert values.encode_dynamic({"order_id": "order-1"}).obj_value.encoding == "json" + assert values.encode_dynamic(b"payload").obj_value.encoding == "raw" def test_fluent_wait_factories_validate_channel_bounds() -> None: diff --git a/sdk-python/tests/test_flow_result.py b/sdk-python/tests/test_flow_result.py index e20278503..9234a1889 100644 --- a/sdk-python/tests/test_flow_result.py +++ b/sdk-python/tests/test_flow_result.py @@ -93,7 +93,7 @@ def LoadBlobs( # noqa: N802 elif blob_id == "internal_blob_id_for_obj_value": key = value.internal_blob_id_for_obj_value values[key] = pb.Value( - obj_value=pb.EncodedObject(encoding="r", payload=b"done") + obj_value=pb.EncodedObject(encoding="raw", payload=b"done") ) else: raise AssertionError("unexpected LoadBlobs value") diff --git a/sdk-rust/README.md b/sdk-rust/README.md index c704ed36b..2f73fae0e 100644 --- a/sdk-rust/README.md +++ b/sdk-rust/README.md @@ -336,7 +336,7 @@ retaining protocol presence. The shared cache keeps opaque payload bytes on disk and uses Stretto only for metadata admission and eviction: -Serialized object values use wire encoding `j` for JSON and `r` for raw bytes. +Serialized object values use wire encoding `json` for JSON and `raw` for raw bytes. Internal Blob references are opaque. Hydration sends the owning Flow ID with each reference, and SDK cache keys are isolated by `(flow_id, blob_ref)`. diff --git a/sdk-rust/crates/dex-sdk/src/value_hydrator.rs b/sdk-rust/crates/dex-sdk/src/value_hydrator.rs index 69e146bbd..2a15d83c2 100644 --- a/sdk-rust/crates/dex-sdk/src/value_hydrator.rs +++ b/sdk-rust/crates/dex-sdk/src/value_hydrator.rs @@ -217,7 +217,7 @@ fn validate_concrete(value: &Value) -> SdkResult<()> { Some(value::Kind::DoubleValue(_)) => { Err(mapping_error("non-finite numbers are unsupported")) } - Some(value::Kind::ObjValue(object)) if object.encoding == "j" || object.encoding == "r" => { + Some(value::Kind::ObjValue(object)) if object.encoding == "json" || object.encoding == "raw" => { Ok(()) } Some(value::Kind::ObjValue(object)) => Err(mapping_error(format!( diff --git a/sdk-rust/crates/dex-sdk/src/value_mapper.rs b/sdk-rust/crates/dex-sdk/src/value_mapper.rs index 2fd7440c0..ff0b5f99a 100644 --- a/sdk-rust/crates/dex-sdk/src/value_mapper.rs +++ b/sdk-rust/crates/dex-sdk/src/value_mapper.rs @@ -65,7 +65,7 @@ fn encode_json(json: JsonValue) -> SdkResult { } } other => value::Kind::ObjValue(EncodedObject { - encoding: "j".to_string(), + encoding: "json".to_string(), payload: serde_json::to_vec(&other).map_err(mapping_error)?, }), }; @@ -81,10 +81,10 @@ fn decode_json(input: &ProtoValue) -> SdkResult { } Some(value::Kind::DoubleValue(_)) => Err(value_error("non-finite numbers are unsupported")), Some(value::Kind::BoolValue(value)) => Ok(JsonValue::Bool(*value)), - Some(value::Kind::ObjValue(object)) if object.encoding == "j" => { + Some(value::Kind::ObjValue(object)) if object.encoding == "json" => { serde_json::from_slice(&object.payload).map_err(mapping_error) } - Some(value::Kind::ObjValue(object)) if object.encoding == "r" => Ok(JsonValue::Array( + Some(value::Kind::ObjValue(object)) if object.encoding == "raw" => Ok(JsonValue::Array( object .payload .iter() @@ -131,11 +131,11 @@ mod tests { let Some(value::Kind::ObjValue(encoded_json)) = encoded_json.kind else { panic!("expected encoded object"); }; - assert_eq!(encoded_json.encoding, "j"); + assert_eq!(encoded_json.encoding, "json"); let encoded_bytes = ProtoValue { kind: Some(value::Kind::ObjValue(EncodedObject { - encoding: "r".to_string(), + encoding: "raw".to_string(), payload: vec![1, 2, 3], })), }; diff --git a/sdk-typescript/README.md b/sdk-typescript/README.md index 7512bfacf..bcbb3719f 100644 --- a/sdk-typescript/README.md +++ b/sdk-typescript/README.md @@ -409,7 +409,7 @@ continue importing only from `@superdurable/dex`. - `blob-cache.ts`: DXBC BlobCache contract and Node-API binding loader - `gen/`: checked-in protobuf and grpc-js bindings -Serialized object values use wire encoding `j` for JSON and `r` for raw bytes. +Serialized object values use wire encoding `json` for JSON and `raw` for raw bytes. Internal Blob references are opaque. Hydration sends the owning Flow ID with each reference, and the cache is isolated by `(flowId, blobRef)`. diff --git a/sdk-typescript/src/gen/dex.ts b/sdk-typescript/src/gen/dex.ts index a06e6f3a2..82b34d471 100644 --- a/sdk-typescript/src/gen/dex.ts +++ b/sdk-typescript/src/gen/dex.ts @@ -256,7 +256,7 @@ export interface Value { } export interface EncodedObject { - /** "j" is JSON and "r" is raw bytes. Other values are passed through. */ + /** "json" is JSON and "raw" is raw bytes. Other values are passed through. */ encoding: string; payload: Uint8Array; } diff --git a/sdk-typescript/src/value-mapper.ts b/sdk-typescript/src/value-mapper.ts index cf7a0e150..669873c65 100644 --- a/sdk-typescript/src/value-mapper.ts +++ b/sdk-typescript/src/value-mapper.ts @@ -28,7 +28,7 @@ const textDecoder = new TextDecoder(); export function encodeValue(codec: Codec, value: T): ProtoValue { if (value === undefined || value === null) { - return objectValue("j", textEncoder.encode("null")); + return objectValue("json", textEncoder.encode("null")); } let encoded: CodecValue; try { @@ -46,15 +46,15 @@ export function encodeValue(codec: Codec, value: T): ProtoValue { case "double": return ProtoValue.create({ kind: { $case: "doubleValue", value: encoded.data } }); case "bytes": - return objectValue("r", encoded.data); + return objectValue("raw", encoded.data); case "json": - return objectValue("j", textEncoder.encode(encoded.data)); + return objectValue("json", textEncoder.encode(encoded.data)); } } export function encodeUnknown(value: unknown): ProtoValue { if (value === undefined || value === null) { - return objectValue("j", textEncoder.encode("null")); + return objectValue("json", textEncoder.encode("null")); } if (typeof value === "string") { return ProtoValue.create({ kind: { $case: "stringValue", value } }); @@ -72,7 +72,7 @@ export function encodeUnknown(value: unknown): ProtoValue { return ProtoValue.create({ kind: { $case: "doubleValue", value } }); } if (value instanceof Uint8Array) { - return objectValue("r", value); + return objectValue("raw", value); } let json: string | undefined; try { @@ -83,13 +83,13 @@ export function encodeUnknown(value: unknown): ProtoValue { if (json === undefined) { throw new ValueMappingError("encode", "value cannot be encoded as JSON"); } - return objectValue("j", textEncoder.encode(json)); + return objectValue("json", textEncoder.encode(json)); } export function decodeValue(codec: Codec, value: ProtoValue): T { if ( value.kind?.$case === "objValue" && - value.kind.value.encoding === "j" && + value.kind.value.encoding === "json" && textDecoder.decode(value.kind.value.payload) === "null" ) { return undefined as T; @@ -117,10 +117,10 @@ export function decodeUnknown(value: ProtoValue): unknown { return kind.value; case "objValue": { const object = kind.value; - if (object.encoding === "r") { + if (object.encoding === "raw") { return object.payload; } - if (object.encoding === "j") { + if (object.encoding === "json") { try { return JSON.parse(textDecoder.decode(object.payload)); } catch (failure) { @@ -260,10 +260,10 @@ function toCodecValue(value: ProtoValue): CodecValue { case "doubleValue": return { kind: "double", data: kind.value }; case "objValue": - if (kind.value.encoding === "r") { + if (kind.value.encoding === "raw") { return { kind: "bytes", data: kind.value.payload }; } - if (kind.value.encoding === "j") { + if (kind.value.encoding === "json") { return { kind: "json", data: textDecoder.decode(kind.value.payload) }; } throw new ValueMappingError("decode", `unsupported object encoding ${kind.value.encoding}`); diff --git a/sdk-typescript/test/client.integration.test.ts b/sdk-typescript/test/client.integration.test.ts index 6043c3949..3391f86e6 100644 --- a/sdk-typescript/test/client.integration.test.ts +++ b/sdk-typescript/test/client.integration.test.ts @@ -464,7 +464,7 @@ function protoJson(value: unknown): Value { return Value.create({ kind: { $case: "objValue", - value: { encoding: "j", payload: new TextEncoder().encode(JSON.stringify(value)) }, + value: { encoding: "json", payload: new TextEncoder().encode(JSON.stringify(value)) }, }, }); } diff --git a/sdk-typescript/test/contracts.test.ts b/sdk-typescript/test/contracts.test.ts index 569a2e4d3..be284515b 100644 --- a/sdk-typescript/test/contracts.test.ts +++ b/sdk-typescript/test/contracts.test.ts @@ -213,11 +213,11 @@ test("omitted codecs use identity JSON rather than scalar wire kinds", () => { assert.deepEqual(identity.decode(identity.encode(order)), order); const jsonString = encodeValue(codecOrJson(), "hello"); assert.equal(jsonString.kind?.$case, "objValue"); - assert.equal(jsonString.kind?.$case === "objValue" ? jsonString.kind.value.encoding : "", "j"); + assert.equal(jsonString.kind?.$case === "objValue" ? jsonString.kind.value.encoding : "", "json"); const scalarString = encodeValue(stringCodec, "hello"); assert.equal(scalarString.kind?.$case, "stringValue"); const rawBytes = encodeValue(bytesCodec, new Uint8Array([1, 2, 3])); - assert.equal(rawBytes.kind?.$case === "objValue" ? rawBytes.kind.value.encoding : "", "r"); + assert.equal(rawBytes.kind?.$case === "objValue" ? rawBytes.kind.value.encoding : "", "raw"); }); test("object Step and RPC omit codecs and still encode JSON", async () => { diff --git a/server/gen/dexpb/dex.pb.go b/server/gen/dexpb/dex.pb.go index 4c274e5b2..062c1b020 100644 --- a/server/gen/dexpb/dex.pb.go +++ b/server/gen/dexpb/dex.pb.go @@ -1473,7 +1473,7 @@ func (*Value_NullValue) isValue_Kind() {} type EncodedObject struct { state protoimpl.MessageState `protogen:"open.v1"` - // "j" is JSON and "r" is raw bytes. Other values are passed through. + // "json" is JSON and "raw" is raw bytes. Other values are passed through. Encoding string `protobuf:"bytes,1,opt,name=encoding,proto3" json:"encoding,omitempty"` Payload []byte `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"` unknownFields protoimpl.UnknownFields diff --git a/server/integ/any_command_close_test.go b/server/integ/any_command_close_test.go index a143b9007..2b078ccab 100644 --- a/server/integ/any_command_close_test.go +++ b/server/integ/any_command_close_test.go @@ -98,7 +98,7 @@ func doTestAnyCommandCloseFlow( }) require.NoError(t, err) - signalValue := encodedObjectValue("j", []byte("test-data-1")) + signalValue := encodedObjectValue("json", []byte("test-data-1")) _, err = flowClient.PublishToChannel(ctx, &dexpb.PublishToChannelRequest{ FlowId: flowId, Messages: []*dexpb.ChannelMessage{ diff --git a/server/integ/any_command_combination_test.go b/server/integ/any_command_combination_test.go index 94a867527..bd2a6ecc5 100644 --- a/server/integ/any_command_combination_test.go +++ b/server/integ/any_command_combination_test.go @@ -99,7 +99,7 @@ func doTestAnyCommandCombinationFlow( }) require.NoError(t, err) - signalValue := encodedObjectValue("j", []byte("test-data-1")) + signalValue := encodedObjectValue("json", []byte("test-data-1")) publishSignal := func() { _, publishErr := flowClient.PublishToChannel(ctx, &dexpb.PublishToChannelRequest{ FlowId: flowId, diff --git a/server/integ/any_timer_signal_test.go b/server/integ/any_timer_signal_test.go index 86c1adaa7..62cfc402c 100644 --- a/server/integ/any_timer_signal_test.go +++ b/server/integ/any_timer_signal_test.go @@ -139,7 +139,7 @@ func doTestAnyTimerSignalFlow( require.NoError(t, err) time.Sleep(3 * time.Second) - signalValue := encodedObjectValue("j", []byte("test-data-1")) + signalValue := encodedObjectValue("json", []byte("test-data-1")) _, err = flowClient.PublishToChannel(ctx, &dexpb.PublishToChannelRequest{ FlowId: flowId, Messages: []*dexpb.ChannelMessage{ diff --git a/server/integ/basic_test.go b/server/integ/basic_test.go index 4f7cef9ff..ff73fd660 100644 --- a/server/integ/basic_test.go +++ b/server/integ/basic_test.go @@ -101,7 +101,7 @@ func doTestBasicFlow( flowInput := &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: []byte("test data"), }, }, diff --git a/server/integ/command_thread_completion_test.go b/server/integ/command_thread_completion_test.go index 9fd0b1652..dbc1d855c 100644 --- a/server/integ/command_thread_completion_test.go +++ b/server/integ/command_thread_completion_test.go @@ -237,7 +237,7 @@ func doTestCommandThreadCompletion( expected := &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: []byte("channel-data"), }, }, diff --git a/server/integ/greedy_timer_test.go b/server/integ/greedy_timer_test.go index 4f9f39762..683cc04a0 100644 --- a/server/integ/greedy_timer_test.go +++ b/server/integ/greedy_timer_test.go @@ -97,7 +97,7 @@ func doTestGreedyTimerFlowCustomConfig( FlowTimeoutSeconds: 300, StartStepType: greedy_timer.ScheduleTimerState, - StepInput: encodedObjectValue("j", inputData), + StepInput: encodedObjectValue("json", inputData), FlowStartOptions: withWorkerTarget(&dexpb.FlowStartOptions{ FlowConfigOverride: flowConfig, }, workerTarget), @@ -159,7 +159,7 @@ func scheduleTimerAndAssertExpectedScheduled( RequestId: newRequestID(), FlowId: flowId, RpcName: greedy_timer.SubmitDurationsRPC, - Input: encodedObjectValue("j", inputData), + Input: encodedObjectValue("json", inputData), TimeoutSeconds: 2, }) require.NoError(t, err) diff --git a/server/integ/headers_test.go b/server/integ/headers_test.go index 54aa9efb6..5ff2fdc20 100644 --- a/server/integ/headers_test.go +++ b/server/integ/headers_test.go @@ -83,7 +83,7 @@ func doTestFlowWithHeaders( defer cancel() flowId := headers.WorkflowType + "-" + uuid.NewString() - stepInput := encodedObjectValue("j", []byte("test data")) + stepInput := encodedObjectValue("json", []byte("test data")) _, err := flowClient.StartFlow(ctx, &dexpb.StartFlowRequest{ RequestId: newRequestID(), FlowId: flowId, diff --git a/server/integ/parallel_test.go b/server/integ/parallel_test.go index a3fecf940..025137e2b 100644 --- a/server/integ/parallel_test.go +++ b/server/integ/parallel_test.go @@ -116,7 +116,7 @@ func doTestParallelFlow( CompletedStepType: parallel.State13, CompletedStepExecutionId: parallel.State13 + "-1", CompletedStepOutput: encodedObjectValue( - "j", + "json", []byte("from "+parallel.State13), ), }, @@ -124,7 +124,7 @@ func doTestParallelFlow( CompletedStepType: parallel.State111, CompletedStepExecutionId: parallel.State111 + "-1", CompletedStepOutput: encodedObjectValue( - "j", + "json", []byte("from "+parallel.State111), ), }, @@ -132,7 +132,7 @@ func doTestParallelFlow( CompletedStepType: parallel.State112, CompletedStepExecutionId: parallel.State112 + "-1", CompletedStepOutput: encodedObjectValue( - "j", + "json", []byte("from "+parallel.State112), ), }, @@ -140,7 +140,7 @@ func doTestParallelFlow( CompletedStepType: parallel.State121, CompletedStepExecutionId: parallel.State121 + "-1", CompletedStepOutput: encodedObjectValue( - "j", + "json", []byte("from "+parallel.State121), ), }, @@ -148,7 +148,7 @@ func doTestParallelFlow( CompletedStepType: parallel.State122, CompletedStepExecutionId: parallel.State122 + "-1", CompletedStepOutput: encodedObjectValue( - "j", + "json", []byte("from "+parallel.State122), ), }, diff --git a/server/integ/runtime.go b/server/integ/runtime.go index fcb830a60..45f44008f 100644 --- a/server/integ/runtime.go +++ b/server/integ/runtime.go @@ -599,7 +599,7 @@ func jsonObjValue(payload any) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: bytes, }, }, @@ -632,7 +632,7 @@ func objJSONValue(payload string) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: []byte(payload), }, }, diff --git a/server/integ/s3_cleanup_test.go b/server/integ/s3_cleanup_test.go index 4983c563e..e3d3fee0b 100644 --- a/server/integ/s3_cleanup_test.go +++ b/server/integ/s3_cleanup_test.go @@ -125,7 +125,7 @@ func doTestWorkflowWithS3Cleanup(t *testing.T, backendType service.BackendType) continuationToken = output.ContinuationToken } - todayPrefix := time.Now().UTC().Format("20060102") + todayPrefix := time.Now().UTC().Format("060102") foundCount := 0 for _, flowId := range flowIds { expectedPath := fmt.Sprintf( diff --git a/server/integ/skip_start_test.go b/server/integ/skip_start_test.go index 01779cb48..5a1c23fb5 100644 --- a/server/integ/skip_start_test.go +++ b/server/integ/skip_start_test.go @@ -77,7 +77,7 @@ func doTestSkipStartFlow( defer cancel() flowId := skipstart.WorkflowType + "-" + uuid.NewString() - stepInput := encodedObjectValue("j", []byte("test data")) + stepInput := encodedObjectValue("json", []byte("test data")) _, err := flowClient.StartFlow(ctx, &dexpb.StartFlowRequest{ RequestId: newRequestID(), FlowId: flowId, diff --git a/server/integ/start_delay_test.go b/server/integ/start_delay_test.go index 091730342..b2b80995e 100644 --- a/server/integ/start_delay_test.go +++ b/server/integ/start_delay_test.go @@ -49,7 +49,7 @@ func doTestStartDelay( defer cancel() flowId := basic.FlowType + "-" + uuid.NewString() - stepInput := encodedObjectValue("j", []byte("test data")) + stepInput := encodedObjectValue("json", []byte("test data")) timeSentReq := time.Now() _, err := flowClient.StartFlow(ctx, &dexpb.StartFlowRequest{ RequestId: newRequestID(), diff --git a/server/integ/start_with_no_options_test.go b/server/integ/start_with_no_options_test.go index 746015c1c..ecf20f8dc 100644 --- a/server/integ/start_with_no_options_test.go +++ b/server/integ/start_with_no_options_test.go @@ -45,7 +45,7 @@ func doTestStartFlowWithoutStartOptions(t *testing.T, backendType service.Backen defer cancel() flowId := "TestStartFlowWithoutStartOptions-" + uuid.NewString() - stepInput := encodedObjectValue("j", []byte("test data")) + stepInput := encodedObjectValue("json", []byte("test data")) _, err := flowClient.StartFlow(ctx, &dexpb.StartFlowRequest{ RequestId: newRequestID(), FlowId: flowId, diff --git a/server/integ/wait_for_attribute_test.go b/server/integ/wait_for_attribute_test.go index add99feee..d934bc580 100644 --- a/server/integ/wait_for_attribute_test.go +++ b/server/integ/wait_for_attribute_test.go @@ -300,7 +300,7 @@ func doTestWaitForAttributeOperators(t *testing.T) { }{ {name: "unspecified", match: waitForAttributeMatch("match-int", dexpb.AttributeMatchOperator_ATTRIBUTE_MATCH_OPERATOR_UNSPECIFIED, intValue(0))}, {name: "string ordering", match: waitForAttributeMatch("match-string", dexpb.AttributeMatchOperator_ATTRIBUTE_MATCH_OPERATOR_GREATER_THAN, stringValue("a"))}, - {name: "object", match: equalAttributeMatch("match-string", &dexpb.Value{Kind: &dexpb.Value_ObjValue{ObjValue: &dexpb.EncodedObject{Encoding: "j", Payload: []byte("{}")}}})}, + {name: "object", match: equalAttributeMatch("match-string", &dexpb.Value{Kind: &dexpb.Value_ObjValue{ObjValue: &dexpb.EncodedObject{Encoding: "json", Payload: []byte("{}")}}})}, {name: "null", match: equalAttributeMatch("match-string", &dexpb.Value{Kind: &dexpb.Value_NullValue{}})}, {name: "non-finite", match: equalAttributeMatch("match-double", doubleValue(math.Inf(1)))}, } diff --git a/server/integ/web_api_test.go b/server/integ/web_api_test.go index 3327b1290..d1d397b11 100644 --- a/server/integ/web_api_test.go +++ b/server/integ/web_api_test.go @@ -1400,7 +1400,7 @@ func testWebHistoryAndSummary( Attributes: []*dexpb.AttributeWrite{{ Key: "web-test-attribute", Value: &dexpb.Value{Kind: &dexpb.Value_ObjValue{ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: attributePayload, }}}, }}, diff --git a/server/integ/wf_timeout_test.go b/server/integ/wf_timeout_test.go index 25af89050..4255a6de2 100644 --- a/server/integ/wf_timeout_test.go +++ b/server/integ/wf_timeout_test.go @@ -537,7 +537,7 @@ func doTestFlowTimeoutHandlerExecutionOptions( if shouldRecover { require.Equal(t, "recovered", result.GetResults()[0].GetCompletedStepOutput().GetStringValue()) recoveryRequest := receiveTimeoutExecuteRequest(t, ctx, workerHandler.recoveryRequests) - require.Equal(t, "j", recoveryRequest.GetStepInput().GetObjValue().GetEncoding()) + require.Equal(t, "json", recoveryRequest.GetStepInput().GetObjValue().GetEncoding()) require.Equal(t, []byte("null"), recoveryRequest.GetStepInput().GetObjValue().GetPayload()) require.NotNil(t, recoveryRequest.GetContext().GetRecoveryError()) require.Contains(t, recoveryRequest.GetContext().GetRecoveryError().GetDetail(), "retryable timeout handler failure") diff --git a/server/integ/workflow/command_thread_completion/routers.go b/server/integ/workflow/command_thread_completion/routers.go index 52e32b77c..54dc46083 100644 --- a/server/integ/workflow/command_thread_completion/routers.go +++ b/server/integ/workflow/command_thread_completion/routers.go @@ -51,7 +51,7 @@ const ( ) var testChannelValue = &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: []byte("channel-data"), } diff --git a/server/integ/workflow/conditional_close/routers.go b/server/integ/workflow/conditional_close/routers.go index 97dc5918d..79554f281 100644 --- a/server/integ/workflow/conditional_close/routers.go +++ b/server/integ/workflow/conditional_close/routers.go @@ -41,7 +41,7 @@ const ( var TestInput = &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: []byte("test-data"), }, }, @@ -179,7 +179,7 @@ func stepInputString(stepInput *dexpb.Value) string { return stringValue.StringValue } if objValue, ok := stepInput.Kind.(*dexpb.Value_ObjValue); ok { - if objValue.ObjValue.GetEncoding() == "j" { + if objValue.ObjValue.GetEncoding() == "json" { return string(objValue.ObjValue.GetPayload()) } } diff --git a/server/integ/workflow/interstate/routers.go b/server/integ/workflow/interstate/routers.go index 1ddad9862..cd139699e 100644 --- a/server/integ/workflow/interstate/routers.go +++ b/server/integ/workflow/interstate/routers.go @@ -49,12 +49,12 @@ const ( ) var TestVal1 = &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: []byte("test-value1"), } var TestVal2 = &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: []byte("test-value2"), } diff --git a/server/integ/workflow/locking/routers.go b/server/integ/workflow/locking/routers.go index b04c4d4fe..d8185d35b 100644 --- a/server/integ/workflow/locking/routers.go +++ b/server/integ/workflow/locking/routers.go @@ -114,7 +114,7 @@ func (h *handler) InvokeWorkerRPC( } inputObj := request.GetInput().GetObjValue() - if inputObj == nil || inputObj.GetEncoding() != "j" { + if inputObj == nil || inputObj.GetEncoding() != "json" { return nil, status.Error(codes.InvalidArgument, "input is incorrect") } inputPayload := string(inputObj.GetPayload()) @@ -418,7 +418,7 @@ func jsonObjValue(payload string) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: []byte(payload), }, }, diff --git a/server/integ/workflow/parallel/routers.go b/server/integ/workflow/parallel/routers.go index 88477a851..b28a2aeea 100644 --- a/server/integ/workflow/parallel/routers.go +++ b/server/integ/workflow/parallel/routers.go @@ -158,7 +158,7 @@ func parallelCloseInput(stepType string) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: []byte("from " + stepType), }, }, diff --git a/server/integ/workflow/persistence/routers.go b/server/integ/workflow/persistence/routers.go index c50a3ef2f..5639c48c0 100644 --- a/server/integ/workflow/persistence/routers.go +++ b/server/integ/workflow/persistence/routers.go @@ -316,7 +316,7 @@ func jsonObjValue(payload string) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: []byte(payload), }, }, diff --git a/server/integ/workflow/persistence_loading_policy/routers.go b/server/integ/workflow/persistence_loading_policy/routers.go index c14f8557c..160657e66 100644 --- a/server/integ/workflow/persistence_loading_policy/routers.go +++ b/server/integ/workflow/persistence_loading_policy/routers.go @@ -248,7 +248,7 @@ func jsonObjValue(payload string) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: []byte(payload), }, }, diff --git a/server/integ/workflow/reset/routers.go b/server/integ/workflow/reset/routers.go index b9a44ef85..f3c3b6135 100644 --- a/server/integ/workflow/reset/routers.go +++ b/server/integ/workflow/reset/routers.go @@ -106,7 +106,7 @@ func (h *handler) InvokeExecuteMethod( updatedInput := &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: []byte(fmt.Sprintf("%v", counter+1)), }, }, @@ -143,7 +143,7 @@ func stepInputString(stepInput *dexpb.Value) string { return stringValue.StringValue } if objValue, ok := stepInput.Kind.(*dexpb.Value_ObjValue); ok { - if objValue.ObjValue.GetEncoding() == "j" { + if objValue.ObjValue.GetEncoding() == "json" { return string(objValue.ObjValue.GetPayload()) } } diff --git a/server/integ/workflow/rpc-external-storage/routers.go b/server/integ/workflow/rpc-external-storage/routers.go index b78c4189d..a6726c27a 100644 --- a/server/integ/workflow/rpc-external-storage/routers.go +++ b/server/integ/workflow/rpc-external-storage/routers.go @@ -242,7 +242,7 @@ func jsonStringValue(value string) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: payload, }, }, diff --git a/server/integ/workflow/rpc/routers.go b/server/integ/workflow/rpc/routers.go index f69e0ad65..6d0ba901d 100644 --- a/server/integ/workflow/rpc/routers.go +++ b/server/integ/workflow/rpc/routers.go @@ -332,7 +332,7 @@ func jsonObjValue(payload string) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: []byte(payload), }, }, diff --git a/server/integ/workflow/s3-get-set-data-attributes/routers.go b/server/integ/workflow/s3-get-set-data-attributes/routers.go index 47bc6d65e..d7a72782c 100644 --- a/server/integ/workflow/s3-get-set-data-attributes/routers.go +++ b/server/integ/workflow/s3-get-set-data-attributes/routers.go @@ -146,7 +146,7 @@ func jsonObjValue(payload string) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: []byte(payload), }, }, diff --git a/server/integ/workflow/s3-init-data-attributes/routers.go b/server/integ/workflow/s3-init-data-attributes/routers.go index 09328f092..20768495f 100644 --- a/server/integ/workflow/s3-init-data-attributes/routers.go +++ b/server/integ/workflow/s3-init-data-attributes/routers.go @@ -273,7 +273,7 @@ func jsonObjValue(payload string) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: []byte(payload), }, }, diff --git a/server/integ/workflow/s3-upsert-data-objects/routers.go b/server/integ/workflow/s3-upsert-data-objects/routers.go index e85fd02f6..72cdc6d4b 100644 --- a/server/integ/workflow/s3-upsert-data-objects/routers.go +++ b/server/integ/workflow/s3-upsert-data-objects/routers.go @@ -263,7 +263,7 @@ func jsonObjValue(payload string) *dexpb.Value { return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: []byte(payload), }, }, diff --git a/server/integ/workflow/signal/routers.go b/server/integ/workflow/signal/routers.go index 51bb38cc2..ffea4bc25 100644 --- a/server/integ/workflow/signal/routers.go +++ b/server/integ/workflow/signal/routers.go @@ -72,7 +72,7 @@ func (h *handler) InvokeWorkerRPC( Output: &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: data, }, }, @@ -88,7 +88,7 @@ func (h *handler) InvokeWorkerRPC( Output: &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: data, }, }, diff --git a/server/integ/workflow/wait_for_state_completion/routers.go b/server/integ/workflow/wait_for_state_completion/routers.go index e24cebb7d..68d73215c 100644 --- a/server/integ/workflow/wait_for_state_completion/routers.go +++ b/server/integ/workflow/wait_for_state_completion/routers.go @@ -162,7 +162,7 @@ func stepInputString(stepInput *dexpb.Value) string { return stringValue.StringValue } if objValue, ok := stepInput.Kind.(*dexpb.Value_ObjValue); ok { - if objValue.ObjValue.GetEncoding() == "j" { + if objValue.ObjValue.GetEncoding() == "json" { return string(objValue.ObjValue.GetPayload()) } } diff --git a/server/integ/workflow/wf_state_options_data_attributes_loading/routers.go b/server/integ/workflow/wf_state_options_data_attributes_loading/routers.go index ee50f007b..92eef17a5f 100644 --- a/server/integ/workflow/wf_state_options_data_attributes_loading/routers.go +++ b/server/integ/workflow/wf_state_options_data_attributes_loading/routers.go @@ -234,7 +234,7 @@ func dataObjectWrite(key, payload string) *dexpb.AttributeWrite { Value: &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: []byte(payload), }, }, diff --git a/server/integ/workflow/wf_state_options_search_attributes_loading/routers.go b/server/integ/workflow/wf_state_options_search_attributes_loading/routers.go index 91c8b5f4d..fa70245ea 100644 --- a/server/integ/workflow/wf_state_options_search_attributes_loading/routers.go +++ b/server/integ/workflow/wf_state_options_search_attributes_loading/routers.go @@ -209,7 +209,7 @@ func upsertSearchAttributes(keywordArraySearchAttributeKey string) []*dexpb.Attr Value: &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: keywordArrayPayload, }, }, diff --git a/server/script/http/local/home.http b/server/script/http/local/home.http index 72a836d12..40bb142e7 100644 --- a/server/script/http/local/home.http +++ b/server/script/http/local/home.http @@ -12,7 +12,7 @@ Content-Type: application/json "dexWorkerUrl": "http://localhost:8080", "startStateId": "test_state_1", "stateInput": { - "encoding": "j", + "encoding": "json", "data": "\"a string\"" } } diff --git a/server/service/client/temporal/memo_test.go b/server/service/client/temporal/memo_test.go index a93ab84b4..fdeaa468a 100644 --- a/server/service/client/temporal/memo_test.go +++ b/server/service/client/temporal/memo_test.go @@ -74,7 +74,7 @@ func TestGetMemoAndDecryptIfNeeded(t *testing.T) { client := &temporalClient{dataConverter: cryptoConverter, memoEncryption: true} encoded := &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: []byte("TestValue"), } expected := &dexpb.Value{Kind: &dexpb.Value_ObjValue{ObjValue: encoded}} diff --git a/server/service/common/attributestore/manager.go b/server/service/common/attributestore/manager.go index 14c065d6c..650d690bd 100644 --- a/server/service/common/attributestore/manager.go +++ b/server/service/common/attributestore/manager.go @@ -632,7 +632,7 @@ func (c columnSchema) convertObject( if object == nil { return nil, fmt.Errorf("object is missing") } - if object.GetEncoding() == "j" { + if object.GetEncoding() == "json" { if !json.Valid(object.GetPayload()) { return nil, fmt.Errorf("JSON payload is invalid") } diff --git a/server/service/common/attributestore/manager_integ_test.go b/server/service/common/attributestore/manager_integ_test.go index 02b6cb47e..feda1f7fe 100644 --- a/server/service/common/attributestore/manager_integ_test.go +++ b/server/service/common/attributestore/manager_integ_test.go @@ -174,8 +174,8 @@ func writeIntegrationBatch(t *testing.T, manager *Manager, configName, flowID st {ConfigName: configName, Key: "count_value", Value: intValue(42)}, {ConfigName: configName, Key: "ratio", Value: doubleValue(2.5)}, {ConfigName: configName, Key: "active", Value: boolValue(true)}, - {ConfigName: configName, Key: "logged_at", Value: objectValue("j", `"2026-08-11T15:30:00Z"`)}, - {ConfigName: configName, Key: "json_value", Value: objectValue("j", `{"ok":true}`)}, + {ConfigName: configName, Key: "logged_at", Value: objectValue("json", `"2026-08-11T15:30:00Z"`)}, + {ConfigName: configName, Key: "json_value", Value: objectValue("json", `{"ok":true}`)}, {ConfigName: configName, Key: "binary_value", Value: objectValue("proto", "bytes")}, {ConfigName: configName, Key: "nullable_value", Value: nullValue()}, {ConfigName: configName, Key: "missing", Value: stringValue("filtered")}, diff --git a/server/service/common/attributestore/manager_test.go b/server/service/common/attributestore/manager_test.go index 99497cb6e..2c1ca6791 100644 --- a/server/service/common/attributestore/manager_test.go +++ b/server/service/common/attributestore/manager_test.go @@ -63,9 +63,9 @@ func TestColumnConversionBoundaries(t *testing.T) { require.ErrorContains(t, err, "bool") jsonColumn := columnSchema{dataType: "jsonb"} - _, err = jsonColumn.convert(objectValue("j", `{"valid":true}`), config.AttributeStoreTypePostgres) + _, err = jsonColumn.convert(objectValue("json", `{"valid":true}`), config.AttributeStoreTypePostgres) require.NoError(t, err) - _, err = jsonColumn.convert(objectValue("j", `{invalid`), config.AttributeStoreTypePostgres) + _, err = jsonColumn.convert(objectValue("json", `{invalid`), config.AttributeStoreTypePostgres) require.ErrorContains(t, err, "invalid") postgresDatetime := columnSchema{dataType: "timestamp with time zone"} @@ -76,13 +76,13 @@ func TestColumnConversionBoundaries(t *testing.T) { require.NoError(t, err) require.Equal(t, time.Date(2026, 8, 11, 15, 30, 0, 123456789, time.UTC), datetime) datetime, err = postgresDatetime.convert( - objectValue("j", `"2026-08-11T15:30:00Z"`), + objectValue("json", `"2026-08-11T15:30:00Z"`), config.AttributeStoreTypePostgres, ) require.NoError(t, err) require.Equal(t, time.Date(2026, 8, 11, 15, 30, 0, 0, time.UTC), datetime) datetime, err = postgresDatetime.convert( - objectValue("j", `1786462200.123456789`), + objectValue("json", `1786462200.123456789`), config.AttributeStoreTypePostgres, ) require.NoError(t, err) diff --git a/server/service/common/blobstore/blob_cache_integ_test.go b/server/service/common/blobstore/blob_cache_integ_test.go index 1a3a3d08e..4bdbcdae7 100644 --- a/server/service/common/blobstore/blob_cache_integ_test.go +++ b/server/service/common/blobstore/blob_cache_integ_test.go @@ -57,7 +57,7 @@ func TestS3AttributeBlobCacheIntegration(t *testing.T) { t.Run("read miss fills cache", func(t *testing.T) { payload := []byte("read-fill payload") flowID := uniqueCacheWorkflowID("read-fill") - locator := time.Now().UTC().Format("20060102") + "/0000000000" + locator := formatBlobDate(time.Now()) + "/0000000000" path, err := ValueObjectPath(flowID, locator) require.NoError(t, err) require.NoError(t, store.writeObject(ctx, store.activeStorage, path, payload)) diff --git a/server/service/common/blobstore/helpers.go b/server/service/common/blobstore/helpers.go index b083f9f2b..a41396901 100644 --- a/server/service/common/blobstore/helpers.go +++ b/server/service/common/blobstore/helpers.go @@ -13,8 +13,10 @@ package blobstore import ( "context" "fmt" + "strings" "github.com/superdurable/dex/gen/dexpb" + "google.golang.org/protobuf/proto" ) // OffloadLargeAttributeWrites replaces oversized string/object Value arms with server-minted blob ids. @@ -122,18 +124,22 @@ func offloadValue( if err != nil { return err } - blobId := formatStringBlobId(storeId, path) + blobId := formatBlobID(storeId, path) value.Kind = &dexpb.Value_InternalBlobIdForStringValue{InternalBlobIdForStringValue: blobId} return nil case *dexpb.Value_ObjValue: if kind.ObjValue == nil || len(kind.ObjValue.GetPayload()) <= threshold { return nil } - storeId, path, err := blobStore.WriteObject(ctx, flowId, invocationId, kind.ObjValue.GetPayload()) + encodedObject, err := proto.MarshalOptions{Deterministic: true}.Marshal(kind.ObjValue) + if err != nil { + return fmt.Errorf("marshal EncodedObject: %w", err) + } + storeId, path, err := blobStore.WriteObject(ctx, flowId, invocationId, encodedObject) if err != nil { return err } - blobId := formatObjBlobId(storeId, path, kind.ObjValue.GetEncoding()) + blobId := formatBlobID(storeId, path) value.Kind = &dexpb.Value_InternalBlobIdForObjValue{InternalBlobIdForObjValue: blobId} return nil default: @@ -226,7 +232,7 @@ func HydrateValue(ctx context.Context, flowID string, value *dexpb.Value, blobSt } switch kind := value.GetKind().(type) { case *dexpb.Value_InternalBlobIdForStringValue: - storeId, path, _, err := parseBlobId(kind.InternalBlobIdForStringValue) + storeId, path, err := parseBlobID(kind.InternalBlobIdForStringValue) if err != nil { return err } @@ -237,7 +243,7 @@ func HydrateValue(ctx context.Context, flowID string, value *dexpb.Value, blobSt value.Kind = &dexpb.Value_StringValue{StringValue: string(data)} return nil case *dexpb.Value_InternalBlobIdForObjValue: - storeId, path, encoding, err := parseBlobId(kind.InternalBlobIdForObjValue) + storeId, path, err := parseBlobID(kind.InternalBlobIdForObjValue) if err != nil { return err } @@ -245,10 +251,11 @@ func HydrateValue(ctx context.Context, flowID string, value *dexpb.Value, blobSt if err != nil { return err } - value.Kind = &dexpb.Value_ObjValue{ObjValue: &dexpb.EncodedObject{ - Encoding: encoding, - Payload: data, - }} + encodedObject := &dexpb.EncodedObject{} + if err := proto.Unmarshal(data, encodedObject); err != nil { + return fmt.Errorf("unmarshal EncodedObject: %w", err) + } + value.Kind = &dexpb.Value_ObjValue{ObjValue: encodedObject} return nil default: return nil @@ -341,36 +348,14 @@ func blobIDFromValue(value *dexpb.Value) (string, bool, error) { } } -func formatStringBlobId(storeId, path string) string { +func formatBlobID(storeId, path string) string { return storeId + "|" + path } -func formatObjBlobId(storeId, path, encoding string) string { - return storeId + "|" + path + "|" + encoding -} - -func parseBlobId(blobId string) (storeId, path, encoding string, err error) { - first := -1 - for i := 0; i < len(blobId); i++ { - if blobId[i] == '|' { - first = i - break - } - } - if first < 0 { - return "", "", "", fmt.Errorf("invalid blob id %q", blobId) - } - storeId = blobId[:first] - rest := blobId[first+1:] - second := -1 - for i := 0; i < len(rest); i++ { - if rest[i] == '|' { - second = i - break - } - } - if second < 0 { - return storeId, rest, "", nil +func parseBlobID(blobID string) (storeID, path string, err error) { + storeID, path, found := strings.Cut(blobID, "|") + if !found || storeID == "" || path == "" || strings.Contains(path, "|") { + return "", "", fmt.Errorf("invalid Blob ID %q", blobID) } - return storeId, rest[:second], rest[second+1:], nil + return storeID, path, nil } diff --git a/server/service/common/blobstore/interfaces.go b/server/service/common/blobstore/interfaces.go index f51064e8b..9d9764290 100644 --- a/server/service/common/blobstore/interfaces.go +++ b/server/service/common/blobstore/interfaces.go @@ -45,20 +45,20 @@ func ExtractWorkflowId(workflowPath string) (string, error) { return flowID, nil } -func ExtractYyyymmddToUnixSeconds(workflowPath string) (int64, bool) { - // yyyymmdd$encodedFlowId - yyyymmdd, err := ExtractYyyymmdd(workflowPath) +func ExtractYymmddToUnixSeconds(workflowPath string) (int64, bool) { + // yymmdd$encodedFlowId + yymmdd, err := ExtractYymmdd(workflowPath) if err != nil { return 0, false } - parsedTime, err := time.Parse("20060102", yyyymmdd) + parsedTime, err := parseBlobDate(yymmdd) if err != nil { panic(err) } return parsedTime.Unix(), true } -func ExtractYyyymmdd(workflowPath string) (string, error) { +func ExtractYymmdd(workflowPath string) (string, error) { parts := strings.Split(workflowPath, "$") if len(parts) != 2 { return "", fmt.Errorf("invalid workflow path: %s", workflowPath) @@ -77,7 +77,7 @@ func ParseWorkflowPath(workflowPath string) (WorkflowPath, error) { if len(parts) != 2 && len(parts) != 3 { return WorkflowPath{}, fmt.Errorf("invalid workflow path: %s", workflowPath) } - if _, err := time.Parse("20060102", parts[0]); err != nil { + if _, err := parseBlobDate(parts[0]); err != nil { return WorkflowPath{}, fmt.Errorf("invalid workflow path date: %w", err) } flowID, err := decodePathPart(parts[1]) @@ -102,7 +102,7 @@ func StepEventInputPath( method string, ) string { workflowPath := strings.Join([]string{ - runStarted.UTC().Format("20060102"), + formatBlobDate(runStarted), encodePathPart(flowID), encodePathPart(runID), }, "$") @@ -117,7 +117,7 @@ func ValueObjectPath(flowID string, locator string) (string, error) { if len(parts) != 2 { return "", fmt.Errorf("invalid Blob locator %q", locator) } - if _, err := time.Parse("20060102", parts[0]); err != nil { + if _, err := parseBlobDate(parts[0]); err != nil { return "", fmt.Errorf("invalid Blob locator date: %w", err) } objectID := parts[1] @@ -144,6 +144,14 @@ func decodePathPart(value string) (string, error) { return string(decoded), nil } +func formatBlobDate(timestamp time.Time) string { + return timestamp.UTC().Format("060102") +} + +func parseBlobDate(value string) (time.Time, error) { + return time.Parse("20060102", "20"+value) +} + type BlobStore interface { Close() error // WriteObject stores data under the Flow-owned path and returns its compact locator. @@ -168,11 +176,10 @@ type BlobStore interface { method string, ) ([]byte, bool, error) // DeleteWorkflowObjects will delete all the objects of the workflowId - // workflowPath is yyyymmdd$encodedFlowId, where yymmdd is needed to compose the path + // workflowPath is yymmdd$encodedFlowId, where yymmdd is needed to compose the path DeleteWorkflowObjects(ctx context.Context, storeId, workflowPath string) error - // ListWorkflowPaths will list the workflowPaths ( yyyymmdd$encodedFlowId ) as CommonPrefixes from S3 + // ListWorkflowPaths will list the workflowPaths ( yymmdd$encodedFlowId ) as CommonPrefixes from S3 // It uses of delimiter "/" before the object ID to get all the CommonPrefixes - // StartAfterYyyymmdd is the yyyymmdd to exclude the date when listing ListWorkflowPaths(ctx context.Context, input ListObjectPathsInput) (*ListObjectPathsOutput, error) // CountWorkflowObjectsForTesting is for testing ONLY. // count the number of S3 objects for this workflowId diff --git a/server/service/common/blobstore/local_integ_test.go b/server/service/common/blobstore/local_integ_test.go index cb1bd965b..2a0fa7e9a 100644 --- a/server/service/common/blobstore/local_integ_test.go +++ b/server/service/common/blobstore/local_integ_test.go @@ -139,26 +139,54 @@ func TestLocalBlobStoreTransfersCrossFlowOwnership(t *testing.T) { threshold := config.DefaultBlobStoreThresholdInBytes payload := bytes.Repeat([]byte("x"), threshold+1) value := &dexpb.Value{Kind: &dexpb.Value_ObjValue{ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: payload, }}} require.NoError(t, OffloadLargeValue(ctx, value, sourceFlowID, "invocation", threshold, store, true)) sourceRef := value.GetInternalBlobIdForObjValue() - require.Regexp(t, regexp.MustCompile(`^local\|[0-9]{8}/[0-9a-z]{10}\|j$`), sourceRef) + require.Regexp(t, regexp.MustCompile(`^local\|[0-9]{6}/[0-9a-z]{10}$`), sourceRef) + + rawValue := &dexpb.Value{Kind: &dexpb.Value_ObjValue{ObjValue: &dexpb.EncodedObject{ + Encoding: "raw", + Payload: payload, + }}} + require.NoError(t, OffloadLargeValue(ctx, rawValue, sourceFlowID, "invocation", threshold, store, true)) + rawRef := rawValue.GetInternalBlobIdForObjValue() + require.Regexp(t, regexp.MustCompile(`^local\|[0-9]{6}/[0-9a-z]{10}$`), rawRef) + require.NotEqual(t, sourceRef, rawRef) + require.NoError(t, HydrateValue(ctx, sourceFlowID, rawValue, store)) + require.Equal(t, "raw", rawValue.GetObjValue().GetEncoding()) + require.Equal(t, payload, rawValue.GetObjValue().GetPayload()) + + stringPayload := string(bytes.Repeat([]byte("s"), threshold+1)) + stringValue := &dexpb.Value{Kind: &dexpb.Value_StringValue{StringValue: stringPayload}} + require.NoError(t, OffloadLargeValue(ctx, stringValue, sourceFlowID, "string", threshold, store, true)) + require.Regexp( + t, + regexp.MustCompile(`^local\|[0-9]{6}/[0-9a-z]{10}$`), + stringValue.GetInternalBlobIdForStringValue(), + ) + require.NoError(t, HydrateValue(ctx, sourceFlowID, stringValue, store)) + require.Equal(t, stringPayload, stringValue.GetStringValue()) + + legacyReference := &dexpb.Value{Kind: &dexpb.Value_InternalBlobIdForObjValue{ + InternalBlobIdForObjValue: sourceRef + "|json", + }} + require.ErrorContains(t, HydrateValue(ctx, sourceFlowID, legacyReference, store), "invalid Blob ID") require.NoError(t, TransferValueBlobOwnership( ctx, value, sourceFlowID, destinationFlowID, "invocation", threshold, store, true, )) require.Equal(t, sourceRef, value.GetInternalBlobIdForObjValue()) - require.Equal(t, int64(1), mustCountFlowObjects(t, ctx, store, sourceFlowID)) + require.Equal(t, int64(3), mustCountFlowObjects(t, ctx, store, sourceFlowID)) require.Equal(t, int64(1), mustCountFlowObjects(t, ctx, store, destinationFlowID)) - date := strings.SplitN(strings.SplitN(sourceRef, "|", 3)[1], "/", 2)[0] + date := strings.SplitN(strings.SplitN(sourceRef, "|", 2)[1], "/", 2)[0] require.NoError(t, store.DeleteWorkflowObjects( ctx, "local", date+"$"+encodePathPart(sourceFlowID), )) require.NoError(t, HydrateValue(ctx, destinationFlowID, value, store)) - require.Equal(t, "j", value.GetObjValue().GetEncoding()) + require.Equal(t, "json", value.GetObjValue().GetEncoding()) require.Equal(t, payload, value.GetObjValue().GetPayload()) inline := &dexpb.Value{Kind: &dexpb.Value_StringValue{StringValue: string(bytes.Repeat([]byte("y"), threshold))}} diff --git a/server/service/common/blobstore/store_impl.go b/server/service/common/blobstore/store_impl.go index a67f3fbb4..b9cbd1a49 100644 --- a/server/service/common/blobstore/store_impl.go +++ b/server/service/common/blobstore/store_impl.go @@ -122,7 +122,7 @@ func NewBlobStore( return &blobStoreImpl{ s3Client: s3Client, - pathPrefix: temporalOrCadenceNamespace + "/v2/", + pathPrefix: temporalOrCadenceNamespace + "/", activeStorage: *activeStorage, supportedStore: supportedStores, logger: logger, @@ -152,7 +152,7 @@ func (b *blobStoreImpl) WriteObject( if err != nil { return "", "", err } - startedDate := time.Now().UTC().Format("20060102") + startedDate := formatBlobDate(time.Now()) locator = startedDate + "/" + objectID path, err := ValueObjectPath(flowID, locator) if err != nil { @@ -480,7 +480,7 @@ func putObject(ctx context.Context, client *s3.Client, bucketName string, key st Bucket: aws.String(bucketName), Key: aws.String(key), Body: bytes.NewReader(content), - ContentType: aws.String("application/json"), + ContentType: aws.String("application/octet-stream"), }) return err } @@ -504,8 +504,8 @@ func getObject(ctx context.Context, client *s3.Client, bucketName, key string) ( func (b *blobStoreImpl) CountWorkflowObjectsForTesting(ctx context.Context, flowID string) (int64, error) { // Create the prefix to match objects for this Flow for today. - yyyymmdd := time.Now().UTC().Format("20060102") - prefix := fmt.Sprintf("%s%s$%s/", b.pathPrefix, yyyymmdd, encodePathPart(flowID)) + yymmdd := formatBlobDate(time.Now()) + prefix := fmt.Sprintf("%s%s$%s/", b.pathPrefix, yymmdd, encodePathPart(flowID)) if b.activeStorage.StorageType == config.StorageTypeLocal { return countLocalObjects(ctx, b.activeStorage.LocalDirectory, prefix) } @@ -697,7 +697,7 @@ func (b *blobStoreImpl) ListWorkflowPaths(ctx context.Context, input ListObjectP workflowPaths := make([]string, 0, len(result.CommonPrefixes)) for _, commonPrefix := range result.CommonPrefixes { if commonPrefix.Prefix != nil { - // Remove the pathPrefix to get the workflow path (yyyymmdd$encodedFlowId) + // Remove the pathPrefix to get the workflow path (yymmdd$encodedFlowId) prefixStr := *commonPrefix.Prefix if strings.HasPrefix(prefixStr, b.pathPrefix) { workflowPath := strings.TrimPrefix(prefixStr, b.pathPrefix) diff --git a/server/service/common/blobstore/store_impl_test.go b/server/service/common/blobstore/store_impl_test.go index 77d835ea0..9111ed98f 100644 --- a/server/service/common/blobstore/store_impl_test.go +++ b/server/service/common/blobstore/store_impl_test.go @@ -222,7 +222,7 @@ func TestBlobStoreIntegration(t *testing.T) { assert.True(t, len(output.WorkflowPaths) >= 2) // Verify workflow paths contain expected patterns - todayPrefix := time.Now().UTC().Format("20060102") + todayPrefix := formatBlobDate(time.Now()) expectedPath1 := fmt.Sprintf("%s$%s", todayPrefix, encodePathPart(workflowId1)) expectedPath2 := fmt.Sprintf("%s$%s", todayPrefix, encodePathPart(workflowId2)) @@ -273,7 +273,7 @@ func TestBlobStoreIntegration(t *testing.T) { assert.Equal(t, int64(3), count) // Delete all objects for the workflow - todayPrefix := time.Now().UTC().Format("20060102") + todayPrefix := formatBlobDate(time.Now()) workflowPath := fmt.Sprintf("%s$%s", todayPrefix, encodePathPart(deleteTestWorkflowId)) err = blobStore.DeleteWorkflowObjects(ctx, testStorageId, workflowPath) assert.NoError(t, err) @@ -307,7 +307,7 @@ func TestBlobStoreIntegration(t *testing.T) { assert.Equal(t, int64(numObjects), count) // Delete all objects for the workflow - todayPrefix := time.Now().UTC().Format("20060102") + todayPrefix := formatBlobDate(time.Now()) workflowPath := fmt.Sprintf("%s$%s", todayPrefix, encodePathPart(multiDeleteWorkflowId)) err = blobStore.DeleteWorkflowObjects(ctx, testStorageId, workflowPath) assert.NoError(t, err) @@ -320,7 +320,7 @@ func TestBlobStoreIntegration(t *testing.T) { t.Run("DeleteWorkflowObjectsNonExistent", func(t *testing.T) { // Try to delete objects for a workflow that doesn't exist - todayPrefix := time.Now().UTC().Format("20060102") + todayPrefix := formatBlobDate(time.Now()) workflowPath := fmt.Sprintf("%s$%s", todayPrefix, encodePathPart("non-existent-workflow")) err := blobStore.DeleteWorkflowObjects(ctx, testStorageId, workflowPath) assert.NoError(t, err) // Should succeed even if no objects to delete @@ -337,7 +337,7 @@ func TestBlobStoreIntegration(t *testing.T) { // Test reading with invalid store ID _, err = blobStore.ReadObject( - ctx, "invalid-store-id", "flow", time.Now().UTC().Format("20060102")+"/0000000000", + ctx, "invalid-store-id", "flow", formatBlobDate(time.Now())+"/0000000000", ) assert.Error(t, err) assert.Contains(t, err.Error(), "store not found") @@ -349,7 +349,7 @@ func TestBlobStoreIntegration(t *testing.T) { // Test reading a non-existent key from a valid store triggers the new error wrapping _, err = blobStore.ReadObject( - ctx, testStorageId, "flow", time.Now().UTC().Format("20060102")+"/0000000000", + ctx, testStorageId, "flow", formatBlobDate(time.Now())+"/0000000000", ) assert.Error(t, err) assert.Contains(t, err.Error(), "failed to read object") diff --git a/server/service/common/blobstore/store_impl_unit_test.go b/server/service/common/blobstore/store_impl_unit_test.go index 24766fcea..3eeb5a33a 100644 --- a/server/service/common/blobstore/store_impl_unit_test.go +++ b/server/service/common/blobstore/store_impl_unit_test.go @@ -41,15 +41,16 @@ func TestDeterministicBlobObjectIDFramesComponents(t *testing.T) { } func TestDeterministicBlobObjectIDValuePathUsesContextualFlow(t *testing.T) { - path, err := ValueObjectPath("flow/one", "20260913/0abcde1234") + path, err := ValueObjectPath("flow/one", "260913/0abcde1234") require.NoError(t, err) - require.Equal(t, "20260913$Zmxvdy9vbmU/0abcde1234", path) + require.Equal(t, "260913$Zmxvdy9vbmU/0abcde1234", path) for _, locator := range []string{ - "20260913/abcdefghi", - "20260913/ABCDEF1234", - "20260913/abcdef1234/extra", - "20261340/abcdef1234", + "260913/abcdefghi", + "260913/ABCDEF1234", + "260913/abcdef1234/extra", + "261340/abcdef1234", + "20260913/abcdef1234", } { _, err := ValueObjectPath("flow", locator) require.Error(t, err) diff --git a/server/service/common/index/searchAttribute.go b/server/service/common/index/searchAttribute.go index 186ef8355..8d4bb72ae 100644 --- a/server/service/common/index/searchAttribute.go +++ b/server/service/common/index/searchAttribute.go @@ -203,7 +203,7 @@ func MapCadenceSearchAttributeFieldsToKVs(searchAttributes *shared.SearchAttribu for _, key := range keys { result = append(result, &dexpb.KV{ Key: key, - Value: jsonPayloadToBestEffortValue(searchAttributes.GetIndexedFields()[key], "j"), + Value: jsonPayloadToBestEffortValue(searchAttributes.GetIndexedFields()[key], "json"), }) } return result @@ -423,7 +423,7 @@ func backendObjectToValue(object interface{}, indexType dexpb.IndexType, cadence return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: payload, }, }, diff --git a/server/service/common/index/searchAttribute_test.go b/server/service/common/index/searchAttribute_test.go index adb505cb6..791758bf5 100644 --- a/server/service/common/index/searchAttribute_test.go +++ b/server/service/common/index/searchAttribute_test.go @@ -125,7 +125,7 @@ func TestMapCadenceSearchAttributeFieldsToKVs(t *testing.T) { actual := MapCadenceSearchAttributeFieldsToKVs(searchAttributes) require.Len(t, actual, 5) require.Equal(t, "Array", actual[0].GetKey()) - require.Equal(t, "j", actual[0].GetValue().GetObjValue().GetEncoding()) + require.Equal(t, "json", actual[0].GetValue().GetObjValue().GetEncoding()) require.Equal(t, []byte(`["a","b"]`), actual[0].GetValue().GetObjValue().GetPayload()) require.Equal(t, true, actual[1].GetValue().GetBoolValue()) require.Equal(t, 0.5, actual[2].GetValue().GetDoubleValue()) diff --git a/server/service/identifiers.go b/server/service/identifiers.go index 72d1ee0aa..77dc3b648 100644 --- a/server/service/identifiers.go +++ b/server/service/identifiers.go @@ -21,7 +21,7 @@ import ( // "/" separates object-key path segments. Reserving it keeps every Flow's blobs in one directory // and preserves local and remote blob listing and cleanup boundaries. // -// "$" separates the UTC date prefix from the Flow ID in `$/`. +// "$" separates the UTC date prefix from the Flow ID in `$/`. // Reserving it keeps date-scoped listing and cleanup prefixes unambiguous. // // ":" identifies server-generated Flow namespaces such as `SubFlow:`. Reserving it prevents an diff --git a/server/service/interpreter/persistence_test.go b/server/service/interpreter/persistence_test.go index 93280525a..106b8ab13 100644 --- a/server/service/interpreter/persistence_test.go +++ b/server/service/interpreter/persistence_test.go @@ -83,7 +83,7 @@ func TestPersistenceBatchSerializedEquality(t *testing.T) { object := &dexpb.AttributeWrite{ Key: "object", Value: &dexpb.Value{Kind: &dexpb.Value_ObjValue{ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: []byte(`{"value":1}`), }}}, } @@ -93,7 +93,7 @@ func TestPersistenceBatchSerializedEquality(t *testing.T) { equalSerializedObject := &dexpb.AttributeWrite{ Key: "object", Value: &dexpb.Value{Kind: &dexpb.Value_ObjValue{ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: []byte(`{"value":1}`), }}}, } diff --git a/server/service/interpreter/workflowImpl.go b/server/service/interpreter/workflowImpl.go index c2af56b94..4eabeb924 100644 --- a/server/service/interpreter/workflowImpl.go +++ b/server/service/interpreter/workflowImpl.go @@ -1345,7 +1345,7 @@ func stepFailureInput(step *dexpb.StepMovement) *dexpb.Value { } return &dexpb.Value{ Kind: &dexpb.Value_ObjValue{ - ObjValue: &dexpb.EncodedObject{Encoding: "j", Payload: []byte("null")}, + ObjValue: &dexpb.EncodedObject{Encoding: "json", Payload: []byte("null")}, }, } } diff --git a/web/api/mapping.go b/web/api/mapping.go index fe7aa5a55..81377abab 100644 --- a/web/api/mapping.go +++ b/web/api/mapping.go @@ -191,7 +191,7 @@ func dexValue(value *dexpb.Value) interface{} { case *dexpb.Value_NullValue: return nil case *dexpb.Value_ObjValue: - if kind.ObjValue.GetEncoding() == "j" { + if kind.ObjValue.GetEncoding() == "json" { var decoded interface{} if err := json.Unmarshal(kind.ObjValue.GetPayload(), &decoded); err == nil { return decoded diff --git a/web/server_integ_test.go b/web/server_integ_test.go index da71ccffa..68e4ad14d 100644 --- a/web/server_integ_test.go +++ b/web/server_integ_test.go @@ -491,7 +491,7 @@ func (s *flowService) LoadBlobs( return &dexpb.LoadBlobsResponse{Values: map[string]*dexpb.Value{ "string-id": {Kind: &dexpb.Value_StringValue{StringValue: "loaded string"}}, "object-id": {Kind: &dexpb.Value_ObjValue{ObjValue: &dexpb.EncodedObject{ - Encoding: "j", + Encoding: "json", Payload: []byte(`{"answer":42}`), }}}, }}, nil From 52d43dc72db85816571e5da8a6a0413203f00225 Mon Sep 17 00:00:00 2001 From: Quanzheng Long Date: Tue, 15 Sep 2026 16:36:05 -0700 Subject: [PATCH 3/8] Fix compact Blob ref CI checks --- sdk-rust/crates/dex-sdk/src/value_hydrator.rs | 4 +++- server/integ/web_api_test.go | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/sdk-rust/crates/dex-sdk/src/value_hydrator.rs b/sdk-rust/crates/dex-sdk/src/value_hydrator.rs index 2a15d83c2..ca9eda2e8 100644 --- a/sdk-rust/crates/dex-sdk/src/value_hydrator.rs +++ b/sdk-rust/crates/dex-sdk/src/value_hydrator.rs @@ -217,7 +217,9 @@ fn validate_concrete(value: &Value) -> SdkResult<()> { Some(value::Kind::DoubleValue(_)) => { Err(mapping_error("non-finite numbers are unsupported")) } - Some(value::Kind::ObjValue(object)) if object.encoding == "json" || object.encoding == "raw" => { + Some(value::Kind::ObjValue(object)) + if object.encoding == "json" || object.encoding == "raw" => + { Ok(()) } Some(value::Kind::ObjValue(object)) => Err(mapping_error(format!( diff --git a/server/integ/web_api_test.go b/server/integ/web_api_test.go index d1d397b11..23a4c244f 100644 --- a/server/integ/web_api_test.go +++ b/server/integ/web_api_test.go @@ -1604,7 +1604,7 @@ func testWebHistoryAndSummary( stepInputLocator := strings.SplitN(stepInputBlobID, "|", 2)[1] locatorParts := strings.SplitN(stepInputLocator, "/", 2) stepInputObjectPath := locatorParts[0] + "$" + encodeWebPathPart(flowID) + "/" + locatorParts[1] - require.NoError(t, os.Remove(filepath.Join(blobDirectory, "default", "v2", stepInputObjectPath))) + require.NoError(t, os.Remove(filepath.Join(blobDirectory, "default", stepInputObjectPath))) valueMissingEvents, _ := getAllWebHistoryEvents( t, ctx, runtime.FlowClient, flowID, startResponse.GetRunId(), ) From 6ac5c0afe3f7c94e89d7885f5905b08aa3b8cbb1 Mon Sep 17 00:00:00 2001 From: Quanzheng Long Date: Tue, 15 Sep 2026 16:59:03 -0700 Subject: [PATCH 4/8] Use the Value null arm for top-level nulls --- docs/design/plan/go-sdk-rewrite.md | 10 ++--- docs/design/rust-sdk-user-interface.md | 2 +- protos/dex.proto | 2 +- sdk-go/README.md | 4 +- sdk-go/dex/proto_mapper.go | 2 +- sdk-go/dex/value.go | 38 +++++++++++-------- sdk-go/dex/value_test.go | 9 +++-- sdk-go/gen/dexpb/dex.pb.go | 2 +- .../io/superdurable/dex/ValueHydrator.java | 2 +- .../java/io/superdurable/dex/ValueMapper.java | 10 ++++- .../main/java/io/superdurable/gen/Value.java | 18 ++++----- .../io/superdurable/gen/ValueOrBuilder.java | 6 +-- .../dex/WorkerServiceIntegrationTest.java | 3 ++ sdk-python/dex/_value_mapper.py | 9 ++--- sdk-python/tests/test_contracts.py | 4 ++ sdk-rust/README.md | 2 +- sdk-rust/crates/dex-sdk/src/context.rs | 2 +- sdk-rust/crates/dex-sdk/src/value_hydrator.rs | 4 +- sdk-rust/crates/dex-sdk/src/value_mapper.rs | 12 ++++-- sdk-rust/crates/dex-sdk/tests/integ/README.md | 2 +- sdk-typescript/src/context.ts | 2 +- sdk-typescript/src/gen/dex.ts | 2 +- sdk-typescript/src/value-mapper.ts | 19 ++++------ sdk-typescript/test/contracts.test.ts | 18 +++++++-- .../test/integ/step_heartbeat_flow.ts | 4 +- server/gen/dexpb/dex.pb.go | 2 +- server/integ/wf_timeout_test.go | 4 +- server/service/interpreter/workflowImpl.go | 5 ++- 28 files changed, 118 insertions(+), 81 deletions(-) diff --git a/docs/design/plan/go-sdk-rewrite.md b/docs/design/plan/go-sdk-rewrite.md index b2b5c16b2..ec22d06c8 100644 --- a/docs/design/plan/go-sdk-rewrite.md +++ b/docs/design/plan/go-sdk-rewrite.md @@ -134,19 +134,19 @@ remains internal. | unsigned integers up to `math.MaxInt64` | `int_value` | | float32 and float64 | `double_value` | | bool and named bools | `bool_value` | +| ordinary nil and typed nil | `null_value` | | `[]byte` and named byte slices | `obj_value`, encoding `"raw"` | | all other JSON-compatible values | `obj_value`, encoding `"json"` | Strings with invalid UTF-8 return an encoding error; arbitrary binary data uses `[]byte`. Raw-byte object payloads contain the bytes directly without JSON or base64 encoding. Structs, maps, other slices, arrays, and non-indexed -`time.Time` use JSON. Ordinary nil and typed nil encode as a JSON null object. -The proto null arm is reserved for attribute deletion. +`time.Time` use JSON. The proto null arm represents top-level null. Within an +Attribute write, it deletes the Attribute. `Value.Decode` requires a non-nil pointer. It rejects overflow, incompatible -targets, malformed JSON, unknown object encodings, deletion markers, and blob -arms that have not passed through hydration. Dynamic failures return errors and -never panic. +targets, malformed JSON, unknown object encodings, and blob arms that have not +passed through hydration. Dynamic failures return errors and never panic. ### Indexed attributes diff --git a/docs/design/rust-sdk-user-interface.md b/docs/design/rust-sdk-user-interface.md index ff4c118ce..92bf8010d 100644 --- a/docs/design/rust-sdk-user-interface.md +++ b/docs/design/rust-sdk-user-interface.md @@ -215,7 +215,7 @@ fn execute(&self, context: &mut Context, input: Import) -> HandlerResult` returns outer `Some` with inner `None`. A Stream frame is an implicit backend heartbeat that reuses the last explicit Worker heartbeat value, including its absence. Local activities ignore heartbeat details but still forward Stream frames. diff --git a/protos/dex.proto b/protos/dex.proto index ef5974c3e..6afbfd47c 100644 --- a/protos/dex.proto +++ b/protos/dex.proto @@ -126,7 +126,7 @@ message Value { int64 int_value = 5; double double_value = 6; bool bool_value = 7; - // Null deletes an attribute in storage. + // Top-level null. Within AttributeWrite, null deletes the Attribute. google.protobuf.NullValue null_value = 8; } } diff --git a/sdk-go/README.md b/sdk-go/README.md index 9243a85b4..ad8a059ee 100644 --- a/sdk-go/README.md +++ b/sdk-go/README.md @@ -586,8 +586,8 @@ Decode requires a non-nil pointer. Invalid UTF-8 strings, integer overflow, incompatible targets, unknown encodings, unhydrated blob references, and malformed JSON return errors. -Ordinary nil encodes as JSON null. The Dex null arm is used only when deleting -an attribute. +Ordinary nil encodes with the Dex null arm. In an Attribute write, that arm +deletes the Attribute. In every other Value context, it represents null. ### Indexed attributes diff --git a/sdk-go/dex/proto_mapper.go b/sdk-go/dex/proto_mapper.go index 824a0143a..f132368e4 100644 --- a/sdk-go/dex/proto_mapper.go +++ b/sdk-go/dex/proto_mapper.go @@ -1277,7 +1277,7 @@ func validateConcreteValue(value *dexpb.Value) error { *dexpb.Value_InternalBlobIdForObjValue: return fmt.Errorf("dex: blob-backed value is not hydrated") case *dexpb.Value_NullValue: - return fmt.Errorf("dex: attribute deletion marker is not a result value") + return nil default: return fmt.Errorf("dex: unsupported value kind %T", kind) } diff --git a/sdk-go/dex/value.go b/sdk-go/dex/value.go index 5e602085a..4ec734de2 100644 --- a/sdk-go/dex/value.go +++ b/sdk-go/dex/value.go @@ -66,18 +66,18 @@ func encodeValue(value any) (encoded *dexpb.Value, err error) { err = wrapValueMappingError("encode", err) }() if value == nil { - return encodeJSONObject(value) + return newNullValue(), nil } reflected := reflect.ValueOf(value) if reflected.Type() == noneType { if reflected.IsNil() { - return encodeJSONObject(nil) + return newNullValue(), nil } return nil, fmt.Errorf("dex: None payload must be nil") } if isNilValue(reflected) { - return encodeJSONObject(nil) + return newNullValue(), nil } switch reflected.Kind() { @@ -282,7 +282,7 @@ func decodeValueInto( *dexpb.Value_InternalBlobIdForObjValue: return fmt.Errorf("dex: blob-backed value must be hydrated before decoding") case *dexpb.Value_NullValue: - return fmt.Errorf("dex: attribute deletion marker cannot be decoded") + return decodeJSONPayload([]byte("null"), target, valuePtr) default: return fmt.Errorf("dex: unsupported value kind %T", kind) } @@ -309,14 +309,7 @@ func decodeObject( } switch object.Encoding { case jsonEncoding: - if target.Type() == noneType && - !bytes.Equal(bytes.TrimSpace(object.Payload), []byte("null")) { - return fmt.Errorf("dex: None payload must be JSON null") - } - if err := json.Unmarshal(object.Payload, valuePtr); err != nil { - return fmt.Errorf("dex: decode JSON value: %w", err) - } - return nil + return decodeJSONPayload(object.Payload, target, valuePtr) case rawBytesEncoding: return assignRawBytes(target, object.Payload) default: @@ -324,6 +317,17 @@ func decodeObject( } } +func decodeJSONPayload(payload []byte, target reflect.Value, valuePtr any) error { + if target.Type() == noneType && + !bytes.Equal(bytes.TrimSpace(payload), []byte("null")) { + return fmt.Errorf("dex: None payload must be JSON null") + } + if err := json.Unmarshal(payload, valuePtr); err != nil { + return fmt.Errorf("dex: decode JSON value: %w", err) + } + return nil +} + func assignRawBytes(target reflect.Value, payload []byte) error { rawBytes := make([]byte, len(payload)) copy(rawBytes, payload) @@ -444,9 +448,7 @@ func mapIndexType(indexType IndexType) (dexpb.IndexType, error) { } func newDeleteValue(index *AttributeIndex) (*dexpb.Value, *dexpb.IndexConfig, error) { - value := &dexpb.Value{ - Kind: &dexpb.Value_NullValue{NullValue: structpb.NullValue_NULL_VALUE}, - } + value := newNullValue() if index == nil { return value, nil, nil } @@ -461,6 +463,12 @@ func newDeleteValue(index *AttributeIndex) (*dexpb.Value, *dexpb.IndexConfig, er }, nil } +func newNullValue() *dexpb.Value { + return &dexpb.Value{ + Kind: &dexpb.Value_NullValue{NullValue: structpb.NullValue_NULL_VALUE}, + } +} + func parseDatetime(value string) (time.Time, error) { dateTime, err := time.Parse(dateTimeFormat, value) if err == nil { diff --git a/sdk-go/dex/value_test.go b/sdk-go/dex/value_test.go index 934c2ed3f..4907e3970 100644 --- a/sdk-go/dex/value_test.go +++ b/sdk-go/dex/value_test.go @@ -157,7 +157,8 @@ func TestValueCodecNullAndDecodeValidation(t *testing.T) { var noneInput None noneValue, err := encodeValue(noneInput) require.NoError(t, err) - require.JSONEq(t, "null", string(noneValue.GetObjValue().Payload)) + _, isNull := noneValue.Kind.(*dexpb.Value_NullValue) + require.True(t, isNull) var noneOutput None require.NoError(t, decodeValue(noneValue, &noneOutput)) require.Nil(t, noneOutput) @@ -174,12 +175,14 @@ func TestValueCodecNullAndDecodeValidation(t *testing.T) { var input *codecRecord value, err := encodeValue(input) require.NoError(t, err) - require.JSONEq(t, "null", string(value.GetObjValue().Payload)) + _, isNull = value.Kind.(*dexpb.Value_NullValue) + require.True(t, isNull) var channel chan int value, err = encodeValue(channel) require.NoError(t, err) - require.JSONEq(t, "null", string(value.GetObjValue().Payload)) + _, isNull = value.Kind.(*dexpb.Value_NullValue) + require.True(t, isNull) value, err = encodeValue(uintptr(9)) require.NoError(t, err) diff --git a/sdk-go/gen/dexpb/dex.pb.go b/sdk-go/gen/dexpb/dex.pb.go index 062c1b020..28ca7f297 100644 --- a/sdk-go/gen/dexpb/dex.pb.go +++ b/sdk-go/gen/dexpb/dex.pb.go @@ -1451,7 +1451,7 @@ type Value_BoolValue struct { } type Value_NullValue struct { - // Null deletes an attribute in storage. + // Top-level null. Within AttributeWrite, null deletes the Attribute. NullValue structpb.NullValue `protobuf:"varint,8,opt,name=null_value,json=nullValue,proto3,enum=google.protobuf.NullValue,oneof"` } diff --git a/sdk-java/src/main/java/io/superdurable/dex/ValueHydrator.java b/sdk-java/src/main/java/io/superdurable/dex/ValueHydrator.java index 46d21e216..2431c312d 100644 --- a/sdk-java/src/main/java/io/superdurable/dex/ValueHydrator.java +++ b/sdk-java/src/main/java/io/superdurable/dex/ValueHydrator.java @@ -414,7 +414,7 @@ private static void validateConcrete(final Value value) { case INTERNAL_BLOB_ID_FOR_OBJ_VALUE: throw new IllegalArgumentException("blob-backed Value was not hydrated"); case NULL_VALUE: - throw new IllegalArgumentException("attribute deletion marker cannot be hydrated"); + return; default: throw new IllegalArgumentException("Value has no concrete kind"); } diff --git a/sdk-java/src/main/java/io/superdurable/dex/ValueMapper.java b/sdk-java/src/main/java/io/superdurable/dex/ValueMapper.java index cb026b377..81e73d47b 100644 --- a/sdk-java/src/main/java/io/superdurable/dex/ValueMapper.java +++ b/sdk-java/src/main/java/io/superdurable/dex/ValueMapper.java @@ -38,6 +38,9 @@ final class ValueMapper { } Value encode(final Object value) { + if (value == null) { + return nullValue(); + } if (value instanceof String) { return Value.newBuilder().setStringValue((String) value).build(); } @@ -101,7 +104,8 @@ T decode(final Value value, final Class valueType) { case INTERNAL_BLOB_ID_FOR_OBJ_VALUE: throw new ValueMappingException("Cannot decode an unhydrated blob-backed Value"); case NULL_VALUE: - throw new ValueMappingException("Cannot decode an attribute deletion marker"); + decoded = null; + break; default: throw new ValueMappingException("Cannot decode an unsupported Value kind"); } @@ -149,6 +153,10 @@ private Object decodeObjectTree(final EncodedObject object) { } Value deletion() { + return nullValue(); + } + + private static Value nullValue() { return Value.newBuilder().setNullValue(NullValue.NULL_VALUE).build(); } diff --git a/sdk-java/src/main/java/io/superdurable/gen/Value.java b/sdk-java/src/main/java/io/superdurable/gen/Value.java index 03d553506..60dc48960 100644 --- a/sdk-java/src/main/java/io/superdurable/gen/Value.java +++ b/sdk-java/src/main/java/io/superdurable/gen/Value.java @@ -367,7 +367,7 @@ public boolean getBoolValue() { public static final int NULL_VALUE_FIELD_NUMBER = 8; /** *
-   * Null deletes an attribute in storage.
+   * Top-level null. Within AttributeWrite, null deletes the Attribute.
    * 
* * .google.protobuf.NullValue null_value = 8; @@ -378,7 +378,7 @@ public boolean hasNullValue() { } /** *
-   * Null deletes an attribute in storage.
+   * Top-level null. Within AttributeWrite, null deletes the Attribute.
    * 
* * .google.protobuf.NullValue null_value = 8; @@ -392,7 +392,7 @@ public int getNullValueValue() { } /** *
-   * Null deletes an attribute in storage.
+   * Top-level null. Within AttributeWrite, null deletes the Attribute.
    * 
* * .google.protobuf.NullValue null_value = 8; @@ -1518,7 +1518,7 @@ public Builder clearBoolValue() { /** *
-     * Null deletes an attribute in storage.
+     * Top-level null. Within AttributeWrite, null deletes the Attribute.
      * 
* * .google.protobuf.NullValue null_value = 8; @@ -1530,7 +1530,7 @@ public boolean hasNullValue() { } /** *
-     * Null deletes an attribute in storage.
+     * Top-level null. Within AttributeWrite, null deletes the Attribute.
      * 
* * .google.protobuf.NullValue null_value = 8; @@ -1545,7 +1545,7 @@ public int getNullValueValue() { } /** *
-     * Null deletes an attribute in storage.
+     * Top-level null. Within AttributeWrite, null deletes the Attribute.
      * 
* * .google.protobuf.NullValue null_value = 8; @@ -1560,7 +1560,7 @@ public Builder setNullValueValue(int value) { } /** *
-     * Null deletes an attribute in storage.
+     * Top-level null. Within AttributeWrite, null deletes the Attribute.
      * 
* * .google.protobuf.NullValue null_value = 8; @@ -1577,7 +1577,7 @@ public com.google.protobuf.NullValue getNullValue() { } /** *
-     * Null deletes an attribute in storage.
+     * Top-level null. Within AttributeWrite, null deletes the Attribute.
      * 
* * .google.protobuf.NullValue null_value = 8; @@ -1594,7 +1594,7 @@ public Builder setNullValue(com.google.protobuf.NullValue value) { } /** *
-     * Null deletes an attribute in storage.
+     * Top-level null. Within AttributeWrite, null deletes the Attribute.
      * 
* * .google.protobuf.NullValue null_value = 8; diff --git a/sdk-java/src/main/java/io/superdurable/gen/ValueOrBuilder.java b/sdk-java/src/main/java/io/superdurable/gen/ValueOrBuilder.java index a183ce44f..7bd4f7a8d 100644 --- a/sdk-java/src/main/java/io/superdurable/gen/ValueOrBuilder.java +++ b/sdk-java/src/main/java/io/superdurable/gen/ValueOrBuilder.java @@ -135,7 +135,7 @@ public interface ValueOrBuilder extends /** *
-   * Null deletes an attribute in storage.
+   * Top-level null. Within AttributeWrite, null deletes the Attribute.
    * 
* * .google.protobuf.NullValue null_value = 8; @@ -144,7 +144,7 @@ public interface ValueOrBuilder extends boolean hasNullValue(); /** *
-   * Null deletes an attribute in storage.
+   * Top-level null. Within AttributeWrite, null deletes the Attribute.
    * 
* * .google.protobuf.NullValue null_value = 8; @@ -153,7 +153,7 @@ public interface ValueOrBuilder extends int getNullValueValue(); /** *
-   * Null deletes an attribute in storage.
+   * Top-level null. Within AttributeWrite, null deletes the Attribute.
    * 
* * .google.protobuf.NullValue null_value = 8; diff --git a/sdk-java/src/test/java/io/superdurable/dex/WorkerServiceIntegrationTest.java b/sdk-java/src/test/java/io/superdurable/dex/WorkerServiceIntegrationTest.java index 187a361e0..0f9db29b2 100644 --- a/sdk-java/src/test/java/io/superdurable/dex/WorkerServiceIntegrationTest.java +++ b/sdk-java/src/test/java/io/superdurable/dex/WorkerServiceIntegrationTest.java @@ -83,6 +83,9 @@ void usesCompactObjectEncodingWireValues() { .getObjValue().getEncoding()); assertEquals("raw", values.encode(new byte[] {1, 2, 3}) .getObjValue().getEncoding()); + final Value nullValue = values.encode(null); + assertEquals(Value.KindCase.NULL_VALUE, nullValue.getKindCase()); + assertNull(values.decode(nullValue, Void.class)); } @Test diff --git a/sdk-python/dex/_value_mapper.py b/sdk-python/dex/_value_mapper.py index 963d2f670..1b0d6056a 100644 --- a/sdk-python/dex/_value_mapper.py +++ b/sdk-python/dex/_value_mapper.py @@ -43,10 +43,7 @@ def encode(self, value: Any, codec: Codec[Any]) -> pb.Value: def _encode(self, value: Any, codec: Codec[Any]) -> pb.Value: if value is None: return pb.Value( - obj_value=pb.EncodedObject( - encoding=_JSON_ENCODING, - payload=b"null", - ) + null_value=cast(struct_pb2.NullValue, struct_pb2.NULL_VALUE) ) logical = codec.encode(value) if logical.kind is WireKind.STRING: @@ -134,7 +131,7 @@ def _decode(self, value: pb.Value, codec: Codec[Any]) -> Any: ): raise ValueError("blob-backed Value was not hydrated") if kind == "null_value": - raise ValueError("attribute deletion marker cannot be decoded") + return None raise TypeError(f"cannot decode {kind or 'empty Value'} as {codec.type_name}") def to_value(self, value: pb.Value) -> Value: @@ -166,6 +163,8 @@ def _to_value(self, value: pb.Value) -> Value: "internal_blob_id_for_obj_value", ): raise ValueError("blob-backed Value was not hydrated") + if kind == "null_value": + return Value(WireKind.JSON, "null") raise TypeError(f"cannot wrap {kind or 'empty Value'} as Value") @staticmethod diff --git a/sdk-python/tests/test_contracts.py b/sdk-python/tests/test_contracts.py index fc9e398c1..0da50a698 100644 --- a/sdk-python/tests/test_contracts.py +++ b/sdk-python/tests/test_contracts.py @@ -539,6 +539,10 @@ def test_object_codecs_use_compact_wire_encodings() -> None: values = ValueMapper(CodecRegistry()) assert values.encode_dynamic({"order_id": "order-1"}).obj_value.encoding == "json" assert values.encode_dynamic(b"payload").obj_value.encoding == "raw" + encoded_null = values.encode_dynamic(None) + assert encoded_null.WhichOneof("kind") == "null_value" + assert values.decode(encoded_null, values.codec(type(None))) is None + assert values.decode(encoded_null, values.codec(str)) is None def test_fluent_wait_factories_validate_channel_bounds() -> None: diff --git a/sdk-rust/README.md b/sdk-rust/README.md index 2f73fae0e..97ced8782 100644 --- a/sdk-rust/README.md +++ b/sdk-rust/README.md @@ -257,7 +257,7 @@ context.record_heartbeat()?; `record_heartbeat_value` persists a typed checkpoint for the next regular activity attempt. `record_heartbeat` sends a heartbeat without a Value and clears the persisted details. A missing -Value and an encoded JSON null remain distinguishable by decoding `Option`: the latter returns +Value and a null Value remain distinguishable by decoding `Option`: the latter returns `Some(None)`. Local activities transmit heartbeat frames but Dex ignores their values. Each call blocks only when the Worker's single-frame output buffer is full. This bounded diff --git a/sdk-rust/crates/dex-sdk/src/context.rs b/sdk-rust/crates/dex-sdk/src/context.rs index e4a02a45c..d57afd8aa 100644 --- a/sdk-rust/crates/dex-sdk/src/context.rs +++ b/sdk-rust/crates/dex-sdk/src/context.rs @@ -254,7 +254,7 @@ impl Context { /// Decodes the checkpoint persisted by the previous regular attempt. /// - /// `None` means no heartbeat Value is present. To distinguish an encoded JSON null, request an + /// `None` means no heartbeat Value is present. To distinguish a null Value, request an /// optional application type: `last_heartbeat_value::>()` returns `Some(None)` for a /// present null Value. /// diff --git a/sdk-rust/crates/dex-sdk/src/value_hydrator.rs b/sdk-rust/crates/dex-sdk/src/value_hydrator.rs index ca9eda2e8..544544897 100644 --- a/sdk-rust/crates/dex-sdk/src/value_hydrator.rs +++ b/sdk-rust/crates/dex-sdk/src/value_hydrator.rs @@ -230,9 +230,7 @@ fn validate_concrete(value: &Value) -> SdkResult<()> { | Some(value::Kind::InternalBlobIdForObjValue(_)) => { Err(mapping_error("blob-backed Value was not hydrated")) } - Some(value::Kind::NullValue(_)) => Err(mapping_error( - "attribute deletion marker cannot be hydrated", - )), + Some(value::Kind::NullValue(_)) => Ok(()), None => Err(mapping_error("Value has no concrete kind")), } } diff --git a/sdk-rust/crates/dex-sdk/src/value_mapper.rs b/sdk-rust/crates/dex-sdk/src/value_mapper.rs index ff0b5f99a..efc48a8f7 100644 --- a/sdk-rust/crates/dex-sdk/src/value_mapper.rs +++ b/sdk-rust/crates/dex-sdk/src/value_mapper.rs @@ -42,6 +42,7 @@ pub(crate) fn deletion() -> ProtoValue { fn encode_json(json: JsonValue) -> SdkResult { let kind = match json { + JsonValue::Null => value::Kind::NullValue(NullValue::NullValue.into()), JsonValue::String(text) => value::Kind::StringValue(text), JsonValue::Bool(value) => value::Kind::BoolValue(value), JsonValue::Number(number) => { @@ -100,9 +101,7 @@ fn decode_json(input: &ProtoValue) -> SdkResult { | Some(value::Kind::InternalBlobIdForObjValue(_)) => { Err(value_error("blob-backed Value was not hydrated")) } - Some(value::Kind::NullValue(_)) => { - Err(value_error("attribute deletion marker cannot be decoded")) - } + Some(value::Kind::NullValue(_)) => Ok(JsonValue::Null), None => Err(value_error("Value has no concrete kind")), } } @@ -143,5 +142,12 @@ mod tests { decode::>(&encoded_bytes).expect("decode bytes"), vec![1, 2, 3] ); + + let encoded_null = encode(&Option::::None).expect("encode null"); + assert!(matches!(encoded_null.kind, Some(value::Kind::NullValue(_)))); + assert_eq!( + decode::>(&encoded_null).expect("decode null"), + None + ); } } diff --git a/sdk-rust/crates/dex-sdk/tests/integ/README.md b/sdk-rust/crates/dex-sdk/tests/integ/README.md index 8737cd981..a3d8fbae4 100644 --- a/sdk-rust/crates/dex-sdk/tests/integ/README.md +++ b/sdk-rust/crates/dex-sdk/tests/integ/README.md @@ -60,7 +60,7 @@ Local contract tests also cover malformed rich details, fallible registration, invalid Step-result worker metadata, user-owned Condition IDs, and map introspection. Persistence integration covers singleton Attribute equality waits. -Heartbeat recovery verifies typed checkpoints, explicit clearing, JSON null versus an absent Value, +Heartbeat recovery verifies typed checkpoints, explicit clearing, null versus an absent Value, Stream implicit-heartbeat preservation, and the absence of local-activity details after regular fallback. Stream integration interleaves WaitFor and Execute heartbeat frames with repeated Step writes, exercises default and custom buffered text writers, then verifies repeated client sources diff --git a/sdk-typescript/src/context.ts b/sdk-typescript/src/context.ts index ad7dccf44..99e2252af 100644 --- a/sdk-typescript/src/context.ts +++ b/sdk-typescript/src/context.ts @@ -57,7 +57,7 @@ export interface Context { * * The codec must match the one passed to {@link AsyncContext.recordHeartbeat}. When omitted, * values use JSON encoding. Call {@link Context.hasLastHeartbeatValue} to distinguish an absent - * Value from a present JSON null value, because both decode to `undefined`. + * Value from a present null value, because both decode to `undefined`. * * @typeParam T - Expected heartbeat value type. * @param codec - Codec used to decode the Value; omitted for JSON. diff --git a/sdk-typescript/src/gen/dex.ts b/sdk-typescript/src/gen/dex.ts index 82b34d471..a5b2f70ce 100644 --- a/sdk-typescript/src/gen/dex.ts +++ b/sdk-typescript/src/gen/dex.ts @@ -250,7 +250,7 @@ export interface Value { | { $case: "doubleValue"; value: number } | { $case: "boolValue"; value: boolean } | // - /** Null deletes an attribute in storage. */ + /** Top-level null. Within AttributeWrite, null deletes the Attribute. */ { $case: "nullValue"; value: NullValue } | undefined; } diff --git a/sdk-typescript/src/value-mapper.ts b/sdk-typescript/src/value-mapper.ts index 669873c65..8415e7abb 100644 --- a/sdk-typescript/src/value-mapper.ts +++ b/sdk-typescript/src/value-mapper.ts @@ -28,7 +28,7 @@ const textDecoder = new TextDecoder(); export function encodeValue(codec: Codec, value: T): ProtoValue { if (value === undefined || value === null) { - return objectValue("json", textEncoder.encode("null")); + return nullValue(); } let encoded: CodecValue; try { @@ -54,7 +54,7 @@ export function encodeValue(codec: Codec, value: T): ProtoValue { export function encodeUnknown(value: unknown): ProtoValue { if (value === undefined || value === null) { - return objectValue("json", textEncoder.encode("null")); + return nullValue(); } if (typeof value === "string") { return ProtoValue.create({ kind: { $case: "stringValue", value } }); @@ -87,13 +87,6 @@ export function encodeUnknown(value: unknown): ProtoValue { } export function decodeValue(codec: Codec, value: ProtoValue): T { - if ( - value.kind?.$case === "objValue" && - value.kind.value.encoding === "json" && - textDecoder.decode(value.kind.value.payload) === "null" - ) { - return undefined as T; - } try { return codec.decode(toCodecValue(value)); } catch (failure) { @@ -133,11 +126,15 @@ export function decodeUnknown(value: ProtoValue): unknown { case "internalBlobIdForObjValue": throw new ValueMappingError("decode", "blob-backed Value was not hydrated"); case "nullValue": - return undefined; + return null; } } export function deletionValue(): ProtoValue { + return nullValue(); +} + +function nullValue(): ProtoValue { return ProtoValue.create({ kind: { $case: "nullValue", value: NullValue.NULL_VALUE }, }); @@ -271,7 +268,7 @@ function toCodecValue(value: ProtoValue): CodecValue { case "internalBlobIdForObjValue": throw new ValueMappingError("decode", "blob-backed Value was not hydrated"); case "nullValue": - throw new ValueMappingError("decode", "attribute deletion marker cannot be decoded"); + return { kind: "json", data: "null" }; } } diff --git a/sdk-typescript/test/contracts.test.ts b/sdk-typescript/test/contracts.test.ts index be284515b..c3b0ff51a 100644 --- a/sdk-typescript/test/contracts.test.ts +++ b/sdk-typescript/test/contracts.test.ts @@ -37,6 +37,7 @@ import { openBlobCache, rpc, stringCodec, + voidCodec, type BlobCache, type AsyncContext, type Context, @@ -58,7 +59,12 @@ import { type StepStreamWrite, type Value, } from "../src/gen/dex.js"; -import { codecOrJson, encodeValue, type ValueHydrator } from "../src/value-mapper.js"; +import { + codecOrJson, + decodeValue, + encodeValue, + type ValueHydrator, +} from "../src/value-mapper.js"; import { WorkerDispatcher } from "../src/worker-dispatcher.js"; import { registeredFlowByName } from "../src/flow.js"; import { InvocationContext } from "../src/invocation-context.js"; @@ -218,6 +224,10 @@ test("omitted codecs use identity JSON rather than scalar wire kinds", () => { assert.equal(scalarString.kind?.$case, "stringValue"); const rawBytes = encodeValue(bytesCodec, new Uint8Array([1, 2, 3])); assert.equal(rawBytes.kind?.$case === "objValue" ? rawBytes.kind.value.encoding : "", "raw"); + const nullValue = encodeValue(codecOrJson(), null); + assert.equal(nullValue.kind?.$case, "nullValue"); + assert.equal(decodeValue(codecOrJson(), nullValue), null); + assert.equal(decodeValue(voidCodec, nullValue), undefined); }); test("object Step and RPC omit codecs and still encode JSON", async () => { @@ -286,7 +296,7 @@ test("object Step and RPC omit codecs and still encode JSON", async () => { attributes: [], }), ); - assert.equal(pinged.output?.kind?.$case, "objValue"); + assert.equal(pinged.output?.kind?.$case, "nullValue"); }); test("fluent wait factories validate channel bounds", () => { @@ -724,13 +734,13 @@ test("Async Step Context preserves heartbeat Value presence and codecs", async ( assert.deepEqual(observed, [ { hasValue: false, value: undefined }, { hasValue: true, value: "restored" }, - { hasValue: true, value: undefined }, + { hasValue: true, value: null }, ]); assert.equal(heartbeats.length, 12); for (let offset = 0; offset < heartbeats.length; offset += 4) { assert.equal(heartbeats[offset]?.kind?.$case, "objValue"); assert.equal(heartbeats[offset + 1]?.kind?.$case, "stringValue"); - assert.equal(heartbeats[offset + 2]?.kind?.$case, "objValue"); + assert.equal(heartbeats[offset + 2]?.kind?.$case, "nullValue"); assert.equal(heartbeats[offset + 3], undefined); } }); diff --git a/sdk-typescript/test/integ/step_heartbeat_flow.ts b/sdk-typescript/test/integ/step_heartbeat_flow.ts index 180ef461a..19c3f3b79 100644 --- a/sdk-typescript/test/integ/step_heartbeat_flow.ts +++ b/sdk-typescript/test/integ/step_heartbeat_flow.ts @@ -118,8 +118,8 @@ class StepHeartbeatStep implements Step { throw new Error(`${scenario} heartbeat Value was not restored`); } if (scenario === "null") { - if (context.getLastHeartbeatValue() !== undefined) { - throw new Error("JSON null heartbeat decoded unexpectedly"); + if (context.getLastHeartbeatValue() !== null) { + throw new Error("null heartbeat decoded unexpectedly"); } return; } diff --git a/server/gen/dexpb/dex.pb.go b/server/gen/dexpb/dex.pb.go index 062c1b020..28ca7f297 100644 --- a/server/gen/dexpb/dex.pb.go +++ b/server/gen/dexpb/dex.pb.go @@ -1451,7 +1451,7 @@ type Value_BoolValue struct { } type Value_NullValue struct { - // Null deletes an attribute in storage. + // Top-level null. Within AttributeWrite, null deletes the Attribute. NullValue structpb.NullValue `protobuf:"varint,8,opt,name=null_value,json=nullValue,proto3,enum=google.protobuf.NullValue,oneof"` } diff --git a/server/integ/wf_timeout_test.go b/server/integ/wf_timeout_test.go index 4255a6de2..b1b7e7625 100644 --- a/server/integ/wf_timeout_test.go +++ b/server/integ/wf_timeout_test.go @@ -537,8 +537,8 @@ func doTestFlowTimeoutHandlerExecutionOptions( if shouldRecover { require.Equal(t, "recovered", result.GetResults()[0].GetCompletedStepOutput().GetStringValue()) recoveryRequest := receiveTimeoutExecuteRequest(t, ctx, workerHandler.recoveryRequests) - require.Equal(t, "json", recoveryRequest.GetStepInput().GetObjValue().GetEncoding()) - require.Equal(t, []byte("null"), recoveryRequest.GetStepInput().GetObjValue().GetPayload()) + _, isNull := recoveryRequest.GetStepInput().GetKind().(*dexpb.Value_NullValue) + require.True(t, isNull) require.NotNil(t, recoveryRequest.GetContext().GetRecoveryError()) require.Contains(t, recoveryRequest.GetContext().GetRecoveryError().GetDetail(), "retryable timeout handler failure") } else { diff --git a/server/service/interpreter/workflowImpl.go b/server/service/interpreter/workflowImpl.go index 4eabeb924..8ee77366f 100644 --- a/server/service/interpreter/workflowImpl.go +++ b/server/service/interpreter/workflowImpl.go @@ -24,6 +24,7 @@ import ( "github.com/superdurable/dex/service/interpreter/cont" "github.com/superdurable/dex/service/interpreter/interfaces" "github.com/superdurable/dex/service/interpreter/timers" + "google.golang.org/protobuf/types/known/structpb" ) const ( @@ -1344,8 +1345,8 @@ func stepFailureInput(step *dexpb.StepMovement) *dexpb.Value { return step.GetStepInput() } return &dexpb.Value{ - Kind: &dexpb.Value_ObjValue{ - ObjValue: &dexpb.EncodedObject{Encoding: "json", Payload: []byte("null")}, + Kind: &dexpb.Value_NullValue{ + NullValue: structpb.NullValue_NULL_VALUE, }, } } From 068926a0b00c3eabe99c1fe3c7dcf9bb35a3ad4f Mon Sep 17 00:00:00 2001 From: Quanzheng Long Date: Tue, 15 Sep 2026 17:27:51 -0700 Subject: [PATCH 5/8] Remove Blob object ID length bounds --- docs/content/production/server-operations.mdx | 12 +++++++----- docs/design/deterministic-blob-identity.md | 6 ++++-- .../current/production/server-operations.mdx | 6 +++--- server/config/attribute_store_test.go | 8 +++----- server/config/config.go | 15 +++------------ server/service/common/blobstore/interfaces.go | 6 ++---- .../common/blobstore/store_impl_unit_test.go | 4 ++-- 7 files changed, 24 insertions(+), 33 deletions(-) diff --git a/docs/content/production/server-operations.mdx b/docs/content/production/server-operations.mdx index 3c73b73bd..43a7008af 100644 --- a/docs/content/production/server-operations.mdx +++ b/docs/content/production/server-operations.mdx @@ -141,17 +141,19 @@ Object IDs use deterministic lowercase Base36 characters. Retries with the same invocation ID and stored bytes overwrite the same object instead of creating duplicates. Object stored bytes include the encoding. Dex does not perform a read-before-write, conditional create, or collision retry. -**blobStore.objectIdLength** defaults to 10 and accepts values -from 10 through 50. Every Server writing the same Blob Store namespace must use +**blobStore.objectIdLength** defaults to 10. Zero selects that default, negative +values are invalid, and positive values are accepted without a protocol-defined +range. Every Server writing the same Blob Store namespace must use the same value, and the setting must not change while those Servers are -running. Readers accept every supported length, so a deployment can increase -the configured length during a coordinated restart. +running. Readers accept any non-empty lowercase Base36 ID, so a deployment can +change the configured length during a coordinated restart. Ten Base36 characters provide about 51.7 bits. Within one Flow and one UTC day, the approximate probability of at least one collision is 1.4 × 10⁻⁸ for 10,000 objects, 1.4 × 10⁻⁶ for 100,000 objects, and 1.4 × 10⁻⁴ for 1,000,000 objects. Use 10 for ordinary deployments. Use 12 or 16 for high-throughput Flows. A -length of 50 can represent the full SHA-256 value. +length of 50 can represent the full SHA-256 value. Longer values add leading +zeros but no additional entropy. Cleanup keeps the UTC date at the start of each Flow prefix. It lists prefixes in lexical pages, describes the encoded Flow and optional Run, and deletes the diff --git a/docs/design/deterministic-blob-identity.md b/docs/design/deterministic-blob-identity.md index 5b9e7707f..24d1a21bf 100644 --- a/docs/design/deterministic-blob-identity.md +++ b/docs/design/deterministic-blob-identity.md @@ -35,8 +35,10 @@ objectID = fixedWidthBase36(digest mod 36^objectIdLength) Each component is prefixed with its unsigned 64-bit big-endian byte length. The alphabet is `0123456789abcdefghijklmnopqrstuvwxyz`. The configured length defaults -to 10 and accepts 10 through 50. All Servers writing the same namespace use the -same immutable value. +to 10. Zero selects the default, negative values are invalid, and positive +values have no protocol-defined range. All Servers writing the same namespace +use the same immutable value. Lengths above 50 add leading zeros without adding +SHA-256 entropy. String blobs store their UTF-8 bytes. Object blobs store a deterministic protobuf serialization of the complete `EncodedObject`, including its encoding and diff --git a/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/production/server-operations.mdx b/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/production/server-operations.mdx index 3a581b830..b307c9fc1 100644 --- a/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/production/server-operations.mdx +++ b/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/production/server-operations.mdx @@ -128,14 +128,14 @@ reference。 object ID 使用确定性的全小写 Base36 字符。同一个 invocation ID 和 stored bytes 的 retry 会 覆盖同一个 object,不会生成重复 object。Object stored bytes 包含 encoding。Dex 不执行 read-before-write、conditional create 或 collision retry。**blobStore.objectIdLength** 默认值为 -10,有效范围是 10 到 50。写入同一个 +10。0 表示使用默认值,负数无效,正数没有协议规定的范围。写入同一个 Blob Store namespace 的所有 Server 必须使用相同值,而且 Server 运行期间不能修改该值。 -reader 接受范围内的所有长度,因此 deployment 可在协调重启时提高配置长度。 +reader 接受任意非空的全小写 Base36 ID,因此 deployment 可在协调重启时修改配置长度。 10 位 Base36 提供约 51.7 bits。在单个 Flow 的单个 UTC day partition 内,10,000 个 object 至少发生一次碰撞的近似概率为 1.4 × 10⁻⁸;100,000 个时为 1.4 × 10⁻⁶;1,000,000 个时为 1.4 × 10⁻⁴。普通 deployment 使用 10。高吞吐 Flow 使用 12 或 16。长度 50 可以表达完整 -SHA-256 值。 +SHA-256 值。更长的值只会增加前导零,不会增加 entropy。 cleanup 保留每个 Flow prefix 开头的 UTC date。它按字典序分页列出 prefix,describe 已编码 的 Flow 和可选 Run,并且只在 execution 已不存在时删除整个 prefix。随后使用返回的 diff --git a/server/config/attribute_store_test.go b/server/config/attribute_store_test.go index a2ceb2c8d..590e3ba98 100644 --- a/server/config/attribute_store_test.go +++ b/server/config/attribute_store_test.go @@ -66,13 +66,11 @@ func TestBlobStoreDefaults(t *testing.T) { } func TestBlobStoreObjectIDLengthValidation(t *testing.T) { - for _, objectIDLength := range []int{0, 10, 12, 16, 22, 50} { + for _, objectIDLength := range []int{0, 1, 9, 10, 12, 16, 22, 50, 51} { require.NoError(t, (BlobStoreConfig{ObjectIDLength: objectIDLength}).Validate()) } - for _, objectIDLength := range []int{-1, 1, 9, 51} { - err := (BlobStoreConfig{ObjectIDLength: objectIDLength}).Validate() - require.ErrorContains(t, err, "objectIdLength") - } + err := (BlobStoreConfig{ObjectIDLength: -1}).Validate() + require.ErrorContains(t, err, "objectIdLength") } func TestExternalStorageConfigKeyIsRejected(t *testing.T) { diff --git a/server/config/config.go b/server/config/config.go index a663ba0f1..874d4788a 100644 --- a/server/config/config.go +++ b/server/config/config.go @@ -72,10 +72,6 @@ const ( DefaultBlobStoreThresholdInBytes = 100 // DefaultBlobStoreObjectIDLength is the default Base36 object identifier length. DefaultBlobStoreObjectIDLength = 10 - // MinimumBlobStoreObjectIDLength is the shortest supported Base36 object identifier. - MinimumBlobStoreObjectIDLength = 10 - // MaximumBlobStoreObjectIDLength is the longest supported Base36 object identifier. - MaximumBlobStoreObjectIDLength = 50 // DefaultAttributeStoreSchemaSyncInterval refreshes table schemas every minute before jitter. DefaultAttributeStoreSchemaSyncInterval = time.Minute // DefaultAttributeStoreSyncBatchSize caps items in one Attribute Store upsert. @@ -220,7 +216,7 @@ type ( LazyLoading *bool `yaml:"lazyLoading"` // ThresholdInBytes triggers blob offload above this payload size. Default 100. Zero uses the default. ThresholdInBytes int `yaml:"thresholdInBytes"` - // ObjectIDLength sets deterministic lowercase Base36 Blob object IDs. Default 10. Valid range 10-50; zero uses the default. Immutable after startup and identical across Servers sharing a namespace. + // ObjectIDLength sets deterministic lowercase Base36 Blob object IDs. Default 10. Zero uses the default; negative values are invalid. Immutable after startup and identical across Servers sharing a namespace. ObjectIDLength int `yaml:"objectIdLength"` // SupportedStorages lists blob backends. Exactly one may have Status active for writes; others are read-only. SupportedStorages []BlobStoreConfigEntry `yaml:"supportedStorages"` @@ -751,13 +747,8 @@ func (c BlobStoreConfig) EffectiveObjectIDLength() int { // Validate checks Blob Store identifier and cache settings. func (c BlobStoreConfig) Validate() error { - objectIDLength := c.EffectiveObjectIDLength() - if objectIDLength < MinimumBlobStoreObjectIDLength || objectIDLength > MaximumBlobStoreObjectIDLength { - return fmt.Errorf( - "blobStore objectIdLength must be between %d and %d", - MinimumBlobStoreObjectIDLength, - MaximumBlobStoreObjectIDLength, - ) + if c.ObjectIDLength < 0 { + return fmt.Errorf("blobStore objectIdLength must not be negative") } return c.BlobCache.Validate() } diff --git a/server/service/common/blobstore/interfaces.go b/server/service/common/blobstore/interfaces.go index 9d9764290..bf0c82f83 100644 --- a/server/service/common/blobstore/interfaces.go +++ b/server/service/common/blobstore/interfaces.go @@ -16,8 +16,6 @@ import ( "fmt" "strings" "time" - - "github.com/superdurable/dex/config" ) const ( @@ -121,8 +119,8 @@ func ValueObjectPath(flowID string, locator string) (string, error) { return "", fmt.Errorf("invalid Blob locator date: %w", err) } objectID := parts[1] - if len(objectID) < config.MinimumBlobStoreObjectIDLength || len(objectID) > config.MaximumBlobStoreObjectIDLength { - return "", fmt.Errorf("invalid Blob object ID length %d", len(objectID)) + if objectID == "" { + return "", fmt.Errorf("invalid empty Blob object ID") } for _, character := range objectID { if (character < '0' || character > '9') && (character < 'a' || character > 'z') { diff --git a/server/service/common/blobstore/store_impl_unit_test.go b/server/service/common/blobstore/store_impl_unit_test.go index 3eeb5a33a..6c60f5139 100644 --- a/server/service/common/blobstore/store_impl_unit_test.go +++ b/server/service/common/blobstore/store_impl_unit_test.go @@ -24,7 +24,7 @@ func TestDeterministicBlobObjectIDStableVector(t *testing.T) { } func TestDeterministicBlobObjectIDLengthsAndAlphabet(t *testing.T) { - for _, objectIDLength := range []int{10, 12, 16, 22, 50} { + for _, objectIDLength := range []int{1, 9, 10, 12, 16, 22, 50, 51} { objectID, err := deterministicBlobObjectID("request", []byte("payload"), objectIDLength) require.NoError(t, err) require.Len(t, objectID, objectIDLength) @@ -46,7 +46,7 @@ func TestDeterministicBlobObjectIDValuePathUsesContextualFlow(t *testing.T) { require.Equal(t, "260913$Zmxvdy9vbmU/0abcde1234", path) for _, locator := range []string{ - "260913/abcdefghi", + "260913/", "260913/ABCDEF1234", "260913/abcdef1234/extra", "261340/abcdef1234", From 4c18c7d04135053c6a3f387a8f411c918f7ba803 Mon Sep 17 00:00:00 2001 From: Quanzheng Long Date: Tue, 15 Sep 2026 17:46:27 -0700 Subject: [PATCH 6/8] Make async Step input snapshots opt in --- docs/content/production/server-operations.mdx | 9 ++ docs/design/plan/design-web.md | 13 ++- .../current/production/server-operations.mdx | 8 ++ protos/README.md | 4 +- server/config/attribute_store_test.go | 13 +++ server/config/config.go | 5 + server/config/config_template.yaml | 1 + server/config/development.yaml | 1 + server/config/development_cadence.yaml | 1 + server/integ/config.go | 22 ++-- server/integ/web_api_test.go | 103 +++++++++++++++--- .../async_step_input_snapshot_populator.go | 4 +- server/service/interpreter/activityImpl.go | 4 +- 13 files changed, 153 insertions(+), 35 deletions(-) diff --git a/docs/content/production/server-operations.mdx b/docs/content/production/server-operations.mdx index 43a7008af..dfedf7796 100644 --- a/docs/content/production/server-operations.mdx +++ b/docs/content/production/server-operations.mdx @@ -100,6 +100,7 @@ the payload size, not the resulting reference size. blobStore: thresholdInBytes: 100 objectIdLength: 10 + asyncStepInputSnapshotsEnabled: false supportedStorages: - status: active storageId: p1 @@ -160,6 +161,14 @@ in lexical pages, describes the encoded Flow and optional Run, and deletes the whole prefix only after the execution no longer exists. Continue listing with the returned continuation token; no manifest is involved. +Async Step input snapshots are disabled by default. Set +**blobStore.asyncStepInputSnapshotsEnabled** to true only when semantic history +must retain the exact inputs sent to successful ASYNC local Step methods. The +snapshot is independent of the payload offload threshold and is not required +for Flow execution, retry, or recovery. When disabled, ASYNC local completion +events report their input as unavailable. SYNC methods and ASYNC methods that +fall back to a regular Activity continue to obtain input from backend history. + The optional **blobStore.blobCache** caches S3-backed Attribute objects. A non-empty **directory** enables it and must belong to one Server process. Its default budget is 1 GiB. Oversized or rejected objects bypass the cache and diff --git a/docs/design/plan/design-web.md b/docs/design/plan/design-web.md index b53a3fa2e..d3b156ecc 100644 --- a/docs/design/plan/design-web.md +++ b/docs/design/plan/design-web.md @@ -370,11 +370,14 @@ Web 只消费统一的 `input/output/context`,不根据 durability 选择额 | 执行路径 | Input 来源 | Context/options 来源 | |---|---|---| | SYNC regular Activity | ActivityTaskScheduled input | scheduled event metadata 和 input context | -| ASYNC local success | run-scoped async input snapshot | LocalActivity marker 与 async input snapshot | +| ASYNC local success with snapshots enabled | run-scoped async input snapshot | LocalActivity marker 与 async input snapshot | +| ASYNC local success with snapshots disabled | unavailable | LocalActivity marker metadata | | ASYNC local failure + regular fallback | fallback ActivityTaskScheduled input | scheduled event metadata;durability 仍为 ASYNC | | ASYNC local failure + budget exhausted | unavailable | LocalActivity failure marker metadata | -local snapshot 不存在、external storage 未启用或数据已清理时,server 返回 +`blobStore.asyncStepInputSnapshotsEnabled` 默认关闭。只有明确开启后,成功的 ASYNC +local activity 才保存 snapshot。配置关闭、local snapshot 不存在、external storage 未启用 +或数据已清理时,server 返回 `input.unavailable=true`。这只代表 step method input snapshot 不可恢复,不代表其中某个 独立 Value blob 加载失败。Web 不显示 page-level data warning;terminal ASYNC failure 说明 short retry budget 可在 sync fallback 前耗尽,因此没有记录 invocation @@ -474,7 +477,7 @@ message InternalLocalStepActivityFailure { - `InternalLocalActivityInput` 是 workflow provider 只给 local activity 的第二个参数, 用于携带当前 run start time 和 method options; -- `InternalAsyncStepInputSnapshot` 是成功 local activity 写入 external storage 的 protobuf, +- `InternalAsyncStepInputSnapshot` 是启用 snapshot 后由成功 local activity 写入 external storage 的 protobuf, 保存准确发送给 worker 的 request 和 method options; - regular failure 使用单一 `InternalActivityError` detail;local failure 使用单一 `InternalLocalStepActivityFailure` detail,并在其中嵌套 `activity_error`; @@ -730,12 +733,12 @@ Phase 2 使用 `server/integ/`: - Temporal/Cadence × SYNC/ASYNC:WaitFor/Execute 显示调用时 step input、attributes 和 condition results。 - SYNC scheduled input 和 ASYNC snapshot 都映射为完全相同的 `input/output/context` shape。 - regular Activity input proto 保持不变;第二个 activity argument 为 null 时 Temporal/Cadence 都能解码。 -- ASYNC local success 保存 `InternalAsyncStepInputSnapshot`;marker 中不增加完整 request。 +- 开启 `blobStore.asyncStepInputSnapshotsEnabled` 后,ASYNC local success 保存 `InternalAsyncStepInputSnapshot`;marker 中不增加完整 request。 - method options:SYNC 从 scheduled metadata 转换;ASYNC success 从 snapshot 恢复,fallback 从 local failure metadata 恢复。 - channel values、多个 timers、ANY/ALL results 从保存的 worker request 精确恢复。 - local failure fallback 使用 regular Activity history request,且不暴露 local failure。 - sync 和 async regular retry 只返回最近一次 failure;local failure 在 fallback 期间不暴露。 -- local retry budget 耗尽且没有 fallback 时,以及关闭存储或清理后缺失 async snapshot 时,返回 `input.unavailable=true`。 +- local retry budget 耗尽且没有 fallback 时,以及 snapshot 配置关闭、存储关闭或清理后缺失 async snapshot 时,返回 `input.unavailable=true`。 - local filesystem storage 覆盖 string/object blob、run-level cleanup 和安全路径。 Web Go integration: diff --git a/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/production/server-operations.mdx b/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/production/server-operations.mdx index b307c9fc1..ad426a1ce 100644 --- a/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/production/server-operations.mdx +++ b/docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/production/server-operations.mdx @@ -91,6 +91,7 @@ object 会被 offload。可通过 **blobStore.thresholdInBytes** 覆盖默认值 blobStore: thresholdInBytes: 100 objectIdLength: 10 + asyncStepInputSnapshotsEnabled: false supportedStorages: - status: active storageId: p1 @@ -141,6 +142,13 @@ cleanup 保留每个 Flow prefix 开头的 UTC date。它按字典序分页列 的 Flow 和可选 Run,并且只在 execution 已不存在时删除整个 prefix。随后使用返回的 continuation token 继续 list;该过程不使用 manifest。 +ASYNC Step input snapshot 默认关闭。只有当 semantic history 必须保留成功的 ASYNC local +Step method 收到的准确 input 时,才将 +**blobStore.asyncStepInputSnapshotsEnabled** 设置为 true。snapshot 不受 payload offload +threshold 影响,也不是 Flow execution、retry 或 recovery 所必需。关闭后,ASYNC local +completion event 会将 input 标记为 unavailable。SYNC method 和 fallback 到 regular +Activity 的 ASYNC method 仍会从 backend history 获得 input。 + 可选的 **blobStore.blobCache** 缓存 S3 支持的 Attribute object。非空 **directory** 会启用 它,并且只能属于一个 Server process。默认 budget 为 1 GiB。过大或被拒绝的 object 会 绕过 cache,继续访问源 Blob Store。损坏的 entry 会被失效并重新填充;初始化、恢复和 diff --git a/protos/README.md b/protos/README.md index ae319d000..4d36c2569 100644 --- a/protos/README.md +++ b/protos/README.md @@ -302,7 +302,9 @@ boundary. A fallback regular activity carries only its prior attempt count and first-attempt time in `Context`. `InternalAsyncStepInputSnapshot` is the run-scoped request and method-options -record; none of these internal types is returned by `FlowService`. +record. Writing and reading these records requires the opt-in +`blobStore.asyncStepInputSnapshotsEnabled` setting. None of these internal +types is returned by `FlowService`. `LoadBlobs` resolves batches of string/object blob arms. Callers should dedupe by value kind and blob ID before loading. Missing objects and unconfigured store diff --git a/server/config/attribute_store_test.go b/server/config/attribute_store_test.go index 590e3ba98..9c673e583 100644 --- a/server/config/attribute_store_test.go +++ b/server/config/attribute_store_test.go @@ -17,6 +17,7 @@ import ( "time" "github.com/stretchr/testify/require" + "github.com/superdurable/dex/service/common/ptr" ) func TestAttributeStoreConfigDecodeAndDefaults(t *testing.T) { @@ -60,6 +61,7 @@ func TestBlobStoreDefaults(t *testing.T) { cfg, err := NewConfig(path) require.NoError(t, err) require.True(t, cfg.BlobStore.EffectiveEnabled()) + require.False(t, cfg.BlobStore.AsyncStepInputSnapshotsEnabled) require.Equal(t, 100, cfg.BlobStore.EffectiveThresholdInBytes()) require.Equal(t, DefaultBlobStoreObjectIDLength, cfg.BlobStore.EffectiveObjectIDLength()) require.Equal(t, 100*time.Millisecond, cfg.AttributeStore.EffectiveSyncRetryPolicy().InitialInterval) @@ -73,6 +75,17 @@ func TestBlobStoreObjectIDLengthValidation(t *testing.T) { require.ErrorContains(t, err, "objectIdLength") } +func TestBlobStoreAsyncStepInputSnapshotsRequireBlobStore(t *testing.T) { + require.NoError(t, (BlobStoreConfig{}).Validate()) + require.NoError(t, (BlobStoreConfig{AsyncStepInputSnapshotsEnabled: true}).Validate()) + + err := (BlobStoreConfig{ + Enabled: ptr.Any(false), + AsyncStepInputSnapshotsEnabled: true, + }).Validate() + require.ErrorContains(t, err, "asyncStepInputSnapshotsEnabled") +} + func TestExternalStorageConfigKeyIsRejected(t *testing.T) { path := writeTestConfig(t, "externalStorage:\n enabled: true\n") _, err := NewConfig(path) diff --git a/server/config/config.go b/server/config/config.go index 874d4788a..3c0465d1c 100644 --- a/server/config/config.go +++ b/server/config/config.go @@ -208,6 +208,8 @@ type ( BlobStoreConfig struct { // Enabled turns blob offload on or off. Default true when omitted. Enabled *bool `yaml:"enabled"` + // AsyncStepInputSnapshotsEnabled stores successful asynchronous local Step method inputs for semantic history. Default false. Requires Enabled and is immutable after startup. + AsyncStepInputSnapshotsEnabled bool `yaml:"asyncStepInputSnapshotsEnabled"` // LazyLoading turns lazy loading on or off. // When on, server will only send blobIDs to worker for worker APIs(invoke waitFor/execute/RPC) and GetAttribute API. // Worker wil call LoadBlobs API to get the actual values. @@ -747,6 +749,9 @@ func (c BlobStoreConfig) EffectiveObjectIDLength() int { // Validate checks Blob Store identifier and cache settings. func (c BlobStoreConfig) Validate() error { + if c.AsyncStepInputSnapshotsEnabled && !c.EffectiveEnabled() { + return fmt.Errorf("blobStore asyncStepInputSnapshotsEnabled requires blobStore.enabled") + } if c.ObjectIDLength < 0 { return fmt.Errorf("blobStore objectIdLength must not be negative") } diff --git a/server/config/config_template.yaml b/server/config/config_template.yaml index fcb0f62e6..a62c9b69a 100644 --- a/server/config/config_template.yaml +++ b/server/config/config_template.yaml @@ -53,6 +53,7 @@ interpreter: cloudAPIKey: "" blobStore: enabled: true + asyncStepInputSnapshotsEnabled: false thresholdInBytes: 100 objectIdLength: 10 historyRetentionInDays: 3 diff --git a/server/config/development.yaml b/server/config/development.yaml index a8cc519ec..ac031595d 100644 --- a/server/config/development.yaml +++ b/server/config/development.yaml @@ -43,6 +43,7 @@ interpreter: timerType: histogram blobStore: enabled: true + asyncStepInputSnapshotsEnabled: false thresholdInBytes: 100 objectIdLength: 10 historyRetentionInDays: 3 diff --git a/server/config/development_cadence.yaml b/server/config/development_cadence.yaml index bc42f92d9..f4e2ba44b 100644 --- a/server/config/development_cadence.yaml +++ b/server/config/development_cadence.yaml @@ -39,6 +39,7 @@ interpreter: adminSecurityToken: "" blobStore: enabled: true + asyncStepInputSnapshotsEnabled: false thresholdInBytes: 100 objectIdLength: 10 historyRetentionInDays: 3 diff --git a/server/integ/config.go b/server/integ/config.go index f3c0b3a7f..1d0dedf98 100644 --- a/server/integ/config.go +++ b/server/integ/config.go @@ -35,6 +35,7 @@ type DexServiceTestConfig struct { StreamStore config.StreamStoreConfig BlobCacheDirectory string BlobStoreEnabled *bool + AsyncStepInputSnapshotsEnabled bool IncludeRPCInputOutputIntoHistory bool UseTemporalSynchronousUpdateForAllRPCs bool TemporalMetricsHandler client.MetricsHandler @@ -68,7 +69,8 @@ func createTestConfig(t *testing.T, testCfg DexServiceTestConfig) config.Config DefaultHeaders: testCfg.DefaultHeaders, }, BlobStore: config.BlobStoreConfig{ - Enabled: testCfg.BlobStoreEnabled, + Enabled: testCfg.BlobStoreEnabled, + AsyncStepInputSnapshotsEnabled: testCfg.AsyncStepInputSnapshotsEnabled, }, Interpreter: config.Interpreter{ DefaultWorkflowConfig: syncDurabilityConfig(), @@ -88,10 +90,11 @@ func createTestConfig(t *testing.T, testCfg DexServiceTestConfig) config.Config } if testCfg.S3TestThreshold > 0 { blobStoreCfg := config.BlobStoreConfig{ - Enabled: ptr.Any(blobStoreEnabled), - LazyLoading: testCfg.LazyLoading, - ThresholdInBytes: testCfg.S3TestThreshold, - HistoryRetentionInDays: 3, + Enabled: ptr.Any(blobStoreEnabled), + AsyncStepInputSnapshotsEnabled: testCfg.AsyncStepInputSnapshotsEnabled, + LazyLoading: testCfg.LazyLoading, + ThresholdInBytes: testCfg.S3TestThreshold, + HistoryRetentionInDays: 3, BlobCache: config.BlobCacheConfig{ Directory: testCfg.BlobCacheDirectory, }, @@ -116,10 +119,11 @@ func createTestConfig(t *testing.T, testCfg DexServiceTestConfig) config.Config threshold = config.DefaultBlobStoreThresholdInBytes } cfg.BlobStore = config.BlobStoreConfig{ - Enabled: ptr.Any(blobStoreEnabled), - LazyLoading: testCfg.LazyLoading, - ThresholdInBytes: threshold, - HistoryRetentionInDays: 3, + Enabled: ptr.Any(blobStoreEnabled), + AsyncStepInputSnapshotsEnabled: testCfg.AsyncStepInputSnapshotsEnabled, + LazyLoading: testCfg.LazyLoading, + ThresholdInBytes: threshold, + HistoryRetentionInDays: 3, SupportedStorages: []config.BlobStoreConfigEntry{{ Status: config.StorageStatusActive, StorageId: "local-store-id", diff --git a/server/integ/web_api_test.go b/server/integ/web_api_test.go index 23a4c244f..bcee00d2f 100644 --- a/server/integ/web_api_test.go +++ b/server/integ/web_api_test.go @@ -29,6 +29,7 @@ import ( "github.com/superdurable/dex/integ/workflow/signal" "github.com/superdurable/dex/integ/workflow/wf_state_api_fail" "github.com/superdurable/dex/service" + "github.com/superdurable/dex/service/common/blobstore" "github.com/superdurable/dex/service/common/ptr" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -86,6 +87,9 @@ func testWebAPI(t *testing.T, backendType service.BackendType) { t.Run("async-local-fallback", func(t *testing.T) { testWebAsyncLocalFallback(t, backendType) }) + t.Run("async-step-input-snapshots-disabled-by-default", func(t *testing.T) { + testWebAsyncStepInputSnapshotsDisabledByDefault(t, backendType) + }) t.Run("time-travel-snapshot-origin", func(t *testing.T) { testWebTimeTravelSnapshotOrigin(t, backendType) }) @@ -131,8 +135,9 @@ func testWebTimeTravelSnapshotOrigin(t *testing.T, backendType service.BackendTy conditionType: "all", }) runtime := startDexService(t, DexServiceTestConfig{ - BackendType: backendType, - LocalBlobDirectory: t.TempDir(), + BackendType: backendType, + LocalBlobDirectory: t.TempDir(), + AsyncStepInputSnapshotsEnabled: true, }) ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) defer cancel() @@ -954,13 +959,74 @@ func testWebStepInputWithoutStorage( require.Equal(t, expectedUnavailable, executeInput.GetUnavailable()) } +func testWebAsyncStepInputSnapshotsDisabledByDefault( + t *testing.T, + backendType service.BackendType, +) { + workerTarget := startWorker(t, basic.NewHandler()) + runtime := startDexService(t, DexServiceTestConfig{ + BackendType: backendType, + LocalBlobDirectory: t.TempDir(), + }) + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + flowID := "web-async-snapshots-disabled-" + uuid.NewString() + startResponse, err := runtime.FlowClient.StartFlow(ctx, &dexpb.StartFlowRequest{ + RequestId: newRequestID(), + FlowId: flowID, + FlowType: basic.FlowType, + FlowTimeoutSeconds: 20, + StartStepType: basic.Step1, + StepInput: stringValue("input"), + FlowStartOptions: &dexpb.FlowStartOptions{FlowConfigOverride: &dexpb.FlowConfig{ + StepDurability: ptr.Any(dexpb.StepDurability_STEP_DURABILITY_ASYNC), + WorkerTarget: workerTarget, + }}, + }) + require.NoError(t, err) + _, err = runtime.FlowClient.WaitForFlow(ctx, &dexpb.WaitForFlowRequest{FlowId: flowID}) + require.NoError(t, err) + + events, _ := getAllWebHistoryEvents(t, ctx, runtime.FlowClient, flowID, startResponse.GetRunId()) + waitForEvent := firstStepEvent(events) + executeEvent := firstExecuteEvent(events) + require.NotNil(t, waitForEvent) + require.NotNil(t, executeEvent) + require.True(t, waitForEvent.GetInput().GetUnavailable()) + require.True(t, executeEvent.GetInput().GetUnavailable()) + + description, err := runtime.UnifiedClient.DescribeWorkflowExecution( + ctx, + flowID, + startResponse.GetRunId(), + nil, + ) + require.NoError(t, err) + for _, method := range []string{ + blobstore.StepEventInputMethodWaitFor, + blobstore.StepEventInputMethodExecute, + } { + _, found, readErr := runtime.BlobStore.ReadStepEventInput( + ctx, + description.StartTime, + flowID, + startResponse.GetRunId(), + waitForEvent.GetContext().GetStepExecutionId(), + method, + ) + require.NoError(t, readErr) + require.False(t, found) + } +} + func testWebParallelAttributeSnapshots(t *testing.T, backendType service.BackendType) { handler := newWebParallelSnapshotHandler() workerTarget := startWorker(t, handler) runtime := startDexService(t, DexServiceTestConfig{ - BackendType: backendType, - LocalBlobDirectory: t.TempDir(), - LocalBlobThreshold: 10, + BackendType: backendType, + LocalBlobDirectory: t.TempDir(), + LocalBlobThreshold: 10, + AsyncStepInputSnapshotsEnabled: true, }) ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() @@ -1148,10 +1214,11 @@ func testWebConditionResults( flowType := fmt.Sprintf("web-step-input-%s-%s", durability, conditionType) workerTarget := startWorker(t, &webStepInputHandler{flowType: flowType, conditionType: conditionType}) runtime := startDexService(t, DexServiceTestConfig{ - BackendType: backendType, - LazyLoading: ptr.Any(true), - LocalBlobDirectory: t.TempDir(), - LocalBlobThreshold: 10, + BackendType: backendType, + LazyLoading: ptr.Any(true), + LocalBlobDirectory: t.TempDir(), + LocalBlobThreshold: 10, + AsyncStepInputSnapshotsEnabled: true, }) ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() @@ -1376,10 +1443,11 @@ func testWebHistoryAndSummary( workerTarget := startWorker(t, basic.NewHandler()) blobDirectory := t.TempDir() runtime := startDexService(t, DexServiceTestConfig{ - BackendType: backendType, - LazyLoading: ptr.Any(lazyLoading), - LocalBlobDirectory: blobDirectory, - LocalBlobThreshold: 10, + BackendType: backendType, + LazyLoading: ptr.Any(lazyLoading), + LocalBlobDirectory: blobDirectory, + LocalBlobThreshold: 10, + AsyncStepInputSnapshotsEnabled: true, }) ctx, cancel := context.WithTimeout(context.Background(), 90*time.Second) defer cancel() @@ -1636,10 +1704,11 @@ func testWebHistoryAndSummary( func testWebCurrentState(t *testing.T, backendType service.BackendType, lazyLoading bool) { workerTarget := startWorker(t, signal.NewHandler()) runtime := startDexService(t, DexServiceTestConfig{ - BackendType: backendType, - LazyLoading: ptr.Any(lazyLoading), - LocalBlobDirectory: t.TempDir(), - LocalBlobThreshold: 10, + BackendType: backendType, + LazyLoading: ptr.Any(lazyLoading), + LocalBlobDirectory: t.TempDir(), + LocalBlobThreshold: 10, + AsyncStepInputSnapshotsEnabled: true, }) ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) defer cancel() diff --git a/server/service/client/history/async_step_input_snapshot_populator.go b/server/service/client/history/async_step_input_snapshot_populator.go index 825e1f438..250eff143 100644 --- a/server/service/client/history/async_step_input_snapshot_populator.go +++ b/server/service/client/history/async_step_input_snapshot_populator.go @@ -44,7 +44,7 @@ func NewAsyncStepInputSnapshotPopulator( if cfg == nil || client == nil { panic("async step input snapshot populator requires config and client") } - if cfg.EffectiveEnabled() && store == nil { + if cfg.AsyncStepInputSnapshotsEnabled && cfg.EffectiveEnabled() && store == nil { panic("async step input snapshot populator requires a blob store when enabled") } return &AsyncStepInputSnapshotPopulator{ @@ -66,7 +66,7 @@ func (p *AsyncStepInputSnapshotPopulator) Populate( if !hasMissingStepEventInput(events) { return nil } - if !p.cfg.EffectiveEnabled() { + if !p.cfg.AsyncStepInputSnapshotsEnabled || !p.cfg.EffectiveEnabled() { markMissingStepEventInputsUnavailable(events) return nil } diff --git a/server/service/interpreter/activityImpl.go b/server/service/interpreter/activityImpl.go index 8c8f3950d..66f3487ea 100644 --- a/server/service/interpreter/activityImpl.go +++ b/server/service/interpreter/activityImpl.go @@ -699,7 +699,9 @@ func (a *Activities) persistStepEventInput( method string, input *dexpb.InternalAsyncStepInputSnapshot, ) error { - if !activityInfo.IsLocalActivity || !a.cfg.BlobStore.EffectiveEnabled() { + if !activityInfo.IsLocalActivity || + !a.cfg.BlobStore.AsyncStepInputSnapshotsEnabled || + !a.cfg.BlobStore.EffectiveEnabled() { return nil } if stepExecutionID == "" { From 6cc16ea5ff726128e7af75f7a4068202bc2985b6 Mon Sep 17 00:00:00 2001 From: Quanzheng Long Date: Tue, 15 Sep 2026 21:02:12 -0700 Subject: [PATCH 7/8] Clarify unavailable Step input snapshots in Web --- docs/design/plan/design-web.md | 3 ++- web/app/flows/details/EventDetails.test.tsx | 21 +++++++++++++++++++-- web/app/flows/details/EventDetails.tsx | 2 +- web/lib/unavailable.ts | 4 ++-- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/docs/design/plan/design-web.md b/docs/design/plan/design-web.md index d3b156ecc..9b2de1cac 100644 --- a/docs/design/plan/design-web.md +++ b/docs/design/plan/design-web.md @@ -379,7 +379,8 @@ Web 只消费统一的 `input/output/context`,不根据 durability 选择额 local activity 才保存 snapshot。配置关闭、local snapshot 不存在、external storage 未启用 或数据已清理时,server 返回 `input.unavailable=true`。这只代表 step method input snapshot 不可恢复,不代表其中某个 -独立 Value blob 加载失败。Web 不显示 page-level data warning;terminal ASYNC failure +独立 Value blob 加载失败。Web 将它显示为整个 step method input snapshot unavailable, +并明确区分单个 Value blob load failure。Web 不显示 page-level data warning;terminal ASYNC failure 说明 short retry budget 可在 sync fallback 前耗尽,因此没有记录 invocation input snapshot,并引导用户沿 Timeline source link 回看调度来源。 diff --git a/web/app/flows/details/EventDetails.test.tsx b/web/app/flows/details/EventDetails.test.tsx index 4b9ff365f..46f0623fd 100644 --- a/web/app/flows/details/EventDetails.test.tsx +++ b/web/app/flows/details/EventDetails.test.tsx @@ -11,7 +11,10 @@ import { MemoryRouter } from 'react-router-dom'; import { describe, expect, it } from 'vitest'; import { PreferencesProvider } from '@/app/providers'; import type { FlowHistoryEvent } from '@/lib/types'; -import { ASYNC_STEP_INPUT_SNAPSHOT_NOT_RECORDED } from '@/lib/unavailable'; +import { + ASYNC_STEP_INPUT_SNAPSHOT_NOT_RECORDED, + STEP_INPUT_SNAPSHOT_NOT_RETAINED, +} from '@/lib/unavailable'; import { eventTitle, eventTypeLabel, SemanticEventDetails } from './EventDetails'; function executeEvent(durability: number): FlowHistoryEvent { @@ -212,14 +215,28 @@ describe('selected step event details', () => { event.payload.output = { failure: { attempt: 1, backendError: 'Unavailable' } }; const markup = renderDetails(event); - expect(markup).toContain('Invocation inputs were not recorded'); + expect(markup).toContain('Step method input snapshot unavailable'); expect(markup).toContain(ASYNC_STEP_INPUT_SNAPSHOT_NOT_RECORDED); + expect(markup).toContain('does not indicate an individual Value blob load failure'); expect(markup).toContain('Step input, attributes, condition results, and step locals are absent'); expect(markup).toContain('Follow its source arrow in Timeline'); expect(markup).not.toContain('Step event input unavailable'); expect(markup).not.toContain('Value blob unavailable'); }); + it('distinguishes an unavailable input snapshot from an unavailable Value blob', () => { + const event = executeEvent(2); + event.payload.input = { unavailable: true }; + const markup = renderDetails(event); + + expect(markup).toContain('Step method input snapshot unavailable'); + expect(markup).toContain(STEP_INPUT_SNAPSHOT_NOT_RETAINED); + expect(markup).toContain('full invocation input snapshot'); + expect(markup).toContain('does not indicate an individual Value blob load failure'); + expect(markup).not.toContain(ASYNC_STEP_INPUT_SNAPSHOT_NOT_RECORDED); + expect(markup).not.toContain('Value blob unavailable'); + }); + it('derives Execute failure and locking options from the source step decision', () => { const event = executeEvent(1); const source: FlowHistoryEvent = { diff --git a/web/app/flows/details/EventDetails.tsx b/web/app/flows/details/EventDetails.tsx index 0bcfb0009..3290fa70f 100644 --- a/web/app/flows/details/EventDetails.tsx +++ b/web/app/flows/details/EventDetails.tsx @@ -915,7 +915,7 @@ function StepMethodDetails({ {input.unavailable === true ? (
- Invocation inputs were not recorded + Step method input snapshot unavailable

{isAsyncTerminalFailure ? ASYNC_STEP_INPUT_SNAPSHOT_NOT_RECORDED diff --git a/web/lib/unavailable.ts b/web/lib/unavailable.ts index d4c3297b6..d80dfa330 100644 --- a/web/lib/unavailable.ts +++ b/web/lib/unavailable.ts @@ -8,6 +8,6 @@ export const VALUE_BLOB_UNAVAILABLE = 'Value blob unavailable'; export const ASYNC_STEP_INPUT_SNAPSHOT_NOT_RECORDED = - 'Async Step methods that exhaust a short retry policy before sync fallback do not record invocation inputs.'; + 'This ASYNC Step method exhausted its short retry policy before sync fallback, so its full invocation input snapshot was not recorded. This does not indicate an individual Value blob load failure.'; export const STEP_INPUT_SNAPSHOT_NOT_RETAINED = - 'The invocation input snapshot was not recorded or is no longer retained.'; + 'The full invocation input snapshot was not recorded or is no longer retained. This does not indicate an individual Value blob load failure.'; From 1387004e7a61ec6fcea7341d742ff48a4ef4032b Mon Sep 17 00:00:00 2001 From: Quanzheng Long Date: Tue, 15 Sep 2026 21:12:03 -0700 Subject: [PATCH 8/8] Explain disabled async input snapshots in Web --- docs/design/plan/design-web.md | 3 ++- web/app/flows/details/EventDetails.test.tsx | 7 +++++-- web/app/flows/details/EventDetails.tsx | 4 ++-- web/lib/unavailable.ts | 4 ++-- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/docs/design/plan/design-web.md b/docs/design/plan/design-web.md index 9b2de1cac..9212cc3b8 100644 --- a/docs/design/plan/design-web.md +++ b/docs/design/plan/design-web.md @@ -380,7 +380,8 @@ local activity 才保存 snapshot。配置关闭、local snapshot 不存在、ex 或数据已清理时,server 返回 `input.unavailable=true`。这只代表 step method input snapshot 不可恢复,不代表其中某个 独立 Value blob 加载失败。Web 将它显示为整个 step method input snapshot unavailable, -并明确区分单个 Value blob load failure。Web 不显示 page-level data warning;terminal ASYNC failure +将默认关闭及 `blobStore.asyncStepInputSnapshotsEnabled` 列为首要可能原因,并明确区分 +单个 Value blob load failure。Web 不显示 page-level data warning;terminal ASYNC failure 说明 short retry budget 可在 sync fallback 前耗尽,因此没有记录 invocation input snapshot,并引导用户沿 Timeline source link 回看调度来源。 diff --git a/web/app/flows/details/EventDetails.test.tsx b/web/app/flows/details/EventDetails.test.tsx index 46f0623fd..0982c3bb4 100644 --- a/web/app/flows/details/EventDetails.test.tsx +++ b/web/app/flows/details/EventDetails.test.tsx @@ -13,7 +13,7 @@ import { PreferencesProvider } from '@/app/providers'; import type { FlowHistoryEvent } from '@/lib/types'; import { ASYNC_STEP_INPUT_SNAPSHOT_NOT_RECORDED, - STEP_INPUT_SNAPSHOT_NOT_RETAINED, + STEP_INPUT_SNAPSHOT_UNAVAILABLE, } from '@/lib/unavailable'; import { eventTitle, eventTypeLabel, SemanticEventDetails } from './EventDetails'; @@ -230,7 +230,10 @@ describe('selected step event details', () => { const markup = renderDetails(event); expect(markup).toContain('Step method input snapshot unavailable'); - expect(markup).toContain(STEP_INPUT_SNAPSHOT_NOT_RETAINED); + expect(markup).toContain(STEP_INPUT_SNAPSHOT_UNAVAILABLE); + expect(markup).toContain('ASYNC Step input snapshots are disabled by default'); + expect(markup).toContain('blobStore.asyncStepInputSnapshotsEnabled'); + expect(markup).toContain('Blob Store may be disabled'); expect(markup).toContain('full invocation input snapshot'); expect(markup).toContain('does not indicate an individual Value blob load failure'); expect(markup).not.toContain(ASYNC_STEP_INPUT_SNAPSHOT_NOT_RECORDED); diff --git a/web/app/flows/details/EventDetails.tsx b/web/app/flows/details/EventDetails.tsx index 3290fa70f..41d001547 100644 --- a/web/app/flows/details/EventDetails.tsx +++ b/web/app/flows/details/EventDetails.tsx @@ -18,7 +18,7 @@ import { import type { FlowHistoryEvent } from '@/lib/types'; import { ASYNC_STEP_INPUT_SNAPSHOT_NOT_RECORDED, - STEP_INPUT_SNAPSHOT_NOT_RETAINED, + STEP_INPUT_SNAPSHOT_UNAVAILABLE, VALUE_BLOB_UNAVAILABLE, } from '@/lib/unavailable'; import { @@ -919,7 +919,7 @@ function StepMethodDetails({

{isAsyncTerminalFailure ? ASYNC_STEP_INPUT_SNAPSHOT_NOT_RECORDED - : STEP_INPUT_SNAPSHOT_NOT_RETAINED} + : STEP_INPUT_SNAPSHOT_UNAVAILABLE}

{isAsyncTerminalFailure && (

diff --git a/web/lib/unavailable.ts b/web/lib/unavailable.ts index d80dfa330..0b76a0a8e 100644 --- a/web/lib/unavailable.ts +++ b/web/lib/unavailable.ts @@ -9,5 +9,5 @@ export const VALUE_BLOB_UNAVAILABLE = 'Value blob unavailable'; export const ASYNC_STEP_INPUT_SNAPSHOT_NOT_RECORDED = 'This ASYNC Step method exhausted its short retry policy before sync fallback, so its full invocation input snapshot was not recorded. This does not indicate an individual Value blob load failure.'; -export const STEP_INPUT_SNAPSHOT_NOT_RETAINED = - 'The full invocation input snapshot was not recorded or is no longer retained. This does not indicate an individual Value blob load failure.'; +export const STEP_INPUT_SNAPSHOT_UNAVAILABLE = + 'ASYNC Step input snapshots are disabled by default. The Server may not have enabled blobStore.asyncStepInputSnapshotsEnabled, Blob Store may be disabled, or this snapshot may no longer be retained. The full invocation input snapshot is unavailable; this does not indicate an individual Value blob load failure.';