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)

Reply via email to