При использовании следующего оператора Gremlin для запроса AWS Neptune, CompletableFuture не возвращает желаемый результат. Когда я пробовал следующее:
graphTraversal.promise(Traversal::hasNext());
Сценарий 1:
Он работает для одной вершины g.V('id-1').promise(Traversal::hasNext())
возвращает true
Но когда я использую g.V('id-1','id-2').promise(Traversal::hasNext())
, он все равно возвращает true вместо false , поскольку id-2
недоступен в db
Сценарий 2:
при создании списка ребер следующим образом, как сделать так, чтобы запрос возвращал false, если какое-либо из ребер не создано.
CompletableFuture<Boolean> method1() {
List<Edge> edgeList = new ArrayList();
edgeList.add(edge1);// vertex2 -> vertex3`
edgeList.add(edge2);// vertex1(not present) -> vertex2
edgeList.add(edge3);// vertex3 -> vertex4
GraphTraversal g = null;
loop(edgeList: e) {
g = graphTraversalQueryMethod(g, e);
}
return g.promise(Traversal::hasNext);
}
GraphTraversal graphTraversalQueryMethod(GraphTraversal g, Edge e) {
g.V(e.sourceVertexId).addE("EDGE_LABEL").property(e.propKey, e.propValue).to(e.destVertexId);
}
Возвращает false, но, useCase: (предположим, что исходная / конечная вершины ребра отсутствуют)
- создается edge1
- edge2 не создается, так как исходная вершина1 отсутствует
- edge3 также не создается, даже если у него есть как исходная, так и конечная вершины, доступные в db
- , поэтому результат возвращается как false с созданием 1 (edge1) допустимого ребра из 2 (edge1, edge3)
Есть ли возможность откатить всю транзакцию с помощью гремлина в нептуне? чтобы выполнить этот запрос после того, как недостающая вершина 1 была создана каким-либо другим способом.
Или любая идея для обработки / захвата отсутствующей транзакции. Пожалуйста, исправьте меня, если мне нужно изменить формирование запроса.
Примечание: по крайней мере, мне нужно захватить края / любая транзакция не выполняется при выполнении запроса. Здесь используется Java.
Было бы полезно, если бы у вас были предложения по каким-либо передовым методам для достижения этого!