Orleans.Lattice.Api.Backup.Grpc
This page documents Orleans.Lattice.Api.Backup.Grpc 9.9.0, in the documentation for Orleans.Lattice 9.9.0 (release line 9.9), built 2026-10-04. It is also published as markdown, with every table and list, at README.md, and llms.txt lists every page.Code-first gRPC binding for Orleans.Lattice.Api.Backup - projects the backup / restore control facade onto a gRPC service and a public typed client, using Orleans-serialized request / response records that wrap the facade DTOs, with no hand-written .proto.
What is it?
Orleans.Lattice.Api.Backup.Grpc is the remote transport for the cluster's backup control plane. A host references it when a dashboard, a CLI, or a future bridge needs to drive backup and restore, list and describe the catalog, delete backups, and export artifacts over the network rather than in-process.
It provides:
- A code-first gRPC service. RPCs for the remote-safe facade subset - accept-then-poll start, status, list, and cancel operations for backup and restore; deprecated blocking capture and restore calls kept until the next major version; unary list, describe, delete, revert, auth-scheme, schedule / cancel, scope status, capability, and health operations; plus server-streaming whole-catalog draining and artifact export - bound from C# definitions rather than a
.proto. Some facade and engine operations remain in-process-only and have no RPC, including inventory, catalog rebuild / scrub, and backup-set restore. - A public typed client.
LatticeBackupApiGrpcClientexposes one method per RPC over a caller-supplied gRPCCallInvoker. - Shared Orleans marshalling. Wire messages are the package's
[GenerateSerializer]request / response records, serialized with the Orleans binary serializer and wrapping facade DTOs where needed, so client and server stay in lock-step by construction. - Two-layer, fail-closed authorization. A transport meta-authorizer gates every RPC at the edge except the unauthenticated
GetAuthSchemediscovery RPC, and the facade's own scope authorization re-authorizes the resolved caller. The transport gate defaults to deny for protected operations; the facade gate refuses an unauthorized or anonymous caller whenever an authorization add-on is registered, and with only the core no-op gate it allows at zero cost.
Backup and restore are among the most sensitive operations in a cluster, so the binding fails closed: with no authorizer registered, every protected call is rejected with PermissionDenied. GetAuthScheme stays unauthenticated so a client can discover how to sign in.
Core properties
- Public client, internal service. Callers consume
LatticeBackupApiGrpcClient; the service, marshallers, method definitions, and interceptor are internal. - No transport policy in the client. Address, TLS, retries, deadlines, and credentials live on the caller's
GrpcChannel/CallInvoker. - Two load-bearing gates. The transport meta-authorizer decides whether a call may run at all; the credential the identity bridge resolves then feeds the backup engine's own fail-closed scope authorization. Neither replaces the other.
- Discoverable sign-in. An unauthenticated
GetAuthSchemeRPC lets a client discover how to authenticate before it holds a credential.
RPCs
The gRPC service name is orleans.lattice.api.backup.
| RPC | Kind | Facade operation |
|---|---|---|
StartBackup |
unary | Start tracked full capture |
StartIncrementalBackup |
unary | Start tracked incremental capture |
StartBackupSet |
unary | Start tracked backup-set capture |
StartRestore |
unary | Start tracked restore |
StartColdRestore |
unary | Start tracked catalog-free cold restore |
StartBackupHealthCheck |
unary | Start tracked backup health check |
StartCatalogRebuild |
unary | Start tracked catalog rebuild from the sink |
StartCatalogScrub |
unary | Start tracked catalog scrub against the sink |
GetBackupOperationStatus |
unary | Read tracked operation status |
ListBackupOperations |
unary | List tracked backup operations |
CancelBackupOperation |
unary | Request tracked operation cancellation |
CreateBackup |
unary | Deprecated blocking create backup |
CreateIncrementalBackup |
unary | Deprecated blocking create incremental backup |
CreateBackupSet |
unary | Deprecated blocking create backup set |
ListBackups |
unary | List backups (paged) |
StreamBackups |
server-streaming | Stream backups (whole catalog) |
DescribeBackup |
unary | Describe backup |
DeleteBackup |
unary | Delete backup |
RestoreBackup |
unary | Deprecated blocking restore backup |
RevertRestore |
unary | Revert restore |
ExportArtifact |
server-streaming | Export artifact |
GetAuthScheme |
unary (unauthenticated) | Advertise accepted auth schemes |
ProbeCapabilities |
unary | Probe capabilities (read-only, no side effects) |
ScheduleBackup |
unary | Register or update a runtime recurring schedule |
CancelSchedule |
unary | Remove a runtime recurring schedule |
GetScopeStatus |
unary | Read scope schedule and last-run status |
IsHealthMonitoringAvailable |
unary | Report whether health monitoring applies |
CheckBackupHealth |
unary | Deprecated blocking verify of one backup that persists the report |
GetBackupHealth |
unary | Read the latest stored health report |
ConfigureBackupHealth |
unary | Override one backup's health-monitor settings |
The start RPC request messages (BackupCaptureRequestMessage, BackupIncrementalCaptureRequestMessage, BackupSetCaptureRequestMessage, and RestoreRequestMessage) carry optional TrackingOperationId, the idempotency id of the tracked operation. RestoreRequestMessage.OperationId keeps its existing meaning as the restore engine's own key; pass TrackingOperationId separately for the tracked operation. CreateBackup, CreateIncrementalBackup, CreateBackupSet, and RestoreBackup stay on the wire but are deprecated and will be removed in the next major version. A server registered only with ILatticeBackupControl still serves the old RPCs; if that control does not also implement ILatticeBackupOperations, the new RPCs return gRPC Unimplemented.
Quick Start
Register the binding on a silo that already has AddLatticeBackupApi, then map its routes:
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Orleans.Lattice.Api.Backup.Grpc;
var builder = WebApplication.CreateBuilder();
builder.Services.AddLatticeBackupApiGrpc(o => o.RequireAuthorization = true);
builder.Services.AddSingleton<ILatticeBackupApiAuthorizer, AllowAllBackupApiAuthorizer>();
var app = builder.Build();
app.MapLatticeBackupApiGrpc();
app.Run();
The host must expose the control facade in the same service provider - typically by co-hosting Orleans with AddLattice(...).AddLatticeBackup(...).AddLatticeBackupApi() on the same host.
Client
using Grpc.Net.Client;
using Orleans.Lattice.Api.Backup.Grpc;
using Orleans.Lattice.Backup;
IServiceProvider serializerProvider = null!;
using var channel = GrpcChannel.ForAddress("https://backup-admin.example:443");
var backupClient = LatticeBackupApiGrpcClient.Create(channel.CreateCallInvoker(), serializerProvider);
var handle = await backupClient.StartBackupAsync(
new LatticeBackupCaptureRequest("nightly", BackupScopeSelector.WholeTree("orders")),
operationId: "orders-nightly",
cancellationToken);
var status = await backupClient.GetBackupOperationStatusAsync(handle.OperationId, cancellationToken);
await foreach (var manifest in backupClient.StreamBackupsAsync(cancellationToken))
{
// enumerate the readable catalog with bounded memory
}
The serializerProvider must have Orleans serialization registered (AddSerializer()) so the client and server wire marshallers match exactly. A call the server rejects arrives as a PermissionDenied RpcException; other failures map to stable status codes (notably FailedPrecondition for a restore that fails pre-apply validation, such as a backup store not shared across every cluster). See Architecture for the full mapping.
Reference
- API reference - the public client, options, authorization seams, and wire message records.
- Configuration - the public options properties, their types, and defaults.
- Architecture - the two-layer authorization model and the code-first binding.
See also
Orleans.Lattice.Api.Backup- the transport-agnostic facade this binding adapts.Orleans.Lattice.Backup- the backup engine underneath.