diff --git a/server/src/internalClusterTest/java/org/elasticsearch/cluster/ClusterStateDiffIT.java b/server/src/internalClusterTest/java/org/elasticsearch/cluster/ClusterStateDiffIT.java index 9c9056fcf6326..67cead7b17371 100644 --- a/server/src/internalClusterTest/java/org/elasticsearch/cluster/ClusterStateDiffIT.java +++ b/server/src/internalClusterTest/java/org/elasticsearch/cluster/ClusterStateDiffIT.java @@ -26,6 +26,7 @@ import org.elasticsearch.cluster.metadata.IndexTemplateMetadata; import org.elasticsearch.cluster.metadata.Metadata; import org.elasticsearch.cluster.metadata.NodesShutdownMetadata; +import org.elasticsearch.cluster.metadata.ProjectId; import org.elasticsearch.cluster.node.DiscoveryNode; import org.elasticsearch.cluster.node.DiscoveryNodeUtils; import org.elasticsearch.cluster.node.DiscoveryNodes; @@ -45,6 +46,7 @@ import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.util.set.Sets; +import org.elasticsearch.core.FixForMultiProject; import org.elasticsearch.gateway.GatewayService; import org.elasticsearch.index.Index; import org.elasticsearch.index.IndexVersion; @@ -706,12 +708,15 @@ public Metadata.Builder put(Metadata.Builder builder, Metadata.ProjectCustom par @Override public Metadata.Builder remove(Metadata.Builder builder, String name) { + @FixForMultiProject + final var projectBuilder = builder.getProject(ProjectId.DEFAULT); if (IndexGraveyard.TYPE.equals(name)) { // there must always be at least an empty graveyard - return builder.indexGraveyard(IndexGraveyard.builder().build()); + projectBuilder.indexGraveyard(IndexGraveyard.builder().build()); } else { - return builder.removeProjectCustom(name); + projectBuilder.removeCustom(name); } + return builder; } @Override diff --git a/server/src/internalClusterTest/java/org/elasticsearch/snapshots/CustomMetadataContextIT.java b/server/src/internalClusterTest/java/org/elasticsearch/snapshots/CustomMetadataContextIT.java index 08b4556dc4012..e4571789f9ec8 100644 --- a/server/src/internalClusterTest/java/org/elasticsearch/snapshots/CustomMetadataContextIT.java +++ b/server/src/internalClusterTest/java/org/elasticsearch/snapshots/CustomMetadataContextIT.java @@ -91,13 +91,13 @@ public void testShouldRestoreOnlySnapshotMetadata() throws Exception { assertThat(getSnapshot("test-repo", "test-snapshot").state(), equalTo(SnapshotState.SUCCESS)); logger.info("update custom persistent metadata"); - updateClusterState(currentState -> currentState.copyAndUpdateMetadata(metadataBuilder -> { + updateClusterState(currentState -> currentState.copyAndUpdateProject(currentState.metadata().getProject().id(), builder -> { if (isSnapshotMetadataSet == false || randomBoolean()) { - metadataBuilder.putCustom(SnapshotMetadata.TYPE, new SnapshotMetadata("after_snapshot_s")); + builder.putCustom(SnapshotMetadata.TYPE, new SnapshotMetadata("after_snapshot_s")); } else { - metadataBuilder.removeProjectCustom(SnapshotMetadata.TYPE); + builder.removeCustom(SnapshotMetadata.TYPE); } - metadataBuilder.putCustom(ApiMetadata.TYPE, new ApiMetadata("after_snapshot_ns")); + builder.putCustom(ApiMetadata.TYPE, new ApiMetadata("after_snapshot_ns")); })); logger.info("restore snapshot"); diff --git a/server/src/main/java/org/elasticsearch/cluster/coordination/RemoveCustomsCommand.java b/server/src/main/java/org/elasticsearch/cluster/coordination/RemoveCustomsCommand.java index b1d284a1b5fad..d4ca5c82333e2 100644 --- a/server/src/main/java/org/elasticsearch/cluster/coordination/RemoveCustomsCommand.java +++ b/server/src/main/java/org/elasticsearch/cluster/coordination/RemoveCustomsCommand.java @@ -16,6 +16,8 @@ import org.elasticsearch.cli.UserException; import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.metadata.Metadata; +import org.elasticsearch.cluster.metadata.ProjectId; +import org.elasticsearch.cluster.metadata.ProjectMetadata; import org.elasticsearch.common.regex.Regex; import org.elasticsearch.core.FixForMultiProject; import org.elasticsearch.core.Tuple; @@ -66,6 +68,8 @@ protected void processDataPaths(Terminal terminal, Path[] dataPaths, OptionSet o "project scoped custom metadata names: " + oldClusterState.metadata().getProject().customs().keySet() ); final Metadata.Builder metadataBuilder = Metadata.builder(oldClusterState.metadata()); + @FixForMultiProject + final ProjectMetadata.Builder projectBuilder = metadataBuilder.getProject(ProjectId.DEFAULT); for (String customToRemove : customsToRemove) { @FixForMultiProject boolean matched = false; @@ -82,7 +86,7 @@ protected void processDataPaths(Terminal terminal, Path[] dataPaths, OptionSet o } for (String customKey : oldClusterState.metadata().getProject().customs().keySet()) { if (Regex.simpleMatch(customToRemove, customKey)) { - metadataBuilder.removeProjectCustom(customKey); + projectBuilder.removeCustom(customKey); if (matched == false) { terminal.println("The following customs will be removed:"); } diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java b/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java index 613e50228ef7a..dc55f4516d252 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java @@ -1743,18 +1743,6 @@ public Builder putProjectCustom(String type, ProjectCustom custom) { return this; } - @Deprecated(forRemoval = true) - public Builder removeProjectCustom(String type) { - getSingleProject().removeCustom(type); - return this; - } - - @Deprecated(forRemoval = true) - public Builder removeProjectCustomIf(BiPredicate p) { - getSingleProject().removeCustomIf(p); - return this; - } - @Deprecated(forRemoval = true) public Builder projectCustoms(Map projectCustoms) { projectCustoms.forEach((key, value) -> Objects.requireNonNull(value, key)); diff --git a/server/src/test/java/org/elasticsearch/cluster/ClusterChangedEventTests.java b/server/src/test/java/org/elasticsearch/cluster/ClusterChangedEventTests.java index 8c04ddd6163ff..ed5f6cf3ca411 100644 --- a/server/src/test/java/org/elasticsearch/cluster/ClusterChangedEventTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/ClusterChangedEventTests.java @@ -681,10 +681,12 @@ private static ClusterState nextState( final ClusterState.Builder builder = ClusterState.builder(previousState); builder.stateUUID(UUIDs.randomBase64UUID()); Metadata.Builder metadataBuilder = Metadata.builder(previousState.metadata()); + ProjectMetadata.Builder projectBuilder = ProjectMetadata.builder(previousState.metadata().projects().values().iterator().next()); metadataBuilder.removeCustomIf((ignore, custom) -> custom instanceof TestClusterCustomMetadata); - metadataBuilder.removeProjectCustomIf((ignore, custom) -> custom instanceof TestProjectCustomMetadata); + projectBuilder.removeCustomIf((ignore, custom) -> custom instanceof TestProjectCustomMetadata); clusterCustoms.forEach(clusterCustom -> metadataBuilder.putCustom(clusterCustom.getWriteableName(), clusterCustom)); - projectCustoms.forEach(projectCustom -> metadataBuilder.putCustom(projectCustom.getWriteableName(), projectCustom)); + projectCustoms.forEach(projectCustom -> projectBuilder.putCustom(projectCustom.getWriteableName(), projectCustom)); + metadataBuilder.put(projectBuilder); builder.metadata(metadataBuilder); return builder.build(); } diff --git a/server/src/test/java/org/elasticsearch/cluster/metadata/MetadataTests.java b/server/src/test/java/org/elasticsearch/cluster/metadata/MetadataTests.java index 612c387af856c..b36b9de3dab8a 100644 --- a/server/src/test/java/org/elasticsearch/cluster/metadata/MetadataTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/metadata/MetadataTests.java @@ -1391,20 +1391,6 @@ public void testBuilderRemoveClusterCustomIf() { assertThat(metadata.custom("custom2"), sameInstance(custom2)); } - public void testBuilderRemoveProjectCustomIf() { - var custom1 = new TestProjectCustomMetadata(); - var custom2 = new TestProjectCustomMetadata(); - var builder = Metadata.builder(); - builder.putCustom("custom1", custom1); - builder.putCustom("custom2", custom2); - - builder.removeProjectCustomIf((key, value) -> Objects.equals(key, "custom1")); - - var metadata = builder.build(); - assertThat(metadata.getProject().custom("custom1"), nullValue()); - assertThat(metadata.getProject().custom("custom2"), sameInstance(custom2)); - } - public void testBuilderRejectsDataStreamThatConflictsWithIndex() { final String dataStreamName = "my-data-stream"; IndexMetadata idx = createFirstBackingIndex(dataStreamName).build(); diff --git a/server/src/test/java/org/elasticsearch/persistent/PersistentTasksClusterServiceTests.java b/server/src/test/java/org/elasticsearch/persistent/PersistentTasksClusterServiceTests.java index f0f87e7ff641b..b79f2f6517189 100644 --- a/server/src/test/java/org/elasticsearch/persistent/PersistentTasksClusterServiceTests.java +++ b/server/src/test/java/org/elasticsearch/persistent/PersistentTasksClusterServiceTests.java @@ -20,6 +20,7 @@ import org.elasticsearch.cluster.metadata.IndexMetadata; import org.elasticsearch.cluster.metadata.Metadata; import org.elasticsearch.cluster.metadata.NodesShutdownMetadata; +import org.elasticsearch.cluster.metadata.ProjectMetadata; import org.elasticsearch.cluster.metadata.SingleNodeShutdownMetadata; import org.elasticsearch.cluster.node.DiscoveryNode; import org.elasticsearch.cluster.node.DiscoveryNodeRole; @@ -933,7 +934,10 @@ private ClusterState insignificantChange(ClusterState clusterState) { if (scope == PersistentTasksExecutor.Scope.CLUSTER) { metadata = Metadata.builder(clusterState.metadata()).removeCustom(ClusterPersistentTasksCustomMetadata.TYPE); } else { - metadata = Metadata.builder(clusterState.metadata()).removeProjectCustom(PersistentTasksCustomMetadata.TYPE); + metadata = Metadata.builder(clusterState.metadata()) + .put( + ProjectMetadata.builder(clusterState.metadata().getProject()).removeCustom(PersistentTasksCustomMetadata.TYPE) + ); } return builder.metadata(metadata).build(); } diff --git a/x-pack/plugin/ccr/src/test/java/org/elasticsearch/xpack/CcrIntegTestCase.java b/x-pack/plugin/ccr/src/test/java/org/elasticsearch/xpack/CcrIntegTestCase.java index 697efcca0f159..644a2a074ac59 100644 --- a/x-pack/plugin/ccr/src/test/java/org/elasticsearch/xpack/CcrIntegTestCase.java +++ b/x-pack/plugin/ccr/src/test/java/org/elasticsearch/xpack/CcrIntegTestCase.java @@ -31,7 +31,7 @@ import org.elasticsearch.cluster.RestoreInProgress; import org.elasticsearch.cluster.health.ClusterHealthStatus; import org.elasticsearch.cluster.metadata.IndexMetadata; -import org.elasticsearch.cluster.metadata.Metadata; +import org.elasticsearch.cluster.metadata.ProjectMetadata; import org.elasticsearch.cluster.routing.ShardRouting; import org.elasticsearch.cluster.routing.UnassignedInfo; import org.elasticsearch.cluster.routing.allocation.DiskThresholdSettings; @@ -865,10 +865,10 @@ static void removeCCRRelatedMetadataFromClusterState(ClusterService clusterServi public ClusterState execute(ClusterState currentState) throws Exception { AutoFollowMetadata empty = new AutoFollowMetadata(Collections.emptyMap(), Collections.emptyMap(), Collections.emptyMap()); ClusterState.Builder newState = ClusterState.builder(currentState); - newState.metadata( - Metadata.builder(currentState.getMetadata()) + newState.putProjectMetadata( + ProjectMetadata.builder(currentState.metadata().getProject()) .putCustom(AutoFollowMetadata.TYPE, empty) - .removeProjectCustom(PersistentTasksCustomMetadata.TYPE) + .removeCustom(PersistentTasksCustomMetadata.TYPE) .build() ); return newState.build(); diff --git a/x-pack/plugin/migrate/src/main/java/org/elasticsearch/system_indices/task/SystemIndexMigrator.java b/x-pack/plugin/migrate/src/main/java/org/elasticsearch/system_indices/task/SystemIndexMigrator.java index 57e7af8411944..82d9d190ffc20 100644 --- a/x-pack/plugin/migrate/src/main/java/org/elasticsearch/system_indices/task/SystemIndexMigrator.java +++ b/x-pack/plugin/migrate/src/main/java/org/elasticsearch/system_indices/task/SystemIndexMigrator.java @@ -29,7 +29,6 @@ import org.elasticsearch.cluster.ClusterStateUpdateTask; import org.elasticsearch.cluster.metadata.IndexMetadata; import org.elasticsearch.cluster.metadata.IndexTemplateMetadata; -import org.elasticsearch.cluster.metadata.Metadata; import org.elasticsearch.cluster.metadata.MetadataIndexTemplateService; import org.elasticsearch.cluster.metadata.ProjectMetadata; import org.elasticsearch.cluster.service.ClusterService; @@ -863,9 +862,10 @@ private static void clearResults(ClusterService clusterService, ActionListener