[ 
https://issues.apache.org/jira/browse/VFS-343?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ralph Goers closed VFS-343.
---------------------------

       Resolution: Fixed
    Fix Version/s: 2.0

The fix has been validated. In addition, the other locking changes have greatly 
improved performance although bottlenecks are still being seen.

> Deadlock occurs in HTTP or WebDAV when all the connections are in use.
> ----------------------------------------------------------------------
>
>                 Key: VFS-343
>                 URL: https://issues.apache.org/jira/browse/VFS-343
>             Project: Commons VFS
>          Issue Type: Bug
>            Reporter: Ralph Goers
>             Fix For: 2.0
>
>
> The stacktrace below shows several threads all waiting on a FileSystem lock. 
> The thread holding that lock is waiting for an HTTP connection from the 
> connection pool. However, each of the threads waiting on the FileSystem lock 
> has already acquired a connection from the pool.  This issue can be resolved 
> by reducing the amount of locking that occurs on the FileSystem objects. In 
> this case the threads are attempting to get the lock to increment a counter. 
> Changing the counters to AtomicIntegers will resolve the problem.
> Full thread dump Java HotSpot(TM) 64-Bit Server VM (11.0-b16 mixed mode):
> "Attach Listener" daemon prio=10 tid=0x0000000053834400 nid=0x23b1 waiting on 
> condition [0x0000000000000000..0x0000000000000000]
>   java.lang.Thread.State: RUNNABLE
> "MultiThreadedHttpConnectionManager cleanup" daemon prio=10 
> tid=0x00000000538ff400 nid=0x21f0 in Object.wait() 
> [0x000000004077e000..0x000000004077ec10]
>   java.lang.Thread.State: TIMED_WAITING (on object monitor)
>        at java.lang.Object.wait(Native Method)
>        - waiting on <0x00002aab82694428> (a java.lang.ref.ReferenceQueue$Lock)
>        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
>        - locked <0x00002aab82694428> (a java.lang.ref.ReferenceQueue$Lock)
>        at 
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ReferenceQueueThread.run(MultiThreadedHttpConnectionManager.java:1082)
> "Thread 2" prio=10 tid=0x00002aabc00a0800 nid=0x21ef waiting for monitor 
> entry [0x0000000040d17000..0x0000000040d17c90]
>   java.lang.Thread.State: BLOCKED (on object monitor)
>        at 
> org.apache.commons.vfs.provider.AbstractFileSystem.streamOpened(AbstractFileSystem.java:602)
>        - waiting to lock <0x00002aab827f92c8> (a 
> org.apache.commons.vfs.provider.webdav.WebdavFileSystem)
>        at 
> org.apache.commons.vfs.provider.DefaultFileContent.streamOpened(DefaultFileContent.java:93)
>        at 
> org.apache.commons.vfs.provider.DefaultFileContent.getInputStream(DefaultFileContent.java:373)
>        at 
> org.apache.commons.configuration.VFSFileSystem.getInputStream(VFSFileSystem.java:111)
>        at 
> org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:311)
>        at 
> org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:251)
>        at 
> org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:229)
>        at 
> org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.load(AbstractHierarchicalFileConfiguration.java:180)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClientProduct(ConfigurationSynchronizer.java:862)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClient(ConfigurationSynchronizer.java:829)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.run(ConfigurationSynchronizer.java:416)
>        at java.lang.Thread.run(Thread.java:619)
> "Thread 3" prio=10 tid=0x00002aabc009f800 nid=0x21ec in Object.wait() 
> [0x0000000042593000..0x0000000042593d10]
>   java.lang.Thread.State: WAITING (on object monitor)
>        at java.lang.Object.wait(Native Method)
>        - waiting on <0x00002aab826c67a8> (a 
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ConnectionPool)
>        at 
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.doGetConnection(MultiThreadedHttpConnectionManager.java:509)
>        - locked <0x00002aab826c67a8> (a 
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ConnectionPool)
>        at 
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.getConnectionWithTimeout(MultiThreadedHttpConnectionManager.java:394)
>        at 
> org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:152)
>        at 
> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
>        at 
> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)
>        at 
> org.apache.commons.vfs.provider.webdav.WebdavFileObject.execute(WebdavFileObject.java:349)
>        at 
> org.apache.commons.vfs.provider.webdav.WebdavFileObject.getProperties(WebdavFileObject.java:442)
>        at 
> org.apache.commons.vfs.provider.webdav.WebdavFileObject.getProperties(WebdavFileObject.java:417)
>        at 
> org.apache.commons.vfs.provider.webdav.WebdavFileObject.getProperty(WebdavFileObject.java:410)
>        at 
> org.apache.commons.vfs.provider.webdav.WebdavFileObject.getProperty(WebdavFileObject.java:402)
>        at 
> org.apache.commons.vfs.provider.webdav.WebdavFileObject.isDirectory(WebdavFileObject.java:382)
>        at 
> org.apache.commons.vfs.provider.webdav.WebdavFileObject.doGetType(WebdavFileObject.java:112)
>        at 
> org.apache.commons.vfs.provider.AbstractFileObject.getType(AbstractFileObject.java:441)
>        - locked <0x00002aab827f92c8> (a 
> org.apache.commons.vfs.provider.webdav.WebdavFileSystem)
>        at 
> org.apache.commons.vfs.provider.AbstractFileObject.exists(AbstractFileObject.java:424)
>        at 
> org.apache.commons.configuration.VFSFileSystem.locateFromURL(VFSFileSystem.java:293)
>        at 
> org.apache.commons.configuration.ConfigurationUtils.locate(ConfigurationUtils.java:466)
>        at 
> org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:245)
>        at 
> org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:229)
>        at 
> org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.load(AbstractHierarchicalFileConfiguration.java:180)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClientProduct(ConfigurationSynchronizer.java:862)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClient(ConfigurationSynchronizer.java:829)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.run(ConfigurationSynchronizer.java:416)
>        at java.lang.Thread.run(Thread.java:619)
> "Thread 4" prio=10 tid=0x00002aabc00ce000 nid=0x21eb waiting for monitor 
> entry [0x0000000042492000..0x0000000042492d90]
>   java.lang.Thread.State: BLOCKED (on object monitor)
>        at 
> org.apache.commons.vfs.provider.AbstractFileSystem.streamOpened(AbstractFileSystem.java:602)
>        - waiting to lock <0x00002aab827f92c8> (a 
> org.apache.commons.vfs.provider.webdav.WebdavFileSystem)
>        at 
> org.apache.commons.vfs.provider.DefaultFileContent.streamOpened(DefaultFileContent.java:93)
>        at 
> org.apache.commons.vfs.provider.DefaultFileContent.getInputStream(DefaultFileContent.java:373)
>        at 
> org.apache.commons.configuration.VFSFileSystem.getInputStream(VFSFileSystem.java:111)
>        at 
> org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:311)
>        at 
> org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:251)
>        at 
> org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:229)
>        at 
> org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.load(AbstractHierarchicalFileConfiguration.java:180)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClientProduct(ConfigurationSynchronizer.java:862)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClient(ConfigurationSynchronizer.java:829)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.run(ConfigurationSynchronizer.java:416)
>        at java.lang.Thread.run(Thread.java:619)
> "Thread 5" prio=10 tid=0x00002aabc00d2000 nid=0x21ea waiting for monitor 
> entry [0x0000000042391000..0x0000000042391a10]
>   java.lang.Thread.State: BLOCKED (on object monitor)
>        at 
> org.apache.commons.vfs.provider.AbstractFileSystem.streamOpened(AbstractFileSystem.java:602)
>        - waiting to lock <0x00002aab827f92c8> (a 
> org.apache.commons.vfs.provider.webdav.WebdavFileSystem)
>        at 
> org.apache.commons.vfs.provider.DefaultFileContent.streamOpened(DefaultFileContent.java:93)
>        at 
> org.apache.commons.vfs.provider.DefaultFileContent.getInputStream(DefaultFileContent.java:373)
>        at 
> org.apache.commons.configuration.VFSFileSystem.getInputStream(VFSFileSystem.java:111)
>        at 
> org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:311)
>        at 
> org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:251)
>        at 
> org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:229)
>        at 
> org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.load(AbstractHierarchicalFileConfiguration.java:180)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClientProduct(ConfigurationSynchronizer.java:862)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClient(ConfigurationSynchronizer.java:829)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.run(ConfigurationSynchronizer.java:416)
>        at java.lang.Thread.run(Thread.java:619)
> "Thread 6" prio=10 tid=0x00002aabc00af400 nid=0x21e9 waiting for monitor 
> entry [0x0000000042290000..0x0000000042290a90]
>   java.lang.Thread.State: BLOCKED (on object monitor)
>        at 
> org.apache.commons.vfs.provider.AbstractFileSystem.resolveFile(AbstractFileSystem.java:294)
>        - waiting to lock <0x00002aab827f92c8> (a 
> org.apache.commons.vfs.provider.webdav.WebdavFileSystem)
>        at 
> org.apache.commons.vfs.provider.AbstractOriginatingFileProvider.findFile(AbstractOriginatingFileProvider.java:86)
>        at 
> org.apache.commons.vfs.provider.AbstractOriginatingFileProvider.findFile(AbstractOriginatingFileProvider.java:66)
>        at 
> org.apache.commons.vfs.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:692)
>        at 
> org.apache.commons.vfs.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:648)
>        at 
> org.apache.commons.vfs.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:604)
>        at 
> org.apache.commons.configuration.VFSFileSystem.getInputStream(VFSFileSystem.java:99)
>        at 
> org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:311)
>        at 
> org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:251)
>        at 
> org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:229)
>        at 
> org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.load(AbstractHierarchicalFileConfiguration.java:180)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClientProduct(ConfigurationSynchronizer.java:862)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClient(ConfigurationSynchronizer.java:829)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.run(ConfigurationSynchronizer.java:416)
>        at java.lang.Thread.run(Thread.java:619)
> "Thread 7" prio=10 tid=0x00002aabc001cc00 nid=0x21e8 waiting for monitor 
> entry [0x000000004218f000..0x000000004218fb10]
>   java.lang.Thread.State: BLOCKED (on object monitor)
>        at 
> org.apache.commons.vfs.provider.AbstractFileSystem.streamOpened(AbstractFileSystem.java:602)
>        - waiting to lock <0x00002aab827f92c8> (a 
> org.apache.commons.vfs.provider.webdav.WebdavFileSystem)
>        at 
> org.apache.commons.vfs.provider.DefaultFileContent.streamOpened(DefaultFileContent.java:93)
>        at 
> org.apache.commons.vfs.provider.DefaultFileContent.getInputStream(DefaultFileContent.java:373)
>        at 
> org.apache.commons.configuration.VFSFileSystem.getInputStream(VFSFileSystem.java:111)
>        at 
> org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:311)
>        at 
> org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:251)
>        at 
> org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:229)
>        at 
> org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.load(AbstractHierarchicalFileConfiguration.java:180)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClientProduct(ConfigurationSynchronizer.java:862)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClient(ConfigurationSynchronizer.java:829)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.run(ConfigurationSynchronizer.java:416)
>        at java.lang.Thread.run(Thread.java:619)
> "org.apache.commons.vfs.cache.SoftRefFilesCache$SoftRefReleaseThread" daemon 
> prio=10 tid=0x00002aabc001ec00 nid=0x21e7 in Object.wait() 
> [0x000000004208e000..0x000000004208eb90]
>   java.lang.Thread.State: TIMED_WAITING (on object monitor)
>        at java.lang.Object.wait(Native Method)
>        - waiting on <0x00002aaabe1f0198> (a java.lang.ref.ReferenceQueue$Lock)
>        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
>        - locked <0x00002aaabe1f0198> (a java.lang.ref.ReferenceQueue$Lock)
>        at 
> org.apache.commons.vfs.cache.SoftRefFilesCache$SoftRefReleaseThread.run(SoftRefFilesCache.java:79)
> "Low Memory Detector" daemon prio=10 tid=0x000000005360bc00 nid=0x21e4 
> runnable [0x0000000000000000..0x0000000000000000]
>   java.lang.Thread.State: RUNNABLE
> "CompilerThread1" daemon prio=10 tid=0x0000000053609000 nid=0x21e3 waiting on 
> condition [0x0000000000000000..0x0000000041d8a4c0]
>   java.lang.Thread.State: RUNNABLE
> "CompilerThread0" daemon prio=10 tid=0x0000000053605400 nid=0x21e2 waiting on 
> condition [0x0000000000000000..0x000000004165c5d0]
>   java.lang.Thread.State: RUNNABLE
> "Signal Dispatcher" daemon prio=10 tid=0x0000000053603400 nid=0x21e1 runnable 
> [0x0000000000000000..0x0000000040ed66a0]
>   java.lang.Thread.State: RUNNABLE
> "Finalizer" daemon prio=10 tid=0x00000000535e0c00 nid=0x21e0 in Object.wait() 
> [0x000000004155c000..0x000000004155ca90]
>   java.lang.Thread.State: WAITING (on object monitor)
>        at java.lang.Object.wait(Native Method)
>        - waiting on <0x00002aaabe1f0278> (a java.lang.ref.ReferenceQueue$Lock)
>        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
>        - locked <0x00002aaabe1f0278> (a java.lang.ref.ReferenceQueue$Lock)
>        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
>        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
> "Reference Handler" daemon prio=10 tid=0x00000000535df000 nid=0x21df in 
> Object.wait() [0x000000004145b000..0x000000004145bb10]
>   java.lang.Thread.State: WAITING (on object monitor)
>        at java.lang.Object.wait(Native Method)
>        - waiting on <0x00002aaabe1f2370> (a java.lang.ref.Reference$Lock)
>        at java.lang.Object.wait(Object.java:485)
>        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
>        - locked <0x00002aaabe1f2370> (a java.lang.ref.Reference$Lock)
> "Thread 1" prio=10 tid=0x0000000053427400 nid=0x21d5 waiting for monitor 
> entry [0x00000000412af000..0x00000000412afed0]
>   java.lang.Thread.State: BLOCKED (on object monitor)
>        at 
> org.apache.commons.vfs.provider.AbstractFileSystem.streamOpened(AbstractFileSystem.java:602)
>        - waiting to lock <0x00002aab827f92c8> (a 
> org.apache.commons.vfs.provider.webdav.WebdavFileSystem)
>        at 
> org.apache.commons.vfs.provider.DefaultFileContent.streamOpened(DefaultFileContent.java:93)
>        at 
> org.apache.commons.vfs.provider.DefaultFileContent.getInputStream(DefaultFileContent.java:373)
>        at 
> org.apache.commons.configuration.VFSFileSystem.getInputStream(VFSFileSystem.java:111)
>        at 
> org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:311)
>        at 
> org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:251)
>        at 
> org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:229)
>        at 
> org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.load(AbstractHierarchicalFileConfiguration.java:180)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClientProduct(ConfigurationSynchronizer.java:862)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClient(ConfigurationSynchronizer.java:829)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.run(ConfigurationSynchronizer.java:416)
>        at 
> com.diginsite.services.configsync.ConfigurationSynchronizer.main(ConfigurationSynchronizer.java:1790)
> "VM Thread" prio=10 tid=0x00000000535d9800 nid=0x21de runnable 
> "GC task thread#0 (ParallelGC)" prio=10 tid=0x0000000053432000 nid=0x21d6 
> runnable 
> "GC task thread#1 (ParallelGC)" prio=10 tid=0x0000000053433800 nid=0x21d7 
> runnable 
> "GC task thread#2 (ParallelGC)" prio=10 tid=0x0000000053435400 nid=0x21d8 
> runnable 
> "GC task thread#3 (ParallelGC)" prio=10 tid=0x0000000053436c00 nid=0x21d9 
> runnable 
> "GC task thread#4 (ParallelGC)" prio=10 tid=0x0000000053438400 nid=0x21da 
> runnable 
> "GC task thread#5 (ParallelGC)" prio=10 tid=0x000000005343a000 nid=0x21db 
> runnable 
> "GC task thread#6 (ParallelGC)" prio=10 tid=0x000000005343b800 nid=0x21dc 
> runnable 
> "GC task thread#7 (ParallelGC)" prio=10 tid=0x000000005343d000 nid=0x21dd 
> runnable 
> "VM Periodic Task Thread" prio=10 tid=0x000000005360e000 nid=0x21e5 waiting 
> on condition 
> JNI global references: 902

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to