diff --git a/contrib/mesos/pkg/scheduler/components/framework/doc.go b/contrib/mesos/pkg/scheduler/components/framework/doc.go new file mode 100644 index 00000000000..5d7ae602023 --- /dev/null +++ b/contrib/mesos/pkg/scheduler/components/framework/doc.go @@ -0,0 +1,18 @@ +/* +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 framework implements the Mesos scheduler. +package framework diff --git a/contrib/mesos/pkg/scheduler/framework.go b/contrib/mesos/pkg/scheduler/components/framework/framework.go similarity index 99% rename from contrib/mesos/pkg/scheduler/framework.go rename to contrib/mesos/pkg/scheduler/components/framework/framework.go index 427c7b61838..5a588c0c8a7 100644 --- a/contrib/mesos/pkg/scheduler/framework.go +++ b/contrib/mesos/pkg/scheduler/components/framework/framework.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package scheduler +package framework import ( "fmt" @@ -29,6 +29,7 @@ import ( mesos "github.com/mesos/mesos-go/mesosproto" mutil "github.com/mesos/mesos-go/mesosutil" bindings "github.com/mesos/mesos-go/scheduler" + mscheduler "github.com/mesos/mesos-go/scheduler" execcfg "k8s.io/kubernetes/contrib/mesos/pkg/executor/config" "k8s.io/kubernetes/contrib/mesos/pkg/executor/messages" "k8s.io/kubernetes/contrib/mesos/pkg/node" @@ -53,13 +54,12 @@ import ( kubetypes "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/util/sets" - mscheduler "github.com/mesos/mesos-go/scheduler" ) type Framework interface { mscheduler.Scheduler - Init(scheduler *Scheduler, electedMaster proc.Process, mux *http.ServeMux) error + Init(sched types.Scheduler, electedMaster proc.Process, mux *http.ServeMux) error Registration() <-chan struct{} Offers() offers.Registry LaunchTask(t *podtask.T) error @@ -168,10 +168,10 @@ func New(config Config) Framework { return k } -func (k *framework) Init(scheduler *Scheduler, electedMaster proc.Process, mux *http.ServeMux) error { +func (k *framework) Init(sched types.Scheduler, electedMaster proc.Process, mux *http.ServeMux) error { log.V(1).Infoln("initializing kubernetes mesos scheduler") - k.sched = scheduler + k.sched = sched k.mux = mux k.asRegisteredMaster = proc.DoerFunc(func(a proc.Action) <-chan error { if !k.registered { diff --git a/contrib/mesos/pkg/scheduler/framework_test.go b/contrib/mesos/pkg/scheduler/components/framework/framework_test.go similarity index 99% rename from contrib/mesos/pkg/scheduler/framework_test.go rename to contrib/mesos/pkg/scheduler/components/framework/framework_test.go index 91b3c98f277..419f95bad0a 100644 --- a/contrib/mesos/pkg/scheduler/framework_test.go +++ b/contrib/mesos/pkg/scheduler/components/framework/framework_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package scheduler +package framework import ( "reflect" diff --git a/contrib/mesos/pkg/scheduler/integration_test.go b/contrib/mesos/pkg/scheduler/integration_test.go index 70f97c4312a..ee00656ecc8 100644 --- a/contrib/mesos/pkg/scheduler/integration_test.go +++ b/contrib/mesos/pkg/scheduler/integration_test.go @@ -33,6 +33,7 @@ import ( "github.com/stretchr/testify/mock" assertext "k8s.io/kubernetes/contrib/mesos/pkg/assert" "k8s.io/kubernetes/contrib/mesos/pkg/executor/messages" + "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/components/framework" "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/components/schedulerloop" schedcfg "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/config" "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/ha" @@ -427,7 +428,7 @@ type lifecycleTest struct { driver *mmock.JoinableDriver eventObs *EventObserver podsListWatch *MockPodsListWatch - framework Framework + framework framework.Framework schedulerProc *ha.SchedulerProcess scheduler *Scheduler t *testing.T @@ -455,7 +456,7 @@ func newLifecycleTest(t *testing.T) lifecycleTest { Version: testapi.Default.Version(), }) c := *schedcfg.CreateDefaultConfig() - framework := New(Config{ + framework := framework.New(framework.Config{ Executor: ei, Client: client, SchedulerConfig: c, diff --git a/contrib/mesos/pkg/scheduler/scheduler.go b/contrib/mesos/pkg/scheduler/scheduler.go index 4f8b82a1a13..62446ea2ffb 100644 --- a/contrib/mesos/pkg/scheduler/scheduler.go +++ b/contrib/mesos/pkg/scheduler/scheduler.go @@ -28,6 +28,7 @@ import ( "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/components/binder" "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/components/deleter" "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/components/errorhandler" + "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/components/framework" "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/components/podreconciler" "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/components/schedulerloop" "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/config" @@ -43,7 +44,7 @@ import ( // Scheduler implements types.Scheduler type Scheduler struct { podReconciler podreconciler.PodReconciler - framework Framework + framework framework.Framework loop schedulerloop.SchedulerLoop // unsafe state, needs to be guarded, especially changes to podtask.T objects @@ -51,29 +52,29 @@ type Scheduler struct { taskRegistry podtask.Registry } -func NewScheduler(c *config.Config, framework Framework, podScheduler podschedulers.PodScheduler, - client *client.Client, recorder record.EventRecorder, terminate <-chan struct{}, mux *http.ServeMux, podsWatcher *cache.ListWatch) *Scheduler { +func NewScheduler(c *config.Config, fw framework.Framework, ps podschedulers.PodScheduler, + client *client.Client, recorder record.EventRecorder, terminate <-chan struct{}, mux *http.ServeMux, lw *cache.ListWatch) *Scheduler { core := &Scheduler{ - framework: framework, + framework: fw, taskRegistry: podtask.NewInMemoryRegistry(), } // Watch and queue pods that need scheduling. updates := make(chan queue.Entry, c.UpdatesBacklog) podUpdates := &podStoreAdapter{queue.NewHistorical(updates)} - reflector := cache.NewReflector(podsWatcher, &api.Pod{}, podUpdates, 0) + reflector := cache.NewReflector(lw, &api.Pod{}, podUpdates, 0) q := queuer.New(podUpdates) - algorithm := algorithm.NewSchedulerAlgorithm(core, podUpdates, podScheduler) + algorithm := algorithm.NewSchedulerAlgorithm(core, podUpdates, ps) podDeleter := deleter.NewDeleter(core, q) core.podReconciler = podreconciler.NewPodReconciler(core, client, q, podDeleter) bo := backoff.New(c.InitialPodBackoff.Duration, c.MaxPodBackoff.Duration) - errorHandler := errorhandler.NewErrorHandler(core, bo, q, podScheduler) + errorHandler := errorhandler.NewErrorHandler(core, bo, q, ps) binder := binder.NewBinder(core) diff --git a/contrib/mesos/pkg/scheduler/service/service.go b/contrib/mesos/pkg/scheduler/service/service.go index 6da5c2d83e2..eb7cf46c463 100644 --- a/contrib/mesos/pkg/scheduler/service/service.go +++ b/contrib/mesos/pkg/scheduler/service/service.go @@ -55,6 +55,7 @@ import ( "k8s.io/kubernetes/contrib/mesos/pkg/profile" "k8s.io/kubernetes/contrib/mesos/pkg/runtime" "k8s.io/kubernetes/contrib/mesos/pkg/scheduler" + "k8s.io/kubernetes/contrib/mesos/pkg/scheduler/components/framework" 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" @@ -719,7 +720,7 @@ func (s *SchedulerServer) bootstrap(hks hyperkube.Interface, sc *schedcfg.Config } fcfs := podschedulers.NewFCFSPodScheduler(as, lookupNode) - framework := scheduler.New(scheduler.Config{ + framework := framework.New(framework.Config{ SchedulerConfig: *sc, Executor: executor, Client: client,