public HeapDAGStorageProvider(ObjectStore source) { this(source, new TreeCache(source)); }
public void preload(Iterable<ObjectId> trees) { Iterator<RevTree> preloaded = store.getAll(trees, BulkOpListener.NOOP_LISTENER, RevTree.class); while (preloaded.hasNext()) { getTreeId(preloaded.next()); } } }
@Override public RevTree getTree(ObjectId treeId) { return treeCache.getTree(treeId); }
public RevTree getTree(final ObjectId treeId) { Integer internalId = oidMapping.inverse().get(treeId); final RevTree tree; if (internalId == null) { tree = store.getTree(treeId); getTreeId(tree); if (tree.bucketsSize() > 0) { List<ObjectId> bucketIds = new ArrayList<>(tree.bucketsSize()); tree.forEachBucket(bucket -> bucketIds.add(bucket.getObjectId())); preload(bucketIds); } } else { tree = resolve(internalId.intValue()); } return tree; }
protected abstract Node resolve(RevTree tree);
private void preload(ImmutableCollection<Bucket> values) { this.storageProvider.getTreeCache() .preload(Iterables.transform(values, (b) -> b.getObjectId())); }
public RevTree getTree(final ObjectId treeId) { Integer internalId = oidMapping.inverse().get(treeId); final RevTree tree; if (internalId == null) { tree = store.getTree(treeId); getTreeId(tree); if (!tree.buckets().isEmpty()) { preload(Iterables.transform(tree.buckets().values(), (b) -> b.getObjectId())); } } else { tree = resolve(internalId.intValue()); } return tree; }
@Override public final Node resolve(TreeCache cache) { RevTree tree = cache.resolve(leafRevTreeId); ImmutableList<Node> collection = collection(tree); Node node; try { node = collection.get(nodeIndex); } catch (IndexOutOfBoundsException e) { e.printStackTrace(); throw e; } return node; }
private void preloadBuckets(RevTree tree) { if (tree.bucketsSize() > 0) { List<ObjectId> ids = new ArrayList<>(tree.bucketsSize()); tree.forEachBucket(bucket -> ids.add(bucket.getObjectId())); this.storageProvider.getTreeCache().preload(ids); } }
HeapDAGStorageProvider(ObjectStore source) { this(source, new TreeCache(source)); }
@Test public void lazyFeatureNodeResolve() { DAGNode node = DAGNode.featureNode(5, 511); when(cache.resolve(eq(5))).thenReturn(featuresTree); Node resolved = node.resolve(cache); assertNotNull(resolved); Node expected = featuresTree.features().get(511); RevObjectTestUtil.deepEquals(expected, resolved); }
public void preload(Iterable<ObjectId> trees) { Iterator<RevTree> preloaded = store.getAll(trees, BulkOpListener.NOOP_LISTENER, RevTree.class); while (preloaded.hasNext()) { getTreeId(preloaded.next()); } } }
RocksdbDAGStorageProvider(ObjectStore source) { this(source, new TreeCache(source)); }
@Test public void lazyFeatureNodeResolve() { DAGNode node = DAGNode.featureNode(5, 511); when(cache.resolve(eq(5))).thenReturn(featuresTree); Node resolved = node.resolve(cache); assertNotNull(resolved); assertSame(featuresTree.features().get(511), resolved); }
private Map<NodeId, DAGNode> lazyNodes(final RevTree tree) { if (tree.isEmpty()) { return ImmutableMap.of(); } final TreeCache treeCache = storageProvider.getTreeCache(); final int cacheTreeId = treeCache.getTreeId(tree).intValue(); Map<NodeId, DAGNode> dagNodes = new HashMap<>(); List<Node> treeNodes = tree.trees(); for (int i = 0; i < treeNodes.size(); i++) { NodeId nodeId = computeId(treeNodes.get(i)); DAGNode dagNode = DAGNode.treeNode(cacheTreeId, i); dagNodes.put(nodeId, dagNode); } ImmutableList<Node> featureNodes = tree.features(); for (int i = 0; i < featureNodes.size(); i++) { NodeId nodeId = computeId(featureNodes.get(i)); DAGNode dagNode = DAGNode.featureNode(cacheTreeId, i); dagNodes.put(nodeId, dagNode); } return dagNodes; }
public RocksdbDAGStorageProvider(ObjectStore source) { this(source, new TreeCache(source)); }
private Map<NodeId, DAGNode> lazyNodes(final RevTree tree) { if (tree.isEmpty()) { return Collections.emptyMap(); } final TreeCache treeCache = storageProvider.getTreeCache(); final int cacheTreeId = treeCache.getTreeId(tree).intValue(); Map<NodeId, DAGNode> dagNodes = new HashMap<>(); final int treesSize = tree.treesSize(); for (int i = 0; i < treesSize; i++) { NodeId nodeId = computeId(tree.getTree(i)); DAGNode dagNode = DAGNode.treeNode(cacheTreeId, i); dagNodes.put(nodeId, dagNode); } final int featuresSize = tree.featuresSize(); for (int i = 0; i < featuresSize; i++) { NodeId nodeId = computeId(tree.getFeature(i)); DAGNode dagNode = DAGNode.featureNode(cacheTreeId, i); dagNodes.put(nodeId, dagNode); } return dagNodes; }
CachingDAGStorageProvider(ObjectStore source) { this.source = source; this.treeCache = new TreeCache(source); heap = new HeapDAGStorageProvider(this.source, this.treeCache); nodeStore = heap; heapTrees = (id) -> id.depthLength() <= HEAP_DEPTH_THRESHOLD; diskTrees = (id) -> id.depthLength() > HEAP_DEPTH_THRESHOLD; }