Skip to content

Commit 2ed8cd3

Browse files
authored
[8.17] Use min node version to guard injecting settings in logs provider (#123005) (#123051)
* Use min node version to guard injecting settings in logs provider (#123005) * Use min node version to guard injecting settings in logs provider * Update docs/changelog/123005.yaml * no random in cluster init (cherry picked from commit 5c12978) # Conflicts: # x-pack/plugin/logsdb/src/main/java/org/elasticsearch/xpack/logsdb/LogsDBPlugin.java # x-pack/plugin/logsdb/src/main/java/org/elasticsearch/xpack/logsdb/LogsdbIndexModeSettingsProvider.java # x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/LogsdbIndexModeSettingsProviderTests.java # x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/SyntheticSourceIndexSettingsProviderLegacyLicenseTests.java * port fixes
1 parent 2f4ae97 commit 2ed8cd3

File tree

5 files changed

+60
-7
lines changed

5 files changed

+60
-7
lines changed

docs/changelog/123005.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
pr: 123005
2+
summary: Use min node version to guard injecting settings in logs provider
3+
area: Logs
4+
type: bug
5+
issues:
6+
- 122950

x-pack/plugin/logsdb/src/main/java/org/elasticsearch/xpack/logsdb/LogsDBPlugin.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ public Collection<IndexSettingProvider> getAdditionalIndexSettingProviders(Index
7373
() -> IndexVersion.min(
7474
IndexVersion.current(),
7575
parameters.clusterService().state().nodes().getMaxDataNodeCompatibleIndexVersion()
76-
)
76+
),
77+
() -> parameters.clusterService().state().nodes().getMinNodeVersion()
7778
);
7879
return List.of(syntheticSettingProvider, logsdbIndexModeSettingsProvider);
7980
}

x-pack/plugin/logsdb/src/main/java/org/elasticsearch/xpack/logsdb/SyntheticSourceIndexSettingsProvider.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import org.apache.logging.log4j.LogManager;
1111
import org.apache.logging.log4j.Logger;
12+
import org.elasticsearch.Version;
1213
import org.elasticsearch.cluster.metadata.IndexMetadata;
1314
import org.elasticsearch.cluster.metadata.Metadata;
1415
import org.elasticsearch.common.UUIDs;
@@ -41,17 +42,20 @@ final class SyntheticSourceIndexSettingsProvider implements IndexSettingProvider
4142
private final CheckedFunction<IndexMetadata, MapperService, IOException> mapperServiceFactory;
4243
private final LogsdbIndexModeSettingsProvider logsdbIndexModeSettingsProvider;
4344
private final Supplier<IndexVersion> createdIndexVersion;
45+
private final Supplier<Version> minNodeVersion;
4446

4547
SyntheticSourceIndexSettingsProvider(
4648
SyntheticSourceLicenseService syntheticSourceLicenseService,
4749
CheckedFunction<IndexMetadata, MapperService, IOException> mapperServiceFactory,
4850
LogsdbIndexModeSettingsProvider logsdbIndexModeSettingsProvider,
49-
Supplier<IndexVersion> createdIndexVersion
51+
Supplier<IndexVersion> createdIndexVersion,
52+
Supplier<Version> minNodeVersion
5053
) {
5154
this.syntheticSourceLicenseService = syntheticSourceLicenseService;
5255
this.mapperServiceFactory = mapperServiceFactory;
5356
this.logsdbIndexModeSettingsProvider = logsdbIndexModeSettingsProvider;
5457
this.createdIndexVersion = createdIndexVersion;
58+
this.minNodeVersion = minNodeVersion;
5559
}
5660

5761
@Override
@@ -70,6 +74,10 @@ public Settings getAdditionalIndexSettings(
7074
Settings indexTemplateAndCreateRequestSettings,
7175
List<CompressedXContent> combinedTemplateMappings
7276
) {
77+
if (minNodeVersion.get().before(Version.V_8_17_0)) {
78+
return Settings.EMPTY;
79+
}
80+
7381
var logsdbSettings = logsdbIndexModeSettingsProvider.getLogsdbModeSetting(dataStreamName, indexTemplateAndCreateRequestSettings);
7482
if (logsdbSettings != Settings.EMPTY) {
7583
indexTemplateAndCreateRequestSettings = Settings.builder()

x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/SyntheticSourceIndexSettingsProviderLegacyLicenseTests.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
package org.elasticsearch.xpack.logsdb;
99

10+
import org.elasticsearch.Version;
1011
import org.elasticsearch.cluster.metadata.DataStream;
1112
import org.elasticsearch.common.settings.Settings;
1213
import org.elasticsearch.index.IndexMode;
@@ -54,7 +55,8 @@ public void setup() throws Exception {
5455
syntheticSourceLicenseService,
5556
im -> MapperTestUtils.newMapperService(xContentRegistry(), createTempDir(), im.getSettings(), im.getIndex().getName()),
5657
getLogsdbIndexModeSettingsProvider(false),
57-
IndexVersion::current
58+
IndexVersion::current,
59+
() -> Version.CURRENT
5860
);
5961
}
6062

@@ -116,7 +118,8 @@ public void testGetAdditionalIndexSettingsTsdbAfterCutoffDate() throws Exception
116118
syntheticSourceLicenseService,
117119
im -> MapperTestUtils.newMapperService(xContentRegistry(), createTempDir(), im.getSettings(), im.getIndex().getName()),
118120
getLogsdbIndexModeSettingsProvider(false),
119-
IndexVersion::current
121+
IndexVersion::current,
122+
() -> Version.CURRENT
120123
);
121124

