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 md...@apache.org on 2019/02/11 08:15:12 UTC
svn commit: r1853332 -
/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterPool.java
Author: mduerig
Date: Mon Feb 11 08:15:12 2019
New Revision: 1853332
URL: http://svn.apache.org/viewvc?rev=1853332&view=rev
Log:
OAK-8039: Intermittent test failure of CompactionAndCleanupIT.testMixedSegments
Add assertion to root cause of OAK-8014 to determine whether that issue also causes this issue
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterPool.java
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterPool.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterPool.java?rev=1853332&r1=1853331&r2=1853332&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterPool.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterPool.java Mon Feb 11 08:15:12 2019
@@ -105,7 +105,7 @@ public class SegmentBufferWriterPool imp
@NotNull WriteOperation writeOperation)
throws IOException {
SimpleImmutableEntry<?,?> key = new SimpleImmutableEntry<>(currentThread(), gcGeneration);
- SegmentBufferWriter writer = borrowWriter(key);
+ SegmentBufferWriter writer = borrowWriter(key, gcGeneration);
try {
return writeOperation.execute(writer);
} finally {
@@ -184,21 +184,24 @@ public class SegmentBufferWriterPool imp
}
}
+
/**
* Return a writer from the pool by its {@code key}. This method may return
* a fresh writer at any time. Callers need to return a writer before
* borrowing it again. Failing to do so leads to undefined behaviour.
*/
- private SegmentBufferWriter borrowWriter(Object key) {
+ private SegmentBufferWriter borrowWriter(Object key, GCGeneration gcGeneration) {
poolMonitor.enter();
try {
SegmentBufferWriter writer = writers.remove(key);
if (writer == null) {
+ GCGeneration thisGeneration = this.gcGeneration.get();
+ checkState(thisGeneration.equals(gcGeneration));
writer = new SegmentBufferWriter(
idProvider,
reader,
getWriterId(wid),
- gcGeneration.get()
+ thisGeneration
);
}
borrowed.add(writer);