Move slave registry into framework package

This commit is contained in:
Dr. Stefan Schimanski 2015-11-03 08:36:32 +01:00
parent d8edcacbe3
commit 3208100375
7 changed files with 29 additions and 50 deletions

View File

@ -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"

View File

@ -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 {

View File

@ -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(),
}

View File

@ -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]

View File

@ -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"

View File

@ -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,

View File

@ -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