Author: mduerig
Date: Mon Jun 8 15:59:00 2015
New Revision: 1684212
URL: http://svn.apache.org/r1684212
Log:
OAK-2967: Merge OAK-2800, OAK-2801, OAK-2692, OAK-2713
Merged r1682555
Modified:
jackrabbit/oak/branches/1.2/ (props changed)
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/TarReader.java
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/TarWriter.java
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompactionAndCleanupTest.java
Propchange: jackrabbit/oak/branches/1.2/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 8 15:59:00 2015
@@ -1,3 +1,3 @@
/jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1672350,1672468,1672537,1672603,1672642,1672644,1672834-1672835,1673351,1673410,1673414,1673436,1673644,1673662-1673664,1673669,1673695,1674046,1674065,1674075,1674107,1674228,1674880,1675054-1675055,1675319,1675332,1675354,1675357,1675382,1675555,1675566,1675593,1676198,1676237,1676407,1676458,1676539,1676670,1676693,1676703,1676725,1677579,1677581,1677609,1677611,1677774,1677788,1677797,1677939,1677991,1678173,1678323,1678758,1678938,1678954,1679144,1679165,1679191,1679235,1680182,1680222,1680232,1680236,1680461,1680633,1680643,1680805-1680806,1680903,1681282,1681767,1681918,1682218,1682235,1682437,1682494,1682855,1682904,1683089,1683213,1683249,1683278,1683323,1683687,1684174-1684175
+/jackrabbit/oak/trunk:1672350,1672468,1672537,1672603,1672642,1672644,1672834-1672835,1673351,1673410,1673414,1673436,1673644,1673662-1673664,1673669,1673695,1674046,1674065,1674075,1674107,1674228,1674880,1675054-1675055,1675319,1675332,1675354,1675357,1675382,1675555,1675566,1675593,1676198,1676237,1676407,1676458,1676539,1676670,1676693,1676703,1676725,1677579,1677581,1677609,1677611,1677774,1677788,1677797,1677939,1677991,1678173,1678323,1678758,1678938,1678954,1679144,1679165,1679191,1679235,1680182,1680222,1680232,1680236,1680461,1680633,1680643,1680805-1680806,1680903,1681282,1681767,1681918,1682218,1682235,1682437,1682494,1682555,1682855,1682904,1683089,1683213,1683249,1683278,1683323,1683687,1684174-1684175
/jackrabbit/trunk:1345480
Modified:
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java?rev=1684212&r1=1684211&r2=1684212&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java
(original)
+++
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java
Mon Jun 8 15:59:00 2015
@@ -123,6 +123,14 @@ public class SegmentTracker {
return store;
}
+ /**
+ * Clear the segment cache
+ */
+ public synchronized void clearCache() {
+ segments.clear();
+ currentSize = 0;
+ }
+
Segment getSegment(SegmentId id) {
try {
Segment segment = store.readSegment(id);
Modified:
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java?rev=1684212&r1=1684211&r2=1684212&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
(original)
+++
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
Mon Jun 8 15:59:00 2015
@@ -641,6 +641,9 @@ public class FileStore implements Segmen
gcMonitor.info("TarMK revision cleanup started. Current repository
size {}",
humanReadableByteCount(initialSize));
+ newWriter();
+ tracker.clearCache();
+
// Suggest to the JVM that now would be a good time
// to clear stale weak references in the SegmentTracker
System.gc();
@@ -873,25 +876,31 @@ public class FileStore implements Segmen
id.getLeastSignificantBits(),
data, offset, length);
if (size >= maxFileSize) {
- writer.close();
-
- List<TarReader> list =
- newArrayListWithCapacity(1 + readers.size());
- list.add(TarReader.open(writeFile, memoryMapping));
- list.addAll(readers);
- readers = list;
-
- writeNumber++;
- writeFile = new File(
- directory,
- String.format(FILE_NAME_FORMAT, writeNumber, "a"));
- writer = new TarWriter(writeFile);
+ newWriter();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
+ private void newWriter() throws IOException {
+ if (writer.isDirty()) {
+ writer.close();
+
+ List<TarReader> list =
+ newArrayListWithCapacity(1 + readers.size());
+ list.add(TarReader.open(writeFile, memoryMapping));
+ list.addAll(readers);
+ readers = list;
+
+ writeNumber++;
+ writeFile = new File(
+ directory,
+ String.format(FILE_NAME_FORMAT, writeNumber, "a"));
+ writer = new TarWriter(writeFile);
+ }
+ }
+
@Override
public Blob readBlob(String blobId) {
if (blobStore != null) {
Modified:
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/TarReader.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/TarReader.java?rev=1684212&r1=1684211&r2=1684212&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/TarReader.java
(original)
+++
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/TarReader.java
Mon Jun 8 15:59:00 2015
@@ -597,26 +597,14 @@ class TarReader {
cleaned.add(id);
sorted[i] = null;
} else {
+ size += getEntrySize(entry.size());
+ count += 1;
if (isDataSegmentId(entry.lsb())) {
- size += getEntrySize(entry.size());
- count += 1;
-
// this is a referenced data segment, so follow the graph
if (graph != null) {
List<UUID> refids = graph.get(id);
if (refids != null) {
- for (UUID r : refids) {
- if
(isDataSegmentId(r.getLeastSignificantBits())) {
- referencedIds.add(r);
- } else {
- if (cm != null && cm.wasCompacted(id)) {
- // skip bulk compacted segment
- // references
- } else {
- referencedIds.add(r);
- }
- }
- }
+ referencedIds.addAll(refids);
}
} else {
// a pre-compiled graph is not available, so read the
@@ -628,28 +616,11 @@ class TarReader {
int refcount = segment.get(pos + REF_COUNT_OFFSET) &
0xff;
int refend = pos + 16 * (refcount + 1);
for (int refpos = pos + 16; refpos < refend; refpos +=
16) {
- UUID r = new UUID(segment.getLong(refpos),
- segment.getLong(refpos + 8));
- if (isDataSegmentId(r.getLeastSignificantBits())) {
- referencedIds.add(r);
- } else {
- if (cm != null && cm.wasCompacted(id)) {
- // skip bulk compacted segment references
- } else {
- referencedIds.add(r);
- }
- }
+ referencedIds.add(new UUID(
+ segment.getLong(refpos),
+ segment.getLong(refpos + 8)));
}
}
- } else {
- // bulk segments compaction check
- if (cm != null && cm.wasCompacted(id)) {
- cleaned.add(id);
- sorted[i] = null;
- } else {
- size += getEntrySize(entry.size());
- count += 1;
- }
}
}
}
Modified:
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/TarWriter.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/TarWriter.java?rev=1684212&r1=1684211&r2=1684212&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/TarWriter.java
(original)
+++
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/TarWriter.java
Mon Jun 8 15:59:00 2015
@@ -278,6 +278,10 @@ class TarWriter {
}
}
+ boolean isDirty() {
+ return access != null;
+ }
+
/**
* Closes this tar file.
*
Modified:
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompactionAndCleanupTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompactionAndCleanupTest.java?rev=1684212&r1=1684211&r2=1684212&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompactionAndCleanupTest.java
(original)
+++
jackrabbit/oak/branches/1.2/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompactionAndCleanupTest.java
Mon Jun 8 15:59:00 2015
@@ -162,8 +162,7 @@ public class CompactionAndCleanupTest {
// fileStore.size() in [blobSize + dataSize, blobSize + 2xdataSize]
assertTrue(fileStore.maybeCompact(false));
fileStore.cleanup();
- assertSize("post cleanup", fileStore.size(), blobSize + dataSize,
- blobSize + 2 * dataSize);
+ assertSize("post cleanup", fileStore.size(), 0, blobSize + 2 *
dataSize);
// refresh the ts ref, to simulate a long wait time
custom.setOlderThan(0);