Skip to content

Commit 2a93c8a

Browse files
committed
Allow a tsdb data stream to rolled over to a logsdb data stream
and the other way around. 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
1 parent 75f54a4 commit 2a93c8a

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -610,6 +610,10 @@ public DataStream unsafeRollover(
610610
} else if (dsIndexMode == IndexMode.LOGSDB && (indexModeFromTemplate == null || indexModeFromTemplate == IndexMode.STANDARD)) {
611611
// Allow downgrading a time series data stream to a regular data stream
612612
dsIndexMode = null;
613+
} else if (dsIndexMode == IndexMode.TIME_SERIES && indexModeFromTemplate == IndexMode.LOGSDB) {
614+
dsIndexMode = IndexMode.LOGSDB;
615+
} else if (dsIndexMode == IndexMode.LOGSDB && indexModeFromTemplate == IndexMode.TIME_SERIES) {
616+
dsIndexMode = IndexMode.TIME_SERIES;
613617
}
614618

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

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

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,39 @@ public void testRolloverUpgradeToLogsdbDataStream() {
277277
assertThat(rolledDs.getIndexMode(), equalTo(IndexMode.LOGSDB));
278278
}
279279

280+
public void testRolloverFromTSdbToLogsdb() {
281+
DataStream ds = DataStreamTestHelper.randomInstance().copy().setReplicated(false).setIndexMode(IndexMode.TIME_SERIES).build();
282+
final var project = ProjectMetadata.builder(randomProjectIdOrDefault()).build();
283+
var newCoordinates = ds.nextWriteIndexAndGeneration(project, ds.getDataComponent());
284+
285+
var rolledDs = ds.rollover(new Index(newCoordinates.v1(), UUIDs.randomBase64UUID()), newCoordinates.v2(), IndexMode.LOGSDB, null);
286+
assertThat(rolledDs.getName(), equalTo(ds.getName()));
287+
assertThat(rolledDs.getGeneration(), equalTo(ds.getGeneration() + 1));
288+
assertThat(rolledDs.getIndices().size(), equalTo(ds.getIndices().size() + 1));
289+
assertTrue(rolledDs.getIndices().containsAll(ds.getIndices()));
290+
assertTrue(rolledDs.getIndices().contains(rolledDs.getWriteIndex()));
291+
assertThat(rolledDs.getIndexMode(), equalTo(IndexMode.LOGSDB));
292+
}
293+
294+
public void testRolloverFromLogsdbToTsdb() {
295+
DataStream ds = DataStreamTestHelper.randomInstance().copy().setReplicated(false).setIndexMode(IndexMode.LOGSDB).build();
296+
final var project = ProjectMetadata.builder(randomProjectIdOrDefault()).build();
297+
var newCoordinates = ds.nextWriteIndexAndGeneration(project, ds.getDataComponent());
298+
299+
var rolledDs = ds.rollover(
300+
new Index(newCoordinates.v1(), UUIDs.randomBase64UUID()),
301+
newCoordinates.v2(),
302+
IndexMode.TIME_SERIES,
303+
null
304+
);
305+
assertThat(rolledDs.getName(), equalTo(ds.getName()));
306+
assertThat(rolledDs.getGeneration(), equalTo(ds.getGeneration() + 1));
307+
assertThat(rolledDs.getIndices().size(), equalTo(ds.getIndices().size() + 1));
308+
assertTrue(rolledDs.getIndices().containsAll(ds.getIndices()));
309+
assertTrue(rolledDs.getIndices().contains(rolledDs.getWriteIndex()));
310+
assertThat(rolledDs.getIndexMode(), equalTo(IndexMode.TIME_SERIES));
311+
}
312+
280313
public void testRolloverDowngradeFromTsdbToRegularDataStream() {
281314
DataStream ds = DataStreamTestHelper.randomInstance().copy().setReplicated(false).setIndexMode(IndexMode.TIME_SERIES).build();
282315
final var project = ProjectMetadata.builder(randomProjectIdOrDefault()).build();

0 commit comments

Comments
 (0)