You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2016/11/24 16:09:37 UTC
svn commit: r1771173 - in /sling/trunk/installer/providers/jcr/src:
main/java/org/apache/sling/installer/provider/jcr/impl/
test/java/org/apache/sling/installer/provider/jcr/impl/
Author: rombert
Date: Thu Nov 24 16:09:37 2016
New Revision: 1771173
URL: http://svn.apache.org/viewvc?rev=1771173&view=rev
Log:
SLING-6326 - JcrInstaller.counters should be accessed in a thread-safe
manner
JcrInstaller.counters is now an AtomicLongArray
Modified:
sling/trunk/installer/providers/jcr/src/main/java/org/apache/sling/installer/provider/jcr/impl/JcrInstaller.java
sling/trunk/installer/providers/jcr/src/test/java/org/apache/sling/installer/provider/jcr/impl/MiscUtil.java
sling/trunk/installer/providers/jcr/src/test/java/org/apache/sling/installer/provider/jcr/impl/ScanningLoopTest.java
Modified: sling/trunk/installer/providers/jcr/src/main/java/org/apache/sling/installer/provider/jcr/impl/JcrInstaller.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/providers/jcr/src/main/java/org/apache/sling/installer/provider/jcr/impl/JcrInstaller.java?rev=1771173&r1=1771172&r2=1771173&view=diff
==============================================================================
--- sling/trunk/installer/providers/jcr/src/main/java/org/apache/sling/installer/provider/jcr/impl/JcrInstaller.java (original)
+++ sling/trunk/installer/providers/jcr/src/main/java/org/apache/sling/installer/provider/jcr/impl/JcrInstaller.java Thu Nov 24 16:09:37 2016
@@ -31,6 +31,7 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLongArray;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
@@ -87,7 +88,7 @@ public class JcrInstaller implements Upd
private final Logger logger = LoggerFactory.getLogger(getClass());
/** Counters, used for statistics and testing */
- private final long [] counters = new long[COUNTERS_COUNT];
+ private final AtomicLongArray counters = new AtomicLongArray(COUNTERS_COUNT);
public static final int SCAN_FOLDERS_COUNTER = 0;
public static final int UPDATE_FOLDERS_LIST_COUNTER = 1;
public static final int RUN_LOOP_COUNTER = 2;
@@ -320,7 +321,7 @@ public class JcrInstaller implements Upd
}
}
logger.info("Background thread {} done", Thread.currentThread().getName());
- counters[RUN_LOOP_COUNTER] = -1;
+ counters.set(RUN_LOOP_COUNTER, -1);
}
public InstallerConfig getConfiguration() {
@@ -528,9 +529,7 @@ public class JcrInstaller implements Upd
session.refresh(false);
didRefresh = true;
}
- counters[SCAN_FOLDERS_COUNTER]++;
-
- new RuntimeException("SCAN_FOLDERS_COUNTER is now " + counters[SCAN_FOLDERS_COUNTER]).printStackTrace();
+ counters.incrementAndGet(SCAN_FOLDERS_COUNTER);
final WatchedFolder.ScanResult sr = wf.scan();
boolean toDo = false;
@@ -556,7 +555,7 @@ public class JcrInstaller implements Upd
didRefresh = true;
}
updateFoldersListTimer.reset();
- counters[UPDATE_FOLDERS_LIST_COUNTER]++;
+ counters.incrementAndGet(UPDATE_FOLDERS_LIST_COUNTER);
final List<String> toRemove = updateFoldersList(cfg, session);
if ( toRemove.size() > 0 ) {
logger.info("Removing resource from OSGi installer (folder deleted): {}", toRemove);
@@ -579,7 +578,7 @@ public class JcrInstaller implements Upd
}
}
}
- counters[RUN_LOOP_COUNTER]++;
+ counters.incrementAndGet(RUN_LOOP_COUNTER);
}
boolean scanningIsPaused(final InstallerConfig cfg, final Session session) throws RepositoryException {
@@ -599,8 +598,8 @@ public class JcrInstaller implements Upd
return false;
}
- long [] getCounters() {
- return counters;
+ long getCounterValue(int key) {
+ return counters.get(key);
}
/**
Modified: sling/trunk/installer/providers/jcr/src/test/java/org/apache/sling/installer/provider/jcr/impl/MiscUtil.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/providers/jcr/src/test/java/org/apache/sling/installer/provider/jcr/impl/MiscUtil.java?rev=1771173&r1=1771172&r2=1771173&view=diff
==============================================================================
--- sling/trunk/installer/providers/jcr/src/test/java/org/apache/sling/installer/provider/jcr/impl/MiscUtil.java (original)
+++ sling/trunk/installer/providers/jcr/src/test/java/org/apache/sling/installer/provider/jcr/impl/MiscUtil.java Thu Nov 24 16:09:37 2016
@@ -32,7 +32,7 @@ class MiscUtil {
final long endTime = System.currentTimeMillis() + timeoutMsec;
long cycles = 0;
while(System.currentTimeMillis() < endTime) {
- cycles = installer.getCounters()[JcrInstaller.RUN_LOOP_COUNTER] - initialCycleCount;
+ cycles = installer.getCounterValue(JcrInstaller.RUN_LOOP_COUNTER) - initialCycleCount;
if(cycles >= expectedCycles) {
return;
}
@@ -49,7 +49,7 @@ class MiscUtil {
/** Wait long enough for all changes in content to be processed by JcrInstaller */
static void waitAfterContentChanges(EventHelper eventHelper, JcrInstaller installer) throws Exception {
- final long startCycles = installer.getCounters()[JcrInstaller.RUN_LOOP_COUNTER];
+ final long startCycles = installer.getCounterValue(JcrInstaller.RUN_LOOP_COUNTER);
// First wait for all JCR events to be delivered
eventHelper.waitForEvents(5000L);
@@ -64,7 +64,7 @@ class MiscUtil {
static void waitForInstallerThread(JcrInstaller installer, long timeoutMsec) throws Exception {
final long endTime = System.currentTimeMillis() + timeoutMsec;
while(System.currentTimeMillis() < endTime) {
- if(installer.getCounters()[JcrInstaller.RUN_LOOP_COUNTER] == -1) {
+ if(installer.getCounterValue(JcrInstaller.RUN_LOOP_COUNTER) == -1) {
return;
}
}
Modified: sling/trunk/installer/providers/jcr/src/test/java/org/apache/sling/installer/provider/jcr/impl/ScanningLoopTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/providers/jcr/src/test/java/org/apache/sling/installer/provider/jcr/impl/ScanningLoopTest.java?rev=1771173&r1=1771172&r2=1771173&view=diff
==============================================================================
--- sling/trunk/installer/providers/jcr/src/test/java/org/apache/sling/installer/provider/jcr/impl/ScanningLoopTest.java (original)
+++ sling/trunk/installer/providers/jcr/src/test/java/org/apache/sling/installer/provider/jcr/impl/ScanningLoopTest.java Thu Nov 24 16:09:37 2016
@@ -50,19 +50,19 @@ public class ScanningLoopTest extends Jc
break;
}
- assertEquals("Counter " + label, value, installer.getCounters()[index]);
+ assertEquals("Counter " + label, value, installer.getCounterValue(index));
}
private void assertIdle() throws Exception {
- final long sf = installer.getCounters()[JcrInstaller.SCAN_FOLDERS_COUNTER];
- final long uc = installer.getCounters()[JcrInstaller.UPDATE_FOLDERS_LIST_COUNTER];
+ final long sf = installer.getCounterValue(JcrInstaller.SCAN_FOLDERS_COUNTER);
+ final long uc = installer.getCounterValue(JcrInstaller.UPDATE_FOLDERS_LIST_COUNTER);
Thread.sleep(JcrInstaller.RUN_LOOP_DELAY_MSEC * 2);
assertCounter(JcrInstaller.SCAN_FOLDERS_COUNTER, sf);
assertCounter(JcrInstaller.UPDATE_FOLDERS_LIST_COUNTER, uc);
}
private void assertEvents(String info, long oldCount, int counterIndex) {
- final long newCount = installer.getCounters()[counterIndex];
+ final long newCount = installer.getCounterValue(counterIndex);
assertTrue(info + " (old=" + oldCount + ", new=" + newCount + ")", newCount > oldCount);
}
@@ -88,13 +88,13 @@ public class ScanningLoopTest extends Jc
eventHelper.waitForEvents(TIMEOUT);
assertTrue(installer.scanningIsPaused(installer.getConfiguration(), installer.getSession()));
- final long sf = installer.getCounters()[JcrInstaller.SCAN_FOLDERS_COUNTER];
- final long uc = installer.getCounters()[JcrInstaller.UPDATE_FOLDERS_LIST_COUNTER];
+ final long sf = installer.getCounterValue(JcrInstaller.SCAN_FOLDERS_COUNTER);
+ final long uc = installer.getCounterValue(JcrInstaller.UPDATE_FOLDERS_LIST_COUNTER);
Thread.sleep(JcrInstaller.RUN_LOOP_DELAY_MSEC * 2);
//Counters should not have changed as no scanning being performed
- assertEquals(sf, installer.getCounters()[JcrInstaller.SCAN_FOLDERS_COUNTER]);
+ assertEquals(sf, installer.getCounterValue(JcrInstaller.SCAN_FOLDERS_COUNTER));
//Now lets resume again
testNode.remove();
@@ -116,8 +116,8 @@ public class ScanningLoopTest extends Jc
@Test
public void testAddContentOutside() throws Exception {
- final long sf = installer.getCounters()[JcrInstaller.SCAN_FOLDERS_COUNTER];
- final long uc = installer.getCounters()[JcrInstaller.UPDATE_FOLDERS_LIST_COUNTER];
+ final long sf = installer.getCounterValue(JcrInstaller.SCAN_FOLDERS_COUNTER);
+ final long uc = installer.getCounterValue(JcrInstaller.UPDATE_FOLDERS_LIST_COUNTER);
contentHelper.createOrUpdateFile("/" + System.currentTimeMillis());
eventHelper.waitForEvents(TIMEOUT);
@@ -135,7 +135,7 @@ public class ScanningLoopTest extends Jc
Thread.sleep(JcrInstaller.RUN_LOOP_DELAY_MSEC * 2);
assertIdle();
- final long sf = installer.getCounters()[JcrInstaller.SCAN_FOLDERS_COUNTER];
+ final long sf = installer.getCounterValue(JcrInstaller.SCAN_FOLDERS_COUNTER);
contentHelper.delete(contentHelper.FAKE_RESOURCES[0]);
eventHelper.waitForEvents(TIMEOUT);
Thread.sleep(JcrInstaller.RUN_LOOP_DELAY_MSEC * 2);
@@ -152,7 +152,7 @@ public class ScanningLoopTest extends Jc
Thread.sleep(JcrInstaller.RUN_LOOP_DELAY_MSEC * 2);
assertIdle();
- final long uc = installer.getCounters()[JcrInstaller.UPDATE_FOLDERS_LIST_COUNTER];
+ final long uc = installer.getCounterValue(JcrInstaller.UPDATE_FOLDERS_LIST_COUNTER);
contentHelper.delete("/libs");
eventHelper.waitForEvents(TIMEOUT);
Thread.sleep(JcrInstaller.RUN_LOOP_DELAY_MSEC * 2);
@@ -161,9 +161,4 @@ public class ScanningLoopTest extends Jc
assertIdle();
}
-
- private static String getParentPath(String absPath){
- int pos = absPath.lastIndexOf('/');
- return absPath.substring(0, pos);
- }
}
\ No newline at end of file