Skip to content

Commit 4b2750e

Browse files
authored
[9.0] Allow a tsdb data stream to rolled over to a logsdb data stream (#126712)
Backporting #126640 to 9.0 branch. This doesn't make much sense. However, if a data stream's index mode differs from the index mode of most recent backing index, then this can cause confusion. Typically, misconfiguration is a reason this can happen. Related to #126637 * fix test compile issue
1 parent 09e9ee2 commit 4b2750e

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

server/src/main/java/org/elasticsearch/cluster/metadata/DataStream.java

+10
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
*/
99
package org.elasticsearch.cluster.metadata;
1010

11+
import org.apache.logging.log4j.LogManager;
12+
import org.apache.logging.log4j.Logger;
1113
import org.apache.lucene.document.LongPoint;
1214
import org.apache.lucene.index.LeafReader;
1315
import org.apache.lucene.index.PointValues;
@@ -68,6 +70,8 @@
6870

6971
public final class DataStream implements SimpleDiffable<DataStream>, ToXContentObject, IndexAbstraction {
7072

73+
private static final Logger LOGGER = LogManager.getLogger(DataStream.class);
74+
7175
public static final FeatureFlag FAILURE_STORE_FEATURE_FLAG = new FeatureFlag("failure_store");
7276
public static final TransportVersion ADDED_FAILURE_STORE_TRANSPORT_VERSION = TransportVersions.V_8_12_0;
7377
public static final TransportVersion ADDED_AUTO_SHARDING_EVENT_VERSION = TransportVersions.V_8_14_0;
@@ -575,6 +579,12 @@ public DataStream unsafeRollover(
575579
} else if (dsIndexMode == IndexMode.LOGSDB && (indexModeFromTemplate == null || indexModeFromTemplate == IndexMode.STANDARD)) {
576580
// Allow downgrading a time series data stream to a regular data stream
577581
dsIndexMode = null;
582+
} else if (dsIndexMode == IndexMode.TIME_SERIES && indexModeFromTemplate == IndexMode.LOGSDB) {
583+
dsIndexMode = IndexMode.LOGSDB;
584+
LOGGER.warn("Changing [{}] index mode from [{}] to [{}]", name, indexModeFromTemplate, dsIndexMode);
585+
} else if (dsIndexMode == IndexMode.LOGSDB && indexModeFromTemplate == IndexMode.TIME_SERIES) {
586+
dsIndexMode = IndexMode.TIME_SERIES;
587+
LOGGER.warn("Changing [{}] index mode from [{}] to [{}]", name, indexModeFromTemplate, dsIndexMode);
578588
}
579589

580590
List<Index> backingIndices = new ArrayList<>(this.backingIndices.indices);

server/src/test/java/org/elasticsearch/cluster/metadata/DataStreamTests.java

+31
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,37 @@ public void testRolloverUpgradeToLogsdbDataStream() {
273273
assertThat(rolledDs.getIndexMode(), equalTo(IndexMode.LOGSDB));
274274
}
275275

276+
public void testRolloverFromTSdbToLogsdb() {
277+
DataStream ds = DataStreamTestHelper.randomInstance().copy().setReplicated(false).setIndexMode(IndexMode.TIME_SERIES).build();
278+
var newCoordinates = ds.nextWriteIndexAndGeneration(Metadata.EMPTY_METADATA, ds.getDataComponent());
279+
280+
var rolledDs = ds.rollover(new Index(newCoordinates.v1(), UUIDs.randomBase64UUID()), newCoordinates.v2(), IndexMode.LOGSDB, null);
281+
assertThat(rolledDs.getName(), equalTo(ds.getName()));
282+
assertThat(rolledDs.getGeneration(), equalTo(ds.getGeneration() + 1));
283+
assertThat(rolledDs.getIndices().size(), equalTo(ds.getIndices().size() + 1));
284+
assertTrue(rolledDs.getIndices().containsAll(ds.getIndices()));
285+
assertTrue(rolledDs.getIndices().contains(rolledDs.getWriteIndex()));
286+
assertThat(rolledDs.getIndexMode(), equalTo(IndexMode.LOGSDB));
287+
}
288+
289+
public void testRolloverFromLogsdbToTsdb() {
290+
DataStream ds = DataStreamTestHelper.randomInstance().copy().setReplicated(false).setIndexMode(IndexMode.LOGSDB).build();
291+
var newCoordinates = ds.nextWriteIndexAndGeneration(Metadata.EMPTY_METADATA, ds.getDataComponent());
292+
293+
var rolledDs = ds.rollover(
294+
new Index(newCoordinates.v1(), UUIDs.randomBase64UUID()),
295+
newCoordinates.v2(),
296+
IndexMode.TIME_SERIES,
297+
null
298+
);
299+
assertThat(rolledDs.getName(), equalTo(ds.getName()));
300+
assertThat(rolledDs.getGeneration(), equalTo(ds.getGeneration() + 1));
301+
assertThat(rolledDs.getIndices().size(), equalTo(ds.getIndices().size() + 1));
302+
assertTrue(rolledDs.getIndices().containsAll(ds.getIndices()));
303+
assertTrue(rolledDs.getIndices().contains(rolledDs.getWriteIndex()));
304+
assertThat(rolledDs.getIndexMode(), equalTo(IndexMode.TIME_SERIES));
305+
}
306+
276307
public void testRolloverDowngradeFromTsdbToRegularDataStream() {
277308
DataStream ds = DataStreamTestHelper.randomInstance().copy().setReplicated(false).setIndexMode(IndexMode.TIME_SERIES).build();
278309
var newCoordinates = ds.nextWriteIndexAndGeneration(Metadata.EMPTY_METADATA, ds.getDataComponent());

0 commit comments

Comments
 (0)