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


Reply via email to