Skip to content

Commit

Permalink
Ensure consistency of system flag on IndexMetadata after diff is appl…
Browse files Browse the repository at this point in the history
…ied (opensearch-project#16644)

* Ensure consistency of system flag on IndexMetadata after diff is applied

Signed-off-by: Craig Perkins <[email protected]>
  • Loading branch information
cwperks authored Dec 4, 2024
1 parent b1bf72f commit d199096
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 2 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
- Fix stale cluster state custom file deletion ([#16670](https://github.com/opensearch-project/OpenSearch/pull/16670))
- [Tiered Caching] Fix bug in cache stats API ([#16560](https://github.com/opensearch-project/OpenSearch/pull/16560))
- Bound the size of cache in deprecation logger ([16702](https://github.com/opensearch-project/OpenSearch/issues/16702))
- Ensure consistency of system flag on IndexMetadata after diff is applied ([#16644](https://github.com/opensearch-project/OpenSearch/pull/16644))

### Security

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1061,7 +1061,7 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
*
* @opensearch.internal
*/
private static class IndexMetadataDiff implements Diff<IndexMetadata> {
static class IndexMetadataDiff implements Diff<IndexMetadata> {

private final String index;
private final int routingNumShards;
Expand Down Expand Up @@ -1178,7 +1178,7 @@ public IndexMetadata apply(IndexMetadata part) {
builder.customMetadata.putAll(customData.apply(part.customData));
builder.inSyncAllocationIds.putAll(inSyncAllocationIds.apply(part.inSyncAllocationIds));
builder.rolloverInfos.putAll(rolloverInfos.apply(part.rolloverInfos));
builder.system(part.isSystem);
builder.system(isSystem);
builder.context(context);
return builder.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,13 @@

package org.opensearch.cluster.metadata;

import org.opensearch.Version;
import org.opensearch.action.admin.indices.rollover.MaxAgeCondition;
import org.opensearch.action.admin.indices.rollover.MaxDocsCondition;
import org.opensearch.action.admin.indices.rollover.MaxSizeCondition;
import org.opensearch.action.admin.indices.rollover.RolloverInfo;
import org.opensearch.cluster.Diff;
import org.opensearch.common.UUIDs;
import org.opensearch.common.io.stream.BytesStreamOutput;
import org.opensearch.common.settings.Settings;
import org.opensearch.common.unit.TimeValue;
Expand All @@ -48,6 +51,7 @@
import org.opensearch.core.common.io.stream.NamedWriteableRegistry;
import org.opensearch.core.common.io.stream.StreamInput;
import org.opensearch.core.common.unit.ByteSizeValue;
import org.opensearch.core.index.Index;
import org.opensearch.core.index.shard.ShardId;
import org.opensearch.core.xcontent.MediaTypeRegistry;
import org.opensearch.core.xcontent.NamedXContentRegistry;
Expand Down Expand Up @@ -88,6 +92,26 @@ protected NamedXContentRegistry xContentRegistry() {
return new NamedXContentRegistry(IndicesModule.getNamedXContents());
}

// Create the index metadata for a given index, with the specified version.
private static IndexMetadata createIndexMetadata(final Index index, final long version) {
return createIndexMetadata(index, version, false);
}

private static IndexMetadata createIndexMetadata(final Index index, final long version, final boolean isSystem) {
final Settings settings = Settings.builder()
.put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
.put(IndexMetadata.SETTING_INDEX_UUID, index.getUUID())
.build();
return IndexMetadata.builder(index.getName())
.settings(settings)
.numberOfShards(1)
.numberOfReplicas(0)
.creationDate(System.currentTimeMillis())
.version(version)
.system(isSystem)
.build();
}

public void testIndexMetadataSerialization() throws IOException {
Integer numShard = randomFrom(1, 2, 4, 8, 16);
int numberOfReplicas = randomIntBetween(0, 10);
Expand Down Expand Up @@ -568,4 +592,18 @@ public void testParseIndexNameCannotFormatNumber() {
}
}

/**
* Test that changes to indices metadata are applied
*/
public void testIndicesMetadataDiffSystemFlagFlipped() {
String indexUuid = UUIDs.randomBase64UUID();
Index index = new Index("test-index", indexUuid);
IndexMetadata previousIndexMetadata = createIndexMetadata(index, 1);
IndexMetadata nextIndexMetadata = createIndexMetadata(index, 2, true);
Diff<IndexMetadata> diff = new IndexMetadata.IndexMetadataDiff(previousIndexMetadata, nextIndexMetadata);
IndexMetadata indexMetadataAfterDiffApplied = diff.apply(previousIndexMetadata);
assertTrue(indexMetadataAfterDiffApplied.isSystem());
assertThat(indexMetadataAfterDiffApplied.getVersion(), equalTo(nextIndexMetadata.getVersion()));
}

}

0 comments on commit d199096

Please sign in to comment.