You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by sa...@apache.org on 2026/03/27 15:22:09 UTC
(druid) 01/01: Add a test for the broker restart (timeline should be repopulated)
This is an automated email from the ASF dual-hosted git repository.
sanechka pushed a commit to branch server-timeline
in repository https://gitbox.apache.org/repos/asf/druid.git
commit d21a1ee58d09daad7f606ab2e453cbfc36b9eb05
Author: Sasha Syrotenko <al...@imply.io>
AuthorDate: Fri Mar 27 17:21:48 2026 +0200
Add a test for the broker restart (timeline should be repopulated)
---
...edBrokerServerViewOfLatestUsedSegmentsTest.java | 33 ++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/embedded-tests/src/test/java/org/apache/druid/testing/embedded/server/EmbeddedBrokerServerViewOfLatestUsedSegmentsTest.java b/embedded-tests/src/test/java/org/apache/druid/testing/embedded/server/EmbeddedBrokerServerViewOfLatestUsedSegmentsTest.java
index fffba4afeeb..7aaf9c7a841 100644
--- a/embedded-tests/src/test/java/org/apache/druid/testing/embedded/server/EmbeddedBrokerServerViewOfLatestUsedSegmentsTest.java
+++ b/embedded-tests/src/test/java/org/apache/druid/testing/embedded/server/EmbeddedBrokerServerViewOfLatestUsedSegmentsTest.java
@@ -244,6 +244,39 @@ public class EmbeddedBrokerServerViewOfLatestUsedSegmentsTest extends EmbeddedCl
assertTimelineMatchesMetadata(loadedTimeline, getMetadataSegments(metadataOnlyDataSource), false);
}
+ @Test
+ public void testTimelineIsRebuiltAfterBrokerRestart() throws Exception
+ {
+ final Set<DataSegment> metadataSegmentsBefore = getMetadataSegments(dataSource);
+ Assertions.assertFalse(metadataSegmentsBefore.isEmpty(), "Expected segments in metadata before restart");
+
+ // Verify timeline exists before restart
+ final var viewBefore = broker.bindings().getInstance(BrokerServerViewOfLatestUsedSegments.class);
+ Assertions.assertTrue(
+ viewBefore.getTimeline(TableDataSource.create(dataSource)).isPresent(),
+ "Expected timeline before restart"
+ );
+
+ // Restart the broker
+ broker.stop();
+ broker.start();
+
+ // After restart, a new injector is created — get the new view instance
+ cluster.callApi().waitForAllSegmentsToBeAvailable(dataSource, coordinator, broker);
+
+ final var viewAfter = broker.bindings().getInstance(BrokerServerViewOfLatestUsedSegments.class);
+ final TimelineLookup<String, ServerSelector> rebuiltTimeline =
+ viewAfter.getTimeline(TableDataSource.create(dataSource)).orElse(null);
+ Assertions.assertNotNull(rebuiltTimeline, "Expected merged timeline to be rebuilt after broker restart");
+
+ final Set<DataSegment> metadataSegmentsAfter = getMetadataSegments(dataSource);
+ assertTimelineMatchesMetadata(rebuiltTimeline, metadataSegmentsAfter, false);
+
+ // Verify SQL still works after restart
+ String result = cluster.callApi().runSql("SELECT COUNT(*) FROM %s", dataSource);
+ Assertions.assertFalse(result.isBlank(), "Expected SQL query to succeed after broker restart");
+ }
+
private void ingestData(final String targetDataSource)
{
cluster.callApi().runTask(
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org