protected @Override void compute() { List<RevTree> save = new ArrayList<>(); save.add(tree); List<ForkJoinTask<?>> subTasks = new ArrayList<>(); if (tree.bucketsSize() > 0) { Iterable<ObjectId> bucketIds; Iterator<RevTree> buckets; bucketIds = Streams.stream(tree.getBuckets()).map(Bucket::getObjectId) .collect(Collectors.toList()); buckets = src.getAll(bucketIds, BulkOpListener.NOOP_LISTENER, RevTree.class); while (buckets.hasNext()) { RevTree bucket = buckets.next(); if (bucket.bucketsSize() == 0) { save.add(bucket); } else { if (!target.exists(bucket.getId())) { TreeCopyTask task = new TreeCopyTask(bucket, src, target); subTasks.add(task); } } } } subTasks.add(new SaveTask(save, target)); super.invokeAll(subTasks); } }
protected @Override void compute() { List<TreeCopyTask> treeTasks = new ArrayList<>(); Set<IndexTreeMapping> mappings = new HashSet<>(); try (AutoCloseableIterator<IndexTreeMapping> indexMappings = src .resolveIndexedTrees(index)) { mappings = Sets.newHashSet(indexMappings); } for (IndexTreeMapping mapping : mappings) { ObjectId indexTreeId = mapping.indexTree; if (!target.exists(indexTreeId)) { TreeCopyTask task = new TreeCopyTask(src.getTree(indexTreeId), src, target); treeTasks.add(task); } } super.invokeAll(treeTasks); IndexInfo targetIndex = target.createIndexInfo(index.getTreeName(), index.getAttributeName(), index.getIndexType(), index.getMetadata()); mappings.forEach(m -> target.addIndexedTree(targetIndex, m.featureTree, m.indexTree)); }