This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.discovery.oak-1.2.16 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-discovery-oak.git
commit 63eff405fd7c940949cc4400b029f29b2366ec09 Author: Stefan Egli <[email protected]> AuthorDate: Tue Nov 15 12:38:35 2016 +0000 SLING-5231 : remove getAdministrativeResourceResolver from discovery components : merged patches from Carsten git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/discovery/oak@1769802 13f79535-47bb-0310-9956-ffa450edef68 --- pom.xml | 4 +- .../sling/discovery/oak/OakDiscoveryService.java | 39 +++++++++-------- .../discovery/oak/TopologyWebConsolePlugin.java | 31 ++++++++------ .../oak/cluster/OakClusterViewService.java | 24 ++++++----- .../sling/discovery/oak/pinger/OakViewChecker.java | 31 +++++++------- .../discovery/oak/OakDiscoveryServiceTest.java | 32 +++++++------- .../discovery/oak/its/OakDiscoveryServiceTest.java | 28 ++++++------ .../oak/its/setup/OakVirtualInstanceBuilder.java | 50 +++++++++++----------- 8 files changed, 126 insertions(+), 113 deletions(-) diff --git a/pom.xml b/pom.xml index 480d53b..0044700 100644 --- a/pom.xml +++ b/pom.xml @@ -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> diff --git a/src/main/java/org/apache/sling/discovery/oak/OakDiscoveryService.java b/src/main/java/org/apache/sling/discovery/oak/OakDiscoveryService.java index bdbbd97..0b4093f 100644 --- a/src/main/java/org/apache/sling/discovery/oak/OakDiscoveryService.java +++ b/src/main/java/org/apache/sling/discovery/oak/OakDiscoveryService.java @@ -93,7 +93,7 @@ public class OakDiscoveryService extends BaseDiscoveryService { @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 BaseDiscoveryService { @Reference private IdMapService idMapService; - + @Reference private OakBacklogClusterSyncService oakBacklogClusterSyncService; @@ -146,15 +146,16 @@ public class OakDiscoveryService extends BaseDiscoveryService { 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 BaseDiscoveryService { 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 BaseDiscoveryService { } } } - + /** * Activate this service */ @@ -232,7 +234,7 @@ public class OakDiscoveryService extends BaseDiscoveryService { consistencyService = new ClusterSyncServiceChain(oakBacklogClusterSyncService, syncTokenService); } else { consistencyService = oakBacklogClusterSyncService; - + } viewStateManager = ViewStateManagerFactory.newViewStateManager(viewStateManagerLock, consistencyService); @@ -249,7 +251,7 @@ public class OakDiscoveryService extends BaseDiscoveryService { // 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 BaseDiscoveryService { } 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 BaseDiscoveryService { } } } - + logger.debug("OakDiscoveryService activated."); } @@ -326,7 +328,7 @@ public class OakDiscoveryService extends BaseDiscoveryService { viewStateManager.unbind(changePropagationListener); viewStateManager.handleDeactivated(); - + activated = false; } finally { if (viewStateManagerLock!=null) { @@ -485,7 +487,7 @@ public class OakDiscoveryService extends BaseDiscoveryService { ResourceResolver resourceResolver = null; try { resourceResolver = rrf - .getAdministrativeResourceResolver(null); + .getServiceResourceResolver(null); Resource myInstance = ResourceHelper .getOrCreateResource( @@ -619,6 +621,7 @@ public class OakDiscoveryService extends BaseDiscoveryService { /** * @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 BaseDiscoveryService { 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; diff --git a/src/main/java/org/apache/sling/discovery/oak/TopologyWebConsolePlugin.java b/src/main/java/org/apache/sling/discovery/oak/TopologyWebConsolePlugin.java index c823411..eb0169c 100644 --- a/src/main/java/org/apache/sling/discovery/oak/TopologyWebConsolePlugin.java +++ b/src/main/java/org/apache/sling/discovery/oak/TopologyWebConsolePlugin.java @@ -117,15 +117,15 @@ public class TopologyWebConsolePlugin extends AbstractWebConsolePlugin implement 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 extends AbstractWebConsolePlugin implement tv.findInstances(new InstanceFilter() { + @Override public boolean accept(InstanceDescription instance) { String slingId = instance.getSlingId(); if (logger.isDebugEnabled()) { @@ -230,7 +231,7 @@ public class TopologyWebConsolePlugin extends AbstractWebConsolePlugin implement } protected ResourceResolver getResourceResolver() throws LoginException { - return resourceResolverFactory.getAdministrativeResourceResolver(null); + return resourceResolverFactory.getServiceResourceResolver(null); } /** @@ -289,7 +290,7 @@ public class TopologyWebConsolePlugin extends AbstractWebConsolePlugin implement 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 extends AbstractWebConsolePlugin implement pw.println("</tbody>"); pw.println("</table>"); } - + private String beautifiedDueTime(long secondsDue) { if (secondsDue<-1) { return "overdue"; @@ -586,13 +587,14 @@ public class TopologyWebConsolePlugin extends AbstractWebConsolePlugin implement /** * 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 extends AbstractWebConsolePlugin implement } 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 extends AbstractWebConsolePlugin implement } sb.append("."); } - + Set<InstanceDescription> newInstances = event.getNewView() .getInstances(); for (Iterator<InstanceDescription> it = newInstances.iterator(); it @@ -641,7 +643,7 @@ public class TopologyWebConsolePlugin extends AbstractWebConsolePlugin implement sb.append(", "); } sb.append("on instance " - + newInstanceDescription.getSlingId() + (newInstanceDescription.isLeader() ? " [isLeader]" : "") + + newInstanceDescription.getSlingId() + (newInstanceDescription.isLeader() ? " [isLeader]" : "") + ": " + diff + ". "); } } @@ -710,7 +712,7 @@ public class TopologyWebConsolePlugin extends AbstractWebConsolePlugin implement } } } - + addEventLog( event.getType(), "old view: " + shortViewInfo(event.getOldView()) @@ -730,6 +732,7 @@ public class TopologyWebConsolePlugin extends AbstractWebConsolePlugin implement 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 extends AbstractWebConsolePlugin implement 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 extends AbstractWebConsolePlugin implement resourceResolver.close(); } } - + } /** diff --git a/src/main/java/org/apache/sling/discovery/oak/cluster/OakClusterViewService.java b/src/main/java/org/apache/sling/discovery/oak/cluster/OakClusterViewService.java index 340518e..48cd976 100644 --- a/src/main/java/org/apache/sling/discovery/oak/cluster/OakClusterViewService.java +++ b/src/main/java/org/apache/sling/discovery/oak/cluster/OakClusterViewService.java @@ -73,13 +73,13 @@ public class OakClusterViewService implements ClusterViewService { @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 implements ClusterViewService { service.idMapService = idMapService; return service; } - + + @Override public String getSlingId() { if (settingsService==null) { return null; @@ -100,15 +101,16 @@ public class OakClusterViewService implements ClusterViewService { } 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 implements ClusterViewService { 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 implements ClusterViewService { slingId); leaderElectionIds.put(id, leaderElectionId); } - + Collections.sort(activeIdsList, new Comparator<Integer>() { @Override @@ -188,7 +190,7 @@ public class OakClusterViewService implements ClusterViewService { .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 implements ClusterViewService { + "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 implements ClusterViewService { String result = resourceMap.get("leaderElectionId", String.class); return result; } - + private Map<String, String> readProperties(String slingId, ResourceResolver resourceResolver) { Resource res = resourceResolver.getResource( config.getClusterInstancesPath() + "/" diff --git a/src/main/java/org/apache/sling/discovery/oak/pinger/OakViewChecker.java b/src/main/java/org/apache/sling/discovery/oak/pinger/OakViewChecker.java index 88c320d..6938d13 100644 --- a/src/main/java/org/apache/sling/discovery/oak/pinger/OakViewChecker.java +++ b/src/main/java/org/apache/sling/discovery/oak/pinger/OakViewChecker.java @@ -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 BaseViewChecker { 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 BaseViewChecker { 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 BaseViewChecker { } 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 BaseViewChecker { 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 BaseViewChecker { 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 BaseViewChecker { } /** - * 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 BaseViewChecker { 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 BaseViewChecker { discoveryService.checkForTopologyChange(); } + @Override protected void updateProperties() { if (discoveryService == null) { // SLING-6065: it's legitimate that updateProperties() diff --git a/src/test/java/org/apache/sling/discovery/oak/OakDiscoveryServiceTest.java b/src/test/java/org/apache/sling/discovery/oak/OakDiscoveryServiceTest.java index 511ced7..f43831e 100644 --- a/src/test/java/org/apache/sling/discovery/oak/OakDiscoveryServiceTest.java +++ b/src/test/java/org/apache/sling/discovery/oak/OakDiscoveryServiceTest.java @@ -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); diff --git a/src/test/java/org/apache/sling/discovery/oak/its/OakDiscoveryServiceTest.java b/src/test/java/org/apache/sling/discovery/oak/its/OakDiscoveryServiceTest.java index 0f4bc7e..d1ff26f 100644 --- a/src/test/java/org/apache/sling/discovery/oak/its/OakDiscoveryServiceTest.java +++ b/src/test/java/org/apache/sling/discovery/oak/its/OakDiscoveryServiceTest.java @@ -23,7 +23,7 @@ import static org.junit.Assert.assertFalse; 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 extends AbstractDiscoveryServiceTest { 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 extends AbstractDiscoveryServiceTest { 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 extends AbstractDiscoveryServiceTest { */ @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 extends AbstractDiscoveryServiceTest { 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 extends AbstractDiscoveryServiceTest { 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 extends AbstractDiscoveryServiceTest { 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 extends AbstractDiscoveryServiceTest { 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 extends AbstractDiscoveryServiceTest { assertFalse(t1.isCurrent()); // and we should be current again assertEquals(2, t1.getInstances().size()); // and contain both instances now } - + } diff --git a/src/test/java/org/apache/sling/discovery/oak/its/setup/OakVirtualInstanceBuilder.java b/src/test/java/org/apache/sling/discovery/oak/its/setup/OakVirtualInstanceBuilder.java index bfb7296..ccbfb68 100644 --- a/src/test/java/org/apache/sling/discovery/oak/its/setup/OakVirtualInstanceBuilder.java +++ b/src/test/java/org/apache/sling/discovery/oak/its/setup/OakVirtualInstanceBuilder.java @@ -56,11 +56,11 @@ public class OakVirtualInstanceBuilder extends VirtualInstanceBuilder { 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 extends VirtualInstanceBuilder { leaseCollection = new SimulatedLeaseCollection(); return this; } - + @Override public VirtualInstanceBuilder useRepositoryOf(VirtualInstanceBuilder other) throws Exception { if (!(other instanceof OakVirtualInstanceBuilder)) { @@ -95,7 +95,7 @@ public class OakVirtualInstanceBuilder extends VirtualInstanceBuilder { public Object[] getAdditionalServices(VirtualInstance instance) throws Exception { return null; } - + public IdMapService getIdMapService() { if (idMapService==null) { idMapService = createIdMapService(); @@ -111,39 +111,39 @@ public class OakVirtualInstanceBuilder extends VirtualInstanceBuilder { 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 extends VirtualInstanceBuilder { 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 extends VirtualInstanceBuilder { } return consistencyService; } - + private OakBacklogClusterSyncService createOakBacklogClusterSyncService() { return OakBacklogClusterSyncService.testConstructorAndActivate(getConfig(), getIdMapService(), getSlingSettingsService(), getResourceResolverFactory()); } @@ -210,7 +210,7 @@ public class OakVirtualInstanceBuilder extends VirtualInstanceBuilder { } return syncTokenService; } - + private SyncTokenService createSyncTokenService() { return SyncTokenService.testConstructorAndActivate(getConfig(), getResourceResolverFactory(), getSlingSettingsService()); } @@ -218,14 +218,14 @@ public class OakVirtualInstanceBuilder extends VirtualInstanceBuilder { @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 extends VirtualInstanceBuilder { }; 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(); -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
