From 95254d54577642eaf2847c0f056b343afcbd14fb Mon Sep 17 00:00:00 2001 From: Jonathan Basseri Date: Thu, 3 Jan 2019 17:46:00 -0800 Subject: [PATCH] Move CacheDebugger signal handling into the package. This moves the signal handling for CacheDebugger from the factory package into the CacheDebugger's package. That makes it easier to reuse from packages other than factory. --- pkg/scheduler/factory/BUILD | 2 -- pkg/scheduler/factory/factory.go | 20 ++++------------- pkg/scheduler/internal/cache/debugger/BUILD | 2 ++ .../internal/cache/debugger/debugger.go | 22 +++++++++++++++++++ .../cache/debugger}/signal.go | 2 +- .../cache/debugger}/signal_windows.go | 2 +- 6 files changed, 30 insertions(+), 20 deletions(-) rename pkg/scheduler/{factory => internal/cache/debugger}/signal.go (97%) rename pkg/scheduler/{factory => internal/cache/debugger}/signal_windows.go (97%) diff --git a/pkg/scheduler/factory/BUILD b/pkg/scheduler/factory/BUILD index 0b8931a4e4..2017f8a476 100644 --- a/pkg/scheduler/factory/BUILD +++ b/pkg/scheduler/factory/BUILD @@ -5,8 +5,6 @@ go_library( srcs = [ "factory.go", "plugins.go", - "signal.go", - "signal_windows.go", ], importpath = "k8s.io/kubernetes/pkg/scheduler/factory", visibility = ["//visibility:public"], diff --git a/pkg/scheduler/factory/factory.go b/pkg/scheduler/factory/factory.go index c509178e15..c533235608 100644 --- a/pkg/scheduler/factory/factory.go +++ b/pkg/scheduler/factory/factory.go @@ -20,8 +20,6 @@ package factory import ( "fmt" - "os" - "os/signal" "reflect" "time" @@ -385,28 +383,18 @@ func NewConfigFactory(args *ConfigFactoryArgs) Configurator { }, ) - // Setup cache comparer + // Setup cache debugger debugger := cachedebugger.New( args.NodeInformer.Lister(), args.PodInformer.Lister(), c.schedulerCache, c.podQueue, ) - - ch := make(chan os.Signal, 1) - signal.Notify(ch, compareSignal) + debugger.ListenForSignal(c.StopEverything) go func() { - for { - select { - case <-c.StopEverything: - c.podQueue.Close() - return - case <-ch: - debugger.Comparer.Compare() - debugger.Dumper.DumpAll() - } - } + <-c.StopEverything + c.podQueue.Close() }() return c diff --git a/pkg/scheduler/internal/cache/debugger/BUILD b/pkg/scheduler/internal/cache/debugger/BUILD index 1d9cfaf116..bab16194a5 100644 --- a/pkg/scheduler/internal/cache/debugger/BUILD +++ b/pkg/scheduler/internal/cache/debugger/BUILD @@ -6,6 +6,8 @@ go_library( "comparer.go", "debugger.go", "dumper.go", + "signal.go", + "signal_windows.go", ], importpath = "k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger", visibility = ["//pkg/scheduler:__subpackages__"], diff --git a/pkg/scheduler/internal/cache/debugger/debugger.go b/pkg/scheduler/internal/cache/debugger/debugger.go index 64428d5693..d8839ec67e 100644 --- a/pkg/scheduler/internal/cache/debugger/debugger.go +++ b/pkg/scheduler/internal/cache/debugger/debugger.go @@ -17,6 +17,9 @@ limitations under the License. package debugger import ( + "os" + "os/signal" + corelisters "k8s.io/client-go/listers/core/v1" internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue" @@ -48,3 +51,22 @@ func New( }, } } + +// ListenForSignal starts a goroutine that will trigger the CacheDebugger's +// behavior when the process receives SIGINT (Windows) or SIGUSER2 (non-Windows). +func (d *CacheDebugger) ListenForSignal(stopCh <-chan struct{}) { + ch := make(chan os.Signal, 1) + signal.Notify(ch, compareSignal) + + go func() { + for { + select { + case <-stopCh: + return + case <-ch: + d.Comparer.Compare() + d.Dumper.DumpAll() + } + } + }() +} diff --git a/pkg/scheduler/factory/signal.go b/pkg/scheduler/internal/cache/debugger/signal.go similarity index 97% rename from pkg/scheduler/factory/signal.go rename to pkg/scheduler/internal/cache/debugger/signal.go index 8ec17048eb..9a56b04d8d 100644 --- a/pkg/scheduler/factory/signal.go +++ b/pkg/scheduler/internal/cache/debugger/signal.go @@ -16,7 +16,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package factory +package debugger import "syscall" diff --git a/pkg/scheduler/factory/signal_windows.go b/pkg/scheduler/internal/cache/debugger/signal_windows.go similarity index 97% rename from pkg/scheduler/factory/signal_windows.go rename to pkg/scheduler/internal/cache/debugger/signal_windows.go index 9df239874c..25c015b0e1 100644 --- a/pkg/scheduler/factory/signal_windows.go +++ b/pkg/scheduler/internal/cache/debugger/signal_windows.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package factory +package debugger import "os"