use of org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore in project jackrabbit-oak by apache.
the class CheckpointsTest method crossClusterReadOldCheckpoint.
@Test
public void crossClusterReadOldCheckpoint() throws Exception {
DocumentStore store = new MemoryDocumentStore();
DocumentNodeStore ns1 = builderProvider.newBuilder().setClusterId(1).setDocumentStore(store).setAsyncDelay(0).getNodeStore();
NodeBuilder b1 = ns1.getRoot().builder();
b1.child("foo");
ns1.merge(b1, EmptyHook.INSTANCE, CommitInfo.EMPTY);
ns1.runBackgroundOperations();
// manually create a check point in 1.2 format
Revision headRev = Revision.fromString(ns1.getHeadRevision().toString());
long expires = Long.MAX_VALUE;
String data = "{\"expires\":\"" + expires + "\"}";
UpdateOp update = new UpdateOp("checkpoint", false);
update.setMapEntry("data", headRev, data);
store.createOrUpdate(Collection.SETTINGS, update);
// now start second node store
DocumentNodeStore ns2 = builderProvider.newBuilder().setClusterId(2).setDocumentStore(store).setAsyncDelay(0).getNodeStore();
NodeBuilder b2 = ns2.getRoot().builder();
b2.child("baz");
ns2.merge(b2, EmptyHook.INSTANCE, CommitInfo.EMPTY);
NodeState root = ns2.retrieve(headRev.toString());
assertNotNull(root);
assertTrue(root.hasChildNode("foo"));
assertFalse(root.hasChildNode("baz"));
}
use of org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore in project jackrabbit-oak by apache.
the class DocumentNodeStoreTest method readNullEntry.
// OAK-2359
@Test
public void readNullEntry() throws CommitFailedException {
final Set<String> reads = Sets.newHashSet();
MemoryDocumentStore docStore = new MemoryDocumentStore() {
@Override
public <T extends Document> T find(Collection<T> collection, String key) {
reads.add(key);
return super.find(collection, key);
}
};
DocumentNodeStore store = builderProvider.newBuilder().setClusterId(1).setAsyncDelay(0).setDocumentStore(docStore).getNodeStore();
NodeBuilder builder = store.getRoot().builder();
builder.child("test").setProperty("foo", "bar");
merge(store, builder);
builder = store.getRoot().builder();
builder.child("test").remove();
merge(store, builder);
RevisionVector removedAt = store.getHeadRevision();
String id = Utils.getIdFromPath("/test");
int count = 0;
// update node until we have at least two levels of split documents
while (docStore.find(NODES, id).getPreviousRanges().size() <= PREV_SPLIT_FACTOR) {
builder = store.getRoot().builder();
builder.child("test").setProperty("count", count++);
merge(store, builder);
store.runBackgroundOperations();
}
NodeDocument doc = docStore.find(NODES, id);
assertNotNull(doc);
reads.clear();
doc.getNodeAtRevision(store, store.getHeadRevision(), null);
assertNoPreviousDocs(reads);
reads.clear();
doc.getValueMap("foo").get(removedAt.getRevision(store.getClusterId()));
assertNoPreviousDocs(reads);
}
use of org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore in project jackrabbit-oak by apache.
the class DocumentNodeStoreTest method readOnlyOldVersion.
@Test
public void readOnlyOldVersion() throws Exception {
DocumentStore store = new MemoryDocumentStore();
FormatVersion.V1_0.writeTo(store);
// initialize store with root node
Revision r = Revision.newRevision(1);
UpdateOp op = new UpdateOp(Utils.getIdFromPath("/"), true);
NodeDocument.setModified(op, r);
NodeDocument.setDeleted(op, r, false);
NodeDocument.setRevision(op, r, "c");
NodeDocument.setLastRev(op, r);
store.create(NODES, Lists.newArrayList(op));
// initialize checkpoints document
op = new UpdateOp("checkpoint", true);
store.create(SETTINGS, Lists.newArrayList(op));
// initialize version GC status in settings
op = new UpdateOp("versionGC", true);
store.create(SETTINGS, Lists.newArrayList(op));
// now try to open in read-only mode with more recent version
builderProvider.newBuilder().setReadOnlyMode().setDocumentStore(store).getNodeStore();
}
use of org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore in project jackrabbit-oak by apache.
the class DocumentNodeStoreTest method conflictDetectionWithClockDifference.
// OAK-2929
@Test
public void conflictDetectionWithClockDifference() throws Exception {
MemoryDocumentStore store = new MemoryDocumentStore();
long now = System.currentTimeMillis();
Clock c1 = new Clock.Virtual();
c1.waitUntil(now);
Revision.setClock(c1);
DocumentNodeStore ns1 = builderProvider.newBuilder().clock(c1).setDocumentStore(store).setAsyncDelay(0).setClusterId(1).getNodeStore();
NodeBuilder b1 = ns1.getRoot().builder();
b1.child("node");
merge(ns1, b1);
// make /node visible
ns1.runBackgroundOperations();
Revision.resetClockToDefault();
Clock c2 = new Clock.Virtual();
// c2 is five seconds ahead
c2.waitUntil(now + 5000);
Revision.setClock(c2);
DocumentNodeStore ns2 = builderProvider.newBuilder().clock(c2).setDocumentStore(store).setAsyncDelay(0).setClusterId(2).getNodeStore();
// ns2 sees /node
assertTrue(ns2.getRoot().hasChildNode("node"));
// add a child /node/foo
NodeBuilder b2 = ns2.getRoot().builder();
b2.child("node").child("foo");
merge(ns2, b2);
// make /node/foo visible
ns2.runBackgroundOperations();
Revision.resetClockToDefault();
Revision.setClock(c1);
ns1.runBackgroundOperations();
b1 = ns1.getRoot().builder();
// ns1 sees /node/foo as well
assertTrue(b1.getChildNode("node").hasChildNode("foo"));
// remove both /node and /node/foo
b1.child("node").remove();
merge(ns1, b1);
Revision.resetClockToDefault();
Revision.setClock(c2);
b2 = ns2.getRoot().builder();
b2.child("node").child("bar");
try {
merge(ns2, b2);
// must not be able to add another child node
fail("must fail with CommitFailedException");
} catch (CommitFailedException e) {
// expected
}
}
use of org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore in project jackrabbit-oak by apache.
the class DocumentNodeStoreTest method notYetVisibleExceptionMessage.
// OAK-3455
@Test
public void notYetVisibleExceptionMessage() throws Exception {
MemoryDocumentStore store = new MemoryDocumentStore();
DocumentNodeStore ns1 = builderProvider.newBuilder().setDocumentStore(store).setAsyncDelay(0).setClusterId(1).getNodeStore();
DocumentNodeStore ns2 = builderProvider.newBuilder().setDocumentStore(store).setAsyncDelay(0).setClusterId(2).getNodeStore();
ns2.setMaxBackOffMillis(0);
NodeBuilder b1 = ns1.getRoot().builder();
b1.child("test").setProperty("p", "v");
merge(ns1, b1);
NodeBuilder b2 = ns2.getRoot().builder();
b2.child("test").setProperty("q", "v");
try {
merge(ns2, b2);
fail("Must throw CommitFailedException");
} catch (CommitFailedException e) {
assertNotNull(e.getCause());
assertTrue(e.getCause().getMessage().contains("not yet visible"));
}
}
Aggregations