88 */
99package org .elasticsearch .datastreams ;
1010
11+ import org .elasticsearch .Build ;
1112import org .elasticsearch .client .Request ;
1213import org .elasticsearch .client .ResponseException ;
14+ import org .elasticsearch .common .settings .Settings ;
1315import org .elasticsearch .common .time .DateFormatter ;
1416import org .elasticsearch .common .time .DateFormatters ;
1517import org .elasticsearch .common .time .FormatNames ;
1618import org .elasticsearch .index .mapper .DateFieldMapper ;
19+ import org .elasticsearch .test .cluster .FeatureFlag ;
1720import org .elasticsearch .test .rest .ObjectPath ;
1821import org .junit .Before ;
1922
2528import java .util .Set ;
2629
2730import static org .elasticsearch .cluster .metadata .DataStreamTestHelper .backingIndexEqualTo ;
31+ import static org .elasticsearch .index .IndexSettings .USE_SYNTHETIC_ID ;
2832import static org .hamcrest .Matchers .containsInAnyOrder ;
2933import static org .hamcrest .Matchers .containsString ;
3034import static org .hamcrest .Matchers .empty ;
3640
3741public class TsdbDataStreamRestIT extends DisabledSecurityDataStreamTestCase {
3842
43+ static {
44+ clusterConfig = config -> config .feature (FeatureFlag .TSDB_SYNTHETIC_ID_FEATURE_FLAG );
45+ }
46+
3947 private static final String COMPONENT_TEMPLATE = """
4048 {
4149 "template": {
@@ -53,7 +61,7 @@ public class TsdbDataStreamRestIT extends DisabledSecurityDataStreamTestCase {
5361 "number_of_replicas": 1,
5462 "number_of_shards": 2,
5563 "mode": "time_series"
56- SOURCEMODE
64+ RANDOM_INDEX_SETTINGS
5765 }
5866 },
5967 "mappings":{
@@ -202,9 +210,51 @@ public class TsdbDataStreamRestIT extends DisabledSecurityDataStreamTestCase {
202210 """ ;
203211
204212 private static String getTemplate () {
205- return TEMPLATE .replace ("SOURCEMODE" , randomFrom ("" , """
206- , "mapping": { "source": { "mode": "stored" } }""" , """
207- , "mapping": { "source": { "mode": "synthetic" } }""" ));
213+ String sourceMode = switch (randomInt (2 )) {
214+ case 0 -> null ;
215+ case 1 -> """
216+ "source": { "mode": "stored" }
217+ """ ;
218+ case 2 -> """
219+ "source": { "mode": "synthetic" }
220+ """ ;
221+ default -> throw new AssertionError ("Unknown mode" );
222+ };
223+ String idMode = null ;
224+ if (Build .current ().isSnapshot ()) {
225+ idMode = switch (randomInt (2 )) {
226+ case 0 -> null ;
227+ case 1 -> """
228+ "use_synthetic_id": "false"
229+ """ ;
230+ case 2 -> """
231+ "use_synthetic_id": "true"
232+ """ ;
233+ default -> throw new AssertionError ("Unknown mode" );
234+ };
235+ } else {
236+ assertFalse (
237+ "Setting is enabled by default and must now be tested on non-snapshot build too " ,
238+ USE_SYNTHETIC_ID .getDefault (Settings .EMPTY )
239+ );
240+ }
241+ if (sourceMode == null && idMode == null ) {
242+ return TEMPLATE .replace ("RANDOM_INDEX_SETTINGS" , "" );
243+ }
244+ var mapping = new StringBuilder ("""
245+ , "mapping": {
246+ """ );
247+ if (sourceMode != null ) {
248+ mapping .append (sourceMode );
249+ }
250+ if (idMode != null ) {
251+ if (sourceMode != null ) {
252+ mapping .append (',' );
253+ }
254+ mapping .append (idMode );
255+ }
256+ mapping .append ('}' );
257+ return TEMPLATE .replace ("RANDOM_INDEX_SETTINGS" , mapping .toString ());
208258 }
209259
210260 private static boolean trialStarted = false ;
0 commit comments