Thorsten Beise created VFS-849:
----------------------------------

             Summary: HttpConnection resources not properly cleaned up in 
webdav request
                 Key: VFS-849
                 URL: https://issues.apache.org/jira/browse/VFS-849
             Project: Commons VFS
          Issue Type: Bug
    Affects Versions: 2.10.0
            Reporter: Thorsten Beise


In the 2 cases where we decide to throw an exception from 
{code:java}
Webdav4FileObject.executeRequest(final HttpUriRequest request){code}
the outer try-with-resource statements cannot cleanup the connection resource 
properly, because no request is returned and instead an exception is thrown.

After some webdav operations the connections are not returned to the underlying 
connection pool which results in a deadlock situation.

The following exception is forced via Thread.interrupt(...) from another 
monitoring thread.
{code:java}
org.apache.commons.vfs2.FileSystemException: Could not create file 
"webdav4s://localhost/webdav/myFile8".
    at 
org.apache.commons.vfs2.provider.AbstractFileObject.createFile(AbstractFileObject.java:335)
    at org.apache.commons.vfs2.FileObject$createFile.call(Unknown Source)
    at 
de.bwinvest.esb.jbi.bc.file.test.Webdav4sConnectionTest$_testWebdav4sConnection_closure1.doCall(Webdav4sConnectionTest.groovy:94)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 
Method)
    at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:101)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
    at 
org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:263)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1041)
    at 
org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:37)
    at 
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at 
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115)
    at 
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:127)
    at 
de.bwinvest.esb.jbi.bc.file.component.util.VFSFileSystemManagerFactory.process(VFSFileSystemManagerFactory.groovy:48)
    at 
de.bwinvest.esb.jbi.bc.file.component.util.VFSFileSystemManagerFactory$process.call(Unknown
 Source)
    at 
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at 
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115)
    at 
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:135)
    at 
de.bwinvest.esb.jbi.bc.file.test.Webdav4sConnectionTest.testWebdav4sConnection(Webdav4sConnectionTest.groovy:77)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 
Method)
    at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at 
org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
    at 
org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
    at org.testng.TestRunner.privateRun(TestRunner.java:767)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
    at org.testng.SuiteRunner.run(SuiteRunner.java:240)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1123)
    at org.testng.TestNG.run(TestNG.java:1031)
    at 
org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:155)
    at 
org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.executeSingleClass(TestNGDirectoryTestSuite.java:102)
    at 
org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:91)
    at 
org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:137)
    at 
org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385)
    at 
org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
    at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495)
Caused by: org.apache.commons.vfs2.FileSystemException: Could not determine the 
type of file "webdav4s://localhost/webdav".
    at 
org.apache.commons.vfs2.provider.AbstractFileObject.getType(AbstractFileObject.java:1390)
    at 
org.apache.commons.vfs2.provider.AbstractFileObject.createFolder(AbstractFileObject.java:349)
    at 
org.apache.commons.vfs2.provider.AbstractFileObject.getOutputStream(AbstractFileObject.java:1277)
    at 
org.apache.commons.vfs2.provider.DefaultFileContent.buildOutputStream(DefaultFileContent.java:293)
    at 
org.apache.commons.vfs2.provider.DefaultFileContent.getOutputStream(DefaultFileContent.java:583)
    at 
org.apache.commons.vfs2.provider.DefaultFileContent.getOutputStream(DefaultFileContent.java:571)
    at 
org.apache.commons.vfs2.provider.AbstractFileObject.createFile(AbstractFileObject.java:326)
    ... 49 more
Caused by: org.apache.commons.vfs2.FileSystemException: Unknown message with 
code "Request aborted".
    at 
org.apache.commons.vfs2.provider.webdav4.Webdav4FileObject.executeRequest(Webdav4FileObject.java:501)
    at 
org.apache.commons.vfs2.provider.webdav4.Webdav4FileObject.getProperties(Webdav4FileObject.java:526)
    at 
org.apache.commons.vfs2.provider.webdav4.Webdav4FileObject.getProperties(Webdav4FileObject.java:518)
    at 
org.apache.commons.vfs2.provider.webdav4.Webdav4FileObject.getProperty(Webdav4FileObject.java:552)
    at 
org.apache.commons.vfs2.provider.webdav4.Webdav4FileObject.getProperty(Webdav4FileObject.java:557)
    at 
org.apache.commons.vfs2.provider.webdav4.Webdav4FileObject.isDirectory(Webdav4FileObject.java:590)
    at 
org.apache.commons.vfs2.provider.webdav4.Webdav4FileObject.doGetType(Webdav4FileObject.java:364)
    at 
org.apache.commons.vfs2.provider.AbstractFileObject.getType(AbstractFileObject.java:1384)
    ... 55 more
Caused by: org.apache.http.impl.execchain.RequestAbortedException: Request 
aborted
    at 
org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:193)
    at 
org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
    at 
org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
    at 
org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
    at 
org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
    at 
org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
    at 
org.apache.commons.vfs2.provider.http4.Http4FileObject.executeHttpUriRequest(Http4FileObject.java:191)
    at 
org.apache.commons.vfs2.provider.webdav4.Webdav4FileObject.executeRequest(Webdav4FileObject.java:487)
    ... 62 more
Caused by: java.lang.InterruptedException
    at 
java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2076)
    at 
org.apache.http.pool.AbstractConnPool.getPoolEntryBlocking(AbstractConnPool.java:391)
    at 
org.apache.http.pool.AbstractConnPool.access$300(AbstractConnPool.java:70)
    at org.apache.http.pool.AbstractConnPool$2.get(AbstractConnPool.java:253)
    at org.apache.http.pool.AbstractConnPool$2.get(AbstractConnPool.java:198)
    at 
org.apache.http.impl.conn.PoolingHttpClientConnectionManager.leaseConnection(PoolingHttpClientConnectionManager.java:306)
    at 
org.apache.http.impl.conn.PoolingHttpClientConnectionManager$1.get(PoolingHttpClientConnectionManager.java:282)
    at 
org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:190)
    ... 70 more{code}
I can not reproduce this behaviour with the webdav server which is part of the 
testcases.

Fix is underway.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to