Skip to content

Commit 6e66e5c

Browse files
committed
Remove usages of Metadata.Builder#indexGraveyard
And replace it with appropriate calls to the equivalent method on `ProjectMetadata.Builder`. In most cases this _does not_ make the code project aware, but does reduce the number of deprecated methods in use. Concerns both the getter and the setter.
1 parent f18f4ee commit 6e66e5c

File tree

8 files changed

+48
-44
lines changed

8 files changed

+48
-44
lines changed

server/src/internalClusterTest/java/org/elasticsearch/cluster/ClusterStateDiffIT.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.elasticsearch.cluster.metadata.IndexTemplateMetadata;
2727
import org.elasticsearch.cluster.metadata.Metadata;
2828
import org.elasticsearch.cluster.metadata.NodesShutdownMetadata;
29+
import org.elasticsearch.cluster.metadata.ProjectId;
2930
import org.elasticsearch.cluster.node.DiscoveryNode;
3031
import org.elasticsearch.cluster.node.DiscoveryNodeUtils;
3132
import org.elasticsearch.cluster.node.DiscoveryNodes;
@@ -45,6 +46,7 @@
4546
import org.elasticsearch.common.io.stream.StreamInput;
4647
import org.elasticsearch.common.settings.Settings;
4748
import org.elasticsearch.common.util.set.Sets;
49+
import org.elasticsearch.core.FixForMultiProject;
4850
import org.elasticsearch.gateway.GatewayService;
4951
import org.elasticsearch.index.Index;
5052
import org.elasticsearch.index.IndexVersion;
@@ -706,12 +708,15 @@ public Metadata.Builder put(Metadata.Builder builder, Metadata.ProjectCustom par
706708

707709
@Override
708710
public Metadata.Builder remove(Metadata.Builder builder, String name) {
711+
@FixForMultiProject
712+
final var projectBuilder = builder.getProject(ProjectId.DEFAULT);
709713
if (IndexGraveyard.TYPE.equals(name)) {
710714
// there must always be at least an empty graveyard
711-
return builder.indexGraveyard(IndexGraveyard.builder().build());
715+
projectBuilder.indexGraveyard(IndexGraveyard.builder().build());
712716
} else {
713-
return builder.removeProjectCustom(name);
717+
projectBuilder.removeCustom(name);
714718
}
719+
return builder;
715720
}
716721

717722
@Override

server/src/main/java/org/elasticsearch/action/admin/indices/dangling/delete/TransportDeleteDanglingIndexAction.java

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import org.elasticsearch.cluster.block.ClusterBlockException;
3030
import org.elasticsearch.cluster.metadata.IndexGraveyard;
3131
import org.elasticsearch.cluster.metadata.IndexMetadata;
32-
import org.elasticsearch.cluster.metadata.Metadata;
32+
import org.elasticsearch.cluster.metadata.ProjectMetadata;
3333
import org.elasticsearch.cluster.service.ClusterService;
3434
import org.elasticsearch.common.settings.Settings;
3535
import org.elasticsearch.core.SuppressForbidden;
@@ -126,9 +126,9 @@ private void submitUnbatchedTask(@SuppressWarnings("SameParameterValue") String
126126
}
127127

128128
private ClusterState deleteDanglingIndex(ClusterState currentState, Index indexToDelete) {
129-
final Metadata metaData = currentState.getMetadata();
129+
final var project = currentState.metadata().getProject();
130130

131-
for (Map.Entry<String, IndexMetadata> each : metaData.getProject().indices().entrySet()) {
131+
for (Map.Entry<String, IndexMetadata> each : project.indices().entrySet()) {
132132
if (indexToDelete.getUUID().equals(each.getValue().getIndexUUID())) {
133133
throw new IllegalArgumentException(
134134
"Refusing to delete dangling index "
@@ -143,18 +143,13 @@ private ClusterState deleteDanglingIndex(ClusterState currentState, Index indexT
143143
// By definition, a dangling index is an index not present in the cluster state and with no tombstone,
144144
// so we shouldn't reach this point if these conditions aren't met. For super-safety, however, check
145145
// that a tombstone doesn't already exist for this index.
146-
if (metaData.getProject().indexGraveyard().containsIndex(indexToDelete)) {
146+
if (project.indexGraveyard().containsIndex(indexToDelete)) {
147147
return currentState;
148148
}
149149

150-
Metadata.Builder metaDataBuilder = Metadata.builder(metaData);
151-
152-
final IndexGraveyard newGraveyard = IndexGraveyard.builder(metaDataBuilder.indexGraveyard())
153-
.addTombstone(indexToDelete)
154-
.build(settings);
155-
metaDataBuilder.indexGraveyard(newGraveyard);
156-
157-
return ClusterState.builder(currentState).metadata(metaDataBuilder.build()).build();
150+
final IndexGraveyard newGraveyard = IndexGraveyard.builder(project.indexGraveyard()).addTombstone(indexToDelete).build(settings);
151+
final ProjectMetadata updatedProject = ProjectMetadata.builder(project).indexGraveyard(newGraveyard).build();
152+
return ClusterState.builder(currentState).putProjectMetadata(updatedProject).build();
158153
}
159154

160155
@Override

server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1791,17 +1791,6 @@ public Builder removeReservedState(ReservedStateMetadata metadata) {
17911791
return this;
17921792
}
17931793

1794-
@Deprecated(forRemoval = true)
1795-
public Builder indexGraveyard(final IndexGraveyard indexGraveyard) {
1796-
getSingleProject().indexGraveyard(indexGraveyard);
1797-
return this;
1798-
}
1799-
1800-
@Deprecated(forRemoval = true)
1801-
public IndexGraveyard indexGraveyard() {
1802-
return getSingleProject().indexGraveyard();
1803-
}
1804-
18051794
@Deprecated(forRemoval = true)
18061795
public Builder updateSettings(Settings settings, String... indices) {
18071796
getSingleProject().updateSettings(settings, indices);

server/src/test/java/org/elasticsearch/cluster/ClusterChangedEventTests.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -700,19 +700,20 @@ private static ClusterState nextState(
700700
final ClusterState.Builder builder = ClusterState.builder(previousState);
701701
builder.stateUUID(UUIDs.randomBase64UUID());
702702
final Metadata.Builder metaBuilder = Metadata.builder(previousState.metadata());
703+
final ProjectMetadata.Builder projectBuilder = ProjectMetadata.builder(previousState.metadata().getProject());
703704
if (changeClusterUUID || addedIndices.size() > 0 || deletedIndices.size() > 0) {
704705
// there is some change in metadata cluster state
705706
if (changeClusterUUID) {
706707
metaBuilder.clusterUUID(UUIDs.randomBase64UUID());
707708
}
708709
for (Index index : addedIndices) {
709-
metaBuilder.put(createIndexMetadata(index), true);
710+
projectBuilder.put(createIndexMetadata(index), true);
710711
}
711712
for (Index index : deletedIndices) {
712-
metaBuilder.remove(index.getName());
713-
IndexGraveyard.Builder graveyardBuilder = IndexGraveyard.builder(metaBuilder.indexGraveyard());
713+
projectBuilder.remove(index.getName());
714+
IndexGraveyard.Builder graveyardBuilder = IndexGraveyard.builder(projectBuilder.indexGraveyard());
714715
graveyardBuilder.addTombstone(index);
715-
metaBuilder.indexGraveyard(graveyardBuilder.build());
716+
projectBuilder.indexGraveyard(graveyardBuilder.build());
716717
}
717718
builder.metadata(metaBuilder);
718719
}

server/src/test/java/org/elasticsearch/cluster/coordination/ElasticsearchNodeCommandTests.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,11 @@
1313
import org.elasticsearch.cluster.metadata.IndexGraveyard;
1414
import org.elasticsearch.cluster.metadata.IndexMetadata;
1515
import org.elasticsearch.cluster.metadata.Metadata;
16+
import org.elasticsearch.cluster.metadata.ProjectId;
17+
import org.elasticsearch.cluster.metadata.ProjectMetadata;
1618
import org.elasticsearch.common.UUIDs;
1719
import org.elasticsearch.common.bytes.BytesReference;
20+
import org.elasticsearch.core.FixForMultiProject;
1821
import org.elasticsearch.index.Index;
1922
import org.elasticsearch.indices.IndicesModule;
2023
import org.elasticsearch.test.ESTestCase;
@@ -93,8 +96,8 @@ private void runLoadStateTest(boolean hasMissingCustoms, boolean preserveUnknown
9396
}
9497

9598
private Metadata randomMeta() {
96-
Metadata.Builder mdBuilder = Metadata.builder();
97-
mdBuilder.generateClusterUuidIfNeeded();
99+
@FixForMultiProject // Pass random project ID when usages are namespaced.
100+
ProjectMetadata.Builder projectBuilder = ProjectMetadata.builder(ProjectId.DEFAULT);
98101
int numDelIndices = randomIntBetween(0, 5);
99102
final IndexGraveyard.Builder graveyard = IndexGraveyard.builder();
100103
for (int i = 0; i < numDelIndices; i++) {
@@ -105,11 +108,11 @@ private Metadata randomMeta() {
105108
for (int i = 0; i < numDataStreams; i++) {
106109
String dataStreamName = "name" + 1;
107110
IndexMetadata backingIndex = createFirstBackingIndex(dataStreamName).build();
108-
mdBuilder.put(newInstance(dataStreamName, List.of(backingIndex.getIndex())));
111+
projectBuilder.put(newInstance(dataStreamName, List.of(backingIndex.getIndex())));
109112
}
110113
}
111-
mdBuilder.indexGraveyard(graveyard.build());
112-
return mdBuilder.build();
114+
projectBuilder.indexGraveyard(graveyard.build());
115+
return Metadata.builder().generateClusterUuidIfNeeded().put(projectBuilder).build();
113116
}
114117

115118
@Override

server/src/test/java/org/elasticsearch/cluster/metadata/MetadataTests.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -607,27 +607,34 @@ public void testUnknownFieldIndexMetadata() throws IOException {
607607
}
608608

609609
public void testMetadataGlobalStateChangesOnIndexDeletions() {
610+
final var projectId = randomProjectIdOrDefault();
610611
IndexGraveyard.Builder builder = IndexGraveyard.builder();
611612
builder.addTombstone(new Index("idx1", UUIDs.randomBase64UUID()));
612-
final Metadata metadata1 = Metadata.builder().indexGraveyard(builder.build()).build();
613-
builder = IndexGraveyard.builder(metadata1.getProject().indexGraveyard());
613+
final Metadata metadata1 = Metadata.builder().put(ProjectMetadata.builder(projectId).indexGraveyard(builder.build())).build();
614+
builder = IndexGraveyard.builder(metadata1.getProject(projectId).indexGraveyard());
614615
builder.addTombstone(new Index("idx2", UUIDs.randomBase64UUID()));
615-
final Metadata metadata2 = Metadata.builder(metadata1).indexGraveyard(builder.build()).build();
616+
final Metadata metadata2 = Metadata.builder(metadata1)
617+
.put(ProjectMetadata.builder(metadata1.getProject(projectId)).indexGraveyard(builder.build()))
618+
.build();
616619
assertFalse("metadata not equal after adding index deletions", Metadata.isGlobalStateEquals(metadata1, metadata2));
617620
final Metadata metadata3 = Metadata.builder(metadata2).build();
618621
assertTrue("metadata equal when not adding index deletions", Metadata.isGlobalStateEquals(metadata2, metadata3));
619622
}
620623

621624
public void testXContentWithIndexGraveyard() throws IOException {
625+
final var projectId = randomProjectIdOrDefault();
622626
final IndexGraveyard graveyard = IndexGraveyardTests.createRandom();
623-
final Metadata originalMeta = Metadata.builder().indexGraveyard(graveyard).build();
627+
final Metadata originalMeta = Metadata.builder().put(ProjectMetadata.builder(projectId).indexGraveyard(graveyard)).build();
624628
final XContentBuilder builder = JsonXContent.contentBuilder();
625629
builder.startObject();
626630
Metadata.FORMAT.toXContent(builder, originalMeta);
627631
builder.endObject();
628632
try (XContentParser parser = createParser(JsonXContent.jsonXContent, BytesReference.bytes(builder))) {
629633
final Metadata fromXContentMeta = Metadata.fromXContent(parser);
630-
assertThat(fromXContentMeta.getProject().indexGraveyard(), equalTo(originalMeta.getProject().indexGraveyard()));
634+
assertThat(
635+
fromXContentMeta.getProject(projectId).indexGraveyard(),
636+
equalTo(originalMeta.getProject(projectId).indexGraveyard())
637+
);
631638
}
632639
}
633640

@@ -975,15 +982,16 @@ public void testGlobalStateEqualsCoordinationMetadata() {
975982
}
976983

977984
public void testSerializationWithIndexGraveyard() throws IOException {
985+
final var projectId = randomProjectIdOrDefault();
978986
final IndexGraveyard graveyard = IndexGraveyardTests.createRandom();
979-
final Metadata originalMeta = Metadata.builder().indexGraveyard(graveyard).build();
987+
final Metadata originalMeta = Metadata.builder().put(ProjectMetadata.builder(projectId).indexGraveyard(graveyard)).build();
980988
final BytesStreamOutput out = new BytesStreamOutput();
981989
originalMeta.writeTo(out);
982990
NamedWriteableRegistry namedWriteableRegistry = new NamedWriteableRegistry(ClusterModule.getNamedWriteables());
983991
final Metadata fromStreamMeta = Metadata.readFrom(
984992
new NamedWriteableAwareStreamInput(out.bytes().streamInput(), namedWriteableRegistry)
985993
);
986-
assertThat(fromStreamMeta.getProject().indexGraveyard(), equalTo(fromStreamMeta.getProject().indexGraveyard()));
994+
assertThat(fromStreamMeta.getProject(projectId).indexGraveyard(), equalTo(originalMeta.getProject(projectId).indexGraveyard()));
987995
}
988996

989997
public void testFindMappings() throws IOException {

server/src/test/java/org/elasticsearch/gateway/DanglingIndicesStateTests.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.elasticsearch.cluster.metadata.IndexGraveyard;
1414
import org.elasticsearch.cluster.metadata.IndexMetadata;
1515
import org.elasticsearch.cluster.metadata.Metadata;
16+
import org.elasticsearch.cluster.metadata.ProjectMetadata;
1617
import org.elasticsearch.cluster.service.ClusterService;
1718
import org.elasticsearch.common.settings.Settings;
1819
import org.elasticsearch.env.NodeEnvironment;
@@ -85,7 +86,9 @@ public void testDanglingIndicesNotReportedWhenTombstonePresent() throws Exceptio
8586
MetaStateWriterUtils.writeIndex(env, "test_write", dangledIndex);
8687

8788
final IndexGraveyard graveyard = IndexGraveyard.builder().addTombstone(dangledIndex.getIndex()).build();
88-
final Metadata metadata = Metadata.builder().indexGraveyard(graveyard).build();
89+
final Metadata metadata = Metadata.builder()
90+
.put(ProjectMetadata.builder(randomProjectIdOrDefault()).indexGraveyard(graveyard))
91+
.build();
8992

9093
DanglingIndicesState danglingState = createDanglingIndicesState(metaStateService, metadata);
9194

server/src/test/java/org/elasticsearch/indices/IndicesServiceTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -546,8 +546,8 @@ public void testIndexAndTombstoneWithSameNameOnStartup() throws Exception {
546546
.build();
547547
final Index tombstonedIndex = new Index(indexName, UUIDs.randomBase64UUID());
548548
final IndexGraveyard graveyard = IndexGraveyard.builder().addTombstone(tombstonedIndex).build();
549-
final Metadata metadata = Metadata.builder().put(indexMetadata, true).indexGraveyard(graveyard).build();
550-
final ClusterState clusterState = new ClusterState.Builder(new ClusterName("testCluster")).metadata(metadata).build();
549+
final var project = ProjectMetadata.builder(randomProjectIdOrDefault()).put(indexMetadata, true).indexGraveyard(graveyard).build();
550+
final ClusterState clusterState = new ClusterState.Builder(new ClusterName("testCluster")).putProjectMetadata(project).build();
551551
// if all goes well, this won't throw an exception, otherwise, it will throw an IllegalStateException
552552
indicesService.verifyIndexIsDeleted(tombstonedIndex, clusterState);
553553
}

0 commit comments

Comments
 (0)