You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2019/03/15 13:34:50 UTC
svn commit: r1855587 -
/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CommitsTrackerTest.java
Author: mduerig
Date: Fri Mar 15 13:34:49 2019
New Revision: 1855587
URL: http://svn.apache.org/viewvc?rev=1855587&view=rev
Log:
OAK-8094: JMX monitoring to detect commits carrying over from previous GC generation can block other threads from committing
Simplify CommitsTrackerTest
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CommitsTrackerTest.java
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CommitsTrackerTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CommitsTrackerTest.java?rev=1855587&r1=1855586&r2=1855587&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CommitsTrackerTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CommitsTrackerTest.java Fri Mar 15 13:34:49 2019
@@ -19,84 +19,74 @@
package org.apache.jackrabbit.oak.segment;
-import static java.util.concurrent.Executors.newFixedThreadPool;
+import static com.google.common.collect.Lists.newArrayList;
+import static java.lang.Math.min;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import java.util.List;
import java.util.Map;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.atomic.AtomicInteger;
-import org.apache.jackrabbit.oak.commons.concurrent.ExecutorCloser;
import org.junit.Test;
public class CommitsTrackerTest {
- static class DequedCommitTask implements Runnable {
+ private static class CommitTask {
private final CommitsTracker commitsTracker;
- private final String threadName;
- private final CountDownLatch latch;
+ private final Thread thread;
- public DequedCommitTask(CommitsTracker commitsTracker, String threadName, CountDownLatch latch) {
+ CommitTask(CommitsTracker commitsTracker) {
this.commitsTracker = commitsTracker;
- this.threadName = threadName;
- this.latch = latch;
+ this.thread = new Thread();
}
- @Override
- public void run() {
- Thread.currentThread().setName(threadName);
- commitsTracker.trackDequedCommitOf(Thread.currentThread());
- latch.countDown();
+ CommitTask(CommitsTracker commitsTracker, String threadName) {
+ this.commitsTracker = commitsTracker;
+ this.thread = new Thread(threadName);
+ }
+
+ public void queued() {
+ commitsTracker.trackQueuedCommitOf(thread);
+ }
+
+ public void dequeue() {
+ commitsTracker.trackDequedCommitOf(thread);
+ }
+
+ public void executed() {
+ commitsTracker.trackExecutedCommitOf(thread);
+ }
+
+ public String getThreadName() {
+ return thread.getName();
}
}
@Test
public void testCommitsCountOthers() throws InterruptedException {
- CommitsTracker commitsTracker = new CommitsTracker(new String[] {}, 10, false);
- ExecutorService executorService = newFixedThreadPool(30);
- final CountDownLatch addLatch = new CountDownLatch(25);
-
- Runnable executedCommitTask = () -> {
- commitsTracker.trackExecutedCommitOf(Thread.currentThread());
- addLatch.countDown();
- };
-
- Runnable queuedCommitTask = () -> {
- Thread t = Thread.currentThread();
- commitsTracker.trackQueuedCommitOf(t);
- addLatch.countDown();
- };
-
- try {
- for (int i = 0; i < 20; i++) {
- executorService.submit(executedCommitTask);
- }
-
- for (int i = 0; i < 5; i++) {
- executorService.submit(queuedCommitTask);
- }
-
- addLatch.await();
- Map<String, Long> commitsCountOthersMap = commitsTracker.getCommitsCountOthers();
- Map<String, String> queuedWritersMap = commitsTracker.getQueuedWritersMap();
-
- assertTrue(commitsCountOthersMap.size() >= 10);
- assertTrue(commitsCountOthersMap.size() < 20);
- assertEquals(5, queuedWritersMap.size());
-
- CountDownLatch removeLatch = new CountDownLatch(5);
- for (String threadName : queuedWritersMap.keySet()) {
- executorService.submit(new DequedCommitTask(commitsTracker, threadName, removeLatch));
- }
-
- removeLatch.await();
- queuedWritersMap = commitsTracker.getQueuedWritersMap();
- assertEquals(0, queuedWritersMap.size());
- } finally {
- new ExecutorCloser(executorService).close();
+ CommitsTracker commitsTracker = new CommitsTracker(new String[] {}, 10, true);
+
+ List<CommitTask> queued = newArrayList();
+ for (int k = 0; k < 20; k++) {
+ CommitTask commitTask = new CommitTask(commitsTracker);
+ queued.add(commitTask);
+ commitTask.queued();
+ assertEquals(queued.size(), commitsTracker.getQueuedWritersMap().size());
+ assertEquals(0, commitsTracker.getCommitsCountOthers().size());
+ assertTrue(commitsTracker.getCommitsCountPerGroupLastMinute().isEmpty());
+ }
+
+ List<CommitTask> executed = newArrayList();
+ for (int k = 0; k < 13; k ++) {
+ CommitTask commitTask = queued.remove(0);
+ executed.add(commitTask);
+ commitTask.dequeue();
+
+ commitTask.executed();
+ assertEquals(queued.size(), commitsTracker.getQueuedWritersMap().size());
+ assertEquals(min(10, executed.size()), commitsTracker.getCommitsCountOthers().size());
+ assertTrue(commitsTracker.getCommitsCountPerGroupLastMinute().isEmpty());
}
}
@@ -104,33 +94,23 @@ public class CommitsTrackerTest {
public void testCommitsCountPerGroup() throws InterruptedException {
String[] groups = new String[] { "Thread-1.*", "Thread-2.*", "Thread-3.*" };
CommitsTracker commitsTracker = new CommitsTracker(groups, 10, false);
- ExecutorService executorService = newFixedThreadPool(30);
- AtomicInteger counter = new AtomicInteger(10);
- final CountDownLatch latch = new CountDownLatch(30);
-
- Runnable executedCommitTask = () -> {
- Thread.currentThread().setName("Thread-" + counter.getAndIncrement());
- commitsTracker.trackExecutedCommitOf(Thread.currentThread());
- latch.countDown();
- };
-
- try {
- for (int i = 0; i < 30; i++) {
- executorService.submit(executedCommitTask);
- }
-
- latch.await();
-
- Map<String, Long> commitsCountPerGroup = commitsTracker.getCommitsCountPerGroupLastMinute();
- assertEquals(3, commitsCountPerGroup.size());
-
- for (String group : groups) {
- Long groupCount = commitsCountPerGroup.get(group);
- assertNotNull(groupCount);
- assertEquals(10, (long) groupCount);
- }
- } finally {
- new ExecutorCloser(executorService).close();
+
+ for (int k = 0; k < 40; k++) {
+ CommitTask commitTask = new CommitTask(commitsTracker, "Thread-" + (10 + k));
+ commitTask.queued();
+ commitTask.dequeue();
+ commitTask.executed();
}
+
+ Map<String, Long> commitsCountPerGroup = commitsTracker.getCommitsCountPerGroupLastMinute();
+ assertEquals(3, commitsCountPerGroup.size());
+
+ for (String group : groups) {
+ Long groupCount = commitsCountPerGroup.get(group);
+ assertNotNull(groupCount);
+ assertEquals(10, (long) groupCount);
+ }
+
+ assertEquals(10, commitsTracker.getCommitsCountOthers().size());
}
}