From 20f56e9868db897f5b072fc39bda6fec7940e6c9 Mon Sep 17 00:00:00 2001 From: Steve Kriss Date: Fri, 11 May 2018 09:26:15 -0700 Subject: [PATCH] cleanup plugin subprocesses on server exit Signed-off-by: Steve Kriss --- pkg/cmd/server/server.go | 5 +++-- pkg/controller/backup_controller_test.go | 6 ++++++ pkg/plugin/manager.go | 8 ++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/pkg/cmd/server/server.go b/pkg/cmd/server/server.go index 779df4609..16079f0d2 100644 --- a/pkg/cmd/server/server.go +++ b/pkg/cmd/server/server.go @@ -224,6 +224,9 @@ func newServer(namespace, baseName, pluginDir string, logger *logrus.Logger) (*s } func (s *server) run() error { + defer s.pluginManager.CleanupClients() + s.handleShutdownSignals() + if err := s.ensureArkNamespace(); err != nil { return err } @@ -240,8 +243,6 @@ func (s *server) run() error { s.watchConfig(originalConfig) - s.handleShutdownSignals() - if err := s.initBackupService(config); err != nil { return err } diff --git a/pkg/controller/backup_controller_test.go b/pkg/controller/backup_controller_test.go index fbab58ce9..3956a8911 100644 --- a/pkg/controller/backup_controller_test.go +++ b/pkg/controller/backup_controller_test.go @@ -415,3 +415,9 @@ func (_m *MockManager) GetObjectStore(name string) (cloudprovider.ObjectStore, e return r0, r1 } + +// CleanupClients provides a mock function +func (_m *MockManager) CleanupClients() { + _ = _m.Called() + return +} diff --git a/pkg/plugin/manager.go b/pkg/plugin/manager.go index 3136bb9ed..334579f35 100644 --- a/pkg/plugin/manager.go +++ b/pkg/plugin/manager.go @@ -44,6 +44,7 @@ func baseConfig() *plugin.ClientConfig { return &plugin.ClientConfig{ HandshakeConfig: Handshake, AllowedProtocols: []plugin.Protocol{plugin.ProtocolGRPC}, + Managed: true, } } @@ -123,6 +124,9 @@ type Manager interface { // CloseRestoreItemActions terminates the plugin sub-processes that // are hosting RestoreItemAction plugins for the given restore name. CloseRestoreItemActions(restoreName string) error + + // CleanupClients kills all plugin subprocesses. + CleanupClients() } type manager struct { @@ -411,3 +415,7 @@ func closeAll(store *clientStore, kind PluginKind, scope string) error { return nil } + +func (m *manager) CleanupClients() { + plugin.CleanupClients() +}