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

@@ -15,6 +15,10 @@ type DB interface {
Close()
}
// KeyEventCallback will be called back on key event, such as key inserted or deleted
// may be called concurrently
type KeyEventCallback func(dbIndex int, key string, entity *DataEntity)
// DBEngine is the embedding storage engine exposing more methods for complex application
type DBEngine interface {
DB
@@ -25,6 +29,10 @@ type DBEngine interface {
RWLocks(dbIndex int, writeKeys []string, readKeys []string)
RWUnLocks(dbIndex int, writeKeys []string, readKeys []string)
GetDBSize(dbIndex int) (int, int)
GetEntity(dbIndex int, key string) (*DataEntity, bool)
GetExpiration(dbIndex int, key string) *time.Time
SetKeyInsertedCallback(cb KeyEventCallback)
SetKeyDeletedCallback(cb KeyEventCallback)
}
// DataEntity stores data bound to a key, including a string, list, hash, set and so on