Revert "common/daemon: add a method to reexec itself"

This reverts commit 216786d40e. We don't
really need that if we move logic to cmd package.
This commit is contained in:
Vincent Bernat
2025-09-19 07:20:49 +02:00
parent 9f34f9caf9
commit 75f6908f71
4 changed files with 4 additions and 67 deletions

View File

@@ -39,7 +39,6 @@ func StartStopComponents(r *reporter.Reporter, daemonComponent daemon.Component,
<-daemonComponent.Terminated()
r.Info().Msg("stopping all components")
daemonComponent.FinishReexec()
return nil
}

View File

@@ -9,7 +9,6 @@ package daemon
import (
"os"
"os/signal"
"sync/atomic"
"syscall"
"gopkg.in/tomb.v2"
@@ -21,8 +20,6 @@ import (
type Component interface {
Start() error
Stop() error
Reexec()
FinishReexec()
Track(t *tomb.Tomb, who string)
// Lifecycle
@@ -35,7 +32,6 @@ type Component interface {
type realComponent struct {
r *reporter.Reporter
tombs []tombWithOrigin
shouldReexec atomic.Bool
lifecycleComponent
}
@@ -74,12 +70,11 @@ func (c *realComponent) Start() error {
c.Terminate()
}(t)
}
// On signal, terminate or reexec
// On signal, terminate
go func() {
signals := make(chan os.Signal, 1)
signal.Notify(signals,
syscall.SIGINT,
syscall.SIGTERM)
syscall.SIGINT, syscall.SIGTERM)
select {
case s := <-signals:
c.r.Debug().Stringer("signal", s).Msg("signal received")
@@ -102,30 +97,6 @@ func (c *realComponent) Stop() error {
return nil
}
// Reexec will reexecute the current process with the same arguments.
func (c *realComponent) Reexec() {
c.shouldReexec.Store(true)
c.Terminate()
}
// FinishReexec should be called just before exiting to trigger the real reexec.
func (c *realComponent) FinishReexec() {
if c.shouldReexec.Load() {
executable, err := os.Executable()
if err != nil {
c.r.Err(err).Msg("cannot get executable name")
return
}
env := os.Environ()
args := append([]string{executable}, os.Args[1:]...)
c.r.Info().Strs("args", args).Msg("reexec in progress")
if err := syscall.Exec(executable, args, env); err != nil {
c.r.Err(err).Msg("cannot reexec")
}
}
}
// Add a new tomb to be tracked. This is only used before Start().
func (c *realComponent) Track(t *tomb.Tomb, who string) {
c.tombs = append(c.tombs, tombWithOrigin{

View File

@@ -5,7 +5,6 @@ package daemon
import (
"errors"
"os"
"syscall"
"testing"
"testing/synctest"
@@ -63,28 +62,6 @@ func TestTerminateWithSignal(t *testing.T) {
}
}
func TestReexecWithSignal(t *testing.T) {
r := reporter.NewMock(t)
c, err := New(r)
if err != nil {
t.Fatalf("New() error:\n%+v", err)
}
helpers.StartStop(t, c)
c.Reexec()
if os.Getenv("TEST_DAEMON_REEXEC") == "1" {
// This is a way to increase a bit coverage
executable, _ := os.Executable()
os.Remove(executable)
c.FinishReexec()
return
}
os.Setenv("TEST_DAEMON_REEXEC", "1")
c.FinishReexec()
t.Fatalf("No reexec done!")
}
func TestStop(t *testing.T) {
r := reporter.NewMock(t)
c, err := New(r)

View File

@@ -17,8 +17,6 @@ type MockComponent struct {
lifecycleComponent
}
var _ Component = &MockComponent{}
// NewMock will create a daemon component that does nothing.
func NewMock(t testing.TB) Component {
t.Helper()
@@ -40,14 +38,6 @@ func (c *MockComponent) Stop() error {
return nil
}
// Reexec does nothing for the mock implementation
func (c *MockComponent) Reexec() {
}
// FinishReexec does nothing for the mock implementation
func (c *MockComponent) FinishReexec() {
}
// Track does nothing
func (c *MockComponent) Track(_ *tomb.Tomb, _ string) {
}