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