This is an automated email from the ASF dual-hosted git repository.
ctubbsii pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/accumulo-classloaders.git
The following commit(s) were added to refs/heads/main by this push:
new fc78958 use constants for dir names (#66)
fc78958 is described below
commit fc7895882706fa31f335bdfc4a0d2c738381f366
Author: Keith Turner <[email protected]>
AuthorDate: Thu Feb 5 16:43:18 2026 -0500
use constants for dir names (#66)
* Use constants for directory names
* Remove unused Logger in test
* Use unique dirname for base cache directory in tests
---------
Co-authored-by: Christopher Tubbs <[email protected]>
---
.../accumulo/classloader/lcc/util/LocalStore.java | 10 +++--
.../LocalCachingContextClassLoaderFactoryTest.java | 27 ++++++-------
.../MiniAccumuloClusterClassLoaderFactoryTest.java | 10 +++--
.../classloader/lcc/util/LocalStoreTest.java | 47 +++++++++++++---------
4 files changed, 54 insertions(+), 40 deletions(-)
diff --git
a/modules/local-caching-classloader/src/main/java/org/apache/accumulo/classloader/lcc/util/LocalStore.java
b/modules/local-caching-classloader/src/main/java/org/apache/accumulo/classloader/lcc/util/LocalStore.java
index 4773e9b..ecf7f7e 100644
---
a/modules/local-caching-classloader/src/main/java/org/apache/accumulo/classloader/lcc/util/LocalStore.java
+++
b/modules/local-caching-classloader/src/main/java/org/apache/accumulo/classloader/lcc/util/LocalStore.java
@@ -91,13 +91,17 @@ public final class LocalStore {
private final Path workingDir;
private final BiConsumer<String,URL> allowedUrlChecker;
+ public static final String CONTEXTS_DIR = "contexts";
+ public static final String RESOURCES_DIR = "resources";
+ public static final String WORKING_DIR = "working";
+
public LocalStore(final Path baseDir, final BiConsumer<String,URL>
allowedUrlChecker)
throws IOException {
requireNonNull(baseDir);
this.allowedUrlChecker = requireNonNull(allowedUrlChecker);
- this.contextsDir = Files.createDirectories(baseDir.resolve("contexts"));
- this.resourcesDir = Files.createDirectories(baseDir.resolve("resources"));
- this.workingDir = Files.createDirectories(baseDir.resolve("working"));
+ this.contextsDir = Files.createDirectories(baseDir.resolve(CONTEXTS_DIR));
+ this.resourcesDir =
Files.createDirectories(baseDir.resolve(RESOURCES_DIR));
+ this.workingDir = Files.createDirectories(baseDir.resolve(WORKING_DIR));
}
Path contextsDir() {
diff --git
a/modules/local-caching-classloader/src/test/java/org/apache/accumulo/classloader/lcc/LocalCachingContextClassLoaderFactoryTest.java
b/modules/local-caching-classloader/src/test/java/org/apache/accumulo/classloader/lcc/LocalCachingContextClassLoaderFactoryTest.java
index 7d68d3b..caf5aaf 100644
---
a/modules/local-caching-classloader/src/test/java/org/apache/accumulo/classloader/lcc/LocalCachingContextClassLoaderFactoryTest.java
+++
b/modules/local-caching-classloader/src/test/java/org/apache/accumulo/classloader/lcc/LocalCachingContextClassLoaderFactoryTest.java
@@ -26,6 +26,8 @@ import static
org.apache.accumulo.classloader.lcc.TestUtils.createContextDefinit
import static
org.apache.accumulo.classloader.lcc.TestUtils.testClassFailsToLoad;
import static org.apache.accumulo.classloader.lcc.TestUtils.testClassLoads;
import static
org.apache.accumulo.classloader.lcc.TestUtils.updateContextDefinitionFile;
+import static
org.apache.accumulo.classloader.lcc.util.LocalStore.RESOURCES_DIR;
+import static org.apache.accumulo.classloader.lcc.util.LocalStore.WORKING_DIR;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -70,10 +72,9 @@ import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
import org.junit.jupiter.api.io.CleanupMode;
import org.junit.jupiter.api.io.TempDir;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import com.google.gson.JsonSyntaxException;
@@ -82,8 +83,6 @@ public class LocalCachingContextClassLoaderFactoryTest {
protected static final int MONITOR_INTERVAL_SECS = 5;
// MD5 sum for "bad"
private static final String BAD_MD5 = "bae60998ffe4923b131e3d6e4c19993e";
- private static final Logger log =
- LoggerFactory.getLogger(LocalCachingContextClassLoaderFactoryTest.class);
private static MiniDFSCluster hdfs;
private static FileSystem fs;
private static Server jetty;
@@ -177,8 +176,8 @@ public class LocalCachingContextClassLoaderFactoryTest {
}
@BeforeEach
- public void beforeEach() throws Exception {
- baseCacheDir = tempDir.resolve("base");
+ public void beforeEach(TestInfo info) throws Exception {
+ baseCacheDir =
tempDir.resolve(info.getTestMethod().orElseThrow().getName());
ConfigurationCopy acuConf = new ConfigurationCopy(
Map.of(CACHE_DIR_PROPERTY,
baseCacheDir.toAbsolutePath().toUri().toURL().toExternalForm(),
UPDATE_FAILURE_GRACE_PERIOD_MINS, "1", ALLOWED_URLS_PATTERN,
".*"));
@@ -812,7 +811,7 @@ public class LocalCachingContextClassLoaderFactoryTest {
testClassLoads(cl, classC);
testClassLoads(cl, classD);
- var resources = tempDir.resolve("base").resolve("resources");
+ var resources = baseCacheDir.resolve(RESOURCES_DIR);
List<Path> files =
def.getResources().stream().map(r ->
resources.resolve(LocalStore.localResourceName(r)))
.limit(2).collect(Collectors.toList());
@@ -841,14 +840,13 @@ public class LocalCachingContextClassLoaderFactoryTest {
@Test
public void testConcurrentDeletes() throws Exception {
- var executor = Executors.newCachedThreadPool();
-
- AtomicBoolean stop = new AtomicBoolean(false);
+ final var executor = Executors.newCachedThreadPool();
+ final var stop = new AtomicBoolean(false);
// create a background task that continually concurrently deletes files in
the resources dir
var deleteFuture = executor.submit(() -> {
while (!stop.get()) {
- var resourcesDir =
tempDir.resolve("base").resolve("resources").toFile();
+ var resourcesDir = baseCacheDir.resolve(RESOURCES_DIR).toFile();
assertTrue(resourcesDir.exists() && resourcesDir.isDirectory());
var files = resourcesDir.listFiles();
for (var file : files) {
@@ -904,10 +902,9 @@ public class LocalCachingContextClassLoaderFactoryTest {
deleteFuture.get();
executor.shutdown();
- var workingDir = tempDir.resolve("base").resolve("working").toFile();
- var filesList = workingDir.listFiles();
- var workingDirs = filesList == null ? 0 : filesList.length;
+ long workingDirsCount =
+ Files.list(baseCacheDir.resolve(WORKING_DIR)).filter(p ->
p.toFile().isDirectory()).count();
// check that many hard link directories were created
- assertTrue(workingDirs > 50, () -> "workingDirs:" + workingDirs);
+ assertTrue(workingDirsCount > 50);
}
}
diff --git
a/modules/local-caching-classloader/src/test/java/org/apache/accumulo/classloader/lcc/MiniAccumuloClusterClassLoaderFactoryTest.java
b/modules/local-caching-classloader/src/test/java/org/apache/accumulo/classloader/lcc/MiniAccumuloClusterClassLoaderFactoryTest.java
index 1ba7dea..8939309 100644
---
a/modules/local-caching-classloader/src/test/java/org/apache/accumulo/classloader/lcc/MiniAccumuloClusterClassLoaderFactoryTest.java
+++
b/modules/local-caching-classloader/src/test/java/org/apache/accumulo/classloader/lcc/MiniAccumuloClusterClassLoaderFactoryTest.java
@@ -23,6 +23,7 @@ import static
java.nio.file.StandardCopyOption.REPLACE_EXISTING;
import static
org.apache.accumulo.classloader.lcc.LocalCachingContextClassLoaderFactory.ALLOWED_URLS_PATTERN;
import static
org.apache.accumulo.classloader.lcc.LocalCachingContextClassLoaderFactory.CACHE_DIR_PROPERTY;
import static
org.apache.accumulo.classloader.lcc.LocalCachingContextClassLoaderFactory.UPDATE_FAILURE_GRACE_PERIOD_MINS;
+import static org.apache.accumulo.classloader.lcc.util.LocalStore.WORKING_DIR;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertIterableEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -73,6 +74,7 @@ import org.apache.accumulo.test.VerifyIngest.VerifyParams;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.CleanupMode;
import org.junit.jupiter.api.io.TempDir;
public class MiniAccumuloClusterClassLoaderFactoryTest extends
SharedMiniClusterBase {
@@ -86,13 +88,13 @@ public class MiniAccumuloClusterClassLoaderFactoryTest
extends SharedMiniCluster
cfg.setProperty(Property.TSERV_NATIVEMAP_ENABLED.getKey(), "false");
cfg.setProperty(Property.GENERAL_CONTEXT_CLASSLOADER_FACTORY.getKey(),
LocalCachingContextClassLoaderFactory.class.getName());
- cfg.setProperty(CACHE_DIR_PROPERTY,
tempDir.resolve("base").toUri().toString());
+ cfg.setProperty(CACHE_DIR_PROPERTY, baseCacheDir.toUri().toString());
cfg.setProperty(ALLOWED_URLS_PATTERN, ".*");
cfg.setProperty(UPDATE_FAILURE_GRACE_PERIOD_MINS, "1");
}
}
- @TempDir
+ @TempDir(cleanup = CleanupMode.ON_SUCCESS)
private static Path tempDir;
private static final String ITER_CLASS_NAME =
@@ -102,9 +104,11 @@ public class MiniAccumuloClusterClassLoaderFactoryTest
extends SharedMiniCluster
private static URL jarAOrigLocation;
private static URL jarBOrigLocation;
+ private static Path baseCacheDir;
@BeforeAll
public static void beforeAll() throws Exception {
+ baseCacheDir = Files.createTempDirectory(tempDir, "base-");
// Find the Test jar files
jarAOrigLocation = MiniAccumuloClusterClassLoaderFactoryTest.class
@@ -124,7 +128,7 @@ public class MiniAccumuloClusterClassLoaderFactoryTest
extends SharedMiniCluster
@Test
public void testClassLoader() throws Exception {
- final var workingDirPath = tempDir.resolve("base").resolve("working");
+ final var workingDirPath = baseCacheDir.resolve(WORKING_DIR);
final var jsonDirPath = tempDir.resolve("simulatedRemoteContextFiles");
Files.createDirectory(jsonDirPath);
diff --git
a/modules/local-caching-classloader/src/test/java/org/apache/accumulo/classloader/lcc/util/LocalStoreTest.java
b/modules/local-caching-classloader/src/test/java/org/apache/accumulo/classloader/lcc/util/LocalStoreTest.java
index 6749ed7..9f4e223 100644
---
a/modules/local-caching-classloader/src/test/java/org/apache/accumulo/classloader/lcc/util/LocalStoreTest.java
+++
b/modules/local-caching-classloader/src/test/java/org/apache/accumulo/classloader/lcc/util/LocalStoreTest.java
@@ -21,6 +21,9 @@ package org.apache.accumulo.classloader.lcc.util;
import static
org.apache.accumulo.classloader.lcc.TestUtils.testClassFailsToLoad;
import static org.apache.accumulo.classloader.lcc.TestUtils.testClassLoads;
import static
org.apache.accumulo.classloader.lcc.util.LccUtils.checksumForFileName;
+import static org.apache.accumulo.classloader.lcc.util.LocalStore.CONTEXTS_DIR;
+import static
org.apache.accumulo.classloader.lcc.util.LocalStore.RESOURCES_DIR;
+import static org.apache.accumulo.classloader.lcc.util.LocalStore.WORKING_DIR;
import static
org.apache.accumulo.classloader.lcc.util.LocalStore.localResourceName;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -46,14 +49,16 @@ import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.hdfs.MiniDFSCluster;
import org.eclipse.jetty.server.Server;
import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.junit.jupiter.api.io.CleanupMode;
import org.junit.jupiter.api.io.TempDir;
public class LocalStoreTest {
- @TempDir
+ @TempDir(cleanup = CleanupMode.ON_SUCCESS)
private static Path tempDir;
// a mock URL checker that allows all for test
@@ -67,12 +72,10 @@ public class LocalStoreTest {
private static TestClassInfo classB;
private static TestClassInfo classC;
private static TestClassInfo classD;
- private static Path baseCacheDir = null;
+ private Path baseCacheDir;
@BeforeAll
public static void beforeAll() throws Exception {
- baseCacheDir = tempDir.resolve("base");
-
// Find the Test jar files
final URL jarAOrigLocation =
LocalStoreTest.class.getResource("/ClassLoaderTestA/TestA.jar");
assertNotNull(jarAOrigLocation);
@@ -122,9 +125,9 @@ public class LocalStoreTest {
}
}
- @AfterEach
- public void cleanBaseDir() throws Exception {
- LccUtils.recursiveDelete(baseCacheDir);
+ @BeforeEach
+ public void createBaseDir(TestInfo info) {
+ baseCacheDir =
tempDir.resolve(info.getTestMethod().orElseThrow().getName());
}
@Test
@@ -137,14 +140,20 @@ public class LocalStoreTest {
@Test
public void testCreateBaseDirs() throws Exception {
+ // these dirs are documented, so need to update docs when changing
constant values
+ assertEquals("resources", RESOURCES_DIR);
+ assertEquals("working", WORKING_DIR);
+ assertEquals("contexts", CONTEXTS_DIR);
+
assertFalse(Files.exists(baseCacheDir));
var localStore = new LocalStore(baseCacheDir, ALLOW_ALL_URLS);
assertTrue(Files.exists(baseCacheDir));
- assertTrue(Files.exists(baseCacheDir.resolve("contexts")));
- assertTrue(Files.exists(baseCacheDir.resolve("resources")));
- assertEquals(baseCacheDir.resolve("contexts"), localStore.contextsDir());
- assertEquals(baseCacheDir.resolve("resources"), localStore.resourcesDir());
- assertEquals(baseCacheDir.resolve("working"), localStore.workingDir());
+ assertTrue(Files.exists(baseCacheDir.resolve(CONTEXTS_DIR)));
+ assertTrue(Files.exists(baseCacheDir.resolve(RESOURCES_DIR)));
+ assertTrue(Files.exists(baseCacheDir.resolve(WORKING_DIR)));
+ assertEquals(baseCacheDir.resolve(CONTEXTS_DIR), localStore.contextsDir());
+ assertEquals(baseCacheDir.resolve(RESOURCES_DIR),
localStore.resourcesDir());
+ assertEquals(baseCacheDir.resolve(WORKING_DIR), localStore.workingDir());
}
@Test
@@ -223,10 +232,10 @@ public class LocalStoreTest {
// Confirm the 3 jars are cached locally
assertTrue(Files.exists(baseCacheDir));
- assertTrue(
-
Files.exists(baseCacheDir.resolve("contexts").resolve(checksumForFileName(def)
+ ".json")));
+ assertTrue(Files
+
.exists(baseCacheDir.resolve(CONTEXTS_DIR).resolve(checksumForFileName(def) +
".json")));
for (Resource r : def.getResources()) {
-
assertTrue(Files.exists(baseCacheDir.resolve("resources").resolve(localResourceName(r))));
+
assertTrue(Files.exists(baseCacheDir.resolve(RESOURCES_DIR).resolve(localResourceName(r))));
}
}
@@ -270,16 +279,16 @@ public class LocalStoreTest {
// Confirm the 3 jars are cached locally
assertTrue(Files.exists(
-
baseCacheDir.resolve("contexts").resolve(checksumForFileName(updatedDef) +
".json")));
+
baseCacheDir.resolve(CONTEXTS_DIR).resolve(checksumForFileName(updatedDef) +
".json")));
for (Resource r : updatedDef.getResources()) {
assertFalse(r.getFileName().contains("C"));
-
assertTrue(Files.exists(baseCacheDir.resolve("resources").resolve(localResourceName(r))));
+
assertTrue(Files.exists(baseCacheDir.resolve(RESOURCES_DIR).resolve(localResourceName(r))));
}
assertTrue(removedResource.getFileName().contains("C"),
"cache location should still contain 'C'");
assertTrue(Files
-
.exists(baseCacheDir.resolve("resources").resolve(localResourceName(removedResource))));
+
.exists(baseCacheDir.resolve(RESOURCES_DIR).resolve(localResourceName(removedResource))));
cacheKey = new ContextCacheKey("loc", updatedDef);
final var updatedContextClassLoader = LccUtils.createClassLoader(cacheKey,
localStore);