Skip to content

Commit 04503b9

Browse files
authored
Merge pull request #211 from chuntaojun/hot_fix_cannt_return_ns
[ISSUE #187] Hot fix cannt return namespace
2 parents 773d7f2 + 226a68b commit 04503b9

File tree

2 files changed

+173
-11
lines changed

2 files changed

+173
-11
lines changed

store/boltdb/namespace.go

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,8 @@ func (n *namespaceStore) GetNamespaces(
176176
if !ns.Valid {
177177
continue
178178
}
179+
isFind := true
179180
for index, value := range filter {
180-
isFind := false
181181
compare := func(s string) bool {
182182
for _, v := range value {
183183
if strings.Contains(s, v) {
@@ -188,21 +188,25 @@ func (n *namespaceStore) GetNamespaces(
188188
}
189189

190190
if index == OwnerAttribute {
191-
isFind = compare(ns.Owner)
191+
if isFind = compare(ns.Owner); !isFind {
192+
break
193+
}
194+
192195
}
193196
if index == NameAttribute {
194-
isFind = compare(ns.Name)
195-
}
196-
197-
if isFind {
198-
ret = append(ret, ns)
197+
if isFind = compare(ns.Name); !isFind {
198+
break
199+
}
199200
}
200201
}
202+
if isFind {
203+
ret = append(ret, ns)
204+
}
201205
}
202206
namespaces = ret
203207

204208
sort.Sort(sort.Reverse(namespaces))
205-
startIdx := offset * limit
209+
startIdx := offset
206210
if startIdx >= len(namespaces) {
207211
return nil, 0, nil
208212
}
@@ -211,7 +215,7 @@ func (n *namespaceStore) GetNamespaces(
211215
endIdx = len(namespaces)
212216
}
213217
ret = namespaces[startIdx:endIdx]
214-
return ret, uint32(len(ret)), nil
218+
return ret, uint32(len(namespaces)), nil
215219
}
216220

217221
func toNamespaces(values map[string]interface{}) []*model.Namespace {

store/boltdb/namespace_test.go

Lines changed: 160 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package boltdb
1919

2020
import (
2121
"fmt"
22+
"os"
2223
"strconv"
2324
"testing"
2425
"time"
@@ -33,12 +34,33 @@ const (
3334
nsToken = "xxxxx"
3435
)
3536

37+
func InitNamespaceData(nsStore *namespaceStore, nsCount int) error {
38+
for i := 0; i < nsCount; i++ {
39+
err := nsStore.AddNamespace(&model.Namespace{
40+
Name: "default" + strconv.Itoa(i),
41+
Comment: nsComment,
42+
Token: nsToken,
43+
Owner: nsOwner,
44+
Valid: true,
45+
CreateTime: time.Now(),
46+
ModifyTime: time.Now(),
47+
})
48+
if nil != err {
49+
return err
50+
}
51+
}
52+
return nil
53+
}
54+
3655
func TestNamespaceStore_AddNamespace(t *testing.T) {
56+
_ = os.RemoveAll("./table.bolt")
3757
handler, err := NewBoltHandler(&BoltConfig{FileName: "./table.bolt"})
3858
if nil != err {
3959
t.Fatal(err)
4060
}
41-
defer handler.Close()
61+
defer func() {
62+
handler.Close()
63+
}()
4264
nsStore := &namespaceStore{handler: handler}
4365
for i := 0; i < nsCount; i++ {
4466
err = nsStore.AddNamespace(&model.Namespace{
@@ -57,12 +79,18 @@ func TestNamespaceStore_AddNamespace(t *testing.T) {
5779
}
5880

5981
func TestNamespaceStore_ListNamespaces(t *testing.T) {
82+
_ = os.RemoveAll("./table.bolt")
6083
handler, err := NewBoltHandler(&BoltConfig{FileName: "./table.bolt"})
6184
if nil != err {
6285
t.Fatal(err)
6386
}
6487
defer handler.Close()
6588
nsStore := &namespaceStore{handler: handler}
89+
90+
if err := InitNamespaceData(nsStore, nsCount); err != nil {
91+
t.Fatal(err)
92+
}
93+
6694
namespaces, err := nsStore.ListNamespaces(nsOwner)
6795
if nil != err {
6896
t.Fatal(err)
@@ -75,13 +103,114 @@ func TestNamespaceStore_ListNamespaces(t *testing.T) {
75103
}
76104
}
77105

106+
func TestNamespaceStore_GetNamespaces(t *testing.T) {
107+
_ = os.RemoveAll("./table.bolt")
108+
handler, err := NewBoltHandler(&BoltConfig{FileName: "./table.bolt"})
109+
if nil != err {
110+
t.Fatal(err)
111+
}
112+
defer handler.Close()
113+
nsStore := &namespaceStore{handler: handler}
114+
115+
if err := InitNamespaceData(nsStore, nsCount); err != nil {
116+
t.Fatal(err)
117+
}
118+
119+
ret, retCnt, err := nsStore.GetNamespaces(map[string][]string{
120+
"": {},
121+
}, 0, nsCount)
122+
123+
if err != nil {
124+
t.Fatal(err)
125+
}
126+
if len(ret) != int(retCnt) {
127+
t.Fatal("len(ret) need equal int(retCnt)")
128+
}
129+
130+
// 只要有一个条件不满足,则对应的条目就不应该查出来
131+
ret, retCnt, err = nsStore.GetNamespaces(map[string][]string{
132+
OwnerAttribute: {"springliao"},
133+
}, 0, nsCount)
134+
135+
if err != nil {
136+
t.Fatal(err)
137+
}
138+
if len(ret) != 0 {
139+
t.Fatal("len(ret) must be zero")
140+
}
141+
142+
ret, retCnt, err = nsStore.GetNamespaces(map[string][]string{
143+
OwnerAttribute: {nsOwner},
144+
NameAttribute: {"springliao"},
145+
}, 0, nsCount)
146+
147+
if err != nil {
148+
t.Fatal(err)
149+
}
150+
if len(ret) != 0 {
151+
t.Fatal("len(ret) must be zero")
152+
}
153+
154+
ret, retCnt, err = nsStore.GetNamespaces(map[string][]string{
155+
OwnerAttribute: {nsOwner},
156+
}, 0, 1)
157+
158+
if err != nil {
159+
t.Fatal(err)
160+
}
161+
if !(len(ret) == 1 && nsCount == int(retCnt)) {
162+
t.Fatalf("len(ret) must be 1 and retCnt must be %d", nsCount)
163+
}
164+
165+
ret, retCnt, err = nsStore.GetNamespaces(map[string][]string{
166+
OwnerAttribute: {nsOwner},
167+
NameAttribute: {"default1"},
168+
}, 0, 1)
169+
170+
if err != nil {
171+
t.Fatal(err)
172+
}
173+
if !(len(ret) == 1 && retCnt == 1) {
174+
t.Fatalf("len(ret) must be 1 and retCnt must be 1, acutal len(ret) %d, retCnt : %d", len(ret), retCnt)
175+
}
176+
177+
ret, retCnt, err = nsStore.GetNamespaces(map[string][]string{
178+
OwnerAttribute: {nsOwner},
179+
}, 3, 1)
180+
181+
if err != nil {
182+
t.Fatal(err)
183+
}
184+
if !(len(ret) == 1 && nsCount == int(retCnt)) {
185+
t.Fatalf("len(ret) must be 1 and retCnt must be %d", nsCount)
186+
}
187+
188+
ret, retCnt, err = nsStore.GetNamespaces(map[string][]string{
189+
OwnerAttribute: {nsOwner},
190+
}, 3, 10)
191+
192+
if err != nil {
193+
t.Fatal(err)
194+
}
195+
if !(len(ret) == 2 && nsCount == int(retCnt)) {
196+
t.Fatalf("len(ret) must be 1 and retCnt must be %d", nsCount)
197+
}
198+
199+
}
200+
78201
func TestNamespaceStore_GetNamespace(t *testing.T) {
202+
_ = os.RemoveAll("./table.bolt")
79203
handler, err := NewBoltHandler(&BoltConfig{FileName: "./table.bolt"})
80204
if nil != err {
81205
t.Fatal(err)
82206
}
83207
defer handler.Close()
84208
nsStore := &namespaceStore{handler: handler}
209+
210+
if err := InitNamespaceData(nsStore, nsCount); err != nil {
211+
t.Fatal(err)
212+
}
213+
85214
for i := 0; i < nsCount; i++ {
86215
name := "default" + strconv.Itoa(i)
87216
ns, err := nsStore.GetNamespace(name)
@@ -95,12 +224,18 @@ func TestNamespaceStore_GetNamespace(t *testing.T) {
95224
}
96225

97226
func TestNamespaceStore_UpdateNamespace(t *testing.T) {
227+
_ = os.RemoveAll("./table.bolt")
98228
handler, err := NewBoltHandler(&BoltConfig{FileName: "./table.bolt"})
99229
if nil != err {
100230
t.Fatal(err)
101231
}
102232
defer handler.Close()
103233
nsStore := &namespaceStore{handler: handler}
234+
235+
if err := InitNamespaceData(nsStore, nsCount); err != nil {
236+
t.Fatal(err)
237+
}
238+
104239
for i := 0; i < nsCount; i++ {
105240
nsRaw := &model.Namespace{
106241
Name: "default" + strconv.Itoa(i),
@@ -129,12 +264,18 @@ func TestNamespaceStore_UpdateNamespace(t *testing.T) {
129264
}
130265

131266
func TestNamespaceStore_UpdateNamespaceToken(t *testing.T) {
267+
_ = os.RemoveAll("./table.bolt")
132268
handler, err := NewBoltHandler(&BoltConfig{FileName: "./table.bolt"})
133269
if nil != err {
134270
t.Fatal(err)
135271
}
136272
defer handler.Close()
137273
nsStore := &namespaceStore{handler: handler}
274+
275+
if err := InitNamespaceData(nsStore, nsCount); err != nil {
276+
t.Fatal(err)
277+
}
278+
138279
for i := 0; i < nsCount; i++ {
139280
name := "default" + strconv.Itoa(i)
140281
token := nsToken + strconv.Itoa(i)
@@ -160,12 +301,17 @@ func TestNamespaceStore_UpdateNamespaceToken(t *testing.T) {
160301
}
161302

162303
func TestNamespaceStore_GetMoreNamespaces(t *testing.T) {
304+
_ = os.RemoveAll("./table.bolt")
163305
handler, err := NewBoltHandler(&BoltConfig{FileName: "./table.bolt"})
164306
if nil != err {
165307
t.Fatal(err)
166308
}
167309
defer handler.Close()
168310
nsStore := &namespaceStore{handler: handler}
311+
if err := InitNamespaceData(nsStore, nsCount); err != nil {
312+
t.Fatal(err)
313+
}
314+
169315
before := time.Now().Add(0 - 1*time.Minute)
170316
namespaces, err := nsStore.GetMoreNamespaces(before)
171317
if nil != err {
@@ -177,12 +323,18 @@ func TestNamespaceStore_GetMoreNamespaces(t *testing.T) {
177323
}
178324

179325
func TestTransaction_LockNamespace(t *testing.T) {
326+
_ = os.RemoveAll("./table.bolt")
180327
handler, err := NewBoltHandler(&BoltConfig{FileName: "./table.bolt"})
181328
if nil != err {
182329
t.Fatal(err)
183330
}
184331
defer handler.Close()
185332
trans := &transaction{handler: handler}
333+
334+
if err := InitNamespaceData(&namespaceStore{handler: handler}, nsCount); err != nil {
335+
t.Fatal(err)
336+
}
337+
186338
defer trans.Commit()
187339
for i := 0; i < nsCount; i++ {
188340
name := "default" + strconv.Itoa(i)
@@ -197,12 +349,19 @@ func TestTransaction_LockNamespace(t *testing.T) {
197349
}
198350

199351
func TestTransaction_DeleteNamespace(t *testing.T) {
352+
_ = os.RemoveAll("./table.bolt")
200353
handler, err := NewBoltHandler(&BoltConfig{FileName: "./table.bolt"})
201354
if nil != err {
202355
t.Fatal(err)
203356
}
204357
defer handler.Close()
205358
trans := &transaction{handler: handler}
359+
360+
nsStore := &namespaceStore{handler: handler}
361+
if err := InitNamespaceData(nsStore, nsCount); err != nil {
362+
t.Fatal(err)
363+
}
364+
206365
for i := 0; i < nsCount; i++ {
207366
name := "default" + strconv.Itoa(i)
208367
err := trans.DeleteNamespace(name)
@@ -215,7 +374,6 @@ func TestTransaction_DeleteNamespace(t *testing.T) {
215374
if nil != err {
216375
t.Fatal(err)
217376
}
218-
nsStore := &namespaceStore{handler: handler}
219377
for i := 0; i < nsCount; i++ {
220378
name := "default" + strconv.Itoa(i)
221379
ns, err := nsStore.GetNamespace(name)

0 commit comments

Comments
 (0)