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();


Reply via email to