@Override public void saveNodes(Map<NodeId, DAGNode> nodeMappings) { nodeStore.putAll(nodeMappings); }
private byte[] encode(DAGNode node) { return encode(node, new ByteArrayOutputStream()); }
@Override public Map<NodeId, Node> getNodes(final Set<NodeId> nodeIds) { Map<NodeId, DAGNode> dagNodes = nodeStore.getAll(nodeIds); return Maps.transformValues(dagNodes, (dn) -> dn.resolve(treeCache)); }
@Override public void saveNode(NodeId nodeId, Node node) { nodeStore.put(nodeId, DAGNode.of(node)); }
RocksdbDAGStorageProvider(ObjectStore source, TreeCache treeCache) { this.objectStore = source; this.treeCache = treeCache; Path dagDbDir = null; try { dagDbDir = Files.createTempDirectory("geogig-dag-store"); dagDb = RocksdbHandle.create(dagDbDir); this.dagStore = new RocksdbDAGStore(dagDb.db); this.nodeStore = new RocksdbNodeStore(dagDb.db); } catch (Exception e) { RocksdbHandle.delete(dagDbDir.toFile()); throw Throwables.propagate(e); } }
@Override public void dispose() { try { dagStore.close(); } finally { try { nodeStore.close(); } finally { dagDb.dispose(); } } }
public Map<NodeId, DAGNode> getAll(Set<NodeId> nodeIds) { if (nodeIds.isEmpty()) { return ImmutableMap.of(); } Map<NodeId, DAGNode> res = new HashMap<>(); byte[] valueBuff = new byte[512]; nodeIds.forEach((id) -> { try { byte[] val = valueBuff; byte[] key = toKey(id); int ret = db.get(column, readOptions, key, val); Preconditions.checkState(ret != RocksDB.NOT_FOUND); if (ret > valueBuff.length) { val = db.get(column, key); } DAGNode node = decode(val); res.put(id, node); } catch (IllegalArgumentException | RocksDBException e) { throw Throwables.propagate(e); } }); return res; }
public void putAll(Map<NodeId, DAGNode> nodeMappings) { ByteArrayOutputStream out = new ByteArrayOutputStream(); nodeMappings.forEach((nodeId, dagNode) -> { out.reset(); encode(dagNode, out); byte[] value = out.toByteArray(); byte[] key = toKey(nodeId); try { db.put(column, writeOptions, key, value); } catch (RocksDBException e) { throw Throwables.propagate(e); } }); }