Vadim Pakhnushev created IGNITE-26771:
-----------------------------------------
Summary: Specify classpath in linux distributions
Key: IGNITE-26771
URL: https://issues.apache.org/jira/browse/IGNITE-26771
Project: Ignite
Issue Type: Bug
Components: builds/deliveries ai3
Reporter: Vadim Pakhnushev
Assignee: Vadim Pakhnushev
When upgrading deb package, underlying system sometimes delete old jar files
just slightly later after the service is restarted leading to the following
exception logged in the journal:
{noformat}
Exception in thread "main" java.util.ServiceConfigurationError:
org.apache.ignite.internal.network.serialization.MessageSerializationRegistryInitializer:
Error accessing configuration file
...
at
org.apache.ignite.internal.app.IgniteServerImpl.tryToCopyExceptionWithCause(IgniteServerImpl.java:518)
at
org.apache.ignite.internal.app.IgniteServerImpl.sync(IgniteServerImpl.java:510)
at
org.apache.ignite.internal.app.IgniteServerImpl.start(IgniteServerImpl.java:410)
at org.apache.ignite.IgniteServer.start(IgniteServer.java:69)
...
at
org.apache.ignite.internal.app.IgniteRunner.start(IgniteRunner.java:53)
at
org.apache.ignite.internal.app.IgniteRunner.main(IgniteRunner.java:66)
Caused by: java.util.concurrent.ExecutionException:
java.util.ServiceConfigurationError:
org.apache.ignite.internal.network.serialization.MessageSerializationRegistryInitializer:
Error accessing configuration file
...
at
org.apache.ignite.internal.app.IgniteServerImpl.sync(IgniteServerImpl.java:508)
... 14 more
Caused by: java.util.ServiceConfigurationError:
org.apache.ignite.internal.network.serialization.MessageSerializationRegistryInitializer:
Error accessing configuration file
at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:586)
...
at java.base/java.util.ServiceLoader$3.hasNext(ServiceLoader.java:1393)
at
org.apache.ignite.internal.network.serialization.SerializationRegistryServiceLoader.registerSerializationFactories(SerializationRegistryServiceLoader.java:37)
at
org.apache.ignite.internal.app.IgniteImpl.createSerializationRegistry(IgniteImpl.java:1958)
at org.apache.ignite.internal.app.IgniteImpl.<init>(IgniteImpl.java:721)
at
org.apache.ignite.internal.app.IgniteServerImpl.doStartAsync(IgniteServerImpl.java:359)
...
at
org.apache.ignite.internal.app.IgniteServerImpl.startAsync(IgniteServerImpl.java:351)
... 14 more
Caused by: java.nio.file.NoSuchFileException:
/usr/lib/ignite3db/lib/ignite-raft-3.1.0.jar
at
java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
at
java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
at
java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
at
java.base/sun.nio.fs.UnixFileAttributeViews$Basic.readAttributes(UnixFileAttributeViews.java:55)
at
java.base/sun.nio.fs.UnixFileSystemProvider.readAttributes(UnixFileSystemProvider.java:171)
at
java.base/sun.nio.fs.LinuxFileSystemProvider.readAttributes(LinuxFileSystemProvider.java:99)
at java.base/java.nio.file.Files.readAttributes(Files.java:1854)
at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1445)
at
java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:724)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:251)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:180)
at java.base/java.util.jar.JarFile.<init>(JarFile.java:345)
at
java.base/sun.net.www.protocol.jar.URLJarFile.<init>(URLJarFile.java:100)
at
java.base/sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:69)
at
java.base/sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:168)
at
java.base/sun.net.www.protocol.jar.JarFileFactory.getOrCreate(JarFileFactory.java:91)
at
java.base/sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:117)
at
java.base/sun.net.www.protocol.jar.JarURLConnection.getInputStream(JarURLConnection.java:160)
at
java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.parse(ServiceLoader.java:1172)
... 29 more
{noformat}
The reason is we use wildcards {{lib/*}} in the class path in the start script.
So when new version is installed on top of the old version but old files are
not yet deleted, java launcher resolves the wildcard to both old and new
versions of the jars, we try to load a service, but then in the middle of it
the file is deleted by the installer.
The solution is to pin the class path during the packaging process.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)