Skip to content

Commit d8c64b7

Browse files
authored
PWX-30091: Putting all new keys under the storePrefix (#142)
* PWX-30091: Putting all new keys under the storePrefix Previously, all keys were put under the domain name e.g pwx/<cluster-id>, all keys would go under it. This could cause collisions since we allow creating new Stores Newly created stores will have all their keys under the domain name pwx/<cluster-id>/<store-name>/<keys> Signed-off-by: Naveen Revanna <[email protected]>
1 parent 426525b commit d8c64b7

File tree

11 files changed

+41
-40
lines changed

11 files changed

+41
-40
lines changed

Diff for: go.mod

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ require (
1111
github.com/IBM-Cloud/bluemix-go v0.0.0-20220329045155-d2a8118ac5c7
1212
github.com/aws/aws-sdk-go v1.40.39
1313
github.com/codeskyblue/go-sh v0.0.0-20170112005953-b097669b1569
14+
github.com/coreos/etcd v3.3.27+incompatible
1415
github.com/golang/mock v1.4.4
1516
github.com/google/uuid v1.1.2
1617
github.com/hashicorp/go-version v1.2.1
@@ -24,7 +25,6 @@ require (
2425
github.com/sirupsen/logrus v1.8.1
2526
github.com/stretchr/testify v1.7.0
2627
github.com/vmware/govmomi v0.22.2
27-
go.etcd.io/etcd v0.5.0-alpha.5.0.20211015134708-72d3e382e73c
2828
golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5
2929
google.golang.org/api v0.30.0
3030
gopkg.in/yaml.v2 v2.4.0
@@ -76,6 +76,7 @@ require (
7676
github.com/prometheus/procfs v0.2.0 // indirect
7777
github.com/sony/gobreaker v0.5.0 // indirect
7878
github.com/spf13/pflag v1.0.5 // indirect
79+
github.com/stretchr/objx v0.2.0 // indirect
7980
go.opencensus.io v0.22.4 // indirect
8081
golang.org/x/crypto v0.6.0 // indirect
8182
golang.org/x/net v0.6.0 // indirect

Diff for: go.sum

+5-6
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,8 @@ github.com/coreos/bbolt v1.3.3/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkE
317317
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
318318
github.com/coreos/etcd v3.3.12+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
319319
github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
320+
github.com/coreos/etcd v3.3.27+incompatible h1:QIudLb9KeBsE5zyYxd1mjzRSkzLg9Wf9QlRwFgd6oTA=
321+
github.com/coreos/etcd v3.3.27+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
320322
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
321323
github.com/coreos/go-oidc v2.0.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
322324
github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
@@ -339,7 +341,6 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:ma
339341
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
340342
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
341343
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
342-
github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
343344
github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4=
344345
github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
345346
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -570,8 +571,6 @@ github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP
570571
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
571572
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
572573
github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A=
573-
github.com/golang-jwt/jwt v3.2.1+incompatible h1:73Z+4BJcrTC+KczS6WvTPvRGOp1WmfEP4Q1lOd9Z/+c=
574-
github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
575574
github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
576575
github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
577576
github.com/golang-jwt/jwt/v4 v4.4.3 h1:Hxl6lhQFj4AnOX6MLrsCb/+7tCj7DxP7VA+2rDIq5AU=
@@ -1226,7 +1225,10 @@ github.com/portworx/kvdb v0.0.0-20190105022415-cccaa09abfc9/go.mod h1:Q8YyrNDvPp
12261225
github.com/portworx/kvdb v0.0.0-20191223203141-f42097b1fcd8/go.mod h1:Q8YyrNDvPp3DVF96BDcQuaC7fAYUCuUX+l58S7OnD2M=
12271226
github.com/portworx/kvdb v0.0.0-20200311180812-b2c72382d652/go.mod h1:Q8YyrNDvPp3DVF96BDcQuaC7fAYUCuUX+l58S7OnD2M=
12281227
github.com/portworx/kvdb v0.0.0-20200723230726-2734b7f40194/go.mod h1:Q8YyrNDvPp3DVF96BDcQuaC7fAYUCuUX+l58S7OnD2M=
1228+
github.com/portworx/kvdb v0.0.0-20200929023115-b312c7519467 h1:jkqzdbOnejgSN5HG/FLt4enNrozWT/K+nlmaRm3P1II=
12291229
github.com/portworx/kvdb v0.0.0-20200929023115-b312c7519467/go.mod h1:Q8YyrNDvPp3DVF96BDcQuaC7fAYUCuUX+l58S7OnD2M=
1230+
github.com/portworx/kvdb v0.0.0-20221027170939-f1680e5db6db h1:ycu2xaymWoDkRgIUadkX1XjlKs0RWHtkk5HI/JjF59g=
1231+
github.com/portworx/kvdb v0.0.0-20221027170939-f1680e5db6db/go.mod h1:Q8YyrNDvPp3DVF96BDcQuaC7fAYUCuUX+l58S7OnD2M=
12301232
github.com/portworx/kvdb v0.0.0-20230326003017-21a38cf82d4b h1:nP+m9tYQv2cWbN9wAwjlhJU9FZRs7GaYszhLJBLAg/I=
12311233
github.com/portworx/kvdb v0.0.0-20230326003017-21a38cf82d4b/go.mod h1:Q8YyrNDvPp3DVF96BDcQuaC7fAYUCuUX+l58S7OnD2M=
12321234
github.com/portworx/px-backup-api v1.0.1-0.20200915150042-274508e876ef/go.mod h1:puy7YVXeb6glot1vVCIePIiRLSwB//+rFtN2ZjvXeEw=
@@ -1410,7 +1412,6 @@ github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhV
14101412
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
14111413
github.com/tmc/grpc-websocket-proxy v0.0.0-20171017195756-830351dc03c6/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
14121414
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
1413-
github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
14141415
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
14151416
github.com/ugorji/go v1.1.1/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ=
14161417
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
@@ -1448,8 +1449,6 @@ go.etcd.io/etcd v0.0.0-20181031231232-83304cfc808c/go.mod h1:weASp41xM3dk0YHg1s/
14481449
go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
14491450
go.etcd.io/etcd v0.5.0-alpha.5.0.20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
14501451
go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg=
1451-
go.etcd.io/etcd v0.5.0-alpha.5.0.20211015134708-72d3e382e73c h1:AntSYpWALzcqs1D6ZpSPIxhpob2hFnwAfEmfr9tEhSg=
1452-
go.etcd.io/etcd v0.5.0-alpha.5.0.20211015134708-72d3e382e73c/go.mod h1:t1cqOhpjW3SEYhH7Wzlg51xzyIM2c5HMB9kvPO5k4gY=
14531452
go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
14541453
go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
14551454
go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=

Diff for: store/store_k8s.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"strings"
88
"time"
99

10-
"go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes"
10+
"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
1111
"github.com/portworx/sched-ops/k8s/core/configmap"
1212
"github.com/sirupsen/logrus"
1313
"k8s.io/apimachinery/pkg/util/validation"

Diff for: store/store_kv.go

+28-9
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
)
1010

1111
const (
12-
cloudDriveKey = "clouddrive/"
12+
cloudDriveKey = "clouddrive"
1313
cloudDriveLockKey = "_lock"
1414
defaultLockTryDuration = 1 * time.Minute
1515
defaultLockHoldDuration = 3 * time.Minute
@@ -22,9 +22,11 @@ var (
2222

2323
type kvStore struct {
2424
k kvdb.Kvdb
25-
lockPrefix string
25+
storeName string
2626
lockTryDuration time.Duration
2727
lockHoldDuration time.Duration
28+
// this boolean helps maintain backward compatability especially during upgrades
29+
legacy bool
2830
}
2931

3032
// NewKVStore returns a Store implementation which is a wrapper over
@@ -33,15 +35,17 @@ func NewKVStore(kv kvdb.Kvdb) (Store, error) {
3335
return newKVStoreWithParams(kv, cloudDriveKey, 0, 0)
3436
}
3537

36-
// NewKVStoreWithParams returns a Store implementation which is a wrapper over
38+
// newKVStoreWithParams returns a Store implementation which is a wrapper over
3739
// kvdb.
3840
func newKVStoreWithParams(
3941
kv kvdb.Kvdb,
4042
name string,
4143
lockTryDuration time.Duration,
4244
lockHoldDuration time.Duration,
4345
) (Store, error) {
44-
kstore := kvStore{}
46+
kstore := kvStore{
47+
legacy: name == cloudDriveKey,
48+
}
4549
if kv == nil {
4650
return nil, ErrKvdbNotInitialized
4751
}
@@ -67,12 +71,12 @@ func newKVStoreWithParams(
6771
}
6872

6973
kstore.k = kv
70-
kstore.lockPrefix = name
74+
kstore.storeName = name
7175
return &kstore, nil
7276
}
7377

7478
func (kv *kvStore) Lock(owner string) (*Lock, error) {
75-
return kv.lockWithKeyHelper(owner, kv.getFullLockPath(cloudDriveLockKey))
79+
return kv.lockWithKeyHelper(owner, kv.storeName+"/"+cloudDriveLockKey)
7680
}
7781

7882
func (kv *kvStore) Unlock(storeLock *Lock) error {
@@ -84,15 +88,25 @@ func (kv *kvStore) Unlock(storeLock *Lock) error {
8488
}
8589

8690
func (kv *kvStore) getFullLockPath(key string) string {
87-
return kv.lockPrefix + "/" + key
91+
return kv.storeName + "/" + "locks" + "/" + key
92+
}
93+
94+
func (kv *kvStore) getFullKey(key string) string {
95+
// Legacy keys are created directly under the pwx/<cluster-id> key
96+
// New keys will be created under pwx/<cluster-id>/<store-name>
97+
if kv.legacy {
98+
return key
99+
}
100+
return kv.storeName + "/" + key
88101
}
89102

90103
func (kv *kvStore) LockWithKey(owner, key string) (*Lock, error) {
91-
fullPath := kv.getFullLockPath(key)
92-
kvPair, err := kv.lockWithKeyHelper(owner, fullPath)
104+
key = kv.getFullLockPath(key)
105+
kvPair, err := kv.lockWithKeyHelper(owner, key)
93106
if err != nil {
94107
return nil, err
95108
}
109+
96110
kvPair.lockedWithKey = true
97111
return kvPair, err
98112
}
@@ -111,16 +125,19 @@ func (kv *kvStore) IsKeyLocked(key string) (bool, string, error) {
111125
}
112126

113127
func (kv *kvStore) CreateKey(key string, value []byte) error {
128+
key = kv.getFullKey(key)
114129
_, err := kv.k.Create(key, string(value), 0)
115130
return err
116131
}
117132

118133
func (kv *kvStore) PutKey(key string, value []byte) error {
134+
key = kv.getFullKey(key)
119135
_, err := kv.k.Put(key, string(value), 0)
120136
return err
121137
}
122138

123139
func (kv *kvStore) GetKey(key string) ([]byte, error) {
140+
key = kv.getFullKey(key)
124141
keyData, err := kv.k.Get(key)
125142
if err != nil {
126143
return nil, err
@@ -130,11 +147,13 @@ func (kv *kvStore) GetKey(key string) ([]byte, error) {
130147
}
131148

132149
func (kv *kvStore) DeleteKey(key string) error {
150+
key = kv.getFullKey(key)
133151
_, err := kv.k.Delete(key)
134152
return err
135153
}
136154

137155
func (kv *kvStore) EnumerateWithKeyPrefix(key string) ([]string, error) {
156+
key = kv.getFullKey(key)
138157
output, err := kv.k.Enumerate(key)
139158
if err != nil {
140159
return nil, err
File renamed without changes.
File renamed without changes.

Diff for: vendor/go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes/error.go renamed to vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/error.go

-20
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: vendor/modules.txt

+5-3
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ github.com/codegangsta/inject
109109
# github.com/codeskyblue/go-sh v0.0.0-20170112005953-b097669b1569
110110
## explicit
111111
github.com/codeskyblue/go-sh
112+
# github.com/coreos/etcd v3.3.27+incompatible
113+
## explicit
114+
github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes
112115
# github.com/coreos/go-oidc v2.2.1+incompatible
113116
## explicit
114117
github.com/coreos/go-oidc
@@ -272,6 +275,8 @@ github.com/sony/gobreaker
272275
# github.com/spf13/pflag v1.0.5
273276
## explicit; go 1.12
274277
github.com/spf13/pflag
278+
# github.com/stretchr/objx v0.2.0
279+
## explicit; go 1.12
275280
# github.com/stretchr/testify v1.7.0
276281
## explicit; go 1.13
277282
github.com/stretchr/testify/assert
@@ -305,9 +310,6 @@ github.com/vmware/govmomi/vim25/xml
305310
github.com/vmware/govmomi/vslm
306311
github.com/vmware/govmomi/vslm/methods
307312
github.com/vmware/govmomi/vslm/types
308-
# go.etcd.io/etcd v0.5.0-alpha.5.0.20211015134708-72d3e382e73c
309-
## explicit; go 1.12
310-
go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes
311313
# go.opencensus.io v0.22.4
312314
## explicit; go 1.13
313315
go.opencensus.io

0 commit comments

Comments
 (0)