From ac2e3e43bfaf6727bf2c1cba3062f6e19bf93b9f Mon Sep 17 00:00:00 2001 From: Anthony Romano Date: Mon, 16 May 2016 08:59:44 -0700 Subject: [PATCH] v3rpc: add sha trailer to snapshot --- etcdserver/api/v3rpc/maintenance.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/etcdserver/api/v3rpc/maintenance.go b/etcdserver/api/v3rpc/maintenance.go index 993cb4193..20af20fc3 100644 --- a/etcdserver/api/v3rpc/maintenance.go +++ b/etcdserver/api/v3rpc/maintenance.go @@ -15,6 +15,7 @@ package v3rpc import ( + "crypto/sha256" "io" "github.com/coreos/etcd/etcdserver" @@ -81,6 +82,8 @@ func (ms *maintenanceServer) Snapshot(sr *pb.SnapshotRequest, srv pb.Maintenance pw.Close() }() + // send file data + h := sha256.New() br := int64(0) buf := make([]byte, 32*1024) sz := snap.Size() @@ -97,6 +100,14 @@ func (ms *maintenanceServer) Snapshot(sr *pb.SnapshotRequest, srv pb.Maintenance if err = srv.Send(resp); err != nil { return togRPCError(err) } + h.Write(buf[:n]) + } + + // send sha + sha := h.Sum(nil) + hresp := &pb.SnapshotResponse{RemainingBytes: 0, Blob: sha} + if err := srv.Send(hresp); err != nil { + return togRPCError(err) } return nil