Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ noinst_HEADERS+= node_prog/base_classes.h \
node_prog/reach_program.h \
node_prog/traverse_with_props.h \
node_prog/discover_paths.h \
node_prog/discover_all_paths.h \
node_prog/get_btc_block.h \
common/cache_constants.h \
common/config_constants.h \
Expand Down Expand Up @@ -145,6 +146,7 @@ weaver_timestamper_SOURCES= common/comm_wrapper.cc \
node_prog/read_node_props_program.cc \
node_prog/traverse_with_props.cc \
node_prog/discover_paths.cc \
node_prog/discover_all_paths.cc \
node_prog/get_btc_block.cc \
db/element.cc \
db/property.cc \
Expand Down Expand Up @@ -219,6 +221,7 @@ weaver_shard_SOURCES= common/ids.cc \
node_prog/read_node_props_program.cc \
node_prog/traverse_with_props.cc \
node_prog/discover_paths.cc \
node_prog/discover_all_paths.cc \
node_prog/get_btc_block.cc \
db/hyper_stub.cc \
db/queue_manager.cc \
Expand Down Expand Up @@ -264,6 +267,7 @@ libweaverclient_la_SOURCES= common/ids.cc \
node_prog/two_neighborhood_program.cc \
node_prog/traverse_with_props.cc \
node_prog/discover_paths.cc \
node_prog/discover_all_paths.cc \
node_prog/get_btc_block.cc \
db/element.cc \
db/property.cc \
Expand Down
54 changes: 54 additions & 0 deletions bindings/python/client.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,16 @@ cdef extern from 'node_prog/discover_paths.h' namespace 'node_prog':
remote_node prev_node
node_handle_t src

cdef extern from 'node_prog/discover_all_paths.h' namespace 'node_prog':
cdef cppclass discover_all_paths_params:
discover_all_paths_params()
node_handle_t dest
uint32_t path_len
vector[prop_predicate] node_preds
vector[prop_predicate] edge_preds
unordered_map[string, vector[edge]] paths
remote_node prev_node

cdef extern from 'node_prog/get_btc_block.h' namespace 'node_prog':
cdef cppclass get_btc_block_params:
get_btc_block_params()
Expand Down Expand Up @@ -426,6 +436,7 @@ cdef extern from 'client/client.h' namespace 'cl':
weaver_client_returncode node_get_program(vector[pair[string, node_get_params]] &initial_args, node_get_params&) nogil
weaver_client_returncode traverse_props_program(vector[pair[string, traverse_props_params]] &initial_args, traverse_props_params&) nogil
weaver_client_returncode discover_paths_program(vector[pair[string, discover_paths_params]] &initial_args, discover_paths_params&) nogil
weaver_client_returncode discover_all_paths_program(vector[pair[string, discover_all_paths_params]] &initial_args, discover_all_paths_params&) nogil
weaver_client_returncode get_btc_block_program(vector[pair[string, get_btc_block_params]] &initial_args, get_btc_block_params&) nogil
weaver_client_returncode start_migration()
weaver_client_returncode single_stream_migration()
Expand Down Expand Up @@ -998,6 +1009,49 @@ cdef class Client:
ret_paths[cur_node] = cur_edges
inc(path_iter)
return ret_paths
def discover_all_paths(self, start_node, end_node, path_len=None, node_preds=None, edge_preds=None):
cdef vector[pair[string, discover_all_paths_params]] c_args
cdef pair[string, discover_all_paths_params] arg_pair
arg_pair.first = start_node
arg_pair.second.prev_node = coordinator
arg_pair.second.dest = end_node
# arg_pair.second.src = start_node
if path_len is not None:
arg_pair.second.path_len = path_len
cdef prop_predicate pred_c
if node_preds is not None:
arg_pair.second.node_preds.reserve(len(node_preds))
for pred in node_preds:
self.__convert_pred_to_c_pred(pred, pred_c)
arg_pair.second.node_preds.push_back(pred_c)
if edge_preds is not None:
arg_pair.second.edge_preds.reserve(len(edge_preds))
for pred in edge_preds:
self.__convert_pred_to_c_pred(pred, pred_c)
arg_pair.second.edge_preds.push_back(pred_c)
c_args.push_back(arg_pair)

cdef discover_all_paths_params c_rp
with nogil:
code = self.thisptr.discover_all_paths_program(c_args, c_rp)

if code != WEAVER_CLIENT_SUCCESS:
raise WeaverError(code, 'node prog error')

ret_paths = {}
cdef unordered_map[string, vector[edge]].iterator path_iter = c_rp.paths.begin()
cdef vector[edge].iterator edge_iter
while path_iter != c_rp.paths.end():
cur_node = str(deref(path_iter).first)
cur_edges = []
edge_iter = deref(path_iter).second.begin()
while edge_iter != deref(path_iter).second.end():
cur_edges.append(Edge())
self.__convert_edge_to_client_edge(deref(edge_iter), cur_edges[-1])
inc(edge_iter)
ret_paths[cur_node] = cur_edges
inc(path_iter)
return ret_paths

def get_btc_block(self, block):
cdef vector[pair[string, get_btc_block_params]] c_args
Expand Down
6 changes: 6 additions & 0 deletions client/client.cc
Original file line number Diff line number Diff line change
Expand Up @@ -526,6 +526,12 @@ client :: discover_paths_program(std::vector<std::pair<std::string, node_prog::d
SPECIFIC_NODE_PROG(node_prog::DISCOVER_PATHS);
}

weaver_client_returncode
client :: discover_all_paths_program(std::vector<std::pair<std::string, node_prog::discover_all_paths_params>> &initial_args, node_prog::discover_all_paths_params &return_param)
{
SPECIFIC_NODE_PROG(node_prog::DISCOVER_ALL_PATHS);
}

weaver_client_returncode
client :: get_btc_block_program(std::vector<std::pair<std::string, node_prog::get_btc_block_params>> &initial_args, node_prog::get_btc_block_params &return_param)
{
Expand Down
2 changes: 2 additions & 0 deletions client/client.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#include "node_prog/node_get_program.h"
#include "node_prog/traverse_with_props.h"
#include "node_prog/discover_paths.h"
#include "node_prog/discover_all_paths.h"
#include "node_prog/get_btc_block.h"

namespace cl
Expand Down Expand Up @@ -99,6 +100,7 @@ namespace cl
weaver_client_returncode node_get_program(std::vector<std::pair<std::string, node_prog::node_get_params>> &initial_args, node_prog::node_get_params&);
weaver_client_returncode traverse_props_program(std::vector<std::pair<std::string, node_prog::traverse_props_params>> &initial_args, node_prog::traverse_props_params&);
weaver_client_returncode discover_paths_program(std::vector<std::pair<std::string, node_prog::discover_paths_params>> &initial_args, node_prog::discover_paths_params&);
weaver_client_returncode discover_all_paths_program(std::vector<std::pair<std::string, node_prog::discover_all_paths_params>> &initial_args, node_prog::discover_all_paths_params&);
weaver_client_returncode get_btc_block_program(std::vector<std::pair<std::string, node_prog::get_btc_block_params>> &initial_args, node_prog::get_btc_block_params&);

weaver_client_returncode start_migration();
Expand Down
Loading