[ 
https://issues.apache.org/jira/browse/GROOVY-9646?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17500807#comment-17500807
 ] 

John Engelman edited comment on GROOVY-9646 at 3/3/22, 2:56 PM:
----------------------------------------------------------------

Related to this issue is that {{ClassFinder}} will close existing FileSystems 
that it didn't open.

This is because it will use an existing FileSystem - 
[https://github.com/apache/groovy/blob/GROOVY_3_0_9/src/main/java/org/codehaus/groovy/vmplugin/v9/ClassFinder.java#L163]

and then wraps that with a try-with-resource block - 
[https://github.com/apache/groovy/blob/GROOVY_3_0_9/src/main/java/org/codehaus/groovy/vmplugin/v9/ClassFinder.java#L118]

This results in a scenario where if an application opens a FileSystem to a JAR 
on the classpath and then subsequent loads the groovy code, the underlying 
FileSystem is closed to the original application.

 

Opened this as https://issues.apache.org/jira/browse/GROOVY-10519


was (Author: johnrengelman):
Related to this issue is that `ClassFinder` will close existing FileSystems 
that it didn't open.

This is because it will use an existing FileSystem - 
[https://github.com/apache/groovy/blob/GROOVY_3_0_9/src/main/java/org/codehaus/groovy/vmplugin/v9/ClassFinder.java#L163]

and then wraps that with a try-with-resource block - 
[https://github.com/apache/groovy/blob/GROOVY_3_0_9/src/main/java/org/codehaus/groovy/vmplugin/v9/ClassFinder.java#L118]

This results in a scenario where if an application opens a FileSystem to a JAR 
on the classpath and then subsequent loads the groovy code, the underlying 
FileSystem is closed to the original application.

> Using Closure (Groovy Construction like []) triggers loading of all 
> FileSystemProviders
> ---------------------------------------------------------------------------------------
>
>                 Key: GROOVY-9646
>                 URL: https://issues.apache.org/jira/browse/GROOVY-9646
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 3.0.4
>            Reporter: Andrew Malyhin
>            Priority: Major
>
> After migration from Groovy 2.5.10 and jdk8 to Groovy 3.0.4 and jdk 11 we 
> have faced the issue: the first using of closure inits FileSystemProviders 
> from classpath which are not required: 
> There are two traces that show initializing of 
> org.apache.sshd.common.file.root.RootedFileSystemProvider just calling 
> {code:java}
>  at 
> logback.LogbackConfigurator.configureConsoleAppender(LogbackConfigurator.java:67)
>  at 
> logback.LogbackConfigurator.configureConsoleAppender(LogbackConfigurator.java:67)
>  at logback.LogbackConfigurator.configure(LogbackConfigurator.java:33) at 
> ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:156)
>  at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84) at 
> org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55) at 
> org.slf4j.LoggerFactory.bind(LoggerFactory.java:150) at 
> org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124) at 
> org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:417) at 
> org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:362) at 
> org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:388) at 
> org.apache.sshd.common.file.root.RootedFileSystemProvider.<init>(RootedFileSystemProvider.java:70)
>  at 
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native
>  Method) at 
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
>  at 
> java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>  at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) 
> at 
> java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:779)
>  at 
> java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:721) at 
> java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1394) at 
> java.base/java.nio.file.spi.FileSystemProvider.loadInstalledProviders(FileSystemProvider.java:155)
>  at 
> java.base/java.nio.file.spi.FileSystemProvider$1.run(FileSystemProvider.java:205)
>  at 
> java.base/java.nio.file.spi.FileSystemProvider$1.run(FileSystemProvider.java:202)
>  at java.base/java.security.AccessController.doPrivileged(Native Method) at 
> java.base/java.nio.file.spi.FileSystemProvider.installedProviders(FileSystemProvider.java:202)
>  at java.base/java.nio.file.FileSystems.newFileSystem(FileSystems.java:341) 
> at java.base/java.nio.file.FileSystems.newFileSystem(FileSystems.java:293) at 
> org.codehaus.groovy.vmplugin.v9.ClassFinder.newFileSystem(ClassFinder.java:161)
>  at org.codehaus.groovy.vmplugin.v9.ClassFinder.find(ClassFinder.java:118) at 
> org.codehaus.groovy.vmplugin.v9.ClassFinder.find(ClassFinder.java:107) at 
> org.codehaus.groovy.vmplugin.v9.Java9.doFindClasses(Java9.java:106) at 
> org.codehaus.groovy.vmplugin.v9.Java9.getDefaultImportClasses(Java9.java:85) 
> at 
> org.codehaus.groovy.control.ResolveVisitor.<clinit>(ResolveVisitor.java:641) 
> at org.codehaus.groovy.runtime.InvokerHelper.<clinit>(InvokerHelper.java:807) 
> at 
> groovy.lang.GroovyObjectSupport.getDefaultMetaClass(GroovyObjectSupport.java:44)
>  at groovy.lang.GroovyObjectSupport.<init>(GroovyObjectSupport.java:31) at 
> groovy.lang.Closure.<init>(Closure.java:211) at 
> groovy.lang.Closure.<init>(Closure.java:228) at 
> groovy.lang.Closure$1.<init>(Closure.java:193) at 
> groovy.lang.Closure.<clinit>(Closure.java:193){code}
> and
> {code:java}
>  at 
> logback.LogbackConfigurator.configureConsoleAppender(LogbackConfigurator.java:67)
>  at 
> logback.LogbackConfigurator.configureConsoleAppender(LogbackConfigurator.java:67)
>  at logback.LogbackConfigurator.configure(LogbackConfigurator.java:33) at 
> ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:156)
>  at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84) at 
> org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55) at 
> org.slf4j.LoggerFactory.bind(LoggerFactory.java:150) at 
> org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124) at 
> org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:417) at 
> org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:362) at 
> org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:388) at 
> org.apache.sshd.common.file.root.RootedFileSystemProvider.<init>(RootedFileSystemProvider.java:70)
>  at 
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native
>  Method) at 
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
>  at 
> java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>  at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) 
> at 
> java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:779)
>  at 
> java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:721) at 
> java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1394) at 
> java.base/java.nio.file.spi.FileSystemProvider.loadInstalledProviders(FileSystemProvider.java:155)
>  at 
> java.base/java.nio.file.spi.FileSystemProvider$1.run(FileSystemProvider.java:205)
>  at 
> java.base/java.nio.file.spi.FileSystemProvider$1.run(FileSystemProvider.java:202)
>  at java.base/java.security.AccessController.doPrivileged(Native Method) at 
> java.base/java.nio.file.spi.FileSystemProvider.installedProviders(FileSystemProvider.java:202)
>  at java.base/java.nio.file.FileSystems.newFileSystem(FileSystems.java:341) 
> at java.base/java.nio.file.FileSystems.newFileSystem(FileSystems.java:293) at 
> org.codehaus.groovy.vmplugin.v9.ClassFinder.newFileSystem(ClassFinder.java:161)
>  at org.codehaus.groovy.vmplugin.v9.ClassFinder.find(ClassFinder.java:118) at 
> org.codehaus.groovy.vmplugin.v9.ClassFinder.find(ClassFinder.java:107) at 
> org.codehaus.groovy.vmplugin.v9.Java9.doFindClasses(Java9.java:106) at 
> org.codehaus.groovy.vmplugin.v9.Java9.getDefaultImportClasses(Java9.java:85) 
> at 
> org.codehaus.groovy.control.ResolveVisitor.<clinit>(ResolveVisitor.java:641) 
> at org.codehaus.groovy.runtime.InvokerHelper.<clinit>(InvokerHelper.java:807) 
> at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.createList(ScriptBytecodeAdapter.java:623)
> {code}
> Thanks



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to