Skip to content

Commit

Permalink
[FAST-EDGE]: Align some flow to avoid conflict on bypassing node saving
Browse files Browse the repository at this point in the history
  • Loading branch information
amadolid committed Sep 11, 2023
1 parent e6b127a commit b46cfdd
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 55 deletions.
6 changes: 5 additions & 1 deletion jaseci_core/jaseci/prim/edge.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
class Edge(Element, Anchored):
"""Edge class for Jaseci"""

def __init__(self, **kwargs):
def __init__(self, smart: bool = False, **kwargs):
self.smart = smart
self.from_node_id = None
self.to_node_id = None
self.bidirected: bool = False
Expand Down Expand Up @@ -103,6 +104,9 @@ def save(self):
"""
Write self through hook to persistent storage
"""
if self.smart:
self.from_node().save()

if self.is_fast():
self._persist = False
super().save()
Expand Down
12 changes: 10 additions & 2 deletions jaseci_core/jaseci/prim/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,22 @@ def smart_build_fast_edge_ids(self):
for v in self.fast_edges[k]:
link_order = [v[0], self.jid] if v[1] == FROM else [self.jid, v[0]]
edge = Edge(
m_id=self._m_id, h=self._h, kind="edge", name=k, auto_save=False
smart=True,
m_id=self._m_id,
h=self._h,
kind="edge",
name=k,
auto_save=False,
)
edge.from_node_id = link_order[0]
edge.to_node_id = link_order[1]
edge.bidirected = v[1] == BI
edge.jid = v[2] if len(v) > 2 else uuid.uuid4().urn
edge.context = v[3] if len(v) > 3 else {}
edge.save()
# old `edge.save()` might be confusing
# this line doesn't mean it has to be saved on db
# it only needs to be available on cache (memory, redis)
self._h.commit_obj_to_cache(edge, True)
self._fast_edge_ids.add_obj(edge, bypass=True)

def smart_add_edge(self, obj):
Expand Down
77 changes: 38 additions & 39 deletions jaseci_core/jaseci/tests/jac_test_code.py
Original file line number Diff line number Diff line change
Expand Up @@ -1189,54 +1189,53 @@


simple_graph = """
node a {
has val = 0;
}
node b {
has val = 0;
}
node c {
has val = 0;
}
node d {
has val = 0;
}
node e {
has val = 0;
}
node a1 {has val = 0;}
node a2 {has val = 0;}
node a3 {has val = 0;}
node b1 {has val = 0;}
node b2 {has val = 0;}
edge e1 {has val = 0;}
edge e2 {has val = 0;}
edge e3 {has val = 0;}
walker sample {
root {
take --> node::a else: take spawn here ++> node::a;
take --> node::b else: take spawn here ++> node::b;
take --> node::a1 else: take spawn here +[e1]+> node::a1;
take --> node::b1 else: take spawn here ++> node::b1;
}
a {
take --> node::c else: take spawn here ++> node::c;
}
b {
take --> node::d else: take spawn here ++> node::d;
}
c {
take --> node::e else: take spawn here ++> node::e;
a1: take --> node::a2 else {
report --> node::a2;
report -[e2]-> node::a2;
take spawn here +[e2]+> node::a2;
}
a2: take --> node::a3 else: take spawn here +[e3]+> node::a3;
b1: take --> node::b2 else: take spawn here ++> node::b2;
}
walker sample2 {
root {
take --> node::a;
take --> node::b;
}
a: take --> node::c;
b: take --> node::d;
c: take --> node::e;
d: here.val = 1;
e: here.val = 2;
take --> node::a1;
take --> node::b1;
}
a1: take --> node::a2;
a2: take --> node::a3;
a3: here.val = 1;
b1: take --> node::b2;
b2: here.val = 1;
}
walker sample3 {
root {
take --> node::a1;
take --> node::b1;
}
a1: take --> node::a2;
b1: take --> node::b2;
a2 {
take --> node::a3;
-[e3]->.edge[0].val = 1;
}
a3: here.val = 2;
}
"""
42 changes: 29 additions & 13 deletions jaseci_serv/jaseci_serv/base/tests/test_orm_hooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -329,22 +329,26 @@ def test_node_saves_on_traversing_graphs(self):
self.assertSetEqual(
set(
[
"e::node",
"a::node",
"b::architype",
"root::architype",
"d::architype",
"b::node",
"basic::sentinel",
"d::node",
"c::node",
"generic::architype",
"a::architype",
"c::architype",
"root::graph",
"e::architype",
"a1::node",
"a2::node",
"a3::node",
"b1::node",
"b2::node",
"root::architype",
"a1::architype",
"a2::architype",
"a3::architype",
"b1::architype",
"b2::architype",
"e1::architype",
"e2::architype",
"e3::architype",
"generic::architype",
"sample::architype",
"sample2::architype",
"sample3::architype",
"generic::architype",
]
),
Expand All @@ -365,6 +369,18 @@ def test_node_saves_on_traversing_graphs(self):
test_walker.run()

self.assertSetEqual(
set(["d::node", "e::node"]),
set(["b2::node", "a3::node"]),
set([item.name + "::" + item.j_type for item in hook.save_obj_list]),
)

hook.commit()
hook.clear_cache()

test_walker = sent.run_architype("sample3")
test_walker.prime(gph)
test_walker.run()

self.assertSetEqual(
set(["a2::node", "a3::node"]),
set([item.name + "::" + item.j_type for item in hook.save_obj_list]),
)

0 comments on commit b46cfdd

Please sign in to comment.