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 2013/05/01 14:31:28 UTC
svn commit: r1477973 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/
oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/
oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ oak-run/src/...
Author: jukka
Date: Wed May 1 12:31:28 2013
New Revision: 1477973
URL: http://svn.apache.org/r1477973
Log:
OAK-788: File backend for the SegmentMK
Initial, incomplete FileStore for the SegmentMK
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MemoryStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MongoStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Segment.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompareAgainstBaseStateTest.java
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/OakRepositoryFixture.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MemoryStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MemoryStore.java?rev=1477973&r1=1477972&r2=1477973&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MemoryStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MemoryStore.java Wed May 1 12:31:28 2013
@@ -16,11 +16,10 @@
*/
package org.apache.jackrabbit.oak.plugins.segment;
-
import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
import java.nio.ByteBuffer;
-import java.util.Collections;
+import java.util.Collection;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentMap;
@@ -65,7 +64,15 @@ public class MemoryStore implements Segm
}
@Override
- public void createSegment(Segment segment) {
+ public void createSegment(
+ UUID segmentId, byte[] data, int offset, int length,
+ Collection<UUID> referencedSegmentIds,
+ Map<String, RecordId> strings, Map<Template, RecordId> templates) {
+ byte[] buffer = new byte[length];
+ System.arraycopy(data, offset, buffer, 0, length);
+ Segment segment = new Segment(
+ this, segmentId, ByteBuffer.wrap(buffer),
+ referencedSegmentIds, strings, templates);
if (segments.putIfAbsent(segment.getSegmentId(), segment) != null) {
throw new IllegalStateException(
"Segment override: " + segment.getSegmentId());
@@ -73,16 +80,6 @@ public class MemoryStore implements Segm
}
@Override
- public void createSegment(
- UUID segmentId, byte[] data, int offset, int length) {
- byte[] segment = new byte[length];
- System.arraycopy(data, offset, segment, 0, length);
- createSegment(new Segment(
- this, segmentId, ByteBuffer.wrap(segment),
- Collections.<UUID>emptySet()));
- }
-
- @Override
public void deleteSegment(UUID segmentId) {
if (segments.remove(segmentId) == null) {
throw new IllegalStateException("Missing segment: " + segmentId);
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MongoStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MongoStore.java?rev=1477973&r1=1477972&r2=1477973&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MongoStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MongoStore.java Wed May 1 12:31:28 2013
@@ -23,6 +23,8 @@ import static com.mongodb.ReadPreference
import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
import java.nio.ByteBuffer;
+import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -88,22 +90,19 @@ public class MongoStore implements Segme
}
@Override
- public void createSegment(Segment segment) {
- cache.addSegment(segment);
- byte[] bytes = new byte[segment.size()];
- segment.getData().duplicate().get(bytes);
- insertSegment(segment.getSegmentId(), bytes, segment.getUUIDs());
- }
-
- @Override
public void createSegment(
- UUID segmentId, byte[] data, int offset, int length) {
- byte[] d = data;
- if (offset != 0 || length != data.length) {
- d = new byte[length];
- System.arraycopy(data, offset, d, 0, length);
- }
- insertSegment(segmentId, d, new UUID[0]);
+ UUID segmentId, byte[] data, int offset, int length,
+ Collection<UUID> referencedSegmentIds,
+ Map<String, RecordId> strings, Map<Template, RecordId> templates) {
+ byte[] d = new byte[length];
+ System.arraycopy(data, offset, d, 0, length);
+
+ cache.addSegment(new Segment(
+ this, segmentId, ByteBuffer.wrap(data), referencedSegmentIds,
+ Collections.<String, RecordId>emptyMap(),
+ Collections.<Template, RecordId>emptyMap()));
+
+ insertSegment(segmentId, d, referencedSegmentIds);
}
private Segment findSegment(UUID segmentId) {
@@ -125,11 +124,15 @@ public class MongoStore implements Segme
for (Object object : list) {
uuids.add(UUID.fromString(object.toString()));
}
- return new Segment(this, segmentId, ByteBuffer.wrap(data), uuids);
+ return new Segment(
+ this, segmentId, ByteBuffer.wrap(data), uuids,
+ Collections.<String, RecordId>emptyMap(),
+ Collections.<Template, RecordId>emptyMap());
}
- private void insertSegment(UUID segmentId, byte[] data, UUID[] uuids) {
- List<String> list = Lists.newArrayListWithCapacity(uuids.length);
+ private void insertSegment(
+ UUID segmentId, byte[] data, Collection<UUID> uuids) {
+ List<String> list = Lists.newArrayListWithCapacity(uuids.size());
for (UUID uuid : uuids) {
list.add(uuid.toString());
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Segment.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Segment.java?rev=1477973&r1=1477972&r2=1477973&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Segment.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Segment.java Wed May 1 12:31:28 2013
@@ -104,32 +104,12 @@ class Segment {
private final OffsetCache<Template> templates;
Segment(SegmentStore store,
- UUID uuid, ByteBuffer data, Collection<UUID> uuids) {
+ UUID uuid, ByteBuffer data, Collection<UUID> uuids,
+ Map<String, RecordId> strings, Map<Template, RecordId> templates) {
this.store = checkNotNull(store);
this.uuid = checkNotNull(uuid);
this.data = checkNotNull(data);
this.uuids = checkNotNull(uuids).toArray(NO_UUIDS);
- this.strings = new OffsetCache<String>() {
- @Override
- protected String load(int offset) {
- return loadString(offset);
- }
- };
- this.templates = new OffsetCache<Template>() {
- @Override
- protected Template load(int offset) {
- return loadTemplate(offset);
- }
- };
- }
-
- Segment(SegmentStore store,
- UUID uuid, byte[] data, Collection<UUID> uuids,
- Map<String, RecordId> strings, Map<Template, RecordId> templates) {
- this.store = store;
- this.uuid = uuid;
- this.data = ByteBuffer.wrap(data);
- this.uuids = uuids.toArray(new UUID[uuids.size()]);
this.strings = new OffsetCache<String>(strings) {
@Override
protected String load(int offset) {
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java?rev=1477973&r1=1477972&r2=1477973&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java Wed May 1 12:31:28 2013
@@ -17,7 +17,9 @@
package org.apache.jackrabbit.oak.plugins.segment;
import java.net.UnknownHostException;
+import java.util.Collection;
import java.util.Dictionary;
+import java.util.Map;
import java.util.UUID;
import org.apache.felix.scr.annotations.Activate;
@@ -82,13 +84,14 @@ public class SegmentNodeStoreService ext
return store[0].readSegment(segmentId);
}
@Override
- public void createSegment(Segment segment) {
- store[0].createSegment(segment);
- }
- @Override
public void createSegment(
- UUID segmentId, byte[] bytes, int offset, int len) {
- store[0].createSegment(segmentId, bytes, offset, len);
+ UUID segmentId, byte[] bytes, int offset, int length,
+ Collection<UUID> referencedSegmentIds,
+ Map<String, RecordId> strings,
+ Map<Template, RecordId> templates) {
+ store[0].createSegment(
+ segmentId, bytes, offset, length,
+ referencedSegmentIds, strings, templates);
}
@Override
public void deleteSegment(UUID segmentId) {
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentStore.java?rev=1477973&r1=1477972&r2=1477973&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentStore.java Wed May 1 12:31:28 2013
@@ -16,6 +16,8 @@
*/
package org.apache.jackrabbit.oak.plugins.segment;
+import java.util.Collection;
+import java.util.Map;
import java.util.UUID;
public interface SegmentStore {
@@ -24,9 +26,10 @@ public interface SegmentStore {
Segment readSegment(UUID segmentId);
- void createSegment(Segment segment);
-
- void createSegment(UUID segmentId, byte[] bytes, int offset, int len);
+ void createSegment(
+ UUID segmentId, byte[] bytes, int offset, int length,
+ Collection<UUID> referencedSegmentIds,
+ Map<String, RecordId> strings, Map<Template, RecordId> templates);
void deleteSegment(UUID segmentId);
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java?rev=1477973&r1=1477972&r2=1477973&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java Wed May 1 12:31:28 2013
@@ -100,18 +100,11 @@ public class SegmentWriter {
public synchronized void flush() {
if (length > 0) {
- byte[] data = buffer;
- if (length < buffer.length) {
- data = new byte[length];
- System.arraycopy(
- buffer, buffer.length - length, data, 0, data.length);
- }
-
- store.createSegment(new Segment(
- store, uuid, data, uuids.keySet(), strings, templates));
+ store.createSegment(
+ uuid, buffer, buffer.length - length, length,
+ uuids.keySet(), strings, templates);
uuid = UUID.randomUUID();
- buffer = EMPTY_BUFFER;
length = 0;
uuids.clear();
strings.clear();
@@ -504,7 +497,11 @@ public class SegmentWriter {
UUID segmentId = UUID.randomUUID();
int align = Segment.RECORD_ALIGN_BYTES - 1;
int bulkAlignLength = (bulkLength + align) & ~align;
- store.createSegment(segmentId, bulk, 0, bulkAlignLength);
+ store.createSegment(
+ segmentId, bulk, 0, bulkAlignLength,
+ Collections.<UUID>emptyList(),
+ Collections.<String, RecordId>emptyMap(),
+ Collections.<Template, RecordId>emptyMap());
for (int pos = Segment.MAX_SEGMENT_SIZE - bulkAlignLength;
pos < Segment.MAX_SEGMENT_SIZE;
pos += BLOCK_SIZE) {
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompareAgainstBaseStateTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompareAgainstBaseStateTest.java?rev=1477973&r1=1477972&r2=1477973&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompareAgainstBaseStateTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompareAgainstBaseStateTest.java Wed May 1 12:31:28 2013
@@ -17,7 +17,7 @@
package org.apache.jackrabbit.oak.plugins.segment;
import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
-import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.createControl;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
@@ -25,7 +25,6 @@ import static org.easymock.EasyMock.veri
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.oak.spi.state.NodeStateDiff;
-import org.easymock.EasyMock;
import org.junit.Before;
import org.junit.Test;
@@ -38,7 +37,8 @@ public class CompareAgainstBaseStateTest
private final SegmentWriter writer = new SegmentWriter(store);
- private final NodeStateDiff diff = EasyMock.createMock(NodeStateDiff.class);
+ private final NodeStateDiff diff =
+ createControl().createMock("diff", NodeStateDiff.class);
private final NodeBuilder builder = EMPTY_NODE.builder();
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java?rev=1477973&r1=1477972&r2=1477973&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java Wed May 1 12:31:28 2013
@@ -57,7 +57,8 @@ public class BenchmarkRunner {
OakRepositoryFixture.getMongo(
host.value(options), port.value(options), cacheSize * MB),
OakRepositoryFixture.getSegment(
- host.value(options), port.value(options), cacheSize * MB)
+ host.value(options), port.value(options), cacheSize * MB),
+ OakRepositoryFixture.getTar("data.tar")
};
Benchmark[] allBenchmarks = new Benchmark[] {
new LoginTest(),
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/OakRepositoryFixture.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/OakRepositoryFixture.java?rev=1477973&r1=1477972&r2=1477973&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/OakRepositoryFixture.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/OakRepositoryFixture.java Wed May 1 12:31:28 2013
@@ -28,6 +28,7 @@ import org.apache.jackrabbit.mongomk.uti
import org.apache.jackrabbit.oak.Oak;
import org.apache.jackrabbit.oak.jcr.Jcr;
import org.apache.jackrabbit.oak.kernel.KernelNodeStore;
+import org.apache.jackrabbit.oak.plugins.segment.FileStore;
import org.apache.jackrabbit.oak.plugins.segment.MongoStore;
import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore;
import org.apache.jackrabbit.oak.plugins.segment.SegmentStore;
@@ -135,6 +136,21 @@ public abstract class OakRepositoryFixtu
};
}
+ public static RepositoryFixture getTar(final String file) {
+ return new OakRepositoryFixture("Oak-Tar") {
+ @Override
+ public Repository[] setUpCluster(int n) throws Exception {
+ Repository[] cluster = new Repository[n];
+ for (int i = 0; i < cluster.length; i++) {
+ SegmentStore store = new FileStore(file);
+ Oak oak = new Oak(new SegmentNodeStore(store));
+ cluster[i] = new Jcr(oak).createRepository();
+ }
+ return cluster;
+ }
+ };
+ }
+
private final String name;
protected final String unique;