diff --git a/clientv3/compare.go b/clientv3/compare.go index 9bab55c59..b5f0a2552 100644 --- a/clientv3/compare.go +++ b/clientv3/compare.go @@ -61,7 +61,7 @@ func Compare(cmp Cmp, result string, v interface{}) Cmp { case pb.Compare_MOD: cmp.TargetUnion = &pb.Compare_ModRevision{ModRevision: mustInt64(v)} case pb.Compare_LEASE: - cmp.TargetUnion = &pb.Compare_Lease{Lease: mustInt64(v)} + cmp.TargetUnion = &pb.Compare_Lease{Lease: mustInt64orLeaseID(v)} default: panic("Unknown compare type") } @@ -119,6 +119,7 @@ func (cmp Cmp) WithPrefix() Cmp { return cmp } +// mustInt64 panics if val isn't an int or int64. It returns an int64 otherwise. func mustInt64(val interface{}) int64 { if v, ok := val.(int64); ok { return v @@ -128,3 +129,12 @@ func mustInt64(val interface{}) int64 { } panic("bad value") } + +// mustInt64orLeaseID panics if val isn't a LeaseID, int or int64. It returns an +// int64 otherwise. +func mustInt64orLeaseID(val interface{}) int64 { + if v, ok := val.(LeaseID); ok { + return int64(v) + } + return mustInt64(val) +}