mirror of
https://github.com/zrepl/zrepl.git
synced 2024-12-25 08:28:48 +01:00
975fdee217
A bookmark with a well-known name is used to track which version was
last successfully received by the receiver.
The createtxg that can be retrieved from the bookmark using `zfs get` is
used to set the Replicated attribute of each snap on the sender:
If the snap's CreateTXG > the cursor's, it is not yet replicated,
otherwise it has been.
There is an optional config option to change the behvior to
`CreateTXG >= the cursor's`, and the implementation defaults to that.
The reason: While things work just fine with `CreateTXG > the cursor's`,
ZFS does not provide size estimates in a `zfs send` dry run
(see acd2418
).
However, to enable the use case of keeping the snapshot only around for
the replication, the config flag exists.
119 lines
2.7 KiB
Protocol Buffer
119 lines
2.7 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package pdu;
|
|
|
|
message ListFilesystemReq {}
|
|
|
|
message ListFilesystemRes {
|
|
repeated Filesystem Filesystems = 1;
|
|
}
|
|
|
|
message Filesystem {
|
|
string Path = 1;
|
|
string ResumeToken = 2;
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
|
|
message SendReq {
|
|
string Filesystem = 1;
|
|
string From = 2;
|
|
// May be empty / null to request a full transfer of From
|
|
string To = 3;
|
|
|
|
// If ResumeToken is not empty, the resume token that CAN be tried for 'zfs send' by the sender.
|
|
// The sender MUST indicate in 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;
|
|
bool Compress = 5;
|
|
bool Dedup = 6;
|
|
|
|
bool DryRun = 7;
|
|
}
|
|
|
|
message Property {
|
|
string Name = 1;
|
|
string Value = 2;
|
|
}
|
|
|
|
message SendRes {
|
|
// The actual stream is in the stream part of the streamrpc response
|
|
|
|
// Whether the resume token provided in the request has been used or not.
|
|
bool UsedResumeToken = 1;
|
|
|
|
// Expected stream size determined by dry run, not exact.
|
|
// 0 indicates that for the given SendReq, no size estimate could be made.
|
|
int64 ExpectedSize = 2;
|
|
|
|
repeated Property Properties = 3;
|
|
}
|
|
|
|
message ReceiveReq {
|
|
// The stream part of the streamrpc request contains the zfs send stream
|
|
|
|
string Filesystem = 1;
|
|
|
|
// If true, the receiver should clear the resume token before perfoming the zfs recv of the stream in the request
|
|
bool ClearResumeToken = 2;
|
|
}
|
|
|
|
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 GetOp {}
|
|
message SetOp {
|
|
string Snapshot = 2;
|
|
}
|
|
oneof op {
|
|
GetOp get = 2;
|
|
SetOp set = 3;
|
|
}
|
|
}
|
|
|
|
message ReplicationCursorRes {
|
|
oneof Result {
|
|
uint64 Guid = 1;
|
|
string Error = 2;
|
|
}
|
|
}
|