Skip to content

Commit 08de6fb

Browse files
authored
Fix test race condition in file settings monitoring (#137965) (#138208)
When file settings tests look for changes in cluster state to assert application of changes they do so by adding a cluster state listener. But if there are no more cluster state updates after the listener is added the test will never see the initial state of file settings. This commit ensures the current cluster state is seen in that case. closes #36454
1 parent 24a1111 commit 08de6fb

File tree

1 file changed

+18
-9
lines changed

1 file changed

+18
-9
lines changed

server/src/internalClusterTest/java/org/elasticsearch/reservedstate/service/FileSettingsServiceIT.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.elasticsearch.action.admin.cluster.state.ClusterStateRequest;
1616
import org.elasticsearch.action.admin.cluster.state.ClusterStateResponse;
1717
import org.elasticsearch.cluster.ClusterChangedEvent;
18+
import org.elasticsearch.cluster.ClusterState;
1819
import org.elasticsearch.cluster.ClusterStateListener;
1920
import org.elasticsearch.cluster.metadata.ReservedStateErrorMetadata;
2021
import org.elasticsearch.cluster.metadata.ReservedStateHandlerMetadata;
@@ -39,6 +40,7 @@
3940
import java.util.concurrent.ExecutionException;
4041
import java.util.concurrent.TimeUnit;
4142
import java.util.concurrent.atomic.AtomicLong;
43+
import java.util.function.Function;
4244
import java.util.stream.Stream;
4345

4446
import static org.elasticsearch.cluster.metadata.ReservedStateMetadata.EMPTY_VERSION;
@@ -194,22 +196,29 @@ private Tuple<CountDownLatch, AtomicLong> setupClusterStateListener(String node,
194196
ClusterService clusterService = internalCluster().clusterService(node);
195197
CountDownLatch savedClusterState = new CountDownLatch(1);
196198
AtomicLong metadataVersion = new AtomicLong(-1);
199+
Function<ClusterState, Boolean> clusterStateProcessor = clusterState -> {
200+
ReservedStateMetadata reservedState = clusterState.metadata().reservedStateMetadata().get(FileSettingsService.NAMESPACE);
201+
if (reservedState != null && reservedState.version() == fileSettingsVersion) {
202+
metadataVersion.set(clusterState.metadata().version());
203+
savedClusterState.countDown();
204+
logger.info(
205+
"done waiting for file settings [version: {}, metadata version: {}]",
206+
clusterState.version(),
207+
clusterState.metadata().version()
208+
);
209+
return true;
210+
}
211+
return false;
212+
};
197213
clusterService.addListener(new ClusterStateListener() {
198214
@Override
199215
public void clusterChanged(ClusterChangedEvent event) {
200-
ReservedStateMetadata reservedState = event.state().metadata().reservedStateMetadata().get(FileSettingsService.NAMESPACE);
201-
if (reservedState != null && reservedState.version() == fileSettingsVersion) {
216+
if (clusterStateProcessor.apply(event.state())) {
202217
clusterService.removeListener(this);
203-
metadataVersion.set(event.state().metadata().version());
204-
savedClusterState.countDown();
205-
logger.info(
206-
"done waiting for file settings [version: {}, metadata version: {}]",
207-
event.state().version(),
208-
event.state().metadata().version()
209-
);
210218
}
211219
}
212220
});
221+
clusterStateProcessor.apply(clusterService.state());
213222

214223
return new Tuple<>(savedClusterState, metadataVersion);
215224
}

0 commit comments

Comments
 (0)