Skip to content

Commit b6a6c97

Browse files
authored
Wait for SQL table visibility in embedded tests. (#19095)
* Wait for SQL table visibility in embedded tests. Several embedded tests wait for segment/schemaCache/refresh/count as a proxy for when a datasource is queryable via SQL. However, this metric is emitted before the SQL table is set up. This creates a window where SQL queries can fail with "Object 'datasource' not found". This patch waits for segment/schemaCache/rowSignature/column/count, which is emitted after a SQL table is set up and visible. This is done either as a replacement for segment/schemaCache/refresh/count (if we only care about table visibility) or in addition to it (if we also want to wait for a specific number of segments to be detected). * Fix import order. * Fix import order.
1 parent 933db53 commit b6a6c97

5 files changed

Lines changed: 21 additions & 2 deletions

File tree

embedded-tests/src/test/java/org/apache/druid/testing/embedded/indexing/IngestionSmokeTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.apache.druid.metadata.storage.postgresql.PostgreSQLMetadataStorageModule;
4141
import org.apache.druid.query.DruidMetrics;
4242
import org.apache.druid.query.http.SqlTaskStatus;
43+
import org.apache.druid.segment.metadata.Metric;
4344
import org.apache.druid.tasklogs.TaskLogStreamer;
4445
import org.apache.druid.testing.embedded.EmbeddedBroker;
4546
import org.apache.druid.testing.embedded.EmbeddedCoordinator;
@@ -402,6 +403,11 @@ private void waitForSegmentsToBeQueryable(int numSegments)
402403
.hasDimension(DruidMetrics.DATASOURCE, dataSource),
403404
agg -> agg.hasSumAtLeast(numSegments)
404405
);
406+
eventCollector.latchableEmitter().waitForEvent(
407+
event -> event.hasMetricName(Metric.SCHEMA_ROW_SIGNATURE_COLUMN_COUNT)
408+
.hasService("druid/broker")
409+
.hasDimension(DruidMetrics.DATASOURCE, dataSource)
410+
);
405411
}
406412

407413
/**

embedded-tests/src/test/java/org/apache/druid/testing/embedded/indexing/StreamIndexDataFormatsTestBase.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import org.apache.druid.indexing.overlord.supervisor.SupervisorSpec;
4646
import org.apache.druid.java.util.common.parsers.JSONPathSpec;
4747
import org.apache.druid.query.DruidMetrics;
48+
import org.apache.druid.segment.metadata.Metric;
4849
import org.apache.druid.testing.embedded.EmbeddedBroker;
4950
import org.apache.druid.testing.embedded.EmbeddedCoordinator;
5051
import org.apache.druid.testing.embedded.EmbeddedDruidCluster;
@@ -552,7 +553,7 @@ private void waitForDataAndVerifyIngestedEvents(String dataSource, int expectedC
552553
);
553554
// Wait for the schema cache to refresh for the datasource under test
554555
broker.latchableEmitter().waitForEvent(
555-
event -> event.hasMetricName("segment/schemaCache/refresh/count")
556+
event -> event.hasMetricName(Metric.SCHEMA_ROW_SIGNATURE_COLUMN_COUNT)
556557
.hasDimension(DruidMetrics.DATASOURCE, dataSource)
557558
);
558559

embedded-tests/src/test/java/org/apache/druid/testing/embedded/msq/EmbeddedMSQRealtimeQueryTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.apache.druid.query.DruidMetrics;
2727
import org.apache.druid.query.http.SqlTaskStatus;
2828
import org.apache.druid.segment.TestIndex;
29+
import org.apache.druid.segment.metadata.Metric;
2930
import org.apache.druid.sql.calcite.BaseCalciteQueryTest;
3031
import org.apache.druid.testing.embedded.EmbeddedBroker;
3132
import org.apache.druid.testing.embedded.EmbeddedClusterApis;
@@ -149,7 +150,7 @@ protected void setupLookups() throws Exception
149150
agg -> agg.hasSumAtLeast(totalRows)
150151
);
151152
broker.latchableEmitter().waitForEvent(
152-
event -> event.hasMetricName("segment/schemaCache/refresh/count")
153+
event -> event.hasMetricName(Metric.SCHEMA_ROW_SIGNATURE_COLUMN_COUNT)
153154
.hasDimension(DruidMetrics.DATASOURCE, dataSource)
154155
);
155156
}

embedded-tests/src/test/java/org/apache/druid/testing/embedded/server/HttpEmitterEventCollectorTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.apache.druid.common.utils.IdUtils;
2323
import org.apache.druid.indexing.common.task.IndexTask;
2424
import org.apache.druid.query.DruidMetrics;
25+
import org.apache.druid.segment.metadata.Metric;
2526
import org.apache.druid.testing.embedded.EmbeddedBroker;
2627
import org.apache.druid.testing.embedded.EmbeddedCoordinator;
2728
import org.apache.druid.testing.embedded.EmbeddedDruidCluster;
@@ -89,6 +90,11 @@ public void test_runIndexTask_andQueryData()
8990
.hasService("druid/broker"),
9091
agg -> agg.hasSumAtLeast(10)
9192
);
93+
eventCollector.latchableEmitter().waitForEvent(
94+
event -> event.hasMetricName(Metric.SCHEMA_ROW_SIGNATURE_COLUMN_COUNT)
95+
.hasDimension(DruidMetrics.DATASOURCE, dataSource)
96+
.hasService("druid/broker")
97+
);
9298

9399
cluster.callApi().verifySqlQuery("SELECT * FROM %s", dataSource, Resources.InlineData.CSV_10_DAYS);
94100
}

services/src/test/java/org/apache/druid/testing/embedded/EmbeddedClusterApis.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.apache.druid.query.http.ClientSqlQuery;
4545
import org.apache.druid.rpc.indexing.OverlordClient;
4646
import org.apache.druid.segment.TestHelper;
47+
import org.apache.druid.segment.metadata.Metric;
4748
import org.apache.druid.server.metrics.LatchableEmitter;
4849
import org.apache.druid.sql.http.ResultFormat;
4950
import org.apache.druid.timeline.DataSegment;
@@ -344,6 +345,10 @@ public void waitForAllSegmentsToBeAvailable(String dataSource, EmbeddedCoordinat
344345
agg -> agg.hasSumAtLeast(numTombstones)
345346
);
346347
}
348+
broker.latchableEmitter().waitForEvent(
349+
event -> event.hasMetricName(Metric.SCHEMA_ROW_SIGNATURE_COLUMN_COUNT)
350+
.hasDimension(DruidMetrics.DATASOURCE, dataSource)
351+
);
347352
}
348353

349354
/**

0 commit comments

Comments
 (0)