Skip to content

Commit e117368

Browse files
authored
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 3572bfd commit e117368

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
@@ -165,19 +165,19 @@ public void sendPublishRequest(DiscoveryNode destination, PublishRequest publish
165165
if (destination.equals(nodes.getLocalNode())) {
166166
// if publishing to self, use original request instead (see currentPublishRequestToSelf for explanation)
167167
final PublishRequest previousRequest = currentPublishRequestToSelf.getAndSet(publishRequest);
168-
assert previousRequest == null;
168+
// we might override an in-flight publication to self in case where we failed as master and became master again,
169+
// and the new publication started before the previous one completed (which fails anyhow because of higher current term)
170+
assert previousRequest == null || previousRequest.getAcceptedState().term() < publishRequest.getAcceptedState().term();
169171
responseActionListener = new ActionListener<PublishWithJoinResponse>() {
170172
@Override
171173
public void onResponse(PublishWithJoinResponse publishWithJoinResponse) {
172-
final PublishRequest previousRequest = currentPublishRequestToSelf.getAndSet(null);
173-
assert previousRequest == publishRequest;
174+
currentPublishRequestToSelf.compareAndSet(publishRequest, null); // only clean-up our mess
174175
originalListener.onResponse(publishWithJoinResponse);
175176
}
176177

177178
@Override
178179
public void onFailure(Exception e) {
179-
final PublishRequest previousRequest = currentPublishRequestToSelf.getAndSet(null);
180-
assert previousRequest == publishRequest;
180+
currentPublishRequestToSelf.compareAndSet(publishRequest, null); // only clean-up our mess
181181
originalListener.onFailure(e);
182182
}
183183
};

0 commit comments

Comments
 (0)