You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by bu...@apache.org on 2006/11/08 16:31:49 UTC

DO NOT REPLY [Bug 40885] - Hung threads with Websphere

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG�
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=40885>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND�
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=40885





------- Additional Comments From eberenguier@octo.com  2006-11-08 07:31 -------
The problem described is easy to reproduce when stress testing slide server
(running 20 threads repeatedly putting files kills the server in less than 10
minutes)

Subversion version (from 1 week ago) does not solve the problem.

After some reseach we found the following :

The problem was caused by a thread getting stuck while holding the global write
lock :
"Servlet.Engine.Transports : 0" daemon prio=5 tid=0x01f05c28 nid=0x24 runnable
[deb7e000..deb7fc30]
	at java.util.HashMap.put(HashMap.java:382)
	at org.apache.slide.store.ExtendedStore.end(ExtendedStore.java:1029)
	at
org.apache.slide.transaction.SlideTransaction.delistResource(SlideTransaction.java:377)
	at org.apache.slide.store.AbstractStore.delist(AbstractStore.java:1574)
	at org.apache.slide.store.AbstractStore.delist(AbstractStore.java:1559)
	at org.apache.slide.store.ExtendedStore.retrieveObject(ExtendedStore.java:581)
	at org.apache.slide.structure.StructureImpl.retrieve(StructureImpl.java:178)
	at org.apache.slide.structure.StructureImpl.retrieve(StructureImpl.java:160)
	at
org.apache.slide.webdav.method.AbstractWebdavMethod.run(AbstractWebdavMethod.java:387)
	at org.apache.slide.webdav.WebdavServlet.service(WebdavServlet.java:155)

The thread was stuck because of the map internal state became corrupted (there
was a cycle in a linked list so the put method never exited)

The obvious fix was to replace the collection with a thread safe one.

--- ExtendedStore.java.orig     2004-12-23 13:07:48.000000000 +0100
+++ ExtendedStore.java  2006-11-08 16:23:11.393555000 +0100
@@ -63,6 +63,8 @@
 import org.apache.slide.util.logger.Logger;
 import org.apache.slide.util.logger.TxLogger;

+import java.util.Collections;
+
 /**
  * Store that allows for transactional caching of data. Takes over much
modified code from StandardStore.
  * That's why Remy is listed as author as well.
@@ -145,7 +147,7 @@
     long maxByteSizePerEntry;
     boolean noGlobalCacheInTx;

-    private Map suspendedLocks = new HashMap();
+    private Map suspendedLocks = Collections.synchronizedMap(new HashMap());

     public ExtendedStore() {
         lockManager = new GenericLockManager(1, new TxLogger(getLogger(),
LOG_CHANNEL));

Now we have no more hung threads, but i'm not sure it's the right fix.
What do you think ?


-- 
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.

---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org