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