Merge pull request #51707 from liggitt/unit-race

Automatic merge from submit-queue (batch tested with PRs 51707, 51662, 51723, 50163, 51633)

Make feature gate threadsafe

Fixes #51548 caused by #51436

Kubernetes-commit: cd004bb14c0a020d5fa4be752541f6935195eb70
This commit is contained in:
Kubernetes Publisher 2017-08-31 18:43:31 -07:00
commit b3f5b3cc1d
2 changed files with 202 additions and 183 deletions

366
Godeps/Godeps.json generated
View File

@ -840,735 +840,735 @@
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/equality",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/errors",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/meta",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/resource",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/testing",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/testing/fuzzer",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/testing/roundtrip",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/validation",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/validation/path",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apimachinery",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apimachinery/announced",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apimachinery/registered",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/fuzzer",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/validation",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1alpha1",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/conversion",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/conversion/unstructured",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/fields",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/labels",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/schema",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/selection",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/types",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/cache",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/clock",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/diff",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/errors",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/framer",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/httpstream",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/intstr",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/json",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/net",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/proxy",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/rand",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/runtime",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/sets",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/uuid",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/validation",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/validation/field",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/wait",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/yaml",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/version",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/watch",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/netutil",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect",
"Rev": "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b"
"Rev": "d0d1876112ca4da17b1ce88c8eeedb2d0bde6294"
},
{
"ImportPath": "k8s.io/client-go/discovery",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/discovery/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/admissionregistration",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/admissionregistration/v1alpha1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/apps",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/apps/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/apps/v1beta2",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/autoscaling",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/autoscaling/v1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/autoscaling/v2alpha1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/batch",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/batch/v1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/batch/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/batch/v2alpha1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/certificates",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/certificates/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/core",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/core/v1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/extensions",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/extensions/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/internalinterfaces",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/networking",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/networking/v1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/policy",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/policy/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/rbac",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/rbac/v1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/rbac/v1alpha1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/rbac/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/scheduling",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/scheduling/v1alpha1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/settings",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/settings/v1alpha1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/storage",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/storage/v1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/informers/storage/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/scheme",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta2",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v2alpha1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v2alpha1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1beta1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v2alpha1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/certificates/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/core/v1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/core/v1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/extensions/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/networking/v1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/networking/v1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/policy/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1alpha1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/settings/v1alpha1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/settings/v1alpha1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/listers/admissionregistration/v1alpha1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/listers/apps/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/listers/apps/v1beta2",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/listers/autoscaling/v1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/listers/autoscaling/v2alpha1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/listers/batch/v1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/listers/batch/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/listers/batch/v2alpha1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/listers/certificates/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/listers/core/v1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/listers/extensions/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/listers/networking/v1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/listers/policy/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/listers/rbac/v1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/listers/rbac/v1alpha1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/listers/rbac/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/listers/scheduling/v1alpha1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/listers/settings/v1alpha1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/listers/storage/v1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/listers/storage/v1beta1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/pkg/version",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/rest",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/rest/watch",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/testing",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/tools/auth",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/tools/cache",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/tools/clientcmd",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/tools/clientcmd/api",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/tools/clientcmd/api/latest",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/tools/clientcmd/api/v1",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/tools/metrics",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/tools/reference",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/transport",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/util/cert",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/util/flowcontrol",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/util/homedir",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/client-go/util/integer",
"Rev": "db8228460e2de17f5d3a9a453f61dde0ba86545a"
"Rev": "17da6b01b25bfd0189f321eb19d20d229050aacd"
},
{
"ImportPath": "k8s.io/kube-openapi/pkg/builder",

View File

@ -21,6 +21,7 @@ import (
"sort"
"strconv"
"strings"
"sync"
"github.com/golang/glog"
"github.com/spf13/pflag"
@ -85,6 +86,8 @@ type FeatureGate interface {
// featureGate implements FeatureGate as well as pflag.Value for flag parsing.
type featureGate struct {
lock sync.RWMutex
known map[Feature]FeatureSpec
special map[Feature]func(*featureGate, bool)
enabled map[Feature]bool
@ -121,6 +124,9 @@ func NewFeatureGate() *featureGate {
// Set Parses a string of the form "key1=value1,key2=value2,..." into a
// map[string]bool of known keys or returns an error.
func (f *featureGate) Set(value string) error {
f.lock.Lock()
defer f.lock.Unlock()
for _, s := range strings.Split(value, ",") {
if len(s) == 0 {
continue
@ -153,6 +159,9 @@ func (f *featureGate) Set(value string) error {
// String returns a string containing all enabled feature gates, formatted as "key1=value1,key2=value2,...".
func (f *featureGate) String() string {
f.lock.RLock()
defer f.lock.RUnlock()
pairs := []string{}
for k, v := range f.enabled {
pairs = append(pairs, fmt.Sprintf("%s=%t", k, v))
@ -167,6 +176,9 @@ func (f *featureGate) Type() string {
// Add adds features to the featureGate.
func (f *featureGate) Add(features map[Feature]FeatureSpec) error {
f.lock.Lock()
defer f.lock.Unlock()
if f.closed {
return fmt.Errorf("cannot add a feature gate after adding it to the flag set")
}
@ -186,6 +198,9 @@ func (f *featureGate) Add(features map[Feature]FeatureSpec) error {
// Enabled returns true if the key is enabled.
func (f *featureGate) Enabled(key Feature) bool {
f.lock.RLock()
defer f.lock.RUnlock()
defaultValue := f.known[key].Default
if f.enabled != nil {
if v, ok := f.enabled[key]; ok {
@ -197,7 +212,9 @@ func (f *featureGate) Enabled(key Feature) bool {
// AddFlag adds a flag for setting global feature gates to the specified FlagSet.
func (f *featureGate) AddFlag(fs *pflag.FlagSet) {
f.lock.Lock()
f.closed = true
f.lock.Unlock()
known := f.KnownFeatures()
fs.Var(f, flagName, ""+
@ -207,6 +224,8 @@ func (f *featureGate) AddFlag(fs *pflag.FlagSet) {
// KnownFeatures returns a slice of strings describing the FeatureGate's known features.
func (f *featureGate) KnownFeatures() []string {
f.lock.RLock()
defer f.lock.RUnlock()
var known []string
for k, v := range f.known {
pre := ""