swh:1:snp:272e298efac7922bc58929ef447c6a9add2959f8
Revision 7eb696dfcdd05c1762d24528bde58ab3b73d77a7 authored by Benjamin Wang on 30 August 2022, 02:24:51 UTC, committed by Marek Siarkowicz on 05 September 2022, 12:26:24 UTC
For a cluster with only one member, the raft always send identical
unstable entries and committed entries to etcdserver, and etcd
responds to the client once it finishes (actually partially) the
applying workflow.

When the client receives the response, it doesn't mean etcd has already
successfully saved the data, including BoltDB and WAL, because:
   1. etcd commits the boltDB transaction periodically instead of on each request;
   2. etcd saves WAL entries in parallel with applying the committed entries.
Accordingly, it may run into a situation of data loss when the etcd crashes
immediately after responding to the client and before the boltDB and WAL
successfully save the data to disk.
Note that this issue can only happen for clusters with only one member.

For clusters with multiple members, it isn't an issue, because etcd will
not commit & apply the data before it being replicated to majority members.
When the client receives the response, it means the data must have been applied.
It further means the data must have been committed.
Note: for clusters with multiple members, the raft will never send identical
unstable entries and committed entries to etcdserver.

Signed-off-by: Benjamin Wang <wachao@vmware.com>
1 parent fbb14f9
History
Tip revision: 94077fc7caec762b5ba23cc41c558bc175f3cded authored by James Blair on 25 July 2024, 06:16:42 UTC
Merge pull request #18361 from ArkaSaha30/deps_mgmt_22_7_24
Tip revision: 94077fc
File Mode Size
.github
Documentation
api
client
contrib
etcdctl
etcdutl
hack
logos
pkg
raft
scripts
security
server
tests
tools
.gitignore -rw-r--r-- 290 bytes
.header -rw-r--r-- 593 bytes
.travis.yml -rw-r--r-- 1.1 KB
.words -rw-r--r-- 1.3 KB
CONTRIBUTING.md -rw-r--r-- 3.3 KB
DCO -rw-r--r-- 1.4 KB
Dockerfile-release.amd64 -rw-r--r-- 726 bytes
Dockerfile-release.arm64 -rw-r--r-- 364 bytes
Dockerfile-release.ppc64le -rw-r--r-- 334 bytes
Dockerfile-release.s390x -rw-r--r-- 330 bytes
GOVERNANCE.md -rw-r--r-- 3.7 KB
LICENSE -rw-r--r-- 11.1 KB
MAINTAINERS -rw-r--r-- 1.0 KB
Makefile -rw-r--r-- 18.1 KB
Procfile -rw-r--r-- 1.6 KB
Procfile.learner -rw-r--r-- 900 bytes
Procfile.v2 -rw-r--r-- 1.6 KB
README.md -rw-r--r-- 9.2 KB
ROADMAP.md -rw-r--r-- 900 bytes
bill-of-materials.json -rw-r--r-- 12.0 KB
bill-of-materials.override.json -rw-r--r-- 254 bytes
build -rwxr-xr-x 117 bytes
build.bat -rwxr-xr-x 51 bytes
build.ps1 -rw-r--r-- 2.7 KB
build.sh -rwxr-xr-x 3.8 KB
code-of-conduct.md -rw-r--r-- 143 bytes
codecov.yml -rw-r--r-- 482 bytes
dummy.go -rw-r--r-- 1.0 KB
etcd.conf.yml.sample -rw-r--r-- 3.6 KB
go.mod -rw-r--r-- 1.0 KB
go.sum -rw-r--r-- 54.8 KB
test -rwxr-xr-x 115 bytes
test.sh -rwxr-xr-x 22.1 KB

README.md

back to top