add clusters to MutexCheck test, fix silly bug revealed by doing so

The merge lists behavior was flawed in that it would drop one item
from the list per merge, which means that, with high replication
and low number of distinct items, it could even produce an empty
list.

The actual "is there anything wrong" logic is fine, but the list of
clashing values set for a given record is not.

Unfortunately this also doubles the time the test takes, to
21 seconds on MacOS. OW.
This commit is contained in:
Seebs 2021-09-13 16:23:57 -05:00
parent 0d568b0d52
commit 72444f3b87
2 changed files with 11 additions and 5 deletions

8
api.go
View file

@ -2692,9 +2692,9 @@ func mergeIDLists(dst []uint64, src []uint64) []uint64 {
return dst[i] < dst[j]
})
// dedup.
n := 0
n := 1
prev := dst[0]
for i := 0; i < len(dst); i++ {
for i := 1; i < len(dst); i++ {
if dst[i] != prev {
dst[n] = dst[i]
n++
@ -2712,9 +2712,9 @@ func mergeKeyLists(dst []string, src []string) []string {
return dst[i] < dst[j]
})
// dedup.
n := 0
n := 1
prev := dst[0]
for i := 0; i < len(dst); i++ {
for i := 1; i < len(dst); i++ {
if dst[i] != prev {
dst[n] = dst[i]
n++

View file

@ -860,7 +860,13 @@ type mutexCheckField struct {
}
func TestAPI_MutexCheck(t *testing.T) {
c := test.MustRunCluster(t, 3)
c := test.MustNewCluster(t, 3)
for _, c := range c.Nodes {
c.Config.Cluster.ReplicaN = 2
}
if err := c.Start(); err != nil {
t.Fatalf("starting cluster: %v", err)
}
defer c.Close()
m0 := c.GetNode(0)