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/02/21 09:37:21 UTC
svn commit: r1448545 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment:
MemoryStore.java MongoStore.java SegmentNodeStore.java
SegmentNodeStoreBranch.java SegmentStore.java
Author: jukka
Date: Thu Feb 21 08:37:20 2013
New Revision: 1448545
URL: http://svn.apache.org/r1448545
Log:
OAK-633: SegmentMK: Hierarchy of journals
Add journal name parameter to SegmentStore
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/SegmentNodeStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBranch.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentStore.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=1448545&r1=1448544&r2=1448545&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 Thu Feb 21 08:37:20 2013
@@ -16,48 +16,55 @@
*/
package org.apache.jackrabbit.oak.plugins.segment;
-import java.util.Collections;
-import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
+import java.util.concurrent.ConcurrentMap;
import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeState;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+
+import com.google.common.collect.Maps;
public class MemoryStore implements SegmentStore {
- private final Map<UUID, Segment> segments =
- Collections.synchronizedMap(new HashMap<UUID, Segment>());
+ private final ConcurrentMap<String, RecordId> journals =
+ Maps.newConcurrentMap();
- private RecordId head;
+ private final ConcurrentMap<UUID, Segment> segments =
+ Maps.newConcurrentMap();
- public MemoryStore() {
+ public MemoryStore(NodeState root) {
SegmentWriter writer = new SegmentWriter(this);
- this.head = writer.writeNode(MemoryNodeState.EMPTY_NODE);
+ journals.put("root", writer.writeNode(root));
writer.flush();
}
- @Override
- public synchronized RecordId getJournalHead() {
- return head;
+ public MemoryStore() {
+ this(MemoryNodeState.EMPTY_NODE);
}
@Override
- public synchronized boolean setJournalHead(RecordId head, RecordId base) {
- if (this.head.equals(base)) {
- this.head = head;
- return true;
+ public RecordId getJournalHead(String name) {
+ RecordId head = journals.get(name);
+ if (head != null) {
+ return head;
} else {
- return false;
+ throw new IllegalArgumentException("Journal not found: " + name);
}
}
@Override
- public Segment readSegment(UUID segmentId) {
- Segment segment = segments.get(segmentId);
+ public boolean setJournalHead(String name, RecordId head, RecordId base) {
+ return journals.replace(name, base, head);
+ }
+
+ @Override
+ public Segment readSegment(UUID id) {
+ Segment segment = segments.get(id);
if (segment != null) {
return segment;
} else {
- throw new IllegalStateException("Segment not found: " + segmentId);
+ throw new IllegalArgumentException("Segment not found: " + id);
}
}
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=1448545&r1=1448544&r2=1448545&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 Thu Feb 21 08:37:20 2013
@@ -44,14 +44,13 @@ public class MongoStore implements Segme
this.cache = cache;
- SegmentWriter writer = new SegmentWriter(this);
- RecordId id = writer.writeNode(MemoryNodeState.EMPTY_NODE);
- writer.flush();
- journals.update(
- new BasicDBObject("_id", "root"),
- new BasicDBObject(ImmutableMap.of(
- "_id", "root", "head", id.toString())),
- true /* upsert */, false);
+ if (journals.findOne(new BasicDBObject("_id", "root")) == null) {
+ SegmentWriter writer = new SegmentWriter(this);
+ RecordId id = writer.writeNode(MemoryNodeState.EMPTY_NODE);
+ writer.flush();
+ journals.insert(new BasicDBObject(ImmutableMap.of(
+ "_id", "root", "head", id.toString())));
+ }
}
public MongoStore(DB db) {
@@ -64,17 +63,17 @@ public class MongoStore implements Segme
}
@Override
- public RecordId getJournalHead() {
- DBObject journal = journals.findOne(new BasicDBObject("_id", "root"));
+ public RecordId getJournalHead(String name) {
+ DBObject journal = journals.findOne(new BasicDBObject("_id", name));
return RecordId.fromString(journal.get("head").toString());
}
@Override
- public boolean setJournalHead(RecordId head, RecordId base) {
+ public boolean setJournalHead(String name, RecordId head, RecordId base) {
DBObject baseObject = new BasicDBObject(
- ImmutableMap.of("_id", "root", "head", base.toString()));
+ ImmutableMap.of("_id", name, "head", base.toString()));
DBObject headObject = new BasicDBObject(
- ImmutableMap.of("_id", "root", "head", head.toString()));
+ ImmutableMap.of("_id", name, "head", head.toString()));
return journals.findAndModify(baseObject, headObject) != null;
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java?rev=1448545&r1=1448544&r2=1448545&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java Thu Feb 21 08:37:20 2013
@@ -30,21 +30,28 @@ public class SegmentNodeStore implements
private final SegmentStore store;
+ private final String journal;
+
private final SegmentReader reader;
- public SegmentNodeStore(SegmentStore store) {
+ public SegmentNodeStore(SegmentStore store, String journal) {
this.store = store;
+ this.journal = journal;
this.reader = new SegmentReader(store);
}
+ public SegmentNodeStore(SegmentStore store) {
+ this(store, "root");
+ }
+
@Override @Nonnull
public NodeState getRoot() {
- return new SegmentNodeState(reader, store.getJournalHead());
+ return new SegmentNodeState(reader, store.getJournalHead(journal));
}
@Override @Nonnull
public NodeStoreBranch branch() {
- return new SegmentNodeStoreBranch(store, reader);
+ return new SegmentNodeStoreBranch(store, journal, reader);
}
@Override
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBranch.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBranch.java?rev=1448545&r1=1448544&r2=1448545&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBranch.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBranch.java Thu Feb 21 08:37:20 2013
@@ -43,6 +43,8 @@ class SegmentNodeStoreBranch implements
private final SegmentStore store;
+ private final String journal;
+
private final SegmentReader reader;
private final SegmentWriter writer;
@@ -51,11 +53,12 @@ class SegmentNodeStoreBranch implements
private RecordId rootId;
- SegmentNodeStoreBranch(SegmentStore store, SegmentReader reader) {
+ SegmentNodeStoreBranch(SegmentStore store, String journal, SegmentReader reader) {
this.store = store;
+ this.journal = journal;
this.reader = reader;
this.writer = new SegmentWriter(store);
- this.baseId = store.getJournalHead();
+ this.baseId = store.getJournalHead(journal);
this.rootId = baseId;
}
@@ -157,7 +160,7 @@ class SegmentNodeStoreBranch implements
@Override
public synchronized void rebase() {
- RecordId newBaseId = store.getJournalHead();
+ RecordId newBaseId = store.getJournalHead(journal);
if (!baseId.equals(newBaseId)) {
NodeBuilder builder =
new MemoryNodeBuilder(new SegmentNodeState(reader, newBaseId));
@@ -178,7 +181,7 @@ class SegmentNodeStoreBranch implements
RecordId headId =
writer.writeNode(hook.processCommit(getBase(), getRoot()));
writer.flush();
- if (store.setJournalHead(headId, baseId)) {
+ if (store.setJournalHead(journal, headId, baseId)) {
baseId = headId;
rootId = headId;
return getRoot();
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=1448545&r1=1448544&r2=1448545&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 Thu Feb 21 08:37:20 2013
@@ -20,9 +20,9 @@ import java.util.UUID;
public interface SegmentStore {
- RecordId getJournalHead();
+ RecordId getJournalHead(String name);
- boolean setJournalHead(RecordId head, RecordId base);
+ boolean setJournalHead(String name, RecordId head, RecordId base);
Segment readSegment(UUID segmentId);