|
14 | 14 | import org.elasticsearch.cluster.ClusterState;
|
15 | 15 | import org.elasticsearch.cluster.metadata.Metadata;
|
16 | 16 | import org.elasticsearch.cluster.metadata.NodesShutdownMetadata;
|
| 17 | +import org.elasticsearch.cluster.metadata.ReservedStateErrorMetadata; |
17 | 18 | import org.elasticsearch.cluster.metadata.ReservedStateMetadata;
|
18 | 19 | import org.elasticsearch.cluster.metadata.SingleNodeShutdownMetadata;
|
19 | 20 | import org.elasticsearch.cluster.node.DiscoveryNode;
|
|
44 | 45 | import java.net.UnknownHostException;
|
45 | 46 | import java.nio.channels.ServerSocketChannel;
|
46 | 47 | import java.util.Collections;
|
| 48 | +import java.util.List; |
47 | 49 | import java.util.Set;
|
48 | 50 |
|
| 51 | +import static org.elasticsearch.cluster.metadata.ReservedStateErrorMetadata.ErrorKind.TRANSIENT; |
| 52 | + |
49 | 53 | public class ReadinessServiceTests extends ESTestCase implements ReadinessClientProbe {
|
50 | 54 | private ClusterService clusterService;
|
51 | 55 | private ReadinessService readinessService;
|
@@ -291,4 +295,33 @@ public void testStatusChange() throws Exception {
|
291 | 295 | readinessService.stop();
|
292 | 296 | readinessService.close();
|
293 | 297 | }
|
| 298 | + |
| 299 | + public void testFileSettingsUpdateError() throws Exception { |
| 300 | + // ensure an update to file settings that results in an error state doesn't cause readiness to fail |
| 301 | + // since the current file settings already applied cleanly |
| 302 | + readinessService.start(); |
| 303 | + |
| 304 | + // initially the service isn't ready because initial cluster state has not been applied yet |
| 305 | + assertFalse(readinessService.ready()); |
| 306 | + |
| 307 | + var fileSettingsState = new ReservedStateMetadata.Builder(FileSettingsService.NAMESPACE).version(21L) |
| 308 | + .errorMetadata(new ReservedStateErrorMetadata(22L, TRANSIENT, List.of("dummy error"))); |
| 309 | + ClusterState state = ClusterState.builder(new ClusterName("cluster")) |
| 310 | + .nodes( |
| 311 | + DiscoveryNodes.builder() |
| 312 | + .add(DiscoveryNodeUtils.create("node2", new TransportAddress(TransportAddress.META_ADDRESS, 9201))) |
| 313 | + .add(httpTransport.node) |
| 314 | + .masterNodeId(httpTransport.node.getId()) |
| 315 | + .localNodeId(httpTransport.node.getId()) |
| 316 | + ) |
| 317 | + .metadata(new Metadata.Builder().put(fileSettingsState.build())) |
| 318 | + .build(); |
| 319 | + |
| 320 | + ClusterChangedEvent event = new ClusterChangedEvent("test", state, ClusterState.EMPTY_STATE); |
| 321 | + readinessService.clusterChanged(event); |
| 322 | + assertTrue(readinessService.ready()); |
| 323 | + |
| 324 | + readinessService.stop(); |
| 325 | + readinessService.close(); |
| 326 | + } |
294 | 327 | }
|
0 commit comments