|
@@ -28,6 +28,7 @@ type (
|
|
|
AlarmResponse pb.AlarmResponse
|
|
AlarmResponse pb.AlarmResponse
|
|
|
AlarmMember pb.AlarmMember
|
|
AlarmMember pb.AlarmMember
|
|
|
StatusResponse pb.StatusResponse
|
|
StatusResponse pb.StatusResponse
|
|
|
|
|
+ HashKVResponse pb.HashKVResponse
|
|
|
MoveLeaderResponse pb.MoveLeaderResponse
|
|
MoveLeaderResponse pb.MoveLeaderResponse
|
|
|
)
|
|
)
|
|
|
|
|
|
|
@@ -50,6 +51,11 @@ type Maintenance interface {
|
|
|
// Status gets the status of the endpoint.
|
|
// Status gets the status of the endpoint.
|
|
|
Status(ctx context.Context, endpoint string) (*StatusResponse, error)
|
|
Status(ctx context.Context, endpoint string) (*StatusResponse, error)
|
|
|
|
|
|
|
|
|
|
+ // HashKV returns a hash of the KV state at the time of the RPC.
|
|
|
|
|
+ // If revision is zero, the hash is computed on all keys. If the revision
|
|
|
|
|
+ // is non-zero, the hash is computed on all keys at or below the given revision.
|
|
|
|
|
+ HashKV(ctx context.Context, endpoint string, rev int64) (*HashKVResponse, error)
|
|
|
|
|
+
|
|
|
// Snapshot provides a reader for a snapshot of a backend.
|
|
// Snapshot provides a reader for a snapshot of a backend.
|
|
|
Snapshot(ctx context.Context) (io.ReadCloser, error)
|
|
Snapshot(ctx context.Context) (io.ReadCloser, error)
|
|
|
|
|
|
|
@@ -159,6 +165,19 @@ func (m *maintenance) Status(ctx context.Context, endpoint string) (*StatusRespo
|
|
|
return (*StatusResponse)(resp), nil
|
|
return (*StatusResponse)(resp), nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+func (m *maintenance) HashKV(ctx context.Context, endpoint string, rev int64) (*HashKVResponse, error) {
|
|
|
|
|
+ remote, cancel, err := m.dial(endpoint)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return nil, toErr(ctx, err)
|
|
|
|
|
+ }
|
|
|
|
|
+ defer cancel()
|
|
|
|
|
+ resp, err := remote.HashKV(ctx, &pb.HashKVRequest{Revision: rev}, grpc.FailFast(false))
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return nil, toErr(ctx, err)
|
|
|
|
|
+ }
|
|
|
|
|
+ return (*HashKVResponse)(resp), nil
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
func (m *maintenance) Snapshot(ctx context.Context) (io.ReadCloser, error) {
|
|
func (m *maintenance) Snapshot(ctx context.Context) (io.ReadCloser, error) {
|
|
|
ss, err := m.remote.Snapshot(ctx, &pb.SnapshotRequest{}, grpc.FailFast(false))
|
|
ss, err := m.remote.Snapshot(ctx, &pb.SnapshotRequest{}, grpc.FailFast(false))
|
|
|
if err != nil {
|
|
if err != nil {
|