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;