@@ -11,8 +11,6 @@ import (
1111 "open-cluster-management.io/sdk-go/pkg/cloudevents/server/grpc/heartbeat"
1212 "open-cluster-management.io/sdk-go/pkg/cloudevents/server/grpc/metrics"
1313
14- "k8s.io/apimachinery/pkg/api/errors"
15-
1614 cloudevents "github.com/cloudevents/sdk-go/v2"
1715 "github.com/cloudevents/sdk-go/v2/binding"
1816 cloudeventstypes "github.com/cloudevents/sdk-go/v2/types"
@@ -315,30 +313,36 @@ func (bkr *GRPCBroker) respondResyncSpecRequest(ctx context.Context, eventDataTy
315313 return fmt .Errorf ("failed to find service for event type %s" , eventDataType )
316314 }
317315
318- objs , err := service .List (types.ListOptions {ClusterName : clusterName , CloudEventsDataType : eventDataType })
316+ evts , err := service .List (ctx , types.ListOptions {ClusterName : clusterName , CloudEventsDataType : eventDataType })
319317 if err != nil {
320318 return err
321319 }
322320
323- if len (objs ) == 0 {
321+ if len (evts ) == 0 {
324322 log .V (4 ).Info ("no objs from the lister, do nothing" )
325323 return nil
326324 }
327325
328- for _ , obj := range objs {
326+ for _ , evt := range evts {
329327 // respond with the deleting resource regardless of the resource version
330- objLogger := log .WithValues ("eventType" , obj .Type (), "extensions" , obj .Extensions ())
331- if _ , ok := obj .Extensions ()[types .ExtensionDeletionTimestamp ]; ok {
328+ objLogger := log .WithValues ("eventType" , evt .Type (), "extensions" , evt .Extensions ())
329+ if _ , ok := evt .Extensions ()[types .ExtensionDeletionTimestamp ]; ok {
332330 objLogger .V (4 ).Info ("respond spec resync request" )
333- err = bkr .handleRes (ctx , obj , eventDataType , "delete_request" )
331+ deleteEventTypes := types.CloudEventsType {
332+ CloudEventsDataType : eventDataType ,
333+ SubResource : types .SubResourceSpec ,
334+ Action : types .DeleteRequestAction ,
335+ }
336+ evt .SetType (deleteEventTypes .String ())
337+ err = bkr .HandleEvent (ctx , evt )
334338 if err != nil {
335339 objLogger .Error (err , "failed to handle resync spec request" )
336340 }
337341 continue
338342 }
339343
340- lastResourceVersion := findResourceVersion (obj .ID (), resourceVersions .Versions )
341- currentResourceVersion , err := cloudeventstypes .ToInteger (obj .Extensions ()[types .ExtensionResourceVersion ])
344+ lastResourceVersion := findResourceVersion (evt .ID (), resourceVersions .Versions )
345+ currentResourceVersion , err := cloudeventstypes .ToInteger (evt .Extensions ()[types .ExtensionResourceVersion ])
342346 if err != nil {
343347 objLogger .V (4 ).Info ("ignore the event since it has a invalid resourceVersion" , "error" , err )
344348 continue
@@ -348,7 +352,13 @@ func (bkr *GRPCBroker) respondResyncSpecRequest(ctx context.Context, eventDataTy
348352 // the newer work to agent
349353 if currentResourceVersion == 0 || int64 (currentResourceVersion ) > lastResourceVersion {
350354 objLogger .V (4 ).Info ("respond spec resync request" )
351- err := bkr .handleRes (ctx , obj , eventDataType , "update_request" )
355+ updateEventTypes := types.CloudEventsType {
356+ CloudEventsDataType : eventDataType ,
357+ SubResource : types .SubResourceSpec ,
358+ Action : types .UpdateRequestAction ,
359+ }
360+ evt .SetType (updateEventTypes .String ())
361+ err := bkr .HandleEvent (ctx , evt )
352362 if err != nil {
353363 objLogger .Error (err , "failed to handle resync spec request" )
354364 }
@@ -357,14 +367,15 @@ func (bkr *GRPCBroker) respondResyncSpecRequest(ctx context.Context, eventDataTy
357367
358368 // the resources do not exist on the source, but exist on the agent, delete them
359369 for _ , rv := range resourceVersions .Versions {
360- _ , exists := getObj (rv .ResourceID , objs )
370+ _ , exists := getObj (rv .ResourceID , evts )
361371 if exists {
362372 continue
363373 }
364374
365375 deleteEventTypes := types.CloudEventsType {
366376 CloudEventsDataType : eventDataType ,
367377 SubResource : types .SubResourceSpec ,
378+ Action : types .DeleteRequestAction ,
368379 }
369380 obj := types .NewEventBuilder ("source" , deleteEventTypes ).
370381 WithResourceID (rv .ResourceID ).
@@ -375,7 +386,7 @@ func (bkr *GRPCBroker) respondResyncSpecRequest(ctx context.Context, eventDataTy
375386
376387 // send a delete event for the current resource
377388 log .V (4 ).Info ("respond spec resync request" )
378- err := bkr .handleRes (ctx , & obj , eventDataType , "delete_request" )
389+ err := bkr .HandleEvent (ctx , & obj )
379390 if err != nil {
380391 log .Error (err , "failed to handle delete request" )
381392 }
@@ -384,22 +395,20 @@ func (bkr *GRPCBroker) respondResyncSpecRequest(ctx context.Context, eventDataTy
384395 return nil
385396}
386397
387- // handleRes publish the resource to the correct subscriber.
388- func (bkr * GRPCBroker ) handleRes (
389- ctx context.Context ,
390- evt * cloudevents.Event ,
391- t types.CloudEventsDataType ,
392- action types.EventAction ) error {
398+ // HandleEvent publish the event to the correct subscriber.
399+ func (bkr * GRPCBroker ) HandleEvent (ctx context.Context , evt * cloudevents.Event ) error {
400+ if evt == nil {
401+ return fmt .Errorf ("event is nil" )
402+ }
393403
394404 bkr .mu .RLock ()
395405 defer bkr .mu .RUnlock ()
396406
397- eventType := types.CloudEventsType {
398- CloudEventsDataType : t ,
399- SubResource : types .SubResourceSpec ,
400- Action : action ,
407+ eventType , err := types .ParseCloudEventsType (evt .Type ())
408+ if err != nil {
409+ return err
401410 }
402- evt . SetType ( eventType .String ())
411+ evtDataType := eventType .CloudEventsDataType
403412
404413 clusterNameValue , err := evt .Context .GetExtension (types .ExtensionClusterName )
405414 if err != nil {
@@ -412,7 +421,7 @@ func (bkr *GRPCBroker) handleRes(
412421 // the resource consumer name and its data type is in the subscriber list, ensuring
413422 // the event will be only processed when the consumer is subscribed to the current
414423 // broker.
415- if subscriber .clusterName == clusterName && subscriber .dataType == t {
424+ if subscriber .clusterName == clusterName && subscriber .dataType == evtDataType {
416425 if err := subscriber .handler (ctx , subID , evt ); err != nil {
417426 return err
418427 }
@@ -421,63 +430,6 @@ func (bkr *GRPCBroker) handleRes(
421430 return nil
422431}
423432
424- // OnCreate is called by the controller when a resource is created on the maestro server.
425- func (bkr * GRPCBroker ) OnCreate (ctx context.Context , t types.CloudEventsDataType , id string ) error {
426- service , ok := bkr .services [t ]
427- if ! ok {
428- return fmt .Errorf ("failed to find service for event type %s" , t )
429- }
430-
431- resource , err := service .Get (ctx , id )
432- // if the resource is not found, it indicates the resource has been processed.
433- if errors .IsNotFound (err ) {
434- return nil
435- }
436- if err != nil {
437- return err
438- }
439-
440- return bkr .handleRes (ctx , resource , t , "create_request" )
441- }
442-
443- // OnUpdate is called by the controller when a resource is updated on the maestro server.
444- func (bkr * GRPCBroker ) OnUpdate (ctx context.Context , t types.CloudEventsDataType , id string ) error {
445- service , ok := bkr .services [t ]
446- if ! ok {
447- return fmt .Errorf ("failed to find service for event type %s" , t )
448- }
449-
450- resource , err := service .Get (ctx , id )
451- // if the resource is not found, it indicates the resource has been processed.
452- if errors .IsNotFound (err ) {
453- return nil
454- }
455- if err != nil {
456- return err
457- }
458-
459- return bkr .handleRes (ctx , resource , t , "update_request" )
460- }
461-
462- // OnDelete is called by the controller when a resource is deleted from the maestro server.
463- func (bkr * GRPCBroker ) OnDelete (ctx context.Context , t types.CloudEventsDataType , id string ) error {
464- service , ok := bkr .services [t ]
465- if ! ok {
466- return fmt .Errorf ("failed to find service for event type %s" , t )
467- }
468-
469- resource , err := service .Get (ctx , id )
470- // if the resource is not found, it indicates the resource has been processed.
471- if errors .IsNotFound (err ) {
472- return nil
473- }
474- if err != nil {
475- return err
476- }
477-
478- return bkr .handleRes (ctx , resource , t , "delete_request" )
479- }
480-
481433// IsConsumerSubscribed returns true if the consumer is subscribed to the broker for resource spec.
482434func (bkr * GRPCBroker ) IsConsumerSubscribed (consumerName string ) bool {
483435 bkr .mu .RLock ()
0 commit comments