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]