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 2021/06/02 16:04:36 UTC

[sling-org-apache-sling-discovery-oak] branch master updated: SLING-10204 : fixed getLocalClusterView

This is an automated email from the ASF dual-hosted git repository.

stefanegli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-discovery-oak.git


The following commit(s) were added to refs/heads/master by this push:
     new 5826d5d  SLING-10204 : fixed getLocalClusterView
5826d5d is described below

commit 5826d5d6616a02c81ec5d8f702de21f18901d44d
Author: Stefan Egli <st...@apache.org>
AuthorDate: Wed Jun 2 17:50:51 2021 +0200

    SLING-10204 : fixed getLocalClusterView
---
 pom.xml                                            |  4 ++--
 .../oak/cluster/OakClusterViewService.java         | 28 +++++++---------------
 .../oak/cluster/OakClusterViewServiceTest.java     | 19 ++++++++++++++-
 .../oak/its/setup/OakVirtualInstanceBuilder.java   | 10 ++++----
 4 files changed, 34 insertions(+), 27 deletions(-)

diff --git a/pom.xml b/pom.xml
index 45760ed..df7d01d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -261,7 +261,7 @@
 		<dependency>
 			<groupId>org.apache.sling</groupId>
 			<artifactId>org.apache.sling.discovery.base</artifactId>
-			<version>2.0.4</version>
+			<version>2.0.9-SNAPSHOT</version>
             <scope>provided</scope>
 		</dependency>
         <!-- besides including discovery.base' normal jar above, 
