You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:27:38 UTC
[sling-org-apache-sling-discovery-oak] 03/12: SLING-4603 : more
aggressively clearing the idMap-cache to avoid stale entries on slingId
change - plus added getSyncHistory to BaseSyncTokenConsistencyService to
allow adding it to the webconsole for debug - plus some cleanup in
webconsole wrt discoveryLite info
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to annotated tag org.apache.sling.discovery.oak-1.0.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-discovery-oak.git
commit c03ca86d0ecff0fe465aaa66367acca4f11bd435
Author: Stefan Egli <st...@apache.org>
AuthorDate: Thu Oct 22 12:33:15 2015 +0000
SLING-4603 : more aggressively clearing the idMap-cache to avoid stale entries on slingId change - plus added getSyncHistory to BaseSyncTokenConsistencyService to allow adding it to the webconsole for debug - plus some cleanup in webconsole wrt discoveryLite info
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/discovery/oak@1710003 13f79535-47bb-0310-9956-ffa450edef68
---
.../discovery/oak/TopologyWebConsolePlugin.java | 119 ++++++++++-----------
.../oak/cluster/OakClusterViewService.java | 12 ++-
2 files changed, 68 insertions(+), 63 deletions(-)
diff --git a/src/main/java/org/apache/sling/discovery/oak/TopologyWebConsolePlugin.java b/src/main/java/org/apache/sling/discovery/oak/TopologyWebConsolePlugin.java
index 23676f9..acc75aa 100644
--- a/src/main/java/org/apache/sling/discovery/oak/TopologyWebConsolePlugin.java
+++ b/src/main/java/org/apache/sling/discovery/oak/TopologyWebConsolePlugin.java
@@ -55,6 +55,8 @@ import org.apache.sling.discovery.InstanceDescription;
import org.apache.sling.discovery.InstanceFilter;
import org.apache.sling.discovery.TopologyEvent;
import org.apache.sling.discovery.TopologyEvent.Type;
+import org.apache.sling.discovery.TopologyEventListener;
+import org.apache.sling.discovery.TopologyView;
import org.apache.sling.discovery.base.commons.ClusterViewService;
import org.apache.sling.discovery.base.connectors.announcement.Announcement;
import org.apache.sling.discovery.base.connectors.announcement.AnnouncementRegistry;
@@ -62,8 +64,7 @@ import org.apache.sling.discovery.base.connectors.announcement.CachedAnnouncemen
import org.apache.sling.discovery.base.connectors.ping.ConnectorRegistry;
import org.apache.sling.discovery.base.connectors.ping.TopologyConnectorClientInformation;
import org.apache.sling.discovery.commons.providers.spi.base.DiscoveryLiteDescriptor;
-import org.apache.sling.discovery.TopologyEventListener;
-import org.apache.sling.discovery.TopologyView;
+import org.apache.sling.discovery.commons.providers.spi.base.OakSyncTokenConsistencyService;
import org.osgi.framework.BundleContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -110,10 +111,19 @@ public class TopologyWebConsolePlugin extends AbstractWebConsolePlugin implement
@Reference
protected ResourceResolverFactory resourceResolverFactory;
+ @Reference
+ private OakSyncTokenConsistencyService consistencyService;
+
private TopologyView currentView;
private List<String> discoveryLiteHistory = new LinkedList<String>();
+ /**
+ * keeps hold of the last DiscoveryLiteDescriptor that was added
+ * to the discoveryLiteHistory - in order to de-duplicate as we go
+ */
+ private DiscoveryLiteDescriptor lastDiscoveryLiteDescriptor = null;
+
@Override
public String getLabel() {
return LABEL;
@@ -277,32 +287,6 @@ public class TopologyWebConsolePlugin extends AbstractWebConsolePlugin implement
listIncomingTopologyConnectors(pw);
listOutgoingTopologyConnectors(pw);
pw.println("<br/>");
-
- ResourceResolver resourceResolver = null;
- pw.println("<p class=\"statline ui-state-highlight\">Oak Discovery-Lite Descriptor History</p>");
- pw.println("<pre>");
- for (String discoLiteHistoryEntry : discoveryLiteHistory) {
- pw.println(discoLiteHistoryEntry);
- }
- pw.println("</pre>");
- pw.println("<br/>");
- pw.println("<p class=\"statline ui-state-highlight\">Current Oak Discovery-Lite Descriptor</p>");
- pw.println("<pre>");
- try{
- resourceResolver = getResourceResolver();
- DiscoveryLiteDescriptor descriptor = DiscoveryLiteDescriptor.getDescriptorFrom(resourceResolver);
- final String logEntry = getCurrentDateFormatted() + ": " + descriptor.getDescriptorStr();
- pw.println(logEntry);
- } catch(Exception e) {
- logger.error("renderOverview: Exception: "+e, e);
- pw.println("Got exception trying to get repository descriptor: "+e);
- } finally {
- if (resourceResolver != null) {
- resourceResolver.close();
- }
- }
- pw.println("</pre>");
- pw.println("<br/>");
pw.println("<p class=\"statline ui-state-highlight\">Topology Change History</p>");
pw.println("<pre>");
@@ -322,6 +306,23 @@ public class TopologyWebConsolePlugin extends AbstractWebConsolePlugin implement
}
pw.println("</pre>");
pw.println("</br>");
+
+ pw.println("<p class=\"statline ui-state-highlight\">Oak Discovery-Lite Descriptor History</p>");
+ updateDiscoveryLiteHistory();
+ pw.println("<pre>");
+ for (String discoLiteHistoryEntry : discoveryLiteHistory) {
+ pw.println(discoLiteHistoryEntry);
+ }
+ pw.println("</pre>");
+ pw.println("<br/>");
+
+ pw.println("<p class=\"statline ui-state-highlight\">ConsistencyService History</p>");
+ pw.println("<pre>");
+ for (String syncHistoryEntry : consistencyService.getSyncHistory()) {
+ pw.println(syncHistoryEntry);
+ }
+ pw.println("</pre>");
+ pw.println("<br/>");
}
/**
@@ -600,7 +601,7 @@ public class TopologyWebConsolePlugin extends AbstractWebConsolePlugin implement
+ newInstanceDescription
+ " in oldview.. event="
+ event);
- addEventLog(event.getType(), event.getType().toString());
+ addEventLog(event.getType(), event.getType().toString()+" (new instance "+newInstanceDescription.getSlingId()+" not found in old view)");
return;
}
@@ -619,7 +620,7 @@ public class TopologyWebConsolePlugin extends AbstractWebConsolePlugin implement
}
}
- addEventLog(event.getType(), sb.toString());
+ addEventLog(event.getType(), "details: "+sb.toString());
} else if (event.getType() == Type.TOPOLOGY_INIT) {
this.currentView = event.getNewView();
StringBuilder details = new StringBuilder();
@@ -692,7 +693,7 @@ public class TopologyWebConsolePlugin extends AbstractWebConsolePlugin implement
+ details);
}
}
- addDiscoveryLiteHistoryEntry();
+ updateDiscoveryLiteHistory();
}
/**
@@ -735,17 +736,22 @@ public class TopologyWebConsolePlugin extends AbstractWebConsolePlugin implement
}
/**
- * add a discoveryLite descriptor entry to the history, truncating if necessary
+ * if there's any change add a discoveryLite descriptor entry to the history, truncating if necessary
*/
- private synchronized void addDiscoveryLiteHistoryEntry() {
+ private synchronized void updateDiscoveryLiteHistory() {
ResourceResolver resourceResolver = null;
try{
resourceResolver = getResourceResolver();
DiscoveryLiteDescriptor descriptor =
DiscoveryLiteDescriptor.getDescriptorFrom(resourceResolver);
+ if (lastDiscoveryLiteDescriptor!=null &&
+ descriptor.getDescriptorStr().equals(lastDiscoveryLiteDescriptor.getDescriptorStr())) {
+ // de-duplication - then there's nothing to update
+ return;
+ }
final String logEntry = getCurrentDateFormatted() + ": " + descriptor.getDescriptorStr();
-
+ lastDiscoveryLiteDescriptor = descriptor;
discoveryLiteHistory.add(logEntry);
while (discoveryLiteHistory.size() > 12) {
discoveryLiteHistory.remove(0);
@@ -923,34 +929,6 @@ public class TopologyWebConsolePlugin extends AbstractWebConsolePlugin implement
pw.println();
}
- ResourceResolver resourceResolver = null;
- pw.println("Oak Discovery-Lite Descriptor History");
- pw.println("---------------------------------------");
- for (String discoLiteHistoryEntry : discoveryLiteHistory) {
- pw.println(discoLiteHistoryEntry);
- }
- pw.println();
- pw.println();
- pw.println("Current Oak Discovery-Lite Descriptor");
- pw.println("---------------------------------------");
- try{
- resourceResolver = getResourceResolver();
- DiscoveryLiteDescriptor descriptor = DiscoveryLiteDescriptor.getDescriptorFrom(resourceResolver);
- final String logEntry = getCurrentDateFormatted() + ": " + descriptor.getDescriptorStr();
- pw.println(logEntry);
- pw.println();
- pw.println();
- } catch(Exception e) {
- logger.error("renderOverview: Exception: "+e, e);
- pw.println("Got exception trying to get repository descriptor: "+e);
- pw.println();
- pw.println();
- } finally {
- if (resourceResolver != null) {
- resourceResolver.close();
- }
- }
-
if ( topologyLog.size() > 0 ) {
pw.println("Topology Change History");
pw.println("---------------------------------------");
@@ -969,6 +947,23 @@ public class TopologyWebConsolePlugin extends AbstractWebConsolePlugin implement
}
pw.println();
}
+
+ pw.println("Oak Discovery-Lite Descriptor History");
+ pw.println("---------------------------------------");
+ updateDiscoveryLiteHistory();
+ for (String discoLiteHistoryEntry : discoveryLiteHistory) {
+ pw.println(discoLiteHistoryEntry);
+ }
+ pw.println();
+ pw.println();
+
+ pw.println("ConsistencyService History");
+ pw.println("---------------------------------------");
+ for (String syncHistoryEntry : consistencyService.getSyncHistory()) {
+ pw.println(syncHistoryEntry);
+ }
+ pw.println();
+ pw.println();
}
private String getCurrentDateFormatted() {
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 ce55cc2..4f770cf 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
@@ -68,6 +68,9 @@ public class OakClusterViewService implements ClusterViewService {
@Reference
private IdMapService idMapService;
+ /** the last sequence number read from the oak discovery-lite descriptor **/
+ private long lastSeqNum = -1;
+
public static OakClusterViewService testConstructor(SlingSettingsService settingsService,
ResourceResolverFactory resourceResolverFactory,
IdMapService idMapService,
@@ -98,6 +101,11 @@ public class OakClusterViewService implements ClusterViewService {
resourceResolver = getResourceResolver();
DiscoveryLiteDescriptor descriptor =
DiscoveryLiteDescriptor.getDescriptorFrom(resourceResolver);
+ if (lastSeqNum!=descriptor.getSeqNum()) {
+ logger.info("getLocalClusterView: sequence number change detected - clearing idmap cache");
+ idMapService.clearCache();
+ lastSeqNum = descriptor.getSeqNum();
+ }
return asClusterView(descriptor, resourceResolver);
} catch (UndefinedClusterViewException e) {
logger.info("getLocalClusterView: undefined clusterView: "+e.getReason()+" - "+e.getMessage());
@@ -122,7 +130,7 @@ public class OakClusterViewService implements ClusterViewService {
}
logger.trace("asClusterView: start");
String clusterViewId = descriptor.getViewId();
- String localClusterSyncTokenId = descriptor.getViewId()+"_"+descriptor.getSeqNum();
+ String localClusterSyncTokenId = /*descriptor.getViewId()+"_"+*/String.valueOf(descriptor.getSeqNum());
if (!descriptor.isFinal()) {
throw new UndefinedClusterViewException(Reason.NO_ESTABLISHED_VIEW, "descriptor is not yet final: "+descriptor);
}
@@ -146,6 +154,7 @@ public class OakClusterViewService implements ClusterViewService {
for (Integer id : activeIdsList) {
String slingId = idMapService.toSlingId(id, resourceResolver);
if (slingId == null) {
+ idMapService.clearCache();
throw new UndefinedClusterViewException(Reason.NO_ESTABLISHED_VIEW,
"no slingId mapped for clusterNodeId="+id);
}
@@ -169,6 +178,7 @@ public class OakClusterViewService implements ClusterViewService {
boolean isOwn = id==me;
String slingId = idMapService.toSlingId(id, resourceResolver);
if (slingId==null) {
+ idMapService.clearCache();
logger.info("asClusterView: cannot resolve oak-clusterNodeId {} to a slingId", id);
throw new Exception("Cannot resolve oak-clusterNodeId "+id+" to a slingId");
}
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.