mirror of
https://github.com/zrepl/zrepl.git
synced 2025-01-25 07:40:35 +01:00
292b85b5ef
- drop HintMostRecentCommonAncestor rpc call - it is wrong to put faith into the active side of the replication to always make that call (we might not trust it, ref pull setup) - clean up step holds + step bookmarks + replication cursor bookmarks on send RPC instead - this makes it symmetric with Receive RPC - use a cache (endpoint.sendAbstractionsCache) to avoid the cost of listing the on-disk endpoint abstractions state on every step The "create" methods for endpoint abstractions (CreateReplicationCursor, HoldStep) are now fully idempotent and return an Abstraction. Notes about endpoint.sendAbstractionsCache: - fills lazily from disk state on first `Get` operation - fill from disk is generally only attempted once - unless the `ListAbstractions` fails, in which case the fill from disk is retried on next `Get` (the current `Get` will observe a subset of the actual on-disk abstractions) - the `Invalidate` method is called - it is a global (zrepl process-wide) cache fixes #316
128 lines
3.2 KiB
Protocol Buffer
128 lines
3.2 KiB
Protocol Buffer
syntax = "proto3";
|
|
option go_package = "pdu";
|
|
|
|
service Replication {
|
|
rpc Ping(PingReq) returns (PingRes);
|
|
rpc ListFilesystems(ListFilesystemReq) returns (ListFilesystemRes);
|
|
rpc ListFilesystemVersions(ListFilesystemVersionsReq)
|
|
returns (ListFilesystemVersionsRes);
|
|
rpc DestroySnapshots(DestroySnapshotsReq) returns (DestroySnapshotsRes);
|
|
rpc ReplicationCursor(ReplicationCursorReq) returns (ReplicationCursorRes);
|
|
rpc SendCompleted(SendCompletedReq) returns (SendCompletedRes);
|
|
// for Send and Recv, see package rpc
|
|
}
|
|
|
|
message ListFilesystemReq {}
|
|
|
|
message ListFilesystemRes { repeated Filesystem Filesystems = 1; }
|
|
|
|
message Filesystem {
|
|
string Path = 1;
|
|
string ResumeToken = 2;
|
|
bool IsPlaceholder = 3;
|
|
bool IsEncrypted = 4;
|
|
}
|
|
|
|
message ListFilesystemVersionsReq { string Filesystem = 1; }
|
|
|
|
message ListFilesystemVersionsRes { repeated FilesystemVersion Versions = 1; }
|
|
|
|
message FilesystemVersion {
|
|
enum VersionType {
|
|
Snapshot = 0;
|
|
Bookmark = 1;
|
|
}
|
|
VersionType Type = 1;
|
|
string Name = 2;
|
|
uint64 Guid = 3;
|
|
uint64 CreateTXG = 4;
|
|
string Creation = 5; // RFC 3339
|
|
}
|
|
|
|
enum Tri {
|
|
DontCare = 0;
|
|
False = 1;
|
|
True = 2;
|
|
}
|
|
|
|
message SendReq {
|
|
string Filesystem = 1;
|
|
// May be empty / null to request a full transfer of To
|
|
FilesystemVersion From = 2;
|
|
FilesystemVersion To = 3;
|
|
|
|
// If ResumeToken is not empty, the resume token that CAN be used for 'zfs
|
|
// send' by the sender. The sender MUST indicate use of ResumeToken in the
|
|
// reply message SendRes.UsedResumeToken If it does not work, the sender
|
|
// SHOULD clear the resume token on their side and use From and To instead If
|
|
// ResumeToken is not empty, the GUIDs of From and To MUST correspond to those
|
|
// encoded in the ResumeToken. Otherwise, the Sender MUST return an error.
|
|
string ResumeToken = 4;
|
|
Tri Encrypted = 5;
|
|
|
|
bool DryRun = 6;
|
|
}
|
|
|
|
message Property {
|
|
string Name = 1;
|
|
string Value = 2;
|
|
}
|
|
|
|
message SendRes {
|
|
// Whether the resume token provided in the request has been used or not.
|
|
// If the SendReq.ResumeToken == "", this field has no meaning.
|
|
bool UsedResumeToken = 2;
|
|
|
|
// Expected stream size determined by dry run, not exact.
|
|
// 0 indicates that for the given SendReq, no size estimate could be made.
|
|
int64 ExpectedSize = 3;
|
|
|
|
repeated Property Properties = 4;
|
|
}
|
|
|
|
message SendCompletedReq {
|
|
SendReq OriginalReq = 2;
|
|
}
|
|
|
|
message SendCompletedRes {}
|
|
|
|
message ReceiveReq {
|
|
string Filesystem = 1;
|
|
FilesystemVersion To = 2;
|
|
|
|
// If true, the receiver should clear the resume token before performing the
|
|
// zfs recv of the stream in the request
|
|
bool ClearResumeToken = 3;
|
|
}
|
|
|
|
message ReceiveRes {}
|
|
|
|
message DestroySnapshotsReq {
|
|
string Filesystem = 1;
|
|
// Path to filesystem, snapshot or bookmark to be destroyed
|
|
repeated FilesystemVersion Snapshots = 2;
|
|
}
|
|
|
|
message DestroySnapshotRes {
|
|
FilesystemVersion Snapshot = 1;
|
|
string Error = 2;
|
|
}
|
|
|
|
message DestroySnapshotsRes { repeated DestroySnapshotRes Results = 1; }
|
|
|
|
message ReplicationCursorReq { string Filesystem = 1; }
|
|
|
|
message ReplicationCursorRes {
|
|
oneof Result {
|
|
uint64 Guid = 1;
|
|
bool Notexist = 2;
|
|
}
|
|
}
|
|
|
|
message PingReq { string Message = 1; }
|
|
|
|
message PingRes {
|
|
// Echo must be PingReq.Message
|
|
string Echo = 1;
|
|
}
|