Skip to content

Commit 90b3126

Browse files
committed
Weaken assertion in PublicationTransportHandler (#44014)
These assertions do not hold true when a master fails during publication and quickly becomes master again, publishing a new cluster state in a higher term which races against the previous cluster state publication to self (which does not matter anyway). Relates #43994 Closes #44012
1 parent 8e92586 commit 90b3126

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

server/src/main/java/org/elasticsearch/cluster/coordination/PublicationTransportHandler.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -191,19 +191,19 @@ public void sendPublishRequest(DiscoveryNode destination, PublishRequest publish
191191
if (destination.equals(nodes.getLocalNode())) {
192192
// if publishing to self, use original request instead (see currentPublishRequestToSelf for explanation)
193193
final PublishRequest previousRequest = currentPublishRequestToSelf.getAndSet(publishRequest);
194-
assert previousRequest == null;
194+
// we might override an in-flight publication to self in case where we failed as master and became master again,
195+
// and the new publication started before the previous one completed (which fails anyhow because of higher current term)
196+
assert previousRequest == null || previousRequest.getAcceptedState().term() < publishRequest.getAcceptedState().term();
195197
responseActionListener = new ActionListener<PublishWithJoinResponse>() {
196198
@Override
197199
public void onResponse(PublishWithJoinResponse publishWithJoinResponse) {
198-
final PublishRequest previousRequest = currentPublishRequestToSelf.getAndSet(null);
199-
assert previousRequest == publishRequest;
200+
currentPublishRequestToSelf.compareAndSet(publishRequest, null); // only clean-up our mess
200201
originalListener.onResponse(publishWithJoinResponse);
201202
}
202203

203204
@Override
204205
public void onFailure(Exception e) {
205-
final PublishRequest previousRequest = currentPublishRequestToSelf.getAndSet(null);
206-
assert previousRequest == publishRequest;
206+
currentPublishRequestToSelf.compareAndSet(publishRequest, null); // only clean-up our mess
207207
originalListener.onFailure(e);
208208
}
209209
};

0 commit comments

Comments
 (0)