Add more race tests

This commit is contained in:
Vladimir Mihailenco 2018-05-17 14:36:51 +03:00
parent bc49453a24
commit 34facee367
4 changed files with 48 additions and 39 deletions

View File

@ -220,7 +220,7 @@ type clusterNodes struct {
nodeCreateGroup singleflight.Group nodeCreateGroup singleflight.Group
generation uint32 _generation uint32 // atomic
} }
func newClusterNodes(opt *ClusterOptions) *clusterNodes { func newClusterNodes(opt *ClusterOptions) *clusterNodes {
@ -277,8 +277,7 @@ func (c *clusterNodes) Addrs() ([]string, error) {
} }
func (c *clusterNodes) NextGeneration() uint32 { func (c *clusterNodes) NextGeneration() uint32 {
c.generation++ return atomic.AddUint32(&c._generation, 1)
return c.generation
} }
// GC removes unused nodes. // GC removes unused nodes.

View File

@ -519,39 +519,37 @@ var _ = Describe("ClusterClient", func() {
Expect(err).NotTo(HaveOccurred()) Expect(err).NotTo(HaveOccurred())
Expect(res).To(HaveLen(3)) Expect(res).To(HaveLen(3))
wanted := []redis.ClusterSlot{ wanted := []redis.ClusterSlot{{
{ Start: 0,
Start: 0, End: 4999,
End: 4999, Nodes: []redis.ClusterNode{{
Nodes: []redis.ClusterNode{{ Id: "",
Id: "", Addr: "127.0.0.1:8220",
Addr: "127.0.0.1:8220",
}, {
Id: "",
Addr: "127.0.0.1:8223",
}},
}, { }, {
Start: 5000, Id: "",
End: 9999, Addr: "127.0.0.1:8223",
Nodes: []redis.ClusterNode{{ }},
Id: "", }, {
Addr: "127.0.0.1:8221", Start: 5000,
}, { End: 9999,
Id: "", Nodes: []redis.ClusterNode{{
Addr: "127.0.0.1:8224", Id: "",
}}, Addr: "127.0.0.1:8221",
}, { }, {
Start: 10000, Id: "",
End: 16383, Addr: "127.0.0.1:8224",
Nodes: []redis.ClusterNode{{ }},
Id: "", }, {
Addr: "127.0.0.1:8222", Start: 10000,
}, { End: 16383,
Id: "", Nodes: []redis.ClusterNode{{
Addr: "127.0.0.1:8225", Id: "",
}}, Addr: "127.0.0.1:8222",
}, }, {
} Id: "",
Addr: "127.0.0.1:8225",
}},
}}
Expect(assertSlotsEqual(res, wanted)).NotTo(HaveOccurred()) Expect(assertSlotsEqual(res, wanted)).NotTo(HaveOccurred())
}) })
@ -634,16 +632,18 @@ var _ = Describe("ClusterClient", func() {
opt.MaxRetryBackoff = time.Second opt.MaxRetryBackoff = time.Second
client = cluster.clusterClient(opt) client = cluster.clusterClient(opt)
err := client.ForEachMaster(func(master *redis.Client) error {
return master.FlushDB().Err()
})
Expect(err).NotTo(HaveOccurred())
_ = client.ForEachSlave(func(slave *redis.Client) error { _ = client.ForEachSlave(func(slave *redis.Client) error {
defer GinkgoRecover() defer GinkgoRecover()
_ = client.ForEachMaster(func(master *redis.Client) error {
return master.FlushDB().Err()
})
Eventually(func() int64 { Eventually(func() int64 {
return slave.DBSize().Val() return slave.DBSize().Val()
}, 30*time.Second).Should(Equal(int64(0))) }, 30*time.Second).Should(Equal(int64(0)))
return slave.ClusterFailover().Err() return slave.ClusterFailover().Err()
}) })
}) })

View File

@ -219,7 +219,7 @@ var _ = Describe("Commands", func() {
It("Should Command", func() { It("Should Command", func() {
cmds, err := client.Command().Result() cmds, err := client.Command().Result()
Expect(err).NotTo(HaveOccurred()) Expect(err).NotTo(HaveOccurred())
Expect(len(cmds)).To(BeNumerically("~", 185, 10)) Expect(len(cmds)).To(BeNumerically("~", 200, 20))
cmd := cmds["mget"] cmd := cmds["mget"]
Expect(cmd.Name).To(Equal("mget")) Expect(cmd.Name).To(Equal("mget"))

View File

@ -316,6 +316,16 @@ var _ = Describe("cluster races", func() {
}) })
}) })
It("should get", func() {
perform(C, func(id int) {
for i := 0; i < N; i++ {
key := fmt.Sprintf("key_%d_%d", id, i)
_, err := client.Get(key).Result()
Expect(err).To(Equal(redis.Nil))
}
})
})
It("should incr", func() { It("should incr", func() {
key := "TestIncrFromGoroutines" key := "TestIncrFromGoroutines"