Author: woonsan
Date: Thu Nov 1 05:24:35 2007
New Revision: 590974
URL: http://svn.apache.org/viewvc?rev=590974&view=rev
Log:
Fixed the following problem:
Problem: Sometimes, a page request does not get response in parallel rendering
mode. Thread dump shows that a thread is hanging on portletContent.wait() in
AsyncPageAggregatorImpl. Also, this happens only when a portlet fragment gets
time-out.
Thread dump is like the following:
"http-8080-Processor24" daemon prio=6 tid=0x171e5c00 nid=0x4e0 in Object.wait()
[0x1894e000..0x1894fd94]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x02e60b40> (a
org.apache.jetspeed.aggregator.impl.PortletContentImpl)
at java.lang.Object.wait(Object.java:485)
at
org.apache.jetspeed.aggregator.impl.AsyncPageAggregatorImpl.aggregateAndRender(AsyncPageAggregatorImpl.java:236)
- locked <0x02e60b40> (a
org.apache.jetspeed.aggregator.impl.PortletContentImpl)
<snip>
The old WorkerMonitorImpl has a while loop to interrupt worker and wait portlet
content. But this loop with ten times was meaningless. Because if it is
notified at wait(), then the portlet content is already completed.
By the way, the while loop in the old WorkerMonitorImpl caused this problem;
sometimes this can intercept all notifications from RenderingJobImpl's
portletContent.notifyAll(); sometimes AsyncPageAggregatorImpl cannot get
notification when there's a timeout portlet fragment.
So, WorkerMonitorImpl was fixed to get notification once.
The old implementation's while loop seems designed to confirm interruption of a
rendering job, but the confirmation was not properly implemented. This kind of
confirmation could be revisited later. (What if a portlet catches
InterruptedException and tries to proceed a long job?)
Modified:
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerMonitorImpl.java
Modified:
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerMonitorImpl.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerMonitorImpl.java?rev=590974&r1=590973&r2=590974&view=diff
==============================================================================
---
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerMonitorImpl.java
(original)
+++
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerMonitorImpl.java
Thu Nov 1 05:24:35 2007
@@ -365,20 +365,16 @@
log.warn("Portlet Rendering job to be interrupted by
timeout (" + job.getTimeout() + "ms): " + windowId);
}
- int waitCount = 0;
PortletContent content = job.getPortletContent();
-
- while (!content.isComplete()) {
- if (++waitCount > 10) {
- break;
- }
-
- worker.interrupt();
-
- synchronized (content) {
+
+ synchronized (content)
+ {
+ if (!content.isComplete()) {
+ worker.interrupt();
content.wait();
}
}
+
} catch (Exception e) {
log.error("Exceptiong during job killing.", e);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]