Skip to content

Rebuilds

The Rebuilds page (/rebuilds, sidebar → Reliability) monitors long-running projection rebuild batches — rebuilds dispatched cell-by-cell under each database's concurrency cap by the rebuild-orchestration engine (#309). Where the Event Store Explorer's Operations tab rebuilds one shard directly, this page is for the batch-shaped jobs: a projection rebuilt across every store and tenant that hosts it, with per-cell tracking, retry, and cancel.

A cell is one unit of rebuild work — a (store, projection, tenant) combination. A single-store, single-tenant service produces a one-cell batch; a database-per-tenant service fans out one cell per tenant database, throttled per database.

The list

Two tables, live-updating:

  • Active — batches currently running. Columns: Batch (short id — click to drill in), Service, Projection, Scope, Status, Progress (per-cell done / failed / cancelled counts behind a percentage bar), and Requested by.
  • Recent — completed batches, newest first, same shape plus completion time.

Start rebuild

The Start rebuild button opens a modal that composes the batch:

FieldMeaning
ServiceThe monitored service owning the projection (pre-filled from the global service selector)
ProjectionThe projection to rebuild, picked from the service's registered projections
Store scopeDefault: every store hosting the projection; or narrow to one store
Tenant scopeDefault (each store's default tenancy) · All tenants (one cell each) · Specific tenant

Starting the batch shows a confirmation toast and the batch appears in Active immediately.

Batch detail

Route: /rebuilds/:batchId. Shows the batch header (status, service, projection, requested-by + requested/completed timestamps, aggregate progress bar with done · failed · cancelled · total counts) above the Cells table:

ColumnMeaning
StoreThe store URI this cell rebuilds against (e.g. marten://main)
Projection / TenantThe cell's projection and tenant ( for default tenancy)
Statusdispatchedrunningdone / failed / cancelled
AttemptRetry counter — failed cells can be retried without restarting the batch
NodeThe node executing the cell
Last errorThe most recent failure message, when a cell has failed
Enqueued / FinishedPer-cell timestamps

A status dropdown filters the cell list. Cancel batch (header) cancels every remaining cell; a per-cell Cancel action stops just that cell, and failed cells offer Retry. Refresh re-fetches on demand (the page also live-updates).

Three rebuild paths. The Operations-tab row/bulk Rebuild sends the direct RebuildProjection command to the service — quick, but untracked here. The Operations tab's Schedule rebuild… defers that same direct command until a time you pick, held in the target service's own message store and managed on the Scheduled Messages page. Rebuilds started from this page run through the orchestration engine and get batch/cell tracking, retry, and cancel. Prefer this page for anything multi-store, multi-tenant, or long enough that you'll want to watch it.

Free for read-only monitoring. A commercial license is required for administrative actions and the MCP server.