diff --git a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/DataStreamsPlugin.java b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/DataStreamsPlugin.java index 2f3b63d27ca35..94250e5f39906 100644 --- a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/DataStreamsPlugin.java +++ b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/DataStreamsPlugin.java @@ -257,7 +257,7 @@ public Collection createComponents(PluginServices services) { actions.add(new ActionHandler<>(DeleteDataStreamLifecycleAction.INSTANCE, TransportDeleteDataStreamLifecycleAction.class)); actions.add(new ActionHandler<>(ExplainDataStreamLifecycleAction.INSTANCE, TransportExplainDataStreamLifecycleAction.class)); actions.add(new ActionHandler<>(GetDataStreamLifecycleStatsAction.INSTANCE, TransportGetDataStreamLifecycleStatsAction.class)); - if (DataStream.isFailureStoreFeatureFlagEnabled()) { + if (DataStream.isFailureStoreFeatureFlagEnabled) { actions.add(new ActionHandler<>(GetDataStreamOptionsAction.INSTANCE, TransportGetDataStreamOptionsAction.class)); actions.add(new ActionHandler<>(PutDataStreamOptionsAction.INSTANCE, TransportPutDataStreamOptionsAction.class)); actions.add(new ActionHandler<>(DeleteDataStreamOptionsAction.INSTANCE, TransportDeleteDataStreamOptionsAction.class)); @@ -295,7 +295,7 @@ public List getRestHandlers( handlers.add(new RestDeleteDataStreamLifecycleAction()); handlers.add(new RestExplainDataStreamLifecycleAction()); handlers.add(new RestDataStreamLifecycleStatsAction()); - if (DataStream.isFailureStoreFeatureFlagEnabled()) { + if (DataStream.isFailureStoreFeatureFlagEnabled) { handlers.add(new RestGetDataStreamOptionsAction()); handlers.add(new RestPutDataStreamOptionsAction()); handlers.add(new RestDeleteDataStreamOptionsAction()); diff --git a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportGetDataStreamsAction.java b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportGetDataStreamsAction.java index ffa2447f5f5aa..f89eb3048848c 100644 --- a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportGetDataStreamsAction.java +++ b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportGetDataStreamsAction.java @@ -188,7 +188,7 @@ static GetDataStreamAction.Response innerOperation( Map backingIndicesSettingsValues = new HashMap<>(); Metadata metadata = state.getMetadata(); collectIndexSettingsValues(dataStream, backingIndicesSettingsValues, metadata, dataStream.getIndices()); - if (DataStream.isFailureStoreFeatureFlagEnabled() && dataStream.getFailureIndices().getIndices().isEmpty() == false) { + if (DataStream.isFailureStoreFeatureFlagEnabled && dataStream.getFailureIndices().getIndices().isEmpty() == false) { collectIndexSettingsValues(dataStream, backingIndicesSettingsValues, metadata, dataStream.getFailureIndices().getIndices()); } diff --git a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/lifecycle/DataStreamLifecycleService.java b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/lifecycle/DataStreamLifecycleService.java index 7d2828e30d5ab..e54dfccef0320 100644 --- a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/lifecycle/DataStreamLifecycleService.java +++ b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/lifecycle/DataStreamLifecycleService.java @@ -760,7 +760,7 @@ static List getTargetIndices( } } if (withFailureStore - && DataStream.isFailureStoreFeatureFlagEnabled() + && DataStream.isFailureStoreFeatureFlagEnabled && dataStream.getFailureIndices().getIndices().isEmpty() == false) { for (Index index : dataStream.getFailureIndices().getIndices()) { if (dataStream.isIndexManagedByDataStreamLifecycle(index, indexMetadataSupplier) @@ -806,7 +806,7 @@ private void clearErrorStoreForUnmanagedIndices(DataStream dataStream) { private Set maybeExecuteRollover(ClusterState state, DataStream dataStream) { Set currentRunWriteIndices = new HashSet<>(); currentRunWriteIndices.add(maybeExecuteRollover(state, dataStream, false)); - if (DataStream.isFailureStoreFeatureFlagEnabled()) { + if (DataStream.isFailureStoreFeatureFlagEnabled) { Index failureStoreWriteIndex = maybeExecuteRollover(state, dataStream, true); if (failureStoreWriteIndex != null) { currentRunWriteIndices.add(failureStoreWriteIndex); diff --git a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/rest/RestGetDataStreamsAction.java b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/rest/RestGetDataStreamsAction.java index b61e38297397d..6da29698d2f2d 100644 --- a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/rest/RestGetDataStreamsAction.java +++ b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/rest/RestGetDataStreamsAction.java @@ -43,7 +43,7 @@ public class RestGetDataStreamsAction extends BaseRestHandler { IndicesOptions.GatekeeperOptions.IGNORE_THROTTLED, "verbose" ), - DataStream.isFailureStoreFeatureFlagEnabled() ? Set.of(IndicesOptions.FAILURE_STORE_QUERY_PARAM) : Set.of() + DataStream.isFailureStoreFeatureFlagEnabled ? Set.of(IndicesOptions.FAILURE_STORE_QUERY_PARAM) : Set.of() ) ); diff --git a/modules/data-streams/src/test/java/org/elasticsearch/datastreams/action/DeleteDataStreamTransportActionTests.java b/modules/data-streams/src/test/java/org/elasticsearch/datastreams/action/DeleteDataStreamTransportActionTests.java index 6d008b80a40a2..7d1070ececf36 100644 --- a/modules/data-streams/src/test/java/org/elasticsearch/datastreams/action/DeleteDataStreamTransportActionTests.java +++ b/modules/data-streams/src/test/java/org/elasticsearch/datastreams/action/DeleteDataStreamTransportActionTests.java @@ -58,7 +58,7 @@ public void testDeleteDataStream() { } public void testDeleteDataStreamWithFailureStore() { - Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled()); + Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled); final String dataStreamName = "my-data-stream"; final List otherIndices = randomSubsetOf(List.of("foo", "bar", "baz")); diff --git a/modules/data-streams/src/test/java/org/elasticsearch/datastreams/action/GetDataStreamsResponseTests.java b/modules/data-streams/src/test/java/org/elasticsearch/datastreams/action/GetDataStreamsResponseTests.java index 710ea8c15b66e..2e8ba30cb497e 100644 --- a/modules/data-streams/src/test/java/org/elasticsearch/datastreams/action/GetDataStreamsResponseTests.java +++ b/modules/data-streams/src/test/java/org/elasticsearch/datastreams/action/GetDataStreamsResponseTests.java @@ -162,7 +162,7 @@ public void testResponseIlmAndDataStreamLifecycleRepresentation() throws Excepti is(ManagedBy.LIFECYCLE.displayValue) ); - if (DataStream.isFailureStoreFeatureFlagEnabled()) { + if (DataStream.isFailureStoreFeatureFlagEnabled) { var failureStore = (Map) dataStreamMap.get(DataStream.FAILURE_STORE_FIELD.getPreferredName()); List failureStoresRepresentation = (List) failureStore.get(DataStream.INDICES_FIELD.getPreferredName()); Map failureStoreRepresentation = (Map) failureStoresRepresentation.get(0); @@ -254,7 +254,7 @@ public void testResponseIlmAndDataStreamLifecycleRepresentation() throws Excepti is(ManagedBy.UNMANAGED.displayValue) ); - if (DataStream.isFailureStoreFeatureFlagEnabled()) { + if (DataStream.isFailureStoreFeatureFlagEnabled) { var failureStore = (Map) dataStreamMap.get(DataStream.FAILURE_STORE_FIELD.getPreferredName()); List failureStoresRepresentation = (List) failureStore.get(DataStream.INDICES_FIELD.getPreferredName()); Map failureStoreRepresentation = (Map) failureStoresRepresentation.get(0); diff --git a/server/src/main/java/org/elasticsearch/action/admin/cluster/snapshots/create/CreateSnapshotRequest.java b/server/src/main/java/org/elasticsearch/action/admin/cluster/snapshots/create/CreateSnapshotRequest.java index 9c9467db40de3..75e5792719993 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/cluster/snapshots/create/CreateSnapshotRequest.java +++ b/server/src/main/java/org/elasticsearch/action/admin/cluster/snapshots/create/CreateSnapshotRequest.java @@ -69,7 +69,7 @@ public class CreateSnapshotRequest extends MasterNodeRequest docWriteRequest, Metadata metadata) { // Feature flag guard - if (DataStream.isFailureStoreFeatureFlagEnabled() == false) { + if (DataStream.isFailureStoreFeatureFlagEnabled == false) { return null; } // If there is no index abstraction, then the request is using a pattern of some sort, which data streams do not support diff --git a/server/src/main/java/org/elasticsearch/action/bulk/BulkRequestModifier.java b/server/src/main/java/org/elasticsearch/action/bulk/BulkRequestModifier.java index 282e4d33fb83b..5b372331c7439 100644 --- a/server/src/main/java/org/elasticsearch/action/bulk/BulkRequestModifier.java +++ b/server/src/main/java/org/elasticsearch/action/bulk/BulkRequestModifier.java @@ -218,7 +218,7 @@ synchronized void markItemAsDropped(int slot) { * @param e the failure encountered. */ public void markItemForFailureStore(int slot, String targetIndexName, Exception e) { - if (DataStream.isFailureStoreFeatureFlagEnabled() == false) { + if (DataStream.isFailureStoreFeatureFlagEnabled == false) { // Assert false for development, but if we somehow find ourselves here, default to failure logic. assert false : "Attempting to route a failed write request type to a failure store but the failure store is not enabled! " diff --git a/server/src/main/java/org/elasticsearch/action/bulk/IndexDocFailureStoreStatus.java b/server/src/main/java/org/elasticsearch/action/bulk/IndexDocFailureStoreStatus.java index cb83d693a415b..d4b7dd8a24b55 100644 --- a/server/src/main/java/org/elasticsearch/action/bulk/IndexDocFailureStoreStatus.java +++ b/server/src/main/java/org/elasticsearch/action/bulk/IndexDocFailureStoreStatus.java @@ -102,7 +102,7 @@ public static IndexDocFailureStoreStatus fromId(byte id) { @Override public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { // We avoid adding the not_applicable status in the response to not increase the size of bulk responses. - if (DataStream.isFailureStoreFeatureFlagEnabled() && this.equals(NOT_APPLICABLE_OR_UNKNOWN) == false) { + if (DataStream.isFailureStoreFeatureFlagEnabled && this.equals(NOT_APPLICABLE_OR_UNKNOWN) == false) { builder.field("failure_store", label); } return builder; diff --git a/server/src/main/java/org/elasticsearch/action/bulk/TransportBulkAction.java b/server/src/main/java/org/elasticsearch/action/bulk/TransportBulkAction.java index cef68324e2a45..2c793e6f5ccdf 100644 --- a/server/src/main/java/org/elasticsearch/action/bulk/TransportBulkAction.java +++ b/server/src/main/java/org/elasticsearch/action/bulk/TransportBulkAction.java @@ -275,7 +275,7 @@ private void populateMissingTargets( Map indexExistence = new HashMap<>(); Function indexExistenceComputation = (index) -> indexNameExpressionResolver.hasIndexAbstraction(index, state); boolean lazyRolloverFeature = featureService.clusterHasFeature(state, LazyRolloverAction.DATA_STREAM_LAZY_ROLLOVER); - boolean lazyRolloverFailureStoreFeature = DataStream.isFailureStoreFeatureFlagEnabled(); + boolean lazyRolloverFailureStoreFeature = DataStream.isFailureStoreFeatureFlagEnabled; Set indicesThatRequireAlias = new HashSet<>(); for (DocWriteRequest request : bulkRequest.requests) { @@ -595,7 +595,7 @@ void executeBulk( */ // Visibility for testing static Boolean resolveFailureInternal(String indexName, Metadata metadata, long epochMillis) { - if (DataStream.isFailureStoreFeatureFlagEnabled() == false) { + if (DataStream.isFailureStoreFeatureFlagEnabled == false) { return null; } var resolution = resolveFailureStoreFromMetadata(indexName, metadata, epochMillis); diff --git a/server/src/main/java/org/elasticsearch/action/datastreams/GetDataStreamAction.java b/server/src/main/java/org/elasticsearch/action/datastreams/GetDataStreamAction.java index c1cf0fa7aab42..47f3fab85886b 100644 --- a/server/src/main/java/org/elasticsearch/action/datastreams/GetDataStreamAction.java +++ b/server/src/main/java/org/elasticsearch/action/datastreams/GetDataStreamAction.java @@ -396,7 +396,7 @@ public XContentBuilder toXContent( builder.endArray(); builder.endObject(); } - if (DataStream.isFailureStoreFeatureFlagEnabled()) { + if (DataStream.isFailureStoreFeatureFlagEnabled) { builder.startObject(DataStream.FAILURE_STORE_FIELD.getPreferredName()); builder.field(FAILURE_STORE_ENABLED.getPreferredName(), dataStream.isFailureStoreEnabled()); builder.field( diff --git a/server/src/main/java/org/elasticsearch/action/index/IndexRequest.java b/server/src/main/java/org/elasticsearch/action/index/IndexRequest.java index c0811e7424b0d..bb7cca51c80f1 100644 --- a/server/src/main/java/org/elasticsearch/action/index/IndexRequest.java +++ b/server/src/main/java/org/elasticsearch/action/index/IndexRequest.java @@ -866,7 +866,7 @@ public IndexRequest setRequireDataStream(boolean requireDataStream) { @Override public Index getConcreteWriteIndex(IndexAbstraction ia, Metadata metadata) { - if (DataStream.isFailureStoreFeatureFlagEnabled() && writeToFailureStore) { + if (DataStream.isFailureStoreFeatureFlagEnabled && writeToFailureStore) { if (ia.isDataStreamRelated() == false) { throw new ElasticsearchException( "Attempting to write a document to a failure store but the targeted index is not a data stream" diff --git a/server/src/main/java/org/elasticsearch/action/support/IndicesOptions.java b/server/src/main/java/org/elasticsearch/action/support/IndicesOptions.java index 85889d8398cb1..fb4ac7dc0e1b1 100644 --- a/server/src/main/java/org/elasticsearch/action/support/IndicesOptions.java +++ b/server/src/main/java/org/elasticsearch/action/support/IndicesOptions.java @@ -1202,13 +1202,13 @@ public static IndicesOptions fromRequest(RestRequest request, IndicesOptions def request.param(ConcreteTargetOptions.IGNORE_UNAVAILABLE), request.param(WildcardOptions.ALLOW_NO_INDICES), request.param(GatekeeperOptions.IGNORE_THROTTLED), - DataStream.isFailureStoreFeatureFlagEnabled() ? request.param(FAILURE_STORE_QUERY_PARAM) : INCLUDE_ONLY_REGULAR_INDICES, + DataStream.isFailureStoreFeatureFlagEnabled ? request.param(FAILURE_STORE_QUERY_PARAM) : INCLUDE_ONLY_REGULAR_INDICES, defaultSettings ); } public static IndicesOptions fromMap(Map map, IndicesOptions defaultSettings) { - if (DataStream.isFailureStoreFeatureFlagEnabled()) { + if (DataStream.isFailureStoreFeatureFlagEnabled) { return fromParameters( map.containsKey(WildcardOptions.EXPAND_WILDCARDS) ? map.get(WildcardOptions.EXPAND_WILDCARDS) : map.get("expandWildcards"), map.containsKey(ConcreteTargetOptions.IGNORE_UNAVAILABLE) @@ -1246,8 +1246,8 @@ public static boolean isIndicesOptions(String name) { || "ignoreThrottled".equals(name) || WildcardOptions.ALLOW_NO_INDICES.equals(name) || "allowNoIndices".equals(name) - || (DataStream.isFailureStoreFeatureFlagEnabled() && FAILURE_STORE_QUERY_PARAM.equals(name)) - || (DataStream.isFailureStoreFeatureFlagEnabled() && "failureStore".equals(name)); + || (DataStream.isFailureStoreFeatureFlagEnabled && FAILURE_STORE_QUERY_PARAM.equals(name)) + || (DataStream.isFailureStoreFeatureFlagEnabled && "failureStore".equals(name)); } public static IndicesOptions fromParameters( @@ -1278,7 +1278,7 @@ public static IndicesOptions fromParameters( WildcardOptions wildcards = WildcardOptions.parseParameters(wildcardsString, allowNoIndicesString, defaultSettings.wildcardOptions); GatekeeperOptions gatekeeperOptions = GatekeeperOptions.parseParameter(ignoreThrottled, defaultSettings.gatekeeperOptions); - SelectorOptions selectorOptions = DataStream.isFailureStoreFeatureFlagEnabled() + SelectorOptions selectorOptions = DataStream.isFailureStoreFeatureFlagEnabled ? parseFailureStoreParameters(failureStoreString, defaultSettings.selectorOptions) : SelectorOptions.DEFAULT; @@ -1313,7 +1313,7 @@ public XContentBuilder toXContent(XContentBuilder builder, ToXContent.Params par concreteTargetOptions.toXContent(builder, params); wildcardOptions.toXContent(builder, params); gatekeeperOptions.toXContent(builder, params); - if (DataStream.isFailureStoreFeatureFlagEnabled()) { + if (DataStream.isFailureStoreFeatureFlagEnabled) { String displayValue; if (SelectorOptions.ALL_APPLICABLE.equals(selectorOptions())) { displayValue = INCLUDE_ALL; @@ -1392,7 +1392,7 @@ public static IndicesOptions fromXContent(XContentParser parser, @Nullable Indic allowNoIndices = parser.booleanValue(); } else if (IGNORE_THROTTLED_FIELD.match(currentFieldName, parser.getDeprecationHandler())) { generalOptions.ignoreThrottled(parser.booleanValue()); - } else if (DataStream.isFailureStoreFeatureFlagEnabled() + } else if (DataStream.isFailureStoreFeatureFlagEnabled && FAILURE_STORE_FIELD.match(currentFieldName, parser.getDeprecationHandler())) { selectorOptions = parseFailureStoreParameters(parser.text(), selectorOptions); } else { @@ -1565,7 +1565,7 @@ public String toString() { + ignoreAliases() + ", ignore_throttled=" + ignoreThrottled() - + (DataStream.isFailureStoreFeatureFlagEnabled() + + (DataStream.isFailureStoreFeatureFlagEnabled ? ", include_regular_indices=" + includeRegularIndices() + ", include_failure_indices=" diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/ComposableIndexTemplate.java b/server/src/main/java/org/elasticsearch/cluster/metadata/ComposableIndexTemplate.java index ae7cff6312155..82803aeadeef3 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/ComposableIndexTemplate.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/ComposableIndexTemplate.java @@ -380,14 +380,14 @@ public static class DataStreamTemplate implements Writeable, ToXContentObject { args -> new DataStreamTemplate( args[0] != null && (boolean) args[0], args[1] != null && (boolean) args[1], - DataStream.isFailureStoreFeatureFlagEnabled() && args[2] != null && (boolean) args[2] + DataStream.isFailureStoreFeatureFlagEnabled && args[2] != null && (boolean) args[2] ) ); static { PARSER.declareBoolean(ConstructingObjectParser.optionalConstructorArg(), HIDDEN); PARSER.declareBoolean(ConstructingObjectParser.optionalConstructorArg(), ALLOW_CUSTOM_ROUTING); - if (DataStream.isFailureStoreFeatureFlagEnabled()) { + if (DataStream.isFailureStoreFeatureFlagEnabled) { PARSER.declareBoolean(ConstructingObjectParser.optionalConstructorArg(), FAILURE_STORE); } } @@ -482,7 +482,7 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws builder.startObject(); builder.field("hidden", hidden); builder.field(ALLOW_CUSTOM_ROUTING.getPreferredName(), allowCustomRouting); - if (DataStream.isFailureStoreFeatureFlagEnabled()) { + if (DataStream.isFailureStoreFeatureFlagEnabled) { builder.field(FAILURE_STORE.getPreferredName(), failureStore); } builder.endObject(); diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/DataStream.java b/server/src/main/java/org/elasticsearch/cluster/metadata/DataStream.java index 4dcc7c73c280e..346c68a9cc464 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/DataStream.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/DataStream.java @@ -68,13 +68,10 @@ public final class DataStream implements SimpleDiffable, ToXContentObject, IndexAbstraction { - public static final FeatureFlag FAILURE_STORE_FEATURE_FLAG = new FeatureFlag("failure_store"); public static final TransportVersion ADDED_FAILURE_STORE_TRANSPORT_VERSION = TransportVersions.V_8_12_0; public static final TransportVersion ADDED_AUTO_SHARDING_EVENT_VERSION = TransportVersions.V_8_14_0; - public static boolean isFailureStoreFeatureFlagEnabled() { - return FAILURE_STORE_FEATURE_FLAG.isEnabled(); - } + public static final boolean isFailureStoreFeatureFlagEnabled = new FeatureFlag("failure_store").isEnabled(); public static final String BACKING_INDEX_PREFIX = ".ds-"; public static final String FAILURE_STORE_PREFIX = ".fs-"; @@ -900,7 +897,7 @@ public List getNonWriteIndicesOlderThan( olderIndices.add(index); } } - if (DataStream.isFailureStoreFeatureFlagEnabled() && failureIndices.getIndices().isEmpty() == false) { + if (DataStream.isFailureStoreFeatureFlagEnabled && failureIndices.getIndices().isEmpty() == false) { for (Index index : failureIndices.getIndices()) { if (isIndexOlderThan( index, @@ -1121,8 +1118,8 @@ public void writeTo(StreamOutput out) throws IOException { private static final ConstructingObjectParser PARSER = new ConstructingObjectParser<>("data_stream", args -> { // Fields behind a feature flag need to be parsed last otherwise the parser will fail when the feature flag is disabled. // Until the feature flag is removed we keep them separately to be mindful of this. - boolean failureStoreEnabled = DataStream.isFailureStoreFeatureFlagEnabled() && args[12] != null && (boolean) args[12]; - DataStreamIndices failureIndices = DataStream.isFailureStoreFeatureFlagEnabled() + boolean failureStoreEnabled = DataStream.isFailureStoreFeatureFlagEnabled && args[12] != null && (boolean) args[12]; + DataStreamIndices failureIndices = DataStream.isFailureStoreFeatureFlagEnabled ? new DataStreamIndices( FAILURE_STORE_PREFIX, args[13] != null ? (List) args[13] : List.of(), @@ -1133,7 +1130,7 @@ public void writeTo(StreamOutput out) throws IOException { // We cannot distinguish if failure store was explicitly disabled or not. Given that failure store // is still behind a feature flag in previous version we use the default value instead of explicitly disabling it. DataStreamOptions dataStreamOptions = DataStreamOptions.EMPTY; - if (DataStream.isFailureStoreFeatureFlagEnabled()) { + if (DataStream.isFailureStoreFeatureFlagEnabled) { if (args[16] != null) { dataStreamOptions = (DataStreamOptions) args[16]; } else if (failureStoreEnabled) { @@ -1188,7 +1185,7 @@ public void writeTo(StreamOutput out) throws IOException { AUTO_SHARDING_FIELD ); // The fields behind the feature flag should always be last. - if (DataStream.isFailureStoreFeatureFlagEnabled()) { + if (DataStream.isFailureStoreFeatureFlagEnabled) { PARSER.declareBoolean(ConstructingObjectParser.optionalConstructorArg(), FAILURE_STORE_FIELD); PARSER.declareObjectArray( ConstructingObjectParser.optionalConstructorArg(), @@ -1242,7 +1239,7 @@ public XContentBuilder toXContent( builder.field(REPLICATED_FIELD.getPreferredName(), replicated); builder.field(SYSTEM_FIELD.getPreferredName(), system); builder.field(ALLOW_CUSTOM_ROUTING.getPreferredName(), allowCustomRouting); - if (DataStream.isFailureStoreFeatureFlagEnabled()) { + if (DataStream.isFailureStoreFeatureFlagEnabled) { if (failureIndices.indices.isEmpty() == false) { builder.xContentList(FAILURE_INDICES_FIELD.getPreferredName(), failureIndices.indices); } diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/DataStreamAction.java b/server/src/main/java/org/elasticsearch/cluster/metadata/DataStreamAction.java index 545f949f962c1..9f7a6ffe4f3e8 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/DataStreamAction.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/DataStreamAction.java @@ -143,7 +143,7 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws builder.startObject(type.fieldName); builder.field(DATA_STREAM.getPreferredName(), dataStream); builder.field(INDEX.getPreferredName(), index); - if (DataStream.isFailureStoreFeatureFlagEnabled() && failureStore) { + if (DataStream.isFailureStoreFeatureFlagEnabled && failureStore) { builder.field(FAILURE_STORE.getPreferredName(), failureStore); } builder.endObject(); @@ -181,7 +181,7 @@ public static DataStreamAction fromXContent(XContentParser parser) throws IOExce ObjectParser.ValueType.STRING ); ADD_BACKING_INDEX_PARSER.declareField(DataStreamAction::setIndex, XContentParser::text, INDEX, ObjectParser.ValueType.STRING); - if (DataStream.isFailureStoreFeatureFlagEnabled()) { + if (DataStream.isFailureStoreFeatureFlagEnabled) { ADD_BACKING_INDEX_PARSER.declareField( DataStreamAction::setFailureStore, XContentParser::booleanValue, @@ -196,7 +196,7 @@ public static DataStreamAction fromXContent(XContentParser parser) throws IOExce ObjectParser.ValueType.STRING ); REMOVE_BACKING_INDEX_PARSER.declareField(DataStreamAction::setIndex, XContentParser::text, INDEX, ObjectParser.ValueType.STRING); - if (DataStream.isFailureStoreFeatureFlagEnabled()) { + if (DataStream.isFailureStoreFeatureFlagEnabled) { REMOVE_BACKING_INDEX_PARSER.declareField( DataStreamAction::setFailureStore, XContentParser::booleanValue, diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/IndexNameExpressionResolver.java b/server/src/main/java/org/elasticsearch/cluster/metadata/IndexNameExpressionResolver.java index bf80c38d64a4e..1e9c00f11acb2 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/IndexNameExpressionResolver.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/IndexNameExpressionResolver.java @@ -165,17 +165,7 @@ public String[] concreteIndexNames(ClusterState state, IndicesOptions options, b } public String[] concreteIndexNames(ClusterState state, IndicesOptions options, IndicesRequest request) { - Context context = new Context( - state, - options, - false, - false, - request.includeDataStreams(), - getSystemIndexAccessLevel(), - getSystemIndexAccessPredicate(), - getNetNewSystemIndexPredicate() - ); - return concreteIndexNames(context, request.indices()); + return concreteIndexNames(state, options, request.includeDataStreams(), request.indices()); } public List dataStreamNames(ClusterState state, IndicesOptions options, String... indexExpressions) { @@ -250,10 +240,7 @@ protected static Collection resolveExpressions(Context context, String.. if (expressions == null || expressions.length == 0 || expressions.length == 1 && Metadata.ALL.equals(expressions[0])) { return List.of(); } else { - return ExplicitResourceNameFilter.filterUnavailable( - context, - DateMathExpressionResolver.resolve(context, Arrays.asList(expressions)) - ); + return ExplicitResourceNameFilter.filterUnavailable(context, DateMathExpressionResolver.resolve(context, expressions)); } } else { if (expressions == null @@ -263,10 +250,7 @@ protected static Collection resolveExpressions(Context context, String.. } else { return WildcardExpressionResolver.resolve( context, - ExplicitResourceNameFilter.filterUnavailable( - context, - DateMathExpressionResolver.resolve(context, Arrays.asList(expressions)) - ) + ExplicitResourceNameFilter.filterUnavailable(context, DateMathExpressionResolver.resolve(context, expressions)) ); } } @@ -391,7 +375,7 @@ Index[] concreteIndices(Context context, String... indexExpressions) { resolveIndicesForDataStream(context, (DataStream) indexAbstraction, concreteIndicesResult); } else if (indexAbstraction.getType() == Type.ALIAS && indexAbstraction.isDataStreamRelated() - && DataStream.isFailureStoreFeatureFlagEnabled() + && DataStream.isFailureStoreFeatureFlagEnabled && context.getOptions().includeFailureIndices()) { // Collect the data streams involved Set aliasDataStreams = new HashSet<>(); @@ -459,12 +443,12 @@ private static void resolveWriteIndexForDataStreams(Context context, DataStream } private static boolean shouldIncludeRegularIndices(IndicesOptions indicesOptions) { - return DataStream.isFailureStoreFeatureFlagEnabled() == false || indicesOptions.includeRegularIndices(); + return DataStream.isFailureStoreFeatureFlagEnabled == false || indicesOptions.includeRegularIndices(); } private static boolean shouldIncludeFailureIndices(IndicesOptions indicesOptions) { // We return failure indices regardless of whether the data stream actually has the `failureStoreEnabled` flag set to true. - return DataStream.isFailureStoreFeatureFlagEnabled() && indicesOptions.includeFailureIndices(); + return DataStream.isFailureStoreFeatureFlagEnabled && indicesOptions.includeFailureIndices(); } private static boolean resolvesToMoreThanOneIndex(IndexAbstraction indexAbstraction, Context context) { @@ -573,7 +557,7 @@ private static boolean shouldTrackConcreteIndex(Context context, Index index) { // Exclude this one as it's a net-new system index, and we explicitly don't want those. return false; } - if (DataStream.isFailureStoreFeatureFlagEnabled() && context.options.allowFailureIndices() == false) { + if (DataStream.isFailureStoreFeatureFlagEnabled && context.options.allowFailureIndices() == false) { DataStream parentDataStream = context.getState().metadata().getIndicesLookup().get(index.getName()).getParentDataStream(); if (parentDataStream != null && parentDataStream.isFailureStoreEnabled()) { if (parentDataStream.isFailureStoreIndex(index.getName())) { @@ -1533,12 +1517,12 @@ private DateMathExpressionResolver() { * Resolves date math expressions. If this is a noop the given {@code expressions} list is returned without copying. * As a result callers of this method should not mutate the returned list. Mutating it may come with unexpected side effects. */ - public static List resolve(Context context, List expressions) { + public static List resolve(Context context, String... expressions) { boolean wildcardSeen = false; final boolean expandWildcards = context.getOptions().expandWildcardExpressions(); String[] result = null; - for (int i = 0, n = expressions.size(); i < n; i++) { - String expression = expressions.get(i); + for (int i = 0, n = expressions.length; i < n; i++) { + String expression = expressions[i]; // accepts date-math exclusions that are of the form "-<...{}>",f i.e. the "-" is outside the "<>" date-math template boolean isExclusion = wildcardSeen && expression.startsWith("-"); wildcardSeen = wildcardSeen || (expandWildcards && isWildcard(expression)); @@ -1546,12 +1530,12 @@ public static List resolve(Context context, List expressions) { String resolved = resolveExpression(toResolve, context::getStartTime); if (toResolve != resolved) { if (result == null) { - result = expressions.toArray(Strings.EMPTY_ARRAY); + result = expressions.clone(); } result[i] = isExclusion ? "-" + resolved : resolved; } } - return result == null ? expressions : Arrays.asList(result); + return Arrays.asList(result == null ? expressions : result); } static String resolveExpression(String expression) { @@ -1717,8 +1701,8 @@ private ExplicitResourceNameFilter() { * Returns an expression list with "unavailable" (missing or not acceptable) resource names filtered out. * Only explicit resource names are considered for filtering. Wildcard and exclusion expressions are kept in. */ - public static List filterUnavailable(Context context, List expressions) { - ensureRemoteIndicesRequireIgnoreUnavailable(context.getOptions(), expressions); + private static List filterUnavailable(Context context, List expressions) { + final boolean ignoreUnavailable = context.getOptions().ignoreUnavailable(); final boolean expandWildcards = context.getOptions().expandWildcardExpressions(); boolean wildcardSeen = false; List result = null; @@ -1734,6 +1718,9 @@ public static List filterUnavailable(Context context, List expre if (expression.charAt(0) == '_') { throw new InvalidIndexNameException(expression, "must not start with '_'."); } + if (ignoreUnavailable == false && RemoteClusterAware.isRemoteIndexName(expression)) { + failOnRemoteIndicesNotIgnoringUnavailable(expressions); + } final boolean isWildcard = expandWildcards && isWildcard(expression); if (isWildcard || (wildcardSeen && expression.charAt(0) == '-') || ensureAliasOrIndexExists(context, expression)) { if (result != null) { @@ -1787,17 +1774,6 @@ private static boolean ensureAliasOrIndexExists(Context context, String name) { return true; } - private static void ensureRemoteIndicesRequireIgnoreUnavailable(IndicesOptions options, List indexExpressions) { - if (options.ignoreUnavailable()) { - return; - } - for (String index : indexExpressions) { - if (RemoteClusterAware.isRemoteIndexName(index)) { - failOnRemoteIndicesNotIgnoringUnavailable(indexExpressions); - } - } - } - private static void failOnRemoteIndicesNotIgnoringUnavailable(List indexExpressions) { List crossClusterIndices = new ArrayList<>(); for (String index : indexExpressions) { 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 60dee79d403d6..c1e746df851e5 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java @@ -2534,7 +2534,7 @@ private static void collectIndices( private static boolean assertContainsIndexIfDataStream(DataStream parent, IndexMetadata indexMetadata) { assert parent == null || parent.getIndices().stream().anyMatch(index -> indexMetadata.getIndex().getName().equals(index.getName())) - || (DataStream.isFailureStoreFeatureFlagEnabled() + || (DataStream.isFailureStoreFeatureFlagEnabled && parent.isFailureStoreEnabled() && parent.getFailureIndices() .getIndices() @@ -2561,7 +2561,7 @@ private static void collectDataStreams( for (Index i : dataStream.getIndices()) { indexToDataStreamLookup.put(i.getName(), dataStream); } - if (DataStream.isFailureStoreFeatureFlagEnabled() && dataStream.isFailureStoreEnabled()) { + if (DataStream.isFailureStoreFeatureFlagEnabled && dataStream.isFailureStoreEnabled()) { for (Index i : dataStream.getFailureIndices().getIndices()) { indexToDataStreamLookup.put(i.getName(), dataStream); } diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/MetadataCreateDataStreamService.java b/server/src/main/java/org/elasticsearch/cluster/metadata/MetadataCreateDataStreamService.java index 5dbf4da6f376f..b9f76f2775fc6 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/MetadataCreateDataStreamService.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/MetadataCreateDataStreamService.java @@ -411,7 +411,7 @@ public static ClusterState createFailureStoreIndex( String failureStoreIndexName, @Nullable BiConsumer metadataTransformer ) throws Exception { - if (DataStream.isFailureStoreFeatureFlagEnabled() == false) { + if (DataStream.isFailureStoreFeatureFlagEnabled == false) { return currentState; } diff --git a/server/src/main/java/org/elasticsearch/rest/action/admin/indices/RestRolloverIndexAction.java b/server/src/main/java/org/elasticsearch/rest/action/admin/indices/RestRolloverIndexAction.java index 776302296b1a2..4c8fcde8564b7 100644 --- a/server/src/main/java/org/elasticsearch/rest/action/admin/indices/RestRolloverIndexAction.java +++ b/server/src/main/java/org/elasticsearch/rest/action/admin/indices/RestRolloverIndexAction.java @@ -49,7 +49,7 @@ public String getName() { @Override public Set supportedCapabilities() { - if (DataStream.isFailureStoreFeatureFlagEnabled()) { + if (DataStream.isFailureStoreFeatureFlagEnabled) { return Set.of("lazy-rollover-failure-store"); } else { return Set.of(); @@ -64,7 +64,7 @@ public RestChannelConsumer prepareRequest(final RestRequest request, final NodeC rolloverIndexRequest.lazy(request.paramAsBoolean("lazy", false)); rolloverIndexRequest.ackTimeout(getAckTimeout(request)); rolloverIndexRequest.masterNodeTimeout(getMasterNodeTimeout(request)); - if (DataStream.isFailureStoreFeatureFlagEnabled()) { + if (DataStream.isFailureStoreFeatureFlagEnabled) { boolean failureStore = request.paramAsBoolean("target_failure_store", false); if (failureStore) { rolloverIndexRequest.setIndicesOptions( diff --git a/server/src/main/java/org/elasticsearch/rest/action/document/RestBulkAction.java b/server/src/main/java/org/elasticsearch/rest/action/document/RestBulkAction.java index de3fd390ec86d..ad56911b08b64 100644 --- a/server/src/main/java/org/elasticsearch/rest/action/document/RestBulkAction.java +++ b/server/src/main/java/org/elasticsearch/rest/action/document/RestBulkAction.java @@ -67,7 +67,7 @@ public class RestBulkAction extends BaseRestHandler { public RestBulkAction(Settings settings, IncrementalBulkService bulkHandler) { this.allowExplicitIndex = MULTI_ALLOW_EXPLICIT_INDEX.get(settings); this.bulkHandler = bulkHandler; - this.capabilities = DataStream.isFailureStoreFeatureFlagEnabled() ? Set.of(FAILURE_STORE_STATUS_CAPABILITY) : Set.of(); + this.capabilities = DataStream.isFailureStoreFeatureFlagEnabled ? Set.of(FAILURE_STORE_STATUS_CAPABILITY) : Set.of(); } @Override diff --git a/server/src/main/java/org/elasticsearch/rest/action/document/RestIndexAction.java b/server/src/main/java/org/elasticsearch/rest/action/document/RestIndexAction.java index c2437dcb96fa6..4849a0373b538 100644 --- a/server/src/main/java/org/elasticsearch/rest/action/document/RestIndexAction.java +++ b/server/src/main/java/org/elasticsearch/rest/action/document/RestIndexAction.java @@ -37,7 +37,7 @@ public class RestIndexAction extends BaseRestHandler { static final String TYPES_DEPRECATION_MESSAGE = "[types removal] Specifying types in document " + "index requests is deprecated, use the typeless endpoints instead (/{index}/_doc/{id}, /{index}/_doc, " + "or /{index}/_create/{id})."; - private final Set capabilities = DataStream.isFailureStoreFeatureFlagEnabled() + private final Set capabilities = DataStream.isFailureStoreFeatureFlagEnabled ? Set.of(FAILURE_STORE_STATUS_CAPABILITY) : Set.of(); diff --git a/server/src/main/java/org/elasticsearch/snapshots/RestoreService.java b/server/src/main/java/org/elasticsearch/snapshots/RestoreService.java index de241301cfef9..389a2c62683c4 100644 --- a/server/src/main/java/org/elasticsearch/snapshots/RestoreService.java +++ b/server/src/main/java/org/elasticsearch/snapshots/RestoreService.java @@ -423,7 +423,7 @@ private void startRestore( .flatMap(ds -> ds.getIndices().stream().map(idx -> new Tuple<>(ds.isSystem(), idx.getName()))) .collect(Collectors.partitioningBy(Tuple::v1, Collectors.mapping(Tuple::v2, Collectors.toSet()))); Map> failureIndices = Map.of(); - if (DataStream.isFailureStoreFeatureFlagEnabled()) { + if (DataStream.isFailureStoreFeatureFlagEnabled) { failureIndices = dataStreamsToRestore.values() .stream() .flatMap(ds -> ds.getFailureIndices().getIndices().stream().map(idx -> new Tuple<>(ds.isSystem(), idx.getName()))) @@ -772,7 +772,7 @@ static DataStream updateDataStream(DataStream dataStream, Metadata.Builder metad .stream() .map(i -> metadata.get(renameIndex(i.getName(), request, true, false)).getIndex()) .toList(); - List updatedFailureIndices = DataStream.isFailureStoreFeatureFlagEnabled() + List updatedFailureIndices = DataStream.isFailureStoreFeatureFlagEnabled ? dataStream.getFailureIndices() .getIndices() .stream() diff --git a/server/src/test/java/org/elasticsearch/action/bulk/BulkOperationTests.java b/server/src/test/java/org/elasticsearch/action/bulk/BulkOperationTests.java index c39be42f96150..b1535bd7db526 100644 --- a/server/src/test/java/org/elasticsearch/action/bulk/BulkOperationTests.java +++ b/server/src/test/java/org/elasticsearch/action/bulk/BulkOperationTests.java @@ -357,7 +357,7 @@ public void testBulkToDataStreamFailingEntireShard() throws Exception { * A bulk operation to a data stream with a failure store enabled should redirect any shard level failures to the failure store. */ public void testFailingEntireShardRedirectsToFailureStore() throws Exception { - Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled()); + Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled); // Requests that go to two separate shards BulkRequest bulkRequest = new BulkRequest(); @@ -384,7 +384,7 @@ public void testFailingEntireShardRedirectsToFailureStore() throws Exception { * failure store. */ public void testFailingDocumentRedirectsToFailureStore() throws Exception { - Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled()); + Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled); // Requests that go to two separate shards BulkRequest bulkRequest = new BulkRequest(); @@ -411,7 +411,7 @@ public void testFailingDocumentRedirectsToFailureStore() throws Exception { * a shard-level failure while writing to the failure store indices. */ public void testFailureStoreShardFailureRejectsDocument() throws Exception { - Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled()); + Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled); // Requests that go to two separate shards BulkRequest bulkRequest = new BulkRequest(); @@ -451,7 +451,7 @@ public void testFailureStoreShardFailureRejectsDocument() throws Exception { * instead will simply report its original failure in the response, with the conversion failure present as a suppressed exception. */ public void testFailedDocumentCanNotBeConvertedFails() throws Exception { - Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled()); + Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled); // Requests that go to two separate shards BulkRequest bulkRequest = new BulkRequest(); @@ -487,7 +487,7 @@ public void testFailedDocumentCanNotBeConvertedFails() throws Exception { * returns an unblocked cluster, the redirection of failure documents should proceed and not return early. */ public void testRetryableBlockAcceptsFailureStoreDocument() throws Exception { - Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled()); + Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled); // Requests that go to two separate shards BulkRequest bulkRequest = new BulkRequest(); @@ -580,7 +580,7 @@ public void testRetryableBlockAcceptsFailureStoreDocument() throws Exception { * non-retryable block when the redirected documents would be sent to the shard-level action. */ public void testBlockedClusterRejectsFailureStoreDocument() throws Exception { - Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled()); + Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled); // Requests that go to two separate shards BulkRequest bulkRequest = new BulkRequest(); @@ -633,7 +633,7 @@ public void testBlockedClusterRejectsFailureStoreDocument() throws Exception { * retryable block to clear when the redirected documents would be sent to the shard-level action. */ public void testOperationTimeoutRejectsFailureStoreDocument() throws Exception { - Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled()); + Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled); // Requests that go to two separate shards BulkRequest bulkRequest = new BulkRequest(); @@ -694,7 +694,7 @@ public void testOperationTimeoutRejectsFailureStoreDocument() throws Exception { * for a retryable block to clear when the redirected documents would be sent to the shard-level action. */ public void testNodeClosureRejectsFailureStoreDocument() { - Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled()); + Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled); // Requests that go to two separate shards BulkRequest bulkRequest = new BulkRequest(); @@ -739,7 +739,7 @@ public void testNodeClosureRejectsFailureStoreDocument() { * rollover, it first needs to roll over the failure store and then redirect the failure to the new failure index. */ public void testLazilyRollingOverFailureStore() throws Exception { - Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled()); + Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled); // Requests that go to two separate shards BulkRequest bulkRequest = new BulkRequest(); @@ -795,7 +795,7 @@ public void testLazilyRollingOverFailureStore() throws Exception { * should be added to the list of suppressed causes in the BulkItemResponse. */ public void testFailureWhileRollingOverFailureStore() throws Exception { - Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled()); + Assume.assumeTrue(DataStream.isFailureStoreFeatureFlagEnabled); // Requests that go to two separate shards BulkRequest bulkRequest = new BulkRequest(); diff --git a/server/src/test/java/org/elasticsearch/action/bulk/TransportBulkActionTests.java b/server/src/test/java/org/elasticsearch/action/bulk/TransportBulkActionTests.java index eae6fbf9cbc7f..8572a1d010e48 100644 --- a/server/src/test/java/org/elasticsearch/action/bulk/TransportBulkActionTests.java +++ b/server/src/test/java/org/elasticsearch/action/bulk/TransportBulkActionTests.java @@ -389,7 +389,7 @@ public void testRejectionAfterCreateIndexIsPropagated() { } public void testResolveFailureStoreFromMetadata() throws Exception { - assumeThat(DataStream.isFailureStoreFeatureFlagEnabled(), is(true)); + assumeThat(DataStream.isFailureStoreFeatureFlagEnabled, is(true)); String dataStreamWithFailureStore = "test-data-stream-failure-enabled"; String dataStreamWithoutFailureStore = "test-data-stream-failure-disabled"; @@ -451,7 +451,7 @@ public void testResolveFailureStoreFromMetadata() throws Exception { } public void testResolveFailureStoreFromTemplate() throws Exception { - assumeThat(DataStream.isFailureStoreFeatureFlagEnabled(), is(true)); + assumeThat(DataStream.isFailureStoreFeatureFlagEnabled, is(true)); String dsTemplateWithFailureStore = "test-data-stream-failure-enabled"; String dsTemplateWithoutFailureStore = "test-data-stream-failure-disabled"; diff --git a/server/src/test/java/org/elasticsearch/cluster/metadata/DateMathExpressionResolverTests.java b/server/src/test/java/org/elasticsearch/cluster/metadata/DateMathExpressionResolverTests.java index 6be5b48f9d723..052520394746b 100644 --- a/server/src/test/java/org/elasticsearch/cluster/metadata/DateMathExpressionResolverTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/metadata/DateMathExpressionResolverTests.java @@ -15,6 +15,7 @@ import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.Context; import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.DateMathExpressionResolver; +import org.elasticsearch.common.Strings; import org.elasticsearch.indices.SystemIndices.SystemIndexAccessLevel; import org.elasticsearch.test.ESTestCase; import org.hamcrest.Matchers; @@ -24,9 +25,6 @@ import java.time.ZoneOffset; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; import java.util.List; import java.util.Locale; @@ -52,20 +50,19 @@ private static String formatDate(String pattern, ZonedDateTime zonedDateTime) { public void testNormal() throws Exception { int numIndexExpressions = randomIntBetween(1, 9); - List indexExpressions = new ArrayList<>(numIndexExpressions); + String[] indexExpressions = new String[numIndexExpressions]; for (int i = 0; i < numIndexExpressions; i++) { - indexExpressions.add(randomAlphaOfLength(10)); + indexExpressions[i] = randomAlphaOfLength(10); } List result = DateMathExpressionResolver.resolve(context, indexExpressions); - assertThat(result.size(), equalTo(indexExpressions.size())); - for (int i = 0; i < indexExpressions.size(); i++) { - assertThat(result.get(i), equalTo(indexExpressions.get(i))); + assertThat(result.size(), equalTo(numIndexExpressions)); + for (int i = 0; i < numIndexExpressions; i++) { + assertThat(result.get(i), equalTo(indexExpressions[i])); } } public void testExpression() throws Exception { - List indexExpressions = Arrays.asList("<.marvel-{now}>", "<.watch_history-{now}>", ""); - List result = DateMathExpressionResolver.resolve(context, indexExpressions); + List result = DateMathExpressionResolver.resolve(context, "<.marvel-{now}>", "<.watch_history-{now}>", ""); assertThat(result.size(), equalTo(3)); assertThat(result.get(0), equalTo(".marvel-" + formatDate("uuuu.MM.dd", dateFromMillis(context.getStartTime())))); assertThat(result.get(1), equalTo(".watch_history-" + formatDate("uuuu.MM.dd", dateFromMillis(context.getStartTime())))); @@ -73,13 +70,12 @@ public void testExpression() throws Exception { } public void testExpressionWithWildcardAndExclusions() { - List indexExpressions = Arrays.asList( + String[] indexExpressions = new String[] { "<-before-inner-{now}>", "-", "", "<-after-inner-{now}>", - "-" - ); + "-" }; List result = DateMathExpressionResolver.resolve(context, indexExpressions); assertThat( result, @@ -112,18 +108,18 @@ public void testExpressionWithWildcardAndExclusions() { } public void testEmpty() throws Exception { - List result = DateMathExpressionResolver.resolve(context, Collections.emptyList()); + List result = DateMathExpressionResolver.resolve(context, Strings.EMPTY_ARRAY); assertThat(result.size(), equalTo(0)); } public void testExpression_Static() throws Exception { - List result = DateMathExpressionResolver.resolve(context, Arrays.asList("<.marvel-test>")); + List result = DateMathExpressionResolver.resolve(context, "<.marvel-test>"); assertThat(result.size(), equalTo(1)); assertThat(result.get(0), equalTo(".marvel-test")); } public void testExpression_MultiParts() throws Exception { - List result = DateMathExpressionResolver.resolve(context, Arrays.asList("<.text1-{now/d}-text2-{now/M}>")); + List result = DateMathExpressionResolver.resolve(context, "<.text1-{now/d}-text2-{now/M}>"); assertThat(result.size(), equalTo(1)); assertThat( result.get(0), @@ -137,19 +133,19 @@ public void testExpression_MultiParts() throws Exception { } public void testExpression_CustomFormat() throws Exception { - List results = DateMathExpressionResolver.resolve(context, Arrays.asList("<.marvel-{now/d{yyyy.MM.dd}}>")); + List results = DateMathExpressionResolver.resolve(context, "<.marvel-{now/d{yyyy.MM.dd}}>"); assertThat(results.size(), equalTo(1)); assertThat(results.get(0), equalTo(".marvel-" + formatDate("uuuu.MM.dd", dateFromMillis(context.getStartTime())))); } public void testExpression_EscapeStatic() throws Exception { - List result = DateMathExpressionResolver.resolve(context, Arrays.asList("<.mar\\{v\\}el-{now/d}>")); + List result = DateMathExpressionResolver.resolve(context, "<.mar\\{v\\}el-{now/d}>"); assertThat(result.size(), equalTo(1)); assertThat(result.get(0), equalTo(".mar{v}el-" + formatDate("uuuu.MM.dd", dateFromMillis(context.getStartTime())))); } public void testExpression_EscapeDateFormat() throws Exception { - List result = DateMathExpressionResolver.resolve(context, Arrays.asList("<.marvel-{now/d{'\\{year\\}'yyyy}}>")); + List result = DateMathExpressionResolver.resolve(context, "<.marvel-{now/d{'\\{year\\}'yyyy}}>"); assertThat(result.size(), equalTo(1)); assertThat(result.get(0), equalTo(".marvel-" + formatDate("'{year}'yyyy", dateFromMillis(context.getStartTime())))); } @@ -157,7 +153,10 @@ public void testExpression_EscapeDateFormat() throws Exception { public void testExpression_MixedArray() throws Exception { List result = DateMathExpressionResolver.resolve( context, - Arrays.asList("name1", "<.marvel-{now/d}>", "name2", "<.logstash-{now/M{uuuu.MM}}>") + "name1", + "<.marvel-{now/d}>", + "name2", + "<.logstash-{now/M{uuuu.MM}}>" ); assertThat(result.size(), equalTo(4)); assertThat(result.get(0), equalTo("name1")); @@ -202,10 +201,7 @@ public void testExpression_CustomTimeZoneInIndexName() throws Exception { name -> false, name -> false ); - List results = DateMathExpressionResolver.resolve( - context, - Arrays.asList("<.marvel-{now/d{yyyy.MM.dd|" + timeZone.getId() + "}}>") - ); + List results = DateMathExpressionResolver.resolve(context, "<.marvel-{now/d{yyyy.MM.dd|" + timeZone.getId() + "}}>"); assertThat(results.size(), equalTo(1)); logger.info("timezone: [{}], now [{}], name: [{}]", timeZone, now, results.get(0)); assertThat(results.get(0), equalTo(".marvel-" + formatDate("uuuu.MM.dd", now.withZoneSameInstant(timeZone)))); @@ -214,7 +210,7 @@ public void testExpression_CustomTimeZoneInIndexName() throws Exception { public void testExpressionInvalidUnescaped() throws Exception { Exception e = expectThrows( ElasticsearchParseException.class, - () -> DateMathExpressionResolver.resolve(context, Arrays.asList("<.mar}vel-{now/d}>")) + () -> DateMathExpressionResolver.resolve(context, "<.mar}vel-{now/d}>") ); assertThat(e.getMessage(), containsString("invalid dynamic name expression")); assertThat(e.getMessage(), containsString("invalid character at position [")); @@ -223,7 +219,7 @@ public void testExpressionInvalidUnescaped() throws Exception { public void testExpressionInvalidDateMathFormat() throws Exception { Exception e = expectThrows( ElasticsearchParseException.class, - () -> DateMathExpressionResolver.resolve(context, Arrays.asList("<.marvel-{now/d{}>")) + () -> DateMathExpressionResolver.resolve(context, "<.marvel-{now/d{}>") ); assertThat(e.getMessage(), containsString("invalid dynamic name expression")); assertThat(e.getMessage(), containsString("date math placeholder is open ended")); @@ -232,7 +228,7 @@ public void testExpressionInvalidDateMathFormat() throws Exception { public void testExpressionInvalidEmptyDateMathFormat() throws Exception { Exception e = expectThrows( ElasticsearchParseException.class, - () -> DateMathExpressionResolver.resolve(context, Arrays.asList("<.marvel-{now/d{}}>")) + () -> DateMathExpressionResolver.resolve(context, "<.marvel-{now/d{}}>") ); assertThat(e.getMessage(), containsString("invalid dynamic name expression")); assertThat(e.getMessage(), containsString("missing date format")); @@ -241,7 +237,7 @@ public void testExpressionInvalidEmptyDateMathFormat() throws Exception { public void testExpressionInvalidOpenEnded() throws Exception { Exception e = expectThrows( ElasticsearchParseException.class, - () -> DateMathExpressionResolver.resolve(context, Arrays.asList("<.marvel-{now/d>")) + () -> DateMathExpressionResolver.resolve(context, "<.marvel-{now/d>") ); assertThat(e.getMessage(), containsString("invalid dynamic name expression")); assertThat(e.getMessage(), containsString("date math placeholder is open ended")); diff --git a/test/framework/src/main/java/org/elasticsearch/cluster/metadata/DataStreamTestHelper.java b/test/framework/src/main/java/org/elasticsearch/cluster/metadata/DataStreamTestHelper.java index add110de35a0b..249e348889066 100644 --- a/test/framework/src/main/java/org/elasticsearch/cluster/metadata/DataStreamTestHelper.java +++ b/test/framework/src/main/java/org/elasticsearch/cluster/metadata/DataStreamTestHelper.java @@ -467,7 +467,7 @@ public static void getClusterStateWithDataStreams( new ComposableIndexTemplate.DataStreamTemplate( false, false, - DataStream.isFailureStoreFeatureFlagEnabled() && storeFailures + DataStream.isFailureStoreFeatureFlagEnabled && storeFailures ) ) .build() @@ -484,7 +484,7 @@ public static void getClusterStateWithDataStreams( allIndices.addAll(backingIndices); List failureStores = new ArrayList<>(); - if (DataStream.isFailureStoreFeatureFlagEnabled() && storeFailures) { + if (DataStream.isFailureStoreFeatureFlagEnabled && storeFailures) { for (int failureStoreNumber = 1; failureStoreNumber <= dsTuple.v2(); failureStoreNumber++) { failureStores.add( createIndexMetadata( diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/action/DataStreamUsageTransportAction.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/action/DataStreamUsageTransportAction.java index 26f3bdd7654ca..0244116865fc5 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/action/DataStreamUsageTransportAction.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/action/DataStreamUsageTransportAction.java @@ -55,7 +55,7 @@ protected void masterOperation( long failureIndicesCounter = 0; for (DataStream ds : dataStreams.values()) { backingIndicesCounter += ds.getIndices().size(); - if (DataStream.isFailureStoreFeatureFlagEnabled()) { + if (DataStream.isFailureStoreFeatureFlagEnabled) { if (ds.isFailureStoreEnabled()) { failureStoreEnabledCounter++; } diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/datastreams/DataStreamFeatureSetUsage.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/datastreams/DataStreamFeatureSetUsage.java index 1a964f3c57dbb..12e7b0e9d26ac 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/datastreams/DataStreamFeatureSetUsage.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/datastreams/DataStreamFeatureSetUsage.java @@ -50,7 +50,7 @@ protected void innerXContent(XContentBuilder builder, Params params) throws IOEx super.innerXContent(builder, params); builder.field("data_streams", streamStats.totalDataStreamCount); builder.field("indices_count", streamStats.indicesBehindDataStream); - if (DataStream.isFailureStoreFeatureFlagEnabled()) { + if (DataStream.isFailureStoreFeatureFlagEnabled) { builder.startObject("failure_store"); builder.field("enabled_count", streamStats.failureStoreEnabledDataStreamCount); builder.field("failure_indices_count", streamStats.failureStoreIndicesCount);