Copilot commented on code in PR #1084:
URL: 
https://github.com/apache/skywalking-banyandb/pull/1084#discussion_r3223294064


##########
pkg/cmdsetup/data.go:
##########
@@ -111,8 +111,11 @@ func newDataCmd(runners ...run.Unit) *cobra.Command {
                                return err
                        }
                        logger.GetLogger().Info().Msg("starting as a data 
server")
-                       // Spawn our go routines and wait for shutdown.
-                       if err := 
dataGroup.Run(context.WithValue(context.Background(), common.ContextNodeKey, 
node)); err != nil {
+                       // Spawn our go routines and wait for shutdown. The Run 
context is
+                       // derived from SupervisorContext so that a panic 
recovered anywhere
+                       // in the process, including goroutines spawned via 
run.Go, fires
+                       // cancellation here.
+                       if err := 
dataGroup.Run(context.WithValue(SupervisorContext(), common.ContextNodeKey, 
node)); err != nil {
                                
logger.GetLogger().Error().Err(err).Stack().Str("name", 
dataGroup.Name()).Msg("Exit")
                                os.Exit(-1)
                        }

Review Comment:
   This RunE path calls os.Exit(-1) on error, which bypasses Cobra’s 
PersistentPostRunE. Since root.go now uses PersistentPostRunE to call 
ShutdownSupervisor() (draining the panic artifact sink), os.Exit here can drop 
queued artifacts on error exits. Prefer returning the error (letting Cobra 
unwind and run post-run hooks) or explicitly calling ShutdownSupervisor() 
before exiting.



##########
pkg/timestamp/scheduler.go:
##########
@@ -39,9 +40,10 @@ var (
        ErrTaskDuplicated = errors.New("the task is duplicated")
 )
 
-// SchedulerAction is an executable when a trigger is fired
-// now is the trigger time, logger has a context indicating the task's 
identity.
-type SchedulerAction func(now time.Time, logger *logger.Logger) bool
+// SchedulerAction is an executable when a trigger is fired.
+// ctx is canceled when the scheduler is closed, now is the trigger time,
+// and logger carries the task's identity.
+type SchedulerAction func(ctx context.Context, now time.Time, logger 
*logger.Logger) bool

Review Comment:
   SchedulerAction’s doc says the passed ctx is canceled when the scheduler is 
closed, but Register stores the caller ctx in task.parentCtx and Close() only 
closes t.closer (it never cancels parentCtx). As a result, action goroutines 
started via run.GoWithSignal may keep running after Scheduler.Close(), and 
callers relying on ctx cancellation won’t observe shutdown. Consider deriving a 
task context via context.WithCancel (or using t.closer.Ctx()) and canceling it 
in task.close(), and update run.Go / GoWithSignal to use that derived ctx.



##########
pkg/cmdsetup/standalone.go:
##########
@@ -118,8 +118,11 @@ func newStandaloneCmd(runners ...run.Unit) *cobra.Command {
                                return err
                        }
                        logger.GetLogger().Info().Msg("starting as a standalone 
server")
-                       // Spawn our go routines and wait for shutdown.
-                       if err := 
standaloneGroup.Run(context.WithValue(context.Background(), 
common.ContextNodeKey, nodeID)); err != nil {
+                       // Spawn our go routines and wait for shutdown. The Run 
context is
+                       // derived from SupervisorContext so that a panic 
recovered anywhere
+                       // in the process, including goroutines spawned via 
run.Go, fires
+                       // cancellation here.
+                       if err := 
standaloneGroup.Run(context.WithValue(SupervisorContext(), 
common.ContextNodeKey, nodeID)); err != nil {
                                
logger.GetLogger().Error().Err(err).Stack().Str("name", 
standaloneGroup.Name()).Msg("Exit")
                                os.Exit(-1)
                        }

Review Comment:
   This RunE path calls os.Exit(-1) on error, which bypasses Cobra’s 
PersistentPostRunE. Since root.go now uses PersistentPostRunE to call 
ShutdownSupervisor() (draining the panic artifact sink), os.Exit here can drop 
queued artifacts on error exits. Prefer returning the error (letting Cobra 
unwind and run post-run hooks) or explicitly calling ShutdownSupervisor() 
before exiting.



##########
pkg/cmdsetup/liaison.go:
##########
@@ -157,9 +160,9 @@ func newLiaisonCmd(runners ...run.Unit) *cobra.Command {
                                return err
                        }
                        logger.GetLogger().Info().Msg("starting as a liaison 
server")
-                       ctx = context.WithValue(ctx, common.ContextNodeKey, 
node)
+                       runCtx = context.WithValue(runCtx, 
common.ContextNodeKey, node)
                        // Spawn our go routines and wait for shutdown.
-                       if err := liaisonGroup.Run(ctx); err != nil {
+                       if err := liaisonGroup.Run(runCtx); err != nil {
                                
logger.GetLogger().Error().Err(err).Stack().Str("name", 
liaisonGroup.Name()).Msg("Exit")
                                os.Exit(-1)
                        }

Review Comment:
   This RunE path calls os.Exit(-1) on error, which bypasses Cobra’s 
PersistentPostRunE. Since root.go now uses PersistentPostRunE to call 
ShutdownSupervisor() (draining the panic artifact sink), os.Exit here can drop 
queued artifacts on error exits. Prefer returning the error (letting Cobra 
unwind and run post-run hooks) or explicitly calling ShutdownSupervisor() 
before exiting.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to