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

yashmayya pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new b26d8c940d6 Check server data dirs with probe file (#18611)
b26d8c940d6 is described below

commit b26d8c940d6cb0181534c3e61ac5c95cdbee3ee9
Author: Cc <[email protected]>
AuthorDate: Tue Jun 9 06:47:23 2026 +0800

    Check server data dirs with probe file (#18611)
    
    Co-authored-by: wolfkill <[email protected]>
---
 .../starter/helix/HelixInstanceDataManager.java    | 24 +++++++++++++++++-----
 .../helix/HelixInstanceDataManagerTest.java        | 19 +++++++++++++++++
 2 files changed, 38 insertions(+), 5 deletions(-)

diff --git 
a/pinot-server/src/main/java/org/apache/pinot/server/starter/helix/HelixInstanceDataManager.java
 
b/pinot-server/src/main/java/org/apache/pinot/server/starter/helix/HelixInstanceDataManager.java
index 4c409d211b4..c55adf58c4c 100644
--- 
a/pinot-server/src/main/java/org/apache/pinot/server/starter/helix/HelixInstanceDataManager.java
+++ 
b/pinot-server/src/main/java/org/apache/pinot/server/starter/helix/HelixInstanceDataManager.java
@@ -211,8 +211,7 @@ public class HelixInstanceDataManager implements 
InstanceDataManager {
         }
       }
     }
-    // Ensure we can write to the instance data dir
-    Preconditions.checkState(instanceDataDir.canWrite(), "Cannot write to the 
instance data dir: %s", instanceDataDir);
+    ensureDirectoryWritable(instanceDataDir, "instance data dir");
   }
 
   @VisibleForTesting
@@ -221,9 +220,24 @@ public class HelixInstanceDataManager implements 
InstanceDataManager {
       Preconditions.checkState(instanceSegmentTarDir.mkdirs(), "Failed to 
create instance segment tar dir: %s",
           instanceSegmentTarDir);
     }
-    // Ensure we can write to the instance segment tar dir
-    Preconditions.checkState(instanceSegmentTarDir.canWrite(), "Cannot write 
to the instance segment tar dir: %s",
-        instanceSegmentTarDir);
+    ensureDirectoryWritable(instanceSegmentTarDir, "instance segment tar dir");
+  }
+
+  @VisibleForTesting
+  static void ensureDirectoryWritable(File directory, String 
directoryDescription) {
+    Preconditions.checkState(directory.isDirectory(), "Expected %s to be a 
directory: %s", directoryDescription,
+        directory);
+
+    File probeFile = null;
+    try {
+      probeFile = File.createTempFile(".pinot-writability-check-", ".tmp", 
directory);
+    } catch (IOException e) {
+      throw new IllegalStateException("Cannot write to the " + 
directoryDescription + ": " + directory, e);
+    } finally {
+      if (probeFile != null) {
+        Preconditions.checkState(probeFile.delete(), "Failed to delete 
writability check file: %s", probeFile);
+      }
+    }
   }
 
   @Override
diff --git 
a/pinot-server/src/test/java/org/apache/pinot/server/starter/helix/HelixInstanceDataManagerTest.java
 
b/pinot-server/src/test/java/org/apache/pinot/server/starter/helix/HelixInstanceDataManagerTest.java
index 4fca90aebc6..b50aca813fb 100644
--- 
a/pinot-server/src/test/java/org/apache/pinot/server/starter/helix/HelixInstanceDataManagerTest.java
+++ 
b/pinot-server/src/test/java/org/apache/pinot/server/starter/helix/HelixInstanceDataManagerTest.java
@@ -19,13 +19,16 @@
 package org.apache.pinot.server.starter.helix;
 
 import java.io.File;
+import java.io.IOException;
 import org.apache.commons.io.FileUtils;
 import org.mockito.Mockito;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
+import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.fail;
 
@@ -89,6 +92,22 @@ public class HelixInstanceDataManagerTest {
     }
   }
 
+  @Test
+  public void testDirectoryWritabilityCheckDoesNotLeaveProbeFile()
+      throws IOException {
+    if (!_testInstanceDataDir.exists()) {
+      assertTrue(_testInstanceDataDir.mkdirs(), "Failed to create test 
directory.");
+    } else {
+      FileUtils.cleanDirectory(_testInstanceDataDir);
+    }
+
+    HelixInstanceDataManager.ensureDirectoryWritable(_testInstanceDataDir, 
"instance data dir");
+
+    File[] files = _testInstanceDataDir.listFiles();
+    assertNotNull(files, "Expected test directory to remain listable after 
writability check.");
+    assertEquals(files.length, 0, "Writability check should not leave probe 
files behind.");
+  }
+
   @Test
   public void testInitInstanceSegmentTarDirCreatesDirectory() {
     if (_testInstanceSegmentTarDir.exists()) {


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

Reply via email to