Commit Graph

80 Commits

Author SHA1 Message Date
renovate[bot]
9cf326f1dd
chore(deps): update rust crate serde to 1.0.151 (#398)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-26 21:45:08 +07:00
Ivan Boldyrev
03e63810f4
fix(interpreter-cid): fix Cargo.toml keyword list (#412)
It was too long, and the crate was rejected by the crates.io.
2022-12-26 20:58:04 +07:00
Ivan Boldyrev
4ffad8d6b5
Fix interpreter-cid compilation (#411)
The serde crate was missing "derive" feature.
2022-12-26 19:35:49 +07:00
Ivan Boldyrev
0226c062f8
feat!(execution-engine): Store call executed values as CIDs in the data (#401)
The trace stores CID strings for call result values.  These strings are to be resolved to real values with `InterpreterData::cid_store` map.
2022-12-26 15:45:14 +07:00
Ivan Boldyrev
004ce10abd
Make unstable clippy happy with clippy --fix (#402)
Most of changes either move variables into `format!` templates
or remove excessive clones.
2022-12-12 22:37:05 +07:00
Mike Voronov
9fe7afb897
feat(all): reduce stream usage scope (#298)
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>
2022-11-30 17:38:32 +03:00
Ivan Boldyrev
becdedc364
feat!(avm-server): Per-call current_peer_id (#381)
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`.
2022-11-25 14:59:09 +07:00
renovate[bot]
d3bda16e71
fix(deps): update all non-major rust dependencies (#369)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-24 12:54:40 +03:00
Anatolios Laskaris
c33d46619d
ci: Update e2e (#378) 2022-11-16 14:49:51 +02:00
renovate[bot]
bbc521ce53
fix(deps): update all non-major rust dependencies (#338)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-15 21:08:46 +03:00
Mike Voronov
8c3f9a3090
feat(interpreter-data): add interpreter version in data (#367) 2022-10-13 12:50:32 +03:00
Mike Voronov
a60b61e1a1
fix(execution-engine): save order between current generations (#366)
Co-authored-by: Valery Antopol <valery.antopol@gmail.com>
2022-10-12 04:29:31 +03:00
Mike Voronov
bf8aee7f15
fix(execution-engine): fix invalid iteration over stream (#362)
This PR is mostly a revertion of #357, that is needed to make stream work correctly in fold itrerations.

Closes #363.
2022-10-11 01:41:22 +03:00
Mike Voronov
eafdec5d86
fix(aquavm): temporary fix entire value in canon (#358) 2022-10-10 22:15:28 +03:00
Mike Voronov
01bbca72c2
fix(air-parser): allow non used streams in validator (#360)
Validator checks that stream used in `canon` is populated by a value in a supplied script. This PR removes this check, because it's useful for code generation.
2022-10-10 15:51:03 +03:00
Mike Voronov
910f1665eb
fix(trace-handler): fix fold and canon compatibility (#357)
Fixes bug of traces divergence when `canon` is used inside `fold`.

Closes #356.
2022-10-09 12:56:12 +03:00
Mike Voronov
cd598c28ae
refactor(aquavm): improve readability of ap merger and handler (#354)
At the moment `Ap` state contains vector of generations, although the ap instruction itself allow to specify only one stream. It was done to support several streams in a result position in a future. But the current realization allows to handle empty vector that was implemented to support states for scalars and it turned out (for more info see #326) that states for scalars aren't actually needed.

Closes #355.
2022-10-07 14:38:29 +03:00
Mike Voronov
a8b227caf5
refactor(aquavm): getting rid of CallOutputValue in call merger (#353)
This PR refactors call merger of `TraceHandler`. Previously it requires `CallOutputValue` to determine a type of call output value (stream or scalar). And internally it checked correspondence between data result and call output type and return a error if they are not equal. Although execution engine component also had a match over these values and does nothing if they are not matched since `TraceHandler` did this job. This PR eliminate such behaviour and improve isolation of AquaVM modules.
2022-10-06 19:59:47 +03:00
Mike Voronov
c3aa8efa04
chore(tests): rename all *.clj files to *.air (#352) 2022-10-06 15:56:31 +03:00
Mike Voronov
ccbd3262a3
feat(aquavm): allow to set last instruction of fold (#349) 2022-10-01 23:41:30 +03:00
Valery Antopol
dd0c458339
fix: cannon treats ap with different generations as incompatible (#350)
Fixes #348.
2022-09-30 21:43:51 +03:00
Ivan Boldyrev
2e98712cb2
fix(execution-engine) Restricted stream bugfix (#337)
Use proper stream generation structures for call results merged from current data.

Closes #302.

Co-authored-by: vms <michail.vms@gmail.com>
2022-09-30 03:10:24 +07:00
Ivan Boldyrev
4a2e8be178
refactor(parser): use AirPos type for AIR script position (#341)
Use a dedicated wrapper type for better type safety and self-documented code.
2022-09-29 00:16:37 +03:00
Mike Voronov
c85b2e2fbf
feat(execution-engine): change behaviour of fold over streams (#340)
feat(execution-engine): change behaviour of fold over streams

Change behaviour of fold over streams to make it more similar to pi-calculus channels/names (for more info see #333).

Closes #333.

BREAKING CHANGE:

The new stream behaviour is not compatible with old one, such as
```
(fold $stream iterator
   (seq
       (call ...)
       (next iterator)))
```
will never end after this change (for more info again see #333).
2022-09-28 22:03:54 +03:00
Mike Voronov
20bb230a3a
Introduce never instruction (#335) 2022-09-19 14:36:46 +03:00
renovate[bot]
ad504bce8b
Update all non-major Rust dependencies (#330)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-09-19 14:07:34 +03:00
Anatoly Laskaris
ca62bd6066
chore: release (#329) 2022-09-13 19:08:47 +03:00
renovate[bot]
40bb3c843f
Update all non-major Rust dependencies (#323)
* Update all non-major Rust dependencies

* bump fluence-app-service version

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Valery Antopol <valery.antopol@gmail.com>
2022-09-13 19:03:18 +03:00
Ivan Boldyrev
89355d9da3
style: Misc clippy fixes (#327)
* Add warn(rust_2018_idioms) to remaining crates
 air-beautifier, air-beautify and air-trace now have this lint too.

* Fix more warnings
2022-09-13 20:54:57 +07:00
renovate[bot]
a77fb3395c
Update all non-major Rust dependencies (#321) 2022-09-09 13:36:19 +03:00
Mike Voronov
a4011ef038
Introduce length functor (#314) 2022-09-08 16:58:04 +03:00
renovate[bot]
b4195175db
Update all non-major Rust dependencies (#309)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Anatoly Laskaris <github_me@nahsi.dev>
2022-09-07 12:10:07 +03:00
Ivan Boldyrev
619e8829a9
Get rid of unsafe code in the interpreter (#303)
* Get rid of unsafe code unless really necessary

* Add lint levels where appropriate

Some crates (air-beautifier, air-testing-framework) have lot of
rust_2018_idioms violations, that will be resolved later.
2022-09-06 00:03:30 +07:00
Mike Voronov
5072fba9d6
Introduce canon instruction (#292) 2022-08-26 00:43:43 +03:00
Ivan Boldyrev
5c7e88e0f2
Refactor avm-server interface mod to new crate (#294)
* Refactor `avm-server` interface mod to new crate (#294)

The new crate name is `avm-interface`.

It allows to build fully native air-trace, including pure WASM build.

* Make fully native air-trace build

Unless `wasm` feature is enabled (default), fully native build is
produced.  You may build WASM air-trace binary with

`cargo build --target wasm32-wasi --no-default-features --release -p air-trace`

* Fix tracing output on native air-trace build

Wrong option was used.
2022-08-19 16:29:21 +07:00
Mike Voronov
dcab0023d8
fix bug with ap merger #295 (#296) 2022-08-18 22:31:29 +03:00
Mike Voronov
0d9390d333
make clippy happy (#291) 2022-08-10 12:27:06 +03:00
Ivan Boldyrev
0c387f7415
Adjust air-trace options (#289)
1. Introduce --runner-tracing-params for enable and disable tracing of runner.
2. Adjust some function's tracing levels to make default traces less noisy.
2022-08-04 20:51:54 +07:00
Valery Antopol
52f0390eb8
Update marine-rs-sdk to 0.7.0 to fix memory leak (#287) 2022-07-27 16:40:27 +03:00
Ivan Boldyrev
0eb37800b6
AquaVM benchmarks (#283)
* Fix stale benchmarks
* Data (de)serialization and execution benchmarks:

Two kind of benchmark: relatively short, but with huge call results, and
long trace of small call results.  Moreover, there are two case for each:
with same data to be merged with comparison, and data from different
par branches merged w/o comparison.
2022-07-08 21:07:04 +07:00
Ivan Boldyrev
c3cea695c8
air-trace util for measuring AquaVM performance with tracing crate.
`air-trace run` subcommand allows to run AquaVM on any data, it allows to define most AquaVM inputs, providing defaults for most of them, and sets up either human-readable or JSON tracing output, the latter can be later processed by `air-trace stats`.

Anomaly data input is also supported, that is useful for slow data investigation.

Native execution mode can be used for native profiling.  Please note, however, that current version cannot be built natively on Apple Sillicon processor yet, as invariably depends on the `avm-server` because of leaking types that should be refactored or hidden.  The `--repeat` option can repeat the execution several times for the execution to dominate on input data reading and output.

High-level or rare calls have "info" trace level, instructions are "debug", and sub-instruction calls are "tracing".  Over-detailed tracing can induce overhead that spoils timing data.
2022-07-07 18:44:58 +07:00
Ivan Boldyrev
6df2b9d084
Introduce TracePos type for trace positions (#273)
Many internal structures refer to trace positions; this is an important type of values. In the code, it is sometimes `u32`, sometimes `usize`. While such variables usually have "_pos" suffix, having a dedicated type does improve code with type guarantees.
2022-06-10 12:29:56 +07:00
Ivan Boldyrev
e0f6fa1b4d
Run tests with sanitizers (#274)
As `wasm32-wasi` target doesn't seem to support sanitizers, we are to
execute tests with native code.  The feature `test_with_native_code` is
introduced for that.

Closes #247.
2022-06-10 12:28:40 +07:00
Ivan Boldyrev
56609c276f
Set an empty subtrace on a fold lore absent in trace (#270)
In the `FoldFSM` and related functions.

Closes #222
2022-06-01 22:00:05 +07:00
Ivan Boldyrev
3c23ab735c
Refactor call triplets (#269)
Older grammar allowed some variabilty in triple format.  Now, the only
format allowed is:

  `peer_id (service_id function_name)`

As less errors can happen during parsing of the triplet, the code was
simplified further .

Closes #267.
2022-05-19 19:59:08 +07:00
vms
99d7aa0d93 Fix Display impl for next 2022-05-19 09:53:32 +03:00
Mike Voronov
24f0d66bed
Rename subtree to subgraph (#265)
Intially, a fold instruction was designed based on idea that its iterable can't expand,
so AIR was considered as a subtree. But after introducing recursive streams in #225, it's
no more a subtree, but a subgraph.
2022-05-17 15:53:33 +03:00
Ivan Boldyrev
dbd42cdf3d Fix Display of Fail::Literal
The error message was displayed without quotes.
2022-05-17 15:35:37 +07:00
Ivan Boldyrev
ec3d3a4e6f Fix Display of Value::LastError with lambda
There was a small typo in the `fn display_last_error`.

Closes #263
2022-05-17 12:57:27 +07:00
Ivan Boldyrev
dcfa51c756 Use pooled AVMRunner for tests
Use pooled `avm::server::AVMRunner` instances of
air_iterpreter_server.wasm to reduce tests' running time.  It avoids
repeated WASM loading and compilation.

On my hardware, `cargo test --release` execution time (precompiled)
decreases from almost 6 minutes to 1.5 minutes.
2022-05-16 13:16:28 +07:00