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]
