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 11:35:53 UTC

svn commit: r1797778 - 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-lucene/sr...

Author: catholicon
Date: Tue Jun  6 11:35:52 2017
New Revision: 1797778

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

Simplify checkpoint mbean method - expose 2 methods now: one for timestamp and another for human redable date

OAK-2808: Active deletion of 'deleted' Lucene index files from DataStore without relying on full scale Blob GC

Refactor wrt change in checkpoint mbean method simplification. Also minor change to not flush files if there were no blobs that were deleted.

Modified:
    jackrabbit/oak/trunk/oak-api/src/main/java/org/apache/jackrabbit/oak/api/jmx/CheckpointMBean.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-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/ActiveDeletedBlobCollectorFactory.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=1797778&r1=1797777&r2=1797778&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 11:35:52 2017
@@ -19,11 +19,12 @@
 
 package org.apache.jackrabbit.oak.api.jmx;
 
-import javax.management.openmbean.CompositeData;
 import javax.management.openmbean.TabularData;
 
 import aQute.bnd.annotation.ProviderType;
 
+import java.util.Date;
+
 /**
  * MBean for managing {@code org.apache.jackrabbit.oak.spi.state.NodeStore#checkpoint checkpoints}.
  */
@@ -39,9 +40,14 @@ public interface CheckpointMBean {
     TabularData listCheckpoints();
 
     /**
-     * @return creation information about oldest checkpoint.
+     * @return creation timestamp of oldest checkpoint.
+     */
+    long getOldestCheckpointCreationTimestamp();
+
+    /**
+     * @return creation date of oldest checkpoint.
      */
-    CompositeData getOldestCheckpointCreationTime();
+    Date getOldestCheckpointCreationDate();
 
     /**
      * Create a new checkpoint with the given {@code lifetime}.

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=1797778&r1=1797777&r2=1797778&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 11:35:52 2017
@@ -26,17 +26,14 @@ 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;
 
 /**
@@ -94,24 +91,12 @@ public abstract class AbstractCheckpoint
         }
     }
 
-    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);
+    public abstract long getOldestCheckpointCreationTimestamp();
 
-            return csd;
-        } catch (OpenDataException e) {
-            throw new IllegalStateException(e);
-        }
+    @Override
+    public Date getOldestCheckpointCreationDate() {
+        return new Date(getOldestCheckpointCreationTimestamp());
     }
 
     /**

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=1797778&r1=1797777&r2=1797778&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 11:35:52 2017
@@ -55,7 +55,7 @@ public class DocumentCheckpointMBean ext
     }
 
     @Override
-    protected long getOldestCheckpointCreationTimestamp() {
+    public long getOldestCheckpointCreationTimestamp() {
         Map<Revision, Info> checkpoints = store.getCheckpoints().getCheckpoints();
 
         long minTimestamp = Long.MAX_VALUE;

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java?rev=1797778&r1=1797777&r2=1797778&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java Tue Jun  6 11:35:52 2017
@@ -34,7 +34,6 @@ import java.util.concurrent.atomic.Atomi
 
 import javax.annotation.Nonnull;
 import javax.management.NotCompliantMBeanException;
-import javax.management.openmbean.CompositeData;
 
 import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
@@ -736,21 +735,11 @@ public class LuceneIndexProviderService
     private long getSafeTimestampForDeletedBlobs(CheckpointMBean checkpointMBean) {
         long timestamp = clock.getTime() - TimeUnit.SECONDS.toMillis(MIN_BLOB_AGE_TO_ACTIVELY_DELETE);
 
-        CompositeData data = checkpointMBean.getOldestCheckpointCreationTime();
-        Object timestampObj = data.get("timestamp");
-        String timestampStr = null;
-        if (timestampObj != null) {
-            timestampStr = timestampObj.toString();
-        }
-        try {
-            long minCheckpointTimestamp = Long.parseLong(timestampStr);
-            if (minCheckpointTimestamp < timestamp) {
-                log.info("Oldest checkpoint time data ({}) is older than buffer period for deleted blobs." +
-                        " Using that instead", data);
-                timestamp = minCheckpointTimestamp;
-            }
-        } catch (NumberFormatException nfe) {
-            log.warn("Couldn't find timestamp in checkpoint mbean output: {}", data);
+        long minCheckpointTimestamp = checkpointMBean.getOldestCheckpointCreationTimestamp();
+        if (minCheckpointTimestamp < timestamp) {
+            log.info("Oldest checkpoint timestamp ({}) is older than buffer period ({}) for deleted blobs." +
+                    " Using that instead", minCheckpointTimestamp, timestamp);
+            timestamp = minCheckpointTimestamp;
         }
 
         return timestamp;

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/ActiveDeletedBlobCollectorFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/ActiveDeletedBlobCollectorFactory.java?rev=1797778&r1=1797777&r2=1797778&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/ActiveDeletedBlobCollectorFactory.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/ActiveDeletedBlobCollectorFactory.java Tue Jun  6 11:35:52 2017
@@ -315,13 +315,15 @@ public class ActiveDeletedBlobCollectorF
                 while (deletedBlobs.peek() != null) {
                     localDeletedBlobs.add(deletedBlobs.poll());
                 }
-                File outFile = new File(rootDirectory, getBlobFileName());
-                try {
-                    long start = PERF_LOG.start();
-                    FileUtils.writeLines(outFile, localDeletedBlobs, true);
-                    PERF_LOG.end(start, 1, "Flushing deleted blobs");
-                } catch (IOException e) {
-                    LOG.error("Couldn't write out to " + outFile, e);
+                if (localDeletedBlobs.size() > 0) {
+                    File outFile = new File(rootDirectory, getBlobFileName());
+                    try {
+                        long start = PERF_LOG.start();
+                        FileUtils.writeLines(outFile, localDeletedBlobs, true);
+                        PERF_LOG.end(start, 1, "Flushing deleted blobs");
+                    } catch (IOException e) {
+                        LOG.error("Couldn't write out to " + outFile, e);
+                    }
                 }
             }
 

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=1797778&r1=1797777&r2=1797778&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 11:35:52 2017
@@ -52,7 +52,7 @@ public class SegmentCheckpointMBean exte
     }
 
     @Override
-    protected long getOldestCheckpointCreationTimestamp() {
+    public long getOldestCheckpointCreationTimestamp() {
         long minTimestamp = Long.MAX_VALUE;
         for (ChildNodeEntry cne : store.getCheckpoints().getChildNodeEntries()) {
             NodeState checkpoint = cne.getNodeState();