From 3d10142e5493da9d78ae1690eb5fcde8df1dac89 Mon Sep 17 00:00:00 2001 From: Yannick Welsch Date: Fri, 5 Jul 2019 16:27:57 +0200 Subject: [PATCH] Weaken assertion in PublicationTransportHandler --- .../coordination/PublicationTransportHandler.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/cluster/coordination/PublicationTransportHandler.java b/server/src/main/java/org/elasticsearch/cluster/coordination/PublicationTransportHandler.java index 92a80e808709b..890877de1939b 100644 --- a/server/src/main/java/org/elasticsearch/cluster/coordination/PublicationTransportHandler.java +++ b/server/src/main/java/org/elasticsearch/cluster/coordination/PublicationTransportHandler.java @@ -165,19 +165,19 @@ public void sendPublishRequest(DiscoveryNode destination, PublishRequest publish if (destination.equals(nodes.getLocalNode())) { // if publishing to self, use original request instead (see currentPublishRequestToSelf for explanation) final PublishRequest previousRequest = currentPublishRequestToSelf.getAndSet(publishRequest); - assert previousRequest == null; + // we might override an in-flight publication to self in case where we failed as master and became master again, + // and the new publication started before the previous one completed (which fails anyhow because of higher current term) + assert previousRequest == null || previousRequest.getAcceptedState().term() < publishRequest.getAcceptedState().term(); responseActionListener = new ActionListener() { @Override public void onResponse(PublishWithJoinResponse publishWithJoinResponse) { - final PublishRequest previousRequest = currentPublishRequestToSelf.getAndSet(null); - assert previousRequest == publishRequest; + currentPublishRequestToSelf.compareAndSet(publishRequest, null); // only clean-up our mess originalListener.onResponse(publishWithJoinResponse); } @Override public void onFailure(Exception e) { - final PublishRequest previousRequest = currentPublishRequestToSelf.getAndSet(null); - assert previousRequest == publishRequest; + currentPublishRequestToSelf.compareAndSet(publishRequest, null); // only clean-up our mess originalListener.onFailure(e); } };