Author: mduerig
Date: Thu Nov 24 17:03:37 2016
New Revision: 1771191

URL: http://svn.apache.org/viewvc?rev=1771191&view=rev
Log:
OAK-5161: Improve logging of compaction cycles
Add more information to compaction cycles and reduce logging for removed files.
Credits to Valentin Oltenau for an initial patch

Modified:
    
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileReaper.java
    
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
    
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCompactionIT.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileReaper.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileReaper.java?rev=1771191&r1=1771190&r2=1771191&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileReaper.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileReaper.java
 Thu Nov 24 17:03:37 2016
@@ -17,12 +17,16 @@
 
 package org.apache.jackrabbit.oak.segment.file;
 
+import static com.google.common.collect.Lists.newArrayList;
+
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
+import com.google.common.base.Joiner;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -63,16 +67,19 @@ class FileReaper {
         }
 
         Set<File> redo = new HashSet<>();
-
+        List<File> removed = newArrayList();
         for (File file : reap) {
             try {
                 Files.deleteIfExists(file.toPath());
-                logger.info("Removed file {}", file);
+                removed.add(file);
             } catch (IOException e) {
                 logger.warn(String.format("Unable to remove file %s", file), 
e);
                 redo.add(file);
             }
         }
+        if (!removed.isEmpty()) {
+            logger.info("Removed files {}", Joiner.on(",").join(removed));
+        }
 
         if (redo.isEmpty()) {
             return;

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java?rev=1771191&r1=1771190&r2=1771191&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
 Thu Nov 24 17:03:37 2016
@@ -67,6 +67,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import com.google.common.base.Function;
+import com.google.common.base.Joiner;
 import com.google.common.base.Predicate;
 import com.google.common.base.Stopwatch;
 import com.google.common.base.Supplier;
@@ -819,8 +820,8 @@ public class FileStore extends AbstractF
                     return -newGeneration;
                 }
 
-                gcListener.info("TarMK GC #{}: compacted {} to {}",
-                        GC_COUNT, before.getRecordId(), after.getRecordId());
+                gcListener.info("TarMK GC #{}: compaction cycle 0 completed in 
{} ({} ms). Compacted {} to {}",
+                        GC_COUNT, watch, watch.elapsed(MILLISECONDS), 
before.getRecordId(), after.getRecordId());
 
                 int cycles = 0;
                 boolean success = false;
@@ -834,6 +835,7 @@ public class FileStore extends AbstractF
                                     "Compacting these commits. Cycle {} of {}",
                             GC_COUNT, cycles, gcOptions.getRetryCount());
                     gcListener.updateStatus(COMPACTION_RETRY.message() + 
cycles);
+                    Stopwatch cycleWatch = Stopwatch.createStarted();
                     
                     SegmentNodeState head = getHead();
                     after = compact(head, writer, cancel);
@@ -842,8 +844,9 @@ public class FileStore extends AbstractF
                         return -newGeneration;
                     }
 
-                    gcListener.info("TarMK GC #{}: compacted {} against {} to 
{}",
-                            GC_COUNT, head.getRecordId(), 
before.getRecordId(), after.getRecordId());
+                    gcListener.info("TarMK GC #{}: compaction cycle {} 
completed in {} ({} ms). Compacted {} against {} to {}",
+                            GC_COUNT, cycles, cycleWatch, 
cycleWatch.elapsed(MILLISECONDS),
+                            head.getRecordId(), before.getRecordId(), 
after.getRecordId());
                     before = head;
                 }
 
@@ -852,19 +855,27 @@ public class FileStore extends AbstractF
                             GC_COUNT, cycles);
                     int forceTimeout = gcOptions.getForceTimeout();
                     if (forceTimeout > 0) {
-                        gcListener.info("TarMK GC #{}: trying to force compact 
remaining commits for {} seconds",
+                        gcListener.info("TarMK GC #{}: trying to force compact 
remaining commits for {} seconds. " +
+                                "Concurrent commits to the store will be 
blocked.",
                                 GC_COUNT, forceTimeout);
                         
gcListener.updateStatus(COMPACTION_FORCE_COMPACT.message());
+                        Stopwatch forceWatch = Stopwatch.createStarted();
                         
                         cycles++;
                         success = forceCompact(writer, or(cancel, 
timeOut(forceTimeout, SECONDS)));
-                        if (!success) {
+                        if (success) {
+                            gcListener.info("TarMK GC #{}: compaction 
succeeded to force compact remaining commits " +
+                                            "after {} ({} ms).",
+                                            GC_COUNT, forceWatch, 
forceWatch.elapsed(MILLISECONDS));
+                        } else {
                             if (cancel.get()) {
-                                gcListener.warn("TarMK GC #{}: compaction 
failed to force compact remaining commits. " +
-                                        "Compaction was cancelled: {}.", 
GC_COUNT, cancel);
+                                gcListener.warn("TarMK GC #{}: compaction 
failed to force compact remaining commits " +
+                                        "after {} ({} ms). Compaction was 
cancelled: {}.",
+                                        GC_COUNT, forceWatch, 
forceWatch.elapsed(MILLISECONDS), cancel);
                             } else {
                                 gcListener.warn("TarMK GC #{}: compaction 
failed to force compact remaining commits. " +
-                                        "Most likely compaction didn't get 
exclusive access to the store.", GC_COUNT);
+                                        "after {} ({} ms). Most likely 
compaction didn't get exclusive access to the store.",
+                                        GC_COUNT, forceWatch, 
forceWatch.elapsed(MILLISECONDS));
                             }
                         }
                     }
@@ -1085,9 +1096,9 @@ public class FileStore extends AbstractF
             for (TarReader oldReader : oldReaders) {
                 closeAndLogOnFail(oldReader);
                 File file = oldReader.getFile();
-                gcListener.info("TarMK GC #{}: cleanup marking file for 
deletion: {}", GC_COUNT, file.getName());
                 toRemove.addLast(file);
             }
+            gcListener.info("TarMK GC #{}: cleanup marking files for deletion: 
{}", GC_COUNT, toFileNames(toRemove));
 
             long finalSize = size();
             long reclaimedSize = initialSize - afterCleanupSize;
@@ -1102,6 +1113,14 @@ public class FileStore extends AbstractF
             return toRemove;
         }
 
+        private String toFileNames(@Nonnull List<File> files) {
+            if (files.isEmpty()) {
+                return "none";
+            } else {
+                return Joiner.on(",").join(files);
+            }
+        }
+
         private void collectBulkReferences(Set<UUID> bulkRefs) {
             Set<UUID> refs = newHashSet();
             for (SegmentId id : tracker.getReferencedSegmentIds()) {

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCompactionIT.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCompactionIT.java?rev=1771191&r1=1771190&r2=1771191&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCompactionIT.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCompactionIT.java
 Thu Nov 24 17:03:37 2016
@@ -155,7 +155,7 @@ public class SegmentCompactionIT {
     private volatile int nodeAddRatio = 40;
     private volatile int addStringRatio = 20;
     private volatile int addBinaryRatio = 0;
-    private volatile int compactionInterval = 60;
+    private volatile int compactionInterval = 2;
     private volatile boolean stopping;
     private volatile Reference rootReference;
     private volatile long fileStoreSize;


Reply via email to