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 0b8931a4e43..2017f8a476f 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 c509178e157..c5332356082 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 1d9cfaf116b..bab16194a5f 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 64428d5693e..d8839ec67e8 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 8ec17048ebb..9a56b04d8d7 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 9df239874c3..25c015b0e17 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"