Skip to content

Commit 34facee

Browse files
committed
Add more race tests
1 parent bc49453 commit 34facee

File tree

4 files changed

+48
-39
lines changed

4 files changed

+48
-39
lines changed

cluster.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ type clusterNodes struct {
220220

221221
nodeCreateGroup singleflight.Group
222222

223-
generation uint32
223+
_generation uint32 // atomic
224224
}
225225

226226
func newClusterNodes(opt *ClusterOptions) *clusterNodes {
@@ -277,8 +277,7 @@ func (c *clusterNodes) Addrs() ([]string, error) {
277277
}
278278

279279
func (c *clusterNodes) NextGeneration() uint32 {
280-
c.generation++
281-
return c.generation
280+
return atomic.AddUint32(&c._generation, 1)
282281
}
283282

284283
// GC removes unused nodes.

cluster_test.go

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -519,39 +519,37 @@ var _ = Describe("ClusterClient", func() {
519519
Expect(err).NotTo(HaveOccurred())
520520
Expect(res).To(HaveLen(3))
521521

522-
wanted := []redis.ClusterSlot{
523-
{
524-
Start: 0,
525-
End: 4999,
526-
Nodes: []redis.ClusterNode{{
527-
Id: "",
528-
Addr: "127.0.0.1:8220",
529-
}, {
530-
Id: "",
531-
Addr: "127.0.0.1:8223",
532-
}},
522+
wanted := []redis.ClusterSlot{{
523+
Start: 0,
524+
End: 4999,
525+
Nodes: []redis.ClusterNode{{
526+
Id: "",
527+
Addr: "127.0.0.1:8220",
533528
}, {
534-
Start: 5000,
535-
End: 9999,
536-
Nodes: []redis.ClusterNode{{
537-
Id: "",
538-
Addr: "127.0.0.1:8221",
539-
}, {
540-
Id: "",
541-
Addr: "127.0.0.1:8224",
542-
}},
529+
Id: "",
530+
Addr: "127.0.0.1:8223",
531+
}},
532+
}, {
533+
Start: 5000,
534+
End: 9999,
535+
Nodes: []redis.ClusterNode{{
536+
Id: "",
537+
Addr: "127.0.0.1:8221",
543538
}, {
544-
Start: 10000,
545-
End: 16383,
546-
Nodes: []redis.ClusterNode{{
547-
Id: "",
548-
Addr: "127.0.0.1:8222",
549-
}, {
550-
Id: "",
551-
Addr: "127.0.0.1:8225",
552-
}},
553-
},
554-
}
539+
Id: "",
540+
Addr: "127.0.0.1:8224",
541+
}},
542+
}, {
543+
Start: 10000,
544+
End: 16383,
545+
Nodes: []redis.ClusterNode{{
546+
Id: "",
547+
Addr: "127.0.0.1:8222",
548+
}, {
549+
Id: "",
550+
Addr: "127.0.0.1:8225",
551+
}},
552+
}}
555553
Expect(assertSlotsEqual(res, wanted)).NotTo(HaveOccurred())
556554
})
557555

@@ -634,16 +632,18 @@ var _ = Describe("ClusterClient", func() {
634632
opt.MaxRetryBackoff = time.Second
635633
client = cluster.clusterClient(opt)
636634

635+
err := client.ForEachMaster(func(master *redis.Client) error {
636+
return master.FlushDB().Err()
637+
})
638+
Expect(err).NotTo(HaveOccurred())
639+
637640
_ = client.ForEachSlave(func(slave *redis.Client) error {
638641
defer GinkgoRecover()
639642

640-
_ = client.ForEachMaster(func(master *redis.Client) error {
641-
return master.FlushDB().Err()
642-
})
643-
644643
Eventually(func() int64 {
645644
return slave.DBSize().Val()
646645
}, 30*time.Second).Should(Equal(int64(0)))
646+
647647
return slave.ClusterFailover().Err()
648648
})
649649
})

commands_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ var _ = Describe("Commands", func() {
219219
It("Should Command", func() {
220220
cmds, err := client.Command().Result()
221221
Expect(err).NotTo(HaveOccurred())
222-
Expect(len(cmds)).To(BeNumerically("~", 185, 10))
222+
Expect(len(cmds)).To(BeNumerically("~", 200, 20))
223223

224224
cmd := cmds["mget"]
225225
Expect(cmd.Name).To(Equal("mget"))

race_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,16 @@ var _ = Describe("cluster races", func() {
316316
})
317317
})
318318

319+
It("should get", func() {
320+
perform(C, func(id int) {
321+
for i := 0; i < N; i++ {
322+
key := fmt.Sprintf("key_%d_%d", id, i)
323+
_, err := client.Get(key).Result()
324+
Expect(err).To(Equal(redis.Nil))
325+
}
326+
})
327+
})
328+
319329
It("should incr", func() {
320330
key := "TestIncrFromGoroutines"
321331

0 commit comments

Comments
 (0)