Skip to content

Commit 216b049

Browse files
committed
storage: merge resource and version fields in StorageConfig
Signed-off-by: Iceber Gu <[email protected]>
1 parent 83cb0f0 commit 216b049

File tree

9 files changed

+74
-92
lines changed

9 files changed

+74
-92
lines changed

pkg/apiserver/registry/clusterpedia/collectionresources/rest.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,9 @@ func NewREST(serializer runtime.NegotiatedSerializer, factory storage.StorageFac
5959
}
6060

6161
*rt = internal.CollectionResourceType{
62-
Group: config.StorageGroupResource.Group,
63-
Version: config.StorageVersion.Version,
64-
Resource: config.StorageGroupResource.Resource,
62+
Group: config.StorageResource.Group,
63+
Version: config.StorageResource.Version,
64+
Resource: config.StorageResource.Resource,
6565
}
6666
}
6767
}

pkg/kubeapiserver/restmanager.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -284,11 +284,11 @@ func (m *RESTManager) genLegacyResourceRESTStorage(gvr schema.GroupVersionResour
284284
DefaultQualifiedResource: gvr.GroupResource(),
285285

286286
NewFunc: func() runtime.Object {
287-
obj, _ := scheme.LegacyResourceScheme.New(storageConfig.MemoryVersion.WithKind(kind))
287+
obj, _ := scheme.LegacyResourceScheme.New(storageConfig.MemoryResource.GroupVersion().WithKind(kind))
288288
return obj
289289
},
290290
NewListFunc: func() runtime.Object {
291-
obj, _ := scheme.LegacyResourceScheme.New(storageConfig.MemoryVersion.WithKind(kind + "List"))
291+
obj, _ := scheme.LegacyResourceScheme.New(storageConfig.MemoryResource.GroupVersion().WithKind(kind + "List"))
292292
return obj
293293
},
294294

@@ -310,12 +310,12 @@ func (m *RESTManager) genUnstructuredRESTStorage(gvr schema.GroupVersionResource
310310
return &resourcerest.RESTStorage{
311311
NewFunc: func() runtime.Object {
312312
obj := &unstructured.Unstructured{}
313-
obj.SetGroupVersionKind(storageConfig.MemoryVersion.WithKind(kind))
313+
obj.SetGroupVersionKind(storageConfig.MemoryResource.GroupVersion().WithKind(kind))
314314
return obj
315315
},
316316
NewListFunc: func() runtime.Object {
317317
obj := &unstructured.UnstructuredList{}
318-
obj.SetGroupVersionKind(storageConfig.MemoryVersion.WithKind(kind + "List"))
318+
obj.SetGroupVersionKind(storageConfig.MemoryResource.GroupVersion().WithKind(kind + "List"))
319319
return obj
320320
},
321321

pkg/storage/internalstorage/resource_storage.go

Lines changed: 39 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,33 @@ import (
2727
)
2828

2929
type ResourceStorage struct {
30-
db *gorm.DB
31-
codec runtime.Codec
30+
groupResource schema.GroupResource
3231

33-
storageGroupResource schema.GroupResource
34-
storageVersion schema.GroupVersion
35-
memoryVersion schema.GroupVersion
32+
db *gorm.DB
33+
config storage.ResourceStorageConfig
3634
}
3735

3836
func (s *ResourceStorage) GetStorageConfig() *storage.ResourceStorageConfig {
39-
return &storage.ResourceStorageConfig{
40-
Codec: s.codec,
41-
StorageGroupResource: s.storageGroupResource,
42-
StorageVersion: s.storageVersion,
43-
MemoryVersion: s.memoryVersion,
37+
config := s.config
38+
return &config
39+
}
40+
41+
func (s *ResourceStorage) gvrKeyMap() map[string]interface{} {
42+
return map[string]interface{}{
43+
"group": s.config.StorageResource.Group,
44+
"version": s.config.StorageResource.Version,
45+
"resource": s.config.StorageResource.Resource,
46+
}
47+
}
48+
49+
func (s *ResourceStorage) resourceKeyMap(cluster, namespace, name string) map[string]interface{} {
50+
return map[string]interface{}{
51+
"cluster": cluster,
52+
"group": s.config.StorageResource.Group,
53+
"version": s.config.StorageResource.Version,
54+
"resource": s.config.StorageResource.Resource,
55+
"namespace": namespace,
56+
"name": name,
4457
}
4558
}
4659

@@ -61,7 +74,7 @@ func (s *ResourceStorage) Create(ctx context.Context, cluster string, obj runtim
6174
}
6275

6376
var buffer bytes.Buffer
64-
if err := s.codec.Encode(obj, &buffer); err != nil {
77+
if err := s.config.Codec.Encode(obj, &buffer); err != nil {
6578
return err
6679
}
6780

@@ -71,9 +84,9 @@ func (s *ResourceStorage) Create(ctx context.Context, cluster string, obj runtim
7184
UID: metaobj.GetUID(),
7285
Name: metaobj.GetName(),
7386
Namespace: metaobj.GetNamespace(),
74-
Group: s.storageGroupResource.Group,
75-
Resource: s.storageGroupResource.Resource,
76-
Version: s.storageVersion.Version,
87+
Group: s.config.StorageResource.Group,
88+
Resource: s.config.StorageResource.Resource,
89+
Version: s.config.StorageResource.Version,
7790
Kind: gvk.Kind,
7891
ResourceVersion: metaobj.GetResourceVersion(),
7992
Object: buffer.Bytes(),
@@ -94,7 +107,7 @@ func (s *ResourceStorage) Update(ctx context.Context, cluster string, obj runtim
94107
}
95108

96109
var buffer bytes.Buffer
97-
if err := s.codec.Encode(obj, &buffer); err != nil {
110+
if err := s.config.Codec.Encode(obj, &buffer); err != nil {
98111
return err
99112
}
100113

@@ -116,14 +129,9 @@ func (s *ResourceStorage) Update(ctx context.Context, cluster string, obj runtim
116129
updatedResource["deleted_at"] = sql.NullTime{Time: deletedAt.Time, Valid: true}
117130
}
118131

119-
result := s.db.WithContext(ctx).Model(&Resource{}).Where(map[string]interface{}{
120-
"cluster": cluster,
121-
"group": s.storageGroupResource.Group,
122-
"version": s.storageVersion.Version,
123-
"resource": s.storageGroupResource.Resource,
124-
"namespace": metaobj.GetNamespace(),
125-
"name": metaobj.GetName(),
126-
}).Updates(updatedResource)
132+
result := s.db.WithContext(ctx).Model(&Resource{}).
133+
Where(s.resourceKeyMap(cluster, metaobj.GetNamespace(), metaobj.GetName())).
134+
Updates(updatedResource)
127135
return InterpretResourceDBError(cluster, metaobj.GetName(), result.Error)
128136
}
129137

@@ -144,14 +152,7 @@ func (s *ResourceStorage) ConvertDeletedObject(obj interface{}) (runtime.Object,
144152
}
145153

146154
func (s *ResourceStorage) deleteObject(cluster, namespace, name string) *gorm.DB {
147-
return s.db.Model(&Resource{}).Where(map[string]interface{}{
148-
"cluster": cluster,
149-
"group": s.storageGroupResource.Group,
150-
"version": s.storageVersion.Version,
151-
"resource": s.storageGroupResource.Resource,
152-
"namespace": namespace,
153-
"name": name,
154-
}).Delete(&Resource{})
155+
return s.db.Model(&Resource{}).Where(s.resourceKeyMap(cluster, namespace, name)).Delete(&Resource{})
155156
}
156157

157158
func (s *ResourceStorage) Delete(ctx context.Context, cluster string, obj runtime.Object) error {
@@ -167,14 +168,7 @@ func (s *ResourceStorage) Delete(ctx context.Context, cluster string, obj runtim
167168
}
168169

169170
func (s *ResourceStorage) genGetObjectQuery(ctx context.Context, cluster, namespace, name string) *gorm.DB {
170-
return s.db.WithContext(ctx).Model(&Resource{}).Select("object").Where(map[string]interface{}{
171-
"cluster": cluster,
172-
"group": s.storageGroupResource.Group,
173-
"version": s.storageVersion.Version,
174-
"resource": s.storageGroupResource.Resource,
175-
"namespace": namespace,
176-
"name": name,
177-
})
171+
return s.db.WithContext(ctx).Model(&Resource{}).Select("object").Where(s.resourceKeyMap(cluster, namespace, name))
178172
}
179173

180174
func (s *ResourceStorage) Get(ctx context.Context, cluster, namespace, name string, into runtime.Object) error {
@@ -183,7 +177,7 @@ func (s *ResourceStorage) Get(ctx context.Context, cluster, namespace, name stri
183177
return InterpretResourceDBError(cluster, namespace+"/"+name, result.Error)
184178
}
185179

186-
obj, _, err := s.codec.Decode(objects[0], nil, into)
180+
obj, _, err := s.config.Codec.Decode(objects[0], nil, into)
187181
if err != nil {
188182
return err
189183
}
@@ -199,12 +193,7 @@ func (s *ResourceStorage) genListObjectsQuery(ctx context.Context, opts *interna
199193
result = &ResourceMetadataList{}
200194
}
201195

202-
query := s.db.WithContext(ctx).Model(&Resource{})
203-
query = query.Where(map[string]interface{}{
204-
"group": s.storageGroupResource.Group,
205-
"version": s.storageVersion.Version,
206-
"resource": s.storageGroupResource.Resource,
207-
})
196+
query := s.db.WithContext(ctx).Model(&Resource{}).Where(s.gvrKeyMap())
208197
offset, amount, query, err := applyListOptionsToResourceQuery(s.db, query, opts)
209198
return offset, amount, query, result, err
210199
}
@@ -216,7 +205,7 @@ func (s *ResourceStorage) List(ctx context.Context, listObject runtime.Object, o
216205
}
217206

218207
if err := result.From(query); err != nil {
219-
return InterpretDBError(s.storageGroupResource.String(), err)
208+
return InterpretDBError(s.groupResource.String(), err)
220209
}
221210
objects := result.Items()
222211

@@ -246,7 +235,7 @@ func (s *ResourceStorage) List(ctx context.Context, listObject runtime.Object, o
246235
unstructuredList.Items = make([]unstructured.Unstructured, 0, len(objects))
247236
for _, object := range objects {
248237
uObj := &unstructured.Unstructured{}
249-
obj, err := object.ConvertTo(s.codec, uObj)
238+
obj, err := object.ConvertTo(s.config.Codec, uObj)
250239
if err != nil {
251240
return err
252241
}
@@ -283,7 +272,7 @@ func (s *ResourceStorage) List(ctx context.Context, listObject runtime.Object, o
283272
slice := reflect.MakeSlice(v.Type(), len(objects), len(objects))
284273
expected := reflect.New(v.Type().Elem()).Interface().(runtime.Object)
285274
for i, object := range objects {
286-
obj, err := object.ConvertTo(s.codec, expected.DeepCopyObject())
275+
obj, err := object.ConvertTo(s.config.Codec, expected.DeepCopyObject())
287276
if err != nil {
288277
return err
289278
}
@@ -294,7 +283,7 @@ func (s *ResourceStorage) List(ctx context.Context, listObject runtime.Object, o
294283
}
295284

296285
func (s *ResourceStorage) Watch(_ context.Context, _ *internal.ListOptions) (watch.Interface, error) {
297-
return nil, apierrors.NewMethodNotSupported(s.storageGroupResource, "watch")
286+
return nil, apierrors.NewMethodNotSupported(s.groupResource, "watch")
298287
}
299288

300289
func applyListOptionsToResourceQuery(db *gorm.DB, query *gorm.DB, opts *internal.ListOptions) (int64, *int64, *gorm.DB, error) {

pkg/storage/internalstorage/storage.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,10 @@ func (s *StorageFactory) GetSupportedRequestVerbs() []string {
2121

2222
func (s *StorageFactory) NewResourceStorage(config *storage.ResourceStorageConfig) (storage.ResourceStorage, error) {
2323
return &ResourceStorage{
24-
db: s.db,
25-
codec: config.Codec,
24+
groupResource: config.StorageResource.GroupResource(),
2625

27-
storageGroupResource: config.StorageGroupResource,
28-
storageVersion: config.StorageVersion,
29-
memoryVersion: config.MemoryVersion,
26+
db: s.db,
27+
config: *config,
3028
}, nil
3129
}
3230

pkg/storage/memorystorage/memory_resource_storage.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ type ResourceStorage struct {
5050
CrvSynchro *cache.ClusterResourceVersionSynchro
5151
incoming chan ClusterWatchEvent
5252
storageConfig *storage.ResourceStorageConfig
53+
memoryVersion schema.GroupVersion
5354
}
5455

5556
func (s *ResourceStorage) GetStorageConfig() *storage.ResourceStorageConfig {
@@ -62,7 +63,7 @@ func (s *ResourceStorage) Create(ctx context.Context, cluster string, obj runtim
6263
return err
6364
}
6465

65-
err = s.watchCache.Add(obj, cluster, resourceVersion, s.storageConfig.Codec, s.storageConfig.MemoryVersion)
66+
err = s.watchCache.Add(obj, cluster, resourceVersion, s.storageConfig.Codec, s.memoryVersion)
6667
if err != nil {
6768
utilruntime.HandleError(fmt.Errorf("unable to add watch event object (%#v) to store: %v", obj, err))
6869
}
@@ -76,7 +77,7 @@ func (s *ResourceStorage) Update(ctx context.Context, cluster string, obj runtim
7677
return err
7778
}
7879

79-
err = s.watchCache.Update(obj, cluster, resourceVersion, s.storageConfig.Codec, s.storageConfig.MemoryVersion)
80+
err = s.watchCache.Update(obj, cluster, resourceVersion, s.storageConfig.Codec, s.memoryVersion)
8081
if err != nil {
8182
utilruntime.HandleError(fmt.Errorf("unable to add watch event object (%#v) to store: %v", obj, err))
8283
}
@@ -108,7 +109,7 @@ func (s *ResourceStorage) Delete(ctx context.Context, cluster string, obj runtim
108109
return err
109110
}
110111

111-
err = s.watchCache.Delete(obj, cluster, resourceVersion, s.storageConfig.Codec, s.storageConfig.MemoryVersion)
112+
err = s.watchCache.Delete(obj, cluster, resourceVersion, s.storageConfig.Codec, s.memoryVersion)
112113
if err != nil {
113114
utilruntime.HandleError(fmt.Errorf("unable to add watch event object (%#v) to store: %v", obj, err))
114115
}

pkg/storage/memorystorage/memory_storage.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,7 @@ func (s *StorageFactory) NewResourceStorage(config *storage.ResourceStorageConfi
2222
storages.Lock()
2323
defer storages.Unlock()
2424

25-
gvr := schema.GroupVersionResource{
26-
Group: config.GroupResource.Group,
27-
Version: config.StorageVersion.Version,
28-
Resource: config.GroupResource.Resource,
29-
}
30-
25+
gvr := config.StorageResource
3126
resourceStorage, ok := storages.resourceStorages[gvr]
3227
if ok {
3328
watchCache := resourceStorage.watchCache
@@ -42,6 +37,7 @@ func (s *StorageFactory) NewResourceStorage(config *storage.ResourceStorageConfi
4237
Codec: config.Codec,
4338
watchCache: watchCache,
4439
storageConfig: config,
40+
memoryVersion: config.MemoryResource.GroupVersion(),
4541
}
4642

4743
storages.resourceStorages[gvr] = resourceStorage

pkg/storage/storage.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,11 @@ type CollectionResourceStorage interface {
4646
}
4747

4848
type ResourceStorageConfig struct {
49-
Namespaced bool
49+
Namespaced bool
50+
GroupResource schema.GroupResource
5051

51-
GroupResource schema.GroupResource
52-
StorageGroupResource schema.GroupResource
53-
54-
MemoryVersion schema.GroupVersion
55-
StorageVersion schema.GroupVersion
52+
StorageResource schema.GroupVersionResource
53+
MemoryResource schema.GroupVersionResource
5654

5755
Codec runtime.Codec
5856
}

pkg/storageconfig/storageconfig_factory.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,12 @@ func (g *StorageConfigFactory) NewUnstructuredConfig(gvr schema.GroupVersionReso
8080
"unstructuredObjectStorage",
8181
)
8282
return &storage.ResourceStorageConfig{
83-
GroupResource: gvr.GroupResource(),
84-
StorageGroupResource: gvr.GroupResource(),
85-
Codec: codec,
86-
StorageVersion: version,
87-
MemoryVersion: version,
88-
Namespaced: namespaced,
83+
Namespaced: namespaced,
84+
GroupResource: gvr.GroupResource(),
85+
86+
StorageResource: gvr,
87+
MemoryResource: gvr,
88+
Codec: codec,
8989
}, nil
9090
}
9191

@@ -113,11 +113,11 @@ func (g *StorageConfigFactory) NewLegacyResourceConfig(gr schema.GroupResource,
113113
}
114114

115115
return &storage.ResourceStorageConfig{
116-
GroupResource: gr,
117-
StorageGroupResource: chosenStorageResource,
118-
Codec: codec,
119-
StorageVersion: codecConfig.StorageVersion,
120-
MemoryVersion: memoryVersion,
121-
Namespaced: namespaced,
116+
Namespaced: namespaced,
117+
GroupResource: gr,
118+
119+
StorageResource: chosenStorageResource.WithVersion(storageVersion.Version),
120+
MemoryResource: chosenStorageResource.WithVersion(memoryVersion.Version),
121+
Codec: codec,
122122
}, nil
123123
}

pkg/synchromanager/clustersynchro/resource_negotiator.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,10 +132,10 @@ func (negotiator *ResourceNegotiator) NegotiateSyncResources(syncResources []clu
132132
continue
133133
}
134134

135-
storageGVR := storageConfig.StorageGroupResource.WithVersion(storageConfig.StorageVersion.Version)
135+
storageGVR := storageConfig.StorageResource
136136
syncCondition.StorageVersion = storageGVR.Version
137-
if syncGR != storageConfig.StorageGroupResource {
138-
syncCondition.StorageResource = storageConfig.StorageGroupResource.String()
137+
if syncGR != storageGVR.GroupResource() {
138+
syncCondition.StorageResource = storageGVR.GroupResource().String()
139139
}
140140
groupResourceStatus.addSyncCondition(syncGVR, syncCondition)
141141

0 commit comments

Comments
 (0)