From bc4adb8b5c91c46495aa1e6af19033d8062aafe4 Mon Sep 17 00:00:00 2001 From: Daniel Lipovetsky <3445370+dlipovetsky@users.noreply.github.com> Date: Sat, 8 Feb 2020 23:07:58 -0800 Subject: [PATCH] etcdserver: populate ResponseHeader in Alarm method (#11600) When no Alarms are found, the response has no header. The header should always be populated. Some components, like fields printer used by etcdctl, break when the header is not populated. Fixes #11581 Signed-off-by: Daniel Lipovetsky --- etcdserver/api/v3rpc/maintenance.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/etcdserver/api/v3rpc/maintenance.go b/etcdserver/api/v3rpc/maintenance.go index c51271ac0..171541302 100644 --- a/etcdserver/api/v3rpc/maintenance.go +++ b/etcdserver/api/v3rpc/maintenance.go @@ -169,7 +169,15 @@ func (ms *maintenanceServer) HashKV(ctx context.Context, r *pb.HashKVRequest) (* } func (ms *maintenanceServer) Alarm(ctx context.Context, ar *pb.AlarmRequest) (*pb.AlarmResponse, error) { - return ms.a.Alarm(ctx, ar) + resp, err := ms.a.Alarm(ctx, ar) + if err != nil { + return nil, togRPCError(err) + } + if resp.Header == nil { + resp.Header = &pb.ResponseHeader{} + } + ms.hdr.fill(resp.Header) + return resp, nil } func (ms *maintenanceServer) Status(ctx context.Context, ar *pb.StatusRequest) (*pb.StatusResponse, error) {