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 ju...@apache.org on 2014/04/22 21:38:51 UTC

svn commit: r1589265 - in /jackrabbit/oak/branches/1.0: ./ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/

Author: jukka
Date: Tue Apr 22 19:38:51 2014
New Revision: 1589265

URL: http://svn.apache.org/r1589265
Log:
1.0: Merged revisoin 1589263 (OAK-1758)

Modified:
    jackrabbit/oak/branches/1.0/   (props changed)
    jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentId.java
    jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java
    jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java
    jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java

Propchange: jackrabbit/oak/branches/1.0/
------------------------------------------------------------------------------
  Merged /jackrabbit/oak/trunk:r1589263

Modified: jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentId.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentId.java?rev=1589265&r1=1589264&r2=1589265&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentId.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentId.java Tue Apr 22 19:38:51 2014
@@ -18,11 +18,17 @@ package org.apache.jackrabbit.oak.plugin
 
 import java.util.UUID;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 /**
  * Segment identifier.
  */
 public class SegmentId implements Comparable<SegmentId> {
 
+    /** Logger instance */
+    private static final Logger log = LoggerFactory.getLogger(SegmentId.class);
+
     /**
      * Checks whether this is a data segment identifier.
      *
@@ -87,6 +93,7 @@ public class SegmentId implements Compar
             synchronized (this) {
                 segment = this.segment;
                 if (segment == null) {
+                    log.debug("Loading segment {}", this);
                     segment = tracker.getSegment(this);
                 }
             }

Modified: jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java?rev=1589265&r1=1589264&r2=1589265&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java Tue Apr 22 19:38:51 2014
@@ -21,13 +21,14 @@ import static com.google.common.collect.
 import static com.google.common.collect.Sets.newHashSet;
 import static com.google.common.collect.Sets.newIdentityHashSet;
 
-import java.nio.ByteBuffer;
 import java.security.SecureRandom;
 import java.util.LinkedList;
 import java.util.Queue;
 import java.util.Set;
 
 import org.apache.jackrabbit.oak.plugins.blob.ReferenceCollector;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Tracker of references to segment identifiers and segment instances
@@ -35,6 +36,10 @@ import org.apache.jackrabbit.oak.plugins
  */
 public class SegmentTracker {
 
+    /** Logger instance */
+    private static final Logger log =
+            LoggerFactory.getLogger(SegmentTracker.class);
+
     private static final long MSB_MASK = ~(0xfL << 12);
 
     private static final long VERSION = (0x4L << 12);
@@ -109,15 +114,29 @@ public class SegmentTracker {
         id.setSegment(segment);
 
         synchronized (this) {
+            long size = segment.getCacheSize();
+
             segments.addFirst(segment);
-            currentSize += segment.getCacheSize();
+            currentSize += size;
+
+            log.debug("Added segment {} to tracker cache ({} bytes)",
+                    id, size);
+
             while (currentSize > cacheSize && segments.size() > 1) {
                 Segment last = segments.removeLast();
                 if (last.accessed()) {
                     segments.addFirst(last);
+                    log.debug("Segment {} was recently used, keeping in cache",
+                            segment.getSegmentId());
                 } else {
-                    last.getSegmentId().setSegment(null);
-                    currentSize -= last.getCacheSize();
+                    SegmentId lastId = last.getSegmentId();
+                    long lastSize = last.getCacheSize();
+
+                    lastId.setSegment(null);
+                    currentSize -= lastSize;
+
+                    log.debug("Removed segment {} from tracker cache ({} bytes)",
+                            lastId, lastSize);
                 }
             }
         }

Modified: jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java?rev=1589265&r1=1589264&r2=1589265&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java Tue Apr 22 19:38:51 2014
@@ -68,11 +68,16 @@ import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.io.ByteStreams;
 import com.google.common.io.Closeables;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class SegmentWriter {
 
+    /** Logger instance */
+    private static final Logger log =
+            LoggerFactory.getLogger(SegmentWriter.class);
+
     static final int BLOCK_SIZE = 1 << 12; // 4kB
 
     private static byte[] createNewBuffer() {
@@ -99,8 +104,6 @@ public class SegmentWriter {
 
     private final SegmentStore store;
 
-    private final Logger log = LoggerFactory.getLogger(getClass());
-
     /**
      * Cache of recently stored string and template records, used to
      * avoid storing duplicates of frequently occurring data.
@@ -206,6 +209,7 @@ public class SegmentWriter {
             }
 
             SegmentId id = segment.getSegmentId();
+            log.debug("Writing data segment {} ({} bytes)", id, length);
             store.writeSegment(id, buffer, buffer.length - length, length);
 
             // Keep this segment in memory as it's likely to be accessed soon
@@ -702,11 +706,11 @@ public class SegmentWriter {
         String reference = blob.getReference();
         if (reference != null && store.getBlobStore() != null) {
             String blobId = store.getBlobStore().getBlobId(reference);
-            if(blobId != null) {
+            if (blobId != null) {
                 RecordId id = writeValueRecord(blobId);
                 return new SegmentBlob(id);
-            }else{
-                log.debug("No blobId found matching reference [{}]", reference);
+            } else {
+                log.debug("No blob found for reference {}, inlining...", reference);
             }
         }
 
@@ -759,6 +763,7 @@ public class SegmentWriter {
         while (n != 0) {
             SegmentId bulkId = store.getTracker().newBulkSegmentId();
             int len = align(n);
+            log.debug("Writing bulk segment {} ({} bytes)", bulkId, n);
             store.writeSegment(bulkId, data, 0, len);
 
             for (int i = 0; i < n; i += BLOCK_SIZE) {

Modified: jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java?rev=1589265&r1=1589264&r2=1589265&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java Tue Apr 22 19:38:51 2014
@@ -25,6 +25,7 @@ import static com.google.common.collect.
 import static com.google.common.collect.Sets.newHashSet;
 import static java.lang.String.format;
 import static java.util.Collections.singletonMap;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static java.util.concurrent.TimeUnit.NANOSECONDS;
 import static java.util.concurrent.TimeUnit.SECONDS;
 import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
@@ -63,6 +64,7 @@ import org.slf4j.LoggerFactory;
 
 public class FileStore implements SegmentStore {
 
+    /** Logger instance */
     private static final Logger log = LoggerFactory.getLogger(FileStore.class);
 
     private static final int MB = 1024 * 1024;
@@ -250,11 +252,7 @@ public class FileStore implements Segmen
         flushThread.setPriority(Thread.MIN_PRIORITY);
         flushThread.start();
 
-        if (memoryMapping) {
-            log.info("TarMK opened with memory-mapping: {}", directory);
-        } else {
-            log.info("TarMK opened: {}", directory);
-        }
+        log.info("TarMK opened: {} (mmap={})", directory, memoryMapping);
     }
 
     static Map<Integer, Map<Character, File>> collectFiles(File directory)
@@ -344,11 +342,14 @@ public class FileStore implements Segmen
                 writer.flush();
 
                 synchronized (this) {
+                    log.debug("TarMK journal update {} -> {}", before, after);
                     journalFile.writeBytes(after + " root\n");
                     journalFile.getChannel().force(false);
                     persistedHead.set(after);
 
                     if (cleanup) {
+                        long start = System.nanoTime();
+
                         Set<UUID> ids = newHashSet();
                         for (SegmentId id : tracker.getReferencedSegmentIds()) {
                             ids.add(new UUID(
@@ -373,6 +374,9 @@ public class FileStore implements Segmen
                             }
                         }
                         readers = list;
+
+                        log.debug("TarMK GC: Completed in {}ms",
+                                MILLISECONDS.convert(System.nanoTime() - start, NANOSECONDS));
                     }
                 }
 
@@ -381,6 +385,7 @@ public class FileStore implements Segmen
                 while (iterator.hasNext()) {
                     File file = iterator.next();
                     if (!file.exists() || file.delete()) {
+                        log.debug("TarMK GC: Removed old file {}", file);
                         iterator.remove();
                     }
                 }