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