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