public BranchNodeStore(NodeStore nodeStore) throws CommitFailedException { this.nodeStore = nodeStore; this.inheritedCheckpoints = newArrayList(nodeStore.checkpoints()); this.checkpointMapping = newConcurrentMap(); String cp = nodeStore.checkpoint(CHECKPOINT_LIFETIME, singletonMap("type", "copy-on-write")); memoryNodeStore = new MemoryNodeStore(nodeStore.retrieve(cp)); }
@NotNull @Override public Blob createBlob(InputStream inputStream) throws IOException { return getNodeStore().createBlob(inputStream); }
public void dispose() { for (String cp : nodeStore.checkpoints()) { if ("copy-on-write".equals(nodeStore.checkpointInfo(cp).get("type"))) { nodeStore.release(cp); } } }
@Test public void checkpoint() throws CommitFailedException { String cp = store.checkpoint(Long.MAX_VALUE); NodeBuilder builder = store.getRoot().builder(); builder.setChildNode("new"); store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY); assertFalse(root.equals(store.getRoot())); assertEquals(root, store.retrieve(cp)); assertTrue(store.release(cp)); assertNull(store.retrieve(cp)); }
private HashSet<String> addInlined(NodeStore nodeStore) throws Exception { HashSet<String> set = new HashSet<String>(); NodeBuilder a = nodeStore.getRoot().builder(); int number = 4; for (int i = 0; i < number; i++) { Blob b = nodeStore.createBlob(randomStream(i, 40)); a.child("cinline" + i).setProperty("x", b); } nodeStore.merge(a, EmptyHook.INSTANCE, CommitInfo.EMPTY); return set; }
@NotNull @Override public String checkpoint(long lifetime, @NotNull Map<String, String> properties) { return getNodeStore().checkpoint(lifetime, properties); }
@Override public NodeState retrieve(@NotNull String checkpoint) { if (inheritedCheckpoints.contains(checkpoint)) { return nodeStore.retrieve(checkpoint); } else if (checkpointMapping.containsKey(checkpoint)) { return memoryNodeStore.retrieve(checkpointMapping.get(checkpoint)); } else { return null; } }
@NotNull @Override public Map<String, String> checkpointInfo(@NotNull String checkpoint) { if (inheritedCheckpoints.contains(checkpoint)) { return nodeStore.checkpointInfo(checkpoint); } else if (checkpointMapping.containsKey(checkpoint)) { return memoryNodeStore.checkpointInfo(checkpointMapping.get(checkpoint)); } else { return emptyMap(); } }
@Test public void checkpointInfo() throws CommitFailedException { ImmutableMap<String, String> props = ImmutableMap.of( "one", "1", "two", "2", "three", "2"); String cp = store.checkpoint(Long.MAX_VALUE, props); assertEquals(props, store.checkpointInfo(cp)); }
@NotNull @Override public Iterable<String> checkpoints() { return getNodeStore().checkpoints(); }
private void releaseCheckpoint() { nodeStore.release(indexerInfo.checkpoint); log.info("Released the referred checkpoint [{}]", indexerInfo.checkpoint); }
protected byte[] addTestContent(NodeStore store, String child, int size) throws CommitFailedException, IOException { NodeBuilder builder = store.getRoot().builder(); builder.child(child).setProperty("ts", System.currentTimeMillis()); byte[] data = new byte[size]; new Random().nextBytes(data); Blob blob = store.createBlob(new ByteArrayInputStream(data)); builder.child(child).setProperty("testBlob", blob); store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY); return data; }
@Nonnull @Override public String checkpoint(long lifetime, @Nonnull Map<String, String> properties) { return getNodeStore().checkpoint(lifetime, properties); }
@Override public NodeState retrieve(@Nonnull String checkpoint) { if (inheritedCheckpoints.contains(checkpoint)) { return nodeStore.retrieve(checkpoint); } else if (checkpointMapping.containsKey(checkpoint)) { return memoryNodeStore.retrieve(checkpointMapping.get(checkpoint)); } else { return null; } }
@NotNull @Override public Map<String, String> checkpointInfo(@NotNull String checkpoint) { if (inheritedCheckpoints.contains(checkpoint)) { return nodeStore.checkpointInfo(checkpoint); } else if (checkpointMapping.containsKey(checkpoint)) { return memoryNodeStore.checkpointInfo(checkpointMapping.get(checkpoint)); } else { return emptyMap(); } }
@NotNull @Override public Iterable<String> checkpoints() { List<String> result = newArrayList(inheritedCheckpoints); result.retainAll(newArrayList(nodeStore.checkpoints())); checkpointMapping.entrySet().stream() .filter(e -> memoryNodeStore.listCheckpoints().contains(e.getValue())) .map(Map.Entry::getKey) .forEach(result::add); return result; }
private void releaseCheckpoint() { nodeStore.release(indexerInfo.checkpoint); log.info("Released the referred checkpoint [{}]", indexerInfo.checkpoint); }