|
@@ -16,7 +16,7 @@ import org.elasticsearch.cluster.block.ClusterBlocks;
|
|
|
import org.elasticsearch.cluster.coordination.NoMasterBlockService;
|
|
|
import org.elasticsearch.cluster.metadata.IndexMetadata;
|
|
|
import org.elasticsearch.cluster.metadata.IndexTemplateMetadata;
|
|
|
-import org.elasticsearch.cluster.metadata.Metadata;
|
|
|
+import org.elasticsearch.cluster.metadata.ProjectId;
|
|
|
import org.elasticsearch.cluster.metadata.ProjectMetadata;
|
|
|
import org.elasticsearch.cluster.node.DiscoveryNode;
|
|
|
import org.elasticsearch.cluster.node.DiscoveryNodeRole;
|
|
@@ -29,6 +29,7 @@ import org.elasticsearch.cluster.routing.ShardRouting;
|
|
|
import org.elasticsearch.cluster.routing.ShardRoutingState;
|
|
|
import org.elasticsearch.cluster.routing.TestShardRouting;
|
|
|
import org.elasticsearch.cluster.service.ClusterService;
|
|
|
+import org.elasticsearch.core.NotMultiProjectCapable;
|
|
|
import org.elasticsearch.gateway.GatewayService;
|
|
|
import org.elasticsearch.index.Index;
|
|
|
import org.elasticsearch.index.IndexVersion;
|
|
@@ -73,6 +74,8 @@ public class WatcherLifeCycleServiceTests extends ESTestCase {
|
|
|
|
|
|
private WatcherService watcherService;
|
|
|
private WatcherLifeCycleService lifeCycleService;
|
|
|
+ @NotMultiProjectCapable(description = "Watcher is not available in serverless")
|
|
|
+ private ProjectId projectId = ProjectId.DEFAULT;
|
|
|
|
|
|
@Before
|
|
|
public void prepareServices() {
|
|
@@ -91,14 +94,18 @@ public class WatcherLifeCycleServiceTests extends ESTestCase {
|
|
|
IndexRoutingTable indexRoutingTable = IndexRoutingTable.builder(new Index("anything", "foo")).build();
|
|
|
ClusterState previousClusterState = ClusterState.builder(new ClusterName("my-cluster"))
|
|
|
.nodes(new DiscoveryNodes.Builder().masterNodeId("node_1").localNodeId("node_1").add(newNode("node_1")))
|
|
|
- .routingTable(RoutingTable.builder().add(indexRoutingTable).build())
|
|
|
+ .putRoutingTable(projectId, RoutingTable.builder().add(indexRoutingTable).build())
|
|
|
.build();
|
|
|
|
|
|
IndexRoutingTable watchRoutingTable = IndexRoutingTable.builder(new Index(Watch.INDEX, "foo")).build();
|
|
|
ClusterState clusterState = ClusterState.builder(new ClusterName("my-cluster"))
|
|
|
- .metadata(Metadata.builder().put(IndexTemplateMetadata.builder(HISTORY_TEMPLATE_NAME).patterns(randomIndexPatterns())).build())
|
|
|
+ .putProjectMetadata(
|
|
|
+ ProjectMetadata.builder(projectId)
|
|
|
+ .put(IndexTemplateMetadata.builder(HISTORY_TEMPLATE_NAME).patterns(randomIndexPatterns()))
|
|
|
+ .build()
|
|
|
+ )
|
|
|
.nodes(new DiscoveryNodes.Builder().masterNodeId("node_1").localNodeId("node_1").add(newNode("node_1")))
|
|
|
- .routingTable(RoutingTable.builder().add(watchRoutingTable).build())
|
|
|
+ .putRoutingTable(projectId, RoutingTable.builder().add(watchRoutingTable).build())
|
|
|
.build();
|
|
|
|
|
|
when(watcherService.validate(clusterState)).thenReturn(true);
|
|
@@ -126,8 +133,12 @@ public class WatcherLifeCycleServiceTests extends ESTestCase {
|
|
|
IndexRoutingTable watchRoutingTable = IndexRoutingTable.builder(new Index(Watch.INDEX, "foo")).build();
|
|
|
ClusterState clusterState = ClusterState.builder(new ClusterName("my-cluster"))
|
|
|
.nodes(new DiscoveryNodes.Builder().masterNodeId("node_1").localNodeId("node_1").add(newNode("node_1")))
|
|
|
- .routingTable(RoutingTable.builder().add(watchRoutingTable).build())
|
|
|
- .metadata(Metadata.builder().put(IndexTemplateMetadata.builder(HISTORY_TEMPLATE_NAME).patterns(randomIndexPatterns())).build())
|
|
|
+ .putRoutingTable(projectId, RoutingTable.builder().add(watchRoutingTable).build())
|
|
|
+ .putProjectMetadata(
|
|
|
+ ProjectMetadata.builder(projectId)
|
|
|
+ .put(IndexTemplateMetadata.builder(HISTORY_TEMPLATE_NAME).patterns(randomIndexPatterns()))
|
|
|
+ .build()
|
|
|
+ )
|
|
|
.build();
|
|
|
|
|
|
when(watcherService.validate(clusterState)).thenReturn(true);
|
|
@@ -152,18 +163,18 @@ public class WatcherLifeCycleServiceTests extends ESTestCase {
|
|
|
// required
|
|
|
.numberOfShards(1)
|
|
|
.numberOfReplicas(0);
|
|
|
- Metadata.Builder metadataBuilder = Metadata.builder()
|
|
|
+ ProjectMetadata.Builder metadataBuilder = ProjectMetadata.builder(projectId)
|
|
|
.put(indexMetadataBuilder)
|
|
|
.put(IndexTemplateMetadata.builder(HISTORY_TEMPLATE_NAME).patterns(randomIndexPatterns()));
|
|
|
if (randomBoolean()) {
|
|
|
metadataBuilder.putCustom(WatcherMetadata.TYPE, new WatcherMetadata(false));
|
|
|
}
|
|
|
- Metadata metadata = metadataBuilder.build();
|
|
|
+ ProjectMetadata metadata = metadataBuilder.build();
|
|
|
IndexRoutingTable indexRoutingTable = indexRoutingTableBuilder.build();
|
|
|
ClusterState clusterState = ClusterState.builder(new ClusterName("my-cluster"))
|
|
|
.nodes(new DiscoveryNodes.Builder().masterNodeId("node_1").localNodeId("node_1").add(newNode("node_1")))
|
|
|
- .routingTable(RoutingTable.builder().add(indexRoutingTable).build())
|
|
|
- .metadata(metadata)
|
|
|
+ .putRoutingTable(projectId, RoutingTable.builder().add(indexRoutingTable).build())
|
|
|
+ .putProjectMetadata(metadata)
|
|
|
.build();
|
|
|
|
|
|
when(watcherService.validate(clusterState)).thenReturn(true);
|
|
@@ -171,8 +182,8 @@ public class WatcherLifeCycleServiceTests extends ESTestCase {
|
|
|
// mark watcher manually as stopped
|
|
|
ClusterState stoppedClusterState = ClusterState.builder(new ClusterName("my-cluster"))
|
|
|
.nodes(new DiscoveryNodes.Builder().masterNodeId("node_1").localNodeId("node_1").add(newNode("node_1")))
|
|
|
- .routingTable(RoutingTable.builder().add(indexRoutingTable).build())
|
|
|
- .metadata(Metadata.builder(metadata).putCustom(WatcherMetadata.TYPE, new WatcherMetadata(true)).build())
|
|
|
+ .putRoutingTable(projectId, RoutingTable.builder().add(indexRoutingTable).build())
|
|
|
+ .putProjectMetadata(ProjectMetadata.builder(metadata).putCustom(WatcherMetadata.TYPE, new WatcherMetadata(true)).build())
|
|
|
.build();
|
|
|
|
|
|
lifeCycleService.clusterChanged(new ClusterChangedEvent("foo", stoppedClusterState, clusterState));
|
|
@@ -210,25 +221,25 @@ public class WatcherLifeCycleServiceTests extends ESTestCase {
|
|
|
// required
|
|
|
.numberOfShards(1)
|
|
|
.numberOfReplicas(0);
|
|
|
- Metadata.Builder metadataBuilder = Metadata.builder()
|
|
|
+ ProjectMetadata.Builder metadataBuilder = ProjectMetadata.builder(projectId)
|
|
|
.put(indexMetadataBuilder)
|
|
|
.put(IndexTemplateMetadata.builder(HISTORY_TEMPLATE_NAME).patterns(randomIndexPatterns()));
|
|
|
if (randomBoolean()) {
|
|
|
metadataBuilder.putCustom(WatcherMetadata.TYPE, new WatcherMetadata(false));
|
|
|
}
|
|
|
- Metadata metadata = metadataBuilder.build();
|
|
|
+ ProjectMetadata metadata = metadataBuilder.build();
|
|
|
IndexRoutingTable indexRoutingTable = indexRoutingTableBuilder.build();
|
|
|
ClusterState clusterState = ClusterState.builder(new ClusterName("my-cluster"))
|
|
|
.nodes(new DiscoveryNodes.Builder().masterNodeId("node_1").localNodeId("node_1").add(newNode("node_1")))
|
|
|
- .routingTable(RoutingTable.builder().add(indexRoutingTable).build())
|
|
|
- .metadata(metadata)
|
|
|
+ .putRoutingTable(projectId, RoutingTable.builder().add(indexRoutingTable).build())
|
|
|
+ .putProjectMetadata(metadata)
|
|
|
.build();
|
|
|
|
|
|
// mark watcher manually as stopped
|
|
|
ClusterState stoppedClusterState = ClusterState.builder(new ClusterName("my-cluster"))
|
|
|
.nodes(new DiscoveryNodes.Builder().masterNodeId("node_1").localNodeId("node_1").add(newNode("node_1")))
|
|
|
- .routingTable(RoutingTable.builder().add(indexRoutingTable).build())
|
|
|
- .metadata(Metadata.builder(metadata).putCustom(WatcherMetadata.TYPE, new WatcherMetadata(true)).build())
|
|
|
+ .putRoutingTable(projectId, RoutingTable.builder().add(indexRoutingTable).build())
|
|
|
+ .putProjectMetadata(ProjectMetadata.builder(metadata).putCustom(WatcherMetadata.TYPE, new WatcherMetadata(true)).build())
|
|
|
.build();
|
|
|
|
|
|
lifeCycleService.clusterChanged(new ClusterChangedEvent("foo", stoppedClusterState, clusterState));
|
|
@@ -323,23 +334,22 @@ public class WatcherLifeCycleServiceTests extends ESTestCase {
|
|
|
// required
|
|
|
.numberOfShards(1)
|
|
|
.numberOfReplicas(0);
|
|
|
- Metadata metadata = Metadata.builder()
|
|
|
+ ProjectMetadata metadata = ProjectMetadata.builder(projectId)
|
|
|
.put(IndexTemplateMetadata.builder(HISTORY_TEMPLATE_NAME).patterns(randomIndexPatterns()))
|
|
|
.put(indexMetadataBuilder)
|
|
|
.build();
|
|
|
- ProjectMetadata project = metadata.projects().values().iterator().next();
|
|
|
|
|
|
- GlobalRoutingTable globalRoutingTable = GlobalRoutingTable.builder().put(project.id(), routingTable).build();
|
|
|
+ GlobalRoutingTable globalRoutingTable = GlobalRoutingTable.builder().put(metadata.id(), routingTable).build();
|
|
|
|
|
|
- ClusterState emptyState = ClusterState.builder(new ClusterName("my-cluster")).nodes(nodes).metadata(metadata).build();
|
|
|
+ ClusterState emptyState = ClusterState.builder(new ClusterName("my-cluster")).nodes(nodes).putProjectMetadata(metadata).build();
|
|
|
ClusterState stateWithMasterNode1 = ClusterState.builder(new ClusterName("my-cluster"))
|
|
|
.nodes(nodes.withMasterNodeId("node_1"))
|
|
|
- .metadata(metadata)
|
|
|
+ .putProjectMetadata(metadata)
|
|
|
.routingTable(globalRoutingTable)
|
|
|
.build();
|
|
|
ClusterState stateWithMasterNode2 = ClusterState.builder(new ClusterName("my-cluster"))
|
|
|
.nodes(nodes.withMasterNodeId("node_2"))
|
|
|
- .metadata(metadata)
|
|
|
+ .putProjectMetadata(metadata)
|
|
|
.routingTable(globalRoutingTable)
|
|
|
.build();
|
|
|
|
|
@@ -369,8 +379,8 @@ public class WatcherLifeCycleServiceTests extends ESTestCase {
|
|
|
.build();
|
|
|
ClusterState clusterStateWithLocalShards = ClusterState.builder(new ClusterName("my-cluster"))
|
|
|
.nodes(nodes)
|
|
|
- .routingTable(RoutingTable.builder().add(watchRoutingTable).build())
|
|
|
- .metadata(Metadata.builder().put(indexMetadata, false))
|
|
|
+ .putRoutingTable(projectId, RoutingTable.builder().add(watchRoutingTable).build())
|
|
|
+ .putProjectMetadata(ProjectMetadata.builder(projectId).put(indexMetadata, false))
|
|
|
.build();
|
|
|
|
|
|
// shard moved over to node 2
|
|
@@ -383,8 +393,8 @@ public class WatcherLifeCycleServiceTests extends ESTestCase {
|
|
|
.build();
|
|
|
ClusterState clusterStateWithoutLocalShards = ClusterState.builder(new ClusterName("my-cluster"))
|
|
|
.nodes(nodes)
|
|
|
- .routingTable(RoutingTable.builder().add(watchRoutingTableNode2).build())
|
|
|
- .metadata(Metadata.builder().put(indexMetadata, false))
|
|
|
+ .putRoutingTable(projectId, RoutingTable.builder().add(watchRoutingTableNode2).build())
|
|
|
+ .putProjectMetadata(ProjectMetadata.builder(projectId).put(indexMetadata, false))
|
|
|
.build();
|
|
|
|
|
|
// set current allocation ids
|
|
@@ -431,8 +441,8 @@ public class WatcherLifeCycleServiceTests extends ESTestCase {
|
|
|
|
|
|
ClusterState stateWithPrimaryShard = ClusterState.builder(new ClusterName("my-cluster"))
|
|
|
.nodes(discoveryNodes)
|
|
|
- .routingTable(RoutingTable.builder().add(previousWatchRoutingTable).build())
|
|
|
- .metadata(Metadata.builder().put(indexMetadata, false))
|
|
|
+ .putRoutingTable(projectId, RoutingTable.builder().add(previousWatchRoutingTable).build())
|
|
|
+ .putProjectMetadata(ProjectMetadata.builder(projectId).put(indexMetadata, false))
|
|
|
.build();
|
|
|
|
|
|
// add a replica in the local node
|
|
@@ -452,8 +462,8 @@ public class WatcherLifeCycleServiceTests extends ESTestCase {
|
|
|
|
|
|
ClusterState stateWithReplicaAdded = ClusterState.builder(new ClusterName("my-cluster"))
|
|
|
.nodes(discoveryNodes)
|
|
|
- .routingTable(RoutingTable.builder().add(currentWatchRoutingTable).build())
|
|
|
- .metadata(Metadata.builder().put(indexMetadata, false))
|
|
|
+ .putRoutingTable(projectId, RoutingTable.builder().add(currentWatchRoutingTable).build())
|
|
|
+ .putProjectMetadata(ProjectMetadata.builder(projectId).put(indexMetadata, false))
|
|
|
.build();
|
|
|
|
|
|
// randomize between addition or removal of a replica
|
|
@@ -497,9 +507,9 @@ public class WatcherLifeCycleServiceTests extends ESTestCase {
|
|
|
.settings(indexSettings(IndexVersion.current(), 1, 0));
|
|
|
|
|
|
ClusterState previousState = ClusterState.builder(new ClusterName("my-cluster"))
|
|
|
- .metadata(Metadata.builder().put(indexMetadataBuilder))
|
|
|
+ .putProjectMetadata(ProjectMetadata.builder(projectId).put(indexMetadataBuilder))
|
|
|
.nodes(new DiscoveryNodes.Builder().masterNodeId("node_1").localNodeId("node_1").add(node1).add(node2).add(node3))
|
|
|
- .routingTable(RoutingTable.builder().add(indexRoutingTable).build())
|
|
|
+ .putRoutingTable(projectId, RoutingTable.builder().add(indexRoutingTable).build())
|
|
|
.build();
|
|
|
|
|
|
IndexMetadata.Builder newIndexMetadataBuilder = IndexMetadata.builder(Watch.INDEX)
|
|
@@ -508,9 +518,9 @@ public class WatcherLifeCycleServiceTests extends ESTestCase {
|
|
|
ShardRouting replicaShardRouting = TestShardRouting.newShardRouting(shardId, "node3", false, STARTED);
|
|
|
IndexRoutingTable.Builder newRoutingTable = IndexRoutingTable.builder(index).addShard(shardRouting).addShard(replicaShardRouting);
|
|
|
ClusterState currentState = ClusterState.builder(new ClusterName("my-cluster"))
|
|
|
- .metadata(Metadata.builder().put(newIndexMetadataBuilder))
|
|
|
+ .putProjectMetadata(ProjectMetadata.builder(projectId).put(newIndexMetadataBuilder))
|
|
|
.nodes(new DiscoveryNodes.Builder().masterNodeId("node_1").localNodeId("node_1").add(node1).add(node2).add(node3))
|
|
|
- .routingTable(RoutingTable.builder().add(newRoutingTable).build())
|
|
|
+ .putRoutingTable(projectId, RoutingTable.builder().add(newRoutingTable).build())
|
|
|
.build();
|
|
|
|
|
|
lifeCycleService.clusterChanged(new ClusterChangedEvent("any", currentState, previousState));
|
|
@@ -531,8 +541,8 @@ public class WatcherLifeCycleServiceTests extends ESTestCase {
|
|
|
|
|
|
ClusterState clusterStateWithWatcherIndex = ClusterState.builder(new ClusterName("my-cluster"))
|
|
|
.nodes(nodes)
|
|
|
- .routingTable(RoutingTable.builder().add(watchRoutingTable).build())
|
|
|
- .metadata(Metadata.builder().put(newIndexMetadataBuilder))
|
|
|
+ .putRoutingTable(projectId, RoutingTable.builder().add(watchRoutingTable).build())
|
|
|
+ .putProjectMetadata(ProjectMetadata.builder(projectId).put(newIndexMetadataBuilder))
|
|
|
.build();
|
|
|
|
|
|
ClusterState clusterStateWithoutWatcherIndex = ClusterState.builder(new ClusterName("my-cluster")).nodes(nodes).build();
|
|
@@ -556,12 +566,12 @@ public class WatcherLifeCycleServiceTests extends ESTestCase {
|
|
|
public void testWatcherServiceDoesNotStartIfIndexTemplatesAreMissing() throws Exception {
|
|
|
DiscoveryNodes nodes = new DiscoveryNodes.Builder().masterNodeId("node_1").localNodeId("node_1").add(newNode("node_1")).build();
|
|
|
|
|
|
- Metadata.Builder metadataBuilder = Metadata.builder();
|
|
|
+ ProjectMetadata.Builder metadataBuilder = ProjectMetadata.builder(projectId);
|
|
|
boolean isHistoryTemplateAdded = randomBoolean();
|
|
|
if (isHistoryTemplateAdded) {
|
|
|
metadataBuilder.put(IndexTemplateMetadata.builder(HISTORY_TEMPLATE_NAME).patterns(randomIndexPatterns()));
|
|
|
}
|
|
|
- ClusterState state = ClusterState.builder(new ClusterName("my-cluster")).nodes(nodes).metadata(metadataBuilder).build();
|
|
|
+ ClusterState state = ClusterState.builder(new ClusterName("my-cluster")).nodes(nodes).putProjectMetadata(metadataBuilder).build();
|
|
|
when(watcherService.validate(eq(state))).thenReturn(true);
|
|
|
|
|
|
lifeCycleService.clusterChanged(new ClusterChangedEvent("any", state, state));
|
|
@@ -602,12 +612,12 @@ public class WatcherLifeCycleServiceTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testDataNodeWithoutDataCanStart() {
|
|
|
- Metadata metadata = Metadata.builder()
|
|
|
+ ProjectMetadata metadata = ProjectMetadata.builder(projectId)
|
|
|
.put(IndexTemplateMetadata.builder(HISTORY_TEMPLATE_NAME).patterns(randomIndexPatterns()))
|
|
|
.build();
|
|
|
ClusterState state = ClusterState.builder(new ClusterName("my-cluster"))
|
|
|
.nodes(new DiscoveryNodes.Builder().masterNodeId("node_1").localNodeId("node_1").add(newNode("node_1")))
|
|
|
- .metadata(metadata)
|
|
|
+ .putProjectMetadata(metadata)
|
|
|
.build();
|
|
|
|
|
|
lifeCycleService.clusterChanged(new ClusterChangedEvent("test", state, state));
|
|
@@ -641,8 +651,8 @@ public class WatcherLifeCycleServiceTests extends ESTestCase {
|
|
|
|
|
|
ClusterState previousState = ClusterState.builder(new ClusterName("my-cluster"))
|
|
|
.nodes(previousDiscoveryNodes)
|
|
|
- .routingTable(RoutingTable.builder().add(previousWatchRoutingTable).build())
|
|
|
- .metadata(Metadata.builder().put(indexMetadata, false))
|
|
|
+ .putRoutingTable(projectId, RoutingTable.builder().add(previousWatchRoutingTable).build())
|
|
|
+ .putProjectMetadata(ProjectMetadata.builder(projectId).put(indexMetadata, false))
|
|
|
.build();
|
|
|
|
|
|
ShardRouting nowPrimaryShardRouting = replicaShardRouting.moveActiveReplicaToPrimary();
|
|
@@ -655,8 +665,8 @@ public class WatcherLifeCycleServiceTests extends ESTestCase {
|
|
|
|
|
|
ClusterState currentState = ClusterState.builder(new ClusterName("my-cluster"))
|
|
|
.nodes(currentDiscoveryNodes)
|
|
|
- .routingTable(RoutingTable.builder().add(currentWatchRoutingTable).build())
|
|
|
- .metadata(Metadata.builder().put(indexMetadata, false))
|
|
|
+ .putRoutingTable(projectId, RoutingTable.builder().add(currentWatchRoutingTable).build())
|
|
|
+ .putProjectMetadata(ProjectMetadata.builder(projectId).put(indexMetadata, false))
|
|
|
.build();
|
|
|
|
|
|
// initialize the previous state, so all the allocation ids are loaded
|
|
@@ -681,18 +691,18 @@ public class WatcherLifeCycleServiceTests extends ESTestCase {
|
|
|
// required
|
|
|
.numberOfShards(1)
|
|
|
.numberOfReplicas(0);
|
|
|
- Metadata metadata = Metadata.builder()
|
|
|
+ ProjectMetadata metadata = ProjectMetadata.builder(projectId)
|
|
|
.put(IndexTemplateMetadata.builder(HISTORY_TEMPLATE_NAME).patterns(randomIndexPatterns()))
|
|
|
.put(indexMetadataBuilder)
|
|
|
.build();
|
|
|
ClusterState state = ClusterState.builder(new ClusterName("my-cluster"))
|
|
|
.nodes(new DiscoveryNodes.Builder().masterNodeId("node_1").localNodeId("node_1").add(newNode("node_1")))
|
|
|
- .routingTable(RoutingTable.builder().add(indexRoutingTableBuilder.build()).build())
|
|
|
- .metadata(metadata)
|
|
|
+ .putRoutingTable(projectId, RoutingTable.builder().add(indexRoutingTableBuilder.build()).build())
|
|
|
+ .putProjectMetadata(metadata)
|
|
|
.build();
|
|
|
ClusterState emptyState = ClusterState.builder(new ClusterName("my-cluster"))
|
|
|
.nodes(new DiscoveryNodes.Builder().masterNodeId("node_1").localNodeId("node_1").add(newNode("node_1")))
|
|
|
- .metadata(metadata)
|
|
|
+ .putProjectMetadata(metadata)
|
|
|
.build();
|
|
|
|
|
|
when(watcherService.validate(state)).thenReturn(true);
|