Author: catholicon
Date: Wed Nov 16 06:48:16 2016
New Revision: 1769930
URL: http://svn.apache.org/viewvc?rev=1769930&view=rev
Log:
OAK-3001: Simplify JournalGarbageCollector using a dedicated timestamp property
The commit at r1769922 had remove API with inclusive bounds. Otoh, the workflow
that we're trying to ease is query (exclusive)->remove.
So, we're changing our contract to also have exclusive bounds. Updating
implementations and tests accordingly too.
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java?rev=1769930&r1=1769929&r2=1769930&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java
Wed Nov 16 06:48:16 2016
@@ -205,7 +205,7 @@ public interface DocumentStore {
/**
* Batch remove documents where the given "indexed property" is within the
given
- * range (inclusive) - {@code [startValue, endValue]}.
+ * range (exclusive) - {@code (startValue, endValue)}.
* <p>
* The indexed property is a {@link Long} value and numeric comparison
applies.
* <p>
@@ -220,8 +220,8 @@ public interface DocumentStore {
* @param <T> the document type
* @param collection the collection.
* @param indexedProperty the name of the indexed property
- * @param startValue the minimum value of the indexed property
- * @param endValue the maximum value of the indexed property
+ * @param startValue the minimum value of the indexed property (exclusive)
+ * @param endValue the maximum value of the indexed property (exclusive)
* @return the number of removed documents.
* @throws DocumentStoreException if the operation failed. E.g. because of
* an I/O error.
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java?rev=1769930&r1=1769929&r2=1769930&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java
Wed Nov 16 06:48:16 2016
@@ -220,7 +220,7 @@ public class MemoryDocumentStore impleme
@Override
public boolean apply(@Nullable T doc) {
Long modified = Utils.asLong((Number)
doc.get(indexedProperty));
- return startValue <= modified && modified <= endValue;
+ return startValue < modified && modified < endValue;
}
}).clear();
} finally {
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java?rev=1769930&r1=1769929&r2=1769930&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
Wed Nov 16 06:48:16 2016
@@ -774,13 +774,13 @@ public class MongoDocumentStore implemen
long start = PERFLOG.start();
try {
QueryBuilder queryBuilder = QueryBuilder.start(indexedProperty);
- queryBuilder.greaterThanEquals(startValue);
- queryBuilder.lessThanEquals(endValue);
+ queryBuilder.greaterThan(startValue);
+ queryBuilder.lessThan(endValue);
try {
num = dbCollection.remove(queryBuilder.get()).getN();
} catch (Exception e) {
throw DocumentStoreException.convert(e, "Remove failed for " +
collection + ": " +
- indexedProperty + " in [" + startValue + ", " + endValue +
"]");
+ indexedProperty + " in (" + startValue + ", " + endValue +
")");
} finally {
if (num > 0 && collection == Collection.NODES) {
// this method is currently being used only for Journal
collection while GC.
@@ -792,7 +792,7 @@ public class MongoDocumentStore implemen
}
}
} finally {
- PERFLOG.end(start, 1, "remove from {}: {} in [{}, {}]",
collection, indexedProperty, startValue, endValue);
+ PERFLOG.end(start, 1, "remove from {}: {} in ({}, {})",
collection, indexedProperty, startValue, endValue);
}
return num;
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java?rev=1769930&r1=1769929&r2=1769930&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
Wed Nov 16 06:48:16 2016
@@ -1588,16 +1588,17 @@ public class RDBDocumentStore implements
}
private <T extends Document> int delete(Collection<T> collection,
- String indexedProperty, long
startVal, long endVal) {
+ String indexedProperty, long
startValue, long endValue) {
int numDeleted = 0;
RDBTableMetaData tmd = getTable(collection);
Connection connection = null;
try {
connection = this.ch.getRWConnection();
- numDeleted = db.delete(connection, tmd, indexedProperty, startVal,
endVal);
+ numDeleted = db.delete(connection, tmd, indexedProperty,
startValue, endValue);
connection.commit();
} catch (Exception ex) {
- throw DocumentStoreException.convert(ex, "deleting " + collection
+ ": " + indexedProperty + " in [" + startVal + ", " + endVal + "]");
+ throw DocumentStoreException.convert(ex, "deleting " + collection
+ ": " +
+ indexedProperty + " in (" + startValue + ", " + endValue +
")");
} finally {
this.ch.closeConnection(connection);
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java?rev=1769930&r1=1769929&r2=1769930&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java
Wed Nov 16 06:48:16 2016
@@ -225,17 +225,18 @@ public class RDBDocumentStoreJDBC {
}
}
- public int delete(Connection connection, RDBTableMetaData tmd, String
property, long startVal, long endVal)
+ public int delete(Connection connection, RDBTableMetaData tmd, String
property, long startValue, long endValue)
throws SQLException, DocumentStoreException {
if (!MODIFIED.equals(property)) {
- throw new DocumentStoreException("Unsupported condition: " +
property + " in [" + startVal + ", " + endVal + "]");
+ throw new DocumentStoreException("Unsupported condition: " +
+ property + " in (" + startValue + ", " + endValue +
")");
}
PreparedStatement stmt = connection.prepareStatement("delete from " +
tmd.getName() +
- " where MODIFIED >= ? AND MODIFIED <= ?");
+ " where MODIFIED > ? AND MODIFIED < ?");
try {
int i = 1;
- stmt.setLong(i++, startVal);
- stmt.setLong(i++, endVal);
+ stmt.setLong(i++, startValue);
+ stmt.setLong(i++, endValue);
return stmt.executeUpdate();
} finally {
stmt.close();
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java?rev=1769930&r1=1769929&r2=1769930&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java
Wed Nov 16 06:48:16 2016
@@ -221,7 +221,7 @@ public class TimingDocumentStoreWrapper
updateAndLogTimes("remove", start, 0, 0);
if (logCommonCall()) {
logCommonCall(start, "remove " + collection + ";
indexedProperty" + indexedProperty +
- "; range - [" + startValue + ", " + endValue + "]");
+ "; range - (" + startValue + ", " + endValue + ")");
}
return result;
} catch (Exception e) {
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java?rev=1769930&r1=1769929&r2=1769930&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java
Wed Nov 16 06:48:16 2016
@@ -381,13 +381,13 @@ public class BasicDocumentStoreTest exte
super.ds.create(Collection.JOURNAL, Collections.singletonList(up));
}
- assertEquals("Number of entries removed didn't match", 5,
+ assertEquals("Number of entries removed didn't match", 3,
ds.remove(Collection.JOURNAL, "_modified", 20, 24));
assertEquals("Number of entries removed didn't match", 0,
ds.remove(Collection.JOURNAL, "_modified", 20, 24));
- assertEquals("Number of entries removed didn't match", 5,
+ assertEquals("Number of entries removed didn't match", 4,
ds.remove(Collection.JOURNAL, "_modified", -1, 5));
assertEquals("Number of entries removed didn't match", 5,
@@ -400,7 +400,7 @@ public class BasicDocumentStoreTest exte
assertEquals("Number of entries removed didn't match", 0,
ds.remove(Collection.JOURNAL, "_modified", 31, 40));
- assertEquals("Number of entries removed didn't match", 3,
+ assertEquals("Number of entries removed didn't match", 2,
ds.remove(Collection.JOURNAL, "_modified", 28, 40));
}