|  | 
| 19 | 19 | import java.time.Instant; | 
| 20 | 20 | import java.time.temporal.ChronoUnit; | 
| 21 | 21 | import java.util.HashSet; | 
| 22 |  | -import java.util.List; | 
| 23 | 22 | import java.util.Map; | 
| 24 | 23 | import java.util.Set; | 
| 25 | 24 | 
 | 
| @@ -213,77 +212,19 @@ public void setup() throws IOException { | 
| 213 | 212 |  } | 
| 214 | 213 | 
 | 
| 215 | 214 |  public void testTsdbDataStreams() throws Exception { | 
| 216 |  | - var bulkRequest = new Request("POST", "/k8s/_bulk"); | 
| 217 |  | - bulkRequest.setJsonEntity(BULK.replace("$now", formatInstant(Instant.now()))); | 
| 218 |  | - bulkRequest.addParameter("refresh", "true"); | 
| 219 |  | - var response = client().performRequest(bulkRequest); | 
| 220 |  | - assertOK(response); | 
| 221 |  | - var responseBody = entityAsMap(response); | 
| 222 |  | - assertThat("errors in response:\n " + responseBody, responseBody.get("errors"), equalTo(false)); | 
| 223 |  | - | 
| 224 |  | - var getDataStreamsRequest = new Request("GET", "/_data_stream"); | 
| 225 |  | - response = client().performRequest(getDataStreamsRequest); | 
| 226 |  | - assertOK(response); | 
| 227 |  | - var dataStreams = entityAsMap(response); | 
| 228 |  | - assertThat(ObjectPath.evaluate(dataStreams, "data_streams"), hasSize(1)); | 
| 229 |  | - assertThat(ObjectPath.evaluate(dataStreams, "data_streams.0.name"), equalTo("k8s")); | 
| 230 |  | - assertThat(ObjectPath.evaluate(dataStreams, "data_streams.0.generation"), equalTo(1)); | 
| 231 |  | - assertThat(ObjectPath.evaluate(dataStreams, "data_streams.0.template"), equalTo("1")); | 
| 232 |  | - assertThat(ObjectPath.evaluate(dataStreams, "data_streams.0.indices"), hasSize(1)); | 
| 233 |  | - String firstBackingIndex = ObjectPath.evaluate(dataStreams, "data_streams.0.indices.0.index_name"); | 
| 234 |  | - assertThat(firstBackingIndex, backingIndexEqualTo("k8s", 1)); | 
| 235 |  | - | 
| 236 |  | - var indices = getIndex(firstBackingIndex); | 
| 237 |  | - var escapedBackingIndex = firstBackingIndex.replace(".", "\\."); | 
| 238 |  | - assertThat(ObjectPath.evaluate(indices, escapedBackingIndex + ".data_stream"), equalTo("k8s")); | 
| 239 |  | - assertThat(ObjectPath.evaluate(indices, escapedBackingIndex + ".settings.index.mode"), equalTo("time_series")); | 
| 240 |  | - String startTimeFirstBackingIndex = ObjectPath.evaluate(indices, escapedBackingIndex + ".settings.index.time_series.start_time"); | 
| 241 |  | - assertThat(startTimeFirstBackingIndex, notNullValue()); | 
| 242 |  | - String endTimeFirstBackingIndex = ObjectPath.evaluate(indices, escapedBackingIndex + ".settings.index.time_series.end_time"); | 
| 243 |  | - assertThat(endTimeFirstBackingIndex, notNullValue()); | 
| 244 |  | - List<?> routingPaths = ObjectPath.evaluate(indices, escapedBackingIndex + ".settings.index.routing_path"); | 
| 245 |  | - assertThat(routingPaths, containsInAnyOrder("metricset", "k8s.pod.uid", "pod.labels.*")); | 
| 246 |  | - | 
| 247 |  | - var rolloverRequest = new Request("POST", "/k8s/_rollover"); | 
| 248 |  | - assertOK(client().performRequest(rolloverRequest)); | 
| 249 |  | - | 
| 250 |  | - response = client().performRequest(getDataStreamsRequest); | 
| 251 |  | - assertOK(response); | 
| 252 |  | - dataStreams = entityAsMap(response); | 
| 253 |  | - assertThat(ObjectPath.evaluate(dataStreams, "data_streams.0.name"), equalTo("k8s")); | 
| 254 |  | - assertThat(ObjectPath.evaluate(dataStreams, "data_streams.0.generation"), equalTo(2)); | 
| 255 |  | - String secondBackingIndex = ObjectPath.evaluate(dataStreams, "data_streams.0.indices.1.index_name"); | 
| 256 |  | - assertThat(secondBackingIndex, backingIndexEqualTo("k8s", 2)); | 
| 257 |  | - | 
| 258 |  | - indices = getIndex(secondBackingIndex); | 
| 259 |  | - escapedBackingIndex = secondBackingIndex.replace(".", "\\."); | 
| 260 |  | - assertThat(ObjectPath.evaluate(indices, escapedBackingIndex + ".data_stream"), equalTo("k8s")); | 
| 261 |  | - String startTimeSecondBackingIndex = ObjectPath.evaluate(indices, escapedBackingIndex + ".settings.index.time_series.start_time"); | 
| 262 |  | - assertThat(startTimeSecondBackingIndex, equalTo(endTimeFirstBackingIndex)); | 
| 263 |  | - String endTimeSecondBackingIndex = ObjectPath.evaluate(indices, escapedBackingIndex + ".settings.index.time_series.end_time"); | 
| 264 |  | - assertThat(endTimeSecondBackingIndex, notNullValue()); | 
| 265 |  | - | 
| 266 |  | - var indexRequest = new Request("POST", "/k8s/_doc"); | 
| 267 |  | - Instant time = parseInstant(startTimeFirstBackingIndex); | 
| 268 |  | - indexRequest.setJsonEntity(DOC.replace("$time", formatInstant(time))); | 
| 269 |  | - response = client().performRequest(indexRequest); | 
| 270 |  | - assertOK(response); | 
| 271 |  | - assertThat(entityAsMap(response).get("_index"), equalTo(firstBackingIndex)); | 
| 272 |  | - | 
| 273 |  | - indexRequest = new Request("POST", "/k8s/_doc"); | 
| 274 |  | - time = parseInstant(endTimeSecondBackingIndex).minusMillis(1); | 
| 275 |  | - indexRequest.setJsonEntity(DOC.replace("$time", formatInstant(time))); | 
| 276 |  | - response = client().performRequest(indexRequest); | 
| 277 |  | - assertOK(response); | 
| 278 |  | - assertThat(entityAsMap(response).get("_index"), equalTo(secondBackingIndex)); | 
|  | 215 | + assertTsdbDataStream(); | 
| 279 | 216 |  } | 
| 280 | 217 | 
 | 
