raft cluster

wip: raft does not care about migrating

wip: optimize code

wip: raft election

wip

wip: fix raft leader missing log entries

wip

fix a dead lock

batch set slot route

wip: raft persist

wip

refactor cluster suite

remove relay

rename relay2

refactor: allow customizing client factory

test raft

refactor re-balance

avoid errors caused by inconsistent status on follower nodes during raft commits

test raft election
This commit is contained in:
finley
2023-01-02 21:27:06 +08:00
parent df672d4c92
commit bf7f628810
54 changed files with 3122 additions and 703 deletions

View File

@@ -5,14 +5,14 @@ import (
"time"
)
var r = rand.New(rand.NewSource(time.Now().UnixNano()))
var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
// RandString create a random string no longer than n
func RandString(n int) string {
nR := rand.New(rand.NewSource(time.Now().UnixNano()))
b := make([]rune, n)
for i := range b {
b[i] = letters[nR.Intn(len(letters))]
b[i] = letters[r.Intn(len(letters))]
}
return string(b)
}
@@ -22,7 +22,19 @@ var hexLetters = []rune("0123456789abcdef")
func RandHexString(n int) string {
b := make([]rune, n)
for i := range b {
b[i] = hexLetters[rand.Intn(len(hexLetters))]
b[i] = hexLetters[r.Intn(len(hexLetters))]
}
return string(b)
}
// RandIndex returns random indexes to random pick elements from slice
func RandIndex(size int) []int {
result := make([]int, size)
for i := range result {
result[i] = i
}
rand.Shuffle(size, func(i, j int) {
result[i], result[j] = result[j], result[i]
})
return result
}