Search in sources :

Example 81 with MemoryDocumentStore

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"));
}
Also used : MemoryDocumentStore(org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore) NodeState(org.apache.jackrabbit.oak.spi.state.NodeState) MemoryDocumentStore(org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore) NodeBuilder(org.apache.jackrabbit.oak.spi.state.NodeBuilder) Test(org.junit.Test)

Example 82 with MemoryDocumentStore

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);
}
Also used : MemoryDocumentStore(org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore) NodeBuilder(org.apache.jackrabbit.oak.spi.state.NodeBuilder) Test(org.junit.Test)

Example 83 with MemoryDocumentStore

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();
}
Also used : MemoryDocumentStore(org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore) MemoryDocumentStore(org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore) Test(org.junit.Test)

Example 84 with MemoryDocumentStore

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
    }
}
Also used : MemoryDocumentStore(org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore) Clock(org.apache.jackrabbit.oak.stats.Clock) NodeBuilder(org.apache.jackrabbit.oak.spi.state.NodeBuilder) CommitFailedException(org.apache.jackrabbit.oak.api.CommitFailedException) Test(org.junit.Test)

Example 85 with MemoryDocumentStore

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"));
    }
}
Also used : MemoryDocumentStore(org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore) NodeBuilder(org.apache.jackrabbit.oak.spi.state.NodeBuilder) CommitFailedException(org.apache.jackrabbit.oak.api.CommitFailedException) Test(org.junit.Test)

Aggregations

MemoryDocumentStore (org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore)132 Test (org.junit.Test)113 NodeBuilder (org.apache.jackrabbit.oak.spi.state.NodeBuilder)72 Clock (org.apache.jackrabbit.oak.stats.Clock)21 NodeState (org.apache.jackrabbit.oak.spi.state.NodeState)19 Before (org.junit.Before)13 CommitFailedException (org.apache.jackrabbit.oak.api.CommitFailedException)11 MemoryBlobStore (org.apache.jackrabbit.oak.spi.blob.MemoryBlobStore)10 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)9 Utils.getRootDocument (org.apache.jackrabbit.oak.plugins.document.util.Utils.getRootDocument)9 Random (java.util.Random)8 CONSTRAINT (org.apache.jackrabbit.oak.api.CommitFailedException.CONSTRAINT)8 DocumentNodeStore (org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore)7 ChildNodeEntry (org.apache.jackrabbit.oak.spi.state.ChildNodeEntry)6 ArrayList (java.util.ArrayList)5 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)5 StringSort (org.apache.jackrabbit.oak.commons.sort.StringSort)5 List (java.util.List)4 Semaphore (java.util.concurrent.Semaphore)4 VersionGCStats (org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollector.VersionGCStats)4