You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:29:12 UTC
[sling-org-apache-sling-discovery-oak] 03/06: SLING-5231 : remove
getAdministrativeResourceResolver from discovery components : merged
patches from Carsten
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 <st...@apache.org>
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
"commits@sling.apache.org" <co...@sling.apache.org>.