From 320810037586baf017667261b5dc2e63482e0055 Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Tue, 3 Nov 2015 08:36:32 +0100 Subject: [PATCH] Move slave registry into framework package --- .../components/framework/driver_mock.go | 2 +- .../components/framework/framework.go | 5 ++--- .../components/framework/framework_test.go | 18 ++++++++---------- .../framework/slaveregistry.go} | 15 ++++++++------- .../framework/slaveregistry_test.go} | 8 ++++---- .../scheduler/integration/integration_test.go | 13 ++++++------- contrib/mesos/pkg/scheduler/slave/doc.go | 18 ------------------ 7 files changed, 29 insertions(+), 50 deletions(-) rename contrib/mesos/pkg/scheduler/{slave/slave.go => components/framework/slaveregistry.go} (78%) rename contrib/mesos/pkg/scheduler/{slave/slave_test.go => components/framework/slaveregistry_test.go} (94%) delete mode 100644 contrib/mesos/pkg/scheduler/slave/doc.go diff --git a/contrib/mesos/pkg/scheduler/components/framework/driver_mock.go b/contrib/mesos/pkg/scheduler/components/framework/driver_mock.go index e63c2bf2650..6074ff2a8c3 100644 --- a/contrib/mesos/pkg/scheduler/components/framework/driver_mock.go +++ b/contrib/mesos/pkg/scheduler/components/framework/driver_mock.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package mock +package framework import ( mesos "github.com/mesos/mesos-go/mesosproto" diff --git a/contrib/mesos/pkg/scheduler/components/framework/framework.go b/contrib/mesos/pkg/scheduler/components/framework/framework.go index 08b18031615..3a9ff730075 100644 --- a/contrib/mesos/pkg/scheduler/components/framework/framework.go +++ b/contrib/mesos/pkg/scheduler/components/framework/framework.go @@ -44,7 +44,6 @@ import ( "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/meta" "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/metrics" "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/podtask" - "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/slave" "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/uid" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" @@ -90,7 +89,7 @@ type framework struct { registration chan struct{} // signal chan that closes upon first successful registration onRegistration sync.Once offers offers.Registry - slaveHostNames *slave.Registry + slaveHostNames *slaveRegistry // via deferred init tasksReconciler taskreconciler.TasksReconciler @@ -157,7 +156,7 @@ func New(config Config) Framework { TTL: config.SchedulerConfig.OfferTTL.Duration, ListenerDelay: config.SchedulerConfig.ListenerDelay.Duration, }), - slaveHostNames: slave.NewRegistry(), + slaveHostNames: newSlaveRegistry(), reconcileCooldown: config.ReconcileCooldown, registration: make(chan struct{}), asRegisteredMaster: proc.DoerFunc(func(proc.Action) <-chan error { diff --git a/contrib/mesos/pkg/scheduler/components/framework/framework_test.go b/contrib/mesos/pkg/scheduler/components/framework/framework_test.go index e0800b68f4f..ef12ac81e0b 100644 --- a/contrib/mesos/pkg/scheduler/components/framework/framework_test.go +++ b/contrib/mesos/pkg/scheduler/components/framework/framework_test.go @@ -25,11 +25,9 @@ import ( "github.com/stretchr/testify/assert" "k8s.io/kubernetes/contrib/mesos/pkg/offers" "k8s.io/kubernetes/contrib/mesos/pkg/proc" - schedcfg "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/config" - "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/mock" - "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/podtask" - "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/slave" "k8s.io/kubernetes/contrib/mesos/pkg/scheduler" + schedcfg "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/config" + "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/podtask" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/client/cache" ) @@ -108,7 +106,7 @@ func TestResourceOffer_Add(t *testing.T) { TTL: schedcfg.DefaultOfferTTL, ListenerDelay: schedcfg.DefaultListenerDelay, }), - slaveHostNames: slave.NewRegistry(), + slaveHostNames: newSlaveRegistry(), nodeRegistrator: registrator, sched: mockScheduler(), } @@ -154,7 +152,7 @@ func TestResourceOffer_Add_Rescind(t *testing.T) { TTL: schedcfg.DefaultOfferTTL, ListenerDelay: schedcfg.DefaultListenerDelay, }), - slaveHostNames: slave.NewRegistry(), + slaveHostNames: newSlaveRegistry(), sched: mockScheduler(), } @@ -208,7 +206,7 @@ func TestSlave_Lost(t *testing.T) { TTL: schedcfg.DefaultOfferTTL, ListenerDelay: schedcfg.DefaultListenerDelay, }), - slaveHostNames: slave.NewRegistry(), + slaveHostNames: newSlaveRegistry(), sched: mockScheduler(), } @@ -266,7 +264,7 @@ func TestDisconnect(t *testing.T) { TTL: schedcfg.DefaultOfferTTL, ListenerDelay: schedcfg.DefaultListenerDelay, }), - slaveHostNames: slave.NewRegistry(), + slaveHostNames: newSlaveRegistry(), sched: mockScheduler(), } @@ -296,7 +294,7 @@ func TestDisconnect(t *testing.T) { //test we can handle different status updates, TODO check state transitions func TestStatus_Update(t *testing.T) { - mockdriver := mock.MockSchedulerDriver{} + mockdriver := MockSchedulerDriver{} // setup expectations mockdriver.On("KillTask", util.NewTaskID("test-task-001")).Return(mesos.Status_DRIVER_RUNNING, nil) @@ -310,7 +308,7 @@ func TestStatus_Update(t *testing.T) { TTL: schedcfg.DefaultOfferTTL, ListenerDelay: schedcfg.DefaultListenerDelay, }), - slaveHostNames: slave.NewRegistry(), + slaveHostNames: newSlaveRegistry(), driver: &mockdriver, sched: mockScheduler(), } diff --git a/contrib/mesos/pkg/scheduler/slave/slave.go b/contrib/mesos/pkg/scheduler/components/framework/slaveregistry.go similarity index 78% rename from contrib/mesos/pkg/scheduler/slave/slave.go rename to contrib/mesos/pkg/scheduler/components/framework/slaveregistry.go index 6999f8315b9..91514b5fb5f 100644 --- a/contrib/mesos/pkg/scheduler/slave/slave.go +++ b/contrib/mesos/pkg/scheduler/components/framework/slaveregistry.go @@ -14,25 +14,26 @@ See the License for the specific language governing permissions and limitations under the License. */ -package slave +package framework import ( "sync" ) -type Registry struct { +// slaveRegistry manages node hostnames for slave ids. +type slaveRegistry struct { lock sync.Mutex hostNames map[string]string } -func NewRegistry() *Registry { - return &Registry{ +func newSlaveRegistry() *slaveRegistry { + return &slaveRegistry{ hostNames: map[string]string{}, } } // Register creates a mapping between a slaveId and slave if not existing. -func (st *Registry) Register(slaveId, slaveHostname string) { +func (st *slaveRegistry) Register(slaveId, slaveHostname string) { st.lock.Lock() defer st.lock.Unlock() _, exists := st.hostNames[slaveId] @@ -42,7 +43,7 @@ func (st *Registry) Register(slaveId, slaveHostname string) { } // SlaveIDs returns the keys of the registry -func (st *Registry) SlaveIDs() []string { +func (st *slaveRegistry) SlaveIDs() []string { st.lock.Lock() defer st.lock.Unlock() slaveIds := make([]string, 0, len(st.hostNames)) @@ -53,7 +54,7 @@ func (st *Registry) SlaveIDs() []string { } // HostName looks up a hostname for a given slaveId -func (st *Registry) HostName(slaveId string) string { +func (st *slaveRegistry) HostName(slaveId string) string { st.lock.Lock() defer st.lock.Unlock() return st.hostNames[slaveId] diff --git a/contrib/mesos/pkg/scheduler/slave/slave_test.go b/contrib/mesos/pkg/scheduler/components/framework/slaveregistry_test.go similarity index 94% rename from contrib/mesos/pkg/scheduler/slave/slave_test.go rename to contrib/mesos/pkg/scheduler/components/framework/slaveregistry_test.go index 67e8df9765a..750c58bf17f 100644 --- a/contrib/mesos/pkg/scheduler/slave/slave_test.go +++ b/contrib/mesos/pkg/scheduler/components/framework/slaveregistry_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package slave +package framework import ( "testing" @@ -26,7 +26,7 @@ import ( func TestSlaveStorage_Register(t *testing.T) { assert := assert.New(t) - slaveStorage := NewRegistry() + slaveStorage := newSlaveRegistry() assert.Equal(0, len(slaveStorage.hostNames)) slaveId := "slave1" @@ -42,7 +42,7 @@ func TestSlaveStorage_Register(t *testing.T) { func TestSlaveStorage_HostName(t *testing.T) { assert := assert.New(t) - slaveStorage := NewRegistry() + slaveStorage := newSlaveRegistry() assert.Equal(0, len(slaveStorage.hostNames)) slaveId := "slave1" @@ -62,7 +62,7 @@ func TestSlaveStorage_HostName(t *testing.T) { func TestSlaveStorage_SlaveIds(t *testing.T) { assert := assert.New(t) - slaveStorage := NewRegistry() + slaveStorage := newSlaveRegistry() assert.Equal(0, len(slaveStorage.hostNames)) slaveId := "1" diff --git a/contrib/mesos/pkg/scheduler/integration/integration_test.go b/contrib/mesos/pkg/scheduler/integration/integration_test.go index 31cbd96b6b4..744a811d064 100644 --- a/contrib/mesos/pkg/scheduler/integration/integration_test.go +++ b/contrib/mesos/pkg/scheduler/integration/integration_test.go @@ -40,7 +40,6 @@ import ( schedcfg "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/config" "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/ha" "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/meta" - mmock "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/mock" "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/podschedulers" "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/podtask" mresource "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/resource" @@ -427,7 +426,7 @@ type LaunchedTask struct { type lifecycleTest struct { apiServer *TestServer - driver *mmock.JoinableDriver + driver *framework.JoinableDriver eventObs *EventObserver podsListWatch *MockPodsListWatch framework framework.Framework @@ -458,7 +457,7 @@ func newLifecycleTest(t *testing.T) lifecycleTest { Version: testapi.Default.Version(), }) c := *schedcfg.CreateDefaultConfig() - framework := framework.New(framework.Config{ + fw := framework.New(framework.Config{ Executor: ei, Client: client, SchedulerConfig: c, @@ -484,22 +483,22 @@ func newLifecycleTest(t *testing.T) lifecycleTest { fcfs := podschedulers.NewFCFSPodScheduler(strategy, apiServer.LookupNode) // create scheduler process - schedulerProc := ha.New(framework) + schedulerProc := ha.New(fw) // create scheduler eventObs := NewEventObserver() - scheduler := components.NewScheduler(&c, framework, fcfs, client, eventObs, schedulerProc.Terminal(), http.DefaultServeMux, &podsListWatch.ListWatch) + scheduler := components.NewScheduler(&c, fw, fcfs, client, eventObs, schedulerProc.Terminal(), http.DefaultServeMux, &podsListWatch.ListWatch) assert.NotNil(scheduler) // create mock mesos scheduler driver - driver := &mmock.JoinableDriver{} + driver := &framework.JoinableDriver{} return lifecycleTest{ apiServer: apiServer, driver: driver, eventObs: eventObs, podsListWatch: podsListWatch, - framework: framework, + framework: fw, schedulerProc: schedulerProc, sched: scheduler, t: t, diff --git a/contrib/mesos/pkg/scheduler/slave/doc.go b/contrib/mesos/pkg/scheduler/slave/doc.go deleted file mode 100644 index 0ea8c988ad2..00000000000 --- a/contrib/mesos/pkg/scheduler/slave/doc.go +++ /dev/null @@ -1,18 +0,0 @@ -/* -Copyright 2015 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package slave manages node hostnames for slave ids. -package slave