Skip to content

Commit cea721e

Browse files
fix: fix type mismatch and index issues in service search and metadata sync
1. pkg/console/service/service.go:132 - fix generic type mismatch with resourceKind - generic ServiceResource should use ServiceKind, was incorrectly passing ServiceProviderMetadataKind - index changed from ByServiceProviderServiceName to ByServiceName (aligned with ServiceKind) 2. pkg/core/discovery/subscriber/service_provider_metadata.go - processUpdate: remove redundant oldRes key check (oldKey always equals newKey in same resource update, else branch is unreachable dead code) - syncService: use ByServiceProviderServiceKey index instead of ByServiceProviderServiceName + manual version/group filtering, reduces data returned from DB and improves performance Ref: [1460](#1460 (comment))
1 parent 822cd01 commit cea721e

2 files changed

Lines changed: 10 additions & 24 deletions

File tree

pkg/console/service/service.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,20 +131,22 @@ func SearchServices(ctx consolectx.Context, req *model.ServiceSearchReq) (*model
131131
func SearchServicesByKeywords(ctx consolectx.Context, req *model.ServiceSearchReq) (*model.SearchPaginationResult, error) {
132132
pageData, err := manager.PageListByIndexes[*meshresource.ServiceResource](
133133
ctx.ResourceManager(),
134-
meshresource.ServiceProviderMetadataKind,
134+
meshresource.ServiceKind,
135135
[]index.IndexCondition{
136136
{IndexName: index.ByMeshIndex, Value: req.Mesh, Operator: index.Equals},
137-
{IndexName: index.ByServiceProviderServiceName, Value: req.Keywords, Operator: index.HasPrefix},
137+
{IndexName: index.ByServiceName, Value: req.Keywords, Operator: index.HasPrefix},
138138
},
139139
req.PageReq,
140140
)
141141
if err != nil {
142142
return nil, err
143143
}
144-
searchRespList := slice.Map(pageData.Data,
144+
searchRespList := slice.Map(
145+
pageData.Data,
145146
func(_ int, item *meshresource.ServiceResource) *model.ServiceSearchResp {
146147
return ToServiceSearchRespByService(item)
147-
})
148+
},
149+
)
148150
return &model.SearchPaginationResult{
149151
List: searchRespList,
150152
PageInfo: pageData.Pagination,

pkg/core/discovery/subscriber/service_provider_metadata.go

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func (s *ServiceProviderMetadataEventSubscriber) ProcessEvent(event events.Event
8787
logger.Errorf(errStr)
8888
return bizerror.New(bizerror.EventError, errStr)
8989
}
90-
processErr = s.processUpdate(oldObj, newObj)
90+
processErr = s.processUpdate(newObj)
9191
case cache.Deleted:
9292
if oldObj == nil {
9393
errStr := "process provider metadata resource delete event, but old obj is nil, skipped processing"
@@ -121,24 +121,13 @@ func (s *ServiceProviderMetadataEventSubscriber) processDelete(r *meshresource.S
121121
return s.syncService(r.Mesh, r.Spec.ServiceName, r.Spec.Version, r.Spec.Group)
122122
}
123123

124-
func (s *ServiceProviderMetadataEventSubscriber) processUpdate(oldRes, newRes *meshresource.ServiceProviderMetadataResource) error {
124+
func (s *ServiceProviderMetadataEventSubscriber) processUpdate(newRes *meshresource.ServiceProviderMetadataResource) error {
125125
if newRes.Spec == nil {
126126
return bizerror.New(bizerror.UnknownError, "provider metadata resource spec is nil")
127127
}
128128
if err := s.ensureApplication(newRes); err != nil {
129129
return err
130130
}
131-
132-
if oldRes != nil && oldRes.Spec != nil {
133-
oldKey := meshresource.BuildServiceIdentityKey(oldRes.Spec.ServiceName, oldRes.Spec.Version, oldRes.Spec.Group)
134-
newKey := meshresource.BuildServiceIdentityKey(newRes.Spec.ServiceName, newRes.Spec.Version, newRes.Spec.Group)
135-
if oldRes.Mesh != newRes.Mesh || oldKey != newKey {
136-
if err := s.syncService(oldRes.Mesh, oldRes.Spec.ServiceName, oldRes.Spec.Version, oldRes.Spec.Group); err != nil {
137-
return err
138-
}
139-
}
140-
}
141-
142131
return s.syncService(newRes.Mesh, newRes.Spec.ServiceName, newRes.Spec.Version, newRes.Spec.Group)
143132
}
144133

@@ -172,7 +161,7 @@ func (s *ServiceProviderMetadataEventSubscriber) syncService(mesh, serviceName,
172161
serviceKey := meshresource.BuildServiceIdentityKey(serviceName, version, group)
173162
resources, err := s.providerStore.ListByIndexes(
174163
[]index.IndexCondition{{IndexName: index.ByMeshIndex, Value: mesh, Operator: index.Equals},
175-
{IndexName: index.ByServiceProviderServiceName, Value: serviceName, Operator: index.Equals},
164+
{IndexName: index.ByServiceProviderServiceKey, Value: serviceKey, Operator: index.Equals},
176165
})
177166
if err != nil {
178167
return err
@@ -184,12 +173,7 @@ func (s *ServiceProviderMetadataEventSubscriber) syncService(mesh, serviceName,
184173
if !ok {
185174
return bizerror.NewAssertionError(meshresource.ServiceProviderMetadataKind, reflect.TypeOf(item).Name())
186175
}
187-
if res.Spec == nil {
188-
continue
189-
}
190-
if res.Spec.Version == version && res.Spec.Group == group {
191-
providers = append(providers, res)
192-
}
176+
providers = append(providers, res)
193177
}
194178

195179
rawOldRes, exists, err := s.serviceStore.GetByKey(coremodel.BuildResourceKey(mesh, serviceKey))

0 commit comments

Comments
 (0)