...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package namespace
16
17 import (
18 "bytes"
19 "context"
20
21 "go.etcd.io/etcd/client/v3"
22 )
23
24 type leasePrefix struct {
25 clientv3.Lease
26 pfx []byte
27 }
28
29
30
31 func NewLease(l clientv3.Lease, prefix string) clientv3.Lease {
32 return &leasePrefix{l, []byte(prefix)}
33 }
34
35 func (l *leasePrefix) TimeToLive(ctx context.Context, id clientv3.LeaseID, opts ...clientv3.LeaseOption) (*clientv3.LeaseTimeToLiveResponse, error) {
36 resp, err := l.Lease.TimeToLive(ctx, id, opts...)
37 if err != nil {
38 return nil, err
39 }
40 if len(resp.Keys) > 0 {
41 var outKeys [][]byte
42 for i := range resp.Keys {
43 if len(resp.Keys[i]) < len(l.pfx) {
44
45 continue
46 }
47 if !bytes.Equal(resp.Keys[i][:len(l.pfx)], l.pfx) {
48
49 continue
50 }
51
52 outKeys = append(outKeys, resp.Keys[i][len(l.pfx):])
53 }
54 resp.Keys = outKeys
55 }
56 return resp, nil
57 }
58
View as plain text