use of org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore in project jackrabbit-oak by apache.
the class DocumentNodeStoreSweepTest method lowerSweepLimit.
@Test
public void lowerSweepLimit() throws Exception {
ns.dispose();
// restart with a document store that tracks queries
final Map<String, Long> queries = Maps.newHashMap();
store = new FailingDocumentStore(new MemoryDocumentStore() {
@Nonnull
@Override
public <T extends Document> List<T> query(Collection<T> collection, String fromKey, String toKey, String indexedProperty, long startValue, int limit) {
queries.put(indexedProperty, startValue);
return super.query(collection, fromKey, toKey, indexedProperty, startValue, limit);
}
});
ns = createDocumentNodeStore(0);
createUncommittedChanges();
// get the revision of the uncommitted changes
Revision r = null;
for (NodeDocument d : Utils.getAllDocuments(store)) {
if (d.getPath().startsWith("/node-")) {
r = Iterables.getFirst(d.getAllChanges(), null);
break;
}
}
assertNotNull(r);
// after a new head and a background sweep, the
// uncommitted changes must be cleaned up
NodeBuilder builder = ns.getRoot().builder();
builder.child("foo");
merge(ns, builder);
queries.clear();
ns.runBackgroundOperations();
assertCleanStore();
// sweeper must have looked at most recently modified documents
Long modified = queries.get(NodeDocument.MODIFIED_IN_SECS);
assertNotNull(modified);
long startValue = NodeDocument.getModifiedInSecs(r.getTimestamp());
assertEquals(startValue, modified.longValue());
}
use of org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore in project jackrabbit-oak by apache.
the class DocumentNodeStoreTest method localChangesFromCache.
// OAK-4715
@Test
public void localChangesFromCache() throws Exception {
final AtomicInteger numQueries = new AtomicInteger();
DocumentStore store = new MemoryDocumentStore() {
@Nonnull
@Override
public <T extends Document> List<T> query(Collection<T> collection, String fromKey, String toKey, int limit) {
if (collection == Collection.NODES) {
numQueries.incrementAndGet();
}
return super.query(collection, fromKey, toKey, limit);
}
};
DocumentNodeStore ns1 = builderProvider.newBuilder().setClusterId(1).setAsyncDelay(0).setDocumentStore(store).getNodeStore();
NodeBuilder builder = ns1.getRoot().builder();
builder.child("node-1");
merge(ns1, builder);
ns1.runBackgroundOperations();
DocumentNodeStore ns2 = builderProvider.newBuilder().setClusterId(2).setAsyncDelay(0).setDocumentStore(store).getNodeStore();
builder = ns2.getRoot().builder();
builder.child("node-2");
merge(ns2, builder);
ns2.runBackgroundOperations();
ns1.runBackgroundOperations();
NodeState before = ns1.getRoot();
builder = before.builder();
builder.child("node-1").child("foo").child("bar");
NodeState after = merge(ns1, builder);
numQueries.set(0);
JsopDiff.diffToJsop(before, after);
assertEquals(0, numQueries.get());
before = after;
builder = ns1.getRoot().builder();
builder.child("node-1").child("foo").child("bar").setProperty("p", 1);
after = merge(ns1, builder);
numQueries.set(0);
JsopDiff.diffToJsop(before, after);
assertEquals(0, numQueries.get());
before = after;
builder = ns1.getRoot().builder();
builder.child("node-1").child("foo").child("bar").remove();
after = merge(ns1, builder);
numQueries.set(0);
JsopDiff.diffToJsop(before, after);
assertEquals(0, numQueries.get());
}
use of org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore in project jackrabbit-oak by apache.
the class DocumentNodeStoreTest method clusterWithClockDifferences.
// OAK-3388
@Test
public void clusterWithClockDifferences() 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"));
// remove /node on ns2
NodeBuilder b2 = ns2.getRoot().builder();
b2.child("node").remove();
merge(ns2, b2);
ns2.runBackgroundOperations();
// add /node again on ns1
Revision.resetClockToDefault();
Revision.setClock(c1);
ns1.runBackgroundOperations();
b1 = ns1.getRoot().builder();
assertFalse(b1.hasChildNode("node"));
b1.child("node");
merge(ns1, b1);
ns1.runBackgroundOperations();
// check if /node is visible on ns2
Revision.resetClockToDefault();
Revision.setClock(c2);
ns2.runBackgroundOperations();
b2 = ns2.getRoot().builder();
assertTrue(b2.hasChildNode("node"));
}
use of org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore in project jackrabbit-oak by apache.
the class DocumentNodeStoreTest method sameSeenAtRevision2.
// OAK-3411
@Test
public void sameSeenAtRevision2() 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();
NodeBuilder b2 = ns2.getRoot().builder();
b2.child("test");
merge(ns2, b2);
b2 = ns2.getRoot().builder();
b2.child("test").remove();
merge(ns2, b2);
ns2.runBackgroundOperations();
ns1.runBackgroundOperations();
NodeBuilder b1 = ns1.getRoot().builder();
assertFalse(b1.hasChildNode("test"));
b1.child("test");
merge(ns1, b1);
ns1.runBackgroundOperations();
DocumentNodeStore ns3 = builderProvider.newBuilder().setDocumentStore(store).setAsyncDelay(0).setClusterId(3).getNodeStore();
ns3.setMaxBackOffMillis(0);
NodeBuilder b3 = ns3.getRoot().builder();
assertTrue(b3.hasChildNode("test"));
b3.child("test").remove();
merge(ns3, b3);
}
use of org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore in project jackrabbit-oak by apache.
the class DocumentNodeStoreTest method readMoreRecentVersion.
@Test
public void readMoreRecentVersion() throws Exception {
DocumentStore store = new MemoryDocumentStore();
FormatVersion futureVersion = FormatVersion.valueOf("999.9.9");
futureVersion.writeTo(store);
try {
new DocumentMK.Builder().setDocumentStore(store).getNodeStore();
fail("must fail with " + DocumentStoreException.class.getSimpleName());
} catch (DocumentStoreException e) {
// expected
}
}
Aggregations