You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by st...@apache.org on 2015/10/22 17:38:14 UTC
svn commit: r1710041 - in /sling/trunk/bundles/extensions/discovery/oak/src:
main/java/org/apache/sling/discovery/oak/
test/java/org/apache/sling/discovery/oak/its/setup/
Author: stefanegli
Date: Thu Oct 22 15:38:13 2015
New Revision: 1710041
URL: http://svn.apache.org/viewvc?rev=1710041&view=rev
Log:
SLING-4603 : introducing configuration for syncToken enabling/disabling - plus using the ConsistencyServiceChain - plus more details when PROPERTIES_CHANGED
Modified:
sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/Config.java
sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/OakDiscoveryService.java
sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/TopologyWebConsolePlugin.java
sling/trunk/bundles/extensions/discovery/oak/src/test/java/org/apache/sling/discovery/oak/its/setup/OakVirtualInstanceBuilder.java
Modified: sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/Config.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/Config.java?rev=1710041&r1=1710040&r2=1710041&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/Config.java (original)
+++ sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/Config.java Thu Oct 22 15:38:13 2015
@@ -73,6 +73,15 @@ public class Config implements BaseConfi
public static final String DISCOVERY_LITE_CHECK_INTERVAL_KEY = "discoveryLiteCheckInterval";
protected long discoveryLiteCheckInterval = DEFAULT_DISCOVERY_LITE_CHECK_INTERVAL;
+ /**
+ * If set to true a syncToken will be used on top of waiting for
+ * deactivating instances to be fully processed.
+ * If set to false, only deactivating instances will be waited for
+ * to be fully processed.
+ */
+ @Property(boolValue=true)
+ private static final String SYNC_TOKEN_ENABLED = "enableSyncToken";
+
/** Configure the time (in seconds) which must be passed at minimum between sending TOPOLOGY_CHANGING/_CHANGED (avoid flooding). */
public static final int DEFAULT_MIN_EVENT_DELAY = 3;
@Property(intValue=DEFAULT_MIN_EVENT_DELAY)
@@ -194,6 +203,12 @@ public class Config implements BaseConfi
/** the maximum backoff factor to be used for stable connectors **/
private int backoffStableFactor = DEFAULT_BACKOFF_STABLE_FACTOR;
+ /**
+ * Whether, on top of waiting for deactivating instances,
+ * a syncToken should also be used
+ */
+ private boolean syncTokenEnabled;
+
@Activate
protected void activate(final Map<String, Object> properties) {
logger.debug("activate: config activated.");
@@ -295,6 +310,7 @@ public class Config implements BaseConfi
hmacEnabled = PropertiesUtil.toBoolean(properties.get(HMAC_ENABLED), true);
encryptionEnabled = PropertiesUtil.toBoolean(properties.get(ENCRYPTION_ENABLED), false);
+ syncTokenEnabled = PropertiesUtil.toBoolean(properties.get(SYNC_TOKEN_ENABLED), true);
sharedKey = PropertiesUtil.toString(properties.get(SHARED_KEY), null);
keyInterval = PropertiesUtil.toLong(SHARED_KEY_INTERVAL, DEFAULT_SHARED_KEY_INTERVAL);
@@ -467,4 +483,8 @@ public class Config implements BaseConfi
// TODO: currently hard coded
return 1000;
}
+
+ public boolean getSyncTokenEnabled() {
+ return syncTokenEnabled;
+ }
}
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=1710041&r1=1710040&r2=1710041&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 Thu Oct 22 15:38:13 2015
@@ -60,8 +60,11 @@ import org.apache.sling.discovery.common
import org.apache.sling.discovery.commons.providers.DefaultInstanceDescription;
import org.apache.sling.discovery.commons.providers.ViewStateManager;
import org.apache.sling.discovery.commons.providers.base.ViewStateManagerFactory;
+import org.apache.sling.discovery.commons.providers.spi.ConsistencyService;
+import org.apache.sling.discovery.commons.providers.spi.base.ConsistencyServiceChain;
import org.apache.sling.discovery.commons.providers.spi.base.IdMapService;
-import org.apache.sling.discovery.commons.providers.spi.base.OakSyncTokenConsistencyService;
+import org.apache.sling.discovery.commons.providers.spi.base.OakBacklogConsistencyService;
+import org.apache.sling.discovery.commons.providers.spi.base.SyncTokenConsistencyService;
import org.apache.sling.discovery.commons.providers.util.PropertyNameHelper;
import org.apache.sling.discovery.commons.providers.util.ResourceHelper;
import org.apache.sling.discovery.oak.pinger.OakViewChecker;
@@ -129,7 +132,10 @@ public class OakDiscoveryService extends
private IdMapService idMapService;
@Reference
- private OakSyncTokenConsistencyService consistencyService;
+ private OakBacklogConsistencyService oakBacklogConsistencyService;
+
+ @Reference
+ private SyncTokenConsistencyService syncTokenConsistencyService;
/** the slingId of the local instance **/
private String slingId;
@@ -150,7 +156,8 @@ public class OakDiscoveryService extends
OakViewChecker connectorPinger,
Scheduler scheduler,
IdMapService idMapService,
- OakSyncTokenConsistencyService consistencyService,
+ OakBacklogConsistencyService oakBacklogConsistencyService,
+ SyncTokenConsistencyService syncTokenConsistencyService,
ResourceResolverFactory factory) {
OakDiscoveryService discoService = new OakDiscoveryService();
discoService.settingsService = settingsService;
@@ -161,7 +168,8 @@ public class OakDiscoveryService extends
discoService.oakViewChecker = connectorPinger;
discoService.scheduler = scheduler;
discoService.idMapService = idMapService;
- discoService.consistencyService = consistencyService;
+ discoService.oakBacklogConsistencyService = oakBacklogConsistencyService;
+ discoService.syncTokenConsistencyService = syncTokenConsistencyService;
discoService.resourceResolverFactory = factory;
return discoService;
}
@@ -201,7 +209,13 @@ public class OakDiscoveryService extends
slingId = settingsService.getSlingId();
- //TODO: this should fail as bind can now run into viewStateManager==null
+ ConsistencyService consistencyService;
+ if (config.getSyncTokenEnabled()) {
+ consistencyService = new ConsistencyServiceChain(oakBacklogConsistencyService, syncTokenConsistencyService);
+ } else {
+ consistencyService = oakBacklogConsistencyService;
+
+ }
viewStateManager = ViewStateManagerFactory.newViewStateManager(viewStateManagerLock, consistencyService);
if (config.getMinEventDelay()>0) {
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=1710041&r1=1710040&r2=1710041&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 Thu Oct 22 15:38:13 2015
@@ -63,8 +63,10 @@ import org.apache.sling.discovery.base.c
import org.apache.sling.discovery.base.connectors.announcement.CachedAnnouncement;
import org.apache.sling.discovery.base.connectors.ping.ConnectorRegistry;
import org.apache.sling.discovery.base.connectors.ping.TopologyConnectorClientInformation;
+import org.apache.sling.discovery.commons.InstancesDiff;
+import org.apache.sling.discovery.commons.InstancesDiff.InstanceCollection;
import org.apache.sling.discovery.commons.providers.spi.base.DiscoveryLiteDescriptor;
-import org.apache.sling.discovery.commons.providers.spi.base.OakSyncTokenConsistencyService;
+import org.apache.sling.discovery.commons.providers.spi.base.OakBacklogConsistencyService;
import org.osgi.framework.BundleContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -112,7 +114,7 @@ public class TopologyWebConsolePlugin ex
protected ResourceResolverFactory resourceResolverFactory;
@Reference
- private OakSyncTokenConsistencyService consistencyService;
+ private OakBacklogConsistencyService consistencyService;
private TopologyView currentView;
@@ -588,9 +590,33 @@ public class TopologyWebConsolePlugin ex
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()) {
+ sb.append("instances were added:");
+ for (InstanceDescription instance : added) {
+ sb.append(" ");
+ sb.append(instance.getSlingId());
+ }
+ 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()) {
+ sb.append("instances were removed:");
+ for (InstanceDescription instance : added) {
+ sb.append(" ");
+ sb.append(instance.getSlingId());
+ }
+ sb.append(".");
+ }
+
Set<InstanceDescription> newInstances = event.getNewView()
.getInstances();
- StringBuilder sb = new StringBuilder();
for (Iterator<InstanceDescription> it = newInstances.iterator(); it
.hasNext();) {
final InstanceDescription newInstanceDescription = it.next();
@@ -601,8 +627,8 @@ public class TopologyWebConsolePlugin ex
+ newInstanceDescription
+ " in oldview.. event="
+ event);
- addEventLog(event.getType(), event.getType().toString()+" (new instance "+newInstanceDescription.getSlingId()+" not found in old view)");
- return;
+ sb.append("did not find instance in old view: " + newInstanceDescription.getSlingId() + ".");
+ continue;
}
Map<String, String> oldProps = oldInstanceDescription
@@ -616,7 +642,7 @@ public class TopologyWebConsolePlugin ex
}
sb.append("on instance "
+ newInstanceDescription.getSlingId() + (newInstanceDescription.isLeader() ? " [isLeader]" : "")
- + ": " + diff);
+ + ": " + diff + ". ");
}
}
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=1710041&r1=1710040&r2=1710041&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 Thu Oct 22 15:38:13 2015
@@ -33,8 +33,9 @@ import org.apache.sling.discovery.base.i
import org.apache.sling.discovery.base.its.setup.VirtualInstanceBuilder;
import org.apache.sling.discovery.base.its.setup.mock.MockFactory;
import org.apache.sling.discovery.commons.providers.spi.base.IdMapService;
-import org.apache.sling.discovery.commons.providers.spi.base.OakSyncTokenConsistencyService;
+import org.apache.sling.discovery.commons.providers.spi.base.OakBacklogConsistencyService;
import org.apache.sling.discovery.commons.providers.spi.base.RepositoryTestHelper;
+import org.apache.sling.discovery.commons.providers.spi.base.SyncTokenConsistencyService;
import org.apache.sling.discovery.oak.OakDiscoveryService;
import org.apache.sling.discovery.oak.cluster.OakClusterViewService;
import org.apache.sling.discovery.oak.pinger.OakViewChecker;
@@ -53,7 +54,8 @@ public class OakVirtualInstanceBuilder e
private IdMapService idMapService;
private OakViewChecker oakViewChecker;
private SimulatedLeaseCollection leaseCollection;
- private OakSyncTokenConsistencyService consistencyService;
+ private OakBacklogConsistencyService consistencyService;
+ private SyncTokenConsistencyService syncTokenConsistencyService;
@Override
public VirtualInstanceBuilder createNewRepository() throws Exception {
@@ -187,15 +189,26 @@ public class OakVirtualInstanceBuilder e
return OakViewChecker.testConstructor(getSlingSettingsService(), getResourceResolverFactory(), getConnectorRegistry(), getAnnouncementRegistry(), getScheduler(), getConfig());
}
- private OakSyncTokenConsistencyService getConsistencyService() throws Exception {
+ private OakBacklogConsistencyService getOakBacklogConsistencyService() throws Exception {
if (consistencyService == null) {
- consistencyService = createConsistencyService();
+ consistencyService = createOakBacklogConsistencyService();
}
return consistencyService;
}
- private OakSyncTokenConsistencyService createConsistencyService() {
- return OakSyncTokenConsistencyService.testConstructorAndActivate(getConfig(), getIdMapService(), getSlingSettingsService(), getResourceResolverFactory());
+ private OakBacklogConsistencyService createOakBacklogConsistencyService() {
+ return OakBacklogConsistencyService.testConstructorAndActivate(getConfig(), getIdMapService(), getSlingSettingsService(), getResourceResolverFactory());
+ }
+
+ private SyncTokenConsistencyService getSyncTokenConsistencyService() throws Exception {
+ if (syncTokenConsistencyService == null) {
+ syncTokenConsistencyService = createSyncTokenConsistencyService();
+ }
+ return syncTokenConsistencyService;
+ }
+
+ private SyncTokenConsistencyService createSyncTokenConsistencyService() {
+ return SyncTokenConsistencyService.testConstructorAndActivate(getConfig(), getResourceResolverFactory(), getSlingSettingsService());
}
@Override
@@ -209,7 +222,8 @@ public class OakVirtualInstanceBuilder e
getOakViewChecker(),
getScheduler(),
getIdMapService(),
- getConsistencyService(),
+ getOakBacklogConsistencyService(),
+ getSyncTokenConsistencyService(),
getResourceResolverFactory());
}