You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by st...@apache.org on 2015/08/27 14:48:04 UTC

svn commit: r1698140 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/document/ClusterViewDocument.java test/java/org/apache/jackrabbit/oak/plugins/document/ClusterViewDocumentTest.java

Author: stefanegli
Date: Thu Aug 27 12:48:04 2015
New Revision: 1698140

URL: http://svn.apache.org/r1698140
Log:
OAK-3288 : use removeMapEntry instead of unsetMapEntry - and use the correct key for the map

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterViewDocument.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterViewDocumentTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterViewDocument.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterViewDocument.java?rev=1698140&r1=1698139&r2=1698140&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterViewDocument.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterViewDocument.java Thu Aug 27 12:48:04 2015
@@ -133,7 +133,7 @@ class ClusterViewDocument {
     private static final DateFormat standardDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
 
     /** number of elements kept in the CLUSTERVIEW_HISTORY_KEY field **/
-    private static final int HISTORY_LIMIT = 10;
+    static final int HISTORY_LIMIT = 10;
 
     /** the monotonically incrementing sequence number of this cluster view **/
     private final long viewSeqNum;
@@ -204,13 +204,13 @@ class ClusterViewDocument {
             Map<Object, String> previousHistory = previousView.getHistory();
             if (previousHistory!=null) {
                 Map<Object, String> mapClone = new HashMap<Object, String>(previousHistory);
-                while(mapClone.size()>HISTORY_LIMIT) {
+                while(mapClone.size()>=HISTORY_LIMIT) {
                     Revision oldestRevision = oldestRevision(mapClone);
                     if (oldestRevision==null) {
                         break;
                     }
-                    updateOp.unsetMapEntry(CLUSTER_VIEW_HISTORY_KEY, oldestRevision);
-                    if (mapClone.remove(oldestRevision.toString())==null) {
+                    updateOp.removeMapEntry(CLUSTER_VIEW_HISTORY_KEY, oldestRevision);
+                    if (mapClone.remove(oldestRevision)==null) {
                         // prevent an endless loop
                         break;
                     }
@@ -509,7 +509,7 @@ class ClusterViewDocument {
     }
 
     /** Returns the history map **/
-    private Map<Object, String> getHistory() {
+    Map<Object, String> getHistory() {
         return viewHistory;
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterViewDocumentTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterViewDocumentTest.java?rev=1698140&r1=1698139&r2=1698140&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterViewDocumentTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterViewDocumentTest.java Thu Aug 27 12:48:04 2015
@@ -114,6 +114,31 @@ public class ClusterViewDocumentTest {
         assertTrue(doc.getInactiveIds().contains(8));
 
     }
+    
+    @Test
+    public void testHistory() throws Exception {
+        final int localClusterId = 1;
+        final DocumentNodeStore ns = createMK(localClusterId).nodeStore;
+
+        // initial setting of the view
+        final Set<Integer> activeIds = new HashSet<Integer>();
+        activeIds.add(localClusterId);
+        ClusterViewDocument.readOrUpdate(ns, activeIds, null, null);
+
+        final int LOOP_CNT = 100;
+        for (int i = 0; i < LOOP_CNT; i++) {
+            // create a new instance
+            activeIds.add(i + 2);
+            ClusterViewDocument result = ClusterViewDocument.readOrUpdate(ns, activeIds, null, null);
+            assertNotNull(result);
+            assertEquals(i+2, result.getActiveIds().size());
+            if (i<10) {
+                assertEquals(i+1, result.getHistory().size());
+            } else {
+                assertTrue(result.getHistory().size()<=ClusterViewDocument.HISTORY_LIMIT);
+            }
+        }
+    }
 
     @Test
     public void testReadUpdate() throws Exception {