|
@@ -44,6 +44,7 @@ import org.elasticsearch.index.IndexSettings;
|
|
|
import org.elasticsearch.index.mapper.MapperService;
|
|
|
import org.elasticsearch.index.seqno.SequenceNumbers;
|
|
|
import org.elasticsearch.index.shard.IndexLongFieldRange;
|
|
|
+import org.elasticsearch.index.shard.IndexWriteLoad;
|
|
|
import org.elasticsearch.index.shard.ShardId;
|
|
|
import org.elasticsearch.index.shard.ShardLongFieldRange;
|
|
|
import org.elasticsearch.rest.RestStatus;
|
|
@@ -521,11 +522,14 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
static final String KEY_SYSTEM = "system";
|
|
|
static final String KEY_TIMESTAMP_RANGE = "timestamp_range";
|
|
|
public static final String KEY_PRIMARY_TERMS = "primary_terms";
|
|
|
+ public static final String KEY_WRITE_LOAD = "write_load";
|
|
|
|
|
|
public static final String INDEX_STATE_FILE_PREFIX = "state-";
|
|
|
|
|
|
static final Version SYSTEM_INDEX_FLAG_ADDED = Version.V_7_10_0;
|
|
|
|
|
|
+ static final Version WRITE_LOAD_ADDED = Version.V_8_6_0;
|
|
|
+
|
|
|
private final int routingNumShards;
|
|
|
private final int routingFactor;
|
|
|
private final int routingPartitionSize;
|
|
@@ -603,6 +607,8 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
private final Instant timeSeriesStart;
|
|
|
@Nullable
|
|
|
private final Instant timeSeriesEnd;
|
|
|
+ @Nullable
|
|
|
+ private final IndexWriteLoad writeLoad;
|
|
|
|
|
|
private IndexMetadata(
|
|
|
final Index index,
|
|
@@ -645,7 +651,8 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
@Nullable final IndexMode indexMode,
|
|
|
@Nullable final Instant timeSeriesStart,
|
|
|
@Nullable final Instant timeSeriesEnd,
|
|
|
- final Version indexCompatibilityVersion
|
|
|
+ final Version indexCompatibilityVersion,
|
|
|
+ @Nullable final IndexWriteLoad writeLoad
|
|
|
) {
|
|
|
this.index = index;
|
|
|
this.version = version;
|
|
@@ -696,6 +703,7 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
this.indexMode = indexMode;
|
|
|
this.timeSeriesStart = timeSeriesStart;
|
|
|
this.timeSeriesEnd = timeSeriesEnd;
|
|
|
+ this.writeLoad = writeLoad;
|
|
|
assert numberOfShards * routingFactor == routingNumShards : routingNumShards + " must be a multiple of " + numberOfShards;
|
|
|
}
|
|
|
|
|
@@ -744,7 +752,8 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
this.indexMode,
|
|
|
this.timeSeriesStart,
|
|
|
this.timeSeriesEnd,
|
|
|
- this.indexCompatibilityVersion
|
|
|
+ this.indexCompatibilityVersion,
|
|
|
+ this.writeLoad
|
|
|
);
|
|
|
}
|
|
|
|
|
@@ -799,7 +808,8 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
this.indexMode,
|
|
|
this.timeSeriesStart,
|
|
|
this.timeSeriesEnd,
|
|
|
- this.indexCompatibilityVersion
|
|
|
+ this.indexCompatibilityVersion,
|
|
|
+ this.writeLoad
|
|
|
);
|
|
|
}
|
|
|
|
|
@@ -852,7 +862,8 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
this.indexMode,
|
|
|
this.timeSeriesStart,
|
|
|
this.timeSeriesEnd,
|
|
|
- this.indexCompatibilityVersion
|
|
|
+ this.indexCompatibilityVersion,
|
|
|
+ this.writeLoad
|
|
|
);
|
|
|
}
|
|
|
|
|
@@ -905,7 +916,8 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
this.indexMode,
|
|
|
this.timeSeriesStart,
|
|
|
this.timeSeriesEnd,
|
|
|
- this.indexCompatibilityVersion
|
|
|
+ this.indexCompatibilityVersion,
|
|
|
+ this.writeLoad
|
|
|
);
|
|
|
}
|
|
|
|
|
@@ -954,7 +966,8 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
this.indexMode,
|
|
|
this.timeSeriesStart,
|
|
|
this.timeSeriesEnd,
|
|
|
- this.indexCompatibilityVersion
|
|
|
+ this.indexCompatibilityVersion,
|
|
|
+ this.writeLoad
|
|
|
);
|
|
|
}
|
|
|
|
|
@@ -1145,6 +1158,11 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
return mapping;
|
|
|
}
|
|
|
|
|
|
+ @Nullable
|
|
|
+ public IndexWriteLoad getWriteLoad() {
|
|
|
+ return writeLoad;
|
|
|
+ }
|
|
|
+
|
|
|
public static final String INDEX_RESIZE_SOURCE_UUID_KEY = "index.resize.source.uuid";
|
|
|
public static final String INDEX_RESIZE_SOURCE_NAME_KEY = "index.resize.source.name";
|
|
|
public static final Setting<String> INDEX_RESIZE_SOURCE_UUID = Setting.simpleString(INDEX_RESIZE_SOURCE_UUID_KEY);
|
|
@@ -1379,6 +1397,7 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
private final Diff<ImmutableOpenMap<String, RolloverInfo>> rolloverInfos;
|
|
|
private final boolean isSystem;
|
|
|
private final IndexLongFieldRange timestampRange;
|
|
|
+ private final IndexWriteLoad indexWriteLoad;
|
|
|
|
|
|
IndexMetadataDiff(IndexMetadata before, IndexMetadata after) {
|
|
|
index = after.index.getName();
|
|
@@ -1412,6 +1431,7 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
rolloverInfos = DiffableUtils.diff(before.rolloverInfos, after.rolloverInfos, DiffableUtils.getStringKeySerializer());
|
|
|
isSystem = after.isSystem;
|
|
|
timestampRange = after.timestampRange;
|
|
|
+ indexWriteLoad = after.writeLoad;
|
|
|
}
|
|
|
|
|
|
private static final DiffableUtils.DiffableValueReader<String, AliasMetadata> ALIAS_METADATA_DIFF_VALUE_READER =
|
|
@@ -1462,6 +1482,11 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
isSystem = false;
|
|
|
}
|
|
|
timestampRange = IndexLongFieldRange.readFrom(in);
|
|
|
+ if (in.getVersion().onOrAfter(WRITE_LOAD_ADDED)) {
|
|
|
+ indexWriteLoad = in.readOptionalWriteable(IndexWriteLoad::new);
|
|
|
+ } else {
|
|
|
+ indexWriteLoad = null;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -1492,6 +1517,9 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
out.writeBoolean(isSystem);
|
|
|
}
|
|
|
timestampRange.writeTo(out);
|
|
|
+ if (out.getVersion().onOrAfter(WRITE_LOAD_ADDED)) {
|
|
|
+ out.writeOptionalWriteable(indexWriteLoad);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -1518,6 +1546,7 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
builder.rolloverInfos.putAllFromMap(rolloverInfos.apply(part.rolloverInfos));
|
|
|
builder.system(isSystem);
|
|
|
builder.timestampRange(timestampRange);
|
|
|
+ builder.indexWriteLoad(indexWriteLoad);
|
|
|
return builder.build();
|
|
|
}
|
|
|
}
|
|
@@ -1579,6 +1608,10 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
builder.system(in.readBoolean());
|
|
|
}
|
|
|
builder.timestampRange(IndexLongFieldRange.readFrom(in));
|
|
|
+
|
|
|
+ if (in.getVersion().onOrAfter(WRITE_LOAD_ADDED)) {
|
|
|
+ builder.indexWriteLoad(in.readOptionalWriteable(IndexWriteLoad::new));
|
|
|
+ }
|
|
|
return builder.build();
|
|
|
}
|
|
|
|
|
@@ -1620,6 +1653,9 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
out.writeBoolean(isSystem);
|
|
|
}
|
|
|
timestampRange.writeTo(out);
|
|
|
+ if (out.getVersion().onOrAfter(WRITE_LOAD_ADDED)) {
|
|
|
+ out.writeOptionalWriteable(writeLoad);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -1666,6 +1702,7 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
private boolean isSystem;
|
|
|
private IndexLongFieldRange timestampRange = IndexLongFieldRange.NO_SHARDS;
|
|
|
private LifecycleExecutionState lifecycleExecutionState = LifecycleExecutionState.EMPTY_STATE;
|
|
|
+ private IndexWriteLoad indexWriteLoad = null;
|
|
|
|
|
|
public Builder(String index) {
|
|
|
this.index = index;
|
|
@@ -1694,6 +1731,7 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
this.isSystem = indexMetadata.isSystem;
|
|
|
this.timestampRange = indexMetadata.timestampRange;
|
|
|
this.lifecycleExecutionState = indexMetadata.lifecycleExecutionState;
|
|
|
+ this.indexWriteLoad = indexMetadata.writeLoad;
|
|
|
}
|
|
|
|
|
|
public Builder index(String index) {
|
|
@@ -1908,6 +1946,11 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
+ public Builder indexWriteLoad(IndexWriteLoad indexWriteLoad) {
|
|
|
+ this.indexWriteLoad = indexWriteLoad;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
public IndexMetadata build() {
|
|
|
/*
|
|
|
* We expect that the metadata has been properly built to set the number of shards and the number of replicas, and do not rely
|
|
@@ -2023,6 +2066,17 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
lifecycleExecutionState = LifecycleExecutionState.EMPTY_STATE;
|
|
|
}
|
|
|
|
|
|
+ if (indexWriteLoad != null && indexWriteLoad.numberOfShards() != numberOfShards) {
|
|
|
+ assert false;
|
|
|
+ throw new IllegalArgumentException(
|
|
|
+ "The number of write load shards ["
|
|
|
+ + indexWriteLoad.numberOfShards()
|
|
|
+ + "] is different than the number of index shards ["
|
|
|
+ + numberOfShards
|
|
|
+ + "]"
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
final boolean isSearchableSnapshot = SearchableSnapshotsSettings.isSearchableSnapshotStore(settings);
|
|
|
final String indexMode = settings.get(IndexSettings.MODE.getKey());
|
|
|
final boolean isTsdb = indexMode != null && IndexMode.TIME_SERIES.getName().equals(indexMode.toLowerCase(Locale.ROOT));
|
|
@@ -2067,7 +2121,8 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
isTsdb ? IndexMode.TIME_SERIES : null,
|
|
|
isTsdb ? IndexSettings.TIME_SERIES_START_TIME.get(settings) : null,
|
|
|
isTsdb ? IndexSettings.TIME_SERIES_END_TIME.get(settings) : null,
|
|
|
- SETTING_INDEX_VERSION_COMPATIBILITY.get(settings)
|
|
|
+ SETTING_INDEX_VERSION_COMPATIBILITY.get(settings),
|
|
|
+ indexWriteLoad
|
|
|
);
|
|
|
}
|
|
|
|
|
@@ -2179,6 +2234,12 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
indexMetadata.timestampRange.toXContent(builder, params);
|
|
|
builder.endObject();
|
|
|
|
|
|
+ if (indexMetadata.writeLoad != null) {
|
|
|
+ builder.startObject(KEY_WRITE_LOAD);
|
|
|
+ indexMetadata.writeLoad.toXContent(builder, params);
|
|
|
+ builder.endObject();
|
|
|
+ }
|
|
|
+
|
|
|
builder.endObject();
|
|
|
}
|
|
|
|
|
@@ -2253,6 +2314,9 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
|
|
case KEY_TIMESTAMP_RANGE:
|
|
|
builder.timestampRange(IndexLongFieldRange.fromXContent(parser));
|
|
|
break;
|
|
|
+ case KEY_WRITE_LOAD:
|
|
|
+ builder.indexWriteLoad(IndexWriteLoad.fromXContent(parser));
|
|
|
+ break;
|
|
|
default:
|
|
|
// assume it's custom index metadata
|
|
|
builder.putCustom(currentFieldName, parser.mapStrings());
|