You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by st...@apache.org on 2016/11/15 12:38:36 UTC
svn commit: r1769802 [3/3] - in /sling/trunk/bundles/extensions/discovery:
base/
base/src/main/java/org/apache/sling/discovery/base/connectors/announcement/
base/src/test/java/org/apache/sling/discovery/base/its/
base/src/test/java/org/apache/sling/dis...
Modified: sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/voting/VotingHandlerTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/voting/VotingHandlerTest.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/voting/VotingHandlerTest.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/voting/VotingHandlerTest.java Tue Nov 15 12:38:35 2016
@@ -72,7 +72,7 @@ public class VotingHandlerTest {
VotingHandler votingHandler3;
VotingHandler votingHandler4;
VotingHandler votingHandler5;
-
+
String slingId1;
String slingId2;
String slingId3;
@@ -84,7 +84,7 @@ public class VotingHandlerTest {
TestConfig config;
DefaultThreadPool threadPool;
-
+
private void resetRepo() throws Exception {
Session l = RepositoryProvider.instance().getRepository()
.loginAdministrative(null);
@@ -97,7 +97,7 @@ public class VotingHandlerTest {
l.save();
l.logout();
}
-
+
@Before
public void setUp() throws Exception {
slingId1 = UUID.randomUUID().toString();
@@ -105,7 +105,7 @@ public class VotingHandlerTest {
slingId3 = UUID.randomUUID().toString();
slingId4 = UUID.randomUUID().toString();
slingId5 = UUID.randomUUID().toString();
-
+
factory = new DummyResourceResolverFactory();
resetRepo();
config = new TestConfig("/var/discovery/impltesting/");
@@ -117,26 +117,26 @@ public class VotingHandlerTest {
votingHandler3 = VotingHandler.testConstructor(new DummySlingSettingsService(slingId3), factory, config);
votingHandler4 = VotingHandler.testConstructor(new DummySlingSettingsService(slingId4), factory, config);
votingHandler5 = VotingHandler.testConstructor(new DummySlingSettingsService(slingId5), factory, config);
-
- resourceResolver = factory.getAdministrativeResourceResolver(null);
-
+
+ resourceResolver = factory.getServiceResourceResolver(null);
+
ModifiableThreadPoolConfig tpConfig = new ModifiableThreadPoolConfig();
tpConfig.setMinPoolSize(80);
tpConfig.setMaxPoolSize(80);
threadPool = new DefaultThreadPool("testing", tpConfig);
}
-
+
@After
public void tearDown() throws Exception {
if (resourceResolver != null) {
resourceResolver.close();
}
-
+
if (threadPool != null) {
threadPool.shutdown();
}
}
-
+
@Test
public void testActivateDeactivate() throws Exception {
assertFalse((Boolean)PrivateAccessor.getField(votingHandler1, "activated"));
@@ -145,20 +145,20 @@ public class VotingHandlerTest {
votingHandler1.deactivate();
assertFalse((Boolean)PrivateAccessor.getField(votingHandler1, "activated"));
}
-
+
@Test
public void testNoVotings() throws Exception {
votingHandler1.analyzeVotings(resourceResolver);
}
-
+
private VotingView newVoting2(String newViewId, String initiatorId, String... liveInstances) throws Exception {
return VotingView.newVoting(resourceResolver, config, newViewId, initiatorId, new HashSet<String>(Arrays.asList(liveInstances)));
}
-
+
private VotingView newVoting(String initiatorId, String... liveInstances) throws Exception {
return newVoting2(UUID.randomUUID().toString(), initiatorId, liveInstances);
}
-
+
@Test
public void testPromotion() throws Exception {
VotingView voting = newVoting(slingId1, slingId1);
@@ -173,7 +173,7 @@ public class VotingHandlerTest {
assertNotNull(result);
assertEquals(0, result.size());
}
-
+
@Test
public void testVotingYesTwoNodes() throws Exception {
VotingView voting = newVoting(slingId2, slingId1, slingId2);
@@ -272,7 +272,7 @@ public class VotingHandlerTest {
OSGiMock.activate(hh);
HeartbeatHelper.issueClusterLocalHeartbeat(hh);
}
-
+
@Test
public void testTimedout() throws Exception {
config.setHeartbeatTimeout(1);
@@ -288,7 +288,7 @@ public class VotingHandlerTest {
assertNotNull(result);
assertEquals(0, result.size());
}
-
+
private void asyncVote(final String debugInfo, final VotingHandler votingHandler, final List<VotingDetail> votingDetails, final Semaphore ready, final Semaphore go, final Semaphore done, final Set<Throwable> exceptions) throws Exception {
Runnable r = new Runnable() {
@@ -302,7 +302,7 @@ public class VotingHandlerTest {
int retries = 0;
while(true) {
try{
- rr = factory.getAdministrativeResourceResolver(null);
+ rr = factory.getServiceResourceResolver(null);
if (retries == 0) {
logger.info("asyncVote["+debugInfo+"] marking ready...");
ready.release();
@@ -421,24 +421,24 @@ public class VotingHandlerTest {
public void doTestConcurrentVotes(int votingsLoopCnt, int perVotingInnerLoopCnt, VotingHandler... votingHandler) throws Exception {
config.setHeartbeatInterval(999);
config.setHeartbeatTimeout(120);
-
+
for (VotingHandler handler : votingHandler) {
handler.activate(null);
}
-
+
int[] totals = new int[votingHandler.length];
-
+
List<Map<VotingDetail,Integer>> totalDetails = new LinkedList<Map<VotingDetail,Integer>>();
for(int i=0; i<votingHandler.length; i++) {
HashMap<VotingDetail, Integer> d = new HashMap<VotingHandler.VotingDetail, Integer>();
totalDetails.add(d);
}
-
+
String[] slingIds = new String[votingHandler.length];
for(int k=0; k<votingHandler.length; k++) {
slingIds[k] = (String) PrivateAccessor.getField(votingHandler[k], "slingId");
}
-
+
for(int i=0; i<votingsLoopCnt; i++) { // large voting loop
logger.info("testConcurrentVotes: loop i="+i+", votingHandler.cnt="+votingHandler.length);
@@ -455,12 +455,12 @@ public class VotingHandlerTest {
Semaphore done = new Semaphore(0);
Set<Throwable> e = new ConcurrentHashSet<Throwable>();
boolean success = false;
-
+
List<List<VotingDetail>> detailList = new LinkedList<List<VotingDetail>>();
for(int k=0; k<votingHandler.length; k++) {
detailList.add(new LinkedList<VotingHandler.VotingDetail>());
}
-
+
for(int j=0; j<perVotingInnerLoopCnt; j++) {
logger.info("testConcurrentVotes: loop i="+i+", votingHandler.cnt="+votingHandler.length+", j="+j);
for(int k=0; k<votingHandler.length; k++) {
@@ -478,7 +478,7 @@ public class VotingHandlerTest {
if (e.size()!=0) {
fail("Got exceptions: "+e.size()+", first: "+e.iterator().next());
}
-
+
int promotionTotalCount = 0;
int noTotalCount = 0;
for(int k=0; k<votingHandler.length; k++) {
@@ -513,7 +513,7 @@ public class VotingHandlerTest {
sb.append(": ");
sb.append(totals[k]);
}
-
+
logger.info("testConcurrentVotes: promoted "+sb);
int totalPromotion = 0;
for(int k=0; k<votingHandler.length; k++) {
@@ -525,7 +525,7 @@ public class VotingHandlerTest {
// that is the case when the instance that does not initiate the vote comes first, then
// the initiator - in that case the initiator finds an already completed vote - and it
// will then not do any no-votes ..
- // so .. this check is a) not possible and b) just also not necessary, cos
+ // so .. this check is a) not possible and b) just also not necessary, cos
// we already make sure that we at least get 'votingHandler.length-1' no votes in the j-loop
// and that is precise enough. so as unfortuante as it is, we can't make below assertion..
// unless we do more white-box-assertions into analyzeVotings, which is probably not helping
@@ -541,7 +541,7 @@ public class VotingHandlerTest {
totalPromotion += i;
}
}
- assertEquals((int)votingsLoopCnt, totalPromotion);
+ assertEquals(votingsLoopCnt, totalPromotion);
}
}
Modified: sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatTest.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatTest.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatTest.java Tue Nov 15 12:38:35 2016
@@ -35,7 +35,7 @@ import java.util.Set;
import javax.jcr.Property;
import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
+import org.apache.log4j.spi.RootLogger;
import org.apache.sling.api.resource.ModifiableValueMap;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
@@ -60,7 +60,7 @@ import org.slf4j.LoggerFactory;
import junitx.util.PrivateAccessor;
public class HeartbeatTest {
-
+
private final Logger logger = LoggerFactory.getLogger(this.getClass());
class SimpleTopologyEventListener implements TopologyEventListener {
@@ -73,7 +73,7 @@ public class HeartbeatTest {
public SimpleTopologyEventListener(String name) {
this.name = name;
}
-
+
@Override
public void handleTopologyEvent(TopologyEvent event) {
events.add(event);
@@ -107,30 +107,30 @@ public class HeartbeatTest {
lastEvent = event;
eventCount++;
}
-
+
public int getEventCount() {
return eventCount;
}
-
+
public TopologyEvent getLastEvent() {
return lastEvent;
}
-
+
}
-
+
Set<VirtualInstance> instances = new HashSet<VirtualInstance>();
private Level logLevel;
-
+
@Before
public void setup() throws Exception {
- final org.apache.log4j.Logger discoveryLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery");
+ final org.apache.log4j.Logger discoveryLogger = RootLogger.getLogger("org.apache.sling.discovery");
logLevel = discoveryLogger.getLevel();
discoveryLogger.setLevel(Level.TRACE);
}
-
+
@After
public void tearDown() throws Exception {
- final org.apache.log4j.Logger discoveryLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery");
+ final org.apache.log4j.Logger discoveryLogger = RootLogger.getLogger("org.apache.sling.discovery");
discoveryLogger.setLevel(logLevel);
Iterator<VirtualInstance> it = instances.iterator();
@@ -172,7 +172,7 @@ public class HeartbeatTest {
Thread.sleep(10); // wait 10ms to ensure 'slowMachine' has the lowerst leaderElectionId (to become leader)
SimpleTopologyEventListener slowListener = new SimpleTopologyEventListener("slow");
slowMachine.bindTopologyEventListener(slowListener);
-
+
logger.info("doTestPartitioning: creating fastMachine1...");
FullJR2VirtualInstanceBuilder fastBuilder1 = newBuilder();
fastBuilder1.setDebugName("fast1")
@@ -233,7 +233,7 @@ public class HeartbeatTest {
instances.add(fastMachine4);
SimpleTopologyEventListener fastListener4 = new SimpleTopologyEventListener("fast4");
fastMachine4.bindTopologyEventListener(fastListener4);
-
+
logger.info("doTestPartitioning: --------------------------------");
logger.info("doTestPartitioning: letting heartbeats be sent by all instances for a few loops...");
logger.info("doTestPartitioning: --------------------------------");
@@ -278,7 +278,7 @@ public class HeartbeatTest {
}
Thread.sleep(1000);
}
-
+
// at this stage the 4 fast plus the slow instance should all see each other
logger.info("doTestPartitioning: all 4 instances should have agreed on seeing each other");
assertNotNull(fastListener1.getLastEvent());
@@ -301,7 +301,7 @@ public class HeartbeatTest {
assertEquals(TopologyEvent.Type.TOPOLOGY_INIT, slowListener.getLastEvent().getType());
assertEquals(5, slowListener.getLastEvent().getNewView().getInstances().size());
assertTrue(slowListener.getLastEvent().getNewView().getLocalInstance().isLeader());
-
+
// after 12sec the slow instance' heartbeat should have timed out
logger.info("doTestPartitioning: letting slowMachine NOT send any heartbeats for 12sec, only the fast ones do...");
for(int i=0; i<12; i++) {
@@ -326,7 +326,7 @@ public class HeartbeatTest {
Thread.sleep(1000);
}
logger.info("doTestPartitioning: this should now have decoupled slowMachine from the other 4...");
-
+
// so the fast listeners should only see 4 instances remaining
for(int i=0; i<7; i++) {
logger.info("doTestPartitioning: sleeping 2sec...");
@@ -340,7 +340,7 @@ public class HeartbeatTest {
assertEquals(4, fastListener3.getLastEvent().getNewView().getInstances().size());
assertEquals(TopologyEvent.Type.TOPOLOGY_CHANGED, fastListener4.getLastEvent().getType());
assertEquals(4, fastListener4.getLastEvent().getNewView().getInstances().size());
-
+
assertTrue(fastListener1.getLastEvent().getNewView().getLocalInstance().isLeader());
assertFalse(fastListener2.getLastEvent().getNewView().getLocalInstance().isLeader());
assertFalse(fastListener3.getLastEvent().getNewView().getLocalInstance().isLeader());
@@ -412,7 +412,7 @@ public class HeartbeatTest {
}
Thread.sleep(1000);
}
-
+
// now all should be in one cluster again
assertEquals(TopologyEvent.Type.TOPOLOGY_CHANGED, fastListener1.getLastEvent().getType());
assertEquals(5, fastListener1.getLastEvent().getNewView().getInstances().size());
@@ -424,7 +424,7 @@ public class HeartbeatTest {
assertEquals(5, fastListener4.getLastEvent().getNewView().getInstances().size());
assertEquals(TopologyEvent.Type.TOPOLOGY_CHANGED, slowListener.getLastEvent().getType());
assertEquals(5, slowListener.getLastEvent().getNewView().getInstances().size());
-
+
// SLING-5030 part 2 : after rejoin-after-partitioning the slowMachine1 should again be leader
slowMachine.dumpRepo();
assertFalse(slowListener.getLastEvent().getNewView().getLocalInstance().isLeader());
@@ -433,12 +433,12 @@ public class HeartbeatTest {
assertFalse(fastListener3.getLastEvent().getNewView().getLocalInstance().isLeader());
assertFalse(fastListener4.getLastEvent().getNewView().getLocalInstance().isLeader());
}
-
+
/**
* This tests the case where one machine is slow with sending heartbeats
* and should thus trigger the second, fast machine to kick it out of the topology.
* But the slow one should also get a TOPOLOGY_CHANGING but just not get a
- * TOPOLOGY_CHANGED until it finally sends heartbeats again and the voting can
+ * TOPOLOGY_CHANGED until it finally sends heartbeats again and the voting can
* happen again.
*/
@Category(Slow.class) //TODO: takes env 25sec
@@ -480,7 +480,7 @@ public class HeartbeatTest {
fastMachine.bindTopologyEventListener(fastListener);
HeartbeatHandler hhSlow = slowMachine.getHeartbeatHandler();
HeartbeatHandler hhFast = fastMachine.getHeartbeatHandler();
-
+
Thread.sleep(1000);
logger.info("doTestSlowAndFastMachine: no event should have been triggered yet");
assertFalse(fastMachine.getDiscoveryService().getTopology().isCurrent());
@@ -503,14 +503,14 @@ public class HeartbeatTest {
}
logger.info("doTestSlowAndFastMachine: now the two instances should be connected.");
slowMachine.dumpRepo();
-
+
assertEquals(2, slowMachine.getDiscoveryService().getTopology().getInstances().size());
assertEquals(2, fastMachine.getDiscoveryService().getTopology().getInstances().size());
assertEquals(TopologyEvent.Type.TOPOLOGY_INIT, fastListener.getLastEvent().getType());
assertEquals(1, fastListener.getEventCount());
assertEquals(TopologyEvent.Type.TOPOLOGY_INIT, slowListener.getLastEvent().getType());
assertEquals(1, slowListener.getEventCount());
-
+
// now let the slow machine be slow while the fast one updates as expected
logger.info("doTestSlowAndFastMachine: last heartbeat of slowMachine.");
synchronized(lock(hhSlow)) {
@@ -535,10 +535,10 @@ public class HeartbeatTest {
assertEquals(TopologyEvent.Type.TOPOLOGY_CHANGED, fastListener.getLastEvent().getType());
assertEquals(3, fastListener.getEventCount());
assertEquals(1, fastMachine.getDiscoveryService().getTopology().getInstances().size());
-
+
TopologyView topo = slowMachine.getDiscoveryService().getTopology();
assertFalse(topo.isCurrent());
-
+
// after those 6 sec, hhSlow does the check (6sec between heartbeat and check)
logger.info("doTestSlowAndFastMachine: slowMachine is going to do a checkView next - and will detect being decoupled");
hhSlow.doCheckView();
@@ -560,7 +560,7 @@ public class HeartbeatTest {
assertEquals(TopologyEvent.Type.TOPOLOGY_CHANGED, fastListener.getLastEvent().getType());
assertEquals(1, fastMachine.getDiscoveryService().getTopology().getInstances().size());
assertEquals(3, fastListener.getEventCount());
-
+
// make few rounds of heartbeats so that the two instances see each other again
logger.info("doTestSlowAndFastMachine: now let both fast and slow issue heartbeats...");
for(int i=0; i<4; i++) {
@@ -575,7 +575,7 @@ public class HeartbeatTest {
Thread.sleep(1000);
}
logger.info("doTestSlowAndFastMachine: by now the two should have joined");
-
+
// this should have put the two together again
// even after 8 sec the slow lsitener did not send a TOPOLOGY_CHANGED yet
assertEquals(TopologyEvent.Type.TOPOLOGY_CHANGED, fastListener.getLastEvent().getType());
@@ -587,7 +587,7 @@ public class HeartbeatTest {
assertEquals(2, slowMachine.getDiscoveryService().getTopology().getInstances().size());
assertEquals(3, slowListener.getEventCount());
}
-
+
private Object lock(HeartbeatHandler heartbeatHandler) throws NoSuchFieldException {
//TODO: refactor HeartbeatHandler to provide such a synchronized method
// rather having the test rely on this
@@ -611,7 +611,7 @@ public class HeartbeatTest {
instances.add(slowMachine1);
SimpleTopologyEventListener slowListener1 = new SimpleTopologyEventListener("slow1");
slowMachine1.bindTopologyEventListener(slowListener1);
-
+
logger.info("testVotingLoop: creating slowMachine2...");
FullJR2VirtualInstanceBuilder slowBuilder2 = newBuilder();
slowBuilder2.setDebugName("slow2")
@@ -623,7 +623,7 @@ public class HeartbeatTest {
instances.add(slowMachine2);
SimpleTopologyEventListener slowListener2 = new SimpleTopologyEventListener("slow2");
slowMachine2.bindTopologyEventListener(slowListener2);
-
+
logger.info("testVotingLoop: creating fastMachine...");
FullJR2VirtualInstanceBuilder fastBuilder = newBuilder();
fastBuilder.setDebugName("fast")
@@ -638,7 +638,7 @@ public class HeartbeatTest {
HeartbeatHandler hhSlow1 = slowMachine1.getHeartbeatHandler();
HeartbeatHandler hhSlow2 = slowMachine2.getHeartbeatHandler();
HeartbeatHandler hhFast = fastMachine.getHeartbeatHandler();
-
+
Thread.sleep(1000);
logger.info("testVotingLoop: after some initial 1sec sleep no event should yet have been sent");
assertFalse(fastMachine.getDiscoveryService().getTopology().isCurrent());
@@ -651,7 +651,7 @@ public class HeartbeatTest {
// prevent the slow machine from voting
logger.info("testVotingLoop: stopping voting of slowMachine1...");
slowMachine1.stopVoting();
-
+
// now let all issue a heartbeat
logger.info("testVotingLoop: letting slow1, slow2 and fast all issue 1 heartbeat");
hhSlow1.issueHeartbeat();
@@ -663,7 +663,7 @@ public class HeartbeatTest {
// that will cause a voting loop
logger.info("testVotingLoop: let the fast one do a checkView, thus initiate a voting");
hhFast.doCheckView();
-
+
Calendar previousVotedAt = null;
for(int i=0; i<5; i++) {
logger.info("testVotingLoop: sleeping 1sec...");
@@ -672,9 +672,9 @@ public class HeartbeatTest {
// now check the ongoing votings
ResourceResolverFactory factory = fastMachine.getResourceResolverFactory();
ResourceResolver resourceResolver = factory
- .getAdministrativeResourceResolver(null);
+ .getServiceResourceResolver(null);
try{
- List<VotingView> ongoingVotings =
+ List<VotingView> ongoingVotings =
VotingHelper.listOpenNonWinningVotings(resourceResolver, fastMachine.getFullConfig());
assertNotNull(ongoingVotings);
assertEquals(1, ongoingVotings.size());
@@ -697,7 +697,7 @@ public class HeartbeatTest {
fail("Exception: "+e);
}
}
-
+
}
-
+
}
Modified: sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstance.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstance.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstance.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstance.java Tue Nov 15 12:38:35 2016
@@ -39,9 +39,9 @@ public class FullJR2VirtualInstance exte
public void stopVoting() {
fullBuilder.stopVoting();
}
-
+
public void analyzeVotings() throws Exception {
- ResourceResolver resourceResolver = getResourceResolverFactory().getAdministrativeResourceResolver(null);
+ ResourceResolver resourceResolver = getResourceResolverFactory().getServiceResourceResolver(null);
fullBuilder.getVotingHandler().analyzeVotings(resourceResolver);
resourceResolver.close();
}
Modified: sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstanceBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstanceBuilder.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstanceBuilder.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstanceBuilder.java Tue Nov 15 12:38:35 2016
@@ -70,17 +70,17 @@ public class FullJR2VirtualInstanceBuild
this.factory = dummyFactory;
return this;
}
-
+
@Override
public VirtualInstanceBuilder useRepositoryOf(VirtualInstanceBuilder other) throws Exception {
super.useRepositoryOf(other);
DummyResourceResolverFactory dummyFactory = new DummyResourceResolverFactory();
DummyResourceResolverFactory originalFactory = (DummyResourceResolverFactory) this.factory;
// force repository to be created now..
- originalFactory.getAdministrativeResourceResolver(null);
+ originalFactory.getServiceResourceResolver(null);
dummyFactory.setSlingRepository(originalFactory.getSlingRepository());
dummyFactory.setArtificialDelay(getDelay());
- this.factory = dummyFactory;
+ this.factory = dummyFactory;
return this;
}
@@ -95,36 +95,36 @@ public class FullJR2VirtualInstanceBuild
}
return this;
}
-
+
TestConfig getConfig() {
if (config==null) {
config = createConfig();
}
return config;
}
-
+
private TestConfig createConfig() {
TestConfig c = new TestConfig(path);
return c;
}
-
+
@Override
public ModifiableTestBaseConfig getConnectorConfig() {
return getConfig();
}
-
+
@Override
protected ViewChecker createViewChecker() throws Exception {
return HeartbeatHandler.testConstructor(getSlingSettingsService(), getResourceResolverFactory(), getAnnouncementRegistry(), getConnectorRegistry(), getConfig(), getScheduler(), getVotingHandler());
}
-
+
private SyncTokenService getSyncTokenService() throws Exception {
if (syncTokenService == null) {
syncTokenService = createSyncTokenService();
}
return syncTokenService;
}
-
+
private SyncTokenService createSyncTokenService() {
return SyncTokenService.testConstructorAndActivate(getConfig(), getResourceResolverFactory(), getSlingSettingsService());
}
@@ -133,7 +133,7 @@ public class FullJR2VirtualInstanceBuild
protected BaseDiscoveryService createDiscoveryService() throws Exception {
return DiscoveryServiceImpl.testConstructor(getResourceResolverFactory(), getAnnouncementRegistry(), getConnectorRegistry(), (ClusterViewServiceImpl) getClusterViewService(), getHeartbeatHandler(), getSlingSettingsService(), getScheduler(), getConfig(), getSyncTokenService());
}
-
+
@Override
protected ClusterViewService createClusterViewService() {
return ClusterViewServiceImpl.testConstructor(getSlingSettingsService(), getResourceResolverFactory(), getConfig());
@@ -145,7 +145,7 @@ public class FullJR2VirtualInstanceBuild
}
return (HeartbeatHandler) getViewChecker();
}
-
+
@Override
public Object[] getAdditionalServices(VirtualInstance instance) throws Exception {
if (additionalServices==null) {
@@ -153,7 +153,7 @@ public class FullJR2VirtualInstanceBuild
}
return additionalServices;
}
-
+
VotingHandler getVotingHandler() throws Exception {
if (votingHandler == null) {
votingHandler = createVotingHandler();
@@ -167,12 +167,12 @@ public class FullJR2VirtualInstanceBuild
private Object[] createAdditionalServices(VirtualInstance instance) throws Exception {
Object[] additionals = new Object[1];
-
+
additionals[0] = getVotingHandler();
-
+
observationListener = new VotingEventListener(instance, votingHandler, getSlingId());
ResourceResolver resourceResolver = getResourceResolverFactory()
- .getAdministrativeResourceResolver(null);
+ .getServiceResourceResolver(null);
Session session = resourceResolver.adaptTo(Session.class);
observationManager = session.getWorkspace()
.getObservationManager();
@@ -186,7 +186,7 @@ public class FullJR2VirtualInstanceBuild
return additionals;
}
-
+
void stopVoting() {
if (observationListener!=null) {
logger.info("stopVoting: stopping voting of slingId="+getSlingId());
@@ -210,7 +210,7 @@ public class FullJR2VirtualInstanceBuild
public FullJR2VirtualInstance fullBuild() throws Exception {
return (FullJR2VirtualInstance) build();
}
-
+
@Override
public VirtualInstance build() throws Exception {
if (path==null) {
@@ -246,7 +246,7 @@ public class FullJR2VirtualInstanceBuild
}
super.stop();
}
-
+
@Override
public void assertEstablishedView() {
super.assertEstablishedView();
@@ -260,7 +260,7 @@ public class FullJR2VirtualInstanceBuild
}
};
}
-
+
@Override
protected void resetRepo() throws Exception {
logger.info("resetRepo: start, logging in");
@@ -283,5 +283,5 @@ public class FullJR2VirtualInstanceBuild
}
}
-
+
}
Modified: sling/trunk/bundles/extensions/discovery/oak/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/oak/pom.xml?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/oak/pom.xml (original)
+++ sling/trunk/bundles/extensions/discovery/oak/pom.xml Tue Nov 15 12:38:35 2016
@@ -167,7 +167,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.discovery.base</artifactId>
- <version>1.1.4</version>
+ <version>1.1.5-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<!-- besides including discovery.base' normal jar above,
@@ -176,7 +176,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.discovery.base</artifactId>
- <version>1.1.4</version>
+ <version>1.1.5-SNAPSHOT</version>
<scope>test</scope>
<type>test-jar</type>
</dependency>
Modified: sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/OakDiscoveryService.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/OakDiscoveryService.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/OakDiscoveryService.java (original)
+++ sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/OakDiscoveryService.java Tue Nov 15 12:38:35 2016
@@ -93,7 +93,7 @@ public class OakDiscoveryService extends
@Reference(cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC, referenceInterface = TopologyEventListener.class)
private TopologyEventListener[] eventListeners = new TopologyEventListener[0];
-
+
/**
* All property providers.
*/
@@ -132,7 +132,7 @@ public class OakDiscoveryService extends
@Reference
private IdMapService idMapService;
-
+
@Reference
private OakBacklogClusterSyncService oakBacklogClusterSyncService;
@@ -146,15 +146,16 @@ public class OakDiscoveryService extends
private ViewStateManager viewStateManager;
- private final ReentrantLock viewStateManagerLock = new ReentrantLock();
-
+ private final ReentrantLock viewStateManagerLock = new ReentrantLock();
+
private final List<TopologyEventListener> pendingListeners = new LinkedList<TopologyEventListener>();
-
+
private TopologyEventListener changePropagationListener = new TopologyEventListener() {
+ @Override
public void handleTopologyEvent(TopologyEvent event) {
OakViewChecker checker = oakViewChecker;
- if (activated && checker != null
+ if (activated && checker != null
&& (event.getType() == Type.TOPOLOGY_CHANGED || event.getType() == Type.PROPERTIES_CHANGED)) {
logger.info("changePropagationListener.handleTopologyEvent: topology changed - propagate through connectors");
checker.triggerAsyncConnectorPing();
@@ -188,10 +189,11 @@ public class OakDiscoveryService extends
return discoService;
}
+ @Override
protected void handleIsolatedFromTopology() {
if (oakViewChecker!=null) {
// SLING-5030 part 2: when we detect being isolated we should
- // step at the end of the leader-election queue and
+ // step at the end of the leader-election queue and
// that can be achieved by resetting the leaderElectionId
// (which will in turn take effect on the next round of
// voting, or also double-checked when the local instance votes)
@@ -206,7 +208,7 @@ public class OakDiscoveryService extends
}
}
}
-
+
/**
* Activate this service
*/
@@ -232,7 +234,7 @@ public class OakDiscoveryService extends
consistencyService = new ClusterSyncServiceChain(oakBacklogClusterSyncService, syncTokenService);
} else {
consistencyService = oakBacklogClusterSyncService;
-
+
}
viewStateManager = ViewStateManagerFactory.newViewStateManager(viewStateManagerLock, consistencyService);
@@ -249,7 +251,7 @@ public class OakDiscoveryService extends
// the first TOPOLOGY_INIT and afterwards
DefaultClusterView isolatedCluster = new DefaultClusterView(isolatedClusterId);
Map<String, String> emptyProperties = new HashMap<String, String>();
- DefaultInstanceDescription isolatedInstance =
+ DefaultInstanceDescription isolatedInstance =
new DefaultInstanceDescription(isolatedCluster, true, true, slingId, emptyProperties);
Collection<InstanceDescription> col = new ArrayList<InstanceDescription>();
col.add(isolatedInstance);
@@ -282,14 +284,14 @@ public class OakDiscoveryService extends
}
activated = true;
setOldView(newView);
-
+
// in case bind got called before activate we now have pending listeners,
// bind them to the viewstatemanager too
for (TopologyEventListener listener : pendingListeners) {
viewStateManager.bind(listener);
}
pendingListeners.clear();
-
+
viewStateManager.bind(changePropagationListener);
} finally {
if (viewStateManagerLock!=null) {
@@ -311,7 +313,7 @@ public class OakDiscoveryService extends
}
}
}
-
+
logger.debug("OakDiscoveryService activated.");
}
@@ -326,7 +328,7 @@ public class OakDiscoveryService extends
viewStateManager.unbind(changePropagationListener);
viewStateManager.handleDeactivated();
-
+
activated = false;
} finally {
if (viewStateManagerLock!=null) {
@@ -485,7 +487,7 @@ public class OakDiscoveryService extends
ResourceResolver resourceResolver = null;
try {
resourceResolver = rrf
- .getAdministrativeResourceResolver(null);
+ .getServiceResourceResolver(null);
Resource myInstance = ResourceHelper
.getOrCreateResource(
@@ -619,6 +621,7 @@ public class OakDiscoveryService extends
/**
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
+ @Override
public int compareTo(final ProviderInfo o) {
// Sort by rank in ascending order.
if (this.ranking < o.ranking) {
@@ -680,15 +683,17 @@ public class OakDiscoveryService extends
viewStateManager.handleChanging();
}
+ @Override
protected ClusterViewService getClusterViewService() {
return clusterViewService;
}
-
+
+ @Override
protected AnnouncementRegistry getAnnouncementRegistry() {
return announcementRegistry;
}
- /** for testing only
+ /** for testing only
* @return */
public ViewStateManager getViewStateManager() {
return viewStateManager;
Modified: sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/TopologyWebConsolePlugin.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/TopologyWebConsolePlugin.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/TopologyWebConsolePlugin.java (original)
+++ sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/TopologyWebConsolePlugin.java Tue Nov 15 12:38:35 2016
@@ -117,15 +117,15 @@ public class TopologyWebConsolePlugin ex
private OakBacklogClusterSyncService clusterSyncService;
private TopologyView currentView;
-
+
private List<String> discoveryLiteHistory = new LinkedList<String>();
- /**
+ /**
* keeps hold of the last DiscoveryLiteDescriptor that was added
* to the discoveryLiteHistory - in order to de-duplicate as we go
*/
private DiscoveryLiteDescriptor lastDiscoveryLiteDescriptor = null;
-
+
@Override
public String getLabel() {
return LABEL;
@@ -190,6 +190,7 @@ public class TopologyWebConsolePlugin ex
tv.findInstances(new InstanceFilter() {
+ @Override
public boolean accept(InstanceDescription instance) {
String slingId = instance.getSlingId();
if (logger.isDebugEnabled()) {
@@ -230,7 +231,7 @@ public class TopologyWebConsolePlugin ex
}
protected ResourceResolver getResourceResolver() throws LoginException {
- return resourceResolverFactory.getAdministrativeResourceResolver(null);
+ return resourceResolverFactory.getServiceResourceResolver(null);
}
/**
@@ -289,7 +290,7 @@ public class TopologyWebConsolePlugin ex
listIncomingTopologyConnectors(pw);
listOutgoingTopologyConnectors(pw);
pw.println("<br/>");
-
+
pw.println("<p class=\"statline ui-state-highlight\">Topology Change History</p>");
pw.println("<pre>");
for (Iterator<String> it = topologyLog
@@ -500,7 +501,7 @@ public class TopologyWebConsolePlugin ex
pw.println("</tbody>");
pw.println("</table>");
}
-
+
private String beautifiedDueTime(long secondsDue) {
if (secondsDue<-1) {
return "overdue";
@@ -586,13 +587,14 @@ public class TopologyWebConsolePlugin ex
/**
* keep a truncated history of the log events for information purpose (to be shown in the webconsole)
*/
+ @Override
public void handleTopologyEvent(final TopologyEvent event) {
if (event.getType() == Type.PROPERTIES_CHANGED) {
this.currentView = event.getNewView();
StringBuilder sb = new StringBuilder();
InstancesDiff instanceDiff = new InstancesDiff(event.getOldView(), event.getNewView());
-
+
// there shouldn't be any instances added, but for paranoia reason:
Collection<InstanceDescription> added = instanceDiff.added().get();
if (!added.isEmpty()) {
@@ -603,7 +605,7 @@ public class TopologyWebConsolePlugin ex
}
sb.append(".");
}
-
+
// there shouldn't be any instances removed as well, but again for paranoia reason:
Collection<InstanceDescription> removed = instanceDiff.removed().get();
if (!removed.isEmpty()) {
@@ -614,7 +616,7 @@ public class TopologyWebConsolePlugin ex
}
sb.append(".");
}
-
+
Set<InstanceDescription> newInstances = event.getNewView()
.getInstances();
for (Iterator<InstanceDescription> it = newInstances.iterator(); it
@@ -641,7 +643,7 @@ public class TopologyWebConsolePlugin ex
sb.append(", ");
}
sb.append("on instance "
- + newInstanceDescription.getSlingId() + (newInstanceDescription.isLeader() ? " [isLeader]" : "")
+ + newInstanceDescription.getSlingId() + (newInstanceDescription.isLeader() ? " [isLeader]" : "")
+ ": " + diff + ". ");
}
}
@@ -710,7 +712,7 @@ public class TopologyWebConsolePlugin ex
}
}
}
-
+
addEventLog(
event.getType(),
"old view: " + shortViewInfo(event.getOldView())
@@ -730,6 +732,7 @@ public class TopologyWebConsolePlugin ex
Set<InstanceDescription> foundInstances = view
.findInstances(new InstanceFilter() {
+ @Override
public boolean accept(InstanceDescription instance) {
return instance.getSlingId().equals(slingId);
}
@@ -768,10 +771,10 @@ public class TopologyWebConsolePlugin ex
ResourceResolver resourceResolver = null;
try{
resourceResolver = getResourceResolver();
- DiscoveryLiteDescriptor descriptor =
+ DiscoveryLiteDescriptor descriptor =
DiscoveryLiteDescriptor.getDescriptorFrom(resourceResolver);
- if (lastDiscoveryLiteDescriptor!=null &&
+ if (lastDiscoveryLiteDescriptor!=null &&
descriptor.getDescriptorStr().equals(lastDiscoveryLiteDescriptor.getDescriptorStr())) {
// de-duplication - then there's nothing to update
return;
@@ -789,7 +792,7 @@ public class TopologyWebConsolePlugin ex
resourceResolver.close();
}
}
-
+
}
/**
Modified: sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/cluster/OakClusterViewService.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/cluster/OakClusterViewService.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/cluster/OakClusterViewService.java (original)
+++ sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/cluster/OakClusterViewService.java Tue Nov 15 12:38:35 2016
@@ -73,13 +73,13 @@ public class OakClusterViewService imple
@Reference
private Config config;
-
+
@Reference
private IdMapService idMapService;
-
+
/** the last sequence number read from the oak discovery-lite descriptor **/
private long lastSeqNum = -1;
-
+
public static OakClusterViewService testConstructor(SlingSettingsService settingsService,
ResourceResolverFactory resourceResolverFactory,
IdMapService idMapService,
@@ -91,7 +91,8 @@ public class OakClusterViewService imple
service.idMapService = idMapService;
return service;
}
-
+
+ @Override
public String getSlingId() {
if (settingsService==null) {
return null;
@@ -100,15 +101,16 @@ public class OakClusterViewService imple
}
protected ResourceResolver getResourceResolver() throws LoginException {
- return resourceResolverFactory.getAdministrativeResourceResolver(null);
+ return resourceResolverFactory.getServiceResourceResolver(null);
}
+ @Override
public LocalClusterView getLocalClusterView() throws UndefinedClusterViewException {
logger.trace("getLocalClusterView: start");
ResourceResolver resourceResolver = null;
try{
resourceResolver = getResourceResolver();
- DiscoveryLiteDescriptor descriptor =
+ DiscoveryLiteDescriptor descriptor =
DiscoveryLiteDescriptor.getDescriptorFrom(resourceResolver);
if (lastSeqNum!=descriptor.getSeqNum()) {
logger.info("getLocalClusterView: sequence number change detected - clearing idmap cache");
@@ -163,7 +165,7 @@ public class OakClusterViewService imple
for (Integer integer : activeIds) {
activeIdsList.add(integer);
}
-
+
// step 1: sort activeIds by their leaderElectionId
// serves two purposes: pos[0] is then leader
// and the rest are properly sorted within the cluster
@@ -179,7 +181,7 @@ public class OakClusterViewService imple
slingId);
leaderElectionIds.put(id, leaderElectionId);
}
-
+
Collections.sort(activeIdsList, new Comparator<Integer>() {
@Override
@@ -188,7 +190,7 @@ public class OakClusterViewService imple
.compareTo(leaderElectionIds.get(arg1));
}
});
-
+
for(int i=0; i<activeIdsList.size(); i++) {
int id = activeIdsList.get(i);
boolean isLeader = i==0; // thx to sorting above [0] is leader indeed
@@ -212,7 +214,7 @@ public class OakClusterViewService imple
+ "This is normal at startup. At other times is pseudo-network-partitioning is an indicator for repository/network-delays or clocks-out-of-sync (SLING-3432). "
+ "(increasing the heartbeatTimeout can help as a workaround too) "
+ "The local instance will stay in TOPOLOGY_CHANGING or pre _INIT mode until a new vote was successful.");
- throw new UndefinedClusterViewException(Reason.ISOLATED_FROM_TOPOLOGY,
+ throw new UndefinedClusterViewException(Reason.ISOLATED_FROM_TOPOLOGY,
"established view does not include local instance - isolated");
}
}
@@ -296,7 +298,7 @@ public class OakClusterViewService imple
String result = resourceMap.get("leaderElectionId", String.class);
return result;
}
-
+
private Map<String, String> readProperties(String slingId, ResourceResolver resourceResolver) {
Resource res = resourceResolver.getResource(
config.getClusterInstancesPath() + "/"
Modified: sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/pinger/OakViewChecker.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/pinger/OakViewChecker.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/pinger/OakViewChecker.java (original)
+++ sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/pinger/OakViewChecker.java Tue Nov 15 12:38:35 2016
@@ -47,7 +47,7 @@ import org.osgi.service.http.HttpService
/**
* The OakViewChecker is taking care of checking the oak discovery-lite
* descriptor when checking the local cluster view and passing that
- * on to the ViewStateManager which will then detect whether there was
+ * on to the ViewStateManager which will then detect whether there was
* any change or not. Unlike discovery.impl's HeartbeatHandler this one
* does not store any heartbeats in the repository anymore.
* <p>
@@ -105,32 +105,32 @@ public class OakViewChecker extends Base
protected AnnouncementRegistry getAnnouncementRegistry() {
return announcementRegistry;
}
-
+
@Override
protected BaseConfig getConnectorConfig() {
return config;
}
-
+
@Override
protected ConnectorRegistry getConnectorRegistry() {
return connectorRegistry;
}
-
+
@Override
protected ResourceResolverFactory getResourceResolverFactory() {
return resourceResolverFactory;
}
-
+
@Override
protected Scheduler getScheduler() {
return scheduler;
}
-
+
@Override
protected SlingSettingsService getSlingSettingsService() {
return slingSettingsService;
}
-
+
@Override
protected void doActivate() {
// on activate the resetLeaderElectionId is set to true to ensure that
@@ -141,10 +141,10 @@ public class OakViewChecker extends Base
runtimeId = UUID.randomUUID().toString();
logger.info("doActivate: activated with runtimeId: {}, slingId: {}", runtimeId, slingId);
-
+
resetLeaderElectionId();
}
-
+
@Override
protected void deactivate() {
super.deactivate();
@@ -175,7 +175,7 @@ public class OakViewChecker extends Base
} catch (Exception e) {
logger.error("activate: Could not start heartbeat runner: " + e, e);
}
-
+
// start the (more frequent) periodic job that checks
// the discoveryLite descriptor - that can be more frequent
// since it is only reading an oak repository descriptor
@@ -192,13 +192,13 @@ public class OakViewChecker extends Base
public void run() {
discoveryLiteCheck();
}
-
+
});
} catch (Exception e) {
logger.error("activate: Could not start heartbeat runner: " + e, e);
}
}
-
+
private void discoveryLiteCheck() {
logger.debug("discoveryLiteCheck: start. [for slingId="+slingId+"]");
synchronized(lock) {
@@ -225,7 +225,7 @@ public class OakViewChecker extends Base
logger.error("getResourceResolver: resourceResolverFactory is null!");
return null;
}
- return resourceResolverFactory.getAdministrativeResourceResolver(null);
+ return resourceResolverFactory.getServiceResourceResolver(null);
}
/** Calcualte the local cluster instance path **/
@@ -234,7 +234,7 @@ public class OakViewChecker extends Base
}
/**
- * Hook that will cause a reset of the leaderElectionId
+ * Hook that will cause a reset of the leaderElectionId
* on next invocation of issueClusterLocalHeartbeat.
* @return true if the leaderElectionId was reset - false if that was not
* necessary as that happened earlier already and it has not propagated
@@ -269,7 +269,7 @@ public class OakViewChecker extends Base
resourceMap.put("leaderElectionId", newLeaderElectionId);
resourceMap.put("leaderElectionIdCreatedAt", leaderElectionCreatedAt);
- logger.info("resetLeaderElectionId: storing my runtimeId: {}, endpoints: {}, sling home path: {}, new leaderElectionId: {}, created at: {}",
+ logger.info("resetLeaderElectionId: storing my runtimeId: {}, endpoints: {}, sling home path: {}, new leaderElectionId: {}, created at: {}",
new Object[]{runtimeId, endpointsAsString, slingHomePath, newLeaderElectionId, leaderElectionCreatedAt});
resourceResolver.commit();
} catch (LoginException e) {
@@ -311,6 +311,7 @@ public class OakViewChecker extends Base
discoveryService.checkForTopologyChange();
}
+ @Override
protected void updateProperties() {
if (discoveryService == null) {
// SLING-6065: it's legitimate that updateProperties()
Modified: sling/trunk/bundles/extensions/discovery/oak/src/test/java/org/apache/sling/discovery/oak/OakDiscoveryServiceTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/oak/src/test/java/org/apache/sling/discovery/oak/OakDiscoveryServiceTest.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/oak/src/test/java/org/apache/sling/discovery/oak/OakDiscoveryServiceTest.java (original)
+++ sling/trunk/bundles/extensions/discovery/oak/src/test/java/org/apache/sling/discovery/oak/OakDiscoveryServiceTest.java Tue Nov 15 12:38:35 2016
@@ -44,7 +44,7 @@ public class OakDiscoveryServiceTest {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
public final class SimpleCommonsConfig implements DiscoveryLiteConfig {
-
+
private long bgIntervalMillis;
private long bgTimeoutMillis;
@@ -52,7 +52,7 @@ public class OakDiscoveryServiceTest {
this.bgIntervalMillis = bgIntervalMillis;
this.bgTimeoutMillis = bgTimeoutMillis;
}
-
+
@Override
public String getSyncTokenPath() {
return "/var/synctokens";
@@ -77,7 +77,7 @@ public class OakDiscoveryServiceTest {
@Test
public void testBindBeforeActivate() throws Exception {
- OakVirtualInstanceBuilder builder =
+ OakVirtualInstanceBuilder builder =
(OakVirtualInstanceBuilder) new OakVirtualInstanceBuilder()
.setDebugName("test")
.newRepository("/foo/bar", true);
@@ -87,7 +87,7 @@ public class OakDiscoveryServiceTest {
// make sure the discovery-lite descriptor is marked as not final
// such that the view is not already set before we want it to be
discoBuilder.setFinal(false);
- DescriptorHelper.setDiscoveryLiteDescriptor(builder.getResourceResolverFactory(),
+ DescriptorHelper.setDiscoveryLiteDescriptor(builder.getResourceResolverFactory(),
discoBuilder);
IdMapService idMapService = IdMapService.testConstructor(new SimpleCommonsConfig(1000, -1), new DummySlingSettingsService(slingId), builder.getResourceResolverFactory());
assertTrue(idMapService.waitForInit(2000));
@@ -109,7 +109,7 @@ public class OakDiscoveryServiceTest {
// will actually detect a valid new, different view and send out an event -
// exactly as we want to
discoBuilder.setFinal(true);
- DescriptorHelper.setDiscoveryLiteDescriptor(builder.getResourceResolverFactory(),
+ DescriptorHelper.setDiscoveryLiteDescriptor(builder.getResourceResolverFactory(),
discoBuilder);
discoveryService.checkForTopologyChange();
assertEquals(0, discoveryService.getViewStateManager().waitForAsyncEvents(2000));
@@ -120,18 +120,18 @@ public class OakDiscoveryServiceTest {
assertEquals(0, discoveryService.getViewStateManager().waitForAsyncEvents(2000));
assertEquals(2, listener.countEvents()); // should now have gotten an INIT too
}
-
+
@Test
public void testDescriptorSeqNumChange() throws Exception {
logger.info("testDescriptorSeqNumChange: start");
- OakVirtualInstanceBuilder builder1 =
+ OakVirtualInstanceBuilder builder1 =
(OakVirtualInstanceBuilder) new OakVirtualInstanceBuilder()
.setDebugName("instance1")
.newRepository("/foo/barry/foo/", true)
.setConnectorPingInterval(999)
.setConnectorPingTimeout(999);
VirtualInstance instance1 = builder1.build();
- OakVirtualInstanceBuilder builder2 =
+ OakVirtualInstanceBuilder builder2 =
(OakVirtualInstanceBuilder) new OakVirtualInstanceBuilder()
.setDebugName("instance2")
.useRepositoryOf(instance1)
@@ -139,15 +139,15 @@ public class OakDiscoveryServiceTest {
.setConnectorPingTimeout(999);
VirtualInstance instance2 = builder2.build();
logger.info("testDescriptorSeqNumChange: created both instances, binding listener...");
-
+
DummyListener listener = new DummyListener();
OakDiscoveryService discoveryService = (OakDiscoveryService) instance1.getDiscoveryService();
discoveryService.bindTopologyEventListener(listener);
-
+
logger.info("testDescriptorSeqNumChange: waiting 2sec, listener should not get anything yet");
assertEquals(0, discoveryService.getViewStateManager().waitForAsyncEvents(2000));
assertEquals(0, listener.countEvents());
-
+
logger.info("testDescriptorSeqNumChange: issuing 2 heartbeats with each instance should let the topology get established");
instance1.heartbeatsAndCheckView();
instance2.heartbeatsAndCheckView();
@@ -157,21 +157,21 @@ public class OakDiscoveryServiceTest {
logger.info("testDescriptorSeqNumChange: listener should get an event within 2sec from now at latest");
assertEquals(0, discoveryService.getViewStateManager().waitForAsyncEvents(2000));
assertEquals(1, listener.countEvents());
-
+
ResourceResolverFactory factory = instance1.getResourceResolverFactory();
- ResourceResolver resolver = factory.getAdministrativeResourceResolver(null);
-
+ ResourceResolver resolver = factory.getServiceResourceResolver(null);
+
instance1.heartbeatsAndCheckView();
assertEquals(0, discoveryService.getViewStateManager().waitForAsyncEvents(2000));
assertEquals(1, listener.countEvents());
-
+
// increment the seqNum by 2 - simulating a coming and going instance
// while we were sleeping
SimulatedLeaseCollection c = builder1.getSimulatedLeaseCollection();
c.incSeqNum(2);
logger.info("testDescriptorSeqNumChange: incremented seqnum by 2 - issuing another heartbeat should trigger a topology change");
instance1.heartbeatsAndCheckView();
-
+
// due to the nature of the syncService/minEventDelay we now explicitly first sleep 2sec before waiting for async events for another 2sec
logger.info("testDescriptorSeqNumChange: sleeping 2sec for topology change to happen");
Thread.sleep(2000);
Modified: sling/trunk/bundles/extensions/discovery/oak/src/test/java/org/apache/sling/discovery/oak/its/OakDiscoveryServiceTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/oak/src/test/java/org/apache/sling/discovery/oak/its/OakDiscoveryServiceTest.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/oak/src/test/java/org/apache/sling/discovery/oak/its/OakDiscoveryServiceTest.java (original)
+++ sling/trunk/bundles/extensions/discovery/oak/src/test/java/org/apache/sling/discovery/oak/its/OakDiscoveryServiceTest.java Tue Nov 15 12:38:35 2016
@@ -23,7 +23,7 @@ import static org.junit.Assert.assertFal
import static org.junit.Assert.assertTrue;
import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
+import org.apache.log4j.spi.RootLogger;
import org.apache.sling.discovery.TopologyEvent.Type;
import org.apache.sling.discovery.TopologyView;
import org.apache.sling.discovery.base.its.AbstractDiscoveryServiceTest;
@@ -48,20 +48,22 @@ public class OakDiscoveryServiceTest ext
private VirtualInstance instance2;
+ @Override
public OakVirtualInstanceBuilder newBuilder() {
return new OakVirtualInstanceBuilder();
}
+ @Override
@Before
public void setUp() throws Exception {
- final org.apache.log4j.Logger discoveryLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery");
+ final org.apache.log4j.Logger discoveryLogger = RootLogger.getLogger("org.apache.sling.discovery");
logLevel = discoveryLogger.getLevel();
- discoveryLogger.setLevel(Level.INFO);
+ discoveryLogger.setLevel(Level.INFO);
}
-
+
@After
public void teartDown() throws Throwable {
- final org.apache.log4j.Logger discoveryLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery");
+ final org.apache.log4j.Logger discoveryLogger = RootLogger.getLogger("org.apache.sling.discovery");
discoveryLogger.setLevel(logLevel);
if (instance1!=null) {
instance1.stopViewChecker();
@@ -74,7 +76,7 @@ public class OakDiscoveryServiceTest ext
instance2 = null;
}
}
-
+
/**
* Tests whether the not-current view returned by getTopology()
* matches what listeners get in TOPOLOGY_CHANGING - it should
@@ -82,7 +84,7 @@ public class OakDiscoveryServiceTest ext
*/
@Test
public void testOldView() throws Throwable {
- final org.apache.log4j.Logger discoveryLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery");
+ final org.apache.log4j.Logger discoveryLogger = RootLogger.getLogger("org.apache.sling.discovery");
discoveryLogger.setLevel(Level.INFO); // info should do
OakVirtualInstanceBuilder builder = newBuilder();
builder.setDebugName("firstInstanceA")
@@ -113,7 +115,7 @@ public class OakDiscoveryServiceTest ext
t1 = instance1.getDiscoveryService().getTopology();
assertTrue(t1.isCurrent()); // current it should now be
assertEquals(1, t1.getInstances().size()); // and it must contain the local instance
-
+
logger.info("testOldView: creating instance2");
builder.getSimulatedLeaseCollection().setFinal(false);
l1.addExpected(Type.TOPOLOGY_CHANGING);
@@ -125,7 +127,7 @@ public class OakDiscoveryServiceTest ext
instance2 = builder2.build();
instance2.stopViewChecker();
// instance2.stopVoting();
-
+
logger.info("testOldView: instance2 created, now issuing one heartbeat with instance2 first, so that instance1 can take note of it");
instance2.getViewChecker().checkView();
OakDiscoveryService oakDisco1 = (OakDiscoveryService) instance2.getDiscoveryService();
@@ -144,7 +146,7 @@ public class OakDiscoveryServiceTest ext
t1 = instance1.getDiscoveryService().getTopology();
assertFalse(t1.isCurrent()); // current it should not be
assertEquals(1, t1.getInstances().size()); // but it should still contain the local instance from before
-
+
builder.getSimulatedLeaseCollection().setFinal(true);
l1.addExpected(Type.TOPOLOGY_CHANGED);
logger.info("testOldView: now issuing 3 rounds of heartbeats/checks and expecting a TOPOLOGY_CHANGED then");
@@ -160,14 +162,14 @@ public class OakDiscoveryServiceTest ext
instance2.heartbeatsAndCheckView();
instance1.heartbeatsAndCheckView();
Thread.sleep(1200);
-
+
assertEquals(3, l1.getEvents().size()); // INIT, CHANGING and CHANGED
assertEquals(0, l1.getRemainingExpectedCount()); // no remaining expected
assertEquals(0, l1.getUnexpectedCount()); // and no unexpected
t1 = instance1.getDiscoveryService().getTopology();
assertTrue(t1.isCurrent()); // and we should be current again
assertEquals(2, t1.getInstances().size()); // and contain both instances now
-
+
// timeout is set to 3sec, so we now do heartbeats for 4sec with only instance1
// to let instance2 crash
builder.getSimulatedLeaseCollection().setFinal(false);
@@ -183,5 +185,5 @@ public class OakDiscoveryServiceTest ext
assertFalse(t1.isCurrent()); // and we should be current again
assertEquals(2, t1.getInstances().size()); // and contain both instances now
}
-
+
}
Modified: sling/trunk/bundles/extensions/discovery/oak/src/test/java/org/apache/sling/discovery/oak/its/setup/OakVirtualInstanceBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/oak/src/test/java/org/apache/sling/discovery/oak/its/setup/OakVirtualInstanceBuilder.java?rev=1769802&r1=1769801&r2=1769802&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/oak/src/test/java/org/apache/sling/discovery/oak/its/setup/OakVirtualInstanceBuilder.java (original)
+++ sling/trunk/bundles/extensions/discovery/oak/src/test/java/org/apache/sling/discovery/oak/its/setup/OakVirtualInstanceBuilder.java Tue Nov 15 12:38:35 2016
@@ -56,11 +56,11 @@ public class OakVirtualInstanceBuilder e
private SimulatedLeaseCollection leaseCollection;
private OakBacklogClusterSyncService consistencyService;
private SyncTokenService syncTokenService;
-
+
public SimulatedLeaseCollection getSimulatedLeaseCollection() {
return leaseCollection;
}
-
+
@Override
public VirtualInstanceBuilder createNewRepository() throws Exception {
nodeStore = new MemoryNodeStore();
@@ -69,7 +69,7 @@ public class OakVirtualInstanceBuilder e
leaseCollection = new SimulatedLeaseCollection();
return this;
}
-
+
@Override
public VirtualInstanceBuilder useRepositoryOf(VirtualInstanceBuilder other) throws Exception {
if (!(other instanceof OakVirtualInstanceBuilder)) {
@@ -95,7 +95,7 @@ public class OakVirtualInstanceBuilder e
public Object[] getAdditionalServices(VirtualInstance instance) throws Exception {
return null;
}
-
+
public IdMapService getIdMapService() {
if (idMapService==null) {
idMapService = createIdMapService();
@@ -111,39 +111,39 @@ public class OakVirtualInstanceBuilder e
protected ClusterViewService createClusterViewService() {
return OakClusterViewService.testConstructor(getSlingSettingsService(), getResourceResolverFactory(), getIdMapService(), getConfig());
}
-
+
OakTestConfig getConfig() {
if (config==null) {
config = createConfig();
}
return config;
}
-
+
@Override
public ModifiableTestBaseConfig getConnectorConfig() {
return getConfig();
}
-
+
private OakTestConfig createConfig() {
OakTestConfig c = new OakTestConfig();
c.setDiscoveryResourcePath(path);
return c;
}
-
+
@Override
protected ViewChecker createViewChecker() throws Exception {
getOakViewChecker();
return new ViewChecker() {
-
+
private final Logger logger = LoggerFactory.getLogger(getClass());
private SimulatedLease lease = new SimulatedLease(getResourceResolverFactory(), leaseCollection, getSlingId());
-
+
protected void activate(ComponentContext c) throws Throwable {
OakViewChecker pinger = getOakViewChecker();
PrivateAccessor.invoke(pinger, "activate", new Class[] {ComponentContext.class}, new Object[] {c});
}
-
+
@Override
public void checkView() {
try {
@@ -152,11 +152,11 @@ public class OakVirtualInstanceBuilder e
logger.error("run: could not update lease: "+e);
}
}
-
+
public void run() {
heartbeatAndCheckView();
}
-
+
@Override
public void heartbeatAndCheckView() {
// next step is try to simulate the logic
@@ -199,7 +199,7 @@ public class OakVirtualInstanceBuilder e
}
return consistencyService;
}
-
+
private OakBacklogClusterSyncService createOakBacklogClusterSyncService() {
return OakBacklogClusterSyncService.testConstructorAndActivate(getConfig(), getIdMapService(), getSlingSettingsService(), getResourceResolverFactory());
}
@@ -210,7 +210,7 @@ public class OakVirtualInstanceBuilder e
}
return syncTokenService;
}
-
+
private SyncTokenService createSyncTokenService() {
return SyncTokenService.testConstructorAndActivate(getConfig(), getResourceResolverFactory(), getSlingSettingsService());
}
@@ -218,14 +218,14 @@ public class OakVirtualInstanceBuilder e
@Override
protected BaseDiscoveryService createDiscoveryService() throws Exception {
return OakDiscoveryService.testConstructor(
- getSlingSettingsService(),
- getAnnouncementRegistry(),
- getConnectorRegistry(),
- getClusterViewService(),
- getConfig(),
- getOakViewChecker(),
- getScheduler(),
- getIdMapService(),
+ getSlingSettingsService(),
+ getAnnouncementRegistry(),
+ getConnectorRegistry(),
+ getClusterViewService(),
+ getConfig(),
+ getOakViewChecker(),
+ getScheduler(),
+ getIdMapService(),
getOakBacklogClusterSyncService(),
getSyncTokenService(),
getResourceResolverFactory());
@@ -257,14 +257,14 @@ public class OakVirtualInstanceBuilder e
};
return result;
}
-
+
@Override
protected void resetRepo() throws Exception {
leaseCollection.reset();
ResourceResolver rr = null;
Session l = null;
try {
- rr = factory.getAdministrativeResourceResolver(null);
+ rr = factory.getServiceResourceResolver(null);
l = rr.adaptTo(Session.class);
l.removeItem("/var");
l.save();