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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to