Move util.StringSet into its own package
A lot of packages use StringSet, but they don't use anything else from the util package. Moving StringSet into another package will shrink their dependency trees significantly.
This commit is contained in:
@@ -30,7 +30,7 @@ import (
|
|||||||
_ "k8s.io/kubernetes/pkg/expapi"
|
_ "k8s.io/kubernetes/pkg/expapi"
|
||||||
_ "k8s.io/kubernetes/pkg/expapi/v1"
|
_ "k8s.io/kubernetes/pkg/expapi/v1"
|
||||||
pkg_runtime "k8s.io/kubernetes/pkg/runtime"
|
pkg_runtime "k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
flag "github.com/spf13/pflag"
|
flag "github.com/spf13/pflag"
|
||||||
@@ -84,7 +84,7 @@ func main() {
|
|||||||
glog.Errorf("error while generating conversion functions for %v: %v", knownType, err)
|
glog.Errorf("error while generating conversion functions for %v: %v", knownType, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
generator.RepackImports(util.NewStringSet())
|
generator.RepackImports(sets.NewString())
|
||||||
if err := generator.WriteImports(data); err != nil {
|
if err := generator.WriteImports(data); err != nil {
|
||||||
glog.Fatalf("error while writing imports: %v", err)
|
glog.Fatalf("error while writing imports: %v", err)
|
||||||
}
|
}
|
||||||
|
@@ -30,7 +30,7 @@ import (
|
|||||||
_ "k8s.io/kubernetes/pkg/expapi"
|
_ "k8s.io/kubernetes/pkg/expapi"
|
||||||
_ "k8s.io/kubernetes/pkg/expapi/v1"
|
_ "k8s.io/kubernetes/pkg/expapi/v1"
|
||||||
pkg_runtime "k8s.io/kubernetes/pkg/runtime"
|
pkg_runtime "k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
flag "github.com/spf13/pflag"
|
flag "github.com/spf13/pflag"
|
||||||
@@ -80,7 +80,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
versionPath := path.Join(pkgBase, group, version)
|
versionPath := path.Join(pkgBase, group, version)
|
||||||
generator := pkg_runtime.NewDeepCopyGenerator(api.Scheme.Raw(), versionPath, util.NewStringSet("k8s.io/kubernetes"))
|
generator := pkg_runtime.NewDeepCopyGenerator(api.Scheme.Raw(), versionPath, sets.NewString("k8s.io/kubernetes"))
|
||||||
generator.AddImport(path.Join(pkgBase, "api"))
|
generator.AddImport(path.Join(pkgBase, "api"))
|
||||||
|
|
||||||
if len(*overwrites) > 0 {
|
if len(*overwrites) > 0 {
|
||||||
|
@@ -55,6 +55,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/master"
|
"k8s.io/kubernetes/pkg/master"
|
||||||
"k8s.io/kubernetes/pkg/tools/etcdtest"
|
"k8s.io/kubernetes/pkg/tools/etcdtest"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/util/wait"
|
"k8s.io/kubernetes/pkg/util/wait"
|
||||||
"k8s.io/kubernetes/pkg/volume/empty_dir"
|
"k8s.io/kubernetes/pkg/volume/empty_dir"
|
||||||
"k8s.io/kubernetes/plugin/pkg/admission/admit"
|
"k8s.io/kubernetes/plugin/pkg/admission/admit"
|
||||||
@@ -738,7 +739,7 @@ func runMasterServiceTest(client *client.Client) {
|
|||||||
glog.Fatalf("unexpected error listing services: %v", err)
|
glog.Fatalf("unexpected error listing services: %v", err)
|
||||||
}
|
}
|
||||||
var foundRW bool
|
var foundRW bool
|
||||||
found := util.StringSet{}
|
found := sets.String{}
|
||||||
for i := range svcList.Items {
|
for i := range svcList.Items {
|
||||||
found.Insert(svcList.Items[i].Name)
|
found.Insert(svcList.Items[i].Name)
|
||||||
if svcList.Items[i].Name == "kubernetes" {
|
if svcList.Items[i].Name == "kubernetes" {
|
||||||
@@ -864,7 +865,7 @@ func runServiceTest(client *client.Client) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Fatalf("Failed to list services across namespaces: %v", err)
|
glog.Fatalf("Failed to list services across namespaces: %v", err)
|
||||||
}
|
}
|
||||||
names := util.NewStringSet()
|
names := sets.NewString()
|
||||||
for _, svc := range svcList.Items {
|
for _, svc := range svcList.Items {
|
||||||
names.Insert(fmt.Sprintf("%s/%s", svc.Namespace, svc.Name))
|
names.Insert(fmt.Sprintf("%s/%s", svc.Namespace, svc.Name))
|
||||||
}
|
}
|
||||||
@@ -1011,7 +1012,7 @@ func main() {
|
|||||||
// Check that kubelet tried to make the containers.
|
// Check that kubelet tried to make the containers.
|
||||||
// Using a set to list unique creation attempts. Our fake is
|
// Using a set to list unique creation attempts. Our fake is
|
||||||
// really stupid, so kubelet tries to create these multiple times.
|
// really stupid, so kubelet tries to create these multiple times.
|
||||||
createdConts := util.StringSet{}
|
createdConts := sets.String{}
|
||||||
for _, p := range fakeDocker1.Created {
|
for _, p := range fakeDocker1.Created {
|
||||||
// The last 8 characters are random, so slice them off.
|
// The last 8 characters are random, so slice them off.
|
||||||
if n := len(p); n > 8 {
|
if n := len(p); n > 8 {
|
||||||
|
@@ -30,7 +30,7 @@ import (
|
|||||||
"k8s.io/kubernetes/contrib/mesos/pkg/queue"
|
"k8s.io/kubernetes/contrib/mesos/pkg/queue"
|
||||||
"k8s.io/kubernetes/contrib/mesos/pkg/runtime"
|
"k8s.io/kubernetes/contrib/mesos/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/cache"
|
"k8s.io/kubernetes/pkg/client/unversioned/cache"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -453,7 +453,7 @@ func (s *offerStorage) nextListener() *offerListener {
|
|||||||
// notify listeners if we find an acceptable offer for them. listeners
|
// notify listeners if we find an acceptable offer for them. listeners
|
||||||
// are garbage collected after a certain age (see offerListenerMaxAge).
|
// are garbage collected after a certain age (see offerListenerMaxAge).
|
||||||
// ids lists offer IDs that are retrievable from offer storage.
|
// ids lists offer IDs that are retrievable from offer storage.
|
||||||
func (s *offerStorage) notifyListeners(ids func() (util.StringSet, uint64)) {
|
func (s *offerStorage) notifyListeners(ids func() (sets.String, uint64)) {
|
||||||
listener := s.nextListener() // blocking
|
listener := s.nextListener() // blocking
|
||||||
|
|
||||||
offerIds, version := ids()
|
offerIds, version := ids()
|
||||||
@@ -493,8 +493,8 @@ func (s *offerStorage) Init(done <-chan struct{}) {
|
|||||||
|
|
||||||
// cached offer ids for the purposes of listener notification
|
// cached offer ids for the purposes of listener notification
|
||||||
idCache := &stringsCache{
|
idCache := &stringsCache{
|
||||||
refill: func() util.StringSet {
|
refill: func() sets.String {
|
||||||
result := util.NewStringSet()
|
result := sets.NewString()
|
||||||
for _, v := range s.offers.List() {
|
for _, v := range s.offers.List() {
|
||||||
if offer, ok := v.(Perishable); ok {
|
if offer, ok := v.(Perishable); ok {
|
||||||
result.Insert(offer.Id())
|
result.Insert(offer.Id())
|
||||||
@@ -510,14 +510,14 @@ func (s *offerStorage) Init(done <-chan struct{}) {
|
|||||||
|
|
||||||
type stringsCache struct {
|
type stringsCache struct {
|
||||||
expiresAt time.Time
|
expiresAt time.Time
|
||||||
cached util.StringSet
|
cached sets.String
|
||||||
ttl time.Duration
|
ttl time.Duration
|
||||||
refill func() util.StringSet
|
refill func() sets.String
|
||||||
version uint64
|
version uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
// not thread-safe
|
// not thread-safe
|
||||||
func (c *stringsCache) Strings() (util.StringSet, uint64) {
|
func (c *stringsCache) Strings() (sets.String, uint64) {
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
if c.expiresAt.Before(now) {
|
if c.expiresAt.Before(now) {
|
||||||
old := c.cached
|
old := c.cached
|
||||||
@@ -549,8 +549,8 @@ func (self *slaveStorage) add(slaveId, offerId string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// delete the slave-offer mappings for slaveId, returns the IDs of the offers that were unmapped
|
// delete the slave-offer mappings for slaveId, returns the IDs of the offers that were unmapped
|
||||||
func (self *slaveStorage) deleteSlave(slaveId string) util.StringSet {
|
func (self *slaveStorage) deleteSlave(slaveId string) sets.String {
|
||||||
offerIds := util.NewStringSet()
|
offerIds := sets.NewString()
|
||||||
self.Lock()
|
self.Lock()
|
||||||
defer self.Unlock()
|
defer self.Unlock()
|
||||||
for oid, sid := range self.index {
|
for oid, sid := range self.index {
|
||||||
|
@@ -21,7 +21,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
type qitem struct {
|
type qitem struct {
|
||||||
@@ -277,13 +277,13 @@ func (f *DelayFIFO) List() []UniqueID {
|
|||||||
return list
|
return list
|
||||||
}
|
}
|
||||||
|
|
||||||
// ContainedIDs returns a util.StringSet containing all IDs of the stored items.
|
// ContainedIDs returns a stringset.StringSet containing all IDs of the stored items.
|
||||||
// This is a snapshot of a moment in time, and one should keep in mind that
|
// This is a snapshot of a moment in time, and one should keep in mind that
|
||||||
// other go routines can add or remove items after you call this.
|
// other go routines can add or remove items after you call this.
|
||||||
func (c *DelayFIFO) ContainedIDs() util.StringSet {
|
func (c *DelayFIFO) ContainedIDs() sets.String {
|
||||||
c.rlock()
|
c.rlock()
|
||||||
defer c.runlock()
|
defer c.runlock()
|
||||||
set := util.StringSet{}
|
set := sets.String{}
|
||||||
for id := range c.items {
|
for id := range c.items {
|
||||||
set.Insert(id)
|
set.Insert(id)
|
||||||
}
|
}
|
||||||
|
@@ -22,7 +22,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
type entry struct {
|
type entry struct {
|
||||||
@@ -177,13 +177,13 @@ func (f *HistoricalFIFO) ListKeys() []string {
|
|||||||
return list
|
return list
|
||||||
}
|
}
|
||||||
|
|
||||||
// ContainedIDs returns a util.StringSet containing all IDs of the stored items.
|
// ContainedIDs returns a stringset.StringSet containing all IDs of the stored items.
|
||||||
// This is a snapshot of a moment in time, and one should keep in mind that
|
// This is a snapshot of a moment in time, and one should keep in mind that
|
||||||
// other go routines can add or remove items after you call this.
|
// other go routines can add or remove items after you call this.
|
||||||
func (c *HistoricalFIFO) ContainedIDs() util.StringSet {
|
func (c *HistoricalFIFO) ContainedIDs() sets.String {
|
||||||
c.lock.RLock()
|
c.lock.RLock()
|
||||||
defer c.lock.RUnlock()
|
defer c.lock.RUnlock()
|
||||||
set := util.StringSet{}
|
set := sets.String{}
|
||||||
for id, entry := range c.items {
|
for id, entry := range c.items {
|
||||||
if entry.Is(DELETE_EVENT | POP_EVENT) {
|
if entry.Is(DELETE_EVENT | POP_EVENT) {
|
||||||
continue
|
continue
|
||||||
|
@@ -47,7 +47,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/kubelet/container"
|
"k8s.io/kubernetes/pkg/kubelet/container"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/tools"
|
"k8s.io/kubernetes/pkg/tools"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Slave struct {
|
type Slave struct {
|
||||||
@@ -711,7 +711,7 @@ func (k *KubernetesScheduler) explicitlyReconcileTasks(driver bindings.Scheduler
|
|||||||
|
|
||||||
// tell mesos to send us the latest status updates for all the non-terminal tasks that we know about
|
// tell mesos to send us the latest status updates for all the non-terminal tasks that we know about
|
||||||
statusList := []*mesos.TaskStatus{}
|
statusList := []*mesos.TaskStatus{}
|
||||||
remaining := util.KeySet(reflect.ValueOf(taskToSlave))
|
remaining := sets.KeySet(reflect.ValueOf(taskToSlave))
|
||||||
for taskId, slaveId := range taskToSlave {
|
for taskId, slaveId := range taskToSlave {
|
||||||
if slaveId == "" {
|
if slaveId == "" {
|
||||||
delete(taskToSlave, taskId)
|
delete(taskToSlave, taskId)
|
||||||
|
@@ -34,6 +34,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/util/workqueue"
|
"k8s.io/kubernetes/pkg/util/workqueue"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
|
|
||||||
@@ -132,8 +133,8 @@ func (e *endpointController) Run(workers int, stopCh <-chan struct{}) {
|
|||||||
e.queue.ShutDown()
|
e.queue.ShutDown()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *endpointController) getPodServiceMemberships(pod *api.Pod) (util.StringSet, error) {
|
func (e *endpointController) getPodServiceMemberships(pod *api.Pod) (sets.String, error) {
|
||||||
set := util.StringSet{}
|
set := sets.String{}
|
||||||
services, err := e.serviceStore.GetPodServices(pod)
|
services, err := e.serviceStore.GetPodServices(pod)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// don't log this error because this function makes pointless
|
// don't log this error because this function makes pointless
|
||||||
|
@@ -194,6 +194,7 @@ path-override
|
|||||||
pod-cidr
|
pod-cidr
|
||||||
pod-eviction-timeout
|
pod-eviction-timeout
|
||||||
pod-infra-container-image
|
pod-infra-container-image
|
||||||
|
pod-running
|
||||||
policy-config-file
|
policy-config-file
|
||||||
poll-interval
|
poll-interval
|
||||||
portal-net
|
portal-net
|
||||||
|
@@ -17,13 +17,13 @@ limitations under the License.
|
|||||||
package admission
|
package admission
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Handler is a base for admission control handlers that
|
// Handler is a base for admission control handlers that
|
||||||
// support a predefined set of operations
|
// support a predefined set of operations
|
||||||
type Handler struct {
|
type Handler struct {
|
||||||
operations util.StringSet
|
operations sets.String
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handles returns true for methods that this handler supports
|
// Handles returns true for methods that this handler supports
|
||||||
@@ -34,7 +34,7 @@ func (h *Handler) Handles(operation Operation) bool {
|
|||||||
// NewHandler creates a new base handler that handles the passed
|
// NewHandler creates a new base handler that handles the passed
|
||||||
// in operations
|
// in operations
|
||||||
func NewHandler(ops ...Operation) *Handler {
|
func NewHandler(ops ...Operation) *Handler {
|
||||||
operations := util.NewStringSet()
|
operations := sets.NewString()
|
||||||
for _, op := range ops {
|
for _, op := range ops {
|
||||||
operations.Insert(string(op))
|
operations.Insert(string(op))
|
||||||
}
|
}
|
||||||
|
@@ -28,6 +28,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
|
|
||||||
"github.com/davecgh/go-spew/spew"
|
"github.com/davecgh/go-spew/spew"
|
||||||
)
|
)
|
||||||
@@ -77,7 +78,7 @@ var Semantic = conversion.EqualitiesOrDie(
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
var standardResources = util.NewStringSet(
|
var standardResources = sets.NewString(
|
||||||
string(ResourceMemory),
|
string(ResourceMemory),
|
||||||
string(ResourceCPU),
|
string(ResourceCPU),
|
||||||
string(ResourcePods),
|
string(ResourcePods),
|
||||||
@@ -111,7 +112,7 @@ func IsServiceIPRequested(service *Service) bool {
|
|||||||
return service.Spec.ClusterIP == ""
|
return service.Spec.ClusterIP == ""
|
||||||
}
|
}
|
||||||
|
|
||||||
var standardFinalizers = util.NewStringSet(
|
var standardFinalizers = sets.NewString(
|
||||||
string(FinalizerKubernetes))
|
string(FinalizerKubernetes))
|
||||||
|
|
||||||
func IsStandardFinalizerName(str string) bool {
|
func IsStandardFinalizerName(str string) bool {
|
||||||
|
@@ -25,7 +25,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/registered"
|
"k8s.io/kubernetes/pkg/api/registered"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Version is the string that represents the current external default version.
|
// Version is the string that represents the current external default version.
|
||||||
@@ -79,7 +79,7 @@ func init() {
|
|||||||
|
|
||||||
// the list of kinds that are scoped at the root of the api hierarchy
|
// the list of kinds that are scoped at the root of the api hierarchy
|
||||||
// if a kind is not enumerated here, it is assumed to have a namespace scope
|
// if a kind is not enumerated here, it is assumed to have a namespace scope
|
||||||
rootScoped := util.NewStringSet(
|
rootScoped := sets.NewString(
|
||||||
"Node",
|
"Node",
|
||||||
"Minion",
|
"Minion",
|
||||||
"Namespace",
|
"Namespace",
|
||||||
@@ -87,7 +87,7 @@ func init() {
|
|||||||
)
|
)
|
||||||
|
|
||||||
// these kinds should be excluded from the list of resources
|
// these kinds should be excluded from the list of resources
|
||||||
ignoredKinds := util.NewStringSet(
|
ignoredKinds := sets.NewString(
|
||||||
"ListOptions",
|
"ListOptions",
|
||||||
"DeleteOptions",
|
"DeleteOptions",
|
||||||
"Status",
|
"Status",
|
||||||
|
@@ -20,7 +20,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
var RESTMapper meta.RESTMapper
|
var RESTMapper meta.RESTMapper
|
||||||
@@ -34,7 +34,7 @@ func RegisterRESTMapper(m meta.RESTMapper) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewDefaultRESTMapper(group string, versions []string, interfacesFunc meta.VersionInterfacesFunc,
|
func NewDefaultRESTMapper(group string, versions []string, interfacesFunc meta.VersionInterfacesFunc,
|
||||||
importPathPrefix string, ignoredKinds, rootScoped util.StringSet) *meta.DefaultRESTMapper {
|
importPathPrefix string, ignoredKinds, rootScoped sets.String) *meta.DefaultRESTMapper {
|
||||||
|
|
||||||
mapper := meta.NewDefaultRESTMapper(group, versions, interfacesFunc)
|
mapper := meta.NewDefaultRESTMapper(group, versions, interfacesFunc)
|
||||||
// enumerate all supported versions, get the kinds, and register with the mapper how to address
|
// enumerate all supported versions, get the kinds, and register with the mapper how to address
|
||||||
|
@@ -31,6 +31,7 @@ import (
|
|||||||
apitesting "k8s.io/kubernetes/pkg/api/testing"
|
apitesting "k8s.io/kubernetes/pkg/api/testing"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
|
|
||||||
_ "k8s.io/kubernetes/pkg/expapi"
|
_ "k8s.io/kubernetes/pkg/expapi"
|
||||||
_ "k8s.io/kubernetes/pkg/expapi/v1"
|
_ "k8s.io/kubernetes/pkg/expapi/v1"
|
||||||
@@ -87,7 +88,7 @@ func roundTrip(t *testing.T, codec runtime.Codec, item runtime.Object) {
|
|||||||
|
|
||||||
// roundTripSame verifies the same source object is tested in all API versions.
|
// roundTripSame verifies the same source object is tested in all API versions.
|
||||||
func roundTripSame(t *testing.T, item runtime.Object, except ...string) {
|
func roundTripSame(t *testing.T, item runtime.Object, except ...string) {
|
||||||
set := util.NewStringSet(except...)
|
set := sets.NewString(except...)
|
||||||
seed := rand.Int63()
|
seed := rand.Int63()
|
||||||
fuzzInternalObject(t, "", item, seed)
|
fuzzInternalObject(t, "", item, seed)
|
||||||
version := testapi.Default.Version()
|
version := testapi.Default.Version()
|
||||||
@@ -119,8 +120,8 @@ func TestList(t *testing.T) {
|
|||||||
roundTripSame(t, item)
|
roundTripSame(t, item)
|
||||||
}
|
}
|
||||||
|
|
||||||
var nonRoundTrippableTypes = util.NewStringSet()
|
var nonRoundTrippableTypes = sets.NewString()
|
||||||
var nonInternalRoundTrippableTypes = util.NewStringSet("List", "ListOptions", "PodExecOptions", "PodAttachOptions")
|
var nonInternalRoundTrippableTypes = sets.NewString("List", "ListOptions", "PodExecOptions", "PodAttachOptions")
|
||||||
var nonRoundTrippableTypesByVersion = map[string][]string{}
|
var nonRoundTrippableTypesByVersion = map[string][]string{}
|
||||||
|
|
||||||
func TestRoundTripTypes(t *testing.T) {
|
func TestRoundTripTypes(t *testing.T) {
|
||||||
|
@@ -32,6 +32,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
errs "k8s.io/kubernetes/pkg/util/fielderrors"
|
errs "k8s.io/kubernetes/pkg/util/fielderrors"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
)
|
)
|
||||||
@@ -307,10 +308,10 @@ func ValidateObjectMetaUpdate(new, old *api.ObjectMeta) errs.ValidationErrorList
|
|||||||
return allErrs
|
return allErrs
|
||||||
}
|
}
|
||||||
|
|
||||||
func validateVolumes(volumes []api.Volume) (util.StringSet, errs.ValidationErrorList) {
|
func validateVolumes(volumes []api.Volume) (sets.String, errs.ValidationErrorList) {
|
||||||
allErrs := errs.ValidationErrorList{}
|
allErrs := errs.ValidationErrorList{}
|
||||||
|
|
||||||
allNames := util.StringSet{}
|
allNames := sets.String{}
|
||||||
for i, vol := range volumes {
|
for i, vol := range volumes {
|
||||||
el := validateSource(&vol.VolumeSource).Prefix("source")
|
el := validateSource(&vol.VolumeSource).Prefix("source")
|
||||||
if len(vol.Name) == 0 {
|
if len(vol.Name) == 0 {
|
||||||
@@ -497,7 +498,7 @@ func validateGlusterfs(glusterfs *api.GlusterfsVolumeSource) errs.ValidationErro
|
|||||||
return allErrs
|
return allErrs
|
||||||
}
|
}
|
||||||
|
|
||||||
var validDownwardAPIFieldPathExpressions = util.NewStringSet("metadata.name", "metadata.namespace", "metadata.labels", "metadata.annotations")
|
var validDownwardAPIFieldPathExpressions = sets.NewString("metadata.name", "metadata.namespace", "metadata.labels", "metadata.annotations")
|
||||||
|
|
||||||
func validateDownwardAPIVolumeSource(downwardAPIVolume *api.DownwardAPIVolumeSource) errs.ValidationErrorList {
|
func validateDownwardAPIVolumeSource(downwardAPIVolume *api.DownwardAPIVolumeSource) errs.ValidationErrorList {
|
||||||
allErrs := errs.ValidationErrorList{}
|
allErrs := errs.ValidationErrorList{}
|
||||||
@@ -688,12 +689,12 @@ func ValidatePersistentVolumeClaimStatusUpdate(newPvc, oldPvc *api.PersistentVol
|
|||||||
return allErrs
|
return allErrs
|
||||||
}
|
}
|
||||||
|
|
||||||
var supportedPortProtocols = util.NewStringSet(string(api.ProtocolTCP), string(api.ProtocolUDP))
|
var supportedPortProtocols = sets.NewString(string(api.ProtocolTCP), string(api.ProtocolUDP))
|
||||||
|
|
||||||
func validatePorts(ports []api.ContainerPort) errs.ValidationErrorList {
|
func validatePorts(ports []api.ContainerPort) errs.ValidationErrorList {
|
||||||
allErrs := errs.ValidationErrorList{}
|
allErrs := errs.ValidationErrorList{}
|
||||||
|
|
||||||
allNames := util.StringSet{}
|
allNames := sets.String{}
|
||||||
for i, port := range ports {
|
for i, port := range ports {
|
||||||
pErrs := errs.ValidationErrorList{}
|
pErrs := errs.ValidationErrorList{}
|
||||||
if len(port.Name) > 0 {
|
if len(port.Name) > 0 {
|
||||||
@@ -739,7 +740,7 @@ func validateEnv(vars []api.EnvVar) errs.ValidationErrorList {
|
|||||||
return allErrs
|
return allErrs
|
||||||
}
|
}
|
||||||
|
|
||||||
var validFieldPathExpressionsEnv = util.NewStringSet("metadata.name", "metadata.namespace", "status.podIP")
|
var validFieldPathExpressionsEnv = sets.NewString("metadata.name", "metadata.namespace", "status.podIP")
|
||||||
|
|
||||||
func validateEnvVarValueFrom(ev api.EnvVar) errs.ValidationErrorList {
|
func validateEnvVarValueFrom(ev api.EnvVar) errs.ValidationErrorList {
|
||||||
allErrs := errs.ValidationErrorList{}
|
allErrs := errs.ValidationErrorList{}
|
||||||
@@ -763,7 +764,7 @@ func validateEnvVarValueFrom(ev api.EnvVar) errs.ValidationErrorList {
|
|||||||
return allErrs
|
return allErrs
|
||||||
}
|
}
|
||||||
|
|
||||||
func validateObjectFieldSelector(fs *api.ObjectFieldSelector, expressions *util.StringSet) errs.ValidationErrorList {
|
func validateObjectFieldSelector(fs *api.ObjectFieldSelector, expressions *sets.String) errs.ValidationErrorList {
|
||||||
allErrs := errs.ValidationErrorList{}
|
allErrs := errs.ValidationErrorList{}
|
||||||
|
|
||||||
if fs.APIVersion == "" {
|
if fs.APIVersion == "" {
|
||||||
@@ -782,7 +783,7 @@ func validateObjectFieldSelector(fs *api.ObjectFieldSelector, expressions *util.
|
|||||||
return allErrs
|
return allErrs
|
||||||
}
|
}
|
||||||
|
|
||||||
func validateVolumeMounts(mounts []api.VolumeMount, volumes util.StringSet) errs.ValidationErrorList {
|
func validateVolumeMounts(mounts []api.VolumeMount, volumes sets.String) errs.ValidationErrorList {
|
||||||
allErrs := errs.ValidationErrorList{}
|
allErrs := errs.ValidationErrorList{}
|
||||||
|
|
||||||
for i, mnt := range mounts {
|
for i, mnt := range mounts {
|
||||||
@@ -818,7 +819,7 @@ func validateProbe(probe *api.Probe) errs.ValidationErrorList {
|
|||||||
|
|
||||||
// AccumulateUniqueHostPorts extracts each HostPort of each Container,
|
// AccumulateUniqueHostPorts extracts each HostPort of each Container,
|
||||||
// accumulating the results and returning an error if any ports conflict.
|
// accumulating the results and returning an error if any ports conflict.
|
||||||
func AccumulateUniqueHostPorts(containers []api.Container, accumulator *util.StringSet) errs.ValidationErrorList {
|
func AccumulateUniqueHostPorts(containers []api.Container, accumulator *sets.String) errs.ValidationErrorList {
|
||||||
allErrs := errs.ValidationErrorList{}
|
allErrs := errs.ValidationErrorList{}
|
||||||
|
|
||||||
for ci, ctr := range containers {
|
for ci, ctr := range containers {
|
||||||
@@ -843,7 +844,7 @@ func AccumulateUniqueHostPorts(containers []api.Container, accumulator *util.Str
|
|||||||
// checkHostPortConflicts checks for colliding Port.HostPort values across
|
// checkHostPortConflicts checks for colliding Port.HostPort values across
|
||||||
// a slice of containers.
|
// a slice of containers.
|
||||||
func checkHostPortConflicts(containers []api.Container) errs.ValidationErrorList {
|
func checkHostPortConflicts(containers []api.Container) errs.ValidationErrorList {
|
||||||
allPorts := util.StringSet{}
|
allPorts := sets.String{}
|
||||||
return AccumulateUniqueHostPorts(containers, &allPorts)
|
return AccumulateUniqueHostPorts(containers, &allPorts)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -865,7 +866,7 @@ func validateHTTPGetAction(http *api.HTTPGetAction) errs.ValidationErrorList {
|
|||||||
} else if http.Port.Kind == util.IntstrString && !util.IsValidPortName(http.Port.StrVal) {
|
} else if http.Port.Kind == util.IntstrString && !util.IsValidPortName(http.Port.StrVal) {
|
||||||
allErrors = append(allErrors, errs.NewFieldInvalid("port", http.Port.StrVal, portNameErrorMsg))
|
allErrors = append(allErrors, errs.NewFieldInvalid("port", http.Port.StrVal, portNameErrorMsg))
|
||||||
}
|
}
|
||||||
supportedSchemes := util.NewStringSet(string(api.URISchemeHTTP), string(api.URISchemeHTTPS))
|
supportedSchemes := sets.NewString(string(api.URISchemeHTTP), string(api.URISchemeHTTPS))
|
||||||
if !supportedSchemes.Has(string(http.Scheme)) {
|
if !supportedSchemes.Has(string(http.Scheme)) {
|
||||||
allErrors = append(allErrors, errs.NewFieldInvalid("scheme", http.Scheme, fmt.Sprintf("must be one of %v", supportedSchemes.List())))
|
allErrors = append(allErrors, errs.NewFieldInvalid("scheme", http.Scheme, fmt.Sprintf("must be one of %v", supportedSchemes.List())))
|
||||||
}
|
}
|
||||||
@@ -930,14 +931,14 @@ func validatePullPolicy(ctr *api.Container) errs.ValidationErrorList {
|
|||||||
return allErrors
|
return allErrors
|
||||||
}
|
}
|
||||||
|
|
||||||
func validateContainers(containers []api.Container, volumes util.StringSet) errs.ValidationErrorList {
|
func validateContainers(containers []api.Container, volumes sets.String) errs.ValidationErrorList {
|
||||||
allErrs := errs.ValidationErrorList{}
|
allErrs := errs.ValidationErrorList{}
|
||||||
|
|
||||||
if len(containers) == 0 {
|
if len(containers) == 0 {
|
||||||
return append(allErrs, errs.NewFieldRequired(""))
|
return append(allErrs, errs.NewFieldRequired(""))
|
||||||
}
|
}
|
||||||
|
|
||||||
allNames := util.StringSet{}
|
allNames := sets.String{}
|
||||||
for i, ctr := range containers {
|
for i, ctr := range containers {
|
||||||
cErrs := errs.ValidationErrorList{}
|
cErrs := errs.ValidationErrorList{}
|
||||||
if len(ctr.Name) == 0 {
|
if len(ctr.Name) == 0 {
|
||||||
@@ -1130,8 +1131,8 @@ func ValidatePodTemplateUpdate(newPod, oldPod *api.PodTemplate) errs.ValidationE
|
|||||||
return allErrs
|
return allErrs
|
||||||
}
|
}
|
||||||
|
|
||||||
var supportedSessionAffinityType = util.NewStringSet(string(api.ServiceAffinityClientIP), string(api.ServiceAffinityNone))
|
var supportedSessionAffinityType = sets.NewString(string(api.ServiceAffinityClientIP), string(api.ServiceAffinityNone))
|
||||||
var supportedServiceType = util.NewStringSet(string(api.ServiceTypeClusterIP), string(api.ServiceTypeNodePort),
|
var supportedServiceType = sets.NewString(string(api.ServiceTypeClusterIP), string(api.ServiceTypeNodePort),
|
||||||
string(api.ServiceTypeLoadBalancer))
|
string(api.ServiceTypeLoadBalancer))
|
||||||
|
|
||||||
// ValidateService tests if required fields in the service are set.
|
// ValidateService tests if required fields in the service are set.
|
||||||
@@ -1150,7 +1151,7 @@ func ValidateService(service *api.Service) errs.ValidationErrorList {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
allPortNames := util.StringSet{}
|
allPortNames := sets.String{}
|
||||||
for i := range service.Spec.Ports {
|
for i := range service.Spec.Ports {
|
||||||
allErrs = append(allErrs, validateServicePort(&service.Spec.Ports[i], len(service.Spec.Ports) > 1, &allPortNames).PrefixIndex(i).Prefix("spec.ports")...)
|
allErrs = append(allErrs, validateServicePort(&service.Spec.Ports[i], len(service.Spec.Ports) > 1, &allPortNames).PrefixIndex(i).Prefix("spec.ports")...)
|
||||||
}
|
}
|
||||||
@@ -1220,7 +1221,7 @@ func ValidateService(service *api.Service) errs.ValidationErrorList {
|
|||||||
return allErrs
|
return allErrs
|
||||||
}
|
}
|
||||||
|
|
||||||
func validateServicePort(sp *api.ServicePort, requireName bool, allNames *util.StringSet) errs.ValidationErrorList {
|
func validateServicePort(sp *api.ServicePort, requireName bool, allNames *sets.String) errs.ValidationErrorList {
|
||||||
allErrs := errs.ValidationErrorList{}
|
allErrs := errs.ValidationErrorList{}
|
||||||
|
|
||||||
if requireName && sp.Name == "" {
|
if requireName && sp.Name == "" {
|
||||||
@@ -1441,7 +1442,7 @@ func ValidateLimitRange(limitRange *api.LimitRange) errs.ValidationErrorList {
|
|||||||
}
|
}
|
||||||
limitTypeSet[limit.Type] = true
|
limitTypeSet[limit.Type] = true
|
||||||
|
|
||||||
keys := util.StringSet{}
|
keys := sets.String{}
|
||||||
min := map[string]resource.Quantity{}
|
min := map[string]resource.Quantity{}
|
||||||
max := map[string]resource.Quantity{}
|
max := map[string]resource.Quantity{}
|
||||||
defaults := map[string]resource.Quantity{}
|
defaults := map[string]resource.Quantity{}
|
||||||
@@ -1884,7 +1885,7 @@ func ValidateThirdPartyResource(obj *api.ThirdPartyResource) errs.ValidationErro
|
|||||||
if len(obj.Name) == 0 {
|
if len(obj.Name) == 0 {
|
||||||
allErrs = append(allErrs, errs.NewFieldInvalid("name", obj.Name, "name must be non-empty"))
|
allErrs = append(allErrs, errs.NewFieldInvalid("name", obj.Name, "name must be non-empty"))
|
||||||
}
|
}
|
||||||
versions := util.StringSet{}
|
versions := sets.String{}
|
||||||
for ix := range obj.Versions {
|
for ix := range obj.Versions {
|
||||||
version := &obj.Versions[ix]
|
version := &obj.Versions[ix]
|
||||||
if len(version.Name) == 0 {
|
if len(version.Name) == 0 {
|
||||||
|
@@ -30,6 +30,7 @@ import (
|
|||||||
utilerrors "k8s.io/kubernetes/pkg/util/errors"
|
utilerrors "k8s.io/kubernetes/pkg/util/errors"
|
||||||
"k8s.io/kubernetes/pkg/util/fielderrors"
|
"k8s.io/kubernetes/pkg/util/fielderrors"
|
||||||
errors "k8s.io/kubernetes/pkg/util/fielderrors"
|
errors "k8s.io/kubernetes/pkg/util/fielderrors"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
func expectPrefix(t *testing.T, prefix string, errs fielderrors.ValidationErrorList) {
|
func expectPrefix(t *testing.T, prefix string, errs fielderrors.ValidationErrorList) {
|
||||||
@@ -769,7 +770,7 @@ func TestValidateEnv(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestValidateVolumeMounts(t *testing.T) {
|
func TestValidateVolumeMounts(t *testing.T) {
|
||||||
volumes := util.NewStringSet("abc", "123", "abc-123")
|
volumes := sets.NewString("abc", "123", "abc-123")
|
||||||
|
|
||||||
successCase := []api.VolumeMount{
|
successCase := []api.VolumeMount{
|
||||||
{Name: "abc", MountPath: "/foo"},
|
{Name: "abc", MountPath: "/foo"},
|
||||||
@@ -896,7 +897,7 @@ func getResourceLimits(cpu, memory string) api.ResourceList {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestValidateContainers(t *testing.T) {
|
func TestValidateContainers(t *testing.T) {
|
||||||
volumes := util.StringSet{}
|
volumes := sets.String{}
|
||||||
capabilities.SetForTests(capabilities.Capabilities{
|
capabilities.SetForTests(capabilities.Capabilities{
|
||||||
AllowPrivileged: true,
|
AllowPrivileged: true,
|
||||||
})
|
})
|
||||||
|
@@ -42,6 +42,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
"k8s.io/kubernetes/pkg/util/errors"
|
"k8s.io/kubernetes/pkg/util/errors"
|
||||||
"k8s.io/kubernetes/pkg/util/flushwriter"
|
"k8s.io/kubernetes/pkg/util/flushwriter"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/version"
|
"k8s.io/kubernetes/pkg/version"
|
||||||
|
|
||||||
"github.com/emicklei/go-restful"
|
"github.com/emicklei/go-restful"
|
||||||
@@ -115,7 +116,7 @@ const (
|
|||||||
// It is expected that the provided path root prefix will serve all operations. Root MUST NOT end
|
// It is expected that the provided path root prefix will serve all operations. Root MUST NOT end
|
||||||
// in a slash. A restful WebService is created for the group and version.
|
// in a slash. A restful WebService is created for the group and version.
|
||||||
func (g *APIGroupVersion) InstallREST(container *restful.Container) error {
|
func (g *APIGroupVersion) InstallREST(container *restful.Container) error {
|
||||||
info := &APIRequestInfoResolver{util.NewStringSet(strings.TrimPrefix(g.Root, "/")), g.Mapper}
|
info := &APIRequestInfoResolver{sets.NewString(strings.TrimPrefix(g.Root, "/")), g.Mapper}
|
||||||
|
|
||||||
prefix := path.Join(g.Root, g.Version)
|
prefix := path.Join(g.Root, g.Version)
|
||||||
installer := &APIInstaller{
|
installer := &APIInstaller{
|
||||||
|
@@ -35,6 +35,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/auth/authorizer"
|
"k8s.io/kubernetes/pkg/auth/authorizer"
|
||||||
"k8s.io/kubernetes/pkg/httplog"
|
"k8s.io/kubernetes/pkg/httplog"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
// specialVerbs contains just strings which are used in REST paths for special actions that don't fall under the normal
|
// specialVerbs contains just strings which are used in REST paths for special actions that don't fall under the normal
|
||||||
@@ -351,7 +352,7 @@ type requestAttributeGetter struct {
|
|||||||
|
|
||||||
// NewAttributeGetter returns an object which implements the RequestAttributeGetter interface.
|
// NewAttributeGetter returns an object which implements the RequestAttributeGetter interface.
|
||||||
func NewRequestAttributeGetter(requestContextMapper api.RequestContextMapper, restMapper meta.RESTMapper, apiRoots ...string) RequestAttributeGetter {
|
func NewRequestAttributeGetter(requestContextMapper api.RequestContextMapper, restMapper meta.RESTMapper, apiRoots ...string) RequestAttributeGetter {
|
||||||
return &requestAttributeGetter{requestContextMapper, &APIRequestInfoResolver{util.NewStringSet(apiRoots...), restMapper}}
|
return &requestAttributeGetter{requestContextMapper, &APIRequestInfoResolver{sets.NewString(apiRoots...), restMapper}}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *requestAttributeGetter) GetAttribs(req *http.Request) authorizer.Attributes {
|
func (r *requestAttributeGetter) GetAttribs(req *http.Request) authorizer.Attributes {
|
||||||
@@ -417,7 +418,7 @@ type APIRequestInfo struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type APIRequestInfoResolver struct {
|
type APIRequestInfoResolver struct {
|
||||||
APIPrefixes util.StringSet
|
APIPrefixes sets.String
|
||||||
RestMapper meta.RESTMapper
|
RestMapper meta.RESTMapper
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -31,7 +31,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/errors"
|
"k8s.io/kubernetes/pkg/api/errors"
|
||||||
"k8s.io/kubernetes/pkg/api/latest"
|
"k8s.io/kubernetes/pkg/api/latest"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
type fakeRL bool
|
type fakeRL bool
|
||||||
@@ -246,7 +246,7 @@ func TestGetAPIRequestInfo(t *testing.T) {
|
|||||||
{"PUT", "/namespaces/other/finalize", "update", "", "other", "finalize", "", "", "", []string{"finalize"}},
|
{"PUT", "/namespaces/other/finalize", "update", "", "other", "finalize", "", "", "", []string{"finalize"}},
|
||||||
}
|
}
|
||||||
|
|
||||||
apiRequestInfoResolver := &APIRequestInfoResolver{util.NewStringSet("api"), latest.RESTMapper}
|
apiRequestInfoResolver := &APIRequestInfoResolver{sets.NewString("api"), latest.RESTMapper}
|
||||||
|
|
||||||
for _, successCase := range successCases {
|
for _, successCase := range successCases {
|
||||||
req, _ := http.NewRequest(successCase.method, successCase.url, nil)
|
req, _ := http.NewRequest(successCase.method, successCase.url, nil)
|
||||||
|
4
pkg/client/unversioned/cache/delta_fifo.go
vendored
4
pkg/client/unversioned/cache/delta_fifo.go
vendored
@@ -21,7 +21,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
)
|
)
|
||||||
@@ -319,7 +319,7 @@ func (f *DeltaFIFO) Replace(list []interface{}, resourceVersion string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
keySet := make(util.StringSet, len(list))
|
keySet := make(sets.String, len(list))
|
||||||
for _, item := range list {
|
for _, item := range list {
|
||||||
key, err := f.KeyOf(item)
|
key, err := f.KeyOf(item)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@@ -18,6 +18,7 @@ package cache
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
type fakeThreadSafeMap struct {
|
type fakeThreadSafeMap struct {
|
||||||
@@ -32,7 +33,7 @@ func (c *fakeThreadSafeMap) Delete(key string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type FakeExpirationPolicy struct {
|
type FakeExpirationPolicy struct {
|
||||||
NeverExpire util.StringSet
|
NeverExpire sets.String
|
||||||
RetrieveKeyFunc KeyFunc
|
RetrieveKeyFunc KeyFunc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -22,6 +22,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestTTLExpirationBasic(t *testing.T) {
|
func TestTTLExpirationBasic(t *testing.T) {
|
||||||
@@ -30,7 +31,7 @@ func TestTTLExpirationBasic(t *testing.T) {
|
|||||||
ttlStore := NewFakeExpirationStore(
|
ttlStore := NewFakeExpirationStore(
|
||||||
testStoreKeyFunc, deleteChan,
|
testStoreKeyFunc, deleteChan,
|
||||||
&FakeExpirationPolicy{
|
&FakeExpirationPolicy{
|
||||||
NeverExpire: util.NewStringSet(),
|
NeverExpire: sets.NewString(),
|
||||||
RetrieveKeyFunc: func(obj interface{}) (string, error) {
|
RetrieveKeyFunc: func(obj interface{}) (string, error) {
|
||||||
return obj.(*timestampedEntry).obj.(testStoreObject).id, nil
|
return obj.(*timestampedEntry).obj.(testStoreObject).id, nil
|
||||||
},
|
},
|
||||||
@@ -66,14 +67,14 @@ func TestTTLList(t *testing.T) {
|
|||||||
{id: "foo1", val: "bar1"},
|
{id: "foo1", val: "bar1"},
|
||||||
{id: "foo2", val: "bar2"},
|
{id: "foo2", val: "bar2"},
|
||||||
}
|
}
|
||||||
expireKeys := util.NewStringSet(testObjs[0].id, testObjs[2].id)
|
expireKeys := sets.NewString(testObjs[0].id, testObjs[2].id)
|
||||||
deleteChan := make(chan string)
|
deleteChan := make(chan string)
|
||||||
defer close(deleteChan)
|
defer close(deleteChan)
|
||||||
|
|
||||||
ttlStore := NewFakeExpirationStore(
|
ttlStore := NewFakeExpirationStore(
|
||||||
testStoreKeyFunc, deleteChan,
|
testStoreKeyFunc, deleteChan,
|
||||||
&FakeExpirationPolicy{
|
&FakeExpirationPolicy{
|
||||||
NeverExpire: util.NewStringSet(testObjs[1].id),
|
NeverExpire: sets.NewString(testObjs[1].id),
|
||||||
RetrieveKeyFunc: func(obj interface{}) (string, error) {
|
RetrieveKeyFunc: func(obj interface{}) (string, error) {
|
||||||
return obj.(*timestampedEntry).obj.(testStoreObject).id, nil
|
return obj.(*timestampedEntry).obj.(testStoreObject).id, nil
|
||||||
},
|
},
|
||||||
|
4
pkg/client/unversioned/cache/index.go
vendored
4
pkg/client/unversioned/cache/index.go
vendored
@@ -20,7 +20,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Indexer is a storage interface that lets you list objects using multiple indexing functions
|
// Indexer is a storage interface that lets you list objects using multiple indexing functions
|
||||||
@@ -63,7 +63,7 @@ func MetaNamespaceIndexFunc(obj interface{}) ([]string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Index maps the indexed value to a set of keys in the store that match on that value
|
// Index maps the indexed value to a set of keys in the store that match on that value
|
||||||
type Index map[string]util.StringSet
|
type Index map[string]sets.String
|
||||||
|
|
||||||
// Indexers maps a name to a IndexFunc
|
// Indexers maps a name to a IndexFunc
|
||||||
type Indexers map[string]IndexFunc
|
type Indexers map[string]IndexFunc
|
||||||
|
26
pkg/client/unversioned/cache/listers_test.go
vendored
26
pkg/client/unversioned/cache/listers_test.go
vendored
@@ -22,12 +22,12 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/expapi"
|
"k8s.io/kubernetes/pkg/expapi"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestStoreToMinionLister(t *testing.T) {
|
func TestStoreToMinionLister(t *testing.T) {
|
||||||
store := NewStore(MetaNamespaceKeyFunc)
|
store := NewStore(MetaNamespaceKeyFunc)
|
||||||
ids := util.NewStringSet("foo", "bar", "baz")
|
ids := sets.NewString("foo", "bar", "baz")
|
||||||
for id := range ids {
|
for id := range ids {
|
||||||
store.Add(&api.Node{ObjectMeta: api.ObjectMeta{Name: id}})
|
store.Add(&api.Node{ObjectMeta: api.ObjectMeta{Name: id}})
|
||||||
}
|
}
|
||||||
@@ -52,7 +52,7 @@ func TestStoreToReplicationControllerLister(t *testing.T) {
|
|||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
inRCs []*api.ReplicationController
|
inRCs []*api.ReplicationController
|
||||||
list func() ([]api.ReplicationController, error)
|
list func() ([]api.ReplicationController, error)
|
||||||
outRCNames util.StringSet
|
outRCNames sets.String
|
||||||
expectErr bool
|
expectErr bool
|
||||||
}{
|
}{
|
||||||
// Basic listing with all labels and no selectors
|
// Basic listing with all labels and no selectors
|
||||||
@@ -63,7 +63,7 @@ func TestStoreToReplicationControllerLister(t *testing.T) {
|
|||||||
list: func() ([]api.ReplicationController, error) {
|
list: func() ([]api.ReplicationController, error) {
|
||||||
return lister.List()
|
return lister.List()
|
||||||
},
|
},
|
||||||
outRCNames: util.NewStringSet("basic"),
|
outRCNames: sets.NewString("basic"),
|
||||||
},
|
},
|
||||||
// No pod labels
|
// No pod labels
|
||||||
{
|
{
|
||||||
@@ -81,7 +81,7 @@ func TestStoreToReplicationControllerLister(t *testing.T) {
|
|||||||
}
|
}
|
||||||
return lister.GetPodControllers(pod)
|
return lister.GetPodControllers(pod)
|
||||||
},
|
},
|
||||||
outRCNames: util.NewStringSet(),
|
outRCNames: sets.NewString(),
|
||||||
expectErr: true,
|
expectErr: true,
|
||||||
},
|
},
|
||||||
// No RC selectors
|
// No RC selectors
|
||||||
@@ -101,7 +101,7 @@ func TestStoreToReplicationControllerLister(t *testing.T) {
|
|||||||
}
|
}
|
||||||
return lister.GetPodControllers(pod)
|
return lister.GetPodControllers(pod)
|
||||||
},
|
},
|
||||||
outRCNames: util.NewStringSet(),
|
outRCNames: sets.NewString(),
|
||||||
expectErr: true,
|
expectErr: true,
|
||||||
},
|
},
|
||||||
// Matching labels to selectors and namespace
|
// Matching labels to selectors and namespace
|
||||||
@@ -130,7 +130,7 @@ func TestStoreToReplicationControllerLister(t *testing.T) {
|
|||||||
}
|
}
|
||||||
return lister.GetPodControllers(pod)
|
return lister.GetPodControllers(pod)
|
||||||
},
|
},
|
||||||
outRCNames: util.NewStringSet("bar"),
|
outRCNames: sets.NewString("bar"),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
for _, c := range testCases {
|
for _, c := range testCases {
|
||||||
@@ -162,7 +162,7 @@ func TestStoreToDaemonSetLister(t *testing.T) {
|
|||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
inDSs []*expapi.DaemonSet
|
inDSs []*expapi.DaemonSet
|
||||||
list func() ([]expapi.DaemonSet, error)
|
list func() ([]expapi.DaemonSet, error)
|
||||||
outDaemonSetNames util.StringSet
|
outDaemonSetNames sets.String
|
||||||
expectErr bool
|
expectErr bool
|
||||||
}{
|
}{
|
||||||
// Basic listing
|
// Basic listing
|
||||||
@@ -173,7 +173,7 @@ func TestStoreToDaemonSetLister(t *testing.T) {
|
|||||||
list: func() ([]expapi.DaemonSet, error) {
|
list: func() ([]expapi.DaemonSet, error) {
|
||||||
return lister.List()
|
return lister.List()
|
||||||
},
|
},
|
||||||
outDaemonSetNames: util.NewStringSet("basic"),
|
outDaemonSetNames: sets.NewString("basic"),
|
||||||
},
|
},
|
||||||
// Listing multiple daemon sets
|
// Listing multiple daemon sets
|
||||||
{
|
{
|
||||||
@@ -185,7 +185,7 @@ func TestStoreToDaemonSetLister(t *testing.T) {
|
|||||||
list: func() ([]expapi.DaemonSet, error) {
|
list: func() ([]expapi.DaemonSet, error) {
|
||||||
return lister.List()
|
return lister.List()
|
||||||
},
|
},
|
||||||
outDaemonSetNames: util.NewStringSet("basic", "complex", "complex2"),
|
outDaemonSetNames: sets.NewString("basic", "complex", "complex2"),
|
||||||
},
|
},
|
||||||
// No pod labels
|
// No pod labels
|
||||||
{
|
{
|
||||||
@@ -203,7 +203,7 @@ func TestStoreToDaemonSetLister(t *testing.T) {
|
|||||||
}
|
}
|
||||||
return lister.GetPodDaemonSets(pod)
|
return lister.GetPodDaemonSets(pod)
|
||||||
},
|
},
|
||||||
outDaemonSetNames: util.NewStringSet(),
|
outDaemonSetNames: sets.NewString(),
|
||||||
expectErr: true,
|
expectErr: true,
|
||||||
},
|
},
|
||||||
// No DS selectors
|
// No DS selectors
|
||||||
@@ -223,7 +223,7 @@ func TestStoreToDaemonSetLister(t *testing.T) {
|
|||||||
}
|
}
|
||||||
return lister.GetPodDaemonSets(pod)
|
return lister.GetPodDaemonSets(pod)
|
||||||
},
|
},
|
||||||
outDaemonSetNames: util.NewStringSet(),
|
outDaemonSetNames: sets.NewString(),
|
||||||
expectErr: true,
|
expectErr: true,
|
||||||
},
|
},
|
||||||
// Matching labels to selectors and namespace
|
// Matching labels to selectors and namespace
|
||||||
@@ -252,7 +252,7 @@ func TestStoreToDaemonSetLister(t *testing.T) {
|
|||||||
}
|
}
|
||||||
return lister.GetPodDaemonSets(pod)
|
return lister.GetPodDaemonSets(pod)
|
||||||
},
|
},
|
||||||
outDaemonSetNames: util.NewStringSet("bar"),
|
outDaemonSetNames: sets.NewString("bar"),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
for _, c := range testCases {
|
for _, c := range testCases {
|
||||||
|
16
pkg/client/unversioned/cache/store_test.go
vendored
16
pkg/client/unversioned/cache/store_test.go
vendored
@@ -19,7 +19,7 @@ package cache
|
|||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Test public interface
|
// Test public interface
|
||||||
@@ -54,7 +54,7 @@ func doTestStore(t *testing.T, store Store) {
|
|||||||
store.Add(mkObj("c", "d"))
|
store.Add(mkObj("c", "d"))
|
||||||
store.Add(mkObj("e", "e"))
|
store.Add(mkObj("e", "e"))
|
||||||
{
|
{
|
||||||
found := util.StringSet{}
|
found := sets.String{}
|
||||||
for _, item := range store.List() {
|
for _, item := range store.List() {
|
||||||
found.Insert(item.(testStoreObject).val)
|
found.Insert(item.(testStoreObject).val)
|
||||||
}
|
}
|
||||||
@@ -73,7 +73,7 @@ func doTestStore(t *testing.T, store Store) {
|
|||||||
}, "0")
|
}, "0")
|
||||||
|
|
||||||
{
|
{
|
||||||
found := util.StringSet{}
|
found := sets.String{}
|
||||||
for _, item := range store.List() {
|
for _, item := range store.List() {
|
||||||
found.Insert(item.(testStoreObject).val)
|
found.Insert(item.(testStoreObject).val)
|
||||||
}
|
}
|
||||||
@@ -93,17 +93,17 @@ func doTestIndex(t *testing.T, indexer Indexer) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Test Index
|
// Test Index
|
||||||
expected := map[string]util.StringSet{}
|
expected := map[string]sets.String{}
|
||||||
expected["b"] = util.NewStringSet("a", "c")
|
expected["b"] = sets.NewString("a", "c")
|
||||||
expected["f"] = util.NewStringSet("e")
|
expected["f"] = sets.NewString("e")
|
||||||
expected["h"] = util.NewStringSet("g")
|
expected["h"] = sets.NewString("g")
|
||||||
indexer.Add(mkObj("a", "b"))
|
indexer.Add(mkObj("a", "b"))
|
||||||
indexer.Add(mkObj("c", "b"))
|
indexer.Add(mkObj("c", "b"))
|
||||||
indexer.Add(mkObj("e", "f"))
|
indexer.Add(mkObj("e", "f"))
|
||||||
indexer.Add(mkObj("g", "h"))
|
indexer.Add(mkObj("g", "h"))
|
||||||
{
|
{
|
||||||
for k, v := range expected {
|
for k, v := range expected {
|
||||||
found := util.StringSet{}
|
found := sets.String{}
|
||||||
indexResults, err := indexer.Index("by_val", mkObj("", k))
|
indexResults, err := indexer.Index("by_val", mkObj("", k))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Unexpected error %v", err)
|
t.Errorf("Unexpected error %v", err)
|
||||||
|
@@ -20,7 +20,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ThreadSafeStore is an interface that allows concurrent access to a storage backend.
|
// ThreadSafeStore is an interface that allows concurrent access to a storage backend.
|
||||||
@@ -142,7 +142,7 @@ func (c *threadSafeMap) Index(indexName string, obj interface{}) ([]interface{},
|
|||||||
index := c.indices[indexName]
|
index := c.indices[indexName]
|
||||||
|
|
||||||
// need to de-dupe the return list. Since multiple keys are allowed, this can happen.
|
// need to de-dupe the return list. Since multiple keys are allowed, this can happen.
|
||||||
returnKeySet := util.StringSet{}
|
returnKeySet := sets.String{}
|
||||||
for _, indexKey := range indexKeys {
|
for _, indexKey := range indexKeys {
|
||||||
set := index[indexKey]
|
set := index[indexKey]
|
||||||
for _, key := range set.List() {
|
for _, key := range set.List() {
|
||||||
@@ -208,7 +208,7 @@ func (c *threadSafeMap) updateIndices(oldObj interface{}, newObj interface{}, ke
|
|||||||
for _, indexValue := range indexValues {
|
for _, indexValue := range indexValues {
|
||||||
set := index[indexValue]
|
set := index[indexValue]
|
||||||
if set == nil {
|
if set == nil {
|
||||||
set = util.StringSet{}
|
set = sets.String{}
|
||||||
index[indexValue] = set
|
index[indexValue] = set
|
||||||
}
|
}
|
||||||
set.Insert(key)
|
set.Insert(key)
|
||||||
|
@@ -23,7 +23,7 @@ import (
|
|||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
// RequestInfo keeps track of information about a request/response combination
|
// RequestInfo keeps track of information about a request/response combination
|
||||||
@@ -75,7 +75,7 @@ func (r RequestInfo) ToCurl() string {
|
|||||||
type DebuggingRoundTripper struct {
|
type DebuggingRoundTripper struct {
|
||||||
delegatedRoundTripper http.RoundTripper
|
delegatedRoundTripper http.RoundTripper
|
||||||
|
|
||||||
Levels util.StringSet
|
Levels sets.String
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -88,7 +88,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func NewDebuggingRoundTripper(rt http.RoundTripper, levels ...string) *DebuggingRoundTripper {
|
func NewDebuggingRoundTripper(rt http.RoundTripper, levels ...string) *DebuggingRoundTripper {
|
||||||
return &DebuggingRoundTripper{rt, util.NewStringSet(levels...)}
|
return &DebuggingRoundTripper{rt, sets.NewString(levels...)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rt *DebuggingRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
|
func (rt *DebuggingRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
|
||||||
|
@@ -20,12 +20,12 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
type fakeFlagSet struct {
|
type fakeFlagSet struct {
|
||||||
t *testing.T
|
t *testing.T
|
||||||
set util.StringSet
|
set sets.String
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *fakeFlagSet) StringVar(p *string, name, value, usage string) {
|
func (f *fakeFlagSet) StringVar(p *string, name, value, usage string) {
|
||||||
|
@@ -35,6 +35,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/latest"
|
"k8s.io/kubernetes/pkg/api/latest"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/version"
|
"k8s.io/kubernetes/pkg/version"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -187,7 +188,7 @@ func NegotiateVersion(client *Client, c *Config, version string, clientRegistere
|
|||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
clientVersions := util.StringSet{}
|
clientVersions := sets.String{}
|
||||||
for _, v := range clientRegisteredVersions {
|
for _, v := range clientRegisteredVersions {
|
||||||
clientVersions.Insert(v)
|
clientVersions.Insert(v)
|
||||||
}
|
}
|
||||||
@@ -195,7 +196,7 @@ func NegotiateVersion(client *Client, c *Config, version string, clientRegistere
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("couldn't read version from server: %v", err)
|
return "", fmt.Errorf("couldn't read version from server: %v", err)
|
||||||
}
|
}
|
||||||
serverVersions := util.StringSet{}
|
serverVersions := sets.String{}
|
||||||
for _, v := range apiVersions.Versions {
|
for _, v := range apiVersions.Versions {
|
||||||
serverVersions.Insert(v)
|
serverVersions.Insert(v)
|
||||||
}
|
}
|
||||||
|
@@ -39,13 +39,14 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
"k8s.io/kubernetes/pkg/util/httpstream"
|
"k8s.io/kubernetes/pkg/util/httpstream"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
watchjson "k8s.io/kubernetes/pkg/watch/json"
|
watchjson "k8s.io/kubernetes/pkg/watch/json"
|
||||||
)
|
)
|
||||||
|
|
||||||
// specialParams lists parameters that are handled specially and which users of Request
|
// specialParams lists parameters that are handled specially and which users of Request
|
||||||
// are therefore not allowed to set manually.
|
// are therefore not allowed to set manually.
|
||||||
var specialParams = util.NewStringSet("timeout")
|
var specialParams = sets.NewString("timeout")
|
||||||
|
|
||||||
// HTTPClient is an interface for testing a request object.
|
// HTTPClient is an interface for testing a request object.
|
||||||
type HTTPClient interface {
|
type HTTPClient interface {
|
||||||
|
@@ -24,7 +24,7 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/service/ec2"
|
"github.com/aws/aws-sdk-go/service/ec2"
|
||||||
"github.com/aws/aws-sdk-go/service/elb"
|
"github.com/aws/aws-sdk-go/service/elb"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (s *AWSCloud) ensureLoadBalancer(region, name string, listeners []*elb.Listener, subnetIDs []string, securityGroupIDs []string) (*elb.LoadBalancerDescription, error) {
|
func (s *AWSCloud) ensureLoadBalancer(region, name string, listeners []*elb.Listener, subnetIDs []string, securityGroupIDs []string) (*elb.LoadBalancerDescription, error) {
|
||||||
@@ -61,7 +61,7 @@ func (s *AWSCloud) ensureLoadBalancer(region, name string, listeners []*elb.List
|
|||||||
} else {
|
} else {
|
||||||
{
|
{
|
||||||
// Sync subnets
|
// Sync subnets
|
||||||
expected := util.NewStringSet(subnetIDs...)
|
expected := sets.NewString(subnetIDs...)
|
||||||
actual := stringSetFromPointers(loadBalancer.Subnets)
|
actual := stringSetFromPointers(loadBalancer.Subnets)
|
||||||
|
|
||||||
additions := expected.Difference(actual)
|
additions := expected.Difference(actual)
|
||||||
@@ -94,7 +94,7 @@ func (s *AWSCloud) ensureLoadBalancer(region, name string, listeners []*elb.List
|
|||||||
|
|
||||||
{
|
{
|
||||||
// Sync security groups
|
// Sync security groups
|
||||||
expected := util.NewStringSet(securityGroupIDs...)
|
expected := sets.NewString(securityGroupIDs...)
|
||||||
actual := stringSetFromPointers(loadBalancer.SecurityGroups)
|
actual := stringSetFromPointers(loadBalancer.SecurityGroups)
|
||||||
|
|
||||||
if !expected.Equal(actual) {
|
if !expected.Equal(actual) {
|
||||||
@@ -255,12 +255,12 @@ func (s *AWSCloud) ensureLoadBalancerHealthCheck(region string, loadBalancer *el
|
|||||||
|
|
||||||
// Makes sure that exactly the specified hosts are registered as instances with the load balancer
|
// Makes sure that exactly the specified hosts are registered as instances with the load balancer
|
||||||
func (s *AWSCloud) ensureLoadBalancerInstances(elbClient ELB, loadBalancerName string, lbInstances []*elb.Instance, instances []*ec2.Instance) error {
|
func (s *AWSCloud) ensureLoadBalancerInstances(elbClient ELB, loadBalancerName string, lbInstances []*elb.Instance, instances []*ec2.Instance) error {
|
||||||
expected := util.NewStringSet()
|
expected := sets.NewString()
|
||||||
for _, instance := range instances {
|
for _, instance := range instances {
|
||||||
expected.Insert(orEmpty(instance.InstanceID))
|
expected.Insert(orEmpty(instance.InstanceID))
|
||||||
}
|
}
|
||||||
|
|
||||||
actual := util.NewStringSet()
|
actual := sets.NewString()
|
||||||
for _, lbInstance := range lbInstances {
|
for _, lbInstance := range lbInstances {
|
||||||
actual.Insert(orEmpty(lbInstance.InstanceID))
|
actual.Insert(orEmpty(lbInstance.InstanceID))
|
||||||
}
|
}
|
||||||
|
@@ -18,10 +18,10 @@ package aws_cloud
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
func stringSetToPointers(in util.StringSet) []*string {
|
func stringSetToPointers(in sets.String) []*string {
|
||||||
if in == nil {
|
if in == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -32,11 +32,11 @@ func stringSetToPointers(in util.StringSet) []*string {
|
|||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
func stringSetFromPointers(in []*string) util.StringSet {
|
func stringSetFromPointers(in []*string) sets.String {
|
||||||
if in == nil {
|
if in == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
out := util.NewStringSet()
|
out := sets.NewString()
|
||||||
for i := range in {
|
for i := range in {
|
||||||
out.Insert(orEmpty(in[i]))
|
out.Insert(orEmpty(in[i]))
|
||||||
}
|
}
|
||||||
|
@@ -28,7 +28,7 @@ import (
|
|||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/cloudprovider"
|
"k8s.io/kubernetes/pkg/cloudprovider"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/util/wait"
|
"k8s.io/kubernetes/pkg/util/wait"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
@@ -464,7 +464,7 @@ func (gce *GCECloud) UpdateTCPLoadBalancer(name, region string, hosts []string)
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
existing := util.NewStringSet()
|
existing := sets.NewString()
|
||||||
for _, instance := range pool.Instances {
|
for _, instance := range pool.Instances {
|
||||||
existing.Insert(hostURLToComparablePath(instance))
|
existing.Insert(hostURLToComparablePath(instance))
|
||||||
}
|
}
|
||||||
|
@@ -34,6 +34,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/securitycontext"
|
"k8s.io/kubernetes/pkg/securitycontext"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewFakeControllerExpectationsLookup creates a fake store for PodExpectations.
|
// NewFakeControllerExpectationsLookup creates a fake store for PodExpectations.
|
||||||
@@ -224,13 +225,13 @@ func TestActivePodFiltering(t *testing.T) {
|
|||||||
podList := newPodList(nil, 5, api.PodRunning, rc)
|
podList := newPodList(nil, 5, api.PodRunning, rc)
|
||||||
podList.Items[0].Status.Phase = api.PodSucceeded
|
podList.Items[0].Status.Phase = api.PodSucceeded
|
||||||
podList.Items[1].Status.Phase = api.PodFailed
|
podList.Items[1].Status.Phase = api.PodFailed
|
||||||
expectedNames := util.NewStringSet()
|
expectedNames := sets.NewString()
|
||||||
for _, pod := range podList.Items[2:] {
|
for _, pod := range podList.Items[2:] {
|
||||||
expectedNames.Insert(pod.Name)
|
expectedNames.Insert(pod.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
got := FilterActivePods(podList.Items)
|
got := FilterActivePods(podList.Items)
|
||||||
gotNames := util.NewStringSet()
|
gotNames := sets.NewString()
|
||||||
for _, pod := range got {
|
for _, pod := range got {
|
||||||
gotNames.Insert(pod.Name)
|
gotNames.Insert(pod.Name)
|
||||||
}
|
}
|
||||||
|
@@ -33,6 +33,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/util/workqueue"
|
"k8s.io/kubernetes/pkg/util/workqueue"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
|
|
||||||
@@ -141,8 +142,8 @@ func (e *EndpointController) Run(workers int, stopCh <-chan struct{}) {
|
|||||||
e.queue.ShutDown()
|
e.queue.ShutDown()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *EndpointController) getPodServiceMemberships(pod *api.Pod) (util.StringSet, error) {
|
func (e *EndpointController) getPodServiceMemberships(pod *api.Pod) (sets.String, error) {
|
||||||
set := util.StringSet{}
|
set := sets.String{}
|
||||||
services, err := e.serviceStore.GetPodServices(pod)
|
services, err := e.serviceStore.GetPodServices(pod)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// don't log this error because this function makes pointless
|
// don't log this error because this function makes pointless
|
||||||
|
@@ -27,7 +27,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/client/unversioned/cache"
|
"k8s.io/kubernetes/pkg/client/unversioned/cache"
|
||||||
"k8s.io/kubernetes/pkg/controller/framework"
|
"k8s.io/kubernetes/pkg/controller/framework"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
|
|
||||||
"github.com/google/gofuzz"
|
"github.com/google/gofuzz"
|
||||||
)
|
)
|
||||||
@@ -104,7 +104,7 @@ func Example() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Let's wait for the controller to process the things we just added.
|
// Let's wait for the controller to process the things we just added.
|
||||||
outputSet := util.StringSet{}
|
outputSet := sets.String{}
|
||||||
for i := 0; i < len(testIDs); i++ {
|
for i := 0; i < len(testIDs); i++ {
|
||||||
outputSet.Insert(<-deletionCounter)
|
outputSet.Insert(<-deletionCounter)
|
||||||
}
|
}
|
||||||
@@ -161,7 +161,7 @@ func ExampleInformer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Let's wait for the controller to process the things we just added.
|
// Let's wait for the controller to process the things we just added.
|
||||||
outputSet := util.StringSet{}
|
outputSet := sets.String{}
|
||||||
for i := 0; i < len(testIDs); i++ {
|
for i := 0; i < len(testIDs); i++ {
|
||||||
outputSet.Insert(<-deletionCounter)
|
outputSet.Insert(<-deletionCounter)
|
||||||
}
|
}
|
||||||
@@ -235,7 +235,7 @@ func TestHammerController(t *testing.T) {
|
|||||||
go func() {
|
go func() {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
// Let's add a few objects to the source.
|
// Let's add a few objects to the source.
|
||||||
currentNames := util.StringSet{}
|
currentNames := sets.String{}
|
||||||
rs := rand.NewSource(rand.Int63())
|
rs := rand.NewSource(rand.Int63())
|
||||||
f := fuzz.New().NilChance(.5).NumElements(0, 2).RandSource(rs)
|
f := fuzz.New().NilChance(.5).NumElements(0, 2).RandSource(rs)
|
||||||
r := rand.New(rs) // Mustn't use r and f concurrently!
|
r := rand.New(rs) // Mustn't use r and f concurrently!
|
||||||
|
@@ -29,6 +29,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
@@ -128,7 +129,7 @@ func finalize(kubeClient client.Interface, namespace api.Namespace) (*api.Namesp
|
|||||||
namespaceFinalize := api.Namespace{}
|
namespaceFinalize := api.Namespace{}
|
||||||
namespaceFinalize.ObjectMeta = namespace.ObjectMeta
|
namespaceFinalize.ObjectMeta = namespace.ObjectMeta
|
||||||
namespaceFinalize.Spec = namespace.Spec
|
namespaceFinalize.Spec = namespace.Spec
|
||||||
finalizerSet := util.NewStringSet()
|
finalizerSet := sets.NewString()
|
||||||
for i := range namespace.Spec.Finalizers {
|
for i := range namespace.Spec.Finalizers {
|
||||||
if namespace.Spec.Finalizers[i] != api.FinalizerKubernetes {
|
if namespace.Spec.Finalizers[i] != api.FinalizerKubernetes {
|
||||||
finalizerSet.Insert(string(namespace.Spec.Finalizers[i]))
|
finalizerSet.Insert(string(namespace.Spec.Finalizers[i]))
|
||||||
|
@@ -24,6 +24,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient"
|
"k8s.io/kubernetes/pkg/client/unversioned/testclient"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestFinalized(t *testing.T) {
|
func TestFinalized(t *testing.T) {
|
||||||
@@ -90,7 +91,7 @@ func testSyncNamespaceThatIsTerminating(t *testing.T, experimentalMode bool) {
|
|||||||
t.Errorf("Unexpected error when synching namespace %v", err)
|
t.Errorf("Unexpected error when synching namespace %v", err)
|
||||||
}
|
}
|
||||||
// TODO: Reuse the constants for all these strings from testclient
|
// TODO: Reuse the constants for all these strings from testclient
|
||||||
expectedActionSet := util.NewStringSet(
|
expectedActionSet := sets.NewString(
|
||||||
strings.Join([]string{"list", "replicationcontrollers", ""}, "-"),
|
strings.Join([]string{"list", "replicationcontrollers", ""}, "-"),
|
||||||
strings.Join([]string{"list", "services", ""}, "-"),
|
strings.Join([]string{"list", "services", ""}, "-"),
|
||||||
strings.Join([]string{"list", "pods", ""}, "-"),
|
strings.Join([]string{"list", "pods", ""}, "-"),
|
||||||
@@ -112,7 +113,7 @@ func testSyncNamespaceThatIsTerminating(t *testing.T, experimentalMode bool) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
actionSet := util.NewStringSet()
|
actionSet := sets.NewString()
|
||||||
for _, action := range mockClient.Actions() {
|
for _, action := range mockClient.Actions() {
|
||||||
actionSet.Insert(strings.Join([]string{action.GetVerb(), action.GetResource(), action.GetSubresource()}, "-"))
|
actionSet.Insert(strings.Join([]string{action.GetVerb(), action.GetResource(), action.GetSubresource()}, "-"))
|
||||||
}
|
}
|
||||||
|
@@ -32,6 +32,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/types"
|
"k8s.io/kubernetes/pkg/types"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -58,7 +59,7 @@ type NodeController struct {
|
|||||||
cloud cloudprovider.Interface
|
cloud cloudprovider.Interface
|
||||||
clusterCIDR *net.IPNet
|
clusterCIDR *net.IPNet
|
||||||
deletingPodsRateLimiter util.RateLimiter
|
deletingPodsRateLimiter util.RateLimiter
|
||||||
knownNodeSet util.StringSet
|
knownNodeSet sets.String
|
||||||
kubeClient client.Interface
|
kubeClient client.Interface
|
||||||
// Method for easy mocking in unittest.
|
// Method for easy mocking in unittest.
|
||||||
lookupIP func(host string) ([]net.IP, error)
|
lookupIP func(host string) ([]net.IP, error)
|
||||||
@@ -126,7 +127,7 @@ func NewNodeController(
|
|||||||
evictorLock := sync.Mutex{}
|
evictorLock := sync.Mutex{}
|
||||||
return &NodeController{
|
return &NodeController{
|
||||||
cloud: cloud,
|
cloud: cloud,
|
||||||
knownNodeSet: make(util.StringSet),
|
knownNodeSet: make(sets.String),
|
||||||
kubeClient: kubeClient,
|
kubeClient: kubeClient,
|
||||||
recorder: recorder,
|
recorder: recorder,
|
||||||
podEvictionTimeout: podEvictionTimeout,
|
podEvictionTimeout: podEvictionTimeout,
|
||||||
@@ -211,8 +212,8 @@ func (nc *NodeController) Run(period time.Duration) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Generates num pod CIDRs that could be assigned to nodes.
|
// Generates num pod CIDRs that could be assigned to nodes.
|
||||||
func generateCIDRs(clusterCIDR *net.IPNet, num int) util.StringSet {
|
func generateCIDRs(clusterCIDR *net.IPNet, num int) sets.String {
|
||||||
res := util.NewStringSet()
|
res := sets.NewString()
|
||||||
cidrIP := clusterCIDR.IP.To4()
|
cidrIP := clusterCIDR.IP.To4()
|
||||||
for i := 0; i < num; i++ {
|
for i := 0; i < num; i++ {
|
||||||
// TODO: Make the CIDRs configurable.
|
// TODO: Make the CIDRs configurable.
|
||||||
@@ -256,7 +257,7 @@ func (nc *NodeController) monitorNodeStatus() error {
|
|||||||
// If there's a difference between lengths of known Nodes and observed nodes
|
// If there's a difference between lengths of known Nodes and observed nodes
|
||||||
// we must have removed some Node.
|
// we must have removed some Node.
|
||||||
if len(nc.knownNodeSet) != len(nodes.Items) {
|
if len(nc.knownNodeSet) != len(nodes.Items) {
|
||||||
observedSet := make(util.StringSet)
|
observedSet := make(sets.String)
|
||||||
for _, node := range nodes.Items {
|
for _, node := range nodes.Items {
|
||||||
observedSet.Insert(node.Name)
|
observedSet.Insert(node.Name)
|
||||||
}
|
}
|
||||||
|
@@ -22,6 +22,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TimedValue is a value that should be processed at a designated time.
|
// TimedValue is a value that should be processed at a designated time.
|
||||||
@@ -58,7 +59,7 @@ func (h *TimedQueue) Pop() interface{} {
|
|||||||
type UniqueQueue struct {
|
type UniqueQueue struct {
|
||||||
lock sync.Mutex
|
lock sync.Mutex
|
||||||
queue TimedQueue
|
queue TimedQueue
|
||||||
set util.StringSet
|
set sets.String
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adds a new value to the queue if it wasn't added before, or was explicitly removed by the
|
// Adds a new value to the queue if it wasn't added before, or was explicitly removed by the
|
||||||
@@ -143,7 +144,7 @@ func NewRateLimitedTimedQueue(limiter util.RateLimiter) *RateLimitedTimedQueue {
|
|||||||
return &RateLimitedTimedQueue{
|
return &RateLimitedTimedQueue{
|
||||||
queue: UniqueQueue{
|
queue: UniqueQueue{
|
||||||
queue: TimedQueue{},
|
queue: TimedQueue{},
|
||||||
set: util.NewStringSet(),
|
set: sets.NewString(),
|
||||||
},
|
},
|
||||||
limiter: limiter,
|
limiter: limiter,
|
||||||
}
|
}
|
||||||
|
@@ -22,6 +22,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
func CheckQueueEq(lhs []string, rhs TimedQueue) bool {
|
func CheckQueueEq(lhs []string, rhs TimedQueue) bool {
|
||||||
@@ -33,7 +34,7 @@ func CheckQueueEq(lhs []string, rhs TimedQueue) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func CheckSetEq(lhs, rhs util.StringSet) bool {
|
func CheckSetEq(lhs, rhs sets.String) bool {
|
||||||
return lhs.HasAll(rhs.List()...) && rhs.HasAll(lhs.List()...)
|
return lhs.HasAll(rhs.List()...) && rhs.HasAll(lhs.List()...)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,7 +52,7 @@ func TestAddNode(t *testing.T) {
|
|||||||
t.Errorf("Invalid queue. Got %v, expected %v", evictor.queue.queue, queuePattern)
|
t.Errorf("Invalid queue. Got %v, expected %v", evictor.queue.queue, queuePattern)
|
||||||
}
|
}
|
||||||
|
|
||||||
setPattern := util.NewStringSet("first", "second", "third")
|
setPattern := sets.NewString("first", "second", "third")
|
||||||
if len(evictor.queue.set) != len(setPattern) {
|
if len(evictor.queue.set) != len(setPattern) {
|
||||||
t.Fatalf("Map %v should have length %d", evictor.queue.set, len(setPattern))
|
t.Fatalf("Map %v should have length %d", evictor.queue.set, len(setPattern))
|
||||||
}
|
}
|
||||||
@@ -75,7 +76,7 @@ func TestDelNode(t *testing.T) {
|
|||||||
t.Errorf("Invalid queue. Got %v, expected %v", evictor.queue.queue, queuePattern)
|
t.Errorf("Invalid queue. Got %v, expected %v", evictor.queue.queue, queuePattern)
|
||||||
}
|
}
|
||||||
|
|
||||||
setPattern := util.NewStringSet("second", "third")
|
setPattern := sets.NewString("second", "third")
|
||||||
if len(evictor.queue.set) != len(setPattern) {
|
if len(evictor.queue.set) != len(setPattern) {
|
||||||
t.Fatalf("Map %v should have length %d", evictor.queue.set, len(setPattern))
|
t.Fatalf("Map %v should have length %d", evictor.queue.set, len(setPattern))
|
||||||
}
|
}
|
||||||
@@ -97,7 +98,7 @@ func TestDelNode(t *testing.T) {
|
|||||||
t.Errorf("Invalid queue. Got %v, expected %v", evictor.queue.queue, queuePattern)
|
t.Errorf("Invalid queue. Got %v, expected %v", evictor.queue.queue, queuePattern)
|
||||||
}
|
}
|
||||||
|
|
||||||
setPattern = util.NewStringSet("first", "third")
|
setPattern = sets.NewString("first", "third")
|
||||||
if len(evictor.queue.set) != len(setPattern) {
|
if len(evictor.queue.set) != len(setPattern) {
|
||||||
t.Fatalf("Map %v should have length %d", evictor.queue.set, len(setPattern))
|
t.Fatalf("Map %v should have length %d", evictor.queue.set, len(setPattern))
|
||||||
}
|
}
|
||||||
@@ -119,7 +120,7 @@ func TestDelNode(t *testing.T) {
|
|||||||
t.Errorf("Invalid queue. Got %v, expected %v", evictor.queue.queue, queuePattern)
|
t.Errorf("Invalid queue. Got %v, expected %v", evictor.queue.queue, queuePattern)
|
||||||
}
|
}
|
||||||
|
|
||||||
setPattern = util.NewStringSet("first", "second")
|
setPattern = sets.NewString("first", "second")
|
||||||
if len(evictor.queue.set) != len(setPattern) {
|
if len(evictor.queue.set) != len(setPattern) {
|
||||||
t.Fatalf("Map %v should have length %d", evictor.queue.set, len(setPattern))
|
t.Fatalf("Map %v should have length %d", evictor.queue.set, len(setPattern))
|
||||||
}
|
}
|
||||||
@@ -135,13 +136,13 @@ func TestTry(t *testing.T) {
|
|||||||
evictor.Add("third")
|
evictor.Add("third")
|
||||||
evictor.Remove("second")
|
evictor.Remove("second")
|
||||||
|
|
||||||
deletedMap := util.NewStringSet()
|
deletedMap := sets.NewString()
|
||||||
evictor.Try(func(value TimedValue) (bool, time.Duration) {
|
evictor.Try(func(value TimedValue) (bool, time.Duration) {
|
||||||
deletedMap.Insert(value.Value)
|
deletedMap.Insert(value.Value)
|
||||||
return true, 0
|
return true, 0
|
||||||
})
|
})
|
||||||
|
|
||||||
setPattern := util.NewStringSet("first", "third")
|
setPattern := sets.NewString("first", "third")
|
||||||
if len(deletedMap) != len(setPattern) {
|
if len(deletedMap) != len(setPattern) {
|
||||||
t.Fatalf("Map %v should have length %d", evictor.queue.set, len(setPattern))
|
t.Fatalf("Map %v should have length %d", evictor.queue.set, len(setPattern))
|
||||||
}
|
}
|
||||||
|
@@ -35,6 +35,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/securitycontext"
|
"k8s.io/kubernetes/pkg/securitycontext"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/util/wait"
|
"k8s.io/kubernetes/pkg/util/wait"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
)
|
)
|
||||||
@@ -626,7 +627,7 @@ func TestUpdatePods(t *testing.T) {
|
|||||||
// both controllers
|
// both controllers
|
||||||
manager.updatePod(&pod1, &pod2)
|
manager.updatePod(&pod1, &pod2)
|
||||||
|
|
||||||
expected := util.NewStringSet(testControllerSpec1.Name, testControllerSpec2.Name)
|
expected := sets.NewString(testControllerSpec1.Name, testControllerSpec2.Name)
|
||||||
for _, name := range expected.List() {
|
for _, name := range expected.List() {
|
||||||
t.Logf("Expecting update for %+v", name)
|
t.Logf("Expecting update for %+v", name)
|
||||||
select {
|
select {
|
||||||
|
@@ -23,7 +23,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/resource"
|
"k8s.io/kubernetes/pkg/api/resource"
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient"
|
"k8s.io/kubernetes/pkg/client/unversioned/testclient"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getResourceList(cpu, memory string) api.ResourceList {
|
func getResourceList(cpu, memory string) api.ResourceList {
|
||||||
@@ -103,11 +103,11 @@ func TestFilterQuotaPods(t *testing.T) {
|
|||||||
Status: api.PodStatus{Phase: api.PodFailed},
|
Status: api.PodStatus{Phase: api.PodFailed},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
expectedResults := util.NewStringSet("pod-running",
|
expectedResults := sets.NewString("pod-running",
|
||||||
"pod-pending", "pod-unknown", "pod-failed-with-restart-always",
|
"pod-pending", "pod-unknown", "pod-failed-with-restart-always",
|
||||||
"pod-failed-with-restart-on-failure")
|
"pod-failed-with-restart-on-failure")
|
||||||
|
|
||||||
actualResults := util.StringSet{}
|
actualResults := sets.String{}
|
||||||
result := FilterQuotaPods(pods)
|
result := FilterQuotaPods(pods)
|
||||||
for i := range result {
|
for i := range result {
|
||||||
actualResults.Insert(result[i].Name)
|
actualResults.Insert(result[i].Name)
|
||||||
|
@@ -29,7 +29,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ func nameIndexFunc(obj interface{}) ([]string, error) {
|
|||||||
// ServiceAccountsControllerOptions contains options for running a ServiceAccountsController
|
// ServiceAccountsControllerOptions contains options for running a ServiceAccountsController
|
||||||
type ServiceAccountsControllerOptions struct {
|
type ServiceAccountsControllerOptions struct {
|
||||||
// Names is the set of service account names to ensure exist in every namespace
|
// Names is the set of service account names to ensure exist in every namespace
|
||||||
Names util.StringSet
|
Names sets.String
|
||||||
|
|
||||||
// ServiceAccountResync is the interval between full resyncs of ServiceAccounts.
|
// ServiceAccountResync is the interval between full resyncs of ServiceAccounts.
|
||||||
// If non-zero, all service accounts will be re-listed this often.
|
// If non-zero, all service accounts will be re-listed this often.
|
||||||
@@ -59,7 +59,7 @@ type ServiceAccountsControllerOptions struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func DefaultServiceAccountsControllerOptions() ServiceAccountsControllerOptions {
|
func DefaultServiceAccountsControllerOptions() ServiceAccountsControllerOptions {
|
||||||
return ServiceAccountsControllerOptions{Names: util.NewStringSet("default")}
|
return ServiceAccountsControllerOptions{Names: sets.NewString("default")}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewServiceAccountsController returns a new *ServiceAccountsController.
|
// NewServiceAccountsController returns a new *ServiceAccountsController.
|
||||||
@@ -117,7 +117,7 @@ type ServiceAccountsController struct {
|
|||||||
stopChan chan struct{}
|
stopChan chan struct{}
|
||||||
|
|
||||||
client client.Interface
|
client client.Interface
|
||||||
names util.StringSet
|
names sets.String
|
||||||
|
|
||||||
serviceAccounts cache.Indexer
|
serviceAccounts cache.Indexer
|
||||||
namespaces cache.Indexer
|
namespaces cache.Indexer
|
||||||
|
@@ -26,6 +26,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient"
|
"k8s.io/kubernetes/pkg/client/unversioned/testclient"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
type serverResponse struct {
|
type serverResponse struct {
|
||||||
@@ -101,7 +102,7 @@ func TestServiceAccountCreation(t *testing.T) {
|
|||||||
"new active namespace missing serviceaccounts": {
|
"new active namespace missing serviceaccounts": {
|
||||||
ExistingServiceAccounts: []*api.ServiceAccount{},
|
ExistingServiceAccounts: []*api.ServiceAccount{},
|
||||||
AddedNamespace: activeNS,
|
AddedNamespace: activeNS,
|
||||||
ExpectCreatedServiceAccounts: util.NewStringSet(defaultName, managedName).List(),
|
ExpectCreatedServiceAccounts: sets.NewString(defaultName, managedName).List(),
|
||||||
},
|
},
|
||||||
"new active namespace missing serviceaccount": {
|
"new active namespace missing serviceaccount": {
|
||||||
ExistingServiceAccounts: []*api.ServiceAccount{managedServiceAccount},
|
ExistingServiceAccounts: []*api.ServiceAccount{managedServiceAccount},
|
||||||
@@ -123,7 +124,7 @@ func TestServiceAccountCreation(t *testing.T) {
|
|||||||
"updated active namespace missing serviceaccounts": {
|
"updated active namespace missing serviceaccounts": {
|
||||||
ExistingServiceAccounts: []*api.ServiceAccount{},
|
ExistingServiceAccounts: []*api.ServiceAccount{},
|
||||||
UpdatedNamespace: activeNS,
|
UpdatedNamespace: activeNS,
|
||||||
ExpectCreatedServiceAccounts: util.NewStringSet(defaultName, managedName).List(),
|
ExpectCreatedServiceAccounts: sets.NewString(defaultName, managedName).List(),
|
||||||
},
|
},
|
||||||
"updated active namespace missing serviceaccount": {
|
"updated active namespace missing serviceaccount": {
|
||||||
ExistingServiceAccounts: []*api.ServiceAccount{defaultServiceAccount},
|
ExistingServiceAccounts: []*api.ServiceAccount{defaultServiceAccount},
|
||||||
@@ -170,7 +171,7 @@ func TestServiceAccountCreation(t *testing.T) {
|
|||||||
for k, tc := range testcases {
|
for k, tc := range testcases {
|
||||||
client := testclient.NewSimpleFake(defaultServiceAccount, managedServiceAccount)
|
client := testclient.NewSimpleFake(defaultServiceAccount, managedServiceAccount)
|
||||||
options := DefaultServiceAccountsControllerOptions()
|
options := DefaultServiceAccountsControllerOptions()
|
||||||
options.Names = util.NewStringSet(defaultName, managedName)
|
options.Names = sets.NewString(defaultName, managedName)
|
||||||
controller := NewServiceAccountsController(client, options)
|
controller := NewServiceAccountsController(client, options)
|
||||||
|
|
||||||
if tc.ExistingNamespace != nil {
|
if tc.ExistingNamespace != nil {
|
||||||
|
@@ -31,7 +31,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/registry/secret"
|
"k8s.io/kubernetes/pkg/registry/secret"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -495,8 +495,8 @@ func serviceAccountNameAndUID(secret *api.Secret) (string, string) {
|
|||||||
return secret.Annotations[api.ServiceAccountNameKey], secret.Annotations[api.ServiceAccountUIDKey]
|
return secret.Annotations[api.ServiceAccountNameKey], secret.Annotations[api.ServiceAccountUIDKey]
|
||||||
}
|
}
|
||||||
|
|
||||||
func getSecretReferences(serviceAccount *api.ServiceAccount) util.StringSet {
|
func getSecretReferences(serviceAccount *api.ServiceAccount) sets.String {
|
||||||
references := util.NewStringSet()
|
references := sets.NewString()
|
||||||
for _, secret := range serviceAccount.Secrets {
|
for _, secret := range serviceAccount.Secrets {
|
||||||
references.Insert(secret.Name)
|
references.Insert(secret.Name)
|
||||||
}
|
}
|
||||||
|
@@ -28,7 +28,7 @@ import (
|
|||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
// DockerKeyring tracks a set of docker registry credentials, maintaining a
|
// DockerKeyring tracks a set of docker registry credentials, maintaining a
|
||||||
@@ -90,7 +90,7 @@ func (dk *BasicDockerKeyring) Add(cfg DockerConfig) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
eliminateDupes := util.NewStringSet(dk.index...)
|
eliminateDupes := sets.NewString(dk.index...)
|
||||||
dk.index = eliminateDupes.List()
|
dk.index = eliminateDupes.List()
|
||||||
|
|
||||||
// Update the index used to identify which credentials to use for a given
|
// Update the index used to identify which credentials to use for a given
|
||||||
|
@@ -26,7 +26,7 @@ import (
|
|||||||
_ "k8s.io/kubernetes/pkg/expapi"
|
_ "k8s.io/kubernetes/pkg/expapi"
|
||||||
"k8s.io/kubernetes/pkg/expapi/v1"
|
"k8s.io/kubernetes/pkg/expapi/v1"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -51,9 +51,9 @@ func init() {
|
|||||||
|
|
||||||
// the list of kinds that are scoped at the root of the api hierarchy
|
// the list of kinds that are scoped at the root of the api hierarchy
|
||||||
// if a kind is not enumerated here, it is assumed to have a namespace scope
|
// if a kind is not enumerated here, it is assumed to have a namespace scope
|
||||||
rootScoped := util.NewStringSet()
|
rootScoped := sets.NewString()
|
||||||
|
|
||||||
ignoredKinds := util.NewStringSet()
|
ignoredKinds := sets.NewString()
|
||||||
|
|
||||||
RESTMapper = api.NewDefaultRESTMapper("experimental", Versions, InterfacesFor, importPrefix, ignoredKinds, rootScoped)
|
RESTMapper = api.NewDefaultRESTMapper("experimental", Versions, InterfacesFor, importPrefix, ignoredKinds, rootScoped)
|
||||||
api.RegisterRESTMapper(RESTMapper)
|
api.RegisterRESTMapper(RESTMapper)
|
||||||
|
@@ -25,6 +25,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
errs "k8s.io/kubernetes/pkg/util/fielderrors"
|
errs "k8s.io/kubernetes/pkg/util/fielderrors"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ValidateHorizontalPodAutoscaler can be used to check whether the given autoscaler name is valid.
|
// ValidateHorizontalPodAutoscaler can be used to check whether the given autoscaler name is valid.
|
||||||
@@ -79,7 +80,7 @@ func ValidateThirdPartyResource(obj *expapi.ThirdPartyResource) errs.ValidationE
|
|||||||
if len(obj.Name) == 0 {
|
if len(obj.Name) == 0 {
|
||||||
allErrs = append(allErrs, errs.NewFieldInvalid("name", obj.Name, "name must be non-empty"))
|
allErrs = append(allErrs, errs.NewFieldInvalid("name", obj.Name, "name must be non-empty"))
|
||||||
}
|
}
|
||||||
versions := util.StringSet{}
|
versions := sets.String{}
|
||||||
for ix := range obj.Versions {
|
for ix := range obj.Versions {
|
||||||
version := &obj.Versions[ix]
|
version := &obj.Versions[ix]
|
||||||
if len(version.Name) == 0 {
|
if len(version.Name) == 0 {
|
||||||
|
@@ -22,7 +22,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
|
clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
type navigationSteps struct {
|
type navigationSteps struct {
|
||||||
@@ -55,7 +55,7 @@ func newNavigationSteps(path string) (*navigationSteps, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
nextPart := findNameStep(individualParts[currPartIndex:], util.KeySet(reflect.ValueOf(mapValueOptions)))
|
nextPart := findNameStep(individualParts[currPartIndex:], sets.KeySet(reflect.ValueOf(mapValueOptions)))
|
||||||
|
|
||||||
steps = append(steps, navigationStep{nextPart, mapValueType})
|
steps = append(steps, navigationStep{nextPart, mapValueType})
|
||||||
currPartIndex += len(strings.Split(nextPart, "."))
|
currPartIndex += len(strings.Split(nextPart, "."))
|
||||||
@@ -103,7 +103,7 @@ func (s *navigationSteps) moreStepsRemaining() bool {
|
|||||||
|
|
||||||
// findNameStep takes the list of parts and a set of valid tags that can be used after the name. It then walks the list of parts
|
// findNameStep takes the list of parts and a set of valid tags that can be used after the name. It then walks the list of parts
|
||||||
// until it find a valid "next" tag or until it reaches the end of the parts and then builds the name back up out of the individual parts
|
// until it find a valid "next" tag or until it reaches the end of the parts and then builds the name back up out of the individual parts
|
||||||
func findNameStep(parts []string, typeOptions util.StringSet) string {
|
func findNameStep(parts []string, typeOptions sets.String) string {
|
||||||
if len(parts) == 0 {
|
if len(parts) == 0 {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
@@ -141,7 +141,7 @@ func getPotentialTypeValues(typeValue reflect.Type) (map[string]reflect.Type, er
|
|||||||
return ret, nil
|
return ret, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func findKnownValue(parts []string, valueOptions util.StringSet) int {
|
func findKnownValue(parts []string, valueOptions sets.String) int {
|
||||||
for i := range parts {
|
for i := range parts {
|
||||||
if valueOptions.Has(parts[i]) {
|
if valueOptions.Has(parts[i]) {
|
||||||
return i
|
return i
|
||||||
|
@@ -26,7 +26,7 @@ import (
|
|||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
libutil "k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -42,7 +42,7 @@ $ kubectl logs -f 123456-7890 ruby-container`
|
|||||||
|
|
||||||
func selectContainer(pod *api.Pod, in io.Reader, out io.Writer) string {
|
func selectContainer(pod *api.Pod, in io.Reader, out io.Writer) string {
|
||||||
fmt.Fprintf(out, "Please select a container:\n")
|
fmt.Fprintf(out, "Please select a container:\n")
|
||||||
options := libutil.StringSet{}
|
options := sets.String{}
|
||||||
for ix := range pod.Spec.Containers {
|
for ix := range pod.Spec.Containers {
|
||||||
fmt.Fprintf(out, "[%d] %s\n", ix+1, pod.Spec.Containers[ix].Name)
|
fmt.Fprintf(out, "[%d] %s\n", ix+1, pod.Spec.Containers[ix].Name)
|
||||||
options.Insert(pod.Spec.Containers[ix].Name)
|
options.Insert(pod.Spec.Containers[ix].Name)
|
||||||
|
@@ -33,7 +33,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/types"
|
"k8s.io/kubernetes/pkg/types"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Describer generates output for the named resource or an error
|
// Describer generates output for the named resource or an error
|
||||||
@@ -933,7 +933,7 @@ func describeService(service *api.Service, endpoints *api.Endpoints, events *api
|
|||||||
if sp.NodePort != 0 {
|
if sp.NodePort != 0 {
|
||||||
fmt.Fprintf(out, "NodePort:\t%s\t%d/%s\n", name, sp.NodePort, sp.Protocol)
|
fmt.Fprintf(out, "NodePort:\t%s\t%d/%s\n", name, sp.NodePort, sp.Protocol)
|
||||||
}
|
}
|
||||||
fmt.Fprintf(out, "Endpoints:\t%s\n", formatEndpoints(endpoints, util.NewStringSet(sp.Name)))
|
fmt.Fprintf(out, "Endpoints:\t%s\n", formatEndpoints(endpoints, sets.NewString(sp.Name)))
|
||||||
}
|
}
|
||||||
fmt.Fprintf(out, "Session Affinity:\t%s\n", service.Spec.SessionAffinity)
|
fmt.Fprintf(out, "Session Affinity:\t%s\n", service.Spec.SessionAffinity)
|
||||||
if events != nil {
|
if events != nil {
|
||||||
|
@@ -28,8 +28,8 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/validation"
|
"k8s.io/kubernetes/pkg/api/validation"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
|
||||||
"k8s.io/kubernetes/pkg/util/errors"
|
"k8s.io/kubernetes/pkg/util/errors"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
var FileExtensions = []string{".json", ".stdin", ".yaml", ".yml"}
|
var FileExtensions = []string{".json", ".stdin", ".yaml", ".yml"}
|
||||||
@@ -685,7 +685,7 @@ func (b *Builder) Do() *Result {
|
|||||||
// strings in the original order.
|
// strings in the original order.
|
||||||
func SplitResourceArgument(arg string) []string {
|
func SplitResourceArgument(arg string) []string {
|
||||||
out := []string{}
|
out := []string{}
|
||||||
set := util.NewStringSet()
|
set := sets.NewString()
|
||||||
for _, s := range strings.Split(arg, ",") {
|
for _, s := range strings.Split(arg, ",") {
|
||||||
if set.Has(s) {
|
if set.Has(s) {
|
||||||
continue
|
continue
|
||||||
|
@@ -24,8 +24,8 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/latest"
|
"k8s.io/kubernetes/pkg/api/latest"
|
||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
|
||||||
"k8s.io/kubernetes/pkg/util/errors"
|
"k8s.io/kubernetes/pkg/util/errors"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -123,7 +123,7 @@ func (r *Result) Object() (runtime.Object, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
versions := util.StringSet{}
|
versions := sets.String{}
|
||||||
objects := []runtime.Object{}
|
objects := []runtime.Object{}
|
||||||
for _, info := range infos {
|
for _, info := range infos {
|
||||||
if info.Object != nil {
|
if info.Object != nil {
|
||||||
|
@@ -41,6 +41,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
"k8s.io/kubernetes/pkg/util/jsonpath"
|
"k8s.io/kubernetes/pkg/util/jsonpath"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetPrinter takes a format type, an optional format argument. It will return true
|
// GetPrinter takes a format type, an optional format argument. It will return true
|
||||||
@@ -435,7 +436,7 @@ func (h *HumanReadablePrinter) printHeader(columnNames []string, w io.Writer) er
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Pass ports=nil for all ports.
|
// Pass ports=nil for all ports.
|
||||||
func formatEndpoints(endpoints *api.Endpoints, ports util.StringSet) string {
|
func formatEndpoints(endpoints *api.Endpoints, ports sets.String) string {
|
||||||
if len(endpoints.Subsets) == 0 {
|
if len(endpoints.Subsets) == 0 {
|
||||||
return "<none>"
|
return "<none>"
|
||||||
}
|
}
|
||||||
|
@@ -32,6 +32,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/expapi"
|
"k8s.io/kubernetes/pkg/expapi"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
|
|
||||||
"github.com/ghodss/yaml"
|
"github.com/ghodss/yaml"
|
||||||
)
|
)
|
||||||
@@ -484,9 +485,9 @@ func TestPrinters(t *testing.T) {
|
|||||||
}}},
|
}}},
|
||||||
}
|
}
|
||||||
// map of printer name to set of objects it should fail on.
|
// map of printer name to set of objects it should fail on.
|
||||||
expectedErrors := map[string]util.StringSet{
|
expectedErrors := map[string]sets.String{
|
||||||
"template2": util.NewStringSet("pod", "emptyPodList", "endpoints"),
|
"template2": sets.NewString("pod", "emptyPodList", "endpoints"),
|
||||||
"jsonpath": util.NewStringSet("emptyPodList", "nonEmptyPodList", "endpoints"),
|
"jsonpath": sets.NewString("emptyPodList", "nonEmptyPodList", "endpoints"),
|
||||||
}
|
}
|
||||||
|
|
||||||
for pName, p := range printers {
|
for pName, p := range printers {
|
||||||
|
@@ -32,6 +32,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient"
|
"k8s.io/kubernetes/pkg/client/unversioned/testclient"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
func oldRc(replicas int, original int) *api.ReplicationController {
|
func oldRc(replicas int, original int) *api.ReplicationController {
|
||||||
@@ -1140,7 +1141,7 @@ func TestAddDeploymentHash(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
seen := util.StringSet{}
|
seen := sets.String{}
|
||||||
updatedRc := false
|
updatedRc := false
|
||||||
fakeClient := &client.FakeRESTClient{
|
fakeClient := &client.FakeRESTClient{
|
||||||
Codec: codec,
|
Codec: codec,
|
||||||
|
@@ -29,10 +29,10 @@ import (
|
|||||||
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
||||||
kubeletTypes "k8s.io/kubernetes/pkg/kubelet/types"
|
kubeletTypes "k8s.io/kubernetes/pkg/kubelet/types"
|
||||||
kubeletUtil "k8s.io/kubernetes/pkg/kubelet/util"
|
kubeletUtil "k8s.io/kubernetes/pkg/kubelet/util"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
|
||||||
"k8s.io/kubernetes/pkg/util/config"
|
"k8s.io/kubernetes/pkg/util/config"
|
||||||
utilerrors "k8s.io/kubernetes/pkg/util/errors"
|
utilerrors "k8s.io/kubernetes/pkg/util/errors"
|
||||||
"k8s.io/kubernetes/pkg/util/fielderrors"
|
"k8s.io/kubernetes/pkg/util/fielderrors"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
// PodConfigNotificationMode describes how changes are sent to the update channel.
|
// PodConfigNotificationMode describes how changes are sent to the update channel.
|
||||||
@@ -61,7 +61,7 @@ type PodConfig struct {
|
|||||||
|
|
||||||
// contains the list of all configured sources
|
// contains the list of all configured sources
|
||||||
sourcesLock sync.Mutex
|
sourcesLock sync.Mutex
|
||||||
sources util.StringSet
|
sources sets.String
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewPodConfig creates an object that can merge many configuration sources into a stream
|
// NewPodConfig creates an object that can merge many configuration sources into a stream
|
||||||
@@ -73,7 +73,7 @@ func NewPodConfig(mode PodConfigNotificationMode, recorder record.EventRecorder)
|
|||||||
pods: storage,
|
pods: storage,
|
||||||
mux: config.NewMux(storage),
|
mux: config.NewMux(storage),
|
||||||
updates: updates,
|
updates: updates,
|
||||||
sources: util.StringSet{},
|
sources: sets.String{},
|
||||||
}
|
}
|
||||||
return podConfig
|
return podConfig
|
||||||
}
|
}
|
||||||
@@ -124,7 +124,7 @@ type podStorage struct {
|
|||||||
|
|
||||||
// contains the set of all sources that have sent at least one SET
|
// contains the set of all sources that have sent at least one SET
|
||||||
sourcesSeenLock sync.Mutex
|
sourcesSeenLock sync.Mutex
|
||||||
sourcesSeen util.StringSet
|
sourcesSeen sets.String
|
||||||
|
|
||||||
// the EventRecorder to use
|
// the EventRecorder to use
|
||||||
recorder record.EventRecorder
|
recorder record.EventRecorder
|
||||||
@@ -138,7 +138,7 @@ func newPodStorage(updates chan<- kubelet.PodUpdate, mode PodConfigNotificationM
|
|||||||
pods: make(map[string]map[string]*api.Pod),
|
pods: make(map[string]map[string]*api.Pod),
|
||||||
mode: mode,
|
mode: mode,
|
||||||
updates: updates,
|
updates: updates,
|
||||||
sourcesSeen: util.StringSet{},
|
sourcesSeen: sets.String{},
|
||||||
recorder: recorder,
|
recorder: recorder,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -306,7 +306,7 @@ func (s *podStorage) seenSources(sources ...string) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func filterInvalidPods(pods []*api.Pod, source string, recorder record.EventRecorder) (filtered []*api.Pod) {
|
func filterInvalidPods(pods []*api.Pod, source string, recorder record.EventRecorder) (filtered []*api.Pod) {
|
||||||
names := util.StringSet{}
|
names := sets.String{}
|
||||||
for i, pod := range pods {
|
for i, pod := range pods {
|
||||||
var errlist []error
|
var errlist []error
|
||||||
if errs := validation.ValidatePod(pod); len(errs) != 0 {
|
if errs := validation.ValidatePod(pod); len(errs) != 0 {
|
||||||
|
@@ -27,7 +27,7 @@ import (
|
|||||||
docker "github.com/fsouza/go-dockerclient"
|
docker "github.com/fsouza/go-dockerclient"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
// FakeDockerClient is a simple fake docker client, so that kubelet can be run for testing without requiring a real docker setup.
|
// FakeDockerClient is a simple fake docker client, so that kubelet can be run for testing without requiring a real docker setup.
|
||||||
@@ -45,7 +45,7 @@ type FakeDockerClient struct {
|
|||||||
pulled []string
|
pulled []string
|
||||||
Created []string
|
Created []string
|
||||||
Removed []string
|
Removed []string
|
||||||
RemovedImages util.StringSet
|
RemovedImages sets.String
|
||||||
VersionInfo docker.Env
|
VersionInfo docker.Env
|
||||||
Information docker.Env
|
Information docker.Env
|
||||||
ExecInspect *docker.ExecInspect
|
ExecInspect *docker.ExecInspect
|
||||||
|
@@ -51,6 +51,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
"k8s.io/kubernetes/pkg/util/oom"
|
"k8s.io/kubernetes/pkg/util/oom"
|
||||||
"k8s.io/kubernetes/pkg/util/procfs"
|
"k8s.io/kubernetes/pkg/util/procfs"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -402,7 +403,7 @@ func (dm *DockerManager) GetPodStatus(pod *api.Pod) (*api.PodStatus, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
containerDone := util.NewStringSet()
|
containerDone := sets.NewString()
|
||||||
// Loop through list of running and exited docker containers to construct
|
// Loop through list of running and exited docker containers to construct
|
||||||
// the statuses. We assume docker returns a list of containers sorted in
|
// the statuses. We assume docker returns a list of containers sorted in
|
||||||
// reverse by time.
|
// reverse by time.
|
||||||
|
@@ -42,6 +42,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/types"
|
"k8s.io/kubernetes/pkg/types"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
uexec "k8s.io/kubernetes/pkg/util/exec"
|
uexec "k8s.io/kubernetes/pkg/util/exec"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
type fakeHTTP struct {
|
type fakeHTTP struct {
|
||||||
@@ -74,7 +75,7 @@ func (*fakeOptionGenerator) GenerateRunContainerOptions(pod *api.Pod, container
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newTestDockerManagerWithHTTPClient(fakeHTTPClient *fakeHTTP) (*DockerManager, *FakeDockerClient) {
|
func newTestDockerManagerWithHTTPClient(fakeHTTPClient *fakeHTTP) (*DockerManager, *FakeDockerClient) {
|
||||||
fakeDocker := &FakeDockerClient{VersionInfo: docker.Env{"Version=1.1.3", "ApiVersion=1.15"}, Errors: make(map[string]error), RemovedImages: util.StringSet{}}
|
fakeDocker := &FakeDockerClient{VersionInfo: docker.Env{"Version=1.1.3", "ApiVersion=1.15"}, Errors: make(map[string]error), RemovedImages: sets.String{}}
|
||||||
fakeRecorder := &record.FakeRecorder{}
|
fakeRecorder := &record.FakeRecorder{}
|
||||||
readinessManager := kubecontainer.NewReadinessManager()
|
readinessManager := kubecontainer.NewReadinessManager()
|
||||||
containerRefManager := kubecontainer.NewRefManager()
|
containerRefManager := kubecontainer.NewRefManager()
|
||||||
@@ -324,14 +325,14 @@ func TestGetPods(t *testing.T) {
|
|||||||
func TestListImages(t *testing.T) {
|
func TestListImages(t *testing.T) {
|
||||||
manager, fakeDocker := newTestDockerManager()
|
manager, fakeDocker := newTestDockerManager()
|
||||||
dockerImages := []docker.APIImages{{ID: "1111"}, {ID: "2222"}, {ID: "3333"}}
|
dockerImages := []docker.APIImages{{ID: "1111"}, {ID: "2222"}, {ID: "3333"}}
|
||||||
expected := util.NewStringSet([]string{"1111", "2222", "3333"}...)
|
expected := sets.NewString([]string{"1111", "2222", "3333"}...)
|
||||||
|
|
||||||
fakeDocker.Images = dockerImages
|
fakeDocker.Images = dockerImages
|
||||||
actualImages, err := manager.ListImages()
|
actualImages, err := manager.ListImages()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected error %v", err)
|
t.Fatalf("unexpected error %v", err)
|
||||||
}
|
}
|
||||||
actual := util.NewStringSet()
|
actual := sets.NewString()
|
||||||
for _, i := range actualImages {
|
for _, i := range actualImages {
|
||||||
actual.Insert(i.ID)
|
actual.Insert(i.ID)
|
||||||
}
|
}
|
||||||
|
@@ -29,6 +29,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/kubelet/cadvisor"
|
"k8s.io/kubernetes/pkg/kubelet/cadvisor"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/dockertools"
|
"k8s.io/kubernetes/pkg/kubelet/dockertools"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Manages lifecycle of all images.
|
// Manages lifecycle of all images.
|
||||||
@@ -141,14 +142,14 @@ func (im *realImageManager) detectImages(detected time.Time) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Make a set of images in use by containers.
|
// Make a set of images in use by containers.
|
||||||
imagesInUse := util.NewStringSet()
|
imagesInUse := sets.NewString()
|
||||||
for _, container := range containers {
|
for _, container := range containers {
|
||||||
imagesInUse.Insert(container.Image)
|
imagesInUse.Insert(container.Image)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add new images and record those being used.
|
// Add new images and record those being used.
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
currentImages := util.NewStringSet()
|
currentImages := sets.NewString()
|
||||||
im.imageRecordsLock.Lock()
|
im.imageRecordsLock.Lock()
|
||||||
defer im.imageRecordsLock.Unlock()
|
defer im.imageRecordsLock.Unlock()
|
||||||
for _, image := range images {
|
for _, image := range images {
|
||||||
@@ -286,7 +287,7 @@ func (ev byLastUsedAndDetected) Less(i, j int) bool {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func isImageUsed(image *docker.APIImages, imagesInUse util.StringSet) bool {
|
func isImageUsed(image *docker.APIImages, imagesInUse sets.String) bool {
|
||||||
// Check the image ID and all the RepoTags.
|
// Check the image ID and all the RepoTags.
|
||||||
if _, ok := imagesInUse[image.ID]; ok {
|
if _, ok := imagesInUse[image.ID]; ok {
|
||||||
return true
|
return true
|
||||||
|
@@ -28,14 +28,14 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/client/unversioned/record"
|
"k8s.io/kubernetes/pkg/client/unversioned/record"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cadvisor"
|
"k8s.io/kubernetes/pkg/kubelet/cadvisor"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/dockertools"
|
"k8s.io/kubernetes/pkg/kubelet/dockertools"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
var zero time.Time
|
var zero time.Time
|
||||||
|
|
||||||
func newRealImageManager(policy ImageGCPolicy) (*realImageManager, *dockertools.FakeDockerClient, *cadvisor.Mock) {
|
func newRealImageManager(policy ImageGCPolicy) (*realImageManager, *dockertools.FakeDockerClient, *cadvisor.Mock) {
|
||||||
fakeDocker := &dockertools.FakeDockerClient{
|
fakeDocker := &dockertools.FakeDockerClient{
|
||||||
RemovedImages: util.NewStringSet(),
|
RemovedImages: sets.NewString(),
|
||||||
}
|
}
|
||||||
mockCadvisor := new(cadvisor.Mock)
|
mockCadvisor := new(cadvisor.Mock)
|
||||||
return &realImageManager{
|
return &realImageManager{
|
||||||
|
@@ -64,6 +64,7 @@ import (
|
|||||||
nodeutil "k8s.io/kubernetes/pkg/util/node"
|
nodeutil "k8s.io/kubernetes/pkg/util/node"
|
||||||
"k8s.io/kubernetes/pkg/util/oom"
|
"k8s.io/kubernetes/pkg/util/oom"
|
||||||
"k8s.io/kubernetes/pkg/util/procfs"
|
"k8s.io/kubernetes/pkg/util/procfs"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/version"
|
"k8s.io/kubernetes/pkg/version"
|
||||||
"k8s.io/kubernetes/pkg/volume"
|
"k8s.io/kubernetes/pkg/volume"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
@@ -983,7 +984,7 @@ func (kl *Kubelet) GenerateRunContainerOptions(pod *api.Pod, container *api.Cont
|
|||||||
return opts, nil
|
return opts, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var masterServices = util.NewStringSet("kubernetes")
|
var masterServices = sets.NewString("kubernetes")
|
||||||
|
|
||||||
// getServiceEnvVarMap makes a map[string]string of env vars for services a pod in namespace ns should see
|
// getServiceEnvVarMap makes a map[string]string of env vars for services a pod in namespace ns should see
|
||||||
func (kl *Kubelet) getServiceEnvVarMap(ns string) (map[string]string, error) {
|
func (kl *Kubelet) getServiceEnvVarMap(ns string) (map[string]string, error) {
|
||||||
@@ -1408,7 +1409,7 @@ func getDesiredVolumes(pods []*api.Pod) map[string]api.Volume {
|
|||||||
// cleanupOrphanedPodDirs removes a pod directory if the pod is not in the
|
// cleanupOrphanedPodDirs removes a pod directory if the pod is not in the
|
||||||
// desired set of pods and there is no running containers in the pod.
|
// desired set of pods and there is no running containers in the pod.
|
||||||
func (kl *Kubelet) cleanupOrphanedPodDirs(pods []*api.Pod, runningPods []*kubecontainer.Pod) error {
|
func (kl *Kubelet) cleanupOrphanedPodDirs(pods []*api.Pod, runningPods []*kubecontainer.Pod) error {
|
||||||
active := util.NewStringSet()
|
active := sets.NewString()
|
||||||
for _, pod := range pods {
|
for _, pod := range pods {
|
||||||
active.Insert(string(pod.UID))
|
active.Insert(string(pod.UID))
|
||||||
}
|
}
|
||||||
@@ -1446,7 +1447,7 @@ func (kl *Kubelet) cleanupBandwidthLimits(allPods []*api.Pod) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
possibleCIDRs := util.StringSet{}
|
possibleCIDRs := sets.String{}
|
||||||
for ix := range allPods {
|
for ix := range allPods {
|
||||||
pod := allPods[ix]
|
pod := allPods[ix]
|
||||||
ingress, egress, err := extractBandwidthResources(pod)
|
ingress, egress, err := extractBandwidthResources(pod)
|
||||||
@@ -1486,7 +1487,7 @@ func (kl *Kubelet) cleanupOrphanedVolumes(pods []*api.Pod, runningPods []*kubeco
|
|||||||
desiredVolumes := getDesiredVolumes(pods)
|
desiredVolumes := getDesiredVolumes(pods)
|
||||||
currentVolumes := kl.getPodVolumesFromDisk()
|
currentVolumes := kl.getPodVolumesFromDisk()
|
||||||
|
|
||||||
runningSet := util.StringSet{}
|
runningSet := sets.String{}
|
||||||
for _, pod := range runningPods {
|
for _, pod := range runningPods {
|
||||||
runningSet.Insert(string(pod.ID))
|
runningSet.Insert(string(pod.ID))
|
||||||
}
|
}
|
||||||
@@ -1724,7 +1725,7 @@ func (kl *Kubelet) HandlePodCleanups() error {
|
|||||||
// podKiller launches a goroutine to kill a pod received from the channel if
|
// podKiller launches a goroutine to kill a pod received from the channel if
|
||||||
// another goroutine isn't already in action.
|
// another goroutine isn't already in action.
|
||||||
func (kl *Kubelet) podKiller() {
|
func (kl *Kubelet) podKiller() {
|
||||||
killing := util.NewStringSet()
|
killing := sets.NewString()
|
||||||
resultCh := make(chan types.UID)
|
resultCh := make(chan types.UID)
|
||||||
defer close(resultCh)
|
defer close(resultCh)
|
||||||
for {
|
for {
|
||||||
@@ -1771,7 +1772,7 @@ func (s podsByCreationTime) Less(i, j int) bool {
|
|||||||
|
|
||||||
// checkHostPortConflicts detects pods with conflicted host ports.
|
// checkHostPortConflicts detects pods with conflicted host ports.
|
||||||
func hasHostPortConflicts(pods []*api.Pod) bool {
|
func hasHostPortConflicts(pods []*api.Pod) bool {
|
||||||
ports := util.StringSet{}
|
ports := sets.String{}
|
||||||
for _, pod := range pods {
|
for _, pod := range pods {
|
||||||
if errs := validation.AccumulateUniqueHostPorts(pod.Spec.Containers, &ports); len(errs) > 0 {
|
if errs := validation.AccumulateUniqueHostPorts(pod.Spec.Containers, &ports); len(errs) > 0 {
|
||||||
glog.Errorf("Pod %q: HostPort is already allocated, ignoring: %v", kubecontainer.GetPodFullName(pod), errs)
|
glog.Errorf("Pod %q: HostPort is already allocated, ignoring: %v", kubecontainer.GetPodFullName(pod), errs)
|
||||||
|
@@ -22,14 +22,14 @@ import (
|
|||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
type fakeMirrorClient struct {
|
type fakeMirrorClient struct {
|
||||||
mirrorPodLock sync.RWMutex
|
mirrorPodLock sync.RWMutex
|
||||||
// Note that a real mirror manager does not store the mirror pods in
|
// Note that a real mirror manager does not store the mirror pods in
|
||||||
// itself. This fake manager does this to track calls.
|
// itself. This fake manager does this to track calls.
|
||||||
mirrorPods util.StringSet
|
mirrorPods sets.String
|
||||||
createCounts map[string]int
|
createCounts map[string]int
|
||||||
deleteCounts map[string]int
|
deleteCounts map[string]int
|
||||||
}
|
}
|
||||||
@@ -53,7 +53,7 @@ func (fmc *fakeMirrorClient) DeleteMirrorPod(podFullName string) error {
|
|||||||
|
|
||||||
func newFakeMirrorClient() *fakeMirrorClient {
|
func newFakeMirrorClient() *fakeMirrorClient {
|
||||||
m := fakeMirrorClient{}
|
m := fakeMirrorClient{}
|
||||||
m.mirrorPods = util.NewStringSet()
|
m.mirrorPods = sets.NewString()
|
||||||
m.createCounts = make(map[string]int)
|
m.createCounts = make(map[string]int)
|
||||||
m.deleteCounts = make(map[string]int)
|
m.deleteCounts = make(map[string]int)
|
||||||
return &m
|
return &m
|
||||||
|
@@ -24,6 +24,7 @@ import (
|
|||||||
|
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
"k8s.io/kubernetes/pkg/util/fielderrors"
|
"k8s.io/kubernetes/pkg/util/fielderrors"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Selector represents a label selector.
|
// Selector represents a label selector.
|
||||||
@@ -79,7 +80,7 @@ func (a ByKey) Less(i, j int) bool { return a[i].key < a[j].key }
|
|||||||
type Requirement struct {
|
type Requirement struct {
|
||||||
key string
|
key string
|
||||||
operator Operator
|
operator Operator
|
||||||
strValues util.StringSet
|
strValues sets.String
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewRequirement is the constructor for a Requirement.
|
// NewRequirement is the constructor for a Requirement.
|
||||||
@@ -91,7 +92,7 @@ type Requirement struct {
|
|||||||
// of characters. See validateLabelKey for more details.
|
// of characters. See validateLabelKey for more details.
|
||||||
//
|
//
|
||||||
// The empty string is a valid value in the input values set.
|
// The empty string is a valid value in the input values set.
|
||||||
func NewRequirement(key string, op Operator, vals util.StringSet) (*Requirement, error) {
|
func NewRequirement(key string, op Operator, vals sets.String) (*Requirement, error) {
|
||||||
if err := validateLabelKey(key); err != nil {
|
if err := validateLabelKey(key); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -198,7 +199,7 @@ func (lsel LabelSelector) Add(key string, operator Operator, values []string) Se
|
|||||||
for _, item := range lsel {
|
for _, item := range lsel {
|
||||||
reqs = append(reqs, item)
|
reqs = append(reqs, item)
|
||||||
}
|
}
|
||||||
if r, err := NewRequirement(key, operator, util.NewStringSet(values...)); err == nil {
|
if r, err := NewRequirement(key, operator, sets.NewString(values...)); err == nil {
|
||||||
reqs = append(reqs, *r)
|
reqs = append(reqs, *r)
|
||||||
}
|
}
|
||||||
return LabelSelector(reqs)
|
return LabelSelector(reqs)
|
||||||
@@ -480,7 +481,7 @@ func (p *Parser) parseRequirement() (*Requirement, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var values util.StringSet
|
var values sets.String
|
||||||
switch operator {
|
switch operator {
|
||||||
case InOperator, NotInOperator:
|
case InOperator, NotInOperator:
|
||||||
values, err = p.parseValues()
|
values, err = p.parseValues()
|
||||||
@@ -535,7 +536,7 @@ func (p *Parser) parseOperator() (op Operator, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// parseValues parses the values for set based matching (x,y,z)
|
// parseValues parses the values for set based matching (x,y,z)
|
||||||
func (p *Parser) parseValues() (util.StringSet, error) {
|
func (p *Parser) parseValues() (sets.String, error) {
|
||||||
tok, lit := p.consume(Values)
|
tok, lit := p.consume(Values)
|
||||||
if tok != OpenParToken {
|
if tok != OpenParToken {
|
||||||
return nil, fmt.Errorf("found '%s' expected: '('", lit)
|
return nil, fmt.Errorf("found '%s' expected: '('", lit)
|
||||||
@@ -553,7 +554,7 @@ func (p *Parser) parseValues() (util.StringSet, error) {
|
|||||||
return s, nil
|
return s, nil
|
||||||
case ClosedParToken: // handles "()"
|
case ClosedParToken: // handles "()"
|
||||||
p.consume(Values)
|
p.consume(Values)
|
||||||
return util.NewStringSet(""), nil
|
return sets.NewString(""), nil
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("found '%s', expected: ',', ')' or identifier", lit)
|
return nil, fmt.Errorf("found '%s', expected: ',', ')' or identifier", lit)
|
||||||
}
|
}
|
||||||
@@ -561,8 +562,8 @@ func (p *Parser) parseValues() (util.StringSet, error) {
|
|||||||
|
|
||||||
// parseIdentifiersList parses a (possibly empty) list of
|
// parseIdentifiersList parses a (possibly empty) list of
|
||||||
// of comma separated (possibly empty) identifiers
|
// of comma separated (possibly empty) identifiers
|
||||||
func (p *Parser) parseIdentifiersList() (util.StringSet, error) {
|
func (p *Parser) parseIdentifiersList() (sets.String, error) {
|
||||||
s := util.NewStringSet()
|
s := sets.NewString()
|
||||||
for {
|
for {
|
||||||
tok, lit := p.consume(Values)
|
tok, lit := p.consume(Values)
|
||||||
switch tok {
|
switch tok {
|
||||||
@@ -597,8 +598,8 @@ func (p *Parser) parseIdentifiersList() (util.StringSet, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// parseExactValue parses the only value for exact match style
|
// parseExactValue parses the only value for exact match style
|
||||||
func (p *Parser) parseExactValue() (util.StringSet, error) {
|
func (p *Parser) parseExactValue() (sets.String, error) {
|
||||||
s := util.NewStringSet()
|
s := sets.NewString()
|
||||||
tok, lit := p.consume(Values)
|
tok, lit := p.consume(Values)
|
||||||
if tok == IdentifierToken {
|
if tok == IdentifierToken {
|
||||||
s.Insert(lit)
|
s.Insert(lit)
|
||||||
@@ -670,7 +671,7 @@ func SelectorFromSet(ls Set) Selector {
|
|||||||
}
|
}
|
||||||
var requirements []Requirement
|
var requirements []Requirement
|
||||||
for label, value := range ls {
|
for label, value := range ls {
|
||||||
if r, err := NewRequirement(label, EqualsOperator, util.NewStringSet(value)); err != nil {
|
if r, err := NewRequirement(label, EqualsOperator, sets.NewString(value)); err != nil {
|
||||||
//TODO: double check errors when input comes from serialization?
|
//TODO: double check errors when input comes from serialization?
|
||||||
return LabelSelector{}
|
return LabelSelector{}
|
||||||
} else {
|
} else {
|
||||||
|
@@ -21,7 +21,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSelectorParse(t *testing.T) {
|
func TestSelectorParse(t *testing.T) {
|
||||||
@@ -273,16 +273,16 @@ func TestRequirementConstructor(t *testing.T) {
|
|||||||
requirementConstructorTests := []struct {
|
requirementConstructorTests := []struct {
|
||||||
Key string
|
Key string
|
||||||
Op Operator
|
Op Operator
|
||||||
Vals util.StringSet
|
Vals sets.String
|
||||||
Success bool
|
Success bool
|
||||||
}{
|
}{
|
||||||
{"x", InOperator, nil, false},
|
{"x", InOperator, nil, false},
|
||||||
{"x", NotInOperator, util.NewStringSet(), false},
|
{"x", NotInOperator, sets.NewString(), false},
|
||||||
{"x", InOperator, util.NewStringSet("foo"), true},
|
{"x", InOperator, sets.NewString("foo"), true},
|
||||||
{"x", NotInOperator, util.NewStringSet("foo"), true},
|
{"x", NotInOperator, sets.NewString("foo"), true},
|
||||||
{"x", ExistsOperator, nil, true},
|
{"x", ExistsOperator, nil, true},
|
||||||
{"1foo", InOperator, util.NewStringSet("bar"), true},
|
{"1foo", InOperator, sets.NewString("bar"), true},
|
||||||
{"1234", InOperator, util.NewStringSet("bar"), true},
|
{"1234", InOperator, sets.NewString("bar"), true},
|
||||||
{strings.Repeat("a", 254), ExistsOperator, nil, false}, //breaks DNS rule that len(key) <= 253
|
{strings.Repeat("a", 254), ExistsOperator, nil, false}, //breaks DNS rule that len(key) <= 253
|
||||||
}
|
}
|
||||||
for _, rc := range requirementConstructorTests {
|
for _, rc := range requirementConstructorTests {
|
||||||
@@ -302,23 +302,23 @@ func TestToString(t *testing.T) {
|
|||||||
Valid bool
|
Valid bool
|
||||||
}{
|
}{
|
||||||
{&LabelSelector{
|
{&LabelSelector{
|
||||||
getRequirement("x", InOperator, util.NewStringSet("abc", "def"), t),
|
getRequirement("x", InOperator, sets.NewString("abc", "def"), t),
|
||||||
getRequirement("y", NotInOperator, util.NewStringSet("jkl"), t),
|
getRequirement("y", NotInOperator, sets.NewString("jkl"), t),
|
||||||
getRequirement("z", ExistsOperator, nil, t)},
|
getRequirement("z", ExistsOperator, nil, t)},
|
||||||
"x in (abc,def),y notin (jkl),z", true},
|
"x in (abc,def),y notin (jkl),z", true},
|
||||||
{&LabelSelector{
|
{&LabelSelector{
|
||||||
getRequirement("x", InOperator, util.NewStringSet("abc", "def"), t),
|
getRequirement("x", InOperator, sets.NewString("abc", "def"), t),
|
||||||
req}, // adding empty req for the trailing ','
|
req}, // adding empty req for the trailing ','
|
||||||
"x in (abc,def),", false},
|
"x in (abc,def),", false},
|
||||||
{&LabelSelector{
|
{&LabelSelector{
|
||||||
getRequirement("x", NotInOperator, util.NewStringSet("abc"), t),
|
getRequirement("x", NotInOperator, sets.NewString("abc"), t),
|
||||||
getRequirement("y", InOperator, util.NewStringSet("jkl", "mno"), t),
|
getRequirement("y", InOperator, sets.NewString("jkl", "mno"), t),
|
||||||
getRequirement("z", NotInOperator, util.NewStringSet(""), t)},
|
getRequirement("z", NotInOperator, sets.NewString(""), t)},
|
||||||
"x notin (abc),y in (jkl,mno),z notin ()", true},
|
"x notin (abc),y in (jkl,mno),z notin ()", true},
|
||||||
{&LabelSelector{
|
{&LabelSelector{
|
||||||
getRequirement("x", EqualsOperator, util.NewStringSet("abc"), t),
|
getRequirement("x", EqualsOperator, sets.NewString("abc"), t),
|
||||||
getRequirement("y", DoubleEqualsOperator, util.NewStringSet("jkl"), t),
|
getRequirement("y", DoubleEqualsOperator, sets.NewString("jkl"), t),
|
||||||
getRequirement("z", NotEqualsOperator, util.NewStringSet("a"), t)},
|
getRequirement("z", NotEqualsOperator, sets.NewString("a"), t)},
|
||||||
"x=abc,y==jkl,z!=a", true},
|
"x=abc,y==jkl,z!=a", true},
|
||||||
}
|
}
|
||||||
for _, ts := range toStringTests {
|
for _, ts := range toStringTests {
|
||||||
@@ -341,19 +341,19 @@ func TestRequirementLabelSelectorMatching(t *testing.T) {
|
|||||||
req,
|
req,
|
||||||
}, false},
|
}, false},
|
||||||
{Set{"x": "foo", "y": "baz"}, &LabelSelector{
|
{Set{"x": "foo", "y": "baz"}, &LabelSelector{
|
||||||
getRequirement("x", InOperator, util.NewStringSet("foo"), t),
|
getRequirement("x", InOperator, sets.NewString("foo"), t),
|
||||||
getRequirement("y", NotInOperator, util.NewStringSet("alpha"), t),
|
getRequirement("y", NotInOperator, sets.NewString("alpha"), t),
|
||||||
}, true},
|
}, true},
|
||||||
{Set{"x": "foo", "y": "baz"}, &LabelSelector{
|
{Set{"x": "foo", "y": "baz"}, &LabelSelector{
|
||||||
getRequirement("x", InOperator, util.NewStringSet("foo"), t),
|
getRequirement("x", InOperator, sets.NewString("foo"), t),
|
||||||
getRequirement("y", InOperator, util.NewStringSet("alpha"), t),
|
getRequirement("y", InOperator, sets.NewString("alpha"), t),
|
||||||
}, false},
|
}, false},
|
||||||
{Set{"y": ""}, &LabelSelector{
|
{Set{"y": ""}, &LabelSelector{
|
||||||
getRequirement("x", NotInOperator, util.NewStringSet(""), t),
|
getRequirement("x", NotInOperator, sets.NewString(""), t),
|
||||||
getRequirement("y", ExistsOperator, nil, t),
|
getRequirement("y", ExistsOperator, nil, t),
|
||||||
}, true},
|
}, true},
|
||||||
{Set{"y": "baz"}, &LabelSelector{
|
{Set{"y": "baz"}, &LabelSelector{
|
||||||
getRequirement("x", InOperator, util.NewStringSet(""), t),
|
getRequirement("x", InOperator, sets.NewString(""), t),
|
||||||
}, false},
|
}, false},
|
||||||
}
|
}
|
||||||
for _, lsm := range labelSelectorMatchingTests {
|
for _, lsm := range labelSelectorMatchingTests {
|
||||||
@@ -378,60 +378,60 @@ func TestSetSelectorParser(t *testing.T) {
|
|||||||
getRequirement("this-is-a-dns.domain.com/key-with-dash", ExistsOperator, nil, t),
|
getRequirement("this-is-a-dns.domain.com/key-with-dash", ExistsOperator, nil, t),
|
||||||
}, true, true},
|
}, true, true},
|
||||||
{"this-is-another-dns.domain.com/key-with-dash in (so,what)", LabelSelector{
|
{"this-is-another-dns.domain.com/key-with-dash in (so,what)", LabelSelector{
|
||||||
getRequirement("this-is-another-dns.domain.com/key-with-dash", InOperator, util.NewStringSet("so", "what"), t),
|
getRequirement("this-is-another-dns.domain.com/key-with-dash", InOperator, sets.NewString("so", "what"), t),
|
||||||
}, true, true},
|
}, true, true},
|
||||||
{"0.1.2.domain/99 notin (10.10.100.1, tick.tack.clock)", LabelSelector{
|
{"0.1.2.domain/99 notin (10.10.100.1, tick.tack.clock)", LabelSelector{
|
||||||
getRequirement("0.1.2.domain/99", NotInOperator, util.NewStringSet("10.10.100.1", "tick.tack.clock"), t),
|
getRequirement("0.1.2.domain/99", NotInOperator, sets.NewString("10.10.100.1", "tick.tack.clock"), t),
|
||||||
}, true, true},
|
}, true, true},
|
||||||
{"foo in (abc)", LabelSelector{
|
{"foo in (abc)", LabelSelector{
|
||||||
getRequirement("foo", InOperator, util.NewStringSet("abc"), t),
|
getRequirement("foo", InOperator, sets.NewString("abc"), t),
|
||||||
}, true, true},
|
}, true, true},
|
||||||
{"x notin\n (abc)", LabelSelector{
|
{"x notin\n (abc)", LabelSelector{
|
||||||
getRequirement("x", NotInOperator, util.NewStringSet("abc"), t),
|
getRequirement("x", NotInOperator, sets.NewString("abc"), t),
|
||||||
}, true, true},
|
}, true, true},
|
||||||
{"x notin \t (abc,def)", LabelSelector{
|
{"x notin \t (abc,def)", LabelSelector{
|
||||||
getRequirement("x", NotInOperator, util.NewStringSet("abc", "def"), t),
|
getRequirement("x", NotInOperator, sets.NewString("abc", "def"), t),
|
||||||
}, true, true},
|
}, true, true},
|
||||||
{"x in (abc,def)", LabelSelector{
|
{"x in (abc,def)", LabelSelector{
|
||||||
getRequirement("x", InOperator, util.NewStringSet("abc", "def"), t),
|
getRequirement("x", InOperator, sets.NewString("abc", "def"), t),
|
||||||
}, true, true},
|
}, true, true},
|
||||||
{"x in (abc,)", LabelSelector{
|
{"x in (abc,)", LabelSelector{
|
||||||
getRequirement("x", InOperator, util.NewStringSet("abc", ""), t),
|
getRequirement("x", InOperator, sets.NewString("abc", ""), t),
|
||||||
}, true, true},
|
}, true, true},
|
||||||
{"x in ()", LabelSelector{
|
{"x in ()", LabelSelector{
|
||||||
getRequirement("x", InOperator, util.NewStringSet(""), t),
|
getRequirement("x", InOperator, sets.NewString(""), t),
|
||||||
}, true, true},
|
}, true, true},
|
||||||
{"x notin (abc,,def),bar,z in (),w", LabelSelector{
|
{"x notin (abc,,def),bar,z in (),w", LabelSelector{
|
||||||
getRequirement("bar", ExistsOperator, nil, t),
|
getRequirement("bar", ExistsOperator, nil, t),
|
||||||
getRequirement("w", ExistsOperator, nil, t),
|
getRequirement("w", ExistsOperator, nil, t),
|
||||||
getRequirement("x", NotInOperator, util.NewStringSet("abc", "", "def"), t),
|
getRequirement("x", NotInOperator, sets.NewString("abc", "", "def"), t),
|
||||||
getRequirement("z", InOperator, util.NewStringSet(""), t),
|
getRequirement("z", InOperator, sets.NewString(""), t),
|
||||||
}, true, true},
|
}, true, true},
|
||||||
{"x,y in (a)", LabelSelector{
|
{"x,y in (a)", LabelSelector{
|
||||||
getRequirement("y", InOperator, util.NewStringSet("a"), t),
|
getRequirement("y", InOperator, sets.NewString("a"), t),
|
||||||
getRequirement("x", ExistsOperator, nil, t),
|
getRequirement("x", ExistsOperator, nil, t),
|
||||||
}, false, true},
|
}, false, true},
|
||||||
{"x=a", LabelSelector{
|
{"x=a", LabelSelector{
|
||||||
getRequirement("x", EqualsOperator, util.NewStringSet("a"), t),
|
getRequirement("x", EqualsOperator, sets.NewString("a"), t),
|
||||||
}, true, true},
|
}, true, true},
|
||||||
{"x=a,y!=b", LabelSelector{
|
{"x=a,y!=b", LabelSelector{
|
||||||
getRequirement("x", EqualsOperator, util.NewStringSet("a"), t),
|
getRequirement("x", EqualsOperator, sets.NewString("a"), t),
|
||||||
getRequirement("y", NotEqualsOperator, util.NewStringSet("b"), t),
|
getRequirement("y", NotEqualsOperator, sets.NewString("b"), t),
|
||||||
}, true, true},
|
}, true, true},
|
||||||
{"x=a,y!=b,z in (h,i,j)", LabelSelector{
|
{"x=a,y!=b,z in (h,i,j)", LabelSelector{
|
||||||
getRequirement("x", EqualsOperator, util.NewStringSet("a"), t),
|
getRequirement("x", EqualsOperator, sets.NewString("a"), t),
|
||||||
getRequirement("y", NotEqualsOperator, util.NewStringSet("b"), t),
|
getRequirement("y", NotEqualsOperator, sets.NewString("b"), t),
|
||||||
getRequirement("z", InOperator, util.NewStringSet("h", "i", "j"), t),
|
getRequirement("z", InOperator, sets.NewString("h", "i", "j"), t),
|
||||||
}, true, true},
|
}, true, true},
|
||||||
{"x=a||y=b", LabelSelector{}, false, false},
|
{"x=a||y=b", LabelSelector{}, false, false},
|
||||||
{"x,,y", nil, true, false},
|
{"x,,y", nil, true, false},
|
||||||
{",x,y", nil, true, false},
|
{",x,y", nil, true, false},
|
||||||
{"x nott in (y)", nil, true, false},
|
{"x nott in (y)", nil, true, false},
|
||||||
{"x notin ( )", LabelSelector{
|
{"x notin ( )", LabelSelector{
|
||||||
getRequirement("x", NotInOperator, util.NewStringSet(""), t),
|
getRequirement("x", NotInOperator, sets.NewString(""), t),
|
||||||
}, true, true},
|
}, true, true},
|
||||||
{"x notin (, a)", LabelSelector{
|
{"x notin (, a)", LabelSelector{
|
||||||
getRequirement("x", NotInOperator, util.NewStringSet("", "a"), t),
|
getRequirement("x", NotInOperator, sets.NewString("", "a"), t),
|
||||||
}, true, true},
|
}, true, true},
|
||||||
{"a in (xyz),", nil, true, false},
|
{"a in (xyz),", nil, true, false},
|
||||||
{"a in (xyz)b notin ()", nil, true, false},
|
{"a in (xyz)b notin ()", nil, true, false},
|
||||||
@@ -439,7 +439,7 @@ func TestSetSelectorParser(t *testing.T) {
|
|||||||
getRequirement("a", ExistsOperator, nil, t),
|
getRequirement("a", ExistsOperator, nil, t),
|
||||||
}, true, true},
|
}, true, true},
|
||||||
{"a in (x,y,notin, z,in)", LabelSelector{
|
{"a in (x,y,notin, z,in)", LabelSelector{
|
||||||
getRequirement("a", InOperator, util.NewStringSet("in", "notin", "x", "y", "z"), t),
|
getRequirement("a", InOperator, sets.NewString("in", "notin", "x", "y", "z"), t),
|
||||||
}, true, true}, // operator 'in' inside list of identifiers
|
}, true, true}, // operator 'in' inside list of identifiers
|
||||||
{"a in (xyz abc)", nil, false, false}, // no comma
|
{"a in (xyz abc)", nil, false, false}, // no comma
|
||||||
{"a notin(", nil, true, false}, // bad formed
|
{"a notin(", nil, true, false}, // bad formed
|
||||||
@@ -458,7 +458,7 @@ func TestSetSelectorParser(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func getRequirement(key string, op Operator, vals util.StringSet, t *testing.T) Requirement {
|
func getRequirement(key string, op Operator, vals sets.String, t *testing.T) Requirement {
|
||||||
req, err := NewRequirement(key, op, vals)
|
req, err := NewRequirement(key, op, vals)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("NewRequirement(%v, %v, %v) resulted in error:%v", key, op, vals, err)
|
t.Errorf("NewRequirement(%v, %v, %v) resulted in error:%v", key, op, vals, err)
|
||||||
@@ -480,16 +480,16 @@ func TestAdd(t *testing.T) {
|
|||||||
"key",
|
"key",
|
||||||
InOperator,
|
InOperator,
|
||||||
[]string{"value"},
|
[]string{"value"},
|
||||||
LabelSelector{Requirement{"key", InOperator, util.NewStringSet("value")}},
|
LabelSelector{Requirement{"key", InOperator, sets.NewString("value")}},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
LabelSelector{Requirement{"key", InOperator, util.NewStringSet("value")}},
|
LabelSelector{Requirement{"key", InOperator, sets.NewString("value")}},
|
||||||
"key2",
|
"key2",
|
||||||
EqualsOperator,
|
EqualsOperator,
|
||||||
[]string{"value2"},
|
[]string{"value2"},
|
||||||
LabelSelector{
|
LabelSelector{
|
||||||
Requirement{"key", InOperator, util.NewStringSet("value")},
|
Requirement{"key", InOperator, sets.NewString("value")},
|
||||||
Requirement{"key2", EqualsOperator, util.NewStringSet("value2")},
|
Requirement{"key2", EqualsOperator, sets.NewString("value2")},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@@ -79,6 +79,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/tools"
|
"k8s.io/kubernetes/pkg/tools"
|
||||||
"k8s.io/kubernetes/pkg/ui"
|
"k8s.io/kubernetes/pkg/ui"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
|
|
||||||
daemonetcd "k8s.io/kubernetes/pkg/registry/daemonset/etcd"
|
daemonetcd "k8s.io/kubernetes/pkg/registry/daemonset/etcd"
|
||||||
horizontalpodautoscaleretcd "k8s.io/kubernetes/pkg/registry/horizontalpodautoscaler/etcd"
|
horizontalpodautoscaleretcd "k8s.io/kubernetes/pkg/registry/horizontalpodautoscaler/etcd"
|
||||||
@@ -566,7 +567,7 @@ func (m *Master) init(c *Config) {
|
|||||||
apiserver.InstallSupport(m.muxHelper, m.rootWebService, c.EnableProfiling, healthzChecks...)
|
apiserver.InstallSupport(m.muxHelper, m.rootWebService, c.EnableProfiling, healthzChecks...)
|
||||||
apiserver.AddApiWebService(m.handlerContainer, c.APIPrefix, apiVersions)
|
apiserver.AddApiWebService(m.handlerContainer, c.APIPrefix, apiVersions)
|
||||||
defaultVersion := m.defaultAPIGroupVersion()
|
defaultVersion := m.defaultAPIGroupVersion()
|
||||||
requestInfoResolver := &apiserver.APIRequestInfoResolver{APIPrefixes: util.NewStringSet(strings.TrimPrefix(defaultVersion.Root, "/")), RestMapper: defaultVersion.Mapper}
|
requestInfoResolver := &apiserver.APIRequestInfoResolver{APIPrefixes: sets.NewString(strings.TrimPrefix(defaultVersion.Root, "/")), RestMapper: defaultVersion.Mapper}
|
||||||
apiserver.InstallServiceErrorHandler(m.handlerContainer, requestInfoResolver, apiVersions)
|
apiserver.InstallServiceErrorHandler(m.handlerContainer, requestInfoResolver, apiVersions)
|
||||||
|
|
||||||
if m.exp {
|
if m.exp {
|
||||||
@@ -575,7 +576,7 @@ func (m *Master) init(c *Config) {
|
|||||||
glog.Fatalf("Unable to setup experimental api: %v", err)
|
glog.Fatalf("Unable to setup experimental api: %v", err)
|
||||||
}
|
}
|
||||||
apiserver.AddApiWebService(m.handlerContainer, c.ExpAPIPrefix, []string{expVersion.Version})
|
apiserver.AddApiWebService(m.handlerContainer, c.ExpAPIPrefix, []string{expVersion.Version})
|
||||||
expRequestInfoResolver := &apiserver.APIRequestInfoResolver{APIPrefixes: util.NewStringSet(strings.TrimPrefix(expVersion.Root, "/")), RestMapper: expVersion.Mapper}
|
expRequestInfoResolver := &apiserver.APIRequestInfoResolver{APIPrefixes: sets.NewString(strings.TrimPrefix(expVersion.Root, "/")), RestMapper: expVersion.Mapper}
|
||||||
apiserver.InstallServiceErrorHandler(m.handlerContainer, expRequestInfoResolver, []string{expVersion.Version})
|
apiserver.InstallServiceErrorHandler(m.handlerContainer, expRequestInfoResolver, []string{expVersion.Version})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -784,7 +785,7 @@ func (m *Master) InstallThirdPartyAPI(rsrc *expapi.ThirdPartyResource) error {
|
|||||||
}
|
}
|
||||||
thirdPartyPrefix := "/thirdparty/" + group + "/"
|
thirdPartyPrefix := "/thirdparty/" + group + "/"
|
||||||
apiserver.AddApiWebService(m.handlerContainer, thirdPartyPrefix, []string{rsrc.Versions[0].Name})
|
apiserver.AddApiWebService(m.handlerContainer, thirdPartyPrefix, []string{rsrc.Versions[0].Name})
|
||||||
thirdPartyRequestInfoResolver := &apiserver.APIRequestInfoResolver{APIPrefixes: util.NewStringSet(strings.TrimPrefix(group, "/")), RestMapper: thirdparty.Mapper}
|
thirdPartyRequestInfoResolver := &apiserver.APIRequestInfoResolver{APIPrefixes: sets.NewString(strings.TrimPrefix(group, "/")), RestMapper: thirdparty.Mapper}
|
||||||
apiserver.InstallServiceErrorHandler(m.handlerContainer, thirdPartyRequestInfoResolver, []string{thirdparty.Version})
|
apiserver.InstallServiceErrorHandler(m.handlerContainer, thirdPartyRequestInfoResolver, []string{thirdparty.Version})
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@@ -31,6 +31,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/tools/etcdtest"
|
"k8s.io/kubernetes/pkg/tools/etcdtest"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
"k8s.io/kubernetes/pkg/util/fielderrors"
|
"k8s.io/kubernetes/pkg/util/fielderrors"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
|
|
||||||
"github.com/coreos/go-etcd/etcd"
|
"github.com/coreos/go-etcd/etcd"
|
||||||
)
|
)
|
||||||
@@ -93,7 +94,7 @@ func NewTestGenericEtcdRegistry(t *testing.T) (*tools.FakeEtcdClient, *Etcd) {
|
|||||||
// setMatcher is a matcher that matches any pod with id in the set.
|
// setMatcher is a matcher that matches any pod with id in the set.
|
||||||
// Makes testing simpler.
|
// Makes testing simpler.
|
||||||
type setMatcher struct {
|
type setMatcher struct {
|
||||||
util.StringSet
|
sets.String
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sm setMatcher) Matches(obj runtime.Object) (bool, error) {
|
func (sm setMatcher) Matches(obj runtime.Object) (bool, error) {
|
||||||
@@ -189,7 +190,7 @@ func TestEtcdList(t *testing.T) {
|
|||||||
R: singleElemListResp,
|
R: singleElemListResp,
|
||||||
E: nil,
|
E: nil,
|
||||||
},
|
},
|
||||||
m: setMatcher{util.NewStringSet("foo")},
|
m: setMatcher{sets.NewString("foo")},
|
||||||
out: &api.PodList{Items: []api.Pod{*podA}},
|
out: &api.PodList{Items: []api.Pod{*podA}},
|
||||||
succeed: true,
|
succeed: true,
|
||||||
},
|
},
|
||||||
@@ -198,7 +199,7 @@ func TestEtcdList(t *testing.T) {
|
|||||||
R: normalListResp,
|
R: normalListResp,
|
||||||
E: nil,
|
E: nil,
|
||||||
},
|
},
|
||||||
m: setMatcher{util.NewStringSet("foo", "makeMatchSingleReturnFalse")},
|
m: setMatcher{sets.NewString("foo", "makeMatchSingleReturnFalse")},
|
||||||
out: &api.PodList{Items: []api.Pod{*podA}},
|
out: &api.PodList{Items: []api.Pod{*podA}},
|
||||||
succeed: true,
|
succeed: true,
|
||||||
},
|
},
|
||||||
@@ -560,8 +561,8 @@ func TestEtcdDelete(t *testing.T) {
|
|||||||
|
|
||||||
func TestEtcdWatch(t *testing.T) {
|
func TestEtcdWatch(t *testing.T) {
|
||||||
table := map[string]generic.Matcher{
|
table := map[string]generic.Matcher{
|
||||||
"single": setMatcher{util.NewStringSet("foo")},
|
"single": setMatcher{sets.NewString("foo")},
|
||||||
"multi": setMatcher{util.NewStringSet("foo", "bar")},
|
"multi": setMatcher{sets.NewString("foo", "bar")},
|
||||||
}
|
}
|
||||||
|
|
||||||
for name, m := range table {
|
for name, m := range table {
|
||||||
|
@@ -21,7 +21,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestAllocate(t *testing.T) {
|
func TestAllocate(t *testing.T) {
|
||||||
@@ -34,7 +34,7 @@ func TestAllocate(t *testing.T) {
|
|||||||
if f := r.Free(); f != 254 {
|
if f := r.Free(); f != 254 {
|
||||||
t.Errorf("unexpected free %d", f)
|
t.Errorf("unexpected free %d", f)
|
||||||
}
|
}
|
||||||
found := util.NewStringSet()
|
found := sets.NewString()
|
||||||
count := 0
|
count := 0
|
||||||
for r.Free() > 0 {
|
for r.Free() > 0 {
|
||||||
ip, err := r.AllocateNext()
|
ip, err := r.AllocateNext()
|
||||||
@@ -118,7 +118,7 @@ func TestAllocateSmall(t *testing.T) {
|
|||||||
if f := r.Free(); f != 2 {
|
if f := r.Free(); f != 2 {
|
||||||
t.Errorf("free: %d", f)
|
t.Errorf("free: %d", f)
|
||||||
}
|
}
|
||||||
found := util.NewStringSet()
|
found := sets.NewString()
|
||||||
for i := 0; i < 2; i++ {
|
for i := 0; i < 2; i++ {
|
||||||
ip, err := r.AllocateNext()
|
ip, err := r.AllocateNext()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@@ -23,6 +23,7 @@ import (
|
|||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestAllocate(t *testing.T) {
|
func TestAllocate(t *testing.T) {
|
||||||
@@ -34,7 +35,7 @@ func TestAllocate(t *testing.T) {
|
|||||||
if f := r.Free(); f != 201 {
|
if f := r.Free(); f != 201 {
|
||||||
t.Errorf("unexpected free %d", f)
|
t.Errorf("unexpected free %d", f)
|
||||||
}
|
}
|
||||||
found := util.NewStringSet()
|
found := sets.NewString()
|
||||||
count := 0
|
count := 0
|
||||||
for r.Free() > 0 {
|
for r.Free() > 0 {
|
||||||
p, err := r.AllocateNext()
|
p, err := r.AllocateNext()
|
||||||
|
@@ -25,7 +25,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/conversion"
|
"k8s.io/kubernetes/pkg/conversion"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ConversionGenerator interface {
|
type ConversionGenerator interface {
|
||||||
@@ -33,7 +33,7 @@ type ConversionGenerator interface {
|
|||||||
WriteConversionFunctions(w io.Writer) error
|
WriteConversionFunctions(w io.Writer) error
|
||||||
RegisterConversionFunctions(w io.Writer, pkg string) error
|
RegisterConversionFunctions(w io.Writer, pkg string) error
|
||||||
AddImport(pkg string) string
|
AddImport(pkg string) string
|
||||||
RepackImports(exclude util.StringSet)
|
RepackImports(exclude sets.String)
|
||||||
WriteImports(w io.Writer) error
|
WriteImports(w io.Writer) error
|
||||||
OverwritePackage(pkg, overwrite string)
|
OverwritePackage(pkg, overwrite string)
|
||||||
AssumePrivateConversions()
|
AssumePrivateConversions()
|
||||||
@@ -279,7 +279,7 @@ func (g *conversionGenerator) targetPackage(pkg string) {
|
|||||||
g.shortImports[""] = pkg
|
g.shortImports[""] = pkg
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *conversionGenerator) RepackImports(exclude util.StringSet) {
|
func (g *conversionGenerator) RepackImports(exclude sets.String) {
|
||||||
var packages []string
|
var packages []string
|
||||||
for key := range g.imports {
|
for key := range g.imports {
|
||||||
packages = append(packages, key)
|
packages = append(packages, key)
|
||||||
|
@@ -25,7 +25,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/conversion"
|
"k8s.io/kubernetes/pkg/conversion"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO(wojtek-t): As suggested in #8320, we should consider the strategy
|
// TODO(wojtek-t): As suggested in #8320, we should consider the strategy
|
||||||
@@ -69,7 +69,7 @@ type DeepCopyGenerator interface {
|
|||||||
OverwritePackage(pkg, overwrite string)
|
OverwritePackage(pkg, overwrite string)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDeepCopyGenerator(scheme *conversion.Scheme, targetPkg string, include util.StringSet) DeepCopyGenerator {
|
func NewDeepCopyGenerator(scheme *conversion.Scheme, targetPkg string, include sets.String) DeepCopyGenerator {
|
||||||
g := &deepCopyGenerator{
|
g := &deepCopyGenerator{
|
||||||
scheme: scheme,
|
scheme: scheme,
|
||||||
targetPkg: targetPkg,
|
targetPkg: targetPkg,
|
||||||
@@ -100,7 +100,7 @@ type deepCopyGenerator struct {
|
|||||||
shortImports map[string]string
|
shortImports map[string]string
|
||||||
pkgOverwrites map[string]string
|
pkgOverwrites map[string]string
|
||||||
replace map[pkgPathNamePair]reflect.Type
|
replace map[pkgPathNamePair]reflect.Type
|
||||||
include util.StringSet
|
include sets.String
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *deepCopyGenerator) addImportByPath(pkg string) string {
|
func (g *deepCopyGenerator) addImportByPath(pkg string) string {
|
||||||
|
@@ -34,6 +34,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/tools"
|
"k8s.io/kubernetes/pkg/tools"
|
||||||
"k8s.io/kubernetes/pkg/tools/etcdtest"
|
"k8s.io/kubernetes/pkg/tools/etcdtest"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/util/wait"
|
"k8s.io/kubernetes/pkg/util/wait"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
)
|
)
|
||||||
@@ -160,7 +161,7 @@ func TestListFromMemory(t *testing.T) {
|
|||||||
if len(result.Items) != 2 {
|
if len(result.Items) != 2 {
|
||||||
t.Errorf("unexpected list result: %d", len(result.Items))
|
t.Errorf("unexpected list result: %d", len(result.Items))
|
||||||
}
|
}
|
||||||
keys := util.StringSet{}
|
keys := sets.String{}
|
||||||
for _, item := range result.Items {
|
for _, item := range result.Items {
|
||||||
keys.Insert(item.ObjectMeta.Name)
|
keys.Insert(item.ObjectMeta.Name)
|
||||||
}
|
}
|
||||||
|
@@ -24,6 +24,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/client/unversioned/cache"
|
"k8s.io/kubernetes/pkg/client/unversioned/cache"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -76,7 +77,7 @@ func TestWatchCacheBasic(t *testing.T) {
|
|||||||
store.Add(makeTestPod("pod2", 5))
|
store.Add(makeTestPod("pod2", 5))
|
||||||
store.Add(makeTestPod("pod3", 6))
|
store.Add(makeTestPod("pod3", 6))
|
||||||
{
|
{
|
||||||
podNames := util.StringSet{}
|
podNames := sets.String{}
|
||||||
for _, item := range store.List() {
|
for _, item := range store.List() {
|
||||||
podNames.Insert(item.(*api.Pod).ObjectMeta.Name)
|
podNames.Insert(item.(*api.Pod).ObjectMeta.Name)
|
||||||
}
|
}
|
||||||
@@ -94,7 +95,7 @@ func TestWatchCacheBasic(t *testing.T) {
|
|||||||
makeTestPod("pod5", 8),
|
makeTestPod("pod5", 8),
|
||||||
}, "8")
|
}, "8")
|
||||||
{
|
{
|
||||||
podNames := util.StringSet{}
|
podNames := sets.String{}
|
||||||
for _, item := range store.List() {
|
for _, item := range store.List() {
|
||||||
podNames.Insert(item.(*api.Pod).ObjectMeta.Name)
|
podNames.Insert(item.(*api.Pod).ObjectMeta.Name)
|
||||||
}
|
}
|
||||||
|
@@ -25,8 +25,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api/resource"
|
"k8s.io/kubernetes/pkg/api/resource"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
|
||||||
"k8s.io/kubernetes/pkg/util/exec"
|
"k8s.io/kubernetes/pkg/util/exec"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
)
|
)
|
||||||
@@ -65,7 +65,7 @@ func (t *tcShaper) nextClassID() (int, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
scanner := bufio.NewScanner(bytes.NewBuffer(data))
|
scanner := bufio.NewScanner(bytes.NewBuffer(data))
|
||||||
classes := util.StringSet{}
|
classes := sets.String{}
|
||||||
for scanner.Scan() {
|
for scanner.Scan() {
|
||||||
line := strings.TrimSpace(scanner.Text())
|
line := strings.TrimSpace(scanner.Text())
|
||||||
// skip empty lines
|
// skip empty lines
|
||||||
|
@@ -26,8 +26,8 @@ import (
|
|||||||
|
|
||||||
"github.com/coreos/go-semver/semver"
|
"github.com/coreos/go-semver/semver"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
|
||||||
utilexec "k8s.io/kubernetes/pkg/util/exec"
|
utilexec "k8s.io/kubernetes/pkg/util/exec"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
type RulePosition string
|
type RulePosition string
|
||||||
@@ -352,7 +352,7 @@ func (runner *runner) checkRuleWithoutCheck(table Table, chain Chain, args ...st
|
|||||||
tmpField := strings.Trim(args[i], "\"")
|
tmpField := strings.Trim(args[i], "\"")
|
||||||
argsCopy = append(argsCopy, strings.Fields(tmpField)...)
|
argsCopy = append(argsCopy, strings.Fields(tmpField)...)
|
||||||
}
|
}
|
||||||
argset := util.NewStringSet(argsCopy...)
|
argset := sets.NewString(argsCopy...)
|
||||||
|
|
||||||
for _, line := range strings.Split(string(out), "\n") {
|
for _, line := range strings.Split(string(out), "\n") {
|
||||||
var fields = strings.Fields(line)
|
var fields = strings.Fields(line)
|
||||||
@@ -370,7 +370,7 @@ func (runner *runner) checkRuleWithoutCheck(table Table, chain Chain, args ...st
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: This misses reorderings e.g. "-x foo ! -y bar" will match "! -x foo -y bar"
|
// TODO: This misses reorderings e.g. "-x foo ! -y bar" will match "! -x foo -y bar"
|
||||||
if util.NewStringSet(fields...).IsSuperset(argset) {
|
if sets.NewString(fields...).IsSuperset(argset) {
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
glog.V(5).Infof("DBG: fields is not a superset of args: fields=%v args=%v", fields, args)
|
glog.V(5).Infof("DBG: fields is not a superset of args: fields=%v args=%v", fields, args)
|
||||||
|
@@ -20,8 +20,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/util"
|
|
||||||
"k8s.io/kubernetes/pkg/util/exec"
|
"k8s.io/kubernetes/pkg/util/exec"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getIptablesCommand(protocol Protocol) string {
|
func getIptablesCommand(protocol Protocol) string {
|
||||||
@@ -68,7 +68,7 @@ func testEnsureChain(t *testing.T, protocol Protocol) {
|
|||||||
t.Errorf("expected 2 CombinedOutput() calls, got %d", fcmd.CombinedOutputCalls)
|
t.Errorf("expected 2 CombinedOutput() calls, got %d", fcmd.CombinedOutputCalls)
|
||||||
}
|
}
|
||||||
cmd := getIptablesCommand(protocol)
|
cmd := getIptablesCommand(protocol)
|
||||||
if !util.NewStringSet(fcmd.CombinedOutputLog[1]...).HasAll(cmd, "-t", "nat", "-N", "FOOBAR") {
|
if !sets.NewString(fcmd.CombinedOutputLog[1]...).HasAll(cmd, "-t", "nat", "-N", "FOOBAR") {
|
||||||
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[1])
|
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[1])
|
||||||
}
|
}
|
||||||
// Exists.
|
// Exists.
|
||||||
@@ -121,7 +121,7 @@ func TestFlushChain(t *testing.T) {
|
|||||||
if fcmd.CombinedOutputCalls != 2 {
|
if fcmd.CombinedOutputCalls != 2 {
|
||||||
t.Errorf("expected 2 CombinedOutput() calls, got %d", fcmd.CombinedOutputCalls)
|
t.Errorf("expected 2 CombinedOutput() calls, got %d", fcmd.CombinedOutputCalls)
|
||||||
}
|
}
|
||||||
if !util.NewStringSet(fcmd.CombinedOutputLog[1]...).HasAll("iptables", "-t", "nat", "-F", "FOOBAR") {
|
if !sets.NewString(fcmd.CombinedOutputLog[1]...).HasAll("iptables", "-t", "nat", "-F", "FOOBAR") {
|
||||||
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[1])
|
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[1])
|
||||||
}
|
}
|
||||||
// Failure.
|
// Failure.
|
||||||
@@ -158,7 +158,7 @@ func TestDeleteChain(t *testing.T) {
|
|||||||
if fcmd.CombinedOutputCalls != 2 {
|
if fcmd.CombinedOutputCalls != 2 {
|
||||||
t.Errorf("expected 2 CombinedOutput() calls, got %d", fcmd.CombinedOutputCalls)
|
t.Errorf("expected 2 CombinedOutput() calls, got %d", fcmd.CombinedOutputCalls)
|
||||||
}
|
}
|
||||||
if !util.NewStringSet(fcmd.CombinedOutputLog[1]...).HasAll("iptables", "-t", "nat", "-X", "FOOBAR") {
|
if !sets.NewString(fcmd.CombinedOutputLog[1]...).HasAll("iptables", "-t", "nat", "-X", "FOOBAR") {
|
||||||
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[1])
|
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[1])
|
||||||
}
|
}
|
||||||
// Failure.
|
// Failure.
|
||||||
@@ -196,7 +196,7 @@ func TestEnsureRuleAlreadyExists(t *testing.T) {
|
|||||||
if fcmd.CombinedOutputCalls != 2 {
|
if fcmd.CombinedOutputCalls != 2 {
|
||||||
t.Errorf("expected 2 CombinedOutput() calls, got %d", fcmd.CombinedOutputCalls)
|
t.Errorf("expected 2 CombinedOutput() calls, got %d", fcmd.CombinedOutputCalls)
|
||||||
}
|
}
|
||||||
if !util.NewStringSet(fcmd.CombinedOutputLog[1]...).HasAll("iptables", "-t", "nat", "-C", "OUTPUT", "abc", "123") {
|
if !sets.NewString(fcmd.CombinedOutputLog[1]...).HasAll("iptables", "-t", "nat", "-C", "OUTPUT", "abc", "123") {
|
||||||
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[1])
|
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[1])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -232,7 +232,7 @@ func TestEnsureRuleNew(t *testing.T) {
|
|||||||
if fcmd.CombinedOutputCalls != 3 {
|
if fcmd.CombinedOutputCalls != 3 {
|
||||||
t.Errorf("expected 3 CombinedOutput() calls, got %d", fcmd.CombinedOutputCalls)
|
t.Errorf("expected 3 CombinedOutput() calls, got %d", fcmd.CombinedOutputCalls)
|
||||||
}
|
}
|
||||||
if !util.NewStringSet(fcmd.CombinedOutputLog[2]...).HasAll("iptables", "-t", "nat", "-A", "OUTPUT", "abc", "123") {
|
if !sets.NewString(fcmd.CombinedOutputLog[2]...).HasAll("iptables", "-t", "nat", "-A", "OUTPUT", "abc", "123") {
|
||||||
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[2])
|
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[2])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -319,7 +319,7 @@ func TestDeleteRuleAlreadyExists(t *testing.T) {
|
|||||||
if fcmd.CombinedOutputCalls != 2 {
|
if fcmd.CombinedOutputCalls != 2 {
|
||||||
t.Errorf("expected 2 CombinedOutput() calls, got %d", fcmd.CombinedOutputCalls)
|
t.Errorf("expected 2 CombinedOutput() calls, got %d", fcmd.CombinedOutputCalls)
|
||||||
}
|
}
|
||||||
if !util.NewStringSet(fcmd.CombinedOutputLog[1]...).HasAll("iptables", "-t", "nat", "-C", "OUTPUT", "abc", "123") {
|
if !sets.NewString(fcmd.CombinedOutputLog[1]...).HasAll("iptables", "-t", "nat", "-C", "OUTPUT", "abc", "123") {
|
||||||
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[1])
|
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[1])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -352,7 +352,7 @@ func TestDeleteRuleNew(t *testing.T) {
|
|||||||
if fcmd.CombinedOutputCalls != 3 {
|
if fcmd.CombinedOutputCalls != 3 {
|
||||||
t.Errorf("expected 3 CombinedOutput() calls, got %d", fcmd.CombinedOutputCalls)
|
t.Errorf("expected 3 CombinedOutput() calls, got %d", fcmd.CombinedOutputCalls)
|
||||||
}
|
}
|
||||||
if !util.NewStringSet(fcmd.CombinedOutputLog[2]...).HasAll("iptables", "-t", "nat", "-D", "OUTPUT", "abc", "123") {
|
if !sets.NewString(fcmd.CombinedOutputLog[2]...).HasAll("iptables", "-t", "nat", "-D", "OUTPUT", "abc", "123") {
|
||||||
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[2])
|
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[2])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -484,7 +484,7 @@ COMMIT
|
|||||||
if fcmd.CombinedOutputCalls != 1 {
|
if fcmd.CombinedOutputCalls != 1 {
|
||||||
t.Errorf("expected 1 CombinedOutput() call, got %d", fcmd.CombinedOutputCalls)
|
t.Errorf("expected 1 CombinedOutput() call, got %d", fcmd.CombinedOutputCalls)
|
||||||
}
|
}
|
||||||
if !util.NewStringSet(fcmd.CombinedOutputLog[0]...).HasAll("iptables-save", "-t", "nat") {
|
if !sets.NewString(fcmd.CombinedOutputLog[0]...).HasAll("iptables-save", "-t", "nat") {
|
||||||
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[0])
|
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[0])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -522,7 +522,7 @@ COMMIT
|
|||||||
if fcmd.CombinedOutputCalls != 1 {
|
if fcmd.CombinedOutputCalls != 1 {
|
||||||
t.Errorf("expected 1 CombinedOutput() call, got %d", fcmd.CombinedOutputCalls)
|
t.Errorf("expected 1 CombinedOutput() call, got %d", fcmd.CombinedOutputCalls)
|
||||||
}
|
}
|
||||||
if !util.NewStringSet(fcmd.CombinedOutputLog[0]...).HasAll("iptables-save", "-t", "nat") {
|
if !sets.NewString(fcmd.CombinedOutputLog[0]...).HasAll("iptables-save", "-t", "nat") {
|
||||||
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[0])
|
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[0])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -573,7 +573,7 @@ func TestWaitFlagUnavailable(t *testing.T) {
|
|||||||
if fcmd.CombinedOutputCalls != 2 {
|
if fcmd.CombinedOutputCalls != 2 {
|
||||||
t.Errorf("expected 2 CombinedOutput() calls, got %d", fcmd.CombinedOutputCalls)
|
t.Errorf("expected 2 CombinedOutput() calls, got %d", fcmd.CombinedOutputCalls)
|
||||||
}
|
}
|
||||||
if util.NewStringSet(fcmd.CombinedOutputLog[1]...).HasAny("-w", "-w2") {
|
if sets.NewString(fcmd.CombinedOutputLog[1]...).HasAny("-w", "-w2") {
|
||||||
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[1])
|
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[1])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -601,10 +601,10 @@ func TestWaitFlagOld(t *testing.T) {
|
|||||||
if fcmd.CombinedOutputCalls != 2 {
|
if fcmd.CombinedOutputCalls != 2 {
|
||||||
t.Errorf("expected 2 CombinedOutput() calls, got %d", fcmd.CombinedOutputCalls)
|
t.Errorf("expected 2 CombinedOutput() calls, got %d", fcmd.CombinedOutputCalls)
|
||||||
}
|
}
|
||||||
if !util.NewStringSet(fcmd.CombinedOutputLog[1]...).HasAll("iptables", "-w") {
|
if !sets.NewString(fcmd.CombinedOutputLog[1]...).HasAll("iptables", "-w") {
|
||||||
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[1])
|
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[1])
|
||||||
}
|
}
|
||||||
if util.NewStringSet(fcmd.CombinedOutputLog[1]...).HasAny("-w2") {
|
if sets.NewString(fcmd.CombinedOutputLog[1]...).HasAny("-w2") {
|
||||||
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[1])
|
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[1])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -632,10 +632,10 @@ func TestWaitFlagNew(t *testing.T) {
|
|||||||
if fcmd.CombinedOutputCalls != 2 {
|
if fcmd.CombinedOutputCalls != 2 {
|
||||||
t.Errorf("expected 2 CombinedOutput() calls, got %d", fcmd.CombinedOutputCalls)
|
t.Errorf("expected 2 CombinedOutput() calls, got %d", fcmd.CombinedOutputCalls)
|
||||||
}
|
}
|
||||||
if !util.NewStringSet(fcmd.CombinedOutputLog[1]...).HasAll("iptables", "-w2") {
|
if !sets.NewString(fcmd.CombinedOutputLog[1]...).HasAll("iptables", "-w2") {
|
||||||
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[1])
|
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[1])
|
||||||
}
|
}
|
||||||
if util.NewStringSet(fcmd.CombinedOutputLog[1]...).HasAny("-w") {
|
if sets.NewString(fcmd.CombinedOutputLog[1]...).HasAny("-w") {
|
||||||
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[1])
|
t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[1])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -31,38 +31,38 @@ import (
|
|||||||
"golang.org/x/net/html"
|
"golang.org/x/net/html"
|
||||||
"golang.org/x/net/html/atom"
|
"golang.org/x/net/html/atom"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
// atomsToAttrs states which attributes of which tags require URL substitution.
|
// atomsToAttrs states which attributes of which tags require URL substitution.
|
||||||
// Sources: http://www.w3.org/TR/REC-html40/index/attributes.html
|
// Sources: http://www.w3.org/TR/REC-html40/index/attributes.html
|
||||||
// http://www.w3.org/html/wg/drafts/html/master/index.html#attributes-1
|
// http://www.w3.org/html/wg/drafts/html/master/index.html#attributes-1
|
||||||
var atomsToAttrs = map[atom.Atom]util.StringSet{
|
var atomsToAttrs = map[atom.Atom]sets.String{
|
||||||
atom.A: util.NewStringSet("href"),
|
atom.A: sets.NewString("href"),
|
||||||
atom.Applet: util.NewStringSet("codebase"),
|
atom.Applet: sets.NewString("codebase"),
|
||||||
atom.Area: util.NewStringSet("href"),
|
atom.Area: sets.NewString("href"),
|
||||||
atom.Audio: util.NewStringSet("src"),
|
atom.Audio: sets.NewString("src"),
|
||||||
atom.Base: util.NewStringSet("href"),
|
atom.Base: sets.NewString("href"),
|
||||||
atom.Blockquote: util.NewStringSet("cite"),
|
atom.Blockquote: sets.NewString("cite"),
|
||||||
atom.Body: util.NewStringSet("background"),
|
atom.Body: sets.NewString("background"),
|
||||||
atom.Button: util.NewStringSet("formaction"),
|
atom.Button: sets.NewString("formaction"),
|
||||||
atom.Command: util.NewStringSet("icon"),
|
atom.Command: sets.NewString("icon"),
|
||||||
atom.Del: util.NewStringSet("cite"),
|
atom.Del: sets.NewString("cite"),
|
||||||
atom.Embed: util.NewStringSet("src"),
|
atom.Embed: sets.NewString("src"),
|
||||||
atom.Form: util.NewStringSet("action"),
|
atom.Form: sets.NewString("action"),
|
||||||
atom.Frame: util.NewStringSet("longdesc", "src"),
|
atom.Frame: sets.NewString("longdesc", "src"),
|
||||||
atom.Head: util.NewStringSet("profile"),
|
atom.Head: sets.NewString("profile"),
|
||||||
atom.Html: util.NewStringSet("manifest"),
|
atom.Html: sets.NewString("manifest"),
|
||||||
atom.Iframe: util.NewStringSet("longdesc", "src"),
|
atom.Iframe: sets.NewString("longdesc", "src"),
|
||||||
atom.Img: util.NewStringSet("longdesc", "src", "usemap"),
|
atom.Img: sets.NewString("longdesc", "src", "usemap"),
|
||||||
atom.Input: util.NewStringSet("src", "usemap", "formaction"),
|
atom.Input: sets.NewString("src", "usemap", "formaction"),
|
||||||
atom.Ins: util.NewStringSet("cite"),
|
atom.Ins: sets.NewString("cite"),
|
||||||
atom.Link: util.NewStringSet("href"),
|
atom.Link: sets.NewString("href"),
|
||||||
atom.Object: util.NewStringSet("classid", "codebase", "data", "usemap"),
|
atom.Object: sets.NewString("classid", "codebase", "data", "usemap"),
|
||||||
atom.Q: util.NewStringSet("cite"),
|
atom.Q: sets.NewString("cite"),
|
||||||
atom.Script: util.NewStringSet("src"),
|
atom.Script: sets.NewString("src"),
|
||||||
atom.Source: util.NewStringSet("src"),
|
atom.Source: sets.NewString("src"),
|
||||||
atom.Video: util.NewStringSet("poster", "src"),
|
atom.Video: sets.NewString("poster", "src"),
|
||||||
|
|
||||||
// TODO: css URLs hidden in style elements.
|
// TODO: css URLs hidden in style elements.
|
||||||
}
|
}
|
||||||
|
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package util
|
package sets
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"reflect"
|
"reflect"
|
||||||
@@ -26,19 +26,19 @@ import (
|
|||||||
type Empty struct{}
|
type Empty struct{}
|
||||||
|
|
||||||
// StringSet is a set of strings, implemented via map[string]struct{} for minimal memory consumption.
|
// StringSet is a set of strings, implemented via map[string]struct{} for minimal memory consumption.
|
||||||
type StringSet map[string]Empty
|
type String map[string]Empty
|
||||||
|
|
||||||
// NewStringSet creates a StringSet from a list of values.
|
// New creates a StringSet from a list of values.
|
||||||
func NewStringSet(items ...string) StringSet {
|
func NewString(items ...string) String {
|
||||||
ss := StringSet{}
|
ss := String{}
|
||||||
ss.Insert(items...)
|
ss.Insert(items...)
|
||||||
return ss
|
return ss
|
||||||
}
|
}
|
||||||
|
|
||||||
// KeySet creates a StringSet from a keys of a map[string](? extends interface{}). Since you can't describe that map type in the Go type system
|
// KeySet creates a StringSet from a keys of a map[string](? extends interface{}). Since you can't describe that map type in the Go type system
|
||||||
// the reflected value is required.
|
// the reflected value is required.
|
||||||
func KeySet(theMap reflect.Value) StringSet {
|
func KeySet(theMap reflect.Value) String {
|
||||||
ret := StringSet{}
|
ret := String{}
|
||||||
|
|
||||||
for _, keyValue := range theMap.MapKeys() {
|
for _, keyValue := range theMap.MapKeys() {
|
||||||
ret.Insert(keyValue.String())
|
ret.Insert(keyValue.String())
|
||||||
@@ -48,27 +48,27 @@ func KeySet(theMap reflect.Value) StringSet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Insert adds items to the set.
|
// Insert adds items to the set.
|
||||||
func (s StringSet) Insert(items ...string) {
|
func (s String) Insert(items ...string) {
|
||||||
for _, item := range items {
|
for _, item := range items {
|
||||||
s[item] = Empty{}
|
s[item] = Empty{}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete removes all items from the set.
|
// Delete removes all items from the set.
|
||||||
func (s StringSet) Delete(items ...string) {
|
func (s String) Delete(items ...string) {
|
||||||
for _, item := range items {
|
for _, item := range items {
|
||||||
delete(s, item)
|
delete(s, item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Has returns true iff item is contained in the set.
|
// Has returns true iff item is contained in the set.
|
||||||
func (s StringSet) Has(item string) bool {
|
func (s String) Has(item string) bool {
|
||||||
_, contained := s[item]
|
_, contained := s[item]
|
||||||
return contained
|
return contained
|
||||||
}
|
}
|
||||||
|
|
||||||
// HasAll returns true iff all items are contained in the set.
|
// HasAll returns true iff all items are contained in the set.
|
||||||
func (s StringSet) HasAll(items ...string) bool {
|
func (s String) HasAll(items ...string) bool {
|
||||||
for _, item := range items {
|
for _, item := range items {
|
||||||
if !s.Has(item) {
|
if !s.Has(item) {
|
||||||
return false
|
return false
|
||||||
@@ -78,7 +78,7 @@ func (s StringSet) HasAll(items ...string) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// HasAny returns true if any items are contained in the set.
|
// HasAny returns true if any items are contained in the set.
|
||||||
func (s StringSet) HasAny(items ...string) bool {
|
func (s String) HasAny(items ...string) bool {
|
||||||
for _, item := range items {
|
for _, item := range items {
|
||||||
if s.Has(item) {
|
if s.Has(item) {
|
||||||
return true
|
return true
|
||||||
@@ -93,8 +93,8 @@ func (s StringSet) HasAny(items ...string) bool {
|
|||||||
// s2 = {1, 2, 4, 5}
|
// s2 = {1, 2, 4, 5}
|
||||||
// s1.Difference(s2) = {3}
|
// s1.Difference(s2) = {3}
|
||||||
// s2.Difference(s1) = {4, 5}
|
// s2.Difference(s1) = {4, 5}
|
||||||
func (s StringSet) Difference(s2 StringSet) StringSet {
|
func (s String) Difference(s2 String) String {
|
||||||
result := NewStringSet()
|
result := NewString()
|
||||||
for key := range s {
|
for key := range s {
|
||||||
if !s2.Has(key) {
|
if !s2.Has(key) {
|
||||||
result.Insert(key)
|
result.Insert(key)
|
||||||
@@ -110,8 +110,8 @@ func (s StringSet) Difference(s2 StringSet) StringSet {
|
|||||||
// s2 = {3, 4}
|
// s2 = {3, 4}
|
||||||
// s1.Union(s2) = {1, 2, 3, 4}
|
// s1.Union(s2) = {1, 2, 3, 4}
|
||||||
// s2.Union(s1) = {1, 2, 3, 4}
|
// s2.Union(s1) = {1, 2, 3, 4}
|
||||||
func (s1 StringSet) Union(s2 StringSet) StringSet {
|
func (s1 String) Union(s2 String) String {
|
||||||
result := NewStringSet()
|
result := NewString()
|
||||||
for key := range s1 {
|
for key := range s1 {
|
||||||
result.Insert(key)
|
result.Insert(key)
|
||||||
}
|
}
|
||||||
@@ -122,7 +122,7 @@ func (s1 StringSet) Union(s2 StringSet) StringSet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// IsSuperset returns true iff s1 is a superset of s2.
|
// IsSuperset returns true iff s1 is a superset of s2.
|
||||||
func (s1 StringSet) IsSuperset(s2 StringSet) bool {
|
func (s1 String) IsSuperset(s2 String) bool {
|
||||||
for item := range s2 {
|
for item := range s2 {
|
||||||
if !s1.Has(item) {
|
if !s1.Has(item) {
|
||||||
return false
|
return false
|
||||||
@@ -134,7 +134,7 @@ func (s1 StringSet) IsSuperset(s2 StringSet) bool {
|
|||||||
// Equal returns true iff s1 is equal (as a set) to s2.
|
// Equal returns true iff s1 is equal (as a set) to s2.
|
||||||
// Two sets are equal if their membership is identical.
|
// Two sets are equal if their membership is identical.
|
||||||
// (In practice, this means same elements, order doesn't matter)
|
// (In practice, this means same elements, order doesn't matter)
|
||||||
func (s1 StringSet) Equal(s2 StringSet) bool {
|
func (s1 String) Equal(s2 String) bool {
|
||||||
if len(s1) != len(s2) {
|
if len(s1) != len(s2) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -147,7 +147,7 @@ func (s1 StringSet) Equal(s2 StringSet) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// List returns the contents as a sorted string slice.
|
// List returns the contents as a sorted string slice.
|
||||||
func (s StringSet) List() []string {
|
func (s String) List() []string {
|
||||||
res := make([]string, 0, len(s))
|
res := make([]string, 0, len(s))
|
||||||
for key := range s {
|
for key := range s {
|
||||||
res = append(res, key)
|
res = append(res, key)
|
||||||
@@ -157,7 +157,7 @@ func (s StringSet) List() []string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Returns a single element from the set.
|
// Returns a single element from the set.
|
||||||
func (s StringSet) PopAny() (string, bool) {
|
func (s String) PopAny() (string, bool) {
|
||||||
for key := range s {
|
for key := range s {
|
||||||
s.Delete(key)
|
s.Delete(key)
|
||||||
return key, true
|
return key, true
|
||||||
@@ -166,6 +166,6 @@ func (s StringSet) PopAny() (string, bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Len returns the size of the set.
|
// Len returns the size of the set.
|
||||||
func (s StringSet) Len() int {
|
func (s String) Len() int {
|
||||||
return len(s)
|
return len(s)
|
||||||
}
|
}
|
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package util
|
package sets
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"reflect"
|
"reflect"
|
||||||
@@ -22,8 +22,8 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestStringSet(t *testing.T) {
|
func TestStringSet(t *testing.T) {
|
||||||
s := StringSet{}
|
s := String{}
|
||||||
s2 := StringSet{}
|
s2 := String{}
|
||||||
if len(s) != 0 {
|
if len(s) != 0 {
|
||||||
t.Errorf("Expected len=0: %d", len(s))
|
t.Errorf("Expected len=0: %d", len(s))
|
||||||
}
|
}
|
||||||
@@ -60,7 +60,7 @@ func TestStringSet(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestStringSetDeleteMultiples(t *testing.T) {
|
func TestStringSetDeleteMultiples(t *testing.T) {
|
||||||
s := StringSet{}
|
s := String{}
|
||||||
s.Insert("a", "b", "c")
|
s.Insert("a", "b", "c")
|
||||||
if len(s) != 3 {
|
if len(s) != 3 {
|
||||||
t.Errorf("Expected len=3: %d", len(s))
|
t.Errorf("Expected len=3: %d", len(s))
|
||||||
@@ -83,7 +83,7 @@ func TestStringSetDeleteMultiples(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestNewStringSet(t *testing.T) {
|
func TestNewStringSet(t *testing.T) {
|
||||||
s := NewStringSet("a", "b", "c")
|
s := NewString("a", "b", "c")
|
||||||
if len(s) != 3 {
|
if len(s) != 3 {
|
||||||
t.Errorf("Expected len=3: %d", len(s))
|
t.Errorf("Expected len=3: %d", len(s))
|
||||||
}
|
}
|
||||||
@@ -93,15 +93,15 @@ func TestNewStringSet(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestStringSetList(t *testing.T) {
|
func TestStringSetList(t *testing.T) {
|
||||||
s := NewStringSet("z", "y", "x", "a")
|
s := NewString("z", "y", "x", "a")
|
||||||
if !reflect.DeepEqual(s.List(), []string{"a", "x", "y", "z"}) {
|
if !reflect.DeepEqual(s.List(), []string{"a", "x", "y", "z"}) {
|
||||||
t.Errorf("List gave unexpected result: %#v", s.List())
|
t.Errorf("List gave unexpected result: %#v", s.List())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestStringSetDifference(t *testing.T) {
|
func TestStringSetDifference(t *testing.T) {
|
||||||
a := NewStringSet("1", "2", "3")
|
a := NewString("1", "2", "3")
|
||||||
b := NewStringSet("1", "2", "4", "5")
|
b := NewString("1", "2", "4", "5")
|
||||||
c := a.Difference(b)
|
c := a.Difference(b)
|
||||||
d := b.Difference(a)
|
d := b.Difference(a)
|
||||||
if len(c) != 1 {
|
if len(c) != 1 {
|
||||||
@@ -119,7 +119,7 @@ func TestStringSetDifference(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestStringSetHasAny(t *testing.T) {
|
func TestStringSetHasAny(t *testing.T) {
|
||||||
a := NewStringSet("1", "2", "3")
|
a := NewString("1", "2", "3")
|
||||||
|
|
||||||
if !a.HasAny("1", "4") {
|
if !a.HasAny("1", "4") {
|
||||||
t.Errorf("expected true, got false")
|
t.Errorf("expected true, got false")
|
||||||
@@ -132,37 +132,37 @@ func TestStringSetHasAny(t *testing.T) {
|
|||||||
|
|
||||||
func TestStringSetEquals(t *testing.T) {
|
func TestStringSetEquals(t *testing.T) {
|
||||||
// Simple case (order doesn't matter)
|
// Simple case (order doesn't matter)
|
||||||
a := NewStringSet("1", "2")
|
a := NewString("1", "2")
|
||||||
b := NewStringSet("2", "1")
|
b := NewString("2", "1")
|
||||||
if !a.Equal(b) {
|
if !a.Equal(b) {
|
||||||
t.Errorf("Expected to be equal: %v vs %v", a, b)
|
t.Errorf("Expected to be equal: %v vs %v", a, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
// It is a set; duplicates are ignored
|
// It is a set; duplicates are ignored
|
||||||
b = NewStringSet("2", "2", "1")
|
b = NewString("2", "2", "1")
|
||||||
if !a.Equal(b) {
|
if !a.Equal(b) {
|
||||||
t.Errorf("Expected to be equal: %v vs %v", a, b)
|
t.Errorf("Expected to be equal: %v vs %v", a, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Edge cases around empty sets / empty strings
|
// Edge cases around empty sets / empty strings
|
||||||
a = NewStringSet()
|
a = NewString()
|
||||||
b = NewStringSet()
|
b = NewString()
|
||||||
if !a.Equal(b) {
|
if !a.Equal(b) {
|
||||||
t.Errorf("Expected to be equal: %v vs %v", a, b)
|
t.Errorf("Expected to be equal: %v vs %v", a, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
b = NewStringSet("1", "2", "3")
|
b = NewString("1", "2", "3")
|
||||||
if a.Equal(b) {
|
if a.Equal(b) {
|
||||||
t.Errorf("Expected to be not-equal: %v vs %v", a, b)
|
t.Errorf("Expected to be not-equal: %v vs %v", a, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
b = NewStringSet("1", "2", "")
|
b = NewString("1", "2", "")
|
||||||
if a.Equal(b) {
|
if a.Equal(b) {
|
||||||
t.Errorf("Expected to be not-equal: %v vs %v", a, b)
|
t.Errorf("Expected to be not-equal: %v vs %v", a, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for equality after mutation
|
// Check for equality after mutation
|
||||||
a = NewStringSet()
|
a = NewString()
|
||||||
a.Insert("1")
|
a.Insert("1")
|
||||||
if a.Equal(b) {
|
if a.Equal(b) {
|
||||||
t.Errorf("Expected to be not-equal: %v vs %v", a, b)
|
t.Errorf("Expected to be not-equal: %v vs %v", a, b)
|
@@ -30,6 +30,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
"k8s.io/kubernetes/pkg/util/exec"
|
"k8s.io/kubernetes/pkg/util/exec"
|
||||||
"k8s.io/kubernetes/pkg/util/operationmanager"
|
"k8s.io/kubernetes/pkg/util/operationmanager"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -62,7 +63,7 @@ func (diskUtil *GCEDiskUtil) AttachAndMountDisk(b *gcePersistentDiskBuilder, glo
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Errorf("Error filepath.Glob(\"%s\"): %v\r\n", diskSDPattern, err)
|
glog.Errorf("Error filepath.Glob(\"%s\"): %v\r\n", diskSDPattern, err)
|
||||||
}
|
}
|
||||||
sdBeforeSet := util.NewStringSet(sdBefore...)
|
sdBeforeSet := sets.NewString(sdBefore...)
|
||||||
|
|
||||||
devicePath, err := attachDiskAndVerify(b, sdBeforeSet)
|
devicePath, err := attachDiskAndVerify(b, sdBeforeSet)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -120,7 +121,7 @@ func (util *GCEDiskUtil) DetachDisk(c *gcePersistentDiskCleaner) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Attaches the specified persistent disk device to node, verifies that it is attached, and retries if it fails.
|
// Attaches the specified persistent disk device to node, verifies that it is attached, and retries if it fails.
|
||||||
func attachDiskAndVerify(b *gcePersistentDiskBuilder, sdBeforeSet util.StringSet) (string, error) {
|
func attachDiskAndVerify(b *gcePersistentDiskBuilder, sdBeforeSet sets.String) (string, error) {
|
||||||
devicePaths := getDiskByIdPaths(b.gcePersistentDisk)
|
devicePaths := getDiskByIdPaths(b.gcePersistentDisk)
|
||||||
var gce cloudprovider.Interface
|
var gce cloudprovider.Interface
|
||||||
for numRetries := 0; numRetries < maxRetries; numRetries++ {
|
for numRetries := 0; numRetries < maxRetries; numRetries++ {
|
||||||
@@ -287,7 +288,7 @@ func pathExists(path string) (bool, error) {
|
|||||||
|
|
||||||
// Calls "udevadm trigger --action=change" for newly created "/dev/sd*" drives (exist only in after set).
|
// Calls "udevadm trigger --action=change" for newly created "/dev/sd*" drives (exist only in after set).
|
||||||
// This is workaround for Issue #7972. Once the underlying issue has been resolved, this may be removed.
|
// This is workaround for Issue #7972. Once the underlying issue has been resolved, this may be removed.
|
||||||
func udevadmChangeToNewDrives(sdBeforeSet util.StringSet) error {
|
func udevadmChangeToNewDrives(sdBeforeSet sets.String) error {
|
||||||
sdAfter, err := filepath.Glob(diskSDPattern)
|
sdAfter, err := filepath.Glob(diskSDPattern)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error filepath.Glob(\"%s\"): %v\r\n", diskSDPattern, err)
|
return fmt.Errorf("Error filepath.Glob(\"%s\"): %v\r\n", diskSDPattern, err)
|
||||||
|
@@ -30,7 +30,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -46,7 +46,7 @@ type lifecycle struct {
|
|||||||
*admission.Handler
|
*admission.Handler
|
||||||
client client.Interface
|
client client.Interface
|
||||||
store cache.Store
|
store cache.Store
|
||||||
immortalNamespaces util.StringSet
|
immortalNamespaces sets.String
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *lifecycle) Admit(a admission.Attributes) (err error) {
|
func (l *lifecycle) Admit(a admission.Attributes) (err error) {
|
||||||
@@ -120,6 +120,6 @@ func NewLifecycle(c client.Interface) admission.Interface {
|
|||||||
Handler: admission.NewHandler(admission.Create, admission.Update, admission.Delete),
|
Handler: admission.NewHandler(admission.Create, admission.Update, admission.Delete),
|
||||||
client: c,
|
client: c,
|
||||||
store: store,
|
store: store,
|
||||||
immortalNamespaces: util.NewStringSet(api.NamespaceDefault),
|
immortalNamespaces: sets.NewString(api.NamespaceDefault),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -31,7 +31,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/kubelet"
|
"k8s.io/kubernetes/pkg/kubelet"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -249,7 +249,7 @@ func (s *serviceAccount) getReferencedServiceAccountToken(serviceAccount *api.Se
|
|||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
references := util.NewStringSet()
|
references := sets.NewString()
|
||||||
for _, secret := range serviceAccount.Secrets {
|
for _, secret := range serviceAccount.Secrets {
|
||||||
references.Insert(secret.Name)
|
references.Insert(secret.Name)
|
||||||
}
|
}
|
||||||
@@ -293,7 +293,7 @@ func (s *serviceAccount) getServiceAccountTokens(serviceAccount *api.ServiceAcco
|
|||||||
|
|
||||||
func (s *serviceAccount) limitSecretReferences(serviceAccount *api.ServiceAccount, pod *api.Pod) error {
|
func (s *serviceAccount) limitSecretReferences(serviceAccount *api.ServiceAccount, pod *api.Pod) error {
|
||||||
// Ensure all secrets the pod references are allowed by the service account
|
// Ensure all secrets the pod references are allowed by the service account
|
||||||
mountableSecrets := util.NewStringSet()
|
mountableSecrets := sets.NewString()
|
||||||
for _, s := range serviceAccount.Secrets {
|
for _, s := range serviceAccount.Secrets {
|
||||||
mountableSecrets.Insert(s.Name)
|
mountableSecrets.Insert(s.Name)
|
||||||
}
|
}
|
||||||
@@ -309,7 +309,7 @@ func (s *serviceAccount) limitSecretReferences(serviceAccount *api.ServiceAccoun
|
|||||||
}
|
}
|
||||||
|
|
||||||
// limit pull secret references as well
|
// limit pull secret references as well
|
||||||
pullSecrets := util.NewStringSet()
|
pullSecrets := sets.NewString()
|
||||||
for _, s := range serviceAccount.ImagePullSecrets {
|
for _, s := range serviceAccount.ImagePullSecrets {
|
||||||
pullSecrets.Insert(s.Name)
|
pullSecrets.Insert(s.Name)
|
||||||
}
|
}
|
||||||
@@ -340,7 +340,7 @@ func (s *serviceAccount) mountServiceAccountToken(serviceAccount *api.ServiceAcc
|
|||||||
// Find the volume and volume name for the ServiceAccountTokenSecret if it already exists
|
// Find the volume and volume name for the ServiceAccountTokenSecret if it already exists
|
||||||
tokenVolumeName := ""
|
tokenVolumeName := ""
|
||||||
hasTokenVolume := false
|
hasTokenVolume := false
|
||||||
allVolumeNames := util.NewStringSet()
|
allVolumeNames := sets.NewString()
|
||||||
for _, volume := range pod.Spec.Volumes {
|
for _, volume := range pod.Spec.Volumes {
|
||||||
allVolumeNames.Insert(volume.Name)
|
allVolumeNames.Insert(volume.Name)
|
||||||
if volume.Secret != nil && volume.Secret.SecretName == serviceAccountToken {
|
if volume.Secret != nil && volume.Secret.SecretName == serviceAccountToken {
|
||||||
|
@@ -18,7 +18,7 @@ limitations under the License.
|
|||||||
package defaults
|
package defaults
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/plugin/pkg/scheduler"
|
"k8s.io/kubernetes/plugin/pkg/scheduler"
|
||||||
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm"
|
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm"
|
||||||
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm/predicates"
|
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm/predicates"
|
||||||
@@ -48,8 +48,8 @@ func init() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func defaultPredicates() util.StringSet {
|
func defaultPredicates() sets.String {
|
||||||
return util.NewStringSet(
|
return sets.NewString(
|
||||||
// Fit is defined based on the absence of port conflicts.
|
// Fit is defined based on the absence of port conflicts.
|
||||||
factory.RegisterFitPredicate("PodFitsPorts", predicates.PodFitsPorts),
|
factory.RegisterFitPredicate("PodFitsPorts", predicates.PodFitsPorts),
|
||||||
// Fit is determined by resource availability.
|
// Fit is determined by resource availability.
|
||||||
@@ -73,8 +73,8 @@ func defaultPredicates() util.StringSet {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func defaultPriorities() util.StringSet {
|
func defaultPriorities() sets.String {
|
||||||
return util.NewStringSet(
|
return sets.NewString(
|
||||||
// Prioritize nodes by least requested utilization.
|
// Prioritize nodes by least requested utilization.
|
||||||
factory.RegisterPriorityFunction("LeastRequestedPriority", priorities.LeastRequestedPriority, 1),
|
factory.RegisterPriorityFunction("LeastRequestedPriority", priorities.LeastRequestedPriority, 1),
|
||||||
// Prioritizes nodes to help achieve balanced resource usage
|
// Prioritizes nodes to help achieve balanced resource usage
|
||||||
|
@@ -30,6 +30,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/controller/framework"
|
"k8s.io/kubernetes/pkg/controller/framework"
|
||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/plugin/pkg/scheduler"
|
"k8s.io/kubernetes/plugin/pkg/scheduler"
|
||||||
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm"
|
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm"
|
||||||
schedulerapi "k8s.io/kubernetes/plugin/pkg/scheduler/api"
|
schedulerapi "k8s.io/kubernetes/plugin/pkg/scheduler/api"
|
||||||
@@ -137,13 +138,13 @@ func (f *ConfigFactory) CreateFromConfig(policy schedulerapi.Policy) (*scheduler
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
predicateKeys := util.NewStringSet()
|
predicateKeys := sets.NewString()
|
||||||
for _, predicate := range policy.Predicates {
|
for _, predicate := range policy.Predicates {
|
||||||
glog.V(2).Infof("Registering predicate: %s", predicate.Name)
|
glog.V(2).Infof("Registering predicate: %s", predicate.Name)
|
||||||
predicateKeys.Insert(RegisterCustomFitPredicate(predicate))
|
predicateKeys.Insert(RegisterCustomFitPredicate(predicate))
|
||||||
}
|
}
|
||||||
|
|
||||||
priorityKeys := util.NewStringSet()
|
priorityKeys := sets.NewString()
|
||||||
for _, priority := range policy.Priorities {
|
for _, priority := range policy.Priorities {
|
||||||
glog.V(2).Infof("Registering priority: %s", priority.Name)
|
glog.V(2).Infof("Registering priority: %s", priority.Name)
|
||||||
priorityKeys.Insert(RegisterCustomPriorityFunction(priority))
|
priorityKeys.Insert(RegisterCustomPriorityFunction(priority))
|
||||||
@@ -153,7 +154,7 @@ func (f *ConfigFactory) CreateFromConfig(policy schedulerapi.Policy) (*scheduler
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Creates a scheduler from a set of registered fit predicate keys and priority keys.
|
// Creates a scheduler from a set of registered fit predicate keys and priority keys.
|
||||||
func (f *ConfigFactory) CreateFromKeys(predicateKeys, priorityKeys util.StringSet) (*scheduler.Config, error) {
|
func (f *ConfigFactory) CreateFromKeys(predicateKeys, priorityKeys sets.String) (*scheduler.Config, error) {
|
||||||
glog.V(2).Infof("creating scheduler with fit predicates '%v' and priority functions '%v", predicateKeys, priorityKeys)
|
glog.V(2).Infof("creating scheduler with fit predicates '%v' and priority functions '%v", predicateKeys, priorityKeys)
|
||||||
pluginArgs := PluginFactoryArgs{
|
pluginArgs := PluginFactoryArgs{
|
||||||
PodLister: f.PodLister,
|
PodLister: f.PodLister,
|
||||||
|
@@ -22,7 +22,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm"
|
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm"
|
||||||
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm/predicates"
|
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm/predicates"
|
||||||
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm/priorities"
|
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm/priorities"
|
||||||
@@ -66,8 +66,8 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type AlgorithmProviderConfig struct {
|
type AlgorithmProviderConfig struct {
|
||||||
FitPredicateKeys util.StringSet
|
FitPredicateKeys sets.String
|
||||||
PriorityFunctionKeys util.StringSet
|
PriorityFunctionKeys sets.String
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterFitPredicate registers a fit predicate with the algorithm
|
// RegisterFitPredicate registers a fit predicate with the algorithm
|
||||||
@@ -209,7 +209,7 @@ func IsPriorityFunctionRegistered(name string) bool {
|
|||||||
|
|
||||||
// Registers a new algorithm provider with the algorithm registry. This should
|
// Registers a new algorithm provider with the algorithm registry. This should
|
||||||
// be called from the init function in a provider plugin.
|
// be called from the init function in a provider plugin.
|
||||||
func RegisterAlgorithmProvider(name string, predicateKeys, priorityKeys util.StringSet) string {
|
func RegisterAlgorithmProvider(name string, predicateKeys, priorityKeys sets.String) string {
|
||||||
schedulerFactoryMutex.Lock()
|
schedulerFactoryMutex.Lock()
|
||||||
defer schedulerFactoryMutex.Unlock()
|
defer schedulerFactoryMutex.Unlock()
|
||||||
validateAlgorithmNameOrDie(name)
|
validateAlgorithmNameOrDie(name)
|
||||||
@@ -234,7 +234,7 @@ func GetAlgorithmProvider(name string) (*AlgorithmProviderConfig, error) {
|
|||||||
return &provider, nil
|
return &provider, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getFitPredicateFunctions(names util.StringSet, args PluginFactoryArgs) (map[string]algorithm.FitPredicate, error) {
|
func getFitPredicateFunctions(names sets.String, args PluginFactoryArgs) (map[string]algorithm.FitPredicate, error) {
|
||||||
schedulerFactoryMutex.Lock()
|
schedulerFactoryMutex.Lock()
|
||||||
defer schedulerFactoryMutex.Unlock()
|
defer schedulerFactoryMutex.Unlock()
|
||||||
|
|
||||||
@@ -249,7 +249,7 @@ func getFitPredicateFunctions(names util.StringSet, args PluginFactoryArgs) (map
|
|||||||
return predicates, nil
|
return predicates, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getPriorityFunctionConfigs(names util.StringSet, args PluginFactoryArgs) ([]algorithm.PriorityConfig, error) {
|
func getPriorityFunctionConfigs(names sets.String, args PluginFactoryArgs) ([]algorithm.PriorityConfig, error) {
|
||||||
schedulerFactoryMutex.Lock()
|
schedulerFactoryMutex.Lock()
|
||||||
defer schedulerFactoryMutex.Unlock()
|
defer schedulerFactoryMutex.Unlock()
|
||||||
|
|
||||||
|
@@ -25,12 +25,12 @@ import (
|
|||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm"
|
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm"
|
||||||
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm/predicates"
|
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm/predicates"
|
||||||
)
|
)
|
||||||
|
|
||||||
type FailedPredicateMap map[string]util.StringSet
|
type FailedPredicateMap map[string]sets.String
|
||||||
|
|
||||||
type FitError struct {
|
type FitError struct {
|
||||||
Pod *api.Pod
|
Pod *api.Pod
|
||||||
@@ -124,7 +124,7 @@ func findNodesThatFit(pod *api.Pod, podLister algorithm.PodLister, predicateFunc
|
|||||||
if !fit {
|
if !fit {
|
||||||
fits = false
|
fits = false
|
||||||
if _, found := failedPredicateMap[node.Name]; !found {
|
if _, found := failedPredicateMap[node.Name]; !found {
|
||||||
failedPredicateMap[node.Name] = util.StringSet{}
|
failedPredicateMap[node.Name] = sets.String{}
|
||||||
}
|
}
|
||||||
if predicates.FailedResourceType != "" {
|
if predicates.FailedResourceType != "" {
|
||||||
failedPredicateMap[node.Name].Insert(predicates.FailedResourceType)
|
failedPredicateMap[node.Name].Insert(predicates.FailedResourceType)
|
||||||
|
@@ -24,7 +24,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm"
|
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -101,7 +101,7 @@ func TestSelectHost(t *testing.T) {
|
|||||||
scheduler := genericScheduler{random: rand.New(rand.NewSource(0))}
|
scheduler := genericScheduler{random: rand.New(rand.NewSource(0))}
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
list algorithm.HostPriorityList
|
list algorithm.HostPriorityList
|
||||||
possibleHosts util.StringSet
|
possibleHosts sets.String
|
||||||
expectsErr bool
|
expectsErr bool
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
@@ -109,7 +109,7 @@ func TestSelectHost(t *testing.T) {
|
|||||||
{Host: "machine1.1", Score: 1},
|
{Host: "machine1.1", Score: 1},
|
||||||
{Host: "machine2.1", Score: 2},
|
{Host: "machine2.1", Score: 2},
|
||||||
},
|
},
|
||||||
possibleHosts: util.NewStringSet("machine2.1"),
|
possibleHosts: sets.NewString("machine2.1"),
|
||||||
expectsErr: false,
|
expectsErr: false,
|
||||||
},
|
},
|
||||||
// equal scores
|
// equal scores
|
||||||
@@ -120,7 +120,7 @@ func TestSelectHost(t *testing.T) {
|
|||||||
{Host: "machine1.3", Score: 2},
|
{Host: "machine1.3", Score: 2},
|
||||||
{Host: "machine2.1", Score: 2},
|
{Host: "machine2.1", Score: 2},
|
||||||
},
|
},
|
||||||
possibleHosts: util.NewStringSet("machine1.2", "machine1.3", "machine2.1"),
|
possibleHosts: sets.NewString("machine1.2", "machine1.3", "machine2.1"),
|
||||||
expectsErr: false,
|
expectsErr: false,
|
||||||
},
|
},
|
||||||
// out of order scores
|
// out of order scores
|
||||||
@@ -132,13 +132,13 @@ func TestSelectHost(t *testing.T) {
|
|||||||
{Host: "machine3.1", Score: 1},
|
{Host: "machine3.1", Score: 1},
|
||||||
{Host: "machine1.3", Score: 3},
|
{Host: "machine1.3", Score: 3},
|
||||||
},
|
},
|
||||||
possibleHosts: util.NewStringSet("machine1.1", "machine1.2", "machine1.3"),
|
possibleHosts: sets.NewString("machine1.1", "machine1.2", "machine1.3"),
|
||||||
expectsErr: false,
|
expectsErr: false,
|
||||||
},
|
},
|
||||||
// empty priorityList
|
// empty priorityList
|
||||||
{
|
{
|
||||||
list: []algorithm.HostPriority{},
|
list: []algorithm.HostPriority{},
|
||||||
possibleHosts: util.NewStringSet(),
|
possibleHosts: sets.NewString(),
|
||||||
expectsErr: true,
|
expectsErr: true,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@@ -30,6 +30,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/master/ports"
|
"k8s.io/kubernetes/pkg/master/ports"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/util/wait"
|
"k8s.io/kubernetes/pkg/util/wait"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
|
|
||||||
@@ -140,7 +141,7 @@ func getContainerRestarts(c *client.Client, ns string, labelSelector labels.Sele
|
|||||||
pods, err := c.Pods(ns).List(labelSelector, fields.Everything())
|
pods, err := c.Pods(ns).List(labelSelector, fields.Everything())
|
||||||
expectNoError(err)
|
expectNoError(err)
|
||||||
failedContainers := 0
|
failedContainers := 0
|
||||||
containerRestartNodes := util.NewStringSet()
|
containerRestartNodes := sets.NewString()
|
||||||
for _, p := range pods.Items {
|
for _, p := range pods.Items {
|
||||||
for _, v := range FailedContainers(&p) {
|
for _, v := range FailedContainers(&p) {
|
||||||
failedContainers = failedContainers + v.restarts
|
failedContainers = failedContainers + v.restarts
|
||||||
@@ -224,8 +225,8 @@ var _ = Describe("DaemonRestart", func() {
|
|||||||
|
|
||||||
// Only check the keys, the pods can be different if the kubelet updated it.
|
// Only check the keys, the pods can be different if the kubelet updated it.
|
||||||
// TODO: Can it really?
|
// TODO: Can it really?
|
||||||
existingKeys := util.NewStringSet()
|
existingKeys := sets.NewString()
|
||||||
newKeys := util.NewStringSet()
|
newKeys := sets.NewString()
|
||||||
for _, k := range existingPods.ListKeys() {
|
for _, k := range existingPods.ListKeys() {
|
||||||
existingKeys.Insert(k)
|
existingKeys.Insert(k)
|
||||||
}
|
}
|
||||||
|
@@ -34,6 +34,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
|
|
||||||
. "github.com/onsi/ginkgo"
|
. "github.com/onsi/ginkgo"
|
||||||
@@ -148,7 +149,7 @@ var _ = Describe("Density", func() {
|
|||||||
expectNoError(writePerfData(c, fmt.Sprintf(testContext.OutputDir+"/%s", uuid), "after"))
|
expectNoError(writePerfData(c, fmt.Sprintf(testContext.OutputDir+"/%s", uuid), "after"))
|
||||||
|
|
||||||
// Verify latency metrics
|
// Verify latency metrics
|
||||||
highLatencyRequests, err := HighLatencyRequests(c, 3*time.Second, util.NewStringSet("events"))
|
highLatencyRequests, err := HighLatencyRequests(c, 3*time.Second, sets.NewString("events"))
|
||||||
expectNoError(err)
|
expectNoError(err)
|
||||||
Expect(highLatencyRequests).NotTo(BeNumerically(">", 0), "There should be no high-latency requests")
|
Expect(highLatencyRequests).NotTo(BeNumerically(">", 0), "There should be no high-latency requests")
|
||||||
})
|
})
|
||||||
|
@@ -25,6 +25,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/util/wait"
|
"k8s.io/kubernetes/pkg/util/wait"
|
||||||
|
|
||||||
. "github.com/onsi/ginkgo"
|
. "github.com/onsi/ginkgo"
|
||||||
@@ -41,8 +42,8 @@ const (
|
|||||||
|
|
||||||
// getPodMatches returns a set of pod names on the given node that matches the
|
// getPodMatches returns a set of pod names on the given node that matches the
|
||||||
// podNamePrefix and namespace.
|
// podNamePrefix and namespace.
|
||||||
func getPodMatches(c *client.Client, nodeName string, podNamePrefix string, namespace string) util.StringSet {
|
func getPodMatches(c *client.Client, nodeName string, podNamePrefix string, namespace string) sets.String {
|
||||||
matches := util.NewStringSet()
|
matches := sets.NewString()
|
||||||
Logf("Checking pods on node %v via /runningpods endpoint", nodeName)
|
Logf("Checking pods on node %v via /runningpods endpoint", nodeName)
|
||||||
runningPods, err := GetKubeletPods(c, nodeName)
|
runningPods, err := GetKubeletPods(c, nodeName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -65,9 +66,9 @@ func getPodMatches(c *client.Client, nodeName string, podNamePrefix string, name
|
|||||||
// information; they are reconstructed by examining the container runtime. In
|
// information; they are reconstructed by examining the container runtime. In
|
||||||
// the scope of this test, we do not expect pod naming conflicts so
|
// the scope of this test, we do not expect pod naming conflicts so
|
||||||
// podNamePrefix should be sufficient to identify the pods.
|
// podNamePrefix should be sufficient to identify the pods.
|
||||||
func waitTillNPodsRunningOnNodes(c *client.Client, nodeNames util.StringSet, podNamePrefix string, namespace string, targetNumPods int, timeout time.Duration) error {
|
func waitTillNPodsRunningOnNodes(c *client.Client, nodeNames sets.String, podNamePrefix string, namespace string, targetNumPods int, timeout time.Duration) error {
|
||||||
return wait.Poll(pollInterval, timeout, func() (bool, error) {
|
return wait.Poll(pollInterval, timeout, func() (bool, error) {
|
||||||
matchCh := make(chan util.StringSet, len(nodeNames))
|
matchCh := make(chan sets.String, len(nodeNames))
|
||||||
for _, item := range nodeNames.List() {
|
for _, item := range nodeNames.List() {
|
||||||
// Launch a goroutine per node to check the pods running on the nodes.
|
// Launch a goroutine per node to check the pods running on the nodes.
|
||||||
nodeName := item
|
nodeName := item
|
||||||
@@ -76,7 +77,7 @@ func waitTillNPodsRunningOnNodes(c *client.Client, nodeNames util.StringSet, pod
|
|||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
seen := util.NewStringSet()
|
seen := sets.NewString()
|
||||||
for i := 0; i < len(nodeNames.List()); i++ {
|
for i := 0; i < len(nodeNames.List()); i++ {
|
||||||
seen = seen.Union(<-matchCh)
|
seen = seen.Union(<-matchCh)
|
||||||
}
|
}
|
||||||
@@ -90,7 +91,7 @@ func waitTillNPodsRunningOnNodes(c *client.Client, nodeNames util.StringSet, pod
|
|||||||
|
|
||||||
var _ = Describe("kubelet", func() {
|
var _ = Describe("kubelet", func() {
|
||||||
var numNodes int
|
var numNodes int
|
||||||
var nodeNames util.StringSet
|
var nodeNames sets.String
|
||||||
framework := NewFramework("kubelet")
|
framework := NewFramework("kubelet")
|
||||||
var resourceMonitor *resourceMonitor
|
var resourceMonitor *resourceMonitor
|
||||||
|
|
||||||
@@ -98,7 +99,7 @@ var _ = Describe("kubelet", func() {
|
|||||||
nodes, err := framework.Client.Nodes().List(labels.Everything(), fields.Everything())
|
nodes, err := framework.Client.Nodes().List(labels.Everything(), fields.Everything())
|
||||||
expectNoError(err)
|
expectNoError(err)
|
||||||
numNodes = len(nodes.Items)
|
numNodes = len(nodes.Items)
|
||||||
nodeNames = util.NewStringSet()
|
nodeNames = sets.NewString()
|
||||||
for _, node := range nodes.Items {
|
for _, node := range nodes.Items {
|
||||||
nodeNames.Insert(node.Name)
|
nodeNames.Insert(node.Name)
|
||||||
}
|
}
|
||||||
|
@@ -37,6 +37,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/master/ports"
|
"k8s.io/kubernetes/pkg/master/ports"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
|
|
||||||
"github.com/prometheus/client_golang/extraction"
|
"github.com/prometheus/client_golang/extraction"
|
||||||
"github.com/prometheus/client_golang/model"
|
"github.com/prometheus/client_golang/model"
|
||||||
@@ -66,7 +67,7 @@ func (a KubeletMetricByLatency) Less(i, j int) bool { return a[i].Latency > a[j]
|
|||||||
type kubeletMetricIngester []KubeletMetric
|
type kubeletMetricIngester []KubeletMetric
|
||||||
|
|
||||||
func (k *kubeletMetricIngester) Ingest(samples model.Samples) error {
|
func (k *kubeletMetricIngester) Ingest(samples model.Samples) error {
|
||||||
acceptedMethods := util.NewStringSet(
|
acceptedMethods := sets.NewString(
|
||||||
metrics.PodWorkerLatencyKey,
|
metrics.PodWorkerLatencyKey,
|
||||||
metrics.PodWorkerStartLatencyKey,
|
metrics.PodWorkerStartLatencyKey,
|
||||||
metrics.SyncPodsLatencyKey,
|
metrics.SyncPodsLatencyKey,
|
||||||
|
@@ -26,7 +26,7 @@ import (
|
|||||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
client "k8s.io/kubernetes/pkg/client/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
|
|
||||||
. "github.com/onsi/ginkgo"
|
. "github.com/onsi/ginkgo"
|
||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
@@ -86,7 +86,7 @@ var _ = Describe("Load capacity", func() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Verify latency metrics
|
// Verify latency metrics
|
||||||
highLatencyRequests, err := HighLatencyRequests(c, 3*time.Second, util.NewStringSet("events"))
|
highLatencyRequests, err := HighLatencyRequests(c, 3*time.Second, sets.NewString("events"))
|
||||||
expectNoError(err, "Too many instances metrics above the threshold")
|
expectNoError(err, "Too many instances metrics above the threshold")
|
||||||
Expect(highLatencyRequests).NotTo(BeNumerically(">", 0))
|
Expect(highLatencyRequests).NotTo(BeNumerically(">", 0))
|
||||||
})
|
})
|
||||||
|
@@ -29,6 +29,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
|
|
||||||
. "github.com/onsi/ginkgo"
|
. "github.com/onsi/ginkgo"
|
||||||
@@ -70,7 +71,7 @@ var _ = Describe("Service endpoints latency", func() {
|
|||||||
f.Client.RESTClient.Throttle = util.NewFakeRateLimiter()
|
f.Client.RESTClient.Throttle = util.NewFakeRateLimiter()
|
||||||
defer func() { f.Client.RESTClient.Throttle = oldThrottle }()
|
defer func() { f.Client.RESTClient.Throttle = oldThrottle }()
|
||||||
|
|
||||||
failing := util.NewStringSet()
|
failing := sets.NewString()
|
||||||
d, err := runServiceLatencies(f, parallelTrials, totalTrials)
|
d, err := runServiceLatencies(f, parallelTrials, totalTrials)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
failing.Insert(fmt.Sprintf("Not all RC/pod/service trials succeeded: %v", err))
|
failing.Insert(fmt.Sprintf("Not all RC/pod/service trials succeeded: %v", err))
|
||||||
|
@@ -45,6 +45,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/util/wait"
|
"k8s.io/kubernetes/pkg/util/wait"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
|
|
||||||
@@ -1096,7 +1097,7 @@ type podInfo struct {
|
|||||||
type PodDiff map[string]*podInfo
|
type PodDiff map[string]*podInfo
|
||||||
|
|
||||||
// Print formats and prints the give PodDiff.
|
// Print formats and prints the give PodDiff.
|
||||||
func (p PodDiff) Print(ignorePhases util.StringSet) {
|
func (p PodDiff) Print(ignorePhases sets.String) {
|
||||||
for name, info := range p {
|
for name, info := range p {
|
||||||
if ignorePhases.Has(info.phase) {
|
if ignorePhases.Has(info.phase) {
|
||||||
continue
|
continue
|
||||||
@@ -1258,7 +1259,7 @@ func RunRC(config RCConfig) error {
|
|||||||
unknown := 0
|
unknown := 0
|
||||||
inactive := 0
|
inactive := 0
|
||||||
failedContainers := 0
|
failedContainers := 0
|
||||||
containerRestartNodes := util.NewStringSet()
|
containerRestartNodes := sets.NewString()
|
||||||
|
|
||||||
pods := podStore.List()
|
pods := podStore.List()
|
||||||
created := []*api.Pod{}
|
created := []*api.Pod{}
|
||||||
@@ -1312,7 +1313,7 @@ func RunRC(config RCConfig) error {
|
|||||||
// - diagnose by comparing the previous "2 Pod states" lines for inactive pods
|
// - diagnose by comparing the previous "2 Pod states" lines for inactive pods
|
||||||
errorStr := fmt.Sprintf("Number of reported pods changed: %d vs %d", len(pods), len(oldPods))
|
errorStr := fmt.Sprintf("Number of reported pods changed: %d vs %d", len(pods), len(oldPods))
|
||||||
Logf("%v, pods that changed since the last iteration:", errorStr)
|
Logf("%v, pods that changed since the last iteration:", errorStr)
|
||||||
Diff(oldPods, pods).Print(util.NewStringSet())
|
Diff(oldPods, pods).Print(sets.NewString())
|
||||||
return fmt.Errorf(errorStr)
|
return fmt.Errorf(errorStr)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1342,7 +1343,7 @@ func RunRC(config RCConfig) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func dumpPodDebugInfo(c *client.Client, pods []*api.Pod) {
|
func dumpPodDebugInfo(c *client.Client, pods []*api.Pod) {
|
||||||
badNodes := util.NewStringSet()
|
badNodes := sets.NewString()
|
||||||
for _, p := range pods {
|
for _, p := range pods {
|
||||||
if p.Status.Phase != api.PodRunning {
|
if p.Status.Phase != api.PodRunning {
|
||||||
if p.Spec.NodeName != "" {
|
if p.Spec.NodeName != "" {
|
||||||
@@ -1851,8 +1852,8 @@ func ReadLatencyMetrics(c *client.Client) ([]LatencyMetric, error) {
|
|||||||
|
|
||||||
// Prints summary metrics for request types with latency above threshold
|
// Prints summary metrics for request types with latency above threshold
|
||||||
// and returns number of such request types.
|
// and returns number of such request types.
|
||||||
func HighLatencyRequests(c *client.Client, threshold time.Duration, ignoredResources util.StringSet) (int, error) {
|
func HighLatencyRequests(c *client.Client, threshold time.Duration, ignoredResources sets.String) (int, error) {
|
||||||
ignoredVerbs := util.NewStringSet("WATCHLIST", "PROXY")
|
ignoredVerbs := sets.NewString("WATCHLIST", "PROXY")
|
||||||
|
|
||||||
metrics, err := ReadLatencyMetrics(c)
|
metrics, err := ReadLatencyMetrics(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@@ -45,7 +45,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
client "k8s.io/kubernetes/pkg/client/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -235,7 +235,7 @@ func contactOthers(state *State) {
|
|||||||
time.Sleep(time.Duration(1+rand.Intn(10)) * time.Second)
|
time.Sleep(time.Duration(1+rand.Intn(10)) * time.Second)
|
||||||
}
|
}
|
||||||
|
|
||||||
eps := util.StringSet{}
|
eps := sets.String{}
|
||||||
for _, ss := range endpoints.Subsets {
|
for _, ss := range endpoints.Subsets {
|
||||||
for _, a := range ss.Addresses {
|
for _, a := range ss.Addresses {
|
||||||
for _, p := range ss.Ports {
|
for _, p := range ss.Ports {
|
||||||
|
@@ -45,7 +45,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/master"
|
"k8s.io/kubernetes/pkg/master"
|
||||||
"k8s.io/kubernetes/pkg/tools/etcdtest"
|
"k8s.io/kubernetes/pkg/tools/etcdtest"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/util/wait"
|
"k8s.io/kubernetes/pkg/util/wait"
|
||||||
serviceaccountadmission "k8s.io/kubernetes/plugin/pkg/admission/serviceaccount"
|
serviceaccountadmission "k8s.io/kubernetes/plugin/pkg/admission/serviceaccount"
|
||||||
"k8s.io/kubernetes/plugin/pkg/auth/authenticator/request/union"
|
"k8s.io/kubernetes/plugin/pkg/auth/authenticator/request/union"
|
||||||
@@ -170,7 +170,7 @@ func TestServiceAccountTokenAutoCreate(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Wait for tokens to be deleted
|
// Wait for tokens to be deleted
|
||||||
tokensToCleanup := util.NewStringSet(token1Name, token2Name, token3Name)
|
tokensToCleanup := sets.NewString(token1Name, token2Name, token3Name)
|
||||||
err = wait.Poll(time.Second, 10*time.Second, func() (bool, error) {
|
err = wait.Poll(time.Second, 10*time.Second, func() (bool, error) {
|
||||||
// Get all secrets in the namespace
|
// Get all secrets in the namespace
|
||||||
secrets, err := c.Secrets(ns).List(labels.Everything(), fields.Everything())
|
secrets, err := c.Secrets(ns).List(labels.Everything(), fields.Everything())
|
||||||
|
Reference in New Issue
Block a user