mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
etcdserver: call the OnPreCommitUnsafe in unsafeCommit
`unsafeCommit` is called by both `(*batchTxBuffered) commit` and `(*backend) defrag`. When users perform the defragmentation operation, etcd doesn't update the consistent index. If etcd crashes(e.g. panicking) in the process for whatever reason, then etcd replays the WAL entries starting from the latest snapshot, accordingly it may re-apply entries which might have already been applied, eventually the revision isn't consistent with other members. Refer to discussion in https://github.com/etcd-io/etcd/pull/14685 Signed-off-by: Benjamin Wang <wachao@vmware.com>
This commit is contained in:
parent
2f558ca0db
commit
5a3ef953eb
@ -329,10 +329,6 @@ func (t *batchTxBuffered) CommitAndStop() {
|
||||
}
|
||||
|
||||
func (t *batchTxBuffered) commit(stop bool) {
|
||||
if t.backend.hooks != nil {
|
||||
t.backend.hooks.OnPreCommitUnsafe(t)
|
||||
}
|
||||
|
||||
// all read txs must be closed to acquire boltdb commit rwlock
|
||||
t.backend.readTx.Lock()
|
||||
t.unsafeCommit(stop)
|
||||
@ -340,6 +336,10 @@ func (t *batchTxBuffered) commit(stop bool) {
|
||||
}
|
||||
|
||||
func (t *batchTxBuffered) unsafeCommit(stop bool) {
|
||||
if t.backend.hooks != nil {
|
||||
t.backend.hooks.OnPreCommitUnsafe(t)
|
||||
}
|
||||
|
||||
if t.backend.readTx.tx != nil {
|
||||
// wait all store read transactions using the current boltdb tx to finish,
|
||||
// then close the boltdb tx
|
||||
|
Loading…
x
Reference in New Issue
Block a user