This is an automated email from the ASF dual-hosted git repository. dlmarion 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 2ddcea6 Updates for Accumulo 2.1.0 SLF4J2 and new MIME type (#12) 2ddcea6 is described below commit 2ddcea646bd23c336b0648a819bfd4b745f7b410 Author: Dave Marion <dlmar...@apache.org> AuthorDate: Wed Oct 5 14:01:36 2022 -0400 Updates for Accumulo 2.1.0 SLF4J2 and new MIME type (#12) Accumulo 2.1.0 recently upgraded slf4j to slf4j2. I updated the poms to account for the new version and additional dependency. Two of the tests were also failing, which turned out to be caused by the backport of JDK-8273655. Adding a mime type mapping for application/java-archive resolved the issue. While debugging I restructured the VFSClassLoaderTest. --- modules/vfs-class-loader/pom.xml | 12 ++++ .../accumulo/classloader/vfs/VFSManager.java | 1 + .../accumulo/classloader/vfs/AccumuloDFSBase.java | 9 ++- .../classloader/vfs/VfsClassLoaderTest.java | 64 ++++++++++++++-------- .../src/test/resources/log4j2-test.properties | 5 +- pom.xml | 11 +++- 6 files changed, 71 insertions(+), 31 deletions(-) diff --git a/modules/vfs-class-loader/pom.xml b/modules/vfs-class-loader/pom.xml index ee98b9d..15865b8 100644 --- a/modules/vfs-class-loader/pom.xml +++ b/modules/vfs-class-loader/pom.xml @@ -98,6 +98,18 @@ <artifactId>hadoop-client-minicluster</artifactId> <scope>test</scope> </dependency> + <dependency> + <!-- needed because https://issues.apache.org/jira/browse/LOG4J2-3601 --> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-core</artifactId> + <version>2.19.0</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-slf4j2-impl</artifactId> + <scope>test</scope> + </dependency> </dependencies> <build> <pluginManagement> diff --git a/modules/vfs-class-loader/src/main/java/org/apache/accumulo/classloader/vfs/VFSManager.java b/modules/vfs-class-loader/src/main/java/org/apache/accumulo/classloader/vfs/VFSManager.java index 04de7f4..4c3988d 100644 --- a/modules/vfs-class-loader/src/main/java/org/apache/accumulo/classloader/vfs/VFSManager.java +++ b/modules/vfs-class-loader/src/main/java/org/apache/accumulo/classloader/vfs/VFSManager.java @@ -179,6 +179,7 @@ public class VFSManager { VFS.addMimeTypeMap("application/x-tar", "tar"); VFS.addMimeTypeMap("application/x-gzip", "gz"); VFS.addMimeTypeMap("application/zip", "zip"); + VFS.addMimeTypeMap("application/java-archive", "jar"); VFS.setFileContentInfoFactory(new FileContentInfoFilenameFactory()); VFS.setFilesCache(new SoftRefFilesCache()); File cacheDir = computeTopCacheDir(); diff --git a/modules/vfs-class-loader/src/test/java/org/apache/accumulo/classloader/vfs/AccumuloDFSBase.java b/modules/vfs-class-loader/src/test/java/org/apache/accumulo/classloader/vfs/AccumuloDFSBase.java index d3a20f6..c8a63e8 100644 --- a/modules/vfs-class-loader/src/test/java/org/apache/accumulo/classloader/vfs/AccumuloDFSBase.java +++ b/modules/vfs-class-loader/src/test/java/org/apache/accumulo/classloader/vfs/AccumuloDFSBase.java @@ -27,7 +27,6 @@ import java.nio.charset.StandardCharsets; import org.apache.commons.vfs2.CacheStrategy; import org.apache.commons.vfs2.FileSystemException; -import org.apache.commons.vfs2.cache.DefaultFilesCache; import org.apache.commons.vfs2.cache.SoftRefFilesCache; import org.apache.commons.vfs2.impl.DefaultFileReplicator; import org.apache.commons.vfs2.impl.DefaultFileSystemManager; @@ -108,7 +107,6 @@ public class AccumuloDFSBase { // Set up the VFS vfs = new DefaultFileSystemManager(); try { - vfs.setFilesCache(new DefaultFilesCache()); vfs.addProvider("res", new org.apache.commons.vfs2.provider.res.ResourceFileProvider()); vfs.addProvider("zip", new org.apache.commons.vfs2.provider.zip.ZipFileProvider()); vfs.addProvider("gz", new org.apache.commons.vfs2.provider.gzip.GzipFileProvider()); @@ -141,6 +139,7 @@ public class AccumuloDFSBase { vfs.addMimeTypeMap("application/x-tar", "tar"); vfs.addMimeTypeMap("application/x-gzip", "gz"); vfs.addMimeTypeMap("application/zip", "zip"); + vfs.addMimeTypeMap("application/java-archive", "jar"); vfs.setFileContentInfoFactory(new FileContentInfoFilenameFactory()); vfs.setFilesCache(new SoftRefFilesCache()); vfs.setReplicator(new DefaultFileReplicator(new File(System.getProperty("java.io.tmpdir"), @@ -153,15 +152,15 @@ public class AccumuloDFSBase { } - public Configuration getConfiguration() { + public static Configuration getConfiguration() { return conf; } - public MiniDFSCluster getCluster() { + public static MiniDFSCluster getCluster() { return cluster; } - public DefaultFileSystemManager getDefaultFileSystemManager() { + public static DefaultFileSystemManager getDefaultFileSystemManager() { return vfs; } diff --git a/modules/vfs-class-loader/src/test/java/org/apache/accumulo/classloader/vfs/VfsClassLoaderTest.java b/modules/vfs-class-loader/src/test/java/org/apache/accumulo/classloader/vfs/VfsClassLoaderTest.java index 0d9a1e8..3ee15b6 100644 --- a/modules/vfs-class-loader/src/test/java/org/apache/accumulo/classloader/vfs/VfsClassLoaderTest.java +++ b/modules/vfs-class-loader/src/test/java/org/apache/accumulo/classloader/vfs/VfsClassLoaderTest.java @@ -19,11 +19,13 @@ package org.apache.accumulo.classloader.vfs; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.net.URL; import java.security.AccessController; import java.security.PrivilegedAction; +import java.util.Arrays; import org.apache.commons.vfs2.FileChangeEvent; import org.apache.commons.vfs2.FileListener; @@ -34,35 +36,53 @@ import org.apache.commons.vfs2.impl.DefaultFileSystemManager; import org.apache.commons.vfs2.impl.VFSClassLoader; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; -import org.junit.After; +import org.junit.AfterClass; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class VfsClassLoaderTest extends AccumuloDFSBase { + private static final Logger LOG = LoggerFactory.getLogger(VfsClassLoaderTest.class); private static final Path TEST_DIR = new Path(getHdfsUri() + "/test-dir"); - private FileSystem hdfs = null; - private VFSClassLoader cl = null; - private DefaultFileSystemManager vfs = null; + private static FileSystem hdfs = null; + private static DefaultFileSystemManager vfs = null; - @Before - public void setup() throws Exception { + @BeforeClass + public static void setup() throws Exception { + + // miniDfsClusterSetup(); - this.hdfs = this.getCluster().getFileSystem(); - this.hdfs.mkdirs(TEST_DIR); + hdfs = getCluster().getFileSystem(); + assertTrue("Unable to create: " + TEST_DIR, hdfs.mkdirs(TEST_DIR)); + vfs = getDefaultFileSystemManager(); + + } + + @Before + public void before() throws Exception { // Copy jar file to TEST_DIR - URL jarPath = this.getClass().getResource("/HelloWorld.jar"); + URL jarPath = VfsClassLoaderTest.class.getResource("/HelloWorld.jar"); + assertNotNull("Unable to find HelloWorld.jar", jarPath); Path src = new Path(jarPath.toURI().toString()); Path dst = new Path(TEST_DIR, src.getName()); - this.hdfs.copyFromLocalFile(src, dst); + LOG.info("Copying {} to {}", src, dst); + hdfs.copyFromLocalFile(src, dst); + } + + @Test + public void testGetClass() throws Exception { - vfs = this.getDefaultFileSystemManager(); FileObject testDir = vfs.resolveFile(TEST_DIR.toUri().toString()); + assertNotNull("Unable to resolve test dir via VFS", testDir); FileObject[] dirContents = testDir.getChildren(); + LOG.info("Test directory contents according to VFS: {}", Arrays.toString(dirContents)); - this.cl = AccessController.doPrivileged(new PrivilegedAction<VFSClassLoader>() { + VFSClassLoader cl = AccessController.doPrivileged(new PrivilegedAction<VFSClassLoader>() { @Override public VFSClassLoader run() { // Point the VFSClassLoader to all of the objects in TEST_DIR @@ -73,11 +93,10 @@ public class VfsClassLoaderTest extends AccumuloDFSBase { } } }); - } - @Test - public void testGetClass() throws Exception { - Class<?> helloWorldClass = this.cl.loadClass("test.HelloWorld"); + LOG.info("VFSClassLoader has the following files: {}", Arrays.toString(cl.getFileObjects())); + LOG.info("Looking for HelloWorld.class"); + Class<?> helloWorldClass = cl.loadClass("test.HelloWorld"); Object o = helloWorldClass.getDeclaredConstructor().newInstance(); assertEquals("Hello World!", o.toString()); } @@ -95,7 +114,7 @@ public class VfsClassLoaderTest extends AccumuloDFSBase { URL jarPath = this.getClass().getResource("/HelloWorld.jar"); Path src = new Path(jarPath.toURI().toString()); Path dst = new Path(TEST_DIR, "HelloWorld2.jar"); - this.hdfs.copyFromLocalFile(src, dst); + hdfs.copyFromLocalFile(src, dst); // VFS-487 significantly wait to avoid failure Thread.sleep(7000); @@ -105,13 +124,13 @@ public class VfsClassLoaderTest extends AccumuloDFSBase { jarPath = this.getClass().getResource("/HelloWorld.jar"); src = new Path(jarPath.toURI().toString()); dst = new Path(TEST_DIR, "HelloWorld2.jar"); - this.hdfs.copyFromLocalFile(src, dst); + hdfs.copyFromLocalFile(src, dst); // VFS-487 significantly wait to avoid failure Thread.sleep(7000); assertTrue(listener.isFileChanged()); - this.hdfs.delete(dst, false); + hdfs.delete(dst, false); // VFS-487 significantly wait to avoid failure Thread.sleep(7000); assertTrue(listener.isFileDeleted()); @@ -120,9 +139,10 @@ public class VfsClassLoaderTest extends AccumuloDFSBase { } - @After - public void tearDown() throws Exception { - this.hdfs.delete(TEST_DIR, true); + @AfterClass + public static void tearDown() throws Exception { + hdfs.delete(TEST_DIR, true); + tearDownMiniDfsCluster(); } public static class MyFileMonitor implements FileListener { diff --git a/modules/vfs-class-loader/src/test/resources/log4j2-test.properties b/modules/vfs-class-loader/src/test/resources/log4j2-test.properties index efe0a38..0a8a767 100644 --- a/modules/vfs-class-loader/src/test/resources/log4j2-test.properties +++ b/modules/vfs-class-loader/src/test/resources/log4j2-test.properties @@ -27,6 +27,9 @@ appender.console.target = SYSTEM_OUT appender.console.layout.type = PatternLayout appender.console.layout.pattern = %d{ISO8601} [%-8c{2}] %-5p: %m%n -rootLogger.level = info +logger.01.name = org.apache.hadoop +logger.01.level = warn + +rootLogger.level = debug rootLogger.appenderRef.console.ref = STDOUT diff --git a/pom.xml b/pom.xml index f127466..90cee52 100644 --- a/pom.xml +++ b/pom.xml @@ -97,7 +97,7 @@ <maven.compiler.target>11</maven.compiler.target> <!-- timestamp for reproducible outputs, updated on release by the release plugin --> <project.build.outputTimestamp>2020-08-27T15:56:15Z</project.build.outputTimestamp> - <slf4j.version>1.7.35</slf4j.version> + <slf4j.version>2.0.3</slf4j.version> <sourceReleaseAssemblyDescriptor>source-release-tar</sourceReleaseAssemblyDescriptor> </properties> <dependencyManagement> @@ -208,8 +208,8 @@ </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-slf4j-impl</artifactId> - <version>2.17.2</version> + <artifactId>log4j-slf4j2-impl</artifactId> + <version>2.19.0</version> <scope>test</scope> </dependency> </dependencies> @@ -558,6 +558,11 @@ </goals> <configuration> <failOnWarning>true</failOnWarning> + <ignoredUnusedDeclaredDependencies> + <unused>org.apache.logging.log4j:log4j-slf4j2-impl:jar:*</unused> + <!-- needed because https://issues.apache.org/jira/browse/LOG4J2-3601 --> + <unused>org.apache.logging.log4j:log4j-core:jar:*</unused> + </ignoredUnusedDeclaredDependencies> </configuration> </execution> </executions>