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();
