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/29 15:09:09 UTC

svn commit: r1711259 - in /sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup: FullJR2VirtualInstance.java FullJR2VirtualInstanceBuilder.java VotingEventListener.java

Author: stefanegli
Date: Thu Oct 29 14:09:09 2015
New Revision: 1711259

URL: http://svn.apache.org/viewvc?rev=1711259&view=rev
Log:
SLING-5195 : test setup adjustments due to change in HeartbeatHandler

Modified:
    sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstance.java
    sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstanceBuilder.java
    sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/VotingEventListener.java

Modified: sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstance.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstance.java?rev=1711259&r1=1711258&r2=1711259&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstance.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstance.java Thu Oct 29 14:09:09 2015
@@ -18,6 +18,7 @@
  */
 package org.apache.sling.discovery.impl.setup;
 
+import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.discovery.base.its.setup.VirtualInstance;
 import org.apache.sling.discovery.impl.Config;
 import org.apache.sling.discovery.impl.common.heartbeat.HeartbeatHandler;
@@ -38,6 +39,12 @@ public class FullJR2VirtualInstance exte
     public void stopVoting() {
         fullBuilder.stopVoting();
     }
+    
+    public void analyzeVotings() throws Exception {
+        ResourceResolver resourceResolver = getResourceResolverFactory().getAdministrativeResourceResolver(null);
+        fullBuilder.getVotingHandler().analyzeVotings(resourceResolver);
+        resourceResolver.close();
+    }
 
     public Config getFullConfig() {
         return fullBuilder.getConfig();

Modified: sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstanceBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstanceBuilder.java?rev=1711259&r1=1711258&r2=1711259&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstanceBuilder.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/FullJR2VirtualInstanceBuilder.java Thu Oct 29 14:09:09 2015
@@ -29,12 +29,12 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.commons.testing.jcr.RepositoryProvider;
 import org.apache.sling.discovery.base.commons.BaseDiscoveryService;
 import org.apache.sling.discovery.base.commons.ClusterViewService;
-import org.apache.sling.discovery.base.commons.ViewChecker;
 import org.apache.sling.discovery.base.commons.UndefinedClusterViewException;
+import org.apache.sling.discovery.base.commons.ViewChecker;
 import org.apache.sling.discovery.base.its.setup.ModifiableTestBaseConfig;
 import org.apache.sling.discovery.base.its.setup.VirtualInstance;
 import org.apache.sling.discovery.base.its.setup.VirtualInstanceBuilder;
-import org.apache.sling.discovery.base.its.setup.mock.MockFactory;
+import org.apache.sling.discovery.base.its.setup.mock.DummyResourceResolverFactory;
 import org.apache.sling.discovery.impl.DiscoveryServiceImpl;
 import org.apache.sling.discovery.impl.cluster.ClusterViewServiceImpl;
 import org.apache.sling.discovery.impl.cluster.voting.VotingHandler;
@@ -52,10 +52,27 @@ public class FullJR2VirtualInstanceBuild
     private VotingEventListener observationListener;
 
     private ObservationManager observationManager;
-    
+
+    private VotingHandler votingHandler;
+
     @Override
     public VirtualInstanceBuilder createNewRepository() throws Exception {
-        this.factory = MockFactory.mockResourceResolverFactory();
+        DummyResourceResolverFactory dummyFactory = new DummyResourceResolverFactory();
+        dummyFactory.setArtificialDelay(delay);
+        this.factory = dummyFactory;
+        return this;
+    }
+    
+    @Override
+    public VirtualInstanceBuilder useRepositoryOf(VirtualInstanceBuilder other) throws Exception {
+        super.useRepositoryOf(other);
+        DummyResourceResolverFactory dummyFactory = new DummyResourceResolverFactory();
+        DummyResourceResolverFactory originalFactory = (DummyResourceResolverFactory) this.factory;
+        // force repository to be created now..
+        originalFactory.getAdministrativeResourceResolver(null);
+        dummyFactory.setSlingRepository(originalFactory.getSlingRepository());
+        dummyFactory.setArtificialDelay(getDelay());
+        this.factory = dummyFactory; 
         return this;
     }
 
@@ -90,12 +107,12 @@ public class FullJR2VirtualInstanceBuild
     
     @Override
     protected ViewChecker createViewChecker() throws Exception {
-        return HeartbeatHandler.testConstructor(getSlingSettingsService(), getResourceResolverFactory(), getAnnouncementRegistry(), getConnectorRegistry(), getConfig(), getScheduler());
+        return HeartbeatHandler.testConstructor(getSlingSettingsService(), getResourceResolverFactory(), getAnnouncementRegistry(), getConnectorRegistry(), getConfig(), getScheduler(), getVotingHandler());
     }
     
     @Override
     protected BaseDiscoveryService createDiscoveryService() throws Exception {
-        return DiscoveryServiceImpl.testConstructor(getResourceResolverFactory(), getAnnouncementRegistry(), getConnectorRegistry(), getClusterViewService(), getHeartbeatHandler(), getSlingSettingsService(), getScheduler(), getConfig());
+        return DiscoveryServiceImpl.testConstructor(getResourceResolverFactory(), getAnnouncementRegistry(), getConnectorRegistry(), (ClusterViewServiceImpl) getClusterViewService(), getHeartbeatHandler(), getSlingSettingsService(), getScheduler(), getConfig());
     }
     
     @Override
@@ -117,12 +134,22 @@ public class FullJR2VirtualInstanceBuild
         }
         return additionalServices;
     }
