You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
From the etcd servers logging, we realized that local (new) node member count is 3 (passing from command line flags --intial-cluster) at T1
Leader node returned 2 member list at peerMemberHandler to the new node at T1.
The above logging explained the error message.
Leader node had around 200ms delay applied the member add configuration to the membership store at T2.
Most likely due to the other overloaded client traffic.
The other node which accepted this member add request returned this write instantly once it applied to its store at T0 while leader processes this member add asynchronously.
What did you expect to happen?
After a new member is added, all of etcd servers will return member list with the new member added when serving member list API in
Retry in the new node provisioning should succeed and successfully bootstrap.
However, it did reveal the issue etcd peer member handler could return stale member list.
#11198 is related and mentioned the exact scenario we faced. The corresponding PR #11639 fixed the issue with member list with linearizable guarantee which only serves client traffic.
Etcd version (please run commands below)
All of etcd versions are impacted.
Etcd configuration (command line flags or environment variables)
N/A
Etcd debug information (please run commands blow, feel free to obfuscate the IP address or FQDN in the output)
Thanks @chaochn47 for raising this issue. Yes, it indeed is a real issue to me. The PR 11639 fixed the case etcdclient --> etcdserver, but not for peer communication.
I agree that LinearizableReadNotify is the simplest & straightforward fix for this. Please feel free to submit a PR for this.
What happened?
One of 3 member etcd production clusters update failed.
The update is removing a old member, adding a new member and start the etcd process just like what is descried in https://etcd.io/docs/v3.5/op-guide/runtime-configuration/#cluster-reconfiguration-operations
The error trace indicated the new node failed bootstrap at T1 at here
etcd/server/etcdserver/api/membership/cluster.go
Lines 703 to 708 in 7a1cecd
From the etcd servers logging, we realized that local (new) node member count is 3 (passing from command line flags
--intial-cluster
) at T1Leader node returned 2 member list at peerMemberHandler to the new node at T1.
The above logging explained the error message.
Leader node had around 200ms delay applied the
member add
configuration to the membership store at T2.Most likely due to the other overloaded client traffic.
The other node which accepted this
member add
request returned this write instantly once it applied to its store at T0 while leader processes thismember add
asynchronously.What did you expect to happen?
After a new member is added, all of etcd servers will return member list with the new member added when serving member list API in
etcd/server/etcdserver/api/etcdhttp/peer.go
Lines 105 to 121 in 7a1cecd
Otherwise, it breaks etcd strong consistency guarantee.
How can we reproduce it (as minimally and precisely as possible)?
Add a gofail failpoint to member add, build etcd with failpoint turned on.
etcd/server/etcdserver/api/membership/cluster.go
Lines 391 to 412 in 7a1cecd
Inject a sleep(0.2) delay.
Re-do https://etcd.io/docs/v3.5/op-guide/runtime-configuration/#cluster-reconfiguration-operations
Anything else we need to know?
Retry in the new node provisioning should succeed and successfully bootstrap.
However, it did reveal the issue etcd peer member handler could return stale member list.
#11198 is related and mentioned the exact scenario we faced. The corresponding PR #11639 fixed the issue with member list with linearizable guarantee which only serves client traffic.
Etcd version (please run commands below)
All of etcd versions are impacted.
Etcd configuration (command line flags or environment variables)
N/A
Etcd debug information (please run commands blow, feel free to obfuscate the IP address or FQDN in the output)
N/A
Relevant log output
The text was updated successfully, but these errors were encountered: