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 re...@apache.org on 2017/10/12 15:44:56 UTC

svn commit: r1811985 - in /jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document: SplitDocumentCleanUp.java VersionGarbageCollector.java

Author: reschke
Date: Thu Oct 12 15:44:56 2017
New Revision: 1811985

URL: http://svn.apache.org/viewvc?rev=1811985&view=rev
Log:
OAK-6822: RevisionGC: measure timeToDeleteSplitDocs separately (when possible)

Modified:
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/SplitDocumentCleanUp.java
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java

Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/SplitDocumentCleanUp.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/SplitDocumentCleanUp.java?rev=1811985&r1=1811984&r2=1811985&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/SplitDocumentCleanUp.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/SplitDocumentCleanUp.java Thu Oct 12 15:44:56 2017
@@ -75,17 +75,35 @@ public class SplitDocumentCleanUp implem
         idsToBeDeleted.add(id);
         // proceed to delete early if we reach DELETE_BATCH_SIZE
         if (idsToBeDeleted.size() >= DELETE_BATCH_SIZE) {
-            store.remove(NODES, idsToBeDeleted);
+            removeFromDocumentStore(idsToBeDeleted);
             deleteCount += idsToBeDeleted.size();
             idsToBeDeleted.clear();
         }
     }
 
     protected int deleteSplitDocuments() {
-        store.remove(NODES, idsToBeDeleted);
+        removeFromDocumentStore(idsToBeDeleted);
         return idsToBeDeleted.size() + deleteCount;
     }
 
+    private void removeFromDocumentStore(List<String> ids) {
+        try {
+            stats.deleteSplitDocs.start();
+            store.remove(Collection.NODES, ids);
+        } finally {
+            stats.deleteSplitDocs.stop();
+        }
+    }
+
+    private void removeFromDocumentStore(String id) {
+        try {
+            stats.deleteSplitDocs.start();
+            store.remove(Collection.NODES, id);
+        } finally {
+            stats.deleteSplitDocs.stop();
+        }
+    }
+
     private void disconnect(NodeDocument splitDoc) {
         String splitId = splitDoc.getId();
         String mainId = Utils.getIdFromPath(splitDoc.getMainPath());
@@ -128,7 +146,7 @@ public class SplitDocumentCleanUp implem
                 && old.getPreviousRanges().containsKey(rev)) {
             // this was the last reference on an intermediate split doc
             disconnect(old);
-            store.remove(NODES, old.getId());
+            removeFromDocumentStore(old.getId());
             stats.intermediateSplitDocGCCount++;
         }
     }

Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java?rev=1811985&r1=1811984&r2=1811985&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java Thu Oct 12 15:44:56 2017
@@ -261,30 +261,43 @@ public class VersionGarbageCollector {
         final Stopwatch checkDeletedDocs = Stopwatch.createUnstarted();
         final Stopwatch deleteDeletedDocs = Stopwatch.createUnstarted();
         final Stopwatch collectAndDeleteSplitDocs = Stopwatch.createUnstarted();
+        final Stopwatch deleteSplitDocs = Stopwatch.createUnstarted();
         final Stopwatch sortDocIds = Stopwatch.createUnstarted();
         final Stopwatch updateResurrectedDocuments = Stopwatch.createUnstarted();
         long collectDeletedDocsElapsed, checkDeletedDocsElapsed, deleteDeletedDocsElapsed, collectAndDeleteSplitDocsElapsed,
-                sortDocIdsElapsed, updateResurrectedDocumentsElapsed;
+                deleteSplitDocsElapsed, sortDocIdsElapsed, updateResurrectedDocumentsElapsed;
 
         @Override
         public String toString() {
             String timings;
-            String fmt = "timeToCollectDeletedDocs=%s, timeToCheckDeletedDocs=%s, timeToSortDocIds=%s, timeTakenToUpdateResurrectedDocs=%s, timeTakenToDeleteDeletedDocs=%s, timeTakenToCollectAndDeleteSplitDocs=%s";
+            String fmt = "timeToCollectDeletedDocs=%s, timeToCheckDeletedDocs=%s, timeToSortDocIds=%s, timeTakenToUpdateResurrectedDocs=%s, timeTakenToDeleteDeletedDocs=%s, timeTakenToCollectAndDeleteSplitDocs=%s%s";
 
             // aggregated timings?
             if (iterationCount > 0) {
+                String timeDeletingSplitDocs = "";
+                if (deleteSplitDocsElapsed > 0) {
+                    timeDeletingSplitDocs = String.format(" (of which %s deleting)",
+                            df.format(deleteSplitDocsElapsed, MICROSECONDS));
+                }
                 timings = String.format(fmt, df.format(collectDeletedDocsElapsed, MICROSECONDS),
                         df.format(checkDeletedDocsElapsed, MICROSECONDS), df.format(sortDocIdsElapsed, MICROSECONDS),
                         df.format(updateResurrectedDocumentsElapsed, MICROSECONDS),
                         df.format(deleteDeletedDocsElapsed, MICROSECONDS),
-                        df.format(collectAndDeleteSplitDocsElapsed, MICROSECONDS));
+                        df.format(collectAndDeleteSplitDocsElapsed, MICROSECONDS),
+                        timeDeletingSplitDocs);
             } else {
+                String timeDeletingSplitDocs = "";
+                if (deleteSplitDocs.elapsed(MICROSECONDS) > 0) {
+                    timeDeletingSplitDocs = String.format(" (of which %s deleting)",
+                            df.format(deleteSplitDocs.elapsed(MICROSECONDS), MICROSECONDS));
+                }
                 timings = String.format(fmt, df.format(collectDeletedDocs.elapsed(MICROSECONDS), MICROSECONDS),
                         df.format(checkDeletedDocs.elapsed(MICROSECONDS), MICROSECONDS),
                         df.format(sortDocIds.elapsed(MICROSECONDS), MICROSECONDS),
                         df.format(updateResurrectedDocuments.elapsed(MICROSECONDS), MICROSECONDS),
                         df.format(deleteDeletedDocs.elapsed(MICROSECONDS), MICROSECONDS),
-                        df.format(collectAndDeleteSplitDocs.elapsed(MICROSECONDS), MICROSECONDS));
+                        df.format(collectAndDeleteSplitDocs.elapsed(MICROSECONDS), MICROSECONDS),
+                        timeDeletingSplitDocs);
             }
 
             return "VersionGCStats{" +
@@ -316,6 +329,7 @@ public class VersionGarbageCollector {
                 this.checkDeletedDocsElapsed += run.checkDeletedDocsElapsed;
                 this.deleteDeletedDocsElapsed += run.deleteDeletedDocsElapsed;
                 this.collectAndDeleteSplitDocsElapsed += run.collectAndDeleteSplitDocsElapsed;
+                this.deleteSplitDocsElapsed += run.deleteSplitDocsElapsed;
                 this.sortDocIdsElapsed += run.sortDocIdsElapsed;
                 this.updateResurrectedDocumentsElapsed += run.updateResurrectedDocumentsElapsed;
             } else {
@@ -324,6 +338,7 @@ public class VersionGarbageCollector {
                 this.checkDeletedDocsElapsed += run.checkDeletedDocs.elapsed(MICROSECONDS);
                 this.deleteDeletedDocsElapsed += run.deleteDeletedDocs.elapsed(MICROSECONDS);
                 this.collectAndDeleteSplitDocsElapsed += run.collectAndDeleteSplitDocs.elapsed(MICROSECONDS);
+                this.deleteSplitDocsElapsed += run.deleteSplitDocs.elapsed(MICROSECONDS);
                 this.sortDocIdsElapsed += run.sortDocIds.elapsed(MICROSECONDS);
                 this.updateResurrectedDocumentsElapsed += run.updateResurrectedDocuments.elapsed(MICROSECONDS);
             }