+    
+    VotingHandler getVotingHandler() throws Exception {
+        if (votingHandler == null) {
+            votingHandler = createVotingHandler();
+        }
+        return votingHandler;
+    }
+
+    private VotingHandler createVotingHandler() throws Exception {
+        return VotingHandler.testConstructor(getSlingSettingsService(), getResourceResolverFactory(), getConfig());
+    }
 
     private Object[] createAdditionalServices(VirtualInstance instance) throws Exception {
         Object[] additionals = new Object[1];
         
-        VotingHandler votingHandler = VotingHandler.testConstructor(getSlingSettingsService(), getResourceResolverFactory(), getConfig());
-        additionals[0] = votingHandler;
+        additionals[0] = getVotingHandler();
         
         observationListener = new VotingEventListener(instance, votingHandler, getSlingId());
         ResourceResolver resourceResolver = getResourceResolverFactory()

Modified: sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/VotingEventListener.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/VotingEventListener.java?rev=1711259&r1=1711258&r2=1711259&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/VotingEventListener.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/setup/VotingEventListener.java Thu Oct 29 14:09:09 2015
@@ -19,6 +19,7 @@
 package org.apache.sling.discovery.impl.setup;
 
 import java.util.Properties;
+import java.util.concurrent.ConcurrentLinkedQueue;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.observation.Event;
@@ -42,11 +43,35 @@ class VotingEventListener implements Eve
     private final VotingHandler votingHandler;
     volatile boolean stopped = false;
     private final String slingId;
+    private ConcurrentLinkedQueue<org.osgi.service.event.Event> q = new ConcurrentLinkedQueue<org.osgi.service.event.Event>();
     
-    public VotingEventListener(VirtualInstance instance, VotingHandler votingHandler, String slingId) {
+    public VotingEventListener(VirtualInstance instance, final VotingHandler votingHandler, final String slingId) {
         this.instance = instance;
         this.votingHandler = votingHandler;
         this.slingId = slingId;
+        Thread th = new Thread(new Runnable() {
+
+            @Override
+            public void run() {
+                while(!stopped) {
+                    try{
+                        org.osgi.service.event.Event ev = q.poll();
+                        if (ev==null) {
+                            Thread.sleep(10);
+                            continue;
+                        }
+                        logger.debug("async.run: delivering event to listener: "+slingId+", stopped: "+stopped+", event: "+ev);
+                        votingHandler.handleEvent(ev);
+                    } catch(Exception e) {
+                        logger.error("async.run: got Exception: "+e, e);
+                    }
+                }
+            }
+            
+        });
+        th.setName("VotingEventListener-"+instance.getDebugName());
+        th.setDaemon(true);
+        th.start();
     }
     
     public void stop() {
@@ -77,8 +102,8 @@ class VotingEventListener implements Eve
                     properties.put("path", event.getPath());
                     org.osgi.service.event.Event osgiEvent = new org.osgi.service.event.Event(
                             topic, properties);
-                    logger.debug("onEvent: delivering event to listener: "+slingId+", stopped: "+stopped+", event: "+osgiEvent);
-                    votingHandler.handleEvent(osgiEvent);
+                    logger.debug("onEvent: enqueuing event to listener: "+slingId+", stopped: "+stopped+", event: "+osgiEvent);
+                    q.add(osgiEvent);
                 } catch (RepositoryException e) {
                     logger.warn("RepositoryException: " + e, e);
                 }
@@ -90,7 +115,7 @@ class VotingEventListener implements Eve
             try {
                 this.instance.dumpRepo();
             } catch (Exception e) {
-                e.printStackTrace();
+                logger.info("onEvent: could not dump as part of catching a throwable, e="+e+", th="+th);
             }
             logger.error(
                     "Throwable occurred in onEvent: " + th, th);