122125
Settings settings = Settings.builder().put(SourceFieldMapper.INDEX_MAPPER_SOURCE_MODE_SETTING.getKey(), "SYNTHETIC").build();

x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/SyntheticSourceIndexSettingsProviderTests.java

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
package org.elasticsearch.xpack.logsdb;
99

10+
import org.elasticsearch.Version;
1011
import org.elasticsearch.cluster.metadata.DataStream;
1112
import org.elasticsearch.cluster.metadata.DataStreamTestHelper;
1213
import org.elasticsearch.cluster.metadata.Metadata;
@@ -62,7 +63,7 @@ public void setup() throws Exception {
6263
provider = new SyntheticSourceIndexSettingsProvider(syntheticSourceLicenseService, im -> {
6364
newMapperServiceCounter.incrementAndGet();
6465
return MapperTestUtils.newMapperService(xContentRegistry(), createTempDir(), im.getSettings(), im.getIndex().getName());
65-
}, getLogsdbIndexModeSettingsProvider(false), IndexVersion::current);
66+
}, getLogsdbIndexModeSettingsProvider(false), IndexVersion::current, () -> Version.CURRENT);
6667
newMapperServiceCounter.set(0);
6768
}
6869

@@ -275,7 +276,7 @@ public void testNewIndexHasSyntheticSourceUsage_invalidSettings() throws IOExcep
275276
}
276277
}
277278

278-
public void testGetAdditionalIndexSettingsDowngradeFromSyntheticSource() throws IOException {
279+
public void testGetAdditionalIndexSettingsDowngradeFromSyntheticSource() {
279280
String dataStreamName = "logs-app1";
280281
Metadata.Builder mb = Metadata.builder(
281282
DataStreamTestHelper.getClusterStateWithDataStreams(
@@ -344,13 +345,47 @@ public void testGetAdditionalIndexSettingsDowngradeFromSyntheticSource() throws
344345
assertThat(newMapperServiceCounter.get(), equalTo(0));
345346
}
346347

348+
public void testGetAdditionalIndexSettingsDowngradeFromSyntheticSourceOldNode() {
349+
String dataStreamName = "logs-app1";
350+
Metadata.Builder mb = Metadata.builder(
351+
DataStreamTestHelper.getClusterStateWithDataStreams(
352+
List.of(Tuple.tuple(dataStreamName, 1)),
353+
List.of(),
354+
Instant.now().toEpochMilli(),
355+
builder().build(),
356+
1
357+
).getMetadata()
358+
);
359+
Metadata metadata = mb.build();
360+
361+
Settings settings = builder().put(SourceFieldMapper.INDEX_MAPPER_SOURCE_MODE_SETTING.getKey(), SourceFieldMapper.Mode.SYNTHETIC)
362+
.build();
363+
364+
syntheticSourceLicenseService.setSyntheticSourceFallback(true);
365+
provider = new SyntheticSourceIndexSettingsProvider(syntheticSourceLicenseService, im -> {
366+
newMapperServiceCounter.incrementAndGet();
367+
return MapperTestUtils.newMapperService(xContentRegistry(), createTempDir(), im.getSettings(), im.getIndex().getName());
368+
}, getLogsdbIndexModeSettingsProvider(false), IndexVersion::current, () -> Version.V_8_16_0);
369+
var result = provider.getAdditionalIndexSettings(
370+
DataStream.getDefaultBackingIndexName(dataStreamName, 2),
371+
dataStreamName,
372+
null,
373+
metadata,
374+
Instant.ofEpochMilli(1L),
375+
settings,
376+
List.of()
377+
);
378+
assertTrue(result.isEmpty());
379+
}
380+
347381
public void testGetAdditionalIndexSettingsDowngradeFromSyntheticSourceFileMatch() throws IOException {
348382
syntheticSourceLicenseService.setSyntheticSourceFallback(true);
349383
provider = new SyntheticSourceIndexSettingsProvider(
350384
syntheticSourceLicenseService,
351385
im -> MapperTestUtils.newMapperService(xContentRegistry(), createTempDir(), im.getSettings(), im.getIndex().getName()),
352386
getLogsdbIndexModeSettingsProvider(true),
353-
IndexVersion::current
387+
IndexVersion::current,
388+
() -> Version.CURRENT
354389
);
355390
final Settings settings = Settings.EMPTY;
356391

0 commit comments

Comments
 (0)