|
@@ -24,6 +24,7 @@ import org.elasticsearch.cluster.ClusterState;
|
|
|
import org.elasticsearch.cluster.block.ClusterBlockException;
|
|
|
import org.elasticsearch.cluster.block.ClusterBlockLevel;
|
|
|
import org.elasticsearch.cluster.health.ClusterStateHealth;
|
|
|
+import org.elasticsearch.cluster.metadata.ComposableIndexTemplate;
|
|
|
import org.elasticsearch.cluster.metadata.DataStream;
|
|
|
import org.elasticsearch.cluster.metadata.DataStreamFailureStoreSettings;
|
|
|
import org.elasticsearch.cluster.metadata.DataStreamGlobalRetentionSettings;
|
|
@@ -39,6 +40,9 @@ import org.elasticsearch.core.Nullable;
|
|
|
import org.elasticsearch.core.Tuple;
|
|
|
import org.elasticsearch.index.Index;
|
|
|
import org.elasticsearch.index.IndexMode;
|
|
|
+import org.elasticsearch.index.IndexSettingProvider;
|
|
|
+import org.elasticsearch.index.IndexSettingProviders;
|
|
|
+import org.elasticsearch.index.IndexSettings;
|
|
|
import org.elasticsearch.indices.SystemDataStreamDescriptor;
|
|
|
import org.elasticsearch.indices.SystemIndices;
|
|
|
import org.elasticsearch.injection.guice.Inject;
|
|
@@ -52,6 +56,7 @@ import java.util.Arrays;
|
|
|
import java.util.Comparator;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
+import java.util.Locale;
|
|
|
import java.util.Map;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -67,6 +72,7 @@ public class TransportGetDataStreamsAction extends TransportMasterNodeReadAction
|
|
|
private final ClusterSettings clusterSettings;
|
|
|
private final DataStreamGlobalRetentionSettings globalRetentionSettings;
|
|
|
private final DataStreamFailureStoreSettings dataStreamFailureStoreSettings;
|
|
|
+ private final IndexSettingProviders indexSettingProviders;
|
|
|
private final Client client;
|
|
|
|
|
|
@Inject
|
|
@@ -79,6 +85,7 @@ public class TransportGetDataStreamsAction extends TransportMasterNodeReadAction
|
|
|
SystemIndices systemIndices,
|
|
|
DataStreamGlobalRetentionSettings globalRetentionSettings,
|
|
|
DataStreamFailureStoreSettings dataStreamFailureStoreSettings,
|
|
|
+ IndexSettingProviders indexSettingProviders,
|
|
|
Client client
|
|
|
) {
|
|
|
super(
|
|
@@ -96,6 +103,7 @@ public class TransportGetDataStreamsAction extends TransportMasterNodeReadAction
|
|
|
this.globalRetentionSettings = globalRetentionSettings;
|
|
|
clusterSettings = clusterService.getClusterSettings();
|
|
|
this.dataStreamFailureStoreSettings = dataStreamFailureStoreSettings;
|
|
|
+ this.indexSettingProviders = indexSettingProviders;
|
|
|
this.client = new OriginSettingClient(client, "stack");
|
|
|
}
|
|
|
|
|
@@ -128,6 +136,7 @@ public class TransportGetDataStreamsAction extends TransportMasterNodeReadAction
|
|
|
clusterSettings,
|
|
|
globalRetentionSettings,
|
|
|
dataStreamFailureStoreSettings,
|
|
|
+ indexSettingProviders,
|
|
|
maxTimestamps
|
|
|
)
|
|
|
);
|
|
@@ -148,12 +157,43 @@ public class TransportGetDataStreamsAction extends TransportMasterNodeReadAction
|
|
|
clusterSettings,
|
|
|
globalRetentionSettings,
|
|
|
dataStreamFailureStoreSettings,
|
|
|
+ indexSettingProviders,
|
|
|
null
|
|
|
)
|
|
|
);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Resolves the index mode ("index.mode" setting) for the given data stream, from the template or additional setting providers
|
|
|
+ */
|
|
|
+ @Nullable
|
|
|
+ static IndexMode resolveMode(
|
|
|
+ ClusterState state,
|
|
|
+ IndexSettingProviders indexSettingProviders,
|
|
|
+ DataStream dataStream,
|
|
|
+ Settings settings,
|
|
|
+ ComposableIndexTemplate indexTemplate
|
|
|
+ ) {
|
|
|
+ IndexMode indexMode = state.metadata().retrieveIndexModeFromTemplate(indexTemplate);
|
|
|
+ for (IndexSettingProvider provider : indexSettingProviders.getIndexSettingProviders()) {
|
|
|
+ Settings addlSettinsg = provider.getAdditionalIndexSettings(
|
|
|
+ MetadataIndexTemplateService.VALIDATE_INDEX_NAME,
|
|
|
+ dataStream.getName(),
|
|
|
+ indexMode,
|
|
|
+ state.metadata(),
|
|
|
+ Instant.now(),
|
|
|
+ settings,
|
|
|
+ List.of()
|
|
|
+ );
|
|
|
+ var rawMode = addlSettinsg.get(IndexSettings.MODE.getKey());
|
|
|
+ if (rawMode != null) {
|
|
|
+ indexMode = Enum.valueOf(IndexMode.class, rawMode.toUpperCase(Locale.ROOT));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return indexMode;
|
|
|
+ }
|
|
|
+
|
|
|
static GetDataStreamAction.Response innerOperation(
|
|
|
ClusterState state,
|
|
|
GetDataStreamAction.Request request,
|
|
@@ -162,6 +202,7 @@ public class TransportGetDataStreamsAction extends TransportMasterNodeReadAction
|
|
|
ClusterSettings clusterSettings,
|
|
|
DataStreamGlobalRetentionSettings globalRetentionSettings,
|
|
|
DataStreamFailureStoreSettings dataStreamFailureStoreSettings,
|
|
|
+ IndexSettingProviders indexSettingProviders,
|
|
|
@Nullable Map<String, Long> maxTimestamps
|
|
|
) {
|
|
|
List<DataStream> dataStreams = getDataStreams(state, indexNameExpressionResolver, request);
|
|
@@ -173,6 +214,7 @@ public class TransportGetDataStreamsAction extends TransportMasterNodeReadAction
|
|
|
final String indexTemplate;
|
|
|
boolean indexTemplatePreferIlmValue = true;
|
|
|
String ilmPolicyName = null;
|
|
|
+ IndexMode indexMode = dataStream.getIndexMode();
|
|
|
if (dataStream.isSystem()) {
|
|
|
SystemDataStreamDescriptor dataStreamDescriptor = systemIndices.findMatchingDataStreamDescriptor(dataStream.getName());
|
|
|
indexTemplate = dataStreamDescriptor != null ? dataStreamDescriptor.getDataStreamName() : null;
|
|
@@ -182,6 +224,15 @@ public class TransportGetDataStreamsAction extends TransportMasterNodeReadAction
|
|
|
dataStreamDescriptor.getComponentTemplates()
|
|
|
);
|
|
|
ilmPolicyName = settings.get(IndexMetadata.LIFECYCLE_NAME);
|
|
|
+ if (indexMode == null) {
|
|
|
+ indexMode = resolveMode(
|
|
|
+ state,
|
|
|
+ indexSettingProviders,
|
|
|
+ dataStream,
|
|
|
+ settings,
|
|
|
+ dataStreamDescriptor.getComposableIndexTemplate()
|
|
|
+ );
|
|
|
+ }
|
|
|
indexTemplatePreferIlmValue = PREFER_ILM_SETTING.get(settings);
|
|
|
}
|
|
|
} else {
|
|
@@ -189,6 +240,15 @@ public class TransportGetDataStreamsAction extends TransportMasterNodeReadAction
|
|
|
if (indexTemplate != null) {
|
|
|
Settings settings = MetadataIndexTemplateService.resolveSettings(state.metadata(), indexTemplate);
|
|
|
ilmPolicyName = settings.get(IndexMetadata.LIFECYCLE_NAME);
|
|
|
+ if (indexMode == null && state.metadata().templatesV2().get(indexTemplate) != null) {
|
|
|
+ indexMode = resolveMode(
|
|
|
+ state,
|
|
|
+ indexSettingProviders,
|
|
|
+ dataStream,
|
|
|
+ settings,
|
|
|
+ state.metadata().templatesV2().get(indexTemplate)
|
|
|
+ );
|
|
|
+ }
|
|
|
indexTemplatePreferIlmValue = PREFER_ILM_SETTING.get(settings);
|
|
|
} else {
|
|
|
LOGGER.warn(
|
|
@@ -280,7 +340,9 @@ public class TransportGetDataStreamsAction extends TransportMasterNodeReadAction
|
|
|
timeSeries,
|
|
|
backingIndicesSettingsValues,
|
|
|
indexTemplatePreferIlmValue,
|
|
|
- maxTimestamps == null ? null : maxTimestamps.get(dataStream.getName())
|
|
|
+ maxTimestamps == null ? null : maxTimestamps.get(dataStream.getName()),
|
|
|
+ // Default to standard mode if not specified; should we set this to "unset" or "unspecified" instead?
|
|
|
+ indexMode == null ? IndexMode.STANDARD.getName() : indexMode.getName()
|
|
|
)
|
|
|
);
|
|
|
}
|
|
@@ -310,7 +372,11 @@ public class TransportGetDataStreamsAction extends TransportMasterNodeReadAction
|
|
|
} else {
|
|
|
managedBy = ManagedBy.UNMANAGED;
|
|
|
}
|
|
|
- backingIndicesSettingsValues.put(index, new IndexProperties(preferIlm, indexMetadata.getLifecyclePolicyName(), managedBy));
|
|
|
+ String indexMode = IndexSettings.MODE.get(indexMetadata.getSettings()).getName();
|
|
|
+ backingIndicesSettingsValues.put(
|
|
|
+ index,
|
|
|
+ new IndexProperties(preferIlm, indexMetadata.getLifecyclePolicyName(), managedBy, indexMode)
|
|
|
+ );
|
|
|
}
|
|
|
}
|
|
|
|