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/02/28 17:54:56 UTC

svn commit: r1572996 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java

Author: jukka
Date: Fri Feb 28 16:54:56 2014
New Revision: 1572996

URL: http://svn.apache.org/r1572996
Log:
OAK-1482: ConcurrentModificationException in FileStore

Fixed as suggested by Chetan Mehrotra

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java?rev=1572996&r1=1572995&r2=1572996&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java Fri Feb 28 16:54:56 2014
@@ -20,7 +20,7 @@ import static com.google.common.base.Pre
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 import static com.google.common.collect.Lists.newArrayList;
-import static com.google.common.collect.Lists.newLinkedList;
+import static com.google.common.collect.Lists.newCopyOnWriteArrayList;
 import static java.util.concurrent.TimeUnit.SECONDS;
 import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
 import static org.apache.jackrabbit.oak.plugins.segment.SegmentIdFactory.isBulkSegmentId;
@@ -29,7 +29,6 @@ import java.io.File;
 import java.io.IOException;
 import java.io.RandomAccessFile;
 import java.nio.ByteBuffer;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.UUID;
 import java.util.concurrent.CountDownLatch;
@@ -63,9 +62,9 @@ public class FileStore extends AbstractS
 
     private final boolean memoryMapping;
 
-    private final LinkedList<TarFile> bulkFiles = newLinkedList();
+    private final List<TarFile> bulkFiles = newCopyOnWriteArrayList();
 
-    private final LinkedList<TarFile> dataFiles = newLinkedList();
+    private final List<TarFile> dataFiles = newCopyOnWriteArrayList();
 
     private final RandomAccessFile journalFile;
 
@@ -277,7 +276,7 @@ public class FileStore extends AbstractS
 
     @Override @Nonnull
     protected Segment loadSegment(UUID id) {
-        LinkedList<TarFile> files = dataFiles;
+        List<TarFile> files = dataFiles;
         if (isBulkSegmentId(id)) {
             files = bulkFiles;
         }
@@ -301,7 +300,7 @@ public class FileStore extends AbstractS
     public synchronized void writeSegment(
             UUID segmentId, byte[] data, int offset, int length) {
         // select whether to write a data or a bulk segment
-        LinkedList<TarFile> files = dataFiles;
+        List<TarFile> files = dataFiles;
         String base = "data";
         if (isBulkSegmentId(segmentId)) {
             files = bulkFiles;
@@ -309,7 +308,7 @@ public class FileStore extends AbstractS
         }
 
         try {
-            if (files.isEmpty() || !files.getLast().writeEntry(
+            if (files.isEmpty() || !files.get(files.size() - 1).writeEntry(
                     segmentId, data, offset, length)) {
                 String name = String.format(FILE_NAME_FORMAT, base, files.size());
                 File file = new File(directory, name);