Uploaded image for project: 'Commons VFS'
  1. Commons VFS
  2. VFS-849

HttpConnection resources not properly cleaned up in webdav request

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Blocker
    • Resolution: Fixed
    • 2.10.0
    • 2.10.0
    • None

    Description

      In the 2 cases where we decide to throw an exception from 

      Webdav4FileObject.executeRequest(final HttpUriRequest request)

      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.

      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

      I can not reproduce this behaviour with the webdav server which is part of the testcases.

      Fix is underway.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              beisetho Thorsten Beise
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: