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 ca...@apache.org on 2017/06/06 06:45:20 UTC

svn commit: r1797739 - in /jackrabbit/oak/trunk: oak-api/src/main/java/org/apache/jackrabbit/oak/api/jmx/ oak-core-spi/src/main/java/org/apache/jackrabbit/oak/commons/jmx/ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ oak-segment-t...

Author: catholicon
Date: Tue Jun  6 06:45:20 2017
New Revision: 1797739

URL: http://svn.apache.org/viewvc?rev=1797739&view=rev
Log:
OAK-6227: There should be a way to retrieve oldest timestamp to keep from nodestores

Modified:
    jackrabbit/oak/trunk/oak-api/src/main/java/org/apache/jackrabbit/oak/api/jmx/CheckpointMBean.java
    jackrabbit/oak/trunk/oak-api/src/main/java/org/apache/jackrabbit/oak/api/jmx/package-info.java
    jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/commons/jmx/AbstractCheckpointMBean.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentCheckpointMBean.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentCheckpointMBean.java

Modified: jackrabbit/oak/trunk/oak-api/src/main/java/org/apache/jackrabbit/oak/api/jmx/CheckpointMBean.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-api/src/main/java/org/apache/jackrabbit/oak/api/jmx/CheckpointMBean.java?rev=1797739&r1=1797738&r2=1797739&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-api/src/main/java/org/apache/jackrabbit/oak/api/jmx/CheckpointMBean.java (original)
+++ jackrabbit/oak/trunk/oak-api/src/main/java/org/apache/jackrabbit/oak/api/jmx/CheckpointMBean.java Tue Jun  6 06:45:20 2017
@@ -19,6 +19,7 @@
 
 package org.apache.jackrabbit.oak.api.jmx;
 
+import javax.management.openmbean.CompositeData;
 import javax.management.openmbean.TabularData;
 
 import aQute.bnd.annotation.ProviderType;
@@ -38,6 +39,11 @@ public interface CheckpointMBean {
     TabularData listCheckpoints();
 
     /**
+     * @return creation information about oldest checkpoint.
+     */
+    CompositeData getOldestCheckpointCreationTime();
+
+    /**
      * Create a new checkpoint with the given {@code lifetime}.
      * See {@code org.apache.jackrabbit.oak.spi.state.NodeStore#checkpoint}
      * @param lifetime

Modified: jackrabbit/oak/trunk/oak-api/src/main/java/org/apache/jackrabbit/oak/api/jmx/package-info.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-api/src/main/java/org/apache/jackrabbit/oak/api/jmx/package-info.java?rev=1797739&r1=1797738&r2=1797739&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-api/src/main/java/org/apache/jackrabbit/oak/api/jmx/package-info.java (original)
+++ jackrabbit/oak/trunk/oak-api/src/main/java/org/apache/jackrabbit/oak/api/jmx/package-info.java Tue Jun  6 06:45:20 2017
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-@Version("4.4.2")
+@Version("4.5.0")
 @Export(optional = "provide:=true")
 package org.apache.jackrabbit.oak.api.jmx;
 

Modified: jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/commons/jmx/AbstractCheckpointMBean.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/commons/jmx/AbstractCheckpointMBean.java?rev=1797739&r1=1797738&r2=1797739&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/commons/jmx/AbstractCheckpointMBean.java (original)
+++ jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/commons/jmx/AbstractCheckpointMBean.java Tue Jun  6 06:45:20 2017
@@ -21,18 +21,22 @@ package org.apache.jackrabbit.oak.common
 
 import static javax.management.openmbean.SimpleType.STRING;
 
+import java.util.Date;
 import java.util.Map;
 import java.util.Map.Entry;
 
 import javax.management.openmbean.ArrayType;
+import javax.management.openmbean.CompositeData;
 import javax.management.openmbean.CompositeDataSupport;
 import javax.management.openmbean.CompositeType;
 import javax.management.openmbean.OpenDataException;
 import javax.management.openmbean.OpenType;
+import javax.management.openmbean.SimpleType;
 import javax.management.openmbean.TabularData;
 import javax.management.openmbean.TabularDataSupport;
 import javax.management.openmbean.TabularType;
 
+import com.google.common.collect.Maps;
 import org.apache.jackrabbit.oak.api.jmx.CheckpointMBean;
 
 /**
@@ -88,6 +92,26 @@ public abstract class AbstractCheckpoint
         } catch (OpenDataException e) {
             throw new IllegalStateException(e);
         }
+    }
+
+    protected abstract long getOldestCheckpointCreationTimestamp();
+
+    @Override
+    public CompositeData getOldestCheckpointCreationTime() {
+        try {
+            Map<String, Object> values = Maps.newHashMap();
+            long timestamp = getOldestCheckpointCreationTimestamp();
+            values.put("timestamp", timestamp);
+            values.put("time", new Date(timestamp));
+            CompositeDataSupport csd = new CompositeDataSupport(
+              new CompositeType("OldestCheckpointTime", "Creation time of oldest checkpoint",
+                      new String[]{"timestamp", "time"}, new String[]{"epoch timestamp", "human readable date"},
+                      new OpenType[]{SimpleType.LONG, SimpleType.DATE}), values);
+
+            return csd;
+        } catch (OpenDataException e) {
+            throw new IllegalStateException(e);
+        }
     }
 
     /**

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentCheckpointMBean.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentCheckpointMBean.java?rev=1797739&r1=1797738&r2=1797739&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentCheckpointMBean.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentCheckpointMBean.java Tue Jun  6 06:45:20 2017
@@ -55,6 +55,18 @@ public class DocumentCheckpointMBean ext
     }
 
     @Override
+    protected long getOldestCheckpointCreationTimestamp() {
+        Map<Revision, Info> checkpoints = store.getCheckpoints().getCheckpoints();
+
+        long minTimestamp = Long.MAX_VALUE;
+        for (Entry<Revision, Info> checkpoint : checkpoints.entrySet()) {
+            minTimestamp = Math.min(minTimestamp, checkpoint.getKey().getTimestamp());
+        }
+
+        return (minTimestamp==Long.MAX_VALUE)?0:minTimestamp;
+    }
+
+    @Override
     public String createCheckpoint(long lifetime) {
         return store.checkpoint(lifetime);
     }

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentCheckpointMBean.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentCheckpointMBean.java?rev=1797739&r1=1797738&r2=1797739&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentCheckpointMBean.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentCheckpointMBean.java Tue Jun  6 06:45:20 2017
@@ -51,6 +51,19 @@ public class SegmentCheckpointMBean exte
         }
     }
 
+    @Override
+    protected long getOldestCheckpointCreationTimestamp() {
+        long minTimestamp = Long.MAX_VALUE;
+        for (ChildNodeEntry cne : store.getCheckpoints().getChildNodeEntries()) {
+            NodeState checkpoint = cne.getNodeState();
+            PropertyState p = checkpoint.getProperty("created");
+            if (p != null) {
+                minTimestamp = Math.min(minTimestamp, p.getValue(Type.LONG));
+            }
+        }
+        return (minTimestamp==Long.MAX_VALUE)?0:minTimestamp;
+    }
+
     private static String getDate(NodeState checkpoint, String name) {
         PropertyState p = checkpoint.getProperty(name);
         if (p == null) {