Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
2.2
-
None
Description
In my application, I have two instances of the VFSClassLoader, each of which is being used in a distinct thread. Both VFSClassLoader instances refer to the same compressed file resource described by a FileObject that is passed to the class loader's constructor. Intermittently, the application throws an exception with the stack trace shown below. So, there seems to be either a race condition in the code or an undocumented assumption here. If it is unsupported for two VFSClassLoader instances to refer to the same resource (file), then that assumption should be documented. But if that is not the case, then there is a race condition bug in the implementation.
43789 WARN {} c.a.e.u.PreferredPathClassLoader - While loading class org.apache.hive.jdbc.HiveDatabaseMetaData, rethrowing unexpected java.lang.NullPointerException: Inflater has been closed java.lang.NullPointerException: Inflater has been closed at java.util.zip.Inflater.ensureOpen(Inflater.java:389) at java.util.zip.Inflater.inflate(Inflater.java:257) at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:152) at java.io.BufferedInputStream.read1(BufferedInputStream.java:284) at java.io.BufferedInputStream.read(BufferedInputStream.java:345) at org.apache.commons.vfs2.util.MonitorInputStream.read(MonitorInputStream.java:91) at org.apache.commons.vfs2.FileUtil.getContent(FileUtil.java:47) at org.apache.commons.vfs2.impl.Resource.getBytes(Resource.java:102) at org.apache.commons.vfs2.impl.VFSClassLoader.defineClass(VFSClassLoader.java:179) at org.apache.commons.vfs2.impl.VFSClassLoader.findClass(VFSClassLoader.java:150) at com.atscale.engine.utils.PreferredPathClassLoader.findClass(PreferredPathClassLoader.scala:54)