Do not join if neighborhood is empty

This commit is contained in:
folex 2022-04-07 17:30:12 +04:00
parent 6763ea05d5
commit 90d428fd62
3 changed files with 47 additions and 74 deletions

View File

@ -31,42 +31,6 @@ func collect_timestamps_from_neighborhood() -> []u64, []PeerId:
-- wait for all nodes to respond or timeout -- wait for all nodes to respond or timeout
length <- Op.array_length(nodes) length <- Op.array_length(nodes)
join statuses[length - 1] if length != 0:
join statuses[length - 1]
<- timestamps, dead_peers <- timestamps, dead_peers
-- -- timestamp getter with error collector over neighborhood
-- func ts_getter_with_timeout()-> []u64, []string:
-- -- timeout in ms
-- rtt = 1000
-- res: *u64
-- -- error value for no timestamp
-- err_value = 0
-- -- neighborhood n = 20 decr by 1 for array
-- n_neighborhood = 19
-- -- err message
-- msg = "timeout"
-- -- collect non-responsive peer ids, if any
-- dead_peers: *string
-- on HOST_PEER_ID:
-- k <- Op.string_to_b58(HOST_PEER_ID)
-- nodes <- Kademlia.neighborhood(k, nil, nil)
-- for n <- nodes par:
-- status: *string
-- on n:
-- res <- Peer.timestamp_ms()
-- status <<- "success"
-- par status <- Peer.timeout(rtt, msg)
-- if status! != "success":
-- res <<- err_value
-- dead_peers <<- n
-- Op.noop()
-- join res[n_neighborhood]
-- <- res, dead_peers

View File

@ -20,7 +20,8 @@
"scripts": { "scripts": {
"start": "node -r ts-node/register src/index.ts", "start": "node -r ts-node/register src/index.ts",
"compile-aqua": "aqua -i aqua -o src/_aqua/", "compile-aqua": "aqua -i aqua -o src/_aqua/",
"watch-aqua": "chokidar \"**/*.aqua\" -c \"npm run compile-aqua\"" "watch-aqua": "chokidar \"**/*.aqua\" -c \"npm run compile-aqua\"",
"buildpush": "docker build -f docker/Dockerfile -t fluencelabs/anti-fuzz . && docker push fluencelabs/anti-fuzz"
}, },
"keywords": [ "keywords": [
"aqua", "aqua",

View File

@ -45,55 +45,63 @@ export function collect_timestamps_from_neighborhood(...args: any) {
(seq (seq
(seq (seq
(seq (seq
(seq (call -relay- ("op" "string_to_b58") [-relay-] k)
(call -relay- ("op" "string_to_b58") [-relay-] k) (call -relay- ("kad" "neighborhood") [k [] []] nodes)
(call -relay- ("kad" "neighborhood") [k [] []] nodes) )
) (par
(par (fold nodes n
(fold nodes n (par
(par (new $status
(new $status (seq
(seq (seq
(seq (seq
(seq (par
(par (xor
(xor (seq
(seq (call n ("peer" "timestamp_ms") [] $timestamps)
(call n ("peer" "timestamp_ms") [] $timestamps) (ap "ok" $status)
(ap "ok" $status) )
) (seq
(seq (call -relay- ("op" "noop") [])
(call -relay- ("op" "noop") []) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
) )
(call -relay- ("peer" "timeout") [2000 "timed out"] $status)
) )
(call -relay- ("op" "identity") [$status.$.[0]!] push-to-stream-30) (call -relay- ("peer" "timeout") [2000 "timed out"] $status)
) )
(ap push-to-stream-30 $statuses) (call -relay- ("op" "identity") [$status.$.[0]!] push-to-stream-30)
) )
(xor (ap push-to-stream-30 $statuses)
(mismatch $status.$.[0]! "ok" )
(ap n $dead_peers) (xor
) (mismatch $status.$.[0]! "ok"
(null) (ap n $dead_peers)
) )
(null)
) )
) )
(next n)
) )
(next n)
) )
(null)
) )
(null)
) )
(call -relay- ("op" "array_length") [nodes] length)
) )
(call -relay- ("math" "sub") [length 1] sub) (call -relay- ("op" "array_length") [nodes] length)
)
(xor
(mismatch length 0
(xor
(seq
(call -relay- ("math" "sub") [length 1] sub)
(call -relay- ("op" "noop") [$statuses.$.[sub]!])
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
(null)
) )
(call -relay- ("op" "noop") [$statuses.$.[sub]!])
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
) )
(call %init_peer_id% ("op" "identity") [$dead_peers] dead_peers-fix) (call %init_peer_id% ("op" "identity") [$dead_peers] dead_peers-fix)
) )
@ -105,10 +113,10 @@ export function collect_timestamps_from_neighborhood(...args: any) {
) )
(xor (xor
(call %init_peer_id% ("callbackSrv" "response") [timestamps-fix dead_peers-fix]) (call %init_peer_id% ("callbackSrv" "response") [timestamps-fix dead_peers-fix])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
) )
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 5])
) )
` `
return callFunction( return callFunction(