private void assertTreeContents(RevTree tree, List<Node> expected) { Set<Node> expectedNodes = new HashSet<>(expected); Preconditions.checkArgument(expectedNodes.size() == expected.size()); Set<Node> actual = RevObjectTestSupport.getTreeNodes(tree, support.store()); assertEquals(expectedNodes, actual); }
private void assertTreeContents(RevTree tree, List<Node> expected) { Set<Node> expectedNodes = new HashSet<>(expected); Preconditions.checkArgument(expectedNodes.size() == expected.size()); Set<Node> actual = RevObjectTestSupport.getTreeNodes(tree, support.store()); assertEquals(expectedNodes, actual); }
public static Set<Node> getTreeNodes(RevTree tree, ObjectStore source) { Set<Node> nodes = new HashSet<>(); if (tree.bucketsSize() == 0) { nodes.addAll(tree.features()); nodes.addAll(tree.trees()); } else { Iterable<ObjectId> ids = Iterables.transform(tree.getBuckets(), Bucket::getObjectId); Iterator<RevTree> buckets = source.getAll(ids, BulkOpListener.NOOP_LISTENER, RevTree.class); while (buckets.hasNext()) { nodes.addAll(getTreeNodes(buckets.next(), source)); } } return nodes; }
public static Set<Node> getTreeNodes(RevTree tree, ObjectStore source) { Set<Node> nodes = new HashSet<>(); if (tree.buckets().isEmpty()) { nodes.addAll(tree.features()); nodes.addAll(tree.trees()); } else { Iterable<ObjectId> ids = Iterables.transform(tree.buckets().values(), (b) -> b.getObjectId()); Iterator<RevTree> buckets = source.getAll(ids, BulkOpListener.NOOP_LISTENER, RevTree.class); while (buckets.hasNext()) { nodes.addAll(getTreeNodes(buckets.next(), source)); } } return nodes; }
public static void verifyAllReachableContents(Repository repo, RevTree tree, Stack<String> pathToObject, Set<ObjectId> allIds) { ObjectStore store = repo.objectDatabase(); Set<Node> nodes = RevObjectTestSupport.getTreeNodes(tree, store); for (Node node : nodes) { pathToObject.push(node.getName()); Optional<ObjectId> metadataId = node.getMetadataId(); if (metadataId.isPresent()) { pathToObject.push("metadata"); verifyAllReachableContents(repo, metadataId.get(), pathToObject, allIds); pathToObject.pop(); } verifyAllReachableContents(repo, node.getObjectId(), pathToObject, allIds); pathToObject.pop(); } tree.getBuckets().forEach(bucket -> { pathToObject.push("bucket[" + bucket.getIndex() + "]"); verifyAllReachableContents(repo, bucket.getObjectId(), pathToObject, allIds); pathToObject.pop(); }); } }
public static void verifyAllReachableContents(Repository repo, RevTree tree, Stack<String> pathToObject, Set<ObjectId> allIds) { ObjectStore store = repo.objectDatabase(); Set<Node> nodes = RevObjectTestSupport.getTreeNodes(tree, store); for (Node node : nodes) { pathToObject.push(node.getName()); Optional<ObjectId> metadataId = node.getMetadataId(); if (metadataId.isPresent()) { pathToObject.push("metadata"); verifyAllReachableContents(repo, metadataId.get(), pathToObject, allIds); pathToObject.pop(); } verifyAllReachableContents(repo, node.getObjectId(), pathToObject, allIds); pathToObject.pop(); } tree.buckets().forEach((index, bucket) -> { pathToObject.push("bucket[" + index + "]"); verifyAllReachableContents(repo, bucket.getObjectId(), pathToObject, allIds); pathToObject.pop(); }); } }
@SuppressWarnings("unchecked") @Then("^the ([^\"]*) repository's \"([^\"]*)\" index should not track the extra attribute \"([^\"]*)\"$") public void verifyIndexNotExtraAttributes(String repositoryName, String headRef, String attributeName) throws Throwable { Repository repo = context.getRepo(repositoryName); Optional<ObjectId> indexTreeId = resolveIndexTreeId(repositoryName, headRef, null); assertTrue(indexTreeId.isPresent()); RevTree indexTree = repo.indexDatabase().getTree(indexTreeId.get()); Set<org.locationtech.geogig.model.Node> nodes = RevObjectTestSupport.getTreeNodes(indexTree, repo.indexDatabase()); for (org.locationtech.geogig.model.Node n : nodes) { Map<String, Object> extraData = n.getExtraData(); if (extraData.containsKey(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA)) { Map<String, Object> attributeData = (Map<String, Object>) extraData .get(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA); assertFalse(attributeData.containsKey(attributeName)); } } // add the repo to the set so it can be closed openedRepos.add(repositoryName); }
@SuppressWarnings("unchecked") @Then("^the repository's \"([^\"]*)\" index should track the extra attribute \"([^\"]*)\"$") public void verifyIndexExtraAttributes(String headRef, String attributeName) throws Throwable { Repository repo = localRepo.geogigCLI.getGeogig().getRepository(); Optional<ObjectId> indexTreeId = resolveIndexTreeId(headRef, null); assertTrue(indexTreeId.isPresent()); RevTree indexTree = repo.indexDatabase().getTree(indexTreeId.get()); Set<org.locationtech.geogig.model.Node> nodes = RevObjectTestSupport.getTreeNodes(indexTree, repo.indexDatabase()); for (org.locationtech.geogig.model.Node n : nodes) { Map<String, Object> extraData = n.getExtraData(); assertTrue(extraData.containsKey(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA)); Map<String, Object> attributeData = (Map<String, Object>) extraData .get(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA); assertTrue(attributeData.containsKey(attributeName)); } }
@SuppressWarnings("unchecked") @Then("^the ([^\"]*) repository's \"([^\"]*)\" index should track the extra attribute \"([^\"]*)\"$") public void verifyIndexExtraAttributes(String repositoryName, String headRef, String attributeName) throws Throwable { Repository repo = context.getRepo(repositoryName); Optional<ObjectId> indexTreeId = resolveIndexTreeId(repositoryName, headRef, null); assertTrue(indexTreeId.isPresent()); RevTree indexTree = repo.indexDatabase().getTree(indexTreeId.get()); Set<org.locationtech.geogig.model.Node> nodes = RevObjectTestSupport.getTreeNodes(indexTree, repo.indexDatabase()); for (org.locationtech.geogig.model.Node n : nodes) { Map<String, Object> extraData = n.getExtraData(); assertTrue(extraData.containsKey(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA)); Map<String, Object> attributeData = (Map<String, Object>) extraData .get(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA); assertTrue(attributeData.containsKey(attributeName)); } // add the repo to the set so it can be closed openedRepos.add(repositoryName); }
@SuppressWarnings("unchecked") @Then("^the repository's \"([^\"]*)\" index should not track the extra attribute \"([^\"]*)\"$") public void verifyIndexNotExtraAttributes(String headRef, String attributeName) throws Throwable { Repository repo = localRepo.geogigCLI.getGeogig().getRepository(); Optional<ObjectId> indexTreeId = resolveIndexTreeId(headRef, null); assertTrue(indexTreeId.isPresent()); RevTree indexTree = repo.indexDatabase().getTree(indexTreeId.get()); Set<org.locationtech.geogig.model.Node> nodes = RevObjectTestSupport.getTreeNodes(indexTree, repo.indexDatabase()); for (org.locationtech.geogig.model.Node n : nodes) { Map<String, Object> extraData = n.getExtraData(); if (extraData.containsKey(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA)) { Map<String, Object> attributeData = (Map<String, Object>) extraData .get(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA); assertFalse(attributeData.containsKey(attributeName)); } } }
@SuppressWarnings("unchecked") @Then("^the repository's \"([^\"]*)\" index should not track the extra attribute \"([^\"]*)\"$") public void verifyIndexNotExtraAttributes(String headRef, String attributeName) throws Throwable { Repository repo = localRepo.geogigCLI.getGeogig().getRepository(); Optional<ObjectId> indexTreeId = resolveIndexTreeId(headRef, null); assertTrue(indexTreeId.isPresent()); RevTree indexTree = repo.indexDatabase().getTree(indexTreeId.get()); Set<org.locationtech.geogig.model.Node> nodes = RevObjectTestSupport.getTreeNodes(indexTree, repo.indexDatabase()); for (org.locationtech.geogig.model.Node n : nodes) { Map<String, Object> extraData = n.getExtraData(); if (extraData.containsKey(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA)) { Map<String, Object> attributeData = (Map<String, Object>) extraData .get(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA); assertFalse(attributeData.containsKey(attributeName)); } } }
@SuppressWarnings("unchecked") @Then("^the repository's \"([^\"]*)\" index should not track the extra attribute \"([^\"]*)\"$") public void verifyIndexNotExtraAttributes(String headRef, String attributeName) throws Throwable { Repository repo = localRepo.geogigCLI.getGeogig().getRepository(); Optional<ObjectId> indexTreeId = resolveIndexTreeId(headRef, null); assertTrue(indexTreeId.isPresent()); RevTree indexTree = repo.indexDatabase().getTree(indexTreeId.get()); Set<org.locationtech.geogig.model.Node> nodes = RevObjectTestSupport.getTreeNodes(indexTree, repo.indexDatabase()); for (org.locationtech.geogig.model.Node n : nodes) { Map<String, Object> extraData = n.getExtraData(); if (extraData.containsKey(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA)) { Map<String, Object> attributeData = (Map<String, Object>) extraData .get(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA); assertFalse(attributeData.containsKey(attributeName)); } } }
@SuppressWarnings("unchecked") @Then("^the repository's \"([^\"]*)\" index should track the extra attribute \"([^\"]*)\"$") public void verifyIndexExtraAttributes(String headRef, String attributeName) throws Throwable { Repository repo = localRepo.geogigCLI.getGeogig().getRepository(); Optional<ObjectId> indexTreeId = resolveIndexTreeId(headRef, null); assertTrue(indexTreeId.isPresent()); RevTree indexTree = repo.indexDatabase().getTree(indexTreeId.get()); Set<org.locationtech.geogig.model.Node> nodes = RevObjectTestSupport.getTreeNodes(indexTree, repo.indexDatabase()); for (org.locationtech.geogig.model.Node n : nodes) { Map<String, Object> extraData = n.getExtraData(); assertTrue(extraData.containsKey(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA)); Map<String, Object> attributeData = (Map<String, Object>) extraData .get(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA); assertTrue(attributeData.containsKey(attributeName)); } }
@SuppressWarnings("unchecked") @Then("^the repository's \"([^\"]*)\" index should track the extra attribute \"([^\"]*)\"$") public void verifyIndexExtraAttributes(String headRef, String attributeName) throws Throwable { Repository repo = localRepo.geogigCLI.getGeogig().getRepository(); Optional<ObjectId> indexTreeId = resolveIndexTreeId(headRef, null); assertTrue(indexTreeId.isPresent()); RevTree indexTree = repo.indexDatabase().getTree(indexTreeId.get()); Set<org.locationtech.geogig.model.Node> nodes = RevObjectTestSupport.getTreeNodes(indexTree, repo.indexDatabase()); for (org.locationtech.geogig.model.Node n : nodes) { Map<String, Object> extraData = n.getExtraData(); assertTrue(extraData.containsKey(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA)); Map<String, Object> attributeData = (Map<String, Object>) extraData .get(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA); assertTrue(attributeData.containsKey(attributeName)); } }
private void testRemove(final int ncount) { final Set<Node> nodes = new HashSet<>(createPointNodes(nodeRange(ncount))); RevTreeBuilder initialTreeBuilder = createQuadTree(maxBounds, nodes); final RevTree tree = initialTreeBuilder.build(); final Set<Node> removedNodes; RevTreeBuilder builder = RevTreeBuilder.quadBuilder(objectStore, objectStore, tree, maxBounds); // collect some keys to remove { Set<Node> treeNodes = RevObjectTestSupport.getTreeNodes(tree, objectStore); assertEquals(nodes, treeNodes); List<Node> list = new ArrayList<>(treeNodes); Collections.shuffle(list); int removeCount = ncount / 10; removedNodes = ImmutableSet.copyOf(list.subList(0, removeCount)); for (Node node : removedNodes) { boolean removed = builder.remove(node); assertTrue("Not removed: " + node, removed); } assertFalse(removedNodes.isEmpty()); } final RevTree result = builder.build(); Set<Node> resultNodes = getNodes(result); SetView<Node> difference = Sets.difference(nodes, resultNodes); assertEquals(removedNodes.size(), difference.size()); assertEquals(removedNodes, difference); }
private void testRemove(final int ncount) { final Set<Node> nodes = new HashSet<>(createPointNodes(nodeRange(ncount))); QuadTreeBuilder initialTreeBuilder = createQuadTree(maxBounds, nodes); initialTreeBuilder.clusteringStrategy(); final RevTree tree = initialTreeBuilder.build(); final Set<Node> removedNodes; QuadTreeBuilder builder = QuadTreeBuilder.create(objectStore, objectStore, tree, maxBounds); // collect some keys to remove { Set<Node> treeNodes = RevObjectTestSupport.getTreeNodes(tree, objectStore); assertEquals(nodes, treeNodes); List<Node> list = new ArrayList<>(treeNodes); Collections.shuffle(list); int removeCount = ncount / 10; removedNodes = ImmutableSet.copyOf(list.subList(0, removeCount)); for (Node node : removedNodes) { boolean removed = builder.remove(node); assertTrue("Not removed: " + node, removed); } assertFalse(removedNodes.isEmpty()); } final RevTree result = builder.build(); Set<Node> resultNodes = getNodes(result); SetView<Node> difference = Sets.difference(nodes, resultNodes); assertEquals(removedNodes.size(), difference.size()); assertEquals(removedNodes, difference); }
Set<Node> oldNodes = getTreeNodes(oldCanonicalTree, objectStore); CanonicalTreeBuilder builder = CanonicalTreeBuilder.create(objectStore, oldCanonicalTree); Set<Node> oldIndexNodes = getTreeNodes(oldIndexTree, indexdb); Set<Node> newIndexNodes = getTreeNodes(updatedIndexTree, indexdb);
Set<Node> oldNodes = getTreeNodes(oldCanonicalTree, objectStore); CanonicalTreeBuilder builder = CanonicalTreeBuilder.create(objectStore, oldCanonicalTree); Set<Node> oldIndexNodes = getTreeNodes(oldIndexTree, indexdb); Set<Node> newIndexNodes = getTreeNodes(updatedIndexTree, indexdb);