Skip to content

Commit cc7b273

Browse files
authored
fix: add indexer before init cause npe (#1372)
* fix: add indexer before init cause npe * fix: unit test
1 parent ecd2bdb commit cc7b273

6 files changed

Lines changed: 35 additions & 29 deletions

File tree

pkg/core/store/component.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import (
2323

2424
coremodel "github.com/apache/dubbo-admin/pkg/core/resource/model"
2525
"github.com/apache/dubbo-admin/pkg/core/runtime"
26-
"github.com/apache/dubbo-admin/pkg/core/store/index"
2726
)
2827

2928
func init() {
@@ -77,13 +76,6 @@ func (sc *storeComponent) Init(ctx runtime.BuilderContext) error {
7776
return err
7877
}
7978
sc.stores[kind] = store
80-
indexers := index.IndexersRegistry().Indexers(kind)
81-
if indexers == nil {
82-
continue
83-
}
84-
if err := store.AddIndexers(indexers); err != nil {
85-
return err
86-
}
8779
if err = store.Init(ctx); err != nil {
8880
return err
8981
}

pkg/core/store/index/registry.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ func IndexersRegistry() IndexerRegistry {
3535
}
3636

3737
type IndexerRegistry interface {
38+
// Indexers returns the indexers for the given resource kind
39+
// if no indexers are registered for the resource kind, an empty map is returned
3840
Indexers(model.ResourceKind) cache.Indexers
3941
}
4042

@@ -60,7 +62,10 @@ func newIndexRegistry() MutableIndexerRegistry {
6062
}
6163

6264
func (i *indexerRegistry) Indexers(k model.ResourceKind) cache.Indexers {
63-
return i.rIndexers[k]
65+
if indexers, exists := i.rIndexers[k]; exists && indexers != nil {
66+
return indexers
67+
}
68+
return make(cache.Indexers)
6469
}
6570

6671
func (i *indexerRegistry) Register(k model.ResourceKind, indexers cache.Indexers) {

pkg/store/dbcommon/gorm_store.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/apache/dubbo-admin/pkg/core/resource/model"
3232
"github.com/apache/dubbo-admin/pkg/core/runtime"
3333
"github.com/apache/dubbo-admin/pkg/core/store"
34+
"github.com/apache/dubbo-admin/pkg/core/store/index"
3435
)
3536

3637
// GormStore is a GORM-backed store implementation for Dubbo resources
@@ -65,6 +66,11 @@ func (gs *GormStore) Init(_ runtime.BuilderContext) error {
6566
if err := db.Scopes(TableScope(gs.kind.ToString())).AutoMigrate(&ResourceModel{}); err != nil {
6667
return fmt.Errorf("failed to migrate schema for %s: %w", gs.kind.ToString(), err)
6768
}
69+
// Register indexers for the resource kind
70+
indexers := index.IndexersRegistry().Indexers(gs.kind)
71+
if err := gs.AddIndexers(indexers); err != nil {
72+
return err
73+
}
6874

6975
// Rebuild indices from existing data in the database
7076
if err := gs.rebuildIndices(); err != nil {

pkg/store/memory/factory.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,6 @@ func (sf *storeFactory) Support(s storecfg.Type) bool {
3535
return s == storecfg.Memory
3636
}
3737

38-
func (sf *storeFactory) New(_ coremodel.ResourceKind, _ *storecfg.Config) (store.ManagedResourceStore, error) {
39-
return NewMemoryResourceStore(), nil
38+
func (sf *storeFactory) New(rk coremodel.ResourceKind, _ *storecfg.Config) (store.ManagedResourceStore, error) {
39+
return NewMemoryResourceStore(rk), nil
4040
}

pkg/store/memory/store.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,22 @@ import (
2929
coremodel "github.com/apache/dubbo-admin/pkg/core/resource/model"
3030
"github.com/apache/dubbo-admin/pkg/core/runtime"
3131
"github.com/apache/dubbo-admin/pkg/core/store"
32+
"github.com/apache/dubbo-admin/pkg/core/store/index"
3233
)
3334

3435
type resourceStore struct {
36+
rk coremodel.ResourceKind
3537
storeProxy cache.Indexer
3638
}
3739

3840
var _ store.ManagedResourceStore = &resourceStore{}
3941

40-
func NewMemoryResourceStore() store.ManagedResourceStore {
41-
return &resourceStore{}
42+
func NewMemoryResourceStore(rk coremodel.ResourceKind) store.ManagedResourceStore {
43+
return &resourceStore{rk: rk}
4244
}
4345

4446
func (rs *resourceStore) Init(_ runtime.BuilderContext) error {
47+
indexers := index.IndexersRegistry().Indexers(rs.rk)
4548
rs.storeProxy = cache.NewIndexer(
4649
func(obj interface{}) (string, error) {
4750
r, ok := obj.(coremodel.Resource)
@@ -50,7 +53,7 @@ func (rs *resourceStore) Init(_ runtime.BuilderContext) error {
5053
}
5154
return r.ResourceKey(), nil
5255
},
53-
cache.Indexers{},
56+
indexers,
5457
)
5558
return nil
5659
}

pkg/store/memory/store_test.go

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ func (mr *mockResource) String() string {
7676
}
7777

7878
func TestNewMemoryResourceStore(t *testing.T) {
79-
store := NewMemoryResourceStore()
79+
store := NewMemoryResourceStore("TestResource")
8080
assert.NotNil(t, store)
8181
}
8282

@@ -88,7 +88,7 @@ func TestResourceStore_Init(t *testing.T) {
8888
}
8989

9090
func TestResourceStore_AddAndGet(t *testing.T) {
91-
store := NewMemoryResourceStore()
91+
store := NewMemoryResourceStore("TestResource")
9292
err := store.Init(nil)
9393
assert.NoError(t, err)
9494

@@ -121,7 +121,7 @@ func TestResourceStore_AddAndGet(t *testing.T) {
121121
}
122122

123123
func TestResourceStore_Update(t *testing.T) {
124-
store := NewMemoryResourceStore()
124+
store := NewMemoryResourceStore("TestResource")
125125
err := store.Init(nil)
126126
assert.NoError(t, err)
127127

@@ -163,7 +163,7 @@ func TestResourceStore_Update(t *testing.T) {
163163
}
164164

165165
func TestResourceStore_Delete(t *testing.T) {
166-
store := NewMemoryResourceStore()
166+
store := NewMemoryResourceStore("TestResource")
167167
err := store.Init(nil)
168168
assert.NoError(t, err)
169169

@@ -193,7 +193,7 @@ func TestResourceStore_Delete(t *testing.T) {
193193
}
194194

195195
func TestResourceStore_List(t *testing.T) {
196-
store := NewMemoryResourceStore()
196+
store := NewMemoryResourceStore("TestResource")
197197
err := store.Init(nil)
198198
assert.NoError(t, err)
199199

@@ -226,7 +226,7 @@ func TestResourceStore_List(t *testing.T) {
226226
}
227227

228228
func TestResourceStore_ListKeys(t *testing.T) {
229-
store := NewMemoryResourceStore()
229+
store := NewMemoryResourceStore("TestResource")
230230
err := store.Init(nil)
231231
assert.NoError(t, err)
232232

@@ -259,7 +259,7 @@ func TestResourceStore_ListKeys(t *testing.T) {
259259
}
260260

261261
func TestResourceStore_Replace(t *testing.T) {
262-
store := NewMemoryResourceStore()
262+
store := NewMemoryResourceStore("TestResource")
263263
err := store.Init(nil)
264264
assert.NoError(t, err)
265265

@@ -295,7 +295,7 @@ func TestResourceStore_Replace(t *testing.T) {
295295
}
296296

297297
func TestResourceStore_GetByKeys(t *testing.T) {
298-
store := NewMemoryResourceStore()
298+
store := NewMemoryResourceStore("TestResource")
299299
err := store.Init(nil)
300300
assert.NoError(t, err)
301301

@@ -331,7 +331,7 @@ func TestResourceStore_GetByKeys(t *testing.T) {
331331
}
332332

333333
func TestResourceStore_ListByIndexes(t *testing.T) {
334-
store := NewMemoryResourceStore()
334+
store := NewMemoryResourceStore("TestResource")
335335
err := store.Init(nil)
336336
assert.NoError(t, err)
337337

@@ -386,7 +386,7 @@ func TestResourceStore_ListByIndexes(t *testing.T) {
386386
}
387387

388388
func TestResourceStore_PageListByIndexes(t *testing.T) {
389-
store := NewMemoryResourceStore()
389+
store := NewMemoryResourceStore("TestResource")
390390
err := store.Init(nil)
391391
assert.NoError(t, err)
392392

@@ -467,7 +467,7 @@ func TestResourceStore_PageListByIndexes(t *testing.T) {
467467
}
468468

469469
func TestResourceStore_MultipleIndexes(t *testing.T) {
470-
store := NewMemoryResourceStore()
470+
store := NewMemoryResourceStore("TestResource")
471471
err := store.Init(nil)
472472
assert.NoError(t, err)
473473

@@ -558,7 +558,7 @@ func TestResourceStore_MultipleIndexes(t *testing.T) {
558558
}
559559

560560
func TestResourceStore_IndexKeys(t *testing.T) {
561-
store := NewMemoryResourceStore()
561+
store := NewMemoryResourceStore("TestResource")
562562
err := store.Init(nil)
563563
assert.NoError(t, err)
564564

@@ -631,7 +631,7 @@ func TestResourceStore_IndexKeys(t *testing.T) {
631631
}
632632

633633
func TestResourceStore_ByIndex(t *testing.T) {
634-
store := NewMemoryResourceStore()
634+
store := NewMemoryResourceStore("TestResource")
635635
err := store.Init(nil)
636636
assert.NoError(t, err)
637637

@@ -690,7 +690,7 @@ func TestResourceStore_ByIndex(t *testing.T) {
690690
}
691691

692692
func TestResourceStore_GetIndexers(t *testing.T) {
693-
store := NewMemoryResourceStore()
693+
store := NewMemoryResourceStore("TestResource")
694694
err := store.Init(nil)
695695
assert.NoError(t, err)
696696

@@ -718,7 +718,7 @@ func TestResourceStore_GetIndexers(t *testing.T) {
718718
}
719719

720720
func TestResourceStore_ListIndexFuncValues(t *testing.T) {
721-
store := NewMemoryResourceStore()
721+
store := NewMemoryResourceStore("TestResource")
722722
err := store.Init(nil)
723723
assert.NoError(t, err)
724724

0 commit comments

Comments
 (0)