github restatedev/restate v1.7.3

7 hours ago

Restate 1.7.3

Restate 1.7.3 makes the flow-control capabilities introduced in v1.7 available to existing clusters. It also includes important fixes for memory retention, Prometheus compatibility, SQL correctness, and partition reliability.

🚀 Migrate Existing Clusters to VQueues

Existing clusters can now enable VQueues without provisioning a fresh cluster or first draining all in-flight invocations.

The migration covers inboxed, running, scheduled, suspended, paused, and completed invocations. Each invocation is migrated atomically, and interrupted migrations safely resume when the partition processor restarts.

To enable VQueues:

  1. Upgrade every Restate server in the cluster to v1.7.3.
  2. Enable VQueues on every node:
experimental_enable_vqueues = true
  1. Restart the nodes with the updated configuration.
  2. Monitor the logs for [VQueues Migration Progress] and [VQueues Migration Completed].

The enabled_features column in the partition_state SQL table includes vqueues after migration completes for a partition.

Migration Considerations

  • Enabling VQueues is one-way. Disabling the configuration option does not migrate partitions back to the legacy execution path.
  • A partition is temporarily unavailable while its migration runs and does not become an effective leader until migration completes.
  • Migration duration depends on the amount of retained invocation data.
  • Queued external state mutations cannot be migrated. Restate logs a warning identifying the affected virtual object, and the mutation must be submitted again after migration.

🧠 Memory-Retention Fix

The record cache previously allowed a small cached record to retain the complete backing allocation from a much larger input buffer.

Cached raw records are now detached from those allocations. This makes the configured cache budget more accurately reflect retained memory and reduces the risk of unexpected memory growth and OOM failures under sustained traffic.

No configuration changes are required.

🔄 Improved Ingress Observability

A new restate.invocation_client.requests.total counter records partition-processor RPC attempts by partition_id and outcome.

The status label on restate.ingress.requests.total now distinguishes:

  • completed
  • request_error
  • invocation_error
  • ingress_error

Ingress request duration is now also recorded for unsuccessful requests. Review Prometheus queries that previously counted only status="completed".

📊 Metrics Changes

Partition metrics are now aggregated by node rather than exported as high-cardinality per-partition series. This prevents stale series from remaining after partitions move between nodes.

Custom dashboards and alerts may require updates:

  • Replace restate_partition_is_effective_leader with restate_num_active_partition_leaders.
  • Query restate_partition_applied_lsn_lag and restate_partition_snapshot_age_seconds as quantile gauges without the partition label.
  • Replace restate_partition_time_since_last_status_update with restate_partition_time_since_last_status_update_seconds.
  • Use restate_partition_num_unknown_applied_lsn_lag to monitor partitions whose lag is unknown.

The bundled Grafana dashboards have already been updated and can be re-imported.

This release also fixes invalid Prometheus exposition that could cause strict parsers, including Vector's prometheus_scrape source, to reject the complete metrics payload:

Previous metric Replacement
restate_partition_shuffle_inflight_count restate_partition_shuffle_inflight
restate_partition_shuffle_message_count restate_partition_shuffle_message_total

The new in-flight metric is a gauge and no longer produces summary _sum, _count, or quantile series.

🛡️ Clearer Reporting for Irrecoverable Partitions

A partition processor whose local store is ahead of the log tail can no longer recover by retrying. Restate now parks the processor and reports it as broken instead of retrying indefinitely.

The condition is visible through:

  • restatectl partition list
  • restatectl status
  • The partition_state.broken_reason SQL column
  • The restate.partition.blocked_flare{reason="ahead_of_log"} metric

Recovery requires replacing the local store from a safe snapshot.

🛠️ Additional Operator Tooling

This release also adds controls for freezing or explicitly setting partition placement and expands restatectl storage compact with bottommost-level compaction, level recalculation, and configurable timeout options.

For complete migration guidance and operational details, see the full release notes.

Install

Pull the Docker images

docker pull docker.restate.dev/restatedev/restate:1.7.3
docker pull docker.restate.dev/restatedev/restate-cli:1.7.3

Install prebuilt binaries via Homebrew

brew install restatedev/tap/restate-server
brew install restatedev/tap/restate
brew install restatedev/tap/restatectl

Install prebuilt binaries into your npm project

npm install @restatedev/restate-server@1.7.3
npm install @restatedev/restate@1.7.3
npm install @restatedev/restatectl@1.7.3

Download binary archives

File Platform Checksum
restate-server-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
restate-server-x86_64-apple-darwin.tar.xz Intel macOS checksum
restate-server-aarch64-unknown-linux-musl.tar.xz ARM64 MUSL Linux checksum
restate-server-x86_64-unknown-linux-musl.tar.xz x64 MUSL Linux checksum
restate-cli-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
restate-cli-x86_64-apple-darwin.tar.xz Intel macOS checksum
restate-cli-aarch64-unknown-linux-musl.tar.xz ARM64 MUSL Linux checksum
restate-cli-x86_64-unknown-linux-musl.tar.xz x64 MUSL Linux checksum
restatectl-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
restatectl-x86_64-apple-darwin.tar.xz Intel macOS checksum
restatectl-aarch64-unknown-linux-musl.tar.xz ARM64 MUSL Linux checksum
restatectl-x86_64-unknown-linux-musl.tar.xz x64 MUSL Linux checksum

Don't miss a new restate release

NewReleases is sending notifications on new releases.