This is an automated email from the ASF dual-hosted git repository.

cwylie pushed a commit to branch 35.0.0
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/35.0.0 by this push:
     new daae72220f1 fix bug in SegmentLocalCacheManager to only attempt 
download in acquireSegment if virtual storage is enabled (#18659) (#18676)
daae72220f1 is described below

commit daae72220f18cfde0afec9d10398fa2e550633cd
Author: Clint Wylie <[email protected]>
AuthorDate: Tue Oct 21 15:07:54 2025 -0700

    fix bug in SegmentLocalCacheManager to only attempt download in 
acquireSegment if virtual storage is enabled (#18659) (#18676)
---
 .../segment/loading/SegmentLocalCacheManager.java  |  5 +++++
 .../loading/SegmentLocalCacheManagerTest.java      | 25 ++++++++++++++++++++++
 2 files changed, 30 insertions(+)

diff --git 
a/server/src/main/java/org/apache/druid/segment/loading/SegmentLocalCacheManager.java
 
b/server/src/main/java/org/apache/druid/segment/loading/SegmentLocalCacheManager.java
index 7a61329b8e8..162e20a28d1 100644
--- 
a/server/src/main/java/org/apache/druid/segment/loading/SegmentLocalCacheManager.java
+++ 
b/server/src/main/java/org/apache/druid/segment/loading/SegmentLocalCacheManager.java
@@ -336,6 +336,11 @@ public class SegmentLocalCacheManager implements 
SegmentCacheManager
         if (retryAcquireExisting != null) {
           return retryAcquireExisting;
         }
+
+        if (!config.isVirtualStorage()) {
+          return AcquireSegmentAction.missingSegment();
+        }
+
         final Iterator<StorageLocation> iterator = strategy.getLocations();
         while (iterator.hasNext()) {
           final StorageLocation location = iterator.next();
diff --git 
a/server/src/test/java/org/apache/druid/segment/loading/SegmentLocalCacheManagerTest.java
 
b/server/src/test/java/org/apache/druid/segment/loading/SegmentLocalCacheManagerTest.java
index 0ac4796cd3f..04eafa41ed7 100644
--- 
a/server/src/test/java/org/apache/druid/segment/loading/SegmentLocalCacheManagerTest.java
+++ 
b/server/src/test/java/org/apache/druid/segment/loading/SegmentLocalCacheManagerTest.java
@@ -1047,6 +1047,31 @@ public class SegmentLocalCacheManagerTest extends 
InitializedNullHandlingTest
     Assert.assertNotNull(manager.getSegmentFiles(segmentToBootstrap));
   }
 
+  @Test
+  public void testGetSegmentAfterDroppedWithNoVirtualStorageEnabled() throws 
Exception
+  {
+    SegmentLocalCacheManager manager = makeDefaultManager(jsonMapper);
+
+    final DataSegment segmentToLoad = 
makeTestDataSegment(segmentDeepStorageDir);
+    createSegmentZipInLocation(segmentDeepStorageDir, TEST_DATA_RELATIVE_PATH);
+
+    manager.load(segmentToLoad);
+    Assert.assertNotNull(manager.getSegmentFiles(segmentToLoad));
+    manager.drop(segmentToLoad);
+    Assert.assertNull(manager.getSegmentFiles(segmentToLoad));
+
+    // ensure that if virtual storage is not enabled, we do not download the 
segment (callers might have a DataSegment
+    // reference which was originally cached and then dropped before 
attempting to acquire a segment. if virtual storage
+    // is not enabled, this should return a missing segment instead of 
downloading
+    AcquireSegmentAction segmentAction = manager.acquireSegment(segmentToLoad);
+    ReferenceCountedObjectProvider<Segment> referenceProvider = 
segmentAction.getSegmentFuture().get();
+    Optional<Segment> theSegment = referenceProvider.acquireReference();
+    Assert.assertFalse(theSegment.isPresent());
+    segmentAction.close();
+
+    Assert.assertNull(manager.getSegmentFiles(segmentToLoad));
+  }
+
   @Test
   public void testIfTombstoneIsLoaded() throws IOException, 
SegmentLoadingException
   {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to