@@ -270,7 +270,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.discovery.base</artifactId>
-            <version>2.0.4</version>
+            <version>2.0.9-SNAPSHOT</version>
             <scope>test</scope>
             <type>test-jar</type>
         </dependency>
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 ea91586..dda41b4 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
@@ -108,27 +108,17 @@ public class OakClusterViewService implements ClusterViewService {
     public LocalClusterView getLocalClusterView() throws UndefinedClusterViewException {
         logger.trace("getLocalClusterView: start");
         ResourceResolver resourceResolver = null;
-        try{
-            resourceResolver = getResourceResolver();
-        } catch (Exception e) {
-            logger.error("getLocalClusterView: repository exception: "+e, e);
-            throw new UndefinedClusterViewException(Reason.REPOSITORY_EXCEPTION, "Exception while processing descriptor: "+e);
-        }
-        DiscoveryLiteDescriptor descriptor = null;
         try {
-            descriptor = DiscoveryLiteDescriptor.getDescriptorFrom(resourceResolver);
-        } catch (Exception e) {
-            // SLING-10204 : log less noisy as this can legitimately happen
-            logger.warn("getLocalClusterView: got Exception (enable debug logging to see stacktrace) : " + e);
-            logger.debug("getLocalClusterView: Exception stacktrace", e);
-            throw new UndefinedClusterViewException(Reason.REPOSITORY_EXCEPTION, "Exception while processing descriptor: "+e);
-        } finally {
-            logger.trace("getLocalClusterView: end");
-            if (resourceResolver!=null) {
-                resourceResolver.close();
+            DiscoveryLiteDescriptor descriptor = null;
+            try{
+                resourceResolver = getResourceResolver();
+                descriptor = DiscoveryLiteDescriptor.getDescriptorFrom(resourceResolver);
+            } catch (Exception e) {
+                // SLING-10204 : log less noisy as this can legitimately happen
+                logger.warn("getLocalClusterView: got Exception (enable debug logging to see stacktrace) : " + e);
+                logger.debug("getLocalClusterView: Exception stacktrace", e);
+                throw new UndefinedClusterViewException(Reason.REPOSITORY_EXCEPTION, "Exception while processing descriptor: "+e);
             }
-        }
-        try {
             if (lastSeqNum!=descriptor.getSeqNum()) {
                 logger.info("getLocalClusterView: sequence number change detected - clearing idmap cache");
                 idMapService.clearCache();
diff --git a/src/test/java/org/apache/sling/discovery/oak/cluster/OakClusterViewServiceTest.java b/src/test/java/org/apache/sling/discovery/oak/cluster/OakClusterViewServiceTest.java
index 4131721..353aece 100644
--- a/src/test/java/org/apache/sling/discovery/oak/cluster/OakClusterViewServiceTest.java
+++ b/src/test/java/org/apache/sling/discovery/oak/cluster/OakClusterViewServiceTest.java
@@ -24,7 +24,7 @@ import static org.junit.Assert.fail;
 import org.apache.sling.discovery.base.commons.ClusterViewService;
 import org.apache.sling.discovery.base.commons.UndefinedClusterViewException;
 import org.apache.sling.discovery.base.its.setup.VirtualInstance;
-import org.apache.sling.discovery.base.its.setup.mock.DummyResourceResolverFactory;
+import org.apache.sling.discovery.commons.providers.spi.base.IdMapService;
 import org.apache.sling.discovery.oak.its.setup.OakVirtualInstanceBuilder;
 import org.junit.Test;
 
@@ -62,7 +62,24 @@ public class OakClusterViewServiceTest {
         instance1.heartbeatsAndCheckView();
         instance2.heartbeatsAndCheckView();
 
+        // this should not fail:
         assertNotNull(cvs1.getLocalClusterView());
+
+        final ClusterViewService cvs2 = instance2.getClusterViewService();
+        final IdMapService idMapService = builder2.getIdMapService();
+        idMapService.clearCache();
+        idMapService.clearCache();
+        // this should not fail neither:
+        assertNotNull(cvs2.getLocalClusterView());
+
+        instance2.shutdownRepository();
+        try {
+            // but this should fail as the repository is shutdown
+            cvs2.getLocalClusterView();
+            fail("should throw UndefinedClusterViewException");
+        } catch(UndefinedClusterViewException e) {
+            // ok
+        }
     }
 
     @Test
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 5674606..79be503 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
@@ -22,6 +22,7 @@ import static org.junit.Assert.fail;
 
 import javax.jcr.Session;
 
+import org.apache.jackrabbit.api.JackrabbitRepository;
 import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.apache.sling.api.resource.ResourceResolver;
@@ -39,7 +40,6 @@ import org.apache.sling.discovery.commons.providers.spi.base.SyncTokenService;
 import org.apache.sling.discovery.oak.OakDiscoveryService;
 import org.apache.sling.discovery.oak.cluster.OakClusterViewService;
 import org.apache.sling.discovery.oak.pinger.OakViewChecker;
-import org.apache.sling.jcr.api.SlingRepository;
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -64,8 +64,8 @@ public class OakVirtualInstanceBuilder extends VirtualInstanceBuilder {
     @Override
     public VirtualInstanceBuilder createNewRepository() throws Exception {
         nodeStore = new MemoryNodeStore();
-        SlingRepository repository = RepositoryTestHelper.newOakRepository(nodeStore);
-        factory = MockFactory.mockResourceResolverFactory(repository);
+        JackrabbitRepository jcrRepo = (JackrabbitRepository) RepositoryTestHelper.createOakRepository(nodeStore);
+        factory = MockFactory.mockResourceResolverFactory(jcrRepo);
         leaseCollection = new SimulatedLeaseCollection();
         return this;
     }
@@ -77,8 +77,8 @@ public class OakVirtualInstanceBuilder extends VirtualInstanceBuilder {
         }
         OakVirtualInstanceBuilder otherOakbuilder = (OakVirtualInstanceBuilder)other;
         nodeStore = otherOakbuilder.nodeStore;
-        SlingRepository repository = RepositoryTestHelper.newOakRepository(nodeStore);
-        factory = MockFactory.mockResourceResolverFactory(repository);
+        JackrabbitRepository jcrRepo = (JackrabbitRepository) RepositoryTestHelper.createOakRepository(nodeStore);
+        factory = MockFactory.mockResourceResolverFactory(jcrRepo);
         leaseCollection = otherOakbuilder.leaseCollection;
         hookedToBuilder = other;
         ownRepository = false;