You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pa...@apache.org on 2013/08/14 15:01:56 UTC
[2/2] git commit: WICKET-5316: testcase showing the problem with lock
releases
WICKET-5316: testcase showing the problem with lock releases
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/9ed0fbdb
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/9ed0fbdb
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/9ed0fbdb
Branch: refs/heads/wicket-6.x
Commit: 9ed0fbdb5a561c8ab4e35013a6b6beaddc72bffe
Parents: 2f97834
Author: Emond Papegaaij <em...@topicus.nl>
Authored: Wed Aug 14 15:01:43 2013 +0200
Committer: Emond Papegaaij <em...@topicus.nl>
Committed: Wed Aug 14 15:01:43 2013 +0200
----------------------------------------------------------------------
.../wicket/page/PageAccessSynchronizerTest.java | 58 ++++++++++++++++++++
1 file changed, 58 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/9ed0fbdb/wicket-core/src/test/java/org/apache/wicket/page/PageAccessSynchronizerTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/page/PageAccessSynchronizerTest.java b/wicket-core/src/test/java/org/apache/wicket/page/PageAccessSynchronizerTest.java
index c3770f4..b5cb403 100644
--- a/wicket-core/src/test/java/org/apache/wicket/page/PageAccessSynchronizerTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/page/PageAccessSynchronizerTest.java
@@ -17,7 +17,9 @@
package org.apache.wicket.page;
import java.util.Random;
+import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.wicket.MockPage;
@@ -327,4 +329,60 @@ public class PageAccessSynchronizerTest extends Assert
PageLock pageLock2 = locks.get(Integer.valueOf(pageId));
assertNotNull(pageLock2);
}
+
+ /**
+ * https://issues.apache.org/jira/browse/WICKET-5316
+ *
+ * @throws Exception
+ */
+ @Test
+ public void failToReleaseUnderLoad() throws Exception
+ {
+ final ConcurrentLinkedQueue<Exception> errors = new ConcurrentLinkedQueue<Exception>();
+ final long endTime = System.currentTimeMillis() + Duration.seconds(20).getMilliseconds();
+ final PageAccessSynchronizer sync = new PageAccessSynchronizer(Duration.seconds(10));
+ final CountDownLatch latch = new CountDownLatch(100);
+ for (int count = 0; count < 100; count++)
+ {
+ new Thread()
+ {
+ @Override
+ public void run()
+ {
+ try
+ {
+ while (System.currentTimeMillis() < endTime)
+ {
+ try
+ {
+ logger.debug(Thread.currentThread().getName() + " locking");
+ sync.lockPage(0);
+ Thread.sleep(1);
+ logger.debug(Thread.currentThread().getName() + " locked");
+ sync.unlockAllPages();
+ logger.debug(Thread.currentThread().getName() + " unlocked");
+ Thread.sleep(5);
+ }
+ catch (InterruptedException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ logger.error(e.getMessage(), e);
+ errors.add(e);
+ }
+ finally
+ {
+ latch.countDown();
+ }
+ }
+ }.start();
+ }
+ latch.await();
+ if (!errors.isEmpty())
+ throw errors.remove();
+ }
}