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