mirror of
https://github.com/akvorado/akvorado.git
synced 2025-12-11 22:14:02 +01:00
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:
@@ -39,7 +39,6 @@ func StartStopComponents(r *reporter.Reporter, daemonComponent daemon.Component,
|
||||
|
||||
<-daemonComponent.Terminated()
|
||||
r.Info().Msg("stopping all components")
|
||||
daemonComponent.FinishReexec()
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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) {
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user