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"