This is an automated email from the ASF dual-hosted git repository.
robocanic pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/dubbo-admin.git
The following commit(s) were added to refs/heads/develop by this push:
new cc7b273a fix: add indexer before init cause npe (#1372)
cc7b273a is described below
commit cc7b273adf86fcf741d012c41e7d75d8c84d2a4f
Author: robb <[email protected]>
AuthorDate: Sat Dec 20 16:08:16 2025 +0800
fix: add indexer before init cause npe (#1372)
* fix: add indexer before init cause npe
* fix: unit test
---
pkg/core/store/component.go | 8 --------
pkg/core/store/index/registry.go | 7 ++++++-
pkg/store/dbcommon/gorm_store.go | 6 ++++++
pkg/store/memory/factory.go | 4 ++--
pkg/store/memory/store.go | 9 ++++++---
pkg/store/memory/store_test.go | 30 +++++++++++++++---------------
6 files changed, 35 insertions(+), 29 deletions(-)
diff --git a/pkg/core/store/component.go b/pkg/core/store/component.go
index 808bc473..3fbc0b3f 100644
--- a/pkg/core/store/component.go
+++ b/pkg/core/store/component.go
@@ -23,7 +23,6 @@ import (
coremodel "github.com/apache/dubbo-admin/pkg/core/resource/model"
"github.com/apache/dubbo-admin/pkg/core/runtime"
- "github.com/apache/dubbo-admin/pkg/core/store/index"
)
func init() {
@@ -77,13 +76,6 @@ func (sc *storeComponent) Init(ctx runtime.BuilderContext)
error {
return err
}
sc.stores[kind] = store
- indexers := index.IndexersRegistry().Indexers(kind)
- if indexers == nil {
- continue
- }
- if err := store.AddIndexers(indexers); err != nil {
- return err
- }
if err = store.Init(ctx); err != nil {
return err
}
diff --git a/pkg/core/store/index/registry.go b/pkg/core/store/index/registry.go
index ea579c71..cef06ce6 100644
--- a/pkg/core/store/index/registry.go
+++ b/pkg/core/store/index/registry.go
@@ -35,6 +35,8 @@ func IndexersRegistry() IndexerRegistry {
}
type IndexerRegistry interface {
+ // Indexers returns the indexers for the given resource kind
+ // if no indexers are registered for the resource kind, an empty map is
returned
Indexers(model.ResourceKind) cache.Indexers
}
@@ -60,7 +62,10 @@ func newIndexRegistry() MutableIndexerRegistry {
}
func (i *indexerRegistry) Indexers(k model.ResourceKind) cache.Indexers {
- return i.rIndexers[k]
+ if indexers, exists := i.rIndexers[k]; exists && indexers != nil {
+ return indexers
+ }
+ return make(cache.Indexers)
}
func (i *indexerRegistry) Register(k model.ResourceKind, indexers
cache.Indexers) {
diff --git a/pkg/store/dbcommon/gorm_store.go b/pkg/store/dbcommon/gorm_store.go
index 3daed7cf..bd52c893 100644
--- a/pkg/store/dbcommon/gorm_store.go
+++ b/pkg/store/dbcommon/gorm_store.go
@@ -31,6 +31,7 @@ import (
"github.com/apache/dubbo-admin/pkg/core/resource/model"
"github.com/apache/dubbo-admin/pkg/core/runtime"
"github.com/apache/dubbo-admin/pkg/core/store"
+ "github.com/apache/dubbo-admin/pkg/core/store/index"
)
// GormStore is a GORM-backed store implementation for Dubbo resources
@@ -65,6 +66,11 @@ func (gs *GormStore) Init(_ runtime.BuilderContext) error {
if err :=
db.Scopes(TableScope(gs.kind.ToString())).AutoMigrate(&ResourceModel{}); err !=
nil {
return fmt.Errorf("failed to migrate schema for %s: %w",
gs.kind.ToString(), err)
}
+ // Register indexers for the resource kind
+ indexers := index.IndexersRegistry().Indexers(gs.kind)
+ if err := gs.AddIndexers(indexers); err != nil {
+ return err
+ }
// Rebuild indices from existing data in the database
if err := gs.rebuildIndices(); err != nil {
diff --git a/pkg/store/memory/factory.go b/pkg/store/memory/factory.go
index 564b32d1..3e53f294 100644
--- a/pkg/store/memory/factory.go
+++ b/pkg/store/memory/factory.go
@@ -35,6 +35,6 @@ func (sf *storeFactory) Support(s storecfg.Type) bool {
return s == storecfg.Memory
}
-func (sf *storeFactory) New(_ coremodel.ResourceKind, _ *storecfg.Config)
(store.ManagedResourceStore, error) {
- return NewMemoryResourceStore(), nil
+func (sf *storeFactory) New(rk coremodel.ResourceKind, _ *storecfg.Config)
(store.ManagedResourceStore, error) {
+ return NewMemoryResourceStore(rk), nil
}
diff --git a/pkg/store/memory/store.go b/pkg/store/memory/store.go
index e522cb06..fa0b3a6b 100644
--- a/pkg/store/memory/store.go
+++ b/pkg/store/memory/store.go
@@ -29,19 +29,22 @@ import (
coremodel "github.com/apache/dubbo-admin/pkg/core/resource/model"
"github.com/apache/dubbo-admin/pkg/core/runtime"
"github.com/apache/dubbo-admin/pkg/core/store"
+ "github.com/apache/dubbo-admin/pkg/core/store/index"
)
type resourceStore struct {
+ rk coremodel.ResourceKind
storeProxy cache.Indexer
}
var _ store.ManagedResourceStore = &resourceStore{}
-func NewMemoryResourceStore() store.ManagedResourceStore {
- return &resourceStore{}
+func NewMemoryResourceStore(rk coremodel.ResourceKind)
store.ManagedResourceStore {
+ return &resourceStore{rk: rk}
}
func (rs *resourceStore) Init(_ runtime.BuilderContext) error {
+ indexers := index.IndexersRegistry().Indexers(rs.rk)
rs.storeProxy = cache.NewIndexer(
func(obj interface{}) (string, error) {
r, ok := obj.(coremodel.Resource)
@@ -50,7 +53,7 @@ func (rs *resourceStore) Init(_ runtime.BuilderContext) error
{
}
return r.ResourceKey(), nil
},
- cache.Indexers{},
+ indexers,
)
return nil
}
diff --git a/pkg/store/memory/store_test.go b/pkg/store/memory/store_test.go
index 0596926e..8f425000 100644
--- a/pkg/store/memory/store_test.go
+++ b/pkg/store/memory/store_test.go
@@ -76,7 +76,7 @@ func (mr *mockResource) String() string {
}
func TestNewMemoryResourceStore(t *testing.T) {
- store := NewMemoryResourceStore()
+ store := NewMemoryResourceStore("TestResource")
assert.NotNil(t, store)
}
@@ -88,7 +88,7 @@ func TestResourceStore_Init(t *testing.T) {
}
func TestResourceStore_AddAndGet(t *testing.T) {
- store := NewMemoryResourceStore()
+ store := NewMemoryResourceStore("TestResource")
err := store.Init(nil)
assert.NoError(t, err)
@@ -121,7 +121,7 @@ func TestResourceStore_AddAndGet(t *testing.T) {
}
func TestResourceStore_Update(t *testing.T) {
- store := NewMemoryResourceStore()
+ store := NewMemoryResourceStore("TestResource")
err := store.Init(nil)
assert.NoError(t, err)
@@ -163,7 +163,7 @@ func TestResourceStore_Update(t *testing.T) {
}
func TestResourceStore_Delete(t *testing.T) {
- store := NewMemoryResourceStore()
+ store := NewMemoryResourceStore("TestResource")
err := store.Init(nil)
assert.NoError(t, err)
@@ -193,7 +193,7 @@ func TestResourceStore_Delete(t *testing.T) {
}
func TestResourceStore_List(t *testing.T) {
- store := NewMemoryResourceStore()
+ store := NewMemoryResourceStore("TestResource")
err := store.Init(nil)
assert.NoError(t, err)
@@ -226,7 +226,7 @@ func TestResourceStore_List(t *testing.T) {
}
func TestResourceStore_ListKeys(t *testing.T) {
- store := NewMemoryResourceStore()
+ store := NewMemoryResourceStore("TestResource")
err := store.Init(nil)
assert.NoError(t, err)
@@ -259,7 +259,7 @@ func TestResourceStore_ListKeys(t *testing.T) {
}
func TestResourceStore_Replace(t *testing.T) {
- store := NewMemoryResourceStore()
+ store := NewMemoryResourceStore("TestResource")
err := store.Init(nil)
assert.NoError(t, err)
@@ -295,7 +295,7 @@ func TestResourceStore_Replace(t *testing.T) {
}
func TestResourceStore_GetByKeys(t *testing.T) {
- store := NewMemoryResourceStore()
+ store := NewMemoryResourceStore("TestResource")
err := store.Init(nil)
assert.NoError(t, err)
@@ -331,7 +331,7 @@ func TestResourceStore_GetByKeys(t *testing.T) {
}
func TestResourceStore_ListByIndexes(t *testing.T) {
- store := NewMemoryResourceStore()
+ store := NewMemoryResourceStore("TestResource")
err := store.Init(nil)
assert.NoError(t, err)
@@ -386,7 +386,7 @@ func TestResourceStore_ListByIndexes(t *testing.T) {
}
func TestResourceStore_PageListByIndexes(t *testing.T) {
- store := NewMemoryResourceStore()
+ store := NewMemoryResourceStore("TestResource")
err := store.Init(nil)
assert.NoError(t, err)
@@ -467,7 +467,7 @@ func TestResourceStore_PageListByIndexes(t *testing.T) {
}
func TestResourceStore_MultipleIndexes(t *testing.T) {
- store := NewMemoryResourceStore()
+ store := NewMemoryResourceStore("TestResource")
err := store.Init(nil)
assert.NoError(t, err)
@@ -558,7 +558,7 @@ func TestResourceStore_MultipleIndexes(t *testing.T) {
}
func TestResourceStore_IndexKeys(t *testing.T) {
- store := NewMemoryResourceStore()
+ store := NewMemoryResourceStore("TestResource")
err := store.Init(nil)
assert.NoError(t, err)
@@ -631,7 +631,7 @@ func TestResourceStore_IndexKeys(t *testing.T) {
}
func TestResourceStore_ByIndex(t *testing.T) {
- store := NewMemoryResourceStore()
+ store := NewMemoryResourceStore("TestResource")
err := store.Init(nil)
assert.NoError(t, err)
@@ -690,7 +690,7 @@ func TestResourceStore_ByIndex(t *testing.T) {
}
func TestResourceStore_GetIndexers(t *testing.T) {
- store := NewMemoryResourceStore()
+ store := NewMemoryResourceStore("TestResource")
err := store.Init(nil)
assert.NoError(t, err)
@@ -718,7 +718,7 @@ func TestResourceStore_GetIndexers(t *testing.T) {
}
func TestResourceStore_ListIndexFuncValues(t *testing.T) {
- store := NewMemoryResourceStore()
+ store := NewMemoryResourceStore("TestResource")
err := store.Init(nil)
assert.NoError(t, err)