mirror of
https://github.com/fluencelabs/aquavm
synced 2025-06-13 06:51:22 +00:00
feat(interpreter-data)!: New data format for calls (#501)
BREAKING CHANGE: 1. Call values in the trace have CID references to structures that have call arguments' hash and CID references to values and tetraplets. 2. If call value is unused, it is serialized with `Unused` variant, and CID references are not stored. Previous data scheme was (Scalar as an example, other cases are similar): ``` Scalar(CID<JValue>) ---<value_store>----> JValue ``` New data scheme is much more sophisticated: ``` Scalar(CID<ServiceResultAggregate>) ---+ | +----<service_result_store>----------+ | +-------> ServiceResultAggregate: value_cid ------------<value_store>----> JValue tetraplet_cid --------<tetraplet_store>----> SecurityTetraplet argument_hash: String ``` `Stream` variant is similar, however, `Unused` is different: it has value CID only, but the value is not stored into the `value_store`: ``` Unused(Rc<CID<JValue>>) ---> X ``` Co-authored-by: Mike Voronov <michail.vms@gmail.com>
This commit is contained in:
@ -287,8 +287,19 @@ mod tests {
|
||||
assert_eq!(
|
||||
trace,
|
||||
ExecutionTrace::from(vec![
|
||||
scalar(json!([{"p":"peer2","v":2},{"p":"peer3","v":3},])),
|
||||
scalar_number(12),
|
||||
scalar!(
|
||||
json!([{"p":"peer2","v":2},{"p":"peer3","v":3}]),
|
||||
peer = "peer1",
|
||||
service = "service..0",
|
||||
function = "func"
|
||||
),
|
||||
scalar!(
|
||||
12,
|
||||
peer = "peer2",
|
||||
service = "service..1",
|
||||
function = "func",
|
||||
args = vec![json!({"p":"peer2","v":2}), json!(1)]
|
||||
),
|
||||
request_sent_by("peer2"),
|
||||
])
|
||||
);
|
||||
@ -305,8 +316,19 @@ mod tests {
|
||||
assert_eq!(
|
||||
trace,
|
||||
ExecutionTrace::from(vec![
|
||||
scalar(json!([{"p":"peer2","v":2},{"p":"peer3","v":3},])),
|
||||
scalar_number(12),
|
||||
scalar!(
|
||||
json!([{"p":"peer2","v":2},{"p":"peer3","v":3}]),
|
||||
peer = "peer1",
|
||||
service = "service..0",
|
||||
function = "func"
|
||||
),
|
||||
scalar!(
|
||||
12,
|
||||
peer = "peer2",
|
||||
service = "service..1",
|
||||
function = "func",
|
||||
args = vec![json!({"p":"peer2","v":2}), json!(1)]
|
||||
),
|
||||
request_sent_by("peer2"),
|
||||
])
|
||||
);
|
||||
@ -360,9 +382,19 @@ mod tests {
|
||||
assert_eq!(
|
||||
&*trace,
|
||||
vec![
|
||||
executed_state::scalar(json!(["peer2", "peer3"])),
|
||||
executed_state::scalar(json!(42)),
|
||||
executed_state::scalar(json!(43)),
|
||||
scalar!(json!(["peer2", "peer3"]), peer = "peer1", service = "..0"),
|
||||
unused!(
|
||||
json!(42),
|
||||
peer = "peer2",
|
||||
service = "..1",
|
||||
args = vec!["peer2"]
|
||||
),
|
||||
unused!(
|
||||
json!(43),
|
||||
peer = "peer3",
|
||||
service = "..1",
|
||||
args = vec!["peer3"]
|
||||
),
|
||||
]
|
||||
);
|
||||
}
|
||||
@ -432,8 +464,19 @@ mod tests {
|
||||
assert_eq!(
|
||||
trace,
|
||||
ExecutionTrace::from(vec![
|
||||
scalar(json!([{"p":"peer2","v":2},{"p":"peer3","v":3},{"p":"peer4"}])),
|
||||
scalar_number(12),
|
||||
scalar!(
|
||||
json!([{"p":"peer2","v":2},{"p":"peer3","v":3},{"p":"peer4"}]),
|
||||
peer = "peer1",
|
||||
service = "service..0",
|
||||
function = "func"
|
||||
),
|
||||
scalar!(
|
||||
12,
|
||||
peer = "peer2",
|
||||
service = "service..1",
|
||||
function = "func",
|
||||
args = vec![2, 1]
|
||||
),
|
||||
request_sent_by("peer2"),
|
||||
])
|
||||
);
|
||||
@ -451,8 +494,19 @@ mod tests {
|
||||
assert_eq!(
|
||||
trace,
|
||||
ExecutionTrace::from(vec![
|
||||
scalar(json!([{"p":"peer2","v":2},{"p":"peer3","v":3},{"p":"peer4"}])),
|
||||
scalar_number(12),
|
||||
scalar!(
|
||||
json!([{"p":"peer2","v":2},{"p":"peer3","v":3},{"p":"peer4"}]),
|
||||
peer = "peer1",
|
||||
service = "service..0",
|
||||
function = "func"
|
||||
),
|
||||
scalar!(
|
||||
12,
|
||||
peer = "peer2",
|
||||
service = "service..1",
|
||||
function = "func",
|
||||
args = vec![2, 1]
|
||||
),
|
||||
request_sent_by("peer2"),
|
||||
])
|
||||
);
|
||||
@ -489,7 +543,16 @@ mod tests {
|
||||
|
||||
assert_eq!(
|
||||
trace_from_result(outcome1),
|
||||
ExecutionTrace::from(vec![scalar_number(1), request_sent_by("peer1"),]),
|
||||
ExecutionTrace::from(vec![
|
||||
scalar!(
|
||||
1,
|
||||
peer = "peer1",
|
||||
service = "service..0",
|
||||
function = "func",
|
||||
args = vec![1, 22]
|
||||
),
|
||||
request_sent_by("peer1"),
|
||||
]),
|
||||
)
|
||||
}
|
||||
|
||||
@ -525,11 +588,21 @@ mod tests {
|
||||
|
||||
assert_eq!(
|
||||
trace_from_result(&trace1),
|
||||
ExecutionTrace::from(vec![scalar_number(42)]),
|
||||
ExecutionTrace::from(vec![unused!(
|
||||
42,
|
||||
peer = peer,
|
||||
service = "service..0",
|
||||
function = "function"
|
||||
)]),
|
||||
);
|
||||
assert_eq!(
|
||||
trace_from_result(&trace2),
|
||||
ExecutionTrace::from(vec![scalar_number(24)]),
|
||||
ExecutionTrace::from(vec![unused!(
|
||||
24,
|
||||
peer = peer,
|
||||
service = "service..1",
|
||||
function = "function"
|
||||
)]),
|
||||
);
|
||||
}
|
||||
|
||||
@ -571,11 +644,21 @@ mod tests {
|
||||
|
||||
assert_eq!(
|
||||
trace_from_result(&trace1),
|
||||
ExecutionTrace::from(vec![scalar_number(42)]),
|
||||
ExecutionTrace::from(vec![unused!(
|
||||
42,
|
||||
peer = peer,
|
||||
service = "service",
|
||||
function = "function"
|
||||
),]),
|
||||
);
|
||||
assert_eq!(
|
||||
trace_from_result(&trace2),
|
||||
ExecutionTrace::from(vec![scalar_number(24)]),
|
||||
ExecutionTrace::from(vec![unused!(
|
||||
24,
|
||||
peer = peer,
|
||||
service = "service",
|
||||
function = "function"
|
||||
),]),
|
||||
);
|
||||
}
|
||||
|
||||
@ -624,7 +707,13 @@ mod tests {
|
||||
|
||||
assert_eq!(
|
||||
trace_from_result(outcome),
|
||||
ExecutionTrace::from(vec![scalar_string("service"),]),
|
||||
ExecutionTrace::from(vec![scalar!(
|
||||
"service",
|
||||
peer = "peer1",
|
||||
service = "service..0",
|
||||
function = "func",
|
||||
args = vec![1, 22]
|
||||
),]),
|
||||
)
|
||||
}
|
||||
|
||||
@ -648,7 +737,13 @@ mod tests {
|
||||
|
||||
assert_eq!(
|
||||
trace_from_result(outcome),
|
||||
ExecutionTrace::from(vec![scalar_string("func"),]),
|
||||
ExecutionTrace::from(vec![scalar!(
|
||||
"func",
|
||||
peer = "peer1",
|
||||
service = "service..0",
|
||||
function = "func",
|
||||
args = vec![1, 22]
|
||||
),]),
|
||||
)
|
||||
}
|
||||
|
||||
@ -672,7 +767,13 @@ mod tests {
|
||||
|
||||
assert_eq!(
|
||||
trace_from_result(outcome),
|
||||
ExecutionTrace::from(vec![scalar_number(22),]),
|
||||
ExecutionTrace::from(vec![scalar!(
|
||||
22,
|
||||
peer = "peer1",
|
||||
service = "service..0",
|
||||
function = "func",
|
||||
args = vec![1, 22]
|
||||
),]),
|
||||
)
|
||||
}
|
||||
|
||||
@ -696,17 +797,23 @@ mod tests {
|
||||
|
||||
assert_eq!(
|
||||
trace_from_result(outcome),
|
||||
ExecutionTrace::from(vec![scalar(json!([[{
|
||||
"function_name": "",
|
||||
"json_path": "",
|
||||
"peer_pk": "peer1",
|
||||
"service_id": "",
|
||||
}], [{
|
||||
"function_name": "",
|
||||
"json_path": "",
|
||||
"peer_pk": "peer1",
|
||||
"service_id": "",
|
||||
}]]))]),
|
||||
ExecutionTrace::from(vec![scalar!(
|
||||
json!([[{
|
||||
"function_name": "",
|
||||
"json_path": "",
|
||||
"peer_pk": "peer1",
|
||||
"service_id": "",
|
||||
}], [{
|
||||
"function_name": "",
|
||||
"json_path": "",
|
||||
"peer_pk": "peer1",
|
||||
"service_id": "",
|
||||
}]]),
|
||||
peer = peer,
|
||||
service = "service..0",
|
||||
function = "func",
|
||||
args = vec![1, 22]
|
||||
)]),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user