diff --git a/cmd/cloud-controller-manager/controller-manager.go b/cmd/cloud-controller-manager/controller-manager.go index edac325fa5..39eacd52d6 100644 --- a/cmd/cloud-controller-manager/controller-manager.go +++ b/cmd/cloud-controller-manager/controller-manager.go @@ -39,7 +39,7 @@ import ( ) func main() { - rand.Seed(time.Now().UTC().UnixNano()) + rand.Seed(time.Now().UnixNano()) command := app.NewCloudControllerManagerCommand() diff --git a/cmd/hyperkube/main.go b/cmd/hyperkube/main.go index 8482ab1c38..8cb1ec2ad4 100644 --- a/cmd/hyperkube/main.go +++ b/cmd/hyperkube/main.go @@ -47,7 +47,7 @@ import ( ) func main() { - rand.Seed(time.Now().UTC().UnixNano()) + rand.Seed(time.Now().UnixNano()) hyperkubeCommand, allCommandFns := NewHyperKubeCommand(server.SetupSignalHandler()) diff --git a/cmd/kube-apiserver/apiserver.go b/cmd/kube-apiserver/apiserver.go index 762c09f6dd..22148596e6 100644 --- a/cmd/kube-apiserver/apiserver.go +++ b/cmd/kube-apiserver/apiserver.go @@ -36,7 +36,7 @@ import ( ) func main() { - rand.Seed(time.Now().UTC().UnixNano()) + rand.Seed(time.Now().UnixNano()) command := app.NewAPIServerCommand(server.SetupSignalHandler()) diff --git a/cmd/kube-controller-manager/controller-manager.go b/cmd/kube-controller-manager/controller-manager.go index b6d1197e8f..8dd1f29883 100644 --- a/cmd/kube-controller-manager/controller-manager.go +++ b/cmd/kube-controller-manager/controller-manager.go @@ -39,7 +39,7 @@ import ( ) func main() { - rand.Seed(time.Now().UTC().UnixNano()) + rand.Seed(time.Now().UnixNano()) command := app.NewControllerManagerCommand() diff --git a/cmd/kube-proxy/proxy.go b/cmd/kube-proxy/proxy.go index 092491e337..884f332811 100644 --- a/cmd/kube-proxy/proxy.go +++ b/cmd/kube-proxy/proxy.go @@ -33,7 +33,7 @@ import ( ) func main() { - rand.Seed(time.Now().UTC().UnixNano()) + rand.Seed(time.Now().UnixNano()) command := app.NewProxyCommand() diff --git a/cmd/kube-scheduler/scheduler.go b/cmd/kube-scheduler/scheduler.go index 737d9b2a24..45e1b2617f 100644 --- a/cmd/kube-scheduler/scheduler.go +++ b/cmd/kube-scheduler/scheduler.go @@ -32,7 +32,7 @@ import ( ) func main() { - rand.Seed(time.Now().UTC().UnixNano()) + rand.Seed(time.Now().UnixNano()) command := app.NewSchedulerCommand() diff --git a/cmd/kubectl/kubectl.go b/cmd/kubectl/kubectl.go index b568c7fa63..35149cc8c8 100644 --- a/cmd/kubectl/kubectl.go +++ b/cmd/kubectl/kubectl.go @@ -34,7 +34,7 @@ import ( ) func main() { - rand.Seed(time.Now().UTC().UnixNano()) + rand.Seed(time.Now().UnixNano()) command := cmd.NewDefaultKubectlCommand() diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go index 00142311c0..606d60c295 100644 --- a/cmd/kubelet/app/server.go +++ b/cmd/kubelet/app/server.go @@ -732,7 +732,7 @@ func run(s *options.KubeletServer, kubeDeps *kubelet.Dependencies, stopCh <-chan utilruntime.ReallyCrash = s.ReallyCrashForTesting - rand.Seed(time.Now().UTC().UnixNano()) + rand.Seed(time.Now().UnixNano()) // TODO(vmarmol): Do this through container config. oomAdjuster := kubeDeps.OOMAdjuster diff --git a/cmd/kubelet/kubelet.go b/cmd/kubelet/kubelet.go index 8f254adb41..074c4dd323 100644 --- a/cmd/kubelet/kubelet.go +++ b/cmd/kubelet/kubelet.go @@ -34,7 +34,7 @@ import ( ) func main() { - rand.Seed(time.Now().UTC().UnixNano()) + rand.Seed(time.Now().UnixNano()) command := app.NewKubeletCommand(server.SetupSignalHandler()) logs.InitLogs() diff --git a/cmd/kubemark/hollow-node.go b/cmd/kubemark/hollow-node.go index 972c5161d4..c63d6ebd0f 100644 --- a/cmd/kubemark/hollow-node.go +++ b/cmd/kubemark/hollow-node.go @@ -100,7 +100,7 @@ func (c *HollowNodeConfig) createClientConfigFromFile() (*restclient.Config, err } func main() { - rand.Seed(time.Now().UTC().UnixNano()) + rand.Seed(time.Now().UnixNano()) command := newHollowNodeCommand() diff --git a/pkg/kubemark/controller.go b/pkg/kubemark/controller.go index aa7482ea3b..42438bac31 100644 --- a/pkg/kubemark/controller.go +++ b/pkg/kubemark/controller.go @@ -99,7 +99,7 @@ func NewKubemarkController(externalClient kubeclient.Interface, externalInformer nodesToDelete: make(map[string]bool), nodesToDeleteLock: sync.Mutex{}, }, - rand: rand.New(rand.NewSource(time.Now().UTC().UnixNano())), + rand: rand.New(rand.NewSource(time.Now().UnixNano())), createNodeQueue: make(chan string, 1000), nodeGroupQueueSize: make(map[string]int), nodeGroupQueueSizeLock: sync.Mutex{}, diff --git a/pkg/volume/flocker/flocker_util.go b/pkg/volume/flocker/flocker_util.go index 956ea0b22e..85b8263ab0 100644 --- a/pkg/volume/flocker/flocker_util.go +++ b/pkg/volume/flocker/flocker_util.go @@ -18,7 +18,6 @@ package flocker import ( "fmt" - "time" "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/rand" @@ -68,7 +67,6 @@ func (util *flockerUtil) CreateVolume(c *flockerVolumeProvisioner) (datasetUUID } // select random node - rand.Seed(time.Now().UTC().UnixNano()) node := nodes[rand.Intn(len(nodes))] glog.V(2).Infof("selected flocker node with UUID '%s' to provision dataset", node.UUID) diff --git a/staging/src/k8s.io/apimachinery/pkg/util/rand/rand.go b/staging/src/k8s.io/apimachinery/pkg/util/rand/rand.go index 9421edae86..82a473bb14 100644 --- a/staging/src/k8s.io/apimachinery/pkg/util/rand/rand.go +++ b/staging/src/k8s.io/apimachinery/pkg/util/rand/rand.go @@ -27,7 +27,14 @@ var rng = struct { sync.Mutex rand *rand.Rand }{ - rand: rand.New(rand.NewSource(time.Now().UTC().UnixNano())), + rand: rand.New(rand.NewSource(time.Now().UnixNano())), +} + +// Int returns a non-negative pseudo-random int. +func Int() int { + rng.Lock() + defer rng.Unlock() + return rng.rand.Int() } // Intn generates an integer in range [0,max). diff --git a/test/e2e/network/service.go b/test/e2e/network/service.go index 5bac2e8937..f906cdce31 100644 --- a/test/e2e/network/service.go +++ b/test/e2e/network/service.go @@ -1111,7 +1111,7 @@ var _ = SIGDescribe("Services", func() { } outOfRangeNodePort := 0 - rand.Seed(time.Now().UTC().UnixNano()) + rand.Seed(time.Now().UnixNano()) for { outOfRangeNodePort = 1 + rand.Intn(65535) if !framework.ServiceNodePortRange.Contains(outOfRangeNodePort) { diff --git a/test/e2e/storage/pd.go b/test/e2e/storage/pd.go index 50b94a6c0c..da35ed2c88 100644 --- a/test/e2e/storage/pd.go +++ b/test/e2e/storage/pd.go @@ -79,7 +79,7 @@ var _ = utils.SIGDescribe("Pod Disks", func() { host0Name = types.NodeName(nodes.Items[0].ObjectMeta.Name) host1Name = types.NodeName(nodes.Items[1].ObjectMeta.Name) - mathrand.Seed(time.Now().UTC().UnixNano()) + mathrand.Seed(time.Now().UnixNano()) }) Context("schedule pods each with a PD, delete pod and verify detach [Slow]", func() { diff --git a/test/e2e/storage/vsphere/BUILD b/test/e2e/storage/vsphere/BUILD index 44b62b4e0e..8d0e22c106 100644 --- a/test/e2e/storage/vsphere/BUILD +++ b/test/e2e/storage/vsphere/BUILD @@ -46,6 +46,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/rand:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", diff --git a/test/e2e/storage/vsphere/vsphere_utils.go b/test/e2e/storage/vsphere/vsphere_utils.go index c022ba90f7..99e61e268c 100644 --- a/test/e2e/storage/vsphere/vsphere_utils.go +++ b/test/e2e/storage/vsphere/vsphere_utils.go @@ -19,7 +19,6 @@ package vsphere import ( "context" "fmt" - "math/rand" "path/filepath" "regexp" "strings" @@ -37,6 +36,7 @@ import ( storage "k8s.io/api/storage/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/rand" "k8s.io/apimachinery/pkg/util/uuid" "k8s.io/apimachinery/pkg/util/wait" clientset "k8s.io/client-go/kubernetes" @@ -747,7 +747,6 @@ func GetReadySchedulableNodeInfos() []*NodeInfo { // and it's associated NodeInfo object is returned. func GetReadySchedulableRandomNodeInfo() *NodeInfo { nodesInfo := GetReadySchedulableNodeInfos() - rand.Seed(time.Now().Unix()) Expect(nodesInfo).NotTo(BeEmpty()) return nodesInfo[rand.Int()%len(nodesInfo)] } diff --git a/test/e2e_node/e2e_node_suite_test.go b/test/e2e_node/e2e_node_suite_test.go index 3cd0c01a7c..3dfa15b0a8 100644 --- a/test/e2e_node/e2e_node_suite_test.go +++ b/test/e2e_node/e2e_node_suite_test.go @@ -74,6 +74,7 @@ func init() { } func TestMain(m *testing.M) { + rand.Seed(time.Now().UnixNano()) pflag.Parse() framework.AfterReadingAllFlags(&framework.TestContext) os.Exit(m.Run()) @@ -119,7 +120,6 @@ func TestE2eNode(t *testing.T) { return } // If run-services-mode is not specified, run test. - rand.Seed(time.Now().UTC().UnixNano()) RegisterFailHandler(Fail) reporters := []Reporter{} reportDir := framework.TestContext.ReportDir diff --git a/test/e2e_node/runner/remote/run_remote.go b/test/e2e_node/runner/remote/run_remote.go index d250761213..1dca0808c7 100644 --- a/test/e2e_node/runner/remote/run_remote.go +++ b/test/e2e_node/runner/remote/run_remote.go @@ -188,7 +188,7 @@ func main() { glog.Fatalf("--test-suite must be one of default or conformance") } - rand.Seed(time.Now().UTC().UnixNano()) + rand.Seed(time.Now().UnixNano()) if *buildOnly { // Build the archive and exit remote.CreateTestArchive(suite, *systemSpecName) diff --git a/test/images/logs-generator/logs_generator.go b/test/images/logs-generator/logs_generator.go index d11a0025e5..b5ab2bc953 100644 --- a/test/images/logs-generator/logs_generator.go +++ b/test/images/logs-generator/logs_generator.go @@ -60,7 +60,6 @@ func main() { // Outputs linesTotal lines of logs to stdout uniformly for duration func generateLogs(linesTotal int, duration time.Duration) { delay := duration / time.Duration(linesTotal) - rand.Seed(time.Now().UnixNano()) ticker := time.NewTicker(delay) defer ticker.Stop() diff --git a/test/integration/volume/main_test.go b/test/integration/volume/main_test.go index f3c945d05c..710261d23c 100644 --- a/test/integration/volume/main_test.go +++ b/test/integration/volume/main_test.go @@ -17,11 +17,14 @@ limitations under the License. package volume import ( + "math/rand" "testing" + "time" "k8s.io/kubernetes/test/integration/framework" ) func TestMain(m *testing.M) { + rand.Seed(time.Now().UnixNano()) framework.EtcdMain(m.Run) } diff --git a/test/integration/volume/persistent_volumes_test.go b/test/integration/volume/persistent_volumes_test.go index 189af2bb50..57a49c75fa 100644 --- a/test/integration/volume/persistent_volumes_test.go +++ b/test/integration/volume/persistent_volumes_test.go @@ -256,7 +256,6 @@ func TestPersistentVolumeBindRace(t *testing.T) { glog.V(2).Infof("TestPersistentVolumeBindRace claims created") // putting a bind manually on a pv should only match the claim it is bound to - rand.Seed(time.Now().Unix()) claim := claims[rand.Intn(maxClaims-1)] claimRef, err := ref.GetReference(legacyscheme.Scheme, claim) if err != nil {