Commit Graph

179 Commits

Author SHA1 Message Date
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
Ivan Boldyrev
b929614b4c
wasm-air-beautify WASM module (#325)
It provides a `beautify` method to output a "beautified"
(python-style formatted) AIR script.

The method returns a string or raises an exception.
2022-09-19 19:31:12 +07: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
Ivan Boldyrev
513eb0e126
Testing framework, chapter I (#293)
Testing framework for AquaVM

Its primary features are:
1. It generates services declaratively by annotation in the comments inserted just after calls.
2. Ephemeral network keeps each node's data and incoming data queue.  The network can be also generated based on peer IDs featured in the script.
3. One can explicitly add additional peers and services.

The example of the script annotations:
```
(seq
  (call "peer_1" ("service" "func") [] var) ; ok=42
  (call "peer_2" ("service" "func") [var]) ; err={"ret_code": 1, "result":"no towel"}
)
```

Passing this script to `air_test_framework::TestExecutor::new(...)` will create a virtual network with peers "peer_1" and "peer_2" (and any peer you provide in the `TestRunParameters`), and the particular calls will return respective values.

Please note that autogenerated services use modified service name as a side channel for finding a correct value: "..{N}" is added to each service name (two dots and serial number).  Be careful with service names taken from a variable.
2022-09-01 18:12:55 +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
4acfb19e08
Add AIR script to the AquaVM's anomaly data (#280)
Save AIR script to AnomlalyData struct.

Increments versions of `avm-data-store` to 0.3.0 and `avm-server` to 0.22.0.
2022-06-30 16:26:37 +07:00
Mike Voronov
0bdd573de7
Enable derive serde feature for data-store crate (#278) 2022-06-23 15:57:57 +03:00
Mike Voronov
3a84ceb863
Add API to save anomaly data (#277)
This PR adds two new methods in DataStore to determine anomaly and collect necessary data. Additionally
    - a generic parameter of DataStore turned to be associative
    - AVMOutcome contains additionally memory_delta and execution_time
2022-06-23 15:24:00 +03: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
1c0ff2c979
air-beautifier lib and air-beautify binary (#266)
The `air-beautify` util takes an AIR script input with Lisp-like syntax
and transforms it into experimental indentation-based syntax.

Closing #184.
2022-05-20 21:07:22 +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
Mike Voronov
7e0c87d72a
Introduce %ttl% (#253) 2022-04-21 11:44:18 +03:00
Mike Voronov
490791b177
introduce %timestamp% (#250) 2022-04-20 23:05:37 +03:00
Mike Voronov
69a42cf111
Introduce new for non iterable scalars (#248) 2022-04-20 11:43:46 +03:00
Mike Voronov
06d275ea16
Improve non iterable scalar scoping (#243) 2022-04-15 22:25:03 +03:00
Mike Voronov
b29883e990
Refactor tests (#231) 2022-03-10 16:06:43 +03:00
Mike Voronov
a64a4fc0a6
support empty array literal in fold (#230) 2022-03-07 13:50:08 +03:00
Mike Voronov
cc54e4c383
Introduce recursive streams (#225) 2022-02-25 23:55:40 +03:00
Mike Voronov
ac050abc8a
Fix ap trace handler behaviour (#224) 2022-02-25 10:24:28 +03:00
Mike Voronov
f994ce73c8
Check scalars in lamda were defined in script (#218) 2022-02-17 23:39:01 +03:00
Mike Voronov
58aef82b1e
Add API for returning interpreter memory size (#210) 2022-01-26 13:37:22 +03:00
Mike Voronov
e6193ea4de
Implement fail with scalars (#205) 2021-12-29 19:51:18 +03:00
Mike Voronov
63160dd0f0
Refactor last error (#202) 2021-12-28 16:59:55 +03:00
Mike Voronov
c1ff7c0688
Print instruction on trace errors (#201) 2021-12-26 22:52:00 +03:00
Mike Voronov
f69b5aa728
Refactor execution errors (#198) 2021-12-21 11:37:35 +03:00
vms
54e383cdaf introduce farewell step; reafactoring 2021-12-17 22:02:16 +03:00
Mike Voronov
8dbae91bda
Introduce fail instruction (#196) 2021-12-16 21:34:27 +03:00
Mike Voronov
1d8182d497
Support scalars in lambda (#192) 2021-12-15 12:46:09 +03:00
Mike Voronov
9f91d3161f
bump fluence-faas version (#193) 2021-12-14 14:01:57 +03:00
Mike Voronov
1141c8e42a
Fix empty array parsing in match/mismatch instructions (#190) 2021-12-13 15:54:10 +03:00
Mike Voronov
d300c8b2fc
Improve subtrace len compute algo (#186) 2021-12-03 14:29:03 +03:00
Mike Voronov
fbbe28c5b2
Cleanup fold iterable while exception (#185) 2021-12-02 14:44:10 +03:00
Mike Voronov
c5c9aefa37
Add test for issue 177 (#183) 2021-11-29 18:35:11 +03:00
Mike Voronov
e13377c5b0
Add test for par ap behaviour (#175) 2021-11-24 18:47:49 +03:00
Mike Voronov
5cd45385b4
Introduce restriction operator for streams (#172) 2021-11-24 17:57:14 +03:00
Mike Voronov
9f47eb9b83
Refactor AIR parser (#168) 2021-11-12 14:12:50 +03:00
Mike Voronov
d9f10cb26d
Deduplicate SecuityTetraplet with marine-rs-sdk (#164) 2021-11-04 16:59:05 +03:00
Mike Voronov
1c55d34981
Use custom logic for lambda instead of json path (#154) 2021-10-18 23:23:30 +03:00
Mike Voronov
4251a36842
decouple instruction tracker to a separate crate (#160) 2021-10-15 14:26:46 +03:00
Mike Voronov
f291c77d26
Update crate info; housekeeping (#153) 2021-10-05 20:08:10 +03:00
Mike Voronov
e99c352a95
Decouple log targets to a separate crate (#152) 2021-10-05 16:55:04 +03:00
Mike Voronov
adba9e8e65
Decouple trace handler (#150) 2021-10-05 14:07:38 +03:00
Mike Voronov
37ed77cb81
Bump versions, add description for data-store (#148) 2021-10-04 18:54:07 +03:00
Mike Voronov
4a4fc0889b
Make interpreter async (#130)
Co-authored-by: folex <0xdxdy@gmail.com>
Co-authored-by: Pavel Murygin <pavel.murygin@gmail.com>
2021-10-04 10:58:00 +03:00
Mike Voronov
d77278761f
Change subtrace_len computation algo in FoldFSM (#138) 2021-09-20 14:49:20 +03:00
Valery Antopol
bb90dd3693
Remove serde version lock on 1.0.118 and serde_json lock on 1.0.61 (#136) 2021-09-15 16:37:38 +03:00
Mike Voronov
3c86d36566
Introduce CRDT data (#74) 2021-08-24 16:14:15 +03:00
vms
e805a861e2 bump avm-server and air-interpreter-interface crates 2021-08-17 21:19:46 +03:00
Mike Voronov
7d98efedf8
move to app-service 0.9.0 (#126) 2021-08-05 22:24:09 +03:00
folex
03074be98f
Particle File Vault (#120) 2021-06-30 18:58:54 +03:00
Mike Voronov
998ee0294b
Improve error message for %last_error% (#119) 2021-06-10 17:08:20 +03:00
Mike Voronov
b2919b1509
Track current peer id in last error (#117) 2021-06-10 10:48:19 +03:00
Mike Voronov
93f71908e0
AIR 0.10.0 (#113)
Co-authored-by: Pavel Murygin <pavel.murygin@gmail.com>
2021-06-03 11:41:25 +03:00
Mike Voronov
3c5e485a5b
Make %last_error% object (#112) 2021-06-02 14:33:21 +03:00
Mike Voronov
6228fcc024
Improve stream validation; add tests (#108) 2021-06-01 18:32:22 +03:00
Mike Voronov
4db2342cff
Do not join on empty streams (#107) 2021-05-28 18:50:43 +03:00
folex
ccba158d81
Mark some crates as publish = false + add CI to publish crates (#105) 2021-05-19 12:43:49 +03:00
Mike Voronov
7cb636a02e
Refactor tests (#104) 2021-05-16 22:52:22 +03:00
Mike Voronov
f9a0b24a56
Move to sdk 0.6.5 (#102) 2021-05-13 12:00:56 +03:00
Mike Voronov
2ac0304d3e
Rename Aqua to AIR, move AVM from FCE (#99) 2021-05-10 14:25:34 +03:00
Pavel
0ddc44bf52
Npm package (#98)
This commit migrates wasm wrapper from JS SDK into the air interpreter package.

Changes include:

* Adding directory for npm package
* Setting up typescript build pipeline
* Renaming package to air-interpreter
* Fixing CI pipelines to support the new build process
* Fixing issue with memory access violation in wasm wrapper
2021-05-05 15:43:50 +03:00
vms
2a408d4ee4
make match work with init_peer_id (#96) 2021-04-29 18:26:13 +03:00
vms
45985bb993
Fix number to jvalue conversion (#94) 2021-04-28 16:05:35 +03:00
folex
fb787cf565 fluence-it-types = 0.3.0 2021-04-27 13:40:32 +03:00
folex
01cdb26c2c Use fluence-it-types from github 2021-04-27 13:37:06 +03:00
vms
7097b25533
Move to BWU (#93) 2021-04-26 14:44:23 +03:00
vms
45fc92ae3d
Use $ to identify streams instead of [] (#79) 2021-03-26 17:13:28 +03:00
vms
9bdd2e3501
Make match work with booleans and numbers (#80) 2021-03-25 16:11:32 +03:00
vms
0b2bfe1b84
Make match mismatch joinable (#77) 2021-03-24 10:00:07 +03:00
vms
52af952dfd
Basic validator for variables (#76) 2021-03-19 19:15:41 +03:00
vms
8a48212d7c
move to the original lalrpop parser (#73) 2021-03-05 16:59:35 +03:00
vms
2744d86c7f
Fix logger (#72) 2021-03-01 11:09:41 +03:00
vms
13f93a0f88
Improve flattening (#69) 2021-02-18 17:30:14 +03:00
vms
e5244db6a1
Rename stepper to interpreter (#67) 2021-02-17 23:36:36 +03:00