mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Fix issues with plugin and --live-restore
Fixes an issue when starting the daemon with live-restore
where previously it was not set, plugins are not running.
Fixes an issue when starting the daemon with live-restore, the plugin
client (for interacting with the plugins HTTP interface) is not set,
causing a panic when the plugin is called.
Signed-off-by: Brian Goff <cpuguy83@gmail.com>
(cherry picked from commit cb6633175c
)
Signed-off-by: Victor Vieux <vieux@docker.com>
This commit is contained in:
parent
47b838db40
commit
4e08d8ef03
2 changed files with 30 additions and 3 deletions
|
@ -145,7 +145,7 @@ func (s *DockerDaemonSuite) TestDaemonShutdownLiveRestoreWithPlugins(c *check.C)
|
|||
|
||||
// TestDaemonShutdownWithPlugins shuts down running plugins.
|
||||
func (s *DockerDaemonSuite) TestDaemonShutdownWithPlugins(c *check.C) {
|
||||
testRequires(c, IsAmd64, Network)
|
||||
testRequires(c, IsAmd64, Network, SameHostDaemon)
|
||||
|
||||
if err := s.d.Start(); err != nil {
|
||||
c.Fatalf("Could not start daemon: %v", err)
|
||||
|
@ -180,6 +180,11 @@ func (s *DockerDaemonSuite) TestDaemonShutdownWithPlugins(c *check.C) {
|
|||
if out, ec, err := runCommandWithOutput(cmd); ec != 1 {
|
||||
c.Fatalf("Expected exit code '1', got %d err: %v output: %s ", ec, err, out)
|
||||
}
|
||||
|
||||
s.d.Start("--live-restore")
|
||||
cmd = exec.Command("pgrep", "-f", pluginProcessName)
|
||||
out, _, err := runCommandWithOutput(cmd)
|
||||
c.Assert(err, checker.IsNil, check.Commentf(out))
|
||||
}
|
||||
|
||||
// TestVolumePlugin tests volume creation using a plugin.
|
||||
|
|
|
@ -49,6 +49,10 @@ func (pm *Manager) enable(p *v2.Plugin, c *controller, force bool) error {
|
|||
return err
|
||||
}
|
||||
|
||||
return pm.pluginPostStart(p, c)
|
||||
}
|
||||
|
||||
func (pm *Manager) pluginPostStart(p *v2.Plugin, c *controller) error {
|
||||
client, err := plugins.NewClientWithTimeout("unix://"+filepath.Join(p.GetRuntimeSourcePath(), p.GetSocket()), nil, c.timeoutInSecs)
|
||||
if err != nil {
|
||||
c.restart = false
|
||||
|
@ -59,12 +63,30 @@ func (pm *Manager) enable(p *v2.Plugin, c *controller, force bool) error {
|
|||
p.SetPClient(client)
|
||||
pm.pluginStore.SetState(p, true)
|
||||
pm.pluginStore.CallHandler(p)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (pm *Manager) restore(p *v2.Plugin) error {
|
||||
return pm.containerdClient.Restore(p.GetID(), attachToLog(p.GetID()))
|
||||
if err := pm.containerdClient.Restore(p.GetID(), attachToLog(p.GetID())); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if pm.liveRestore {
|
||||
c := &controller{}
|
||||
if pids, _ := pm.containerdClient.GetPidsForContainer(p.GetID()); len(pids) == 0 {
|
||||
// plugin is not running, so follow normal startup procedure
|
||||
return pm.enable(p, c, true)
|
||||
}
|
||||
|
||||
c.exitChan = make(chan bool)
|
||||
c.restart = true
|
||||
pm.mu.Lock()
|
||||
pm.cMap[p] = c
|
||||
pm.mu.Unlock()
|
||||
return pm.pluginPostStart(p, c)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func shutdownPlugin(p *v2.Plugin, c *controller, containerdClient libcontainerd.Client) {
|
||||
|
|
Loading…
Add table
Reference in a new issue