Skip to content

Commit

Permalink
Remove TreeCache, ObjectStore implementations do caching already
Browse files Browse the repository at this point in the history
Signed-off-by: Gabriel Roldan <gabriel.roldan@gmail.com>
  • Loading branch information
groldan committed Jun 20, 2019
1 parent a3c9380 commit 9ad384f
Show file tree
Hide file tree
Showing 10 changed files with 43 additions and 180 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,6 @@ protected void mergeRoot(@NonNull DAG root) {
checkState(root.numChildren() == 0);

// initialize buckets
preloadBuckets(original);
original.forEachBucket(bucket -> {
TreeId dagBucketId = root.getId().newChild(bucket.getIndex());
ObjectId bucketId = bucket.getObjectId();
Expand All @@ -428,14 +427,6 @@ protected void mergeRoot(@NonNull DAG root) {

}

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);
}
}

protected RevTree getOriginalTree(@Nullable ObjectId originalId) {
final RevTree original;
if (originalId == null || RevTree.EMPTY_TREE_ID.equals(originalId)) {
Expand Down Expand Up @@ -484,8 +475,7 @@ private Map<NodeId, DAGNode> lazyNodes(final RevTree tree) {
return Collections.emptyMap();
}

final TreeCache treeCache = storageProvider.getTreeCache();
final int cacheTreeId = treeCache.getTreeId(tree).intValue();
final ObjectId cacheTreeId = tree.getId();
Map<NodeId, DAGNode> dagNodes = new HashMap<>();

final int treesSize = tree.treesSize();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,16 @@
package org.locationtech.geogig.model.internal;

import org.locationtech.geogig.model.Node;
import org.locationtech.geogig.model.ObjectId;
import org.locationtech.geogig.model.RevTree;
import org.locationtech.geogig.storage.ObjectStore;

import lombok.Getter;
import lombok.experimental.Accessors;

public abstract class DAGNode {

public abstract Node resolve(TreeCache cache);
public abstract Node resolve(ObjectStore store);

public static DAGNode of(Node node) {
return new DirectDAGNode(node);
Expand All @@ -35,7 +37,7 @@ public DirectDAGNode(Node node) {
this.node = node;
}

public @Override Node resolve(TreeCache cache) {
public @Override Node resolve(ObjectStore store) {
return node;
}

Expand All @@ -53,17 +55,17 @@ public DirectDAGNode(Node node) {

public abstract static @Accessors(fluent = true) class LazyDAGNode extends DAGNode {

protected final @Getter int leafRevTreeId;
protected final @Getter ObjectId leafRevTreeId;

protected final @Getter int nodeIndex;

public LazyDAGNode(final int leafRevTreeId, final int nodeIndex) {
public LazyDAGNode(final ObjectId leafRevTreeId, final int nodeIndex) {
this.leafRevTreeId = leafRevTreeId;
this.nodeIndex = nodeIndex;
}

public @Override final Node resolve(TreeCache cache) {
RevTree tree = cache.resolve(leafRevTreeId);
public @Override final Node resolve(ObjectStore store) {
RevTree tree = store.getTree(leafRevTreeId);
return resolve(tree);
}

Expand All @@ -78,7 +80,7 @@ public LazyDAGNode(final int leafRevTreeId, final int nodeIndex) {
return false;
}
LazyDAGNode l = (LazyDAGNode) o;
return leafRevTreeId == l.leafRevTreeId && nodeIndex == l.nodeIndex;
return leafRevTreeId.equals(l.leafRevTreeId) && nodeIndex == l.nodeIndex;
}

public @Override String toString() {
Expand All @@ -89,7 +91,7 @@ public LazyDAGNode(final int leafRevTreeId, final int nodeIndex) {

public static final class TreeDAGNode extends LazyDAGNode {

TreeDAGNode(int leafRevTreeId, int nodeIndex) {
TreeDAGNode(ObjectId leafRevTreeId, int nodeIndex) {
super(leafRevTreeId, nodeIndex);
}

Expand All @@ -101,29 +103,20 @@ public static final class TreeDAGNode extends LazyDAGNode {

public static final class FeatureDAGNode extends LazyDAGNode {

FeatureDAGNode(int leafRevTreeId, int nodeIndex) {
FeatureDAGNode(ObjectId leafRevTreeId, int nodeIndex) {
super(leafRevTreeId, nodeIndex);
}

protected @Override Node resolve(RevTree tree) {
try {
return tree.getFeature(this.nodeIndex);
} catch (IndexOutOfBoundsException e) {
e.printStackTrace();
try {
return tree.getFeature(this.nodeIndex);
} catch (IndexOutOfBoundsException e2) {
throw e2;
}
}
return tree.getFeature(this.nodeIndex);
}
}

public static DAGNode treeNode(final int cacheTreeId, final int nodeIndex) {
public static DAGNode treeNode(final ObjectId cacheTreeId, final int nodeIndex) {
return new TreeDAGNode(cacheTreeId, nodeIndex);
}

public static DAGNode featureNode(final int cacheTreeId, final int nodeIndex) {
public static DAGNode featureNode(final ObjectId cacheTreeId, final int nodeIndex) {
return new FeatureDAGNode(cacheTreeId, nodeIndex);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@

public interface DAGStorageProvider {

public TreeCache getTreeCache();

public List<DAG> getTrees(Set<TreeId> ids) throws NoSuchElementException;

public DAG getOrCreateTree(TreeId treeId, ObjectId originalTreeId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,10 @@ public interface DAGStorageProviderFactory extends PriorityService {
public DAGStorageProvider newInstance(@NonNull ObjectStore treeStore);

public static DAGStorageProviderFactory defaultInstance() {
return new ServiceFinder().environmentVariable(ENV_VARIABLE).systemProperty(ENV_VARIABLE)
ServiceFinder serviceFinder = new ServiceFinder().environmentVariable(ENV_VARIABLE)
.systemProperty(ENV_VARIABLE);
DAGStorageProviderFactory factory = serviceFinder
.lookupDefaultService(DAGStorageProviderFactory.class);
return factory;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,8 @@ class HeapDAGStorageProvider implements DAGStorageProvider {

private ObjectStore source;

private TreeCache treeCache;

public HeapDAGStorageProvider(ObjectStore source) {
this(source, new TreeCache(source));
}

public HeapDAGStorageProvider(ObjectStore source, TreeCache treeCache) {
this.source = source;
this.treeCache = treeCache;
this.nodes = new ConcurrentHashMap<>();
this.trees = new TreeMap<>();
}
Expand Down Expand Up @@ -98,7 +91,7 @@ private DAG createTree(TreeId treeId, ObjectId originalTreeId) {
nodeIds.forEach((nid) -> {
DAGNode dagNode = nodes.get(nid);
Preconditions.checkState(dagNode != null);
Node node = dagNode.resolve(treeCache);
Node node = dagNode.resolve(source);
res.put(nid, node);
});
return res;
Expand All @@ -117,10 +110,6 @@ private DAG createTree(TreeId treeId, ObjectId originalTreeId) {
trees.putAll(dags);
}

public @Override TreeCache getTreeCache() {
return treeCache;
}

public long nodeCount() {
return nodes.size();
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,6 @@
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import org.junit.Before;
import org.junit.Test;
Expand All @@ -30,42 +27,43 @@

public class DAGNodeTest {

private TreeCache cache;

private RevTree featuresTree;

private ObjectStore store;

@Before
public void before() {
ObjectStore store = new HeapObjectStore();
store = new HeapObjectStore();
store.open();
cache = mock(TreeCache.class);
featuresTree = RevObjectTestSupport.INSTANCE.createFeaturesTree(store, "f", 512);
}

@Test
public void lazyFeatureNodeCreate() {
DAGNode node = DAGNode.featureNode(5, 511);
DAGNode node = DAGNode.featureNode(featuresTree.getId(), 511);
assertTrue(node instanceof FeatureDAGNode);
FeatureDAGNode fnode = (FeatureDAGNode) node;
assertEquals(5, fnode.leafRevTreeId);
assertEquals(featuresTree.getId(), fnode.leafRevTreeId);
assertEquals(511, fnode.nodeIndex);
assertFalse("a lazy feature node can never be nil", node.isNull());
}

@Test
public void lazyFeatureNodeEquals() {
DAGNode node = DAGNode.featureNode(5, 511);
assertEquals(node, DAGNode.featureNode(5, 511));
assertNotEquals(node, DAGNode.featureNode(5, 510));
assertNotEquals(node, DAGNode.featureNode(4, 511));
DAGNode expected = DAGNode.featureNode(featuresTree.getId(), 511);
DAGNode actual;

actual = DAGNode.featureNode(featuresTree.getId(), 511);
assertEquals(expected, actual);

actual = DAGNode.featureNode(featuresTree.getId(), 510);
assertNotEquals(expected, actual);
}

@Test
public void lazyFeatureNodeResolve() {
DAGNode node = DAGNode.featureNode(5, 511);

when(cache.resolve(eq(5))).thenReturn(featuresTree);
Node resolved = node.resolve(cache);
DAGNode node = DAGNode.featureNode(featuresTree.getId(), 511);
Node resolved = node.resolve(store);
assertNotNull(resolved);
Node expected = featuresTree.features().get(511);
RevObjectTestUtil.deepEquals(expected, resolved);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,9 @@ public static void encode(DAGNode node, DataOutput output) throws IOException {
} else {
output.writeByte(MAGIC_LAZY_FEATURE);
}
final int leafRevTreeId = ln.leafRevTreeId();
final ObjectId leafRevTreeId = ln.leafRevTreeId();
final int nodeIndex = ln.nodeIndex();
Varint.writeUnsignedVarInt(leafRevTreeId, output);
leafRevTreeId.writeTo(output);
Varint.writeUnsignedVarInt(nodeIndex, output);
}

Expand All @@ -66,13 +66,13 @@ public static DAGNode decode(DataInput in) throws IOException {
return DAGNode.of(node);
}
case MAGIC_LAZY_TREE: {
int treeCacheId = Varint.readUnsignedVarInt(in);
ObjectId treeCacheId = ObjectId.readFrom(in);
int nodeIndex = Varint.readUnsignedVarInt(in);
DAGNode node = DAGNode.treeNode(treeCacheId, nodeIndex);
return node;
}
case MAGIC_LAZY_FEATURE: {
int treeCacheId = Varint.readUnsignedVarInt(in);
ObjectId treeCacheId = ObjectId.readFrom(in);
int nodeIndex = Varint.readUnsignedVarInt(in);
DAGNode node = DAGNode.featureNode(treeCacheId, nodeIndex);
return node;
Expand Down
Loading

0 comments on commit 9ad384f

Please sign in to comment.