Allow a tsdb data stream to rolled over to a logsdb data stream (#126640)
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
This commit is contained in:
parent
5689dfa9bb
commit
f658af6628
|
@ -8,6 +8,8 @@
|
|||
*/
|
||||
package org.elasticsearch.cluster.metadata;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.apache.lucene.document.LongPoint;
|
||||
import org.apache.lucene.index.DocValuesSkipIndexType;
|
||||
import org.apache.lucene.index.DocValuesSkipper;
|
||||
|
@ -71,6 +73,8 @@ import static org.elasticsearch.index.IndexSettings.PREFER_ILM_SETTING;
|
|||
|
||||
public final class DataStream implements SimpleDiffable<DataStream>, ToXContentObject, IndexAbstraction {
|
||||
|
||||
private static final Logger LOGGER = LogManager.getLogger(DataStream.class);
|
||||
|
||||
public static final boolean FAILURE_STORE_FEATURE_FLAG = new FeatureFlag("failure_store").isEnabled();
|
||||
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;
|
||||
|
@ -610,6 +614,12 @@ public final class DataStream implements SimpleDiffable<DataStream>, ToXContentO
|
|||
} else if (dsIndexMode == IndexMode.LOGSDB && (indexModeFromTemplate == null || indexModeFromTemplate == IndexMode.STANDARD)) {
|
||||
// Allow downgrading a time series data stream to a regular data stream
|
||||
dsIndexMode = null;
|
||||
} else if (dsIndexMode == IndexMode.TIME_SERIES && indexModeFromTemplate == IndexMode.LOGSDB) {
|
||||
dsIndexMode = IndexMode.LOGSDB;
|
||||
LOGGER.warn("Changing [{}] index mode from [{}] to [{}]", name, indexModeFromTemplate, dsIndexMode);
|
||||
} else if (dsIndexMode == IndexMode.LOGSDB && indexModeFromTemplate == IndexMode.TIME_SERIES) {
|
||||
dsIndexMode = IndexMode.TIME_SERIES;
|
||||
LOGGER.warn("Changing [{}] index mode from [{}] to [{}]", name, indexModeFromTemplate, dsIndexMode);
|
||||
}
|
||||
|
||||
List<Index> backingIndices = new ArrayList<>(this.backingIndices.indices);
|
||||
|
|
|
@ -277,6 +277,39 @@ public class DataStreamTests extends AbstractXContentSerializingTestCase<DataStr
|
|||
assertThat(rolledDs.getIndexMode(), equalTo(IndexMode.LOGSDB));
|
||||
}
|
||||
|
||||
public void testRolloverFromTSdbToLogsdb() {
|
||||
DataStream ds = DataStreamTestHelper.randomInstance().copy().setReplicated(false).setIndexMode(IndexMode.TIME_SERIES).build();
|
||||
final var project = ProjectMetadata.builder(randomProjectIdOrDefault()).build();
|
||||
var newCoordinates = ds.nextWriteIndexAndGeneration(project, ds.getDataComponent());
|
||||
|
||||
var rolledDs = ds.rollover(new Index(newCoordinates.v1(), UUIDs.randomBase64UUID()), newCoordinates.v2(), IndexMode.LOGSDB, null);
|
||||
assertThat(rolledDs.getName(), equalTo(ds.getName()));
|
||||
assertThat(rolledDs.getGeneration(), equalTo(ds.getGeneration() + 1));
|
||||
assertThat(rolledDs.getIndices().size(), equalTo(ds.getIndices().size() + 1));
|
||||
assertTrue(rolledDs.getIndices().containsAll(ds.getIndices()));
|
||||
assertTrue(rolledDs.getIndices().contains(rolledDs.getWriteIndex()));
|
||||
assertThat(rolledDs.getIndexMode(), equalTo(IndexMode.LOGSDB));
|
||||
}
|
||||
|
||||
public void testRolloverFromLogsdbToTsdb() {
|
||||
DataStream ds = DataStreamTestHelper.randomInstance().copy().setReplicated(false).setIndexMode(IndexMode.LOGSDB).build();
|
||||
final var project = ProjectMetadata.builder(randomProjectIdOrDefault()).build();
|
||||
var newCoordinates = ds.nextWriteIndexAndGeneration(project, ds.getDataComponent());
|
||||
|
||||
var rolledDs = ds.rollover(
|
||||
new Index(newCoordinates.v1(), UUIDs.randomBase64UUID()),
|
||||
newCoordinates.v2(),
|
||||
IndexMode.TIME_SERIES,
|
||||
null
|
||||
);
|
||||
assertThat(rolledDs.getName(), equalTo(ds.getName()));
|
||||
assertThat(rolledDs.getGeneration(), equalTo(ds.getGeneration() + 1));
|
||||
assertThat(rolledDs.getIndices().size(), equalTo(ds.getIndices().size() + 1));
|
||||
assertTrue(rolledDs.getIndices().containsAll(ds.getIndices()));
|
||||
assertTrue(rolledDs.getIndices().contains(rolledDs.getWriteIndex()));
|
||||
assertThat(rolledDs.getIndexMode(), equalTo(IndexMode.TIME_SERIES));
|
||||
}
|
||||
|
||||
public void testRolloverDowngradeFromTsdbToRegularDataStream() {
|
||||
DataStream ds = DataStreamTestHelper.randomInstance().copy().setReplicated(false).setIndexMode(IndexMode.TIME_SERIES).build();
|
||||
final var project = ProjectMetadata.builder(randomProjectIdOrDefault()).build();
|
||||
|
|
Loading…
Reference in New Issue