| 281 | 218 |  public void testTsdbDataStreamsNanos() throws Exception { | 
| 282 |  | - // Create a template | 
|  | 219 | + // Overwrite template to use date_nanos field type: | 
| 283 | 220 |  var putComposableIndexTemplateRequest = new Request("POST", "/_index_template/1"); | 
| 284 | 221 |  putComposableIndexTemplateRequest.setJsonEntity(TEMPLATE.replace("date", "date_nanos")); | 
| 285 | 222 |  assertOK(client().performRequest(putComposableIndexTemplateRequest)); | 
| 286 | 223 | 
 | 
|  | 224 | + assertTsdbDataStream(); | 
|  | 225 | + } | 
|  | 226 | + | 
|  | 227 | + private void assertTsdbDataStream() throws IOException { | 
| 287 | 228 |  var bulkRequest = new Request("POST", "/k8s/_bulk"); | 
| 288 | 229 |  bulkRequest.setJsonEntity(BULK.replace("$now", formatInstantNanos(Instant.now()))); | 
| 289 | 230 |  bulkRequest.addParameter("refresh", "true"); | 
| @@ -333,18 +274,53 @@ public void testTsdbDataStreamsNanos() throws Exception { | 
| 333 | 274 |  assertThat(endTimeSecondBackingIndex, notNullValue()); | 
| 334 | 275 | 
 | 
| 335 | 276 |  var indexRequest = new Request("POST", "/k8s/_doc"); | 
|  | 277 | + indexRequest.addParameter("refresh", "true"); | 
| 336 | 278 |  Instant time = parseInstant(startTimeFirstBackingIndex); | 
| 337 | 279 |  indexRequest.setJsonEntity(DOC.replace("$time", formatInstantNanos(time))); | 
| 338 | 280 |  response = client().performRequest(indexRequest); | 
| 339 | 281 |  assertOK(response); | 
| 340 | 282 |  assertThat(entityAsMap(response).get("_index"), equalTo(firstBackingIndex)); | 
| 341 | 283 | 
 | 
| 342 | 284 |  indexRequest = new Request("POST", "/k8s/_doc"); | 
|  | 285 | + indexRequest.addParameter("refresh", "true"); | 
| 343 | 286 |  time = parseInstant(endTimeSecondBackingIndex).minusMillis(1); | 
| 344 | 287 |  indexRequest.setJsonEntity(DOC.replace("$time", formatInstantNanos(time))); | 
| 345 | 288 |  response = client().performRequest(indexRequest); | 
| 346 | 289 |  assertOK(response); | 
| 347 | 290 |  assertThat(entityAsMap(response).get("_index"), equalTo(secondBackingIndex)); | 
|  | 291 | + | 
|  | 292 | + var searchRequest = new Request("GET", "k8s/_search"); | 
|  | 293 | + searchRequest.setJsonEntity(""" | 
|  | 294 | + { | 
|  | 295 | + "query": { | 
|  | 296 | + "range":{ | 
|  | 297 | + "@timestamp":{ | 
|  | 298 | + "gte": "now-7d", | 
|  | 299 | + "lte": "now+7d" | 
|  | 300 | + } | 
|  | 301 | + } | 
|  | 302 | + }, | 
|  | 303 | + "sort": [ | 
|  | 304 | + { | 
|  | 305 | + "@timestamp": { | 
|  | 306 | + "order": "desc" | 
|  | 307 | + } | 
|  | 308 | + } | 
|  | 309 | + ] | 
|  | 310 | + } | 
|  | 311 | + """); | 
|  | 312 | + response = client().performRequest(searchRequest); | 
|  | 313 | + assertOK(response); | 
|  | 314 | + responseBody = entityAsMap(response); | 
|  | 315 | + try { | 
|  | 316 | + assertThat(ObjectPath.evaluate(responseBody, "hits.total.value"), equalTo(10)); | 
|  | 317 | + assertThat(ObjectPath.evaluate(responseBody, "hits.total.relation"), equalTo("eq")); | 
|  | 318 | + assertThat(ObjectPath.evaluate(responseBody, "hits.hits.0._index"), equalTo(secondBackingIndex)); | 
|  | 319 | + assertThat(ObjectPath.evaluate(responseBody, "hits.hits.1._index"), equalTo(firstBackingIndex)); | 
|  | 320 | + } catch (Exception | AssertionError e) { | 
|  | 321 | + logger.error("search response body causing assertion error [" + responseBody + "]", e); | 
|  | 322 | + throw e; | 
|  | 323 | + } | 
| 348 | 324 |  } | 
| 349 | 325 | 
 | 
| 350 | 326 |  public void testSimulateTsdbDataStreamTemplate() throws Exception { | 
|  | 
0 commit comments