diff --git a/pkg/registry/controller_registry.go b/pkg/registry/controllerstorage.go similarity index 100% rename from pkg/registry/controller_registry.go rename to pkg/registry/controllerstorage.go diff --git a/pkg/registry/controller_registry_test.go b/pkg/registry/controllerstorage_test.go similarity index 100% rename from pkg/registry/controller_registry_test.go rename to pkg/registry/controllerstorage_test.go diff --git a/pkg/registry/etcd_registry.go b/pkg/registry/etcdregistry.go similarity index 100% rename from pkg/registry/etcd_registry.go rename to pkg/registry/etcdregistry.go diff --git a/pkg/registry/etcd_registry_test.go b/pkg/registry/etcdregistry_test.go similarity index 100% rename from pkg/registry/etcd_registry_test.go rename to pkg/registry/etcdregistry_test.go diff --git a/pkg/registry/minionregistry.go b/pkg/registry/minionregistry.go new file mode 100644 index 00000000000..7d5ab774dc5 --- /dev/null +++ b/pkg/registry/minionregistry.go @@ -0,0 +1,82 @@ +/* +Copyright 2014 Google Inc. 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 registry + +import ( + "fmt" + "sort" + "sync" + + "github.com/GoogleCloudPlatform/kubernetes/pkg/util" +) + +var ErrDoesNotExist = fmt.Errorf("The requested resource does not exist.") + +// Keep track of a set of minions. Safe for concurrent reading/writing. +type MinionRegistry interface { + List() (currentMinions []string, err error) + Insert(minion string) error + Delete(minion string) error + Contains(minion string) (bool, error) +} + +// Initialize a minion registry with a list of minions. +func MakeMinionRegistry(minions []string) MinionRegistry { + m := &minionList{ + minions: util.StringSet{}, + } + for _, minion := range minions { + m.minions.Insert(minion) + } + return m +} + +type minionList struct { + minions util.StringSet + lock sync.Mutex +} + +func (m *minionList) List() (currentMinions []string, err error) { + m.lock.Lock() + defer m.lock.Unlock() + // Convert from map to []string + for minion := range m.minions { + currentMinions = append(currentMinions, minion) + } + sort.StringSlice(currentMinions).Sort() + return +} + +func (m *minionList) Insert(newMinion string) error { + m.lock.Lock() + defer m.lock.Unlock() + m.minions.Insert(newMinion) + return nil +} + +func (m *minionList) Delete(minion string) error { + m.lock.Lock() + defer m.lock.Unlock() + m.minions.Delete(minion) + return nil +} + +func (m *minionList) Contains(minion string) (bool, error) { + m.lock.Lock() + defer m.lock.Unlock() + return m.minions.Has(minion), nil +} diff --git a/pkg/registry/minionregistry_test.go b/pkg/registry/minionregistry_test.go new file mode 100644 index 00000000000..1a709679a09 --- /dev/null +++ b/pkg/registry/minionregistry_test.go @@ -0,0 +1,57 @@ +/* +Copyright 2014 Google Inc. 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 registry + +import ( + "reflect" + "testing" +) + +func TestMinionRegistry(t *testing.T) { + m := MakeMinionRegistry([]string{"foo", "bar"}) + if has, err := m.Contains("foo"); !has || err != nil { + t.Errorf("missing expected object") + } + if has, err := m.Contains("bar"); !has || err != nil { + t.Errorf("missing expected object") + } + if has, err := m.Contains("baz"); has || err != nil { + t.Errorf("has unexpected object") + } + + if err := m.Insert("baz"); err != nil { + t.Errorf("insert failed") + } + if has, err := m.Contains("baz"); !has || err != nil { + t.Errorf("insert didn't actually insert") + } + + if err := m.Delete("bar"); err != nil { + t.Errorf("delete failed") + } + if has, err := m.Contains("bar"); has || err != nil { + t.Errorf("delete didn't actually delete") + } + + list, err := m.List() + if err != nil { + t.Errorf("got error calling List") + } + if !reflect.DeepEqual(list, []string{"baz", "foo"}) { + t.Errorf("Unexpected list value: %#v", list) + } +} diff --git a/pkg/registry/minion_registry.go b/pkg/registry/minionstorage.go similarity index 68% rename from pkg/registry/minion_registry.go rename to pkg/registry/minionstorage.go index 62aa403d7c9..b5a5aedc610 100644 --- a/pkg/registry/minion_registry.go +++ b/pkg/registry/minionstorage.go @@ -18,72 +18,12 @@ package registry import ( "fmt" - "sort" - "sync" "github.com/GoogleCloudPlatform/kubernetes/pkg/api" "github.com/GoogleCloudPlatform/kubernetes/pkg/apiserver" "github.com/GoogleCloudPlatform/kubernetes/pkg/labels" - "github.com/GoogleCloudPlatform/kubernetes/pkg/util" ) -var ErrDoesNotExist = fmt.Errorf("The requested resource does not exist.") - -// Keep track of a set of minions. Safe for concurrent reading/writing. -type MinionRegistry interface { - List() (currentMinions []string, err error) - Insert(minion string) error - Delete(minion string) error - Contains(minion string) (bool, error) -} - -// Initialize a minion registry with a list of minions. -func MakeMinionRegistry(minions []string) MinionRegistry { - m := &minionList{ - minions: util.StringSet{}, - } - for _, minion := range minions { - m.minions.Insert(minion) - } - return m -} - -type minionList struct { - minions util.StringSet - lock sync.Mutex -} - -func (m *minionList) List() (currentMinions []string, err error) { - m.lock.Lock() - defer m.lock.Unlock() - // Convert from map to []string - for minion := range m.minions { - currentMinions = append(currentMinions, minion) - } - sort.StringSlice(currentMinions).Sort() - return -} - -func (m *minionList) Insert(newMinion string) error { - m.lock.Lock() - defer m.lock.Unlock() - m.minions.Insert(newMinion) - return nil -} - -func (m *minionList) Delete(minion string) error { - m.lock.Lock() - defer m.lock.Unlock() - m.minions.Delete(minion) - return nil -} - -func (m *minionList) Contains(minion string) (bool, error) { - m.lock.Lock() - defer m.lock.Unlock() - return m.minions.Has(minion), nil -} - // MinionRegistryStorage implements the RESTStorage interface, backed by a MinionRegistry. type MinionRegistryStorage struct { registry MinionRegistry diff --git a/pkg/registry/minion_registry_test.go b/pkg/registry/minionstorage_test.go similarity index 71% rename from pkg/registry/minion_registry_test.go rename to pkg/registry/minionstorage_test.go index 6c6db1b30f7..fd26854ff17 100644 --- a/pkg/registry/minion_registry_test.go +++ b/pkg/registry/minionstorage_test.go @@ -24,41 +24,6 @@ import ( "github.com/GoogleCloudPlatform/kubernetes/pkg/labels" ) -func TestMinionRegistry(t *testing.T) { - m := MakeMinionRegistry([]string{"foo", "bar"}) - if has, err := m.Contains("foo"); !has || err != nil { - t.Errorf("missing expected object") - } - if has, err := m.Contains("bar"); !has || err != nil { - t.Errorf("missing expected object") - } - if has, err := m.Contains("baz"); has || err != nil { - t.Errorf("has unexpected object") - } - - if err := m.Insert("baz"); err != nil { - t.Errorf("insert failed") - } - if has, err := m.Contains("baz"); !has || err != nil { - t.Errorf("insert didn't actually insert") - } - - if err := m.Delete("bar"); err != nil { - t.Errorf("delete failed") - } - if has, err := m.Contains("bar"); has || err != nil { - t.Errorf("delete didn't actually delete") - } - - list, err := m.List() - if err != nil { - t.Errorf("got error calling List") - } - if !reflect.DeepEqual(list, []string{"baz", "foo"}) { - t.Errorf("Unexpected list value: %#v", list) - } -} - func TestMinionRegistryStorage(t *testing.T) { m := MakeMinionRegistry([]string{"foo", "bar"}) ms := MakeMinionRegistryStorage(m) diff --git a/pkg/registry/pod_registry.go b/pkg/registry/podstorage.go similarity index 100% rename from pkg/registry/pod_registry.go rename to pkg/registry/podstorage.go diff --git a/pkg/registry/pod_registry_test.go b/pkg/registry/podstorage_test.go similarity index 99% rename from pkg/registry/pod_registry_test.go rename to pkg/registry/podstorage_test.go index 65faac7e0bf..f9fff773df9 100644 --- a/pkg/registry/pod_registry_test.go +++ b/pkg/registry/podstorage_test.go @@ -353,7 +353,6 @@ func TestMakePodStatus(t *testing.T) { } } - func TestPodStorageValidatesCreate(t *testing.T) { mockRegistry := &MockPodStorageRegistry{ MockPodRegistry: MockPodRegistry{err: fmt.Errorf("test error")}, @@ -411,7 +410,7 @@ func TestCreatePod(t *testing.T) { }, } pod := api.Pod{ - JSONBase: api.JSONBase{ID: "foo"}, + JSONBase: api.JSONBase{ID: "foo"}, DesiredState: desiredState, } channel, err := storage.Create(pod) diff --git a/pkg/registry/service_registry.go b/pkg/registry/servicestorage.go similarity index 96% rename from pkg/registry/service_registry.go rename to pkg/registry/servicestorage.go index b859c50899f..35d0df7d9b8 100644 --- a/pkg/registry/service_registry.go +++ b/pkg/registry/servicestorage.go @@ -28,12 +28,14 @@ import ( "github.com/GoogleCloudPlatform/kubernetes/pkg/util" ) +// ServiceRegistryStorage adapts a service registry into apiserver's RESTStorage model. type ServiceRegistryStorage struct { registry ServiceRegistry cloud cloudprovider.Interface machines MinionRegistry } +// MakeServiceRegistryStorage makes a new ServiceRegistryStorage. func MakeServiceRegistryStorage(registry ServiceRegistry, cloud cloudprovider.Interface, machines MinionRegistry) apiserver.RESTStorage { return &ServiceRegistryStorage{ registry: registry, @@ -50,7 +52,7 @@ func makeLinkVariables(service api.Service, machine string) []api.EnvVar { } else { port = strconv.Itoa(service.ContainerPort.IntVal) } - portPrefix := prefix + "_PORT_" + strings.ToUpper(strings.Replace(port,"-","_",-1)) + "_TCP" + portPrefix := prefix + "_PORT_" + strings.ToUpper(strings.Replace(port, "-", "_", -1)) + "_TCP" return []api.EnvVar{ { Name: prefix + "_PORT", diff --git a/pkg/registry/service_registry_test.go b/pkg/registry/servicestorage_test.go similarity index 97% rename from pkg/registry/service_registry_test.go rename to pkg/registry/servicestorage_test.go index 02d5f67d7f3..c815a84f300 100644 --- a/pkg/registry/service_registry_test.go +++ b/pkg/registry/servicestorage_test.go @@ -219,10 +219,10 @@ func TestServiceRegistryDeleteExternal(t *testing.T) { } func TestServiceRegistryMakeLinkVariables(t *testing.T) { - service := api.Service { - JSONBase: api.JSONBase{ID: "foo"}, - Selector: map[string]string{"bar": "baz"}, - ContainerPort: util.IntOrString { Kind: util.IntstrString, StrVal: "a-b-c" }, + service := api.Service{ + JSONBase: api.JSONBase{ID: "foo"}, + Selector: map[string]string{"bar": "baz"}, + ContainerPort: util.IntOrString{Kind: util.IntstrString, StrVal: "a-b-c"}, } vars := makeLinkVariables(service, "mars") for _, v := range vars {