Cadence Service Releases
Cadence follows semantic versioning and you can find more information about changes between version on the Cadence changelog.
v1.4.5 published on 2026-10-30
Major Releases
v1.4.x
- v1.4.5 [GitHub] published by neil-xie on 2026-10-30
- v1.4.3-prerelease06 [GitHub] published by fimanishi on 2026-10-16
- v1.4.2 [GitHub] published by neil-xie on 2026-10-02
- v1.4.2-prerelease16 [GitHub] published by c-warren on 2026-10-01
- v1.4.1 [GitHub] published by neil-xie on 2026-06-30
- v1.4.0 [GitHub] published by neil-xie on 2026-02-27
v1.3.x
- v1.3.6 [GitHub] published by neil-xie on 2025-10-15
- v1.3.5 [GitHub] published by jakobht on 2025-09-18
- v1.3.4 [GitHub] published by neil-xie on 2025-08-20
- v1.3.3 [GitHub] published by neil-xie on 2025-08-06
- v1.3.2 published by neil-xie on 2025-07-03
- v1.3.1 published by jakobht on 2025-06-11
- v1.3.0 published by neil-xie on 2025-05-14
v1.2.x
- v1.2.19-prerelease07 published by davidporter-id-au on 2025-04-22
- v1.2.19-prerelease06 published by davidporter-id-au on 2025-04-18
- v1.2.18 published by neil-xie on 2025-04-03
- v1.2.17 published by jakobht on 2025-03-05
- v1.2.16 published by neil-xie on 2025-02-19
- v1.2.15 published by jakobht on 2025-01-22
- v1.2.14 published by neil-xie on 2024-11-13
- v1.2.13 published by jakobht on 2024-09-25
- v1.2.12 published by neil-xie on 2024-08-19
- v1.2.11 published by neil-xie on 2024-07-10
- v1.2.10 published by neil-xie on 2024-06-04
- v1.2.9 published by jakobht on 2024-05-01
- v1.2.8 published by neil-xie on 2024-03-26
- v1.2.7 published by neil-xie on 2024-02-09
- v1.2.6 published by neil-xie on 2023-12-14
- v1.2.5 published by sankari165 on 2023-11-02
- v1.2.4 published by neil-xie on 2023-09-27
- v1.2.2 published by sankari165 on 2023-09-19
- v1.2.1 published by davidporter-id-au on 2023-09-19
- v1.2.3 published by Shaddoll on 2023-09-15
v0.24.x
- v0.24.0 published by vytautas-karpavicius on 2022-05-24
v0.22.x
- v0.22.4 published by longquanzheng on 2021-11-11
- v0.22.3 published by longquanzheng on 2021-10-14
- v0.22.2 published by longquanzheng on 2021-10-14
- v0.22.1 published by longquanzheng on 2021-10-08
- v0.22.0 published by Shaddoll on 2021-08-20
v0.21.x
- v0.21.3 published by yycptt on 2021-06-17
- v0.21.0 published by just-at-uber on 2021-05-07
v0.18.x
- v0.18.2 published by longquanzheng on 2021-03-17
- v0.18.1 published by longquanzheng on 2021-03-01
- v0.18.0 published by yycptt on 2021-01-22
v0.16.x
- v0.16.1 published by yux0 on 2021-01-21
- v0.16.0 published by andrewjdawson2016 on 2020-12-11
v0.10.x
v0.9.x
v0.8.x
- v0.8.6 published by yux0 on 2019-08-29
- v0.8.5 published by wxing1292 on 2019-08-27
- v0.8.4 published by longquanzheng on 2019-08-26
- v0.8.3 published by andrewjdawson2016 on 2019-08-15
v0.7.x
- v0.7.3 published by longquanzheng on 2019-08-08
- v0.7.2 published by yux0 on 2019-08-08
- v0.7.1 published by shreyassrivatsan on 2019-08-06
- v0.7.0 published by shreyassrivatsan on 2019-08-05
v0.6.x
- v0.6.1 published by longquanzheng on 2019-07-30
- v0.6.0 published by yux0 on 2019-07-25
v0.5.x
- v0.5.9 published by longquanzheng on 2019-06-17
- v0.5.8 published by longquanzheng on 2019-05-22
- v0.5.7 published by venkat1109 on 2019-05-08
- v0.5.5 published by wxing1292 on 2019-03-12
- v0.5.4 published by wxing1292 on 2019-03-08
- v0.5.3 published by vancexu on 2019-02-23
- v0.5.2 published by samarabbas on 2019-02-20
- v0.5.1 published by longquanzheng on 2019-01-18
- v0.5.0 published by longquanzheng on 2019-01-15
v0.4.x
- v0.4.0 published by samarabbas on 2018-10-23
v0.3.x
- v0.3.15 published by samarabbas on 2018-07-27
- v0.3.14 published by samarabbas on 2018-07-24
- v0.3.13 published by yiminc-zz on 2018-06-11
- v0.3.12 published by meiliang86 on 2018-05-26
- v0.3.11 published by wxing1292 on 2018-04-18
- v0.3.9 published by samarabbas on 2018-03-14
- v0.3.8 published by samarabbas on 2018-03-13
- v0.3.7 published by samarabbas on 2018-03-13
- v0.3.6 published by madhuravi on 2018-01-31
- v0.3.5 published by samarabbas on 2018-01-18
- v0.3.4 published by samarabbas on 2017-12-13
- v0.3.3 published by madhuravi on 2017-12-05
- v0.3.2 published by samarabbas on 2017-10-03
- v0.3.1 published by samarabbas on 2017-08-15
- v0.3.0 published by samarabbas on 2017-08-09
v0.2.x
- v0.2.0 published by samarabbas on 2017-08-09
v0.1.x
- v0.1.1-beta published by venkat1109 on 2017-06-07
Recent release notes
Release v1.4.5 published by neil-xie on 2026-10-30
Upgrade Notes
- Cassandra schema: apply migrations through
v0.55before rollout (current isv0.52in v1.4.2).v0.53adds thesemaphore_infotype andexecutions.semaphore_map,v0.54addsjitter_coefficienttoworkflow_executionandactivity_info, andv0.55addssemaphore_nametotransfer_task. MySQL, PostgreSQL and SQLite schemas are unchanged. Schema updates that fail partway can now be re-run: duplicate DDL statements are logged and skipped (#8598). - If you're on a version older than v1.4.2, deploy v1.4.2 first, since it carries the read filter the tombstone reduction depends on. See Cassandra Tombstone Reduction below.
- Default changes. These are on after upgrade unless you set them explicitly:
history.enableTimerQueueV2andhistory.enableTransferQueueV2now default totrue(#8617).history.timerProcessorCachedQueueReaderModeandhistory.transferProcessorCachedQueueReaderModenow default toenabled(#8565, #8592). In v1.4.2 both defaulted todisabled. Setdisabledorshadowto go back.
FailoverDomainis now only accepted at the destination cluster (#8542). A request is rejected unless every target cluster it names is the cluster that received it. Scripts or tooling that fail a domain over from another cluster must pass--skip_destination_check(CLI, #8540) or setSkipDestinationClusterCheckon the request (#8539). The V2 failover workflows forward the flag (#8541).UpdateDomain-driven failovers are unchanged.- The server now refuses to start if the configured dynamic config client cannot be initialised (#8670, #8619). A syntax error, a missing file, an unreachable config store or a typo in
dynamicconfig.clientused to fall back to the no-op client and silently run on defaults. The no-op client is now used only when dynamic config is not configured, or whendynamicconfig.client: nopis set. Validate your dynamic config before upgrading. - Metrics: the
workflow_execution_history_accessgauge was replaced by theworkflow_query_age_dayshistogram (#8559, #8566). Queue v2 cache metrics lost theirshard_idtag andcached_queue_prefetch_window_span_nswas removed (#8551). - Go module language level is now 1.26.0 with toolchain Go 1.26.9 (#8675). Build environments must provide Go 1.26 or allow toolchain download.
v1.4.3andv1.4.4were tagged by mistake and have been removed. If you already have one of those tags, it is this same commit. v1.4.5 is the release to install.
Major Features
1. Cassandra Tombstone Reduction (#8318)
Cassandra creates a tombstone for every key-value deletion on a map column. Cadence tracks pending activities and pending timers in map columns, so every activity completion and every timer firing created one. Together with the read filter and unset-value work in v1.4.2, this release adds the write path for #8318: batch map deletion writes (#8522).
When enabled, deleting a pending activity or timer entry writes a sentinel value (activitySentinelScheduleID, timerSentinelTimerID) instead of issuing a delete. To keep the collections from filling with sentinels, a transaction that contains deletes will, with probability 1 in N, rewrite the whole pending activity or timer collection and drop the accumulated sentinels. Readers filter sentinels on load, so they are invisible to workflow logic.
This release also exposes Cassandra server warnings, such as tombstone overload on a read, from the persistence layer (#8678). It is groundwork for cleanup workflows that read, check, and skip the delete when a read hit too many tombstones.
Configuration
history.rewriteSampleRate(default0, disabled): N means a roughly 1-in-N chance per transaction with deletes.0keeps the previous delete behaviour.1rewrites every time. The setting is dynamic and acts as the kill switch. A larger N means fewer rewrites, so more sentinels accumulate. Larger collections cost read latency on shard movement or cache eviction, when the whole collection is read from the database.history.rewriteOptimizationBackends(default["cassandra"]): backends the optimization applies to. Only Cassandra needs it. The value is read once at startup, so changing it requires a restart.
Migration Path
- The feature is off by default, and upgrading changes no write behaviour.
- The read filter from v1.4.2 must be running on every History host before you set
history.rewriteSampleRateabove0. Sentinels written without the filter would show up as phantom pending activities and timers and break workflow executions. - After enabling, do not roll back to a build older than v1.4.2. Setting
history.rewriteSampleRateback to0returns to real deletes, but sentinels already stored stay in place until the workflow completes (no rewrites run at0), and they still need the read filter.
2. Retry Controls: FailureOptions and Backoff Jitter (#8238)
- FailureOptions can override activity retry behaviour (#8554). A failure can now carry a next retry interval, which replaces the calculated backoff and may exceed the policy's
maximumInterval. A value beyond the expiration interval fails the activity instead of retrying it. AFailureCategoryof Fatal stops further retries. Workers opt in per failure, for example by returning a Go clientCustomErrorbuilt withcadence.WithFailureCategoryandcadence.WithNextRetryDelayin client versions that include them. - Proportional jitter on retry backoff (#8583, #8604, #8605).
RetryPolicyhas a newjitterCoefficient. Each activity or workflow retry interval is scaled by a random factor in(1 - jitterCoefficient, 1], applied after themaximumIntervalcap, so the maximum remains an upper bound. The value must be between 0 and 1. The default0means no jitter. Values up to0.2are recommended, since1allows a near-immediate retry. The coefficient is stored in workflow and activity mutable state and needs Cassandra schemav0.54. Rolling back is safe: older servers ignore the field and retry without jitter.
3. Queue v2 and Cached Queue Reader Enabled by Default (#7953, #8432)
History queue v2 is now the default for timer and transfer queues (#8617), and the cached queue reader introduced in v1.4.2 now defaults to enabled for both (#8565, #8592). The reader serves GetHistoryTasks from an in-memory per-shard cache instead of the database. In v1.4.2 the expected effect for timer tasks was about a 90% reduction in GetHistoryTasks requests.
Migration Path
- The defaults changed, not the code paths. To keep the previous behaviour set
history.enableTimerQueueV2andhistory.enableTransferQueueV2tofalse, and the twoCachedQueueReaderModesettings todisabled. shadowstill runs the cache alongside database reads without serving from it, which is a lower-risk way to compare before committing.
Notable Bug Fixes & Enhancements
- New cluster-redirection policies
selected-apis-forwarding-v3andall-domain-apis-forwarding-v3forwardStartWorkflowExecutionAsyncandSignalWithStartWorkflowExecutionAsyncto the active cluster before they are enqueued. The existing policy names and their behaviour are unchanged, so adopting v3 is opt-in (#8591, #8590). - Continue-as-new now inherits the current run's
ActiveClusterSelectionPolicy. Previously, in an active-active domain whose default cluster differed from the run's cluster, the new run was built with the wrong failover version and the transaction failed withDomainNotActiveError(#8555). - A child start that finds a run with the same request ID now checks which cluster closed that run. If another cluster closed it, the start fails with
WorkflowExecutionAlreadyStartedErrorinstead of adopting the run (#8644). - Reset-and-reapply on a closed workflow now first checks for signals that have not yet been applied, and only resets when there are some (#8596).
- Decision heartbeating no longer leaves a timer-fired event behind when the timer was cancelled in the same decision and the buffered event removal left no buffered events to flush (#8595).
task_list_kindis now kept when the full pending-activity map is rewritten in Cassandra, so activities no longer lose their sticky task list kind (#8626).- The global ratelimiter never limits a host below its local fallback limit (
target / num-hosts). Before, some domains saw rejections at 30-60% of their configured RPS during bursts concentrated on a few frontend hosts (#8538). - RPC peer choosers for History and Matching are now refreshed every 30 seconds, not only on membership change events, so connections to hosts that died without a membership event are dropped (#8594).
- The shard distributor spectator now stops with the service instead of leaking and flooding logs with "Failed to create stream" messages on shutdown (#8603).
- Suppressed timer metrics are no longer registered. With
histograms.default: histogram, timer series used to still appear in Prometheus with zero-valued_bucket,_countand_sum(#8667). - The development TLS certificate (
config/credentials/keytest.crt) now has subject alternative names, so standard TLS verification works against./cadence-server --zone tls(#8657).
Observability
- New open-source Grafana dashboards, intended to replace the existing ones over time. The local docker-compose setups now use histogram timer metrics (#8558, #8578). Instructions for importing them into Cloud Monitoring (#8599).
workflow_query_age_dayshistogram, tagged by domain andworkflow_close_status, records how old closed workflows are when queried throughGetWorkflowExecutionHistoryandDescribeWorkflowExecution. It helps tune domain retention (#8559, #8566).
CLI and Setup
cadence domain failover --skip_destination_check(#8540).cadence admin config updateaccepts a JSON file as input,--valueJSON parses correctly, andcadence admin config listtakes an optional--name(#8627, #8608).cadence-serverhas an auto-setup option that applies the latest schema and creates a default domain on start. The auto-setup docker image uses it instead of shell scripts, and a SQLite auto-setup image is available (#8437, #8569).
Full Changelog: https://github.com/cadence-workflow/cadence/compare/v1.4.2...v1.4.5
Release v1.4.3-prerelease06 published by fimanishi on 2026-10-16
Schema Upgrades
- Cassandra: from 0.54 to 0.55
What's Changed
- feat(persistence): create token rows on first grant instead of seeding by @YaweiZhang-930 in https://github.com/cadence-workflow/cadence/pull/8618
- fix: Gracefully handle partially applied Schema Updates by @natemort in https://github.com/cadence-workflow/cadence/pull/8598
- fix(cli): Update admin config update command to support json file input by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/8627
- fix(cassandra): add missing task_list_kind to resetActivityInfoMap by @fimanishi in https://github.com/cadence-workflow/cadence/pull/8626
- feat(history): record token acquire and grant events in mutable state and replay them by @YaweiZhang-930 in https://github.com/cadence-workflow/cadence/pull/8612
- feat(domain): only accept FailoverDomain at the destination cluster by @c-warren in https://github.com/cadence-workflow/cadence/pull/8542
- feat(idl-update): add memo and searchAttributes to ScheduleListEntry by @abhishekj720 in https://github.com/cadence-workflow/cadence/pull/8616
- feat(persistence): add AsyncWorkflowQueueManager contract and unimplemented store by @c-warren in https://github.com/cadence-workflow/cadence/pull/8629
- refactor(matching): rename AddSemaphoreTask RPC to AcquireSemaphore by @YaweiZhang-930 in https://github.com/cadence-workflow/cadence/pull/8635
- fix(dynamicconfig): accept the int default in config store GetIntValue by @bhargavikvmpl-2001 in https://github.com/cadence-workflow/cadence/pull/8625
- feat(history): handle the token acquire decision by @YaweiZhang-930 in https://github.com/cadence-workflow/cadence/pull/8614
- chore: add AndreasHolt to CODEOWNERS by @AndreasHolt in https://github.com/cadence-workflow/cadence/pull/8636
- docs(configstore): Add a doc showing how to use CLI to manage dynamicconfig by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/8640
- feat: batch map deletion write by @fimanishi in https://github.com/cadence-workflow/cadence/pull/8522
- feat(persistence): wrap AsyncWorkflowQueueManager with error injection, rate limiting and metrics by @c-warren in https://github.com/cadence-workflow/cadence/pull/8630
- feat(schema): add sem name to the transfer_task Cassandra type by @YaweiZhang-930 in https://github.com/cadence-workflow/cadence/pull/8645
- feat(matching): wire tokenw persistence into the matching engine so token buckets can load by @YaweiZhang-930 in https://github.com/cadence-workflow/cadence/pull/8642
- fix(history): check which cluster closed a child run before adopting it by @fimanishi in https://github.com/cadence-workflow/cadence/pull/8644
New Contributors
- @bhargavikvmpl-2001 made their first contribution in https://github.com/cadence-workflow/cadence/pull/8625
Full Changelog: https://github.com/cadence-workflow/cadence/compare/v1.4.3-prerelease05...v1.4.3-prerelease06
Release v1.4.2 published by neil-xie on 2026-10-02
Upgrade Notes
- Cassandra schema: apply migrations through
v0.52before rollout. This release adds FailureOptions columns onactivity_info(v0.48), history task DLQ tables (v0.49), and the newsemaphore_metadata/semaphore_tokens/semaphore_taskstables (v0.50–v0.52). - PostgreSQL schema: apply cadence
v0.8and visibilityv0.9. - Prometheus metrics: several rollup series were renamed (they now end in
_rollup) so they no longer share a name with a different label set. See Prometheus Metric Label Consistency below. - Go module language level is now 1.25.0 and the repository pins toolchain Go 1.25.14. Build environments must provide Go 1.25 or allow toolchain download.
Major Features
1. Cached Queue Reader (#7953, #8432)
Task processing is one of the most performance-critical parts of Cadence. Timer task reads are a large share of Cassandra traffic, and many of those reads repeat data the processor already received in a notification.
This release introduces CachedQueueReader, an in-memory per-shard cache that serves GetHistoryTasks from that notification instead of the database. For timer tasks, the expected effect is about a 90% reduction in GetHistoryTasks requests, about a 13% reduction in total Cassandra persistence requests, and about a 15% reduction in Cassandra CPU utilization.
Timer and transfer queues can keep recently created tasks in that cache. The caches are configured with history.timerProcessorCachedQueueReaderMode and history.transferProcessorCachedQueueReaderMode.
Migration Path
- Both caches default to
disabledin this release. Set the mode toshadoworenabledto opt in. No change is required to keep the previous read path.
2. Unified Schema Management
Cadence is introducing a unified, persistence-native framework for database setup, schema updates, and schema verification. Previously, operators used backend-specific schema commands and deployment scripts; this work moves the common lifecycle into the server’s persistence layer so a single configuration-driven workflow can manage every configured store. The new path understands separate default and visibility databases, multiple configured connections, and advanced-visibility stores, while existing schema CLI tools remain supported.
cadence-server update-schema
A new command creates missing databases/keyspaces and applies every pending versioned migration up to the latest schema bundled in that binary (#8414, #8496):
Before updating your server deployments, grab a binary from the new release and run the following command:
cadence-server update-schema
It’s recommended to run this via the published docker container, using all the same environment variables or configuration as your standard deployment.
This is safe to run while the previous version is running. Apply the schema update first: an older server can keep running on the new schema, and rolling back the binary does not roll the schema back.
It connects to each configured store, creates it when missing, initializes schema-version bookkeeping, sorts pending migrations by store and version, and applies them in order. It supports Cassandra, MySQL, PostgreSQL, SQLite, Elasticsearch, and OpenSearch. Pinot schema management is not included in this release.
Elasticsearch and OpenSearch do not use Cadence's version table. Their setup checks that the visibility index exists and adds mappings from the latest bundled template when needed. The configured index name must begin with cadence-visibility so it matches the template filter.
Startup Verification
Schema verification now delegates to each persistence backend and checks every configured default, visibility, and advanced-visibility store (#8445). It verifies that the store exists, schema versioning is initialized where applicable, and the installed version is at least the latest version bundled with the server.
The new verification path runs during server startup. By default, failures are logged as warnings and the existing Cassandra/SQL compatibility checks still determine whether startup may proceed. Setting dynamic config system.enforceSchemaVerificationV2=true makes any new verification failure block startup. This enforcement is disabled by default for a gradual rollout.
Migration Path
update-schemais opt-in in this release; existing schema CLI tools are unchanged and remain supported.- Apply migrations before deploying server processes. An older server can keep running on the new schema, but rolling back the binary does not roll the schema back.
3. Prometheus Metric Label Consistency (#7844)
Prometheus drops a metric if the same name is registered with different label keys. Persistence and Cadence request/latency/error series were emitted that way, so some scopes never appeared.
Fixes in this release:
- Persistence rollups were renamed to
persistence_requests_rollup,persistence_latency_rollup, andpersistence_latency_ns_rollup. Direct persistence series retain their existing names and now consistently include labels such asis_retryandtask_category="none"(#8064). persistence_response_payload_size,persistence_response_row_size, andpersistence_empty_responsenow usetask_category="none"and no longer carry adomainlabel (#8338).- Per-task-list Cadence rollups were renamed to
cadence_requests_rollup,cadence_errors_rollup,cadence_latency_rollup,cadence_latency_ns_rollup, and correspondingcadence_errors_*_rollupnames. Frontend task-list errors no longer leak atasklistlabel onto basecadence_errors*, and worker archiver latency usesdomain="-1"for label consistency (#8270).
Migration Path
- Point dashboards and alerts at the new
*_rollupnames. During a rolling upgrade, old processes emit aggregate series under the old base names while new processes emit the renamed rollups. persistence_response_payload_size,persistence_response_row_size, andpersistence_empty_responseno longer have adomainlabel. Queries that group those series bydomainneed to be updated.
4. Cassandra Partition Size & Tombstone Reduction (#8318)
Cassandra creates a tombstone for every key-value deletion on a map column, and Cadence's pending-activity and pending-timer maps generate one on every activity completion or timer firing — a major source of partition-size and tombstone growth. This release lands the first step toward avoiding those deletes: sentinel-value read filters (activitySentinelScheduleID, timerSentinelTimerID) for the pending activity/timer maps, so a later write path can upsert sentinel values instead of deleting entries outright.
Migration Path
- This change is read-side only and behavior-preserving — no operator action is needed for this release.
- It must be fully deployed before the follow-up batch map-deletion write path ships (tracked separately, not yet merged as of this release), to guarantee backwards compatibility, and should not be rolled back once that write path is deployed and enabled via dynamic config.
Notable Bug Fixes & Enhancements
- Matching task readers and writers now report fatal shutdown through the task-list manager, leaving teardown ownership with the manager and avoiding asynchronous child-triggered
Stopraces (#8347). - Cassandra task writes use
gocql.UnsetValueinstead ofnilfor unset fields, avoiding cell-level tombstones (#8317). - Treat
DBUnavailableErroras transient, preventing a transient QUORUM-unavailable read from being misclassified as missing history and avoiding a SignalWithStart ContinueAsNew path that could orphan the running execution (#8339). - SQL operations with an unexpected affected-row count now return a retryable error instead of
EntityNotExistsError; a row-count mismatch does not necessarily mean the entity is absent (#8332). - Regenerate the activity retry timer on
SyncActivity, preventing an activity retry from being permanently lost when domain failover occurs after the retry is recorded but before its backoff timer fires (#8425). - Schema setup treats a missing schema-version row as version zero so initialization can proceed (#8455).
- Fixed visibility schema version bookkeeping for PostgreSQL and SQLite (#8345), and made
MinCompatibleVersionnon-decreasing across versioned manifests (#8468). - Domain deprecation now fails when any cluster still has active pollers (excluding
cadence-scheduler); forced deprecation skips this check (#8399). Its activities use a 30-second heartbeat timeout so worker interruption is detected before the five-minute activity timeout (#8258). - Ringpop provider bootstrap failure no longer crashes the
DaemonV2process, although membership-resolver bootstrap failures remain fatal (#8398). Ringpop can also start as a one-node cluster when DNS initially returns no hosts (#8366). - The default
admin.HeaderForwardingRulesno longer forwardsgrpc-headers, preventing duplicate compression headers from breaking proxied RPCs. Explicit custom forwarding rules are unchanged (#8380). - Scheduler worker metrics and logs (#8473).
- Feature-complete
cadence schedulecommands (#8297). - Batch
startalways uses v2; the old--v2selector was removed (#8334). - Batch
refreshto refresh workflow tasks matching a query (#8391).
Full Changelog: https://github.com/cadence-workflow/cadence/compare/v1.4.1...v1.4.2
Release v1.4.2-prerelease16 published by c-warren on 2026-10-01
What's Changed
- feat(history): add a notifying ExecutionManager wrapper by @arzonus in https://github.com/cadence-workflow/cadence/pull/8550
- feat(history): notify task processors from an ExecutionManager wrapper by @arzonus in https://github.com/cadence-workflow/cadence/pull/8552
- feat(frontend): replace workflow history access gauge with query age histogram by @vladimir-gavrilenko in https://github.com/cadence-workflow/cadence/pull/8559
- feat(history): default timerProcessorCachedQueueReaderMode to enabled by @arzonus in https://github.com/cadence-workflow/cadence/pull/8565
- feat: Introduce new dashboards by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/8558
- feat(frontend): emit workflow query age histogram from DescribeWorkflowExecution by @vladimir-gavrilenko in https://github.com/cadence-workflow/cadence/pull/8566
- feat(matching): add bucket registry and ownership lifecycle on Matching by @YaweiZhang-930 in https://github.com/cadence-workflow/cadence/pull/8537
- feat(worker): forward SkipDestinationClusterCheck from the V2 failover workflows by @c-warren in https://github.com/cadence-workflow/cadence/pull/8541
- test(mapper): add fuzz tests to thrift matching mappers by @sorena-paydar in https://github.com/cadence-workflow/cadence/pull/8560
- fix(diagnostics): add dedicated root cause for ScheduleToClose timeouts with pollers by @adhityamamallan in https://github.com/cadence-workflow/cadence/pull/8564
- fix(frontend): use SystemLocalDomainName constant instead of hardcoded literal by @Skassim-206 in https://github.com/cadence-workflow/cadence/pull/8574
- feat(history): jitter history task DLQ reprocessing by @c-warren in https://github.com/cadence-workflow/cadence/pull/8491
- fix: fix legends of some panels by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/8578
- feat(history): add mutable state API for token holds by @YaweiZhang-930 in https://github.com/cadence-workflow/cadence/pull/8567
- refactor(history): migrate task DLQ Processor to common.DaemonV2 by @c-warren in https://github.com/cadence-workflow/cadence/pull/8575
- fix(history): resolve domain name before checking HistoryTaskDLQMode by @Skassim-206 in https://github.com/cadence-workflow/cadence/pull/8579
- feat(docker): support SQLite auto-setup image by @jasonewang in https://github.com/cadence-workflow/cadence/pull/8569
- fix(history): repair DLQ processor tests broken by concurrent merges of #8491 and #8575 by @c-warren in https://github.com/cadence-workflow/cadence/pull/8580
- refactor(matching): return wire error types from the token bucket manager by @YaweiZhang-930 in https://github.com/cadence-workflow/cadence/pull/8571
- feat(history): default transferProcessorCachedQueueReaderMode to enabled by @vladimir-gavrilenko in https://github.com/cadence-workflow/cadence/pull/8592
- feat(history): cap concurrent history task DLQ processing per host by @c-warren in https://github.com/cadence-workflow/cadence/pull/8572
New Contributors
- @sorena-paydar made their first contribution in https://github.com/cadence-workflow/cadence/pull/8560
- @Skassim-206 made their first contribution in https://github.com/cadence-workflow/cadence/pull/8574
- @jasonewang made their first contribution in https://github.com/cadence-workflow/cadence/pull/8569
Full Changelog: https://github.com/cadence-workflow/cadence/compare/v1.4.2-prerelease15...v1.4.2-prerelease16
Release v1.4.1 published by neil-xie on 2026-06-30
Migration Notes
- Cassandra schema: transfer task and timer task tables require new columns for domain multi-tenancy task routing. Apply schema migrations before rolling out.
- Histogram metrics: histograms config block must be explicitly set to opt into histogram emission. See Timer to Histogram Metric Migration section above for the full rollout path.
Major Features
1. Cadence Schedules
Cadence Schedules is now generally available. See the blog post and concepts documentation. Introduces a first-class scheduling primitive that replaces hand-rolled cron workflows. The full API surface (Create, Describe, Update, Delete, Pause, Unpause, List, Backfill) is implemented across the type system, proto mappers, Thrift transport, frontend handlers, and CLI. The scheduler runs as a per-domain durable workflow with ContinueAsNew, enforcing configurable overlap policies (SKIP, CONCURRENT, BUFFER, CATCH_UP_ALL), catch-up for missed fire times, concurrency limits, backfill with per-fire override policies, and search attribute propagation to target workflows. A per-domain scheduler worker manager uses membership-based routing and is enabled by default with a per-domain filter.
Migration Path
- The scheduler worker is disabled by default. Operators can enable it per-domain via dynamic config.
- Schedule search attributes must be added to your visibility index. They are included in the default key set automatically.
2. Active-Active Domains
Features
Added MySQL support for Active-Active Cadence Operations Failover workflow now supports passing the set of cluster-attributes that should be failed over
Bug Fixes
It is no longer possible to convert a domain to active-active via the FailoverDomain RPC
3. Domain Multi-Tenancy (in progress)
Extends Cadence's multi-tenancy guarantees below the domain level. Cadence already enforces rate limiting, task prioritization, and fair task scheduling at the domain level to prevent noisy-neighbor interference between customers. However, platform teams that consolidate multiple use cases into a single domain have historically had no isolation between those use cases. This release introduces task-list-level isolation primitives, including task routing, rate limiting, and scheduling priority, so that platform teams can get the same guarantees within a domain that domain-level isolation provides between domains.
Key Capabilities
- Hierarchical weighted round-robin (IWRR) scheduler for fair task scheduling across task lists within a domain
- Task list nice value for priority control between task lists within a domain
- Task list rate limiting applied to both regular and sticky polls, preventing a single task list from starving others in the same domain
- Task list name and kind stored in history and transfer tasks to enable task routing decisions
- History task latency metrics tracked at the task list level for per-task-list observability
Migration Path
- Cassandra schema upgrade required: transfer task and timer task tables gain new columns for task list name and kind. Apply schema migrations before rolling out this version.
Current Limitations
Tasklist-level isolation is currently in active development. Additional controls and enforcement points will be added in subsequent releases.
4. Timer to Histogram Metric Migration
Cadence is migrating from Tally's costly Timer metrics to ExponentialHistogram to reduce infrastructure costs and align with Prometheus and OpenTelemetry standards. The v1.4.1 release enables dual-emission for all timer metrics, alongside new GaugeMigration and CounterMigration frameworks.
Migration Path
Emission behavior is controlled per-metric or globally via the histograms block in your service config YAML. The valid modes are timer, histogram, and both.
histograms:
default: timer # global default: "timer", "histogram", or "both"
names:
task_latency: true # true = emit histogram, false = suppress
persistence_latency: true
If histograms are not configured, or default is not set, behavior is the same as previous releases, only timers are emitted. Histogram emission must be explicitly opted into. Metrics not listed in the migration registry are always emitted regardless of this config. The recommended rollout path is:
- Set default: timer (or leave unset) to preserve existing behavior
- Opt individual metrics into both to validate histogram output alongside existing timers
- Set default: both once you are confident histograms are correct
- Set default: histogram to drop legacy timers when your dashboards and alerts are fully migrated
Current Limitations
Legacy timers will eventually be removed. The histograms config block is transitional and will become validation-only (rejecting explicit timer mode) once the migration is complete.
Performance & Scalability Improvements
- Matching task list manager lookup is now O(1) by name (#7733).
- Rate-limiter token waste and CPU spin under low task rates are fixed, significantly reducing idle CPU usage (#7977).
- History queue processors are notified before shard lock release to reduce task processing latency (#8130).
- Automatic mutable state corruption detection and repair (#7850).
- Worker redundancy is improved (#7840).
- Batcher RPS and concurrency can now be tuned at runtime via signals (#7824).
Notable Bug Fixes
-
Matching
- Fix two separate getTasksPump deadlocks (#7855, #7930)
- Fix rate-limiter token waste and CPU spin under low task rates (#7977)
- Reclassify query-task-not-found as EntityNotExistsError (#7938)
- Add timeout to notifyPartitionConfig during startup (#7833)
- Limit context deadline when calling RecordTaskStarted (#7792)
-
Persistence / History
- Use next_event_id column as source of truth when reading workflow execution from Cassandra (#7738)
- Trim workflow timer tasks on workflow close and deletion (#7941)
- Fix deadlock in workflow reset signal reapplication (#7913)
- Convert replicator panics into errors rather than crashing the process (#8063)
Observability Enhancements
- Add shard-id to persistence error logs (#8017)
- Inject Start/Stop latency measurements in canary shards (#7985)
- Emit correct is_retry tag on retried persistence and client calls (#8049)
- Route PutReplicationTaskToDLQ metrics by domain (#8053)
- Normalize cadence_authorization_latency labels for Prometheus (#8215)
- Normalize cache metric labels for Prometheus (#8120)
CLI Enhancements
- Add concurrency_limit support in CLI (#8028)
- Add operational dynamic config CLI commands: get, update, delete (#8101)
- Add --latest_time support for DecisionCompletedTime reset type (#8151)
Code Quality & Maintenance
- Replace x/exp/maps with standard maps package (#8098)
- Generalize LimiterFactory/Collection with type parameters (#7841)
- Convert task schedulers to use Go generics (#7813)
- Reduce log noise (#7915, #7910, #7903, #8071, #7901, #7991)
Infrastructure
- Add domain audit log support for MySQL and SQLite
- Add support for region-specific S3 access points in archival (#8015)
- Update Docker image to support custom config file (#8155)
- Fix Kafka default protocol version from 0.10.2.0 to 2.1.0 (#7890) — fixes startup crash with Sarama ≥ v1.45 against modern Kafka clusters
- Reject requests that update both replication config and domain data simultaneously (#8252)
Full Changelog: https://github.com/cadence-workflow/cadence/compare/v1.4.0...v1.4.1
Release v1.4.0 published by neil-xie on 2026-02-27
Major Features
1. Active-Active Domains
Cadence domains have been running in active-passive mode for years, which has been limiting for use cases requiring processing in all clusters (regions). Since late 2025, Cadence can process domains in both regions and distribute traffic based on users’ preferences within domains. This change will make your domains more flexible and more efficient due to utilizing resources in all regions.
Key Capabilities
- Introduced ClusterAttribute as a flexible abstraction for defining cluster groupings beyond traditional region-based configurations
- Active Cluster Selection Policy allows workflows to specify which cluster attributes they should run on
Migration Path
Active-active support is designed for backward compatibility:
- All domains will support active-active by default and without breaking existing behavior. While users setting “cluster attributes” while starting their workflows will be able to benefit from active-active processing
- Existing active-passive domains continue to work without changes if leaving “cluster attributes” empty
Current Limitations
This feature is currently implemented for Cassandra and the support for other DBs will come in Q1. We will also release a blog explaining how this improved related use cases, a wiki explaining how to use it and a code lab to help you try out. There is a risk for failover which causes workflows to be stuck if the schedule to start latency plus replication lag is more than 25 mins. We're working on a project to resolve the risk.
2. Replication Improvements
Cadence orchestrates its own replication, which allows us to seamlessly migrate from one DB technology to another, one cloud provider to another etc. The way it was working in the past was that the replication messages would be generated by reading workflow tasks from the database.
Given that replication is a continuous process between Cadence regions, we implemented a cache to keep the replication messages in memory until a replication poll message arrives so we could eliminate the DB calls due to replication. This came with a 99%+ cache hit rate, which almost entirely eliminated the DB calls due to replication, which used to be more than 20% of all DB calls. Another big benefit was for replication latencies; since we can directly serve the messages from memory, our replication latencies dropped from 13s to 2s.
Key Capabilities
- Replication Budget Manager: New cache capacity control mechanism to prevent memory exhaustion during replication bursts
- Improved task fetcher concurrency: Better handling of concurrent replication task fetching with enhanced metrics
- BoundedAckCache optimizations: Generic cache implementation with improved ack handling
3. Shard Distributor Service (in progress)
The Shard Distributor is a new service component that provides dynamic shard assignment and load balancing across matching service instances. This enables better resource utilization, improved scalability, and operational flexibility for large-scale deployments.
Service Components
- Leader Processor: Centralized controller for shard assignment decisions
- Executor Client: Integration point for matching service instances to receive shard assignments
- Spectator Client: Read-only monitoring interface for shard state
- Canary: Health verification and ping protocol for shard ownership validation
Key Capabilities
- Dynamic Shard Assignment
- Dynamic spectator client control with enable/disable support
- Load Balancing
- Drain watching support for graceful shard handoff
- Automatic retry on rebalancing loop failures
- Migration Support: Migration mode for gradual rollout alongside existing static shard assignment
- Integration with Matching Service: The matching service has been refactored to support shard distributor integration:
Configuration
The shard distributor can be enabled via dynamic config:
shard-distributor:
enabled: true
loadBalancingMode: "shadow-mode" # Options: naive, shard-stats, shadow-mode
migrationMode: true # Enable gradual migration
Monitoring
- shard_handover_latency: Time taken for shard ownership transfer
- active_shards_count: Number of active shards per executor
- shard_assignment_conflicts: Concurrent assignment conflicts detected
- executor_heartbeat_status: Executor health and liveness
- ETCD watch event metrics for observability
4. Caller Type-Based Rate Limiting
A new caller type tracking and bypass mechanism has been introduced to allow granular rate limiting control for debugging and mitigation purposes. Key Capabilities:
- Caller Type Header Propagation (#7644, #7653, #7638): Introduced cadence-caller-type header that propagates through service boundaries
- Extracted at service inbound boundaries using middleware
- Available in CLI via header support
- Minimal performance impact (~150-300ns per request)
- Persistence Rate Limiter Bypass (#7656): Dynamic config persistence.rateLimiterBypassCallerTypes allows specific caller types to bypass persistence rate limits
- Frontend Regional Rate Limiter Bypass (#7662): Caller type-based bypass for regional frontend rate limiter to allow priority requests during high load
5. Visibility Enhancements - Cron and Execution Status (#7527)
Added comprehensive cron workflow visibility with new fields in visibility records:
New Fields:
- CronSchedule: Display the cron schedule for workflows
- ExecutionStatus: Show actual execution status (PENDING, STARTED, or close statuses) instead of just CONTINUED_AS_NEW for cron workflows
- ScheduledExecutionTime: Track the actual scheduled execution time for cron workflows
Schema Changes Required: This feature requires database schema upgrades for all persistence stores (Cassandra, MySQL, PostgreSQL, SQLite, Elasticsearch)
CLI Updates:
- New --print_cron flag to display cron-related fields in cadence workflow list
- Shows execution status by default
Performance & Scalability Improvements
-
Database & Persistence
- PostgreSQL timer task pagination (#7621): Improved pagination logic to handle large timer task queries efficiently
- History node deletion (#7484): Configurable page size for history deletion via dynamic config
- Snappy compression for history blobs (#7269): Reduced storage footprint and network transfer for history events
- SQLite fixes (#7469): Resolved database locking issues for local/test deployments
-
Memory & Resource Usage
- ETCD watch optimization (#7578): Removed WithPrevKV() to reduce memory overhead in shard manager
- Reduced allocations in metrics (#7456): Optimized insertReportIntoSizes to minimize GC pressure
- History deletion improvements (#7472): Fixed infinite loop in RangeCompleteHistoryTask when invalid page size provided
Notable Bug Fixes
-
History & Workflow Execution
- Child workflow duplicate events (#7400): Proper handling of duplicate child workflow started events
- Activity scheduled time on reset (#7597): Correctly update not-started activities scheduled time when resetting workflows
- Restart workflow cron scheduling (#7247): Fixed bug where each restart skipped an additional cron scheduled run
- History cleanup timeout handling (#7617): Avoid dangerous timeout conditions in history cleanup process
- Workflow creation leak (#7523): Fixed resource leak during workflow creation in history service
- Signal-with-start cleanup (#7540): Proper handling of signal-with-start in cleanup logic
- Signal handling with DelayStart (#7702): Prevent signals from bypassing DelayStart configuration
-
Cross-Datacenter Replication
- Domain ID usage in replication (#7550): Use domain ID instead of domain name for more reliable replication
- Replication panic logging (#7396): Improved error handling and logging for replication stack panics
- Database consistency error detection (#7573): More accurate detection of DB consistency errors
-
Active-Active Operations
- Race condition in failover (#7587): Fixed race condition during active-active failover
- Query workflow support (#7339): Proper query handling for active-active domains
- StartWorkflow with terminate-if-running (#7361): Correct policy enforcement for active-active workflows
- Auto-forwarding (#7356): Fixed cluster forwarding logic for active-active domains
- Standby task handling (#7423): Prevent premature dropping of standby tasks in active-active scenarios
-
Matching Service
- TaskList stop on shard stop (#7581): Properly stop task lists when stopping shard processor
- TaskListActivitiesPerSecond enforcement (#7575): Correct rate limiting enforcement
- Nil load hints handling (#7551): Added nil pointer checks for load hints
- TaskList partition config invalidation (#7618): Properly invalidate TaskListPartitionConfig on attempted writes to read-only partitions
- Domain not active error handling (#7676): Fixed domain not active error to be non-retryable for matching service in active-active scenarios
- TaskList management with shard distributor (#7682): Properly handle shard processor lifecycle when onboarded to SD
- Task list registry pattern (#7720): Introduced registry for better task list management
-
Persistence & Database
- Host tag reversion (#7675): Reverted addition of host tag to persistence calls due to issues
- History cleanup defaults (#7661): Changed defaults for history cleanup configuration
- History cleanup error classification (#7627): Tightened error classifications for history cleanup operations
- Visibility upsert optimization (#7693): Only upsert search attributes when advanced visibility is enabled
-
CLI
- Rate limiter fix (#7585): Replaced token bucket with standard limiter in CLI for more reliable rate limiting
- Admin CLI config parsing (#7726): Fixed parsing of multiple config values
Observability Enhancements
-
Metrics
- Host tagging for persistence metrics (#7530): Better attribution of persistence operations to specific hosts
- Shard handover latency (#7442, #7614): Track time taken for shard ownership transfers
- Replication task fetcher metrics (#7462): Enhanced visibility into task fetcher performance
- Workflow access tracking (#7331): New metrics to track workflow access patterns
-
Logging
- CallerType and CallerInfo propagation (#7564, #7574, #7588): Context propagation for request tracing
- Improved replication logging (#7584): Better logs for matching and active-active operations
- Cluster redirection logs (#7333): Enhanced logging for cluster redirection handler
- Error classification (#7466): Better categorization of errors in shard distributor
-
Monitoring Tools
- Canary Grafana dashboard (#7464): Documentation for workflow success counter panels
- Dynamic config observability (#7605): Standardized comments for all dynamic configs
CLI Enhancements
- Failover domain command (#7295): New cadence domain failover command for active-active domains
- Cluster attributes in start workflow (#7494): Support --cluster-attributes flag when starting workflows
- Describe workflow improvements (#7461): Show ActiveClusterSelectionPolicy in describe output
- Cluster attributes in domain describe (#7539): Display cluster attributes when describing domains
- Failover history rendering (#7444, #7407): Improved rendering of domain failover history
- Workflow refresh tasks command (#7657): New cadence workflow refresh-tasks command allows non-admin users to refresh workflow tasks
Code Quality & Maintenance
-
Refactoring
- Domain handler refactoring (#7403, #7401, #7395): Multi-phase cleanup and modernization
- History engine test refactoring (#7343, #7342): Improved test structure and maintainability
- Matching engine refactoring (#7593, #7592, #7591, #7547): Replaced callbacks with explicit Registry pattern
- Mapper nil handling (#7434): Comprehensive nil checking improvements across all mappers
- Remove panics in type conversions (#7258): Safer error handling in proto/thrift mappers
- QueueManager/Queue interfaces (#7652): Refactored queue manager and queue interfaces for better maintainability
- Matching load calculation (#7647): Simplified load calculation for shards
- Domain audit filter cleanup (#7725): Removed MaxCreatedTime from DomainAuditLogFilter
-
Testing
- Simulation test improvements (#7303, #7283): Better active-active simulation testing
- Integration tests (#7344): New DescribeCluster integration test
- Conventional commit enforcement (#7278): CI validation of commit message structure
-
Deprecation & Cleanup
- Removed deprecated dynamic configs (#7613): Cleanup of unused configuration properties
- Removed deprecated fields (#7388, #7365, #7357, #7275): Cleanup of legacy active-active fields
- Commented code removal (#7592): Removed obsolete code in matching engine
- ExternalEntityProvider removal (#7292): Removed deprecated active-active provider
-
Infrastructure
- CI improvements (#7649): Added pull request reviewer automation via gitar
- PR template updates (#7596): Added comprehensive reviewers checklist to pull request description
- Issue automation (#7615): GitHub action to standardize issue descriptions and labeling
- Code ownership (#7659): Added natemort and c-warren to CODEOWNERS
-
Code Generation
- Missing codegen (#7663): Fixed missing code generation that had snuck into master
Security & Authorization
- ResetStickyTaskList auth (#7340): Added to non-domain auth API list
- Auth README documentation (#7368): Comprehensive authentication documentation
Infrastructure
- Docker compose for OpenSearch (#7510): Local development support for OpenSearch
- Go toolchain upgrade (#7414): Updated Go toolchain and mockery
- ETCD integration test fixes (#7502): Stabilized ETCD-based tests
- Multi-cluster test scripts (#7327): Moved scripts to proper location
Migration Notes
Schema Upgrades Required
- Visibility Schema v0.10 (Cassandra): Adds ExecutionStatus, CronSchedule, and ScheduledExecutionTime fields
- Visibility Schema v0.8 (MySQL): Adds execution-related fields
- Visibility Schema v0.9 (PostgreSQL): Adds execution-related fields
- Visibility Schema v0.2 (SQLite): Adds execution-related fields
- Elasticsearch Templates: Updated for v6, v7, and OpenSearch v2
- PostgreSQL support for DomainAudit (#7665)
- Cassandra schema updates synced with IDL changes (#7727, #7723)
Dynamic Config Changes
- New config: persistence.rateLimiterBypassCallerTypes - List of caller types to bypass persistence rate limiting
Documentation
- Auth system documentation (#7368)
- Canary monitoring dashboard guide (#7464)
- Domain update and failover documentation (#7382)
- Multi-cluster setup improvements (#7282)
- Contributor guide updates (#7337)
New Contributors
- @eleonoradgr made their first contribution in https://github.com/cadence-workflow/cadence/pull/7312
- @ramazan made their first contribution in https://github.com/cadence-workflow/cadence/pull/7349
- @instamitch made their first contribution in https://github.com/cadence-workflow/cadence/pull/7353
- @AndreasHolt made their first contribution in https://github.com/cadence-workflow/cadence/pull/7354
- @zawadzkidiana made their first contribution in https://github.com/cadence-workflow/cadence/pull/7427
- @joannalauu made their first contribution in https://github.com/cadence-workflow/cadence/pull/7557
- @shuprime made their first contribution in https://github.com/cadence-workflow/cadence/pull/7580
- @Scanf-s made their first contribution in https://github.com/cadence-workflow/cadence/pull/7585
Resources
- https://cadenceworkflow.io/docs/get-started
- CONTRIBUTING.md
- https://cloud-native.slack.com/archives/C09J2FQ7XU3
- https://github.com/uber/cadence/issues
Release v1.3.6 published by neil-xie on 2025-10-15
What's Changed
Added
- Explain difference btw. terminate/cancel by @dkrotx in https://github.com/cadence-workflow/cadence/pull/7239
- New histogram strategy and minimal changes to start emitting it by @Groxx in https://github.com/cadence-workflow/cadence/pull/7240
- Reset simulation - wf reset on different cluster than wf started cluster by @fimanishi in https://github.com/cadence-workflow/cadence/pull/7203
- Add shard distributor canary service by @jakobht in https://github.com/cadence-workflow/cadence/pull/7252
- Add dco.yml by @natemort in https://github.com/cadence-workflow/cadence/pull/7255
- Add support for multiple wildcard queries joined by OR by @neil-xie in https://github.com/cadence-workflow/cadence/pull/7257
- Add log when replication task latency is high by @bowenxia in https://github.com/cadence-workflow/cadence/pull/7254
- Byte size replication cache per shard by @fimanishi in https://github.com/cadence-workflow/cadence/pull/7243
- Test active-active behavior with concurrent SignalWithStart requests by @c-warren in https://github.com/cadence-workflow/cadence/pull/7270
- Add documentation to the simulation tests by @c-warren in https://github.com/cadence-workflow/cadence/pull/7271
Changed
- Regenerate common/log/logger_mock.go using mockgen by @ansidev in https://github.com/cadence-workflow/cadence/pull/7228
- Improve code readability in task_ack_manager getTasks by @fimanishi in https://github.com/cadence-workflow/cadence/pull/7232
- Regenerate mocks in service/worker/archiver using mockgen by @ansidev in https://github.com/cadence-workflow/cadence/pull/7225
- Make metric indexes unique by @Groxx in https://github.com/cadence-workflow/cadence/pull/7237
- Unique types for different kinds of metric indexes by @Groxx in https://github.com/cadence-workflow/cadence/pull/7238
- Regenerate client_mock in service/worker/parentclosepolicy using mockgen by @ansidev in https://github.com/cadence-workflow/cadence/pull/7226
- No longer log redirection information for every frontend request by @c-warren in https://github.com/cadence-workflow/cadence/pull/7253
- Set default active cluster selection policy at Frontend by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7259
- Issue 6759: Regenerate common/archiver/provider/provider_mock.go using mockgen by @ansidev in https://github.com/cadence-workflow/cadence/pull/7266
- Improve conflict resolution for active-active by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7265
- Issue 6759: Regenerate common/blobstore/interface.go using mockgen by @ansidev in https://github.com/cadence-workflow/cadence/pull/7267
- Minor histogram-bucket tweak: end on a power-of-2, not before by @Groxx in https://github.com/cadence-workflow/cadence/pull/7251
Fixed
- Fix appendOrMergeSlice method of virtual queue manager by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7233
- fix(deps): upgrade sarama to v1.46.0 by @ansidev in https://github.com/cadence-workflow/cadence/pull/7222
- [shard-distributor] Fix: forgot to update a mapper by @jakobht in https://github.com/cadence-workflow/cadence/pull/7242
- [active-active] Fix failover version increment logic by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7246
- Fix virtual slice's get task method by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7249
- downgrade sarama to v1.45.2 by @dkrotx in https://github.com/cadence-workflow/cadence/pull/7248
- Upgrade github.com/dgryski/go-farm to fix crashes by @nsrip-dd in https://github.com/cadence-workflow/cadence/pull/7250
- Fix workflow start logic for active-active domains by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7256
- Fix a bug that cause non-default virtual queue to be orphaned by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7263
- Validate matching.getTasksBatchSize to prevent zero values by @abhishekj720 in https://github.com/cadence-workflow/cadence/pull/7264
Removed
- Remove unused method from active cluster manager interface by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7272
New Contributors
- @nsrip-dd made their first contribution in https://github.com/cadence-workflow/cadence/pull/7250
Full Changelog: https://github.com/cadence-workflow/cadence/compare/v1.3.5...v1.3.6
Release v1.3.5 published by jakobht on 2025-09-18
New Features & Major Enhancements
- Shard Management & Distribution:
- We now assign shards to empty executors, so when a new executor joins it will have shards assigned to it (#7175) by @jakobht
- Support for creating ephemeral shards (#7209) by @jakobht
- Remove done ephemeral shards (#7212) by @jakobht
- Integration of removal of ephemeral shards in the executor library (#7216) by @jakobht
- Determinized the shard assignments (#7184) by @jakobht
- Add multi-namespace support to shard distributor executor client (#7236) by @jakobht
- Active-Active:
- Authorization & Security:
- History & Matching:
- Workflow Diagnostics:
- Serialization:
- Add a feature flag for serialization encoding (#7148) by @tubignat
Bug Fixes
- History / Matching:
- Do not generate scheduled task with timestamp in the past (#7070) by @Shaddoll
- Don't attempt to dispatch expired activities (#7204) by @natemort
- Fix standby task processing for history queue v1 (#7144) by @Shaddoll
- Fix bugs for history queue v2 (#7178) by @Shaddoll
- Reset update queue state timer on failure (#7194) by @Shaddoll
- [active-active] Fix lookup workflow by domain id (#7171) by @taylanisikdemir
- Persistence & Visibility:
- Remove version constraint for OpenSearch bulk delete requests (#7163) by @neil-xie
- Remove version constraint for es v6 and v7 bulk delete requests (#7167) by @neil-xie
- Fix write fallback logic when use advanced writing mode but only db is available (#7200) by @neil-xie
- catch scroll node not found exception and start fresh scroll (#7155) by @anuragrai16
- CLI & UI:
- Other Fixes:
Improvements & Refactoring
- Core Internals & Performance:
- Improve handling of unknown isolation groups (#7143) by @natemort
- Validate workflow reset based on requested event type (#7116) by @fimanishi
- Force creating new virtual slice every 5 mins (#7161) by @Shaddoll
- Check peer existence before release peer (#7162) by @neil-xie
- Set a limit on page size for history queue v2 (#7179) by @Shaddoll
- Added shard not found error (#7186) by @jakobht
- Bypass failover drills for active-active domains (#7191) by @c-warren
- Retry standby tasks immediately on failover (#7199) by @Shaddoll
- Improve domain failover for history queue v2 (#7205) by @Shaddoll
- Code Quality & API:
- exposes constructor for Cassandra DB instance tooling use (#7153) by @davidporter-id-au
- makes the option to pass in a GoCQL connection public (#7154) by @davidporter-id-au
- [Wf-Diagnostics] remove workflow retry as a potential diagnostic issue (#7156) by @sankari165
- Fix Best Practice in Rule File (#7152) by @jayne-s
- Refactered the shard reassignment method (#7165) by @jakobht
- refactor unit test cases for ConstructStartWorkflowRequest to reduce code duplication (#7206) by @ansidev
- Refactor data manager interface (#7229) by @ansidev
- Observability (Metrics & Logging):
- Configuration & Defaults:
- Update the default value of history.readNoSQLHistoryTaskFromDataBlob to true (#7173) by @Shaddoll
Tooling, CI, & Operations
- CLI & Admin Tools:
- Local Development & Docker:
- Use a target-arch-compatible (and more up to date) version of dockerize (#7149) by @Groxx
- Add direnv support for local development (AI generated/assisted) (#7188) by @jakobht
- [docker] set matching.enableClientAutoConfig to true in dynamic config (#7193) by @shijiesheng
- Changing to legacy docker image of bitnami (#7219) by @dkrotx
- Observability:
- Add client autoscaler grafana panels (#7177) by @Bueller87
- Testing & CI:
- Fix flaky test for virtual queue (#7145) by @Shaddoll
- Test reapply events active-active logic (#7135) by @c-warren
- Run replication simulation scenarios as part of CI (#7158) by @taylanisikdemir
- Fix thrift decode test flakyness (#7160) by @taylanisikdemir
- Test Mutable State Load() in Active-Active scenarios (#7159) by @c-warren
- Test StartTransaction (#7169) by @c-warren
- Test allocateTimerIDsLocked() (#7172) by @c-warren
- Set up simulation test for history queue v2's pending task alert (#7180) by @Shaddoll
- Set up integration test for pending task alert of history queue v2 (#7196) by @Shaddoll
- Changing one of cli tests to be more explicit (#7211) by @dkrotx
- Fixing flaky-tests in matching (#7213) by @dkrotx
- Changing test to be compatible with urfave3 (#7217) by @dkrotx
Documentation
- Add How-To for Async API setup (#7176) by @taylanisikdemir
- Adding Directives + Using NewBatchFuture for Concurrency Example (#7170) by @jayne-s
New Contributors
- @Bueller87 made their first contribution in https://github.com/cadence-workflow/cadence/pull/7177
- @ins-tril made their first contribution in https://github.com/cadence-workflow/cadence/pull/7183
Full Changelog: https://github.com/cadence-workflow/cadence/compare/v1.3.4...v1.3.5
Release v1.3.4 published by neil-xie on 2025-08-20
What's Changed
Added
- Introduce predicate to virtual slice state to support task filtering by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7091
- Use new IDL package for query consistency level changes by @c-warren in https://github.com/cadence-workflow/cadence/pull/6791
- Introduce feature flag to enable authv2 by @sankari165 in https://github.com/cadence-workflow/cadence/pull/7096
- Add thrift_snappy endoding by @tubignat in https://github.com/cadence-workflow/cadence/pull/7089
- [shard-distributor] Executor metrics by @jakobht in https://github.com/cadence-workflow/cadence/pull/7100
- [active-active] Handle continue-as-new by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7102
- Add helper functions for predicates by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7098
- [shard-distributor] Expose Heartbeat API on the backend by @3vilhamster in https://github.com/cadence-workflow/cadence/pull/7101
- Add query consistency level support to CLI workflow commands by @c-warren in https://github.com/cadence-workflow/cadence/pull/7099
- Grafana Dashboard for Cadence Archival by @vishwa-uber in https://github.com/cadence-workflow/cadence/pull/7104
- Grafana dashboard for History v2 by @vishwa-uber in https://github.com/cadence-workflow/cadence/pull/7106
- Add TrySplitbyPredicate method to virtual slice by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7109
- [shard-distributor] Add metered wrapper around store by @3vilhamster in https://github.com/cadence-workflow/cadence/pull/7110
- [shard-distributor] shard owner by @3vilhamster in https://github.com/cadence-workflow/cadence/pull/7112
- Add always upload artifacts and test fail by @mandyschen in https://github.com/cadence-workflow/cadence/pull/7122
- Add debugs logs for processing new tasks by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7124
- Support building wildcard query by @neil-xie in https://github.com/cadence-workflow/cadence/pull/7105 [active-active] Add a new simulation scenario with queuev2 by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7126
- Track pending task count per domain by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7128
- [active-active] Emit workflow cluster/failoverversion lookup request metrics by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7129
- Add helper methods to virtual queue for split operation by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7130
- Added development setup to the shard distributor so we can do local testing of it by @jakobht in https://github.com/cadence-workflow/cadence/pull/7134
- Log failed scan requests to help debug by @neil-xie in https://github.com/cadence-workflow/cadence/pull/7132
- Scaffold mitigator for history queue v2 by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7133
Changed
- Better lifecycle management in the shard executor library by @jakobht in https://github.com/cadence-workflow/cadence/pull/7095
- [shard-distributor] Refactor storage and provide heartbeat storage API by @3vilhamster in https://github.com/cadence-workflow/cadence/pull/7090
- Support decoding cluster selection policy payload in cli by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7115
- [shard-distributor] AssignShards method fills ownership of the shards by @3vilhamster in https://github.com/cadence-workflow/cadence/pull/7114
- [shard-distributor] Change the configuration name by @3vilhamster in https://github.com/cadence-workflow/cadence/pull/7117
- [shard-distributor] Connect handler to the storage by @3vilhamster in https://github.com/cadence-workflow/cadence/pull/7118
- Use different task retry policy for active and standby tasks in history queuev2 by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7108
- We now use a raw tally scope for the client by @jakobht in https://github.com/cadence-workflow/cadence/pull/7119
- Update merge virtual slices to support merging slices with different predicates by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7120
- [active-active] ListDomains shouldn't fill ActiveClusterName with current cluster by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7137
- [active-active] Switch to queuev2 by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7138
- Update change log for release v1.3.3 by @neil-xie in https://github.com/cadence-workflow/cadence/pull/7139
Fixed
- Fix standby task processing for history queue v1 by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7121
- Make sure that task backlog metric is emitted in each gettaskspump run by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7123
- [active-active] Fix failover version updates during failover by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7125
- Fixed the startup so it does not depend on the fx timeout by @jakobht in https://github.com/cadence-workflow/cadence/pull/7127
- Fix task priority assigner for history queue v2 by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7131
- [active-active] Fix active cluster lookup in request forwarding layer by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7136
Removed
- [shard-distributor] Executor cleanup removes shard ownership information by @3vilhamster in https://github.com/cadence-workflow/cadence/pull/7113
Full Changelog: https://github.com/cadence-workflow/cadence/compare/v1.3.3...v1.3.4
Release v1.3.3 published by neil-xie on 2025-08-06
What's Changed
Added
- Add metrics to queue v2 tracking the number of pending tasks by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7002
- Cluster redirection e2e tests by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7007
- Add CronOverlapPolicy to CQL commands in Update/Create WorkflowExecution by @timl3136 in https://github.com/cadence-workflow/cadence/pull/7010
- Add pull request support for the buildkite to github actions migration by @mandyschen in https://github.com/cadence-workflow/cadence/pull/7009
- Add Ephemeral TaskLists by @natemort in https://github.com/cadence-workflow/cadence/pull/7017
- Add more metrics for history task processing by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7022
- add docker-compose for filestore archiver by @shijiesheng in https://github.com/cadence-workflow/cadence/pull/7032
- Add Integration Tests to Test Cron Overlap Policy and fix missing mapping for CronOverlapPolicy by @timl3136 in https://github.com/cadence-workflow/cadence/pull/7012
- VISIBILITY_ARCHIVAL_STATUS setup for archival filestore by @vishwa-uber in https://github.com/cadence-workflow/cadence/pull/7043
- [active-active] Support CLI operations for active-active domains by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7049
- [shard-distributor] Added proto file for the shard distributor executor API by @jakobht in https://github.com/cadence-workflow/cadence/pull/7057
- [shard-distributor] Add assign shards loop to the leader elected process by @3vilhamster in https://github.com/cadence-workflow/cadence/pull/7056
- [shard-distributor] Added a client interface for the shard distributor executors by @jakobht in https://github.com/cadence-workflow/cadence/pull/7065
- [shard-distributor] Add heartbeat cleanup loop by @3vilhamster in https://github.com/cadence-workflow/cadence/pull/7064
- [shard-distributor] Add metrics for assing loop by @3vilhamster in https://github.com/cadence-workflow/cadence/pull/7066
- Cadence LLM Friendly Rule File by @jayne-s in https://github.com/cadence-workflow/cadence/pull/7051
- Add active-active basic simulation as CI job by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7072
- Active-passive to active-active domain migration support by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7071
- [scripts] Introduce a script that will create release/prerelease by @3vilhamster in https://github.com/cadence-workflow/cadence/pull/6954
- Add cronOverlapPolicy and activeClusterSelectionPolicy to mapping functions in replication and mutable statue builder by @timl3136 in https://github.com/cadence-workflow/cadence/pull/7086
- Created executer client SDK as an fx module by @jakobht in https://github.com/cadence-workflow/cadence/pull/7074
- [authz] Introduce new type of permissions for poll APIs by @sankari165 in https://github.com/cadence-workflow/cadence/pull/7077
- add unit test for not like query in custom search attributes by @shijiesheng in https://github.com/cadence-workflow/cadence/pull/7084
Changed
- [active-active] Update replication simulation by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7003
- [active-active] Update new workflow lookup interface by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7005
- Cancel history tasks when queue is stopped by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7004
- Create CI check jobs in github actions by @mandyschen in https://github.com/cadence-workflow/cadence/pull/6946
- Pause history queue task loading if there are too many pending tasks by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7008
- Implement TaskListStatus.empty and DescribeTaskListReponse.TaskList by @natemort in https://github.com/cadence-workflow/cadence/pull/7016
- [shard-distributor] Rework fx initialization to self register routes in the rpc.Factory by @3vilhamster in https://github.com/cadence-workflow/cadence/pull/7011
- Do not stop root virtual queue by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7019
- minor: use t.fatal in fuzz tests by @Groxx in https://github.com/cadence-workflow/cadence/pull/7020
- [active-active] Cluster redirection for active-active domain requests by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7006
- Use TaskListStatus.Empty to determine if a partition is empty by @natemort in https://github.com/cadence-workflow/cadence/pull/7026
- Update history simulation test and integration tests to use file based dynamic config by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7018
- Replace docker-compose with docker compose by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7029
- Make Frontend warmup duration configurable by @natemort in https://github.com/cadence-workflow/cadence/pull/7038
- Create reset branch only after history checks pass by @fimanishi in https://github.com/cadence-workflow/cadence/pull/7034
- Support setting a TaskListKind on Workflows by @natemort in https://github.com/cadence-workflow/cadence/pull/7037
- [active-active] Handle DomainNotActiveError for active-active domains and some refactoring by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7039
- [history] Cleanup logging by @3vilhamster in https://github.com/cadence-workflow/cadence/pull/7047
- [active-active] Handle active cluster lookup for retired workflows by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7052
- [shard-distributor] Store rework by @3vilhamster in https://github.com/cadence-workflow/cadence/pull/7048
- Sample ES version conflict logs to reduce noise by @neil-xie in https://github.com/cadence-workflow/cadence/pull/7059
- Fail workflow if pending activity limit exceeds limit by @timl3136 in https://github.com/cadence-workflow/cadence/pull/7054
- Use remote timestamp for standby timer tasks by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7062
- [authz] Update access controlled APIs in frontend to include tasklist in auth attributes by @sankari165 in https://github.com/cadence-workflow/cadence/pull/7076
- [domain-deletion]Drop graceful failover markers when domain is deprecated by @gazizayestemir in https://github.com/cadence-workflow/cadence/pull/7075
- upgrade opensearch-go to v4.1.0 and update opensearch client creation and logic by @anuragrai16 in https://github.com/cadence-workflow/cadence/pull/6998
- Enrich async API request processing error logs by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7081
- Downgrade semver version to match with monorepo by @neil-xie in https://github.com/cadence-workflow/cadence/pull/7085
- Increase Activity Rate Limiter Responsiveness by @natemort in https://github.com/cadence-workflow/cadence/pull/7079
- Updates github.com/robfig/cron/v3 by @davidporter-id-au in https://github.com/cadence-workflow/cadence/pull/7087
- [Wf-Diagnostics] Keep single link to runbook instead of list by @sankari165 in https://github.com/cadence-workflow/cadence/pull/7094
Fixed
- Fix IDL submodule branch checking in CI workflows by @timl3136 in https://github.com/cadence-workflow/cadence/pull/7013
- [active-active] Fix active cluster policy propagation and domain replication mappers by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7024
- Fix data race in ValidateAndUpdateFailoverMarkers by @timl3136 in https://github.com/cadence-workflow/cadence/pull/7027
- Fix TestOfferOrTimeout_SyncMatchTimedOut flaky test in matcher_test by @fimanishi in https://github.com/cadence-workflow/cadence/pull/7033
- Fix history task latency metric for timer queue v2 by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7031
- Fix task attempt metric by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7035
- Fix task schedule latency metric by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7055
- Fix standby timer task timestamp for history queue v2 by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7058
- [CLI] fix domain deprecation security flag to be optional by @shijiesheng in https://github.com/cadence-workflow/cadence/pull/7061
- [shard-distributor] Fix election tests not waiting for the election stop by @3vilhamster in https://github.com/cadence-workflow/cadence/pull/7063
- [wf-describe]Fix negative ExpirationTimestamp when activity retry has no expiration by @gazizayestemir in https://github.com/cadence-workflow/cadence/pull/7068
- Fix nil pointer for TaskListKind in SQL serialization by @natemort in https://github.com/cadence-workflow/cadence/pull/7078
Removed
- Remove poll time from scheduled queue by @Shaddoll in https://github.com/cadence-workflow/cadence/pull/7028
- Remove buildkite files by @mandyschen in https://github.com/cadence-workflow/cadence/pull/7036
- Remove all references to buildkite by @mandyschen in https://github.com/cadence-workflow/cadence/pull/7044
- [active-active] Remove active cluster selection policy row during workflow cleanup by @taylanisikdemir in https://github.com/cadence-workflow/cadence/pull/7053
New Contributors
- @jayne-s made their first contribution in https://github.com/cadence-workflow/cadence/pull/7051
- @anuragrai16 made their first contribution in https://github.com/cadence-workflow/cadence/pull/6998
Full Changelog: https://github.com/cadence-workflow/cadence/compare/v1.3.2...v1.3.3
For a comprehensive list of changes and detailed release notes, please visit the Cadence GitHub Releases page.