{"record":{"id":"cc50d342e24bbb1b","repo":"apache/druid","slug":"asked-to-remove-timeline-entry-interval-s-versi","errorCode":null,"errorMessage":"Asked to remove timeline entry[interval: %s, version: %s] that doesn't exist","messagePattern":"Asked to remove timeline entry\\[interval: (.+?), version: (.+?)\\] that doesn't exist","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"server/src/main/java/org/apache/druid/client/CoordinatorServerView.java","lineNumber":253,"sourceCode":"      if (segmentLoadInfo.removeServer(server)) {\n        // server segment removed notification\n        runTimelineCallbacks(callback -> callback.serverSegmentRemoved(server, segment));\n      }\n\n      if (segmentLoadInfo.isEmpty()) {\n        VersionedIntervalTimeline<String, SegmentLoadInfo> timeline = timelines.get(segment.getDataSource());\n        segmentLoadInfos.remove(segmentId);\n\n        final PartitionChunk<SegmentLoadInfo> removedPartition = timeline.remove(\n            segment.getInterval(), segment.getVersion(), segment.getShardSpec().createChunk(\n                new SegmentLoadInfo(\n                    segment\n                )\n            )\n        );\n\n        if (removedPartition == null) {\n          log.warn(\n              \"Asked to remove timeline entry[interval: %s, version: %s] that doesn't exist\",\n              segment.getInterval(),\n              segment.getVersion()\n          );\n        } else {\n          // segment removed notification\n          runTimelineCallbacks(callback -> callback.segmentRemoved(segment));\n        }\n      }\n    }\n  }\n\n  public void registerTimelineCallback(final Executor exec, final TimelineCallback callback)\n  {\n    timelineCallbacks.put(callback, exec);\n  }\n\n  private void runTimelineCallbacks(final Function<TimelineCallback, ServerView.CallbackAction> function)","sourceCodeStart":235,"sourceCodeEnd":271,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/server/src/main/java/org/apache/druid/client/CoordinatorServerView.java#L235-L271","documentation":"serverRemovedSegment removes the segment's partition from the VersionedIntervalTimeline; when the timeline lookup returns null (entry for that interval/version already absent), it logs this warning. The removal is a no-op and no serverSegmentRemoved callback fires.","triggerScenarios":"serverRemovedSegment called for a segment whose (interval, version) partition was already removed from the timeline, or never added, on this DruidServer.","commonSituations":"Duplicate removal events, out-of-order inventory updates during historical restart or coordinator failover, segments overshadowed and pruned before removal notification arrives.","solutions":["Treat transient occurrences as benign noise; confirm they are not correlated with incorrect replica counts","Ensure the segment add event was processed first (check server inventory sync logs)","Check for double-registered server inventory views or replayed ZK watch events","If persistent, restart the affected coordinator/broker to rebuild the timeline from scratch"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// only remove if the timeline still lists the segment\nif (timeline.findEntry(segment.getInterval(), segment.getVersion()) == null) { skip(); }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Preserve add-before-remove ordering of inventory events","Deduplicate segment removal notifications","Rebuild timeline state via restart if warnings persist","Monitor coordinator/historical restart correlation with these warnings"],"tags":["cluster","timeline","segment-lifecycle"],"backgroundTag":"record-not-found","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}