@@ -28,7 +28,7 @@ import (
2828 "open-cluster-management.io/sdk-go/pkg/cloudevents/server"
2929)
3030
31- type resourceHandler func (res * cloudevents.Event ) error
31+ type resourceHandler func (ctx context. Context , res * cloudevents.Event ) error
3232
3333// subscriber defines a subscriber that can receive and handle resource spec.
3434type subscriber struct {
@@ -60,9 +60,9 @@ func NewGRPCBroker() *GRPCBroker {
6060 return broker
6161}
6262
63- func (bkr * GRPCBroker ) RegisterService (t types.CloudEventsDataType , service server.Service ) {
63+ func (bkr * GRPCBroker ) RegisterService (ctx context. Context , t types.CloudEventsDataType , service server.Service ) {
6464 bkr .services [t ] = service
65- service .RegisterHandler (bkr )
65+ service .RegisterHandler (ctx , bkr )
6666}
6767
6868func (bkr * GRPCBroker ) Subscribers () sets.Set [string ] {
@@ -122,7 +122,9 @@ func (bkr *GRPCBroker) Publish(ctx context.Context, pubReq *pbv1.PublishRequest)
122122
123123// register registers a subscriber and return client id and error channel.
124124func (bkr * GRPCBroker ) register (
125- clusterName string , dataType types.CloudEventsDataType , handler resourceHandler ) (string , <- chan error ) {
125+ ctx context.Context , clusterName string , dataType types.CloudEventsDataType , handler resourceHandler ) (string , <- chan error ) {
126+ logger := klog .FromContext (ctx )
127+
126128 bkr .mu .Lock ()
127129 defer bkr .mu .Unlock ()
128130
@@ -135,18 +137,19 @@ func (bkr *GRPCBroker) register(
135137 errChan : errChan ,
136138 }
137139
138- klog .V (4 ).Infof ("register a subscriber %s (cluster name = %s) " , id , clusterName )
140+ logger .V (4 ).Info ("register a subscriber" , "id" , id )
139141 metrics .IncGRPCCESubscribersMetric (clusterName , dataType .String ())
140142
141143 return id , errChan
142144}
143145
144146// unregister a subscriber by id
145- func (bkr * GRPCBroker ) unregister (id string ) {
147+ func (bkr * GRPCBroker ) unregister (ctx context. Context , id string ) {
146148 bkr .mu .Lock ()
147149 defer bkr .mu .Unlock ()
148150
149- klog .V (10 ).Infof ("unregister subscriber %s" , id )
151+ logger := klog .FromContext (ctx )
152+ logger .V (4 ).Info ("unregister subscriber" , "id" , id )
150153 if sub , exists := bkr .subscribers [id ]; exists {
151154 close (sub .errChan )
152155 delete (bkr .subscribers , id )
@@ -171,6 +174,9 @@ func (bkr *GRPCBroker) Subscribe(subReq *pbv1.SubscriptionRequest, subServer pbv
171174 ctx , cancel := context .WithCancel (subServer .Context ())
172175 defer cancel ()
173176
177+ logger := klog .FromContext (ctx ).WithValues ("clusterName" , subReq .ClusterName )
178+ ctx = klog .NewContext (ctx , logger )
179+
174180 // TODO make the channel size configurable
175181 eventCh := make (chan * pbv1.CloudEvent , 100 )
176182
@@ -189,7 +195,7 @@ func (bkr *GRPCBroker) Subscribe(subReq *pbv1.SubscriptionRequest, subServer pbv
189195 return
190196 case evt := <- hearbeater .Heartbeat ():
191197 if err := subServer .Send (evt ); err != nil {
192- klog . Errorf ( "failed to send heartbeat: %v" , err )
198+ logger . Error ( err , "failed to send heartbeat" )
193199 // Unblock producers (handler select) and exit heartbeat ticker.
194200 cancel ()
195201 select {
@@ -200,7 +206,7 @@ func (bkr *GRPCBroker) Subscribe(subReq *pbv1.SubscriptionRequest, subServer pbv
200206 }
201207 case evt := <- eventCh :
202208 if err := subServer .Send (evt ); err != nil {
203- klog . Errorf ( "failed to send event: %v" , err )
209+ logger . Error ( err , "failed to send event" )
204210 // Unblock producers (handler select) and exit heartbeat ticker.
205211 cancel ()
206212 select {
@@ -213,16 +219,16 @@ func (bkr *GRPCBroker) Subscribe(subReq *pbv1.SubscriptionRequest, subServer pbv
213219 }
214220 }()
215221
216- subscriberID , errChan := bkr .register (subReq .ClusterName , * dataType , func (evt * cloudevents.Event ) error {
222+ subscriberID , errChan := bkr .register (ctx , subReq .ClusterName , * dataType , func (ctx context. Context , evt * cloudevents.Event ) error {
217223 // WARNING: don't use "pbEvt, err := pb.ToProto(evt)" to convert cloudevent to protobuf
218224 pbEvt := & pbv1.CloudEvent {}
219- if err := grpcprotocol .WritePBMessage (context . TODO () , binding .ToMessage (evt ), pbEvt ); err != nil {
225+ if err := grpcprotocol .WritePBMessage (ctx , binding .ToMessage (evt ), pbEvt ); err != nil {
220226 // return the error to requeue the event if converting to protobuf fails (e.g., due to invalid cloudevent).
221227 return fmt .Errorf ("failed to convert cloudevent to protobuf for resource(%s): %v" , evt .ID (), err )
222228 }
223229
224230 // send the cloudevent to the subscriber
225- klog .V (4 ).Infof ("sending the event to spec subscribers, %s " , evt .Context )
231+ logger .V (4 ).Info ("sending the event to spec subscribers" , "eventContext " , evt .Context )
226232 select {
227233 case eventCh <- pbEvt :
228234 case <- ctx .Done ():
@@ -238,12 +244,12 @@ func (bkr *GRPCBroker) Subscribe(subReq *pbv1.SubscriptionRequest, subServer pbv
238244 case err := <- errChan :
239245 // When reaching this point, an unrecoverable error occurred while sending the event,
240246 // such as the connection being closed. Unregister the subscriber to trigger agent reconnection.
241- klog . Errorf ( "unregister subscriber %s, error= %v" , subscriberID , err )
242- bkr .unregister (subscriberID )
247+ logger . Error ( err , "unregister subscriber" , "id" , subscriberID )
248+ bkr .unregister (ctx , subscriberID )
243249 return err
244250 case err := <- sendErrCh :
245- klog . Errorf ( "failed to send event, unregister subscriber %s, error=%v" , subscriberID , err )
246- bkr .unregister (subscriberID )
251+ logger . Error ( err , "failed to send event, unregister subscriber" , "id" , subscriberID )
252+ bkr .unregister (ctx , subscriberID )
247253 return err
248254 case <- ctx .Done ():
249255 // The context of the stream has been canceled or completed.
@@ -252,7 +258,7 @@ func (bkr *GRPCBroker) Subscribe(subReq *pbv1.SubscriptionRequest, subServer pbv
252258 // - The server closed the stream, potentially due to a shutdown.
253259 // Regardless of the reason, unregister the subscriber and stop processing.
254260 // No error is returned here because the stream closure is expected.
255- bkr .unregister (subscriberID )
261+ bkr .unregister (ctx , subscriberID )
256262 return nil
257263 }
258264}
@@ -307,7 +313,7 @@ func (bkr *GRPCBroker) respondResyncSpecRequest(ctx context.Context, eventDataTy
307313 lastResourceVersion := findResourceVersion (obj .ID (), resourceVersions .Versions )
308314 currentResourceVersion , err := cloudeventstypes .ToInteger (obj .Extensions ()[types .ExtensionResourceVersion ])
309315 if err != nil {
310- log .V (4 ).Info ("ignore the obj %v since it has a invalid resourceVersion, %v" , obj , err )
316+ log .V (4 ).Info ("ignore the obj since it has a invalid resourceVersion" , "object" , obj , "error" , err )
311317 continue
312318 }
313319
@@ -383,7 +389,7 @@ func (bkr *GRPCBroker) handleRes(
383389
384390 for _ , subscriber := range bkr .subscribers {
385391 if subscriber .clusterName == clusterName && subscriber .dataType == t {
386- if err := subscriber .handler (evt ); err != nil {
392+ if err := subscriber .handler (ctx , evt ); err != nil {
387393 // check if the error is recoverable. For unrecoverable errors,
388394 // such as a connection closed by an intermediate proxy, push
389395 // the error to subscriber's error channel to unregister the subscriber.
0 commit comments