Skip to content

Commit ba0025c

Browse files
committed
refactor(ezkv): update ezkv
1 parent e7c7b8c commit ba0025c

File tree

3 files changed

+44
-36
lines changed

3 files changed

+44
-36
lines changed

cmd/ezdeploy/main.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import (
1919
)
2020

2121
type syncNamespaceOptions struct {
22-
DB *ezkv.Database
22+
DB *ezkv.KV
2323
Kubeconfig string
2424
Root string
2525
Namespace string
@@ -68,7 +68,7 @@ func syncNamespace(ctx context.Context, opts syncNamespaceOptions) (err error) {
6868
}
6969

7070
type syncResourcesOptions struct {
71-
DB *ezkv.Database
71+
DB *ezkv.KV
7272
Resources []ezdeploy.Resource
7373
Title string
7474
Namespace string
@@ -135,7 +135,7 @@ func syncResources(ctx context.Context, opts syncResourcesOptions) (err error) {
135135
}
136136

137137
type syncReleaseOptions struct {
138-
DB *ezkv.Database
138+
DB *ezkv.KV
139139
Release ezdeploy.Release
140140
Title string
141141
Namespace string

pkg/ezkv/kv.go

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,19 @@ import (
1212

1313
type Options ezblob.Options
1414

15-
type Database struct {
15+
type KV struct {
1616
blob *ezblob.Blob
1717
lock *sync.RWMutex
1818
data map[string]string
1919
}
2020

21-
// Open create an instance and load existed data / 创建一个实例并载入已有的数据
22-
func Open(ctx context.Context, opts Options) (db *Database, err error) {
21+
// Open create an instance and load existed data
22+
func Open(ctx context.Context, opts Options) (db *KV, err error) {
2323
var blob *ezblob.Blob
2424
if blob, err = ezblob.New(ezblob.Options(opts)); err != nil {
2525
return
2626
}
27-
db = &Database{
27+
db = &KV{
2828
blob: blob,
2929
lock: &sync.RWMutex{},
3030
data: map[string]string{},
@@ -37,41 +37,36 @@ func Open(ctx context.Context, opts Options) (db *Database, err error) {
3737
return
3838
}
3939
} else {
40-
var gr *gzip.Reader
41-
if gr, err = gzip.NewReader(bytes.NewReader(buf)); err != nil {
42-
return
43-
}
44-
if err = gob.NewDecoder(gr).Decode(&db.data); err != nil {
40+
if err = db.unmarshal(buf); err != nil {
4541
return
4642
}
4743
}
4844
return
4945
}
5046

51-
// Put set a key-value / 设置一个键值对
52-
func (db *Database) Put(key string, val string) {
47+
// Put set a key-value
48+
func (db *KV) Put(key string, val string) {
5349
db.lock.Lock()
5450
defer db.lock.Unlock()
5551
db.data[key] = val
56-
return
5752
}
5853

59-
// Get retrieve value by key / 读取一个值
60-
func (db *Database) Get(key string) string {
54+
// Get retrieve value by key
55+
func (db *KV) Get(key string) string {
6156
db.lock.RLock()
6257
defer db.lock.RUnlock()
6358
return db.data[key]
6459
}
6560

66-
// Del delete a value by key / 移除一个值
67-
func (db *Database) Del(key string) {
61+
// Del delete a value by key
62+
func (db *KV) Del(key string) {
6863
db.lock.Lock()
6964
defer db.lock.Unlock()
7065
delete(db.data, key)
7166
}
7267

73-
// Purge iterate all entries and determine whether to delete / 遍历所有键值对,并决定是否移除某个键值
74-
func (db *Database) Purge(fn func(key string, val string) (del bool, stop bool)) {
68+
// Purge iterate all entries and determine whether to delete
69+
func (db *KV) Purge(fn func(key string, val string) (del bool, stop bool)) {
7570
db.lock.Lock()
7671
defer db.lock.Unlock()
7772
for k, v := range db.data {
@@ -83,13 +78,27 @@ func (db *Database) Purge(fn func(key string, val string) (del bool, stop bool))
8378
return
8479
}
8580
}
81+
}
82+
83+
func (db *KV) unmarshal(buf []byte) (err error) {
84+
db.lock.Lock()
85+
defer db.lock.Unlock()
86+
87+
var gr *gzip.Reader
88+
if gr, err = gzip.NewReader(bytes.NewReader(buf)); err != nil {
89+
return
90+
}
91+
92+
if err = gob.NewDecoder(gr).Decode(&db.data); err != nil {
93+
return
94+
}
8695
return
8796
}
8897

89-
// Serialize marshal internal data / 序列化内部数据
90-
func (db *Database) Serialize() (data []byte, err error) {
98+
func (db *KV) marshal() (data []byte, err error) {
9199
db.lock.RLock()
92100
defer db.lock.RUnlock()
101+
93102
buf := &bytes.Buffer{}
94103
gw := gzip.NewWriter(buf)
95104
if err = gob.NewEncoder(gw).Encode(&db.data); err != nil {
@@ -102,10 +111,10 @@ func (db *Database) Serialize() (data []byte, err error) {
102111
return
103112
}
104113

105-
// Save persist data to kubernetes / 将内部数据保存到 Kubernetes
106-
func (db *Database) Save(ctx context.Context) (err error) {
114+
// Save persist data to kubernetes
115+
func (db *KV) Save(ctx context.Context) (err error) {
107116
var buf []byte
108-
if buf, err = db.Serialize(); err != nil {
117+
if buf, err = db.marshal(); err != nil {
109118
return
110119
}
111120
if err = db.blob.Save(ctx, buf); err != nil {

pkg/ezkv/kv_test.go

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,19 @@ package ezkv
22

33
import (
44
"context"
5-
"github.com/stretchr/testify/require"
6-
"github.com/yankeguo/ezdeploy/pkg/ezblob"
7-
"k8s.io/client-go/kubernetes"
8-
"k8s.io/client-go/tools/clientcmd"
95
"os"
10-
"path/filepath"
116
"strconv"
127
"strings"
138
"testing"
9+
10+
"github.com/stretchr/testify/require"
11+
"github.com/yankeguo/ezdeploy/pkg/ezblob"
12+
"k8s.io/client-go/kubernetes"
13+
"k8s.io/client-go/tools/clientcmd"
1414
)
1515

16-
func TestDatabase(t *testing.T) {
17-
dirHome, err := os.UserHomeDir()
18-
require.NoError(t, err)
19-
config, err := clientcmd.BuildConfigFromFlags("", filepath.Join(dirHome, ".kube", "config"))
16+
func TestKV(t *testing.T) {
17+
config, err := clientcmd.BuildConfigFromFlags("", os.Getenv("KUBECONFIG"))
2018
require.NoError(t, err)
2119
client, err := kubernetes.NewForConfig(config)
2220
require.NoError(t, err)
@@ -56,11 +54,12 @@ func TestDatabase(t *testing.T) {
5654
err = db.Save(ctx)
5755
require.NoError(t, err)
5856

59-
blob := ezblob.New(ezblob.Options{
57+
blob, err := ezblob.New(ezblob.Options{
6058
Client: client,
6159
Name: "ezkv-demo",
6260
Namespace: "default",
6361
})
62+
require.NoError(t, err)
6463
err = blob.Delete(ctx)
6564
require.NoError(t, err)
6665
}

0 commit comments

Comments
 (0)