Merge pull request #13568 from horizonzy/avoid-always-put-metaterm

Avoid always update meta term.
This commit is contained in:
Piotr Tabor 2022-01-22 16:02:50 +01:00 committed by GitHub
commit 17568a19f4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -58,7 +58,7 @@ func ReadConsistentIndex(tx backend.ReadTx) (uint64, uint64) {
func UnsafeUpdateConsistentIndex(tx backend.BatchTx, index uint64, term uint64, onlyGrow bool) {
if index == 0 {
// Never save 0 as it means that we didn't loaded the real index yet.
// Never save 0 as it means that we didn't load the real index yet.
return
}
@ -67,9 +67,19 @@ func UnsafeUpdateConsistentIndex(tx backend.BatchTx, index uint64, term uint64,
if term < oldTerm {
return
}
if term == oldTerm && index <= oldi {
return
if index > oldi {
bs1 := make([]byte, 8)
binary.BigEndian.PutUint64(bs1, index)
// put the index into the underlying backend
// tx has been locked in TxnBegin, so there is no need to lock it again
tx.UnsafePut(Meta, MetaConsistentIndexKeyName, bs1)
}
if term > 0 && term > oldTerm {
bs2 := make([]byte, 8)
binary.BigEndian.PutUint64(bs2, term)
tx.UnsafePut(Meta, MetaTermKeyName, bs2)
}
return
}
bs1 := make([]byte, 8)