* feat(tools): merge some tools into the `air` CLI tool
`air-beautify` and `air-trace` are merged into a single `air` tool. Its
crate name is `fluence-air-cli` as otherwise it confilicts with `air`
interpreter crate. The tool has subcommands `beautify`, `run`
and `stats`.
* Add one-letter aliases to `air` CLI subcommands
+ `air beautify` => `air b`
+ `air run` => `air r`
+ `air stats` => `air s`
---------
Co-authored-by: Mike Voronov <michail.vms@gmail.com>
Remove `UncatchableError::ApResultNotCorrespondToInstr`
This transformation is valid only if `MergerApResult` has only two
variants mentioned in previos version.
Co-authored-by: Ivan Boldyrev <ivan@fluence.one>
Users complain that `warn` level produces lot of unnecessary logs.
+ join behavior logging is demoted to `trace`;
+ xor logging is demoted to `trace`;
+ service error logging is demoted to `debug`.
chore(execution-engine): Some stream-related LambdaError are unjoinable b/c: canon stream replaces normal stream, when canon stream is used, it is materialized and its size is known
`StreamDontHaveSuchGeneration` is a catchable error that could be caught by a xor instruction and then handled by a user. But it makes no sense because this error could arise only iff smth went wrong during merging or when data is corrupted.
* docs: README re-organized
* add repository structure
* fix docs
* docs: A few minor fixes following an earlier discussion
---------
Co-authored-by: vms <michail.vms@gmail.com>
fold over a stream was not convergent when errors are produced inside a fold body. After iteration, it produces if there were several errors, only the last one is bubbled up. But on the same peer, there could different last (and first) errors, and it'll become non-convergent and moreover non-deterministic.
After this PR fold won't bubble any errors to make execution convergent and deterministic. To obtain errors from a fold body one should wrap this body into xor and push errors into some stream. Then fold over this stream and handle errors.
* Experimental performance metering
* Average on repeated runs with `--repeat` option
* Add "version" field to the report
The version is got from `air/Cargo.toml`.
* Allow disabling preparing binaries
with the `--no-prepare-binaries` option.
* Human-readable execution time in the report
* Add dashboard benchmark
* Human-readable text report
* Use CID values for tetraplets and `canon` vectors.
* Rename `cid_store` to `value_store`
It is consistent with the new `tetraplet_store` and `canon_store`
fields.
* Make canon data more typeful
The `CanonResult` doesn't take a JSON value anymore that is further
deserialized elsewhere, but is a struct that has all data deserialized.
* Typeful `CID` type
The `CID` type has a phantom type paramter defining its value's type.
* Group cid stores and trackers
Group cid stores into `CidInfo` struct, and trackers into `ExecutionCidState` struct.
This PR intended to reduce stream usage scope in order to make AquaVM truly deterministic.
Refs: #297.
Co-authored-by: Ivan Boldyrev <ivan@fluence.one>
Co-authored-by: Anatoly Laskaris <github_me@nahsi.dev>
The current peer ID is passed as a new field of `TestRunParameters` named
`current_peer_id: String`, instead of creating an AVM with peer ID.
This is a breaking API change of `avm-interface` and `avm-server`.
1. Network can be shared between several execution, being used by an Rc-handle.
2. The neighborhood is just network's all peers with removed/inserted hosts delta with respect to network.
3. An AIR script is transformed into a separate value of type `TransformedAirScript`. It allows running several
particles on the same parsed AIR script, sharing state.
4. `TestExecutor` was renamed to `AirScriptExecutor`. It also has a constructor that accepts a `TransformedAirScript`.