Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Showing code contents in ic-ref causes random test failures #1854

Closed
osa1 opened this issue Aug 18, 2020 · 2 comments · Fixed by #1884
Closed

Showing code contents in ic-ref causes random test failures #1854

osa1 opened this issue Aug 18, 2020 · 2 comments · Fixed by #1884
Labels
Bug Something isn't working P1 high priority, resolve before the next milestone

Comments

@osa1
Copy link
Contributor

osa1 commented Aug 18, 2020

Example from the test closure-params (test/run-drun/ok/closure-params.ic-ref-run.ok):

→ update create_canister()
← completed: (record {1313628723 = service "cvccv-qqaaq-aaaaa-aaaaa-c"})
→ update install_code(record {4849238 = blob ""; 265441191 = blob "\00asm\01\00\00\00\01\a0\81\80\80\00\1a`\n\7f\7f\7f\7f…
...

The blob part in install_code is the wasm module contents. Showing this part causes random breakage as a result of changes in the RTS or elsewhere. One example of this can be observed in #1750 where the test fails with this diff:

-→ update install_code(record {4849238 = blob ""; 265441191 = blob "\00asm\01\00\00\00\01\a0\81\80\80\00\1a`\n\7f\7f\7f\7f…
+→ update install_code(record {4849238 = blob ""; 265441191 = blob "\00asm\01\00\00\00\01\b1\81\80\80\00\1c`\n\7f\7f\7f\7f…

Basically length of the type vector in the type section changes from 32 to 49, which certainly shouldn't break the test.

It'd be great if we could fix this without any more perl lines and wrappers. I suggest we update ic-ref to not print blob contents. Printing some prefix of the type section in wasm modules is probably not useful anyway.

@rossberg rossberg added Bug Something isn't working P1 high priority, resolve before the next milestone labels Aug 18, 2020
osa1 added a commit that referenced this issue Aug 24, 2020
This implements the current garbage collector in Rust. No changes were made to
the GC design -- it's just ports the one implemented in code generator to Rust.

The goals are:

- Evaluate Rust for Motoko's RTS implementation
- Make the collector easier to read, understand, modify, and extend.

Currently passes the tests locally. We can't run this branch on CI yet as it
needs to download rustc nightly and xargo and the domains are not allowed on the
CI. I think in the final version we'll have to build rustc outselves instead of
downloading.

(Nightly rustc is needed as "core" distributed with rustc is not built with PIC
relocation model on wam32, so we can't use it to generate a shared wasm32
library)

Main changes:

- New Rust crate "motoko-rts" introduced, which currently implements the
  garbage collector. It also has some utilities for printing the heap or
  individual objects, to be used when debugging.

- Nix files updated to download rustc and xargo. These are used to build Rust's
  "core" library with PIC relocation model for wasm32.

- We no longer build memset and memcpy of musl as those are provided by Rust's
  "core" now.

The main algorithm is in `gc.rs`. Rest of the Rust files are helpers, mainly for
debugging.

Other changes:

- I had to update lots of ic-ref-run outputs. See #1854 for the details.

Remaining work and issues:

- There's currently a bug somewhere that causes random failures as I move the
  code around. One example of this is in the last line of `gc.rs` where I have a
  no-op function call `dump_heap()` which when removed causes the test "life" to
  fail with a trap.

- Figure out how to use rustc nightly (with PIC wasm32 libraries) in CI.
osa1 added a commit that referenced this issue Aug 25, 2020
This implements the current garbage collector in Rust. No changes were made to
the GC design -- it's just ports the one implemented in code generator to Rust.

The goals are:

- Evaluate Rust for Motoko's RTS implementation
- Make the collector easier to read, understand, modify, and extend.

Currently passes the tests locally. We can't run this branch on CI yet as it
needs to download rustc nightly and xargo and the domains are not allowed on the
CI. I think in the final version we'll have to build rustc outselves instead of
downloading.

(Nightly rustc is needed as "core" distributed with rustc is not built with PIC
relocation model on wam32, so we can't use it to generate a shared wasm32
library)

Main changes:

- New Rust crate "motoko-rts" introduced, which currently implements the
  garbage collector. It also has some utilities for printing the heap or
  individual objects, to be used when debugging.

- Nix files updated to download rustc and xargo. These are used to build Rust's
  "core" library with PIC relocation model for wasm32.

- We no longer build memset and memcpy of musl as those are provided by Rust's
  "core" now.

The main algorithm is in `gc.rs`. Rest of the Rust files are helpers, mainly for
debugging.

Other changes:

- I had to update lots of ic-ref-run outputs. See #1854 for the details.

Remaining work and issues:

- There's currently a bug somewhere that causes random failures as I move the
  code around. One example of this is in the last line of `gc.rs` where I have a
  no-op function call `dump_heap()` which when removed causes the test "life" to
  fail with a trap.

- Figure out how to use rustc nightly (with PIC wasm32 libraries) in CI.
osa1 added a commit that referenced this issue Aug 26, 2020
This implements the current garbage collector in Rust. No changes were made to
the GC design -- it's just ports the one implemented in code generator to Rust.

The goals are:

- Evaluate Rust for Motoko's RTS implementation
- Make the collector easier to read, understand, modify, and extend.

Currently passes the tests locally. We can't run this branch on CI yet as it
needs to download rustc nightly and xargo and the domains are not allowed on the
CI. I think in the final version we'll have to build rustc outselves instead of
downloading.

(Nightly rustc is needed as "core" distributed with rustc is not built with PIC
relocation model on wam32, so we can't use it to generate a shared wasm32
library)

Main changes:

- New Rust crate "motoko-rts" introduced, which currently implements the
  garbage collector. It also has some utilities for printing the heap or
  individual objects, to be used when debugging.

- Nix files updated to download rustc and xargo. These are used to build Rust's
  "core" library with PIC relocation model for wasm32.

- We no longer build memset and memcpy of musl as those are provided by Rust's
  "core" now.

The main algorithm is in `gc.rs`. Rest of the Rust files are helpers, mainly for
debugging.

Other changes:

- I had to update lots of ic-ref-run outputs. See #1854 for the details.

Remaining work and issues:

- There's currently a bug somewhere that causes random failures as I move the
  code around. One example of this is in the last line of `gc.rs` where I have a
  no-op function call `dump_heap()` which when removed causes the test "life" to
  fail with a trap.

- Figure out how to use rustc nightly (with PIC wasm32 libraries) in CI.
osa1 added a commit that referenced this issue Aug 27, 2020
This implements the current garbage collector in Rust. No changes were
made to the GC design -- it's just ports the one implemented in code
generator to Rust.

The goals are:

- Evaluate Rust for Motoko's RTS implementation
- Make the collector easier to read, understand, modify, and extend.

Currently passes the tests locally. We can't run this branch on CI yet
as it needs to download rustc nightly and xargo and the domains are not
allowed on the CI. I think in the final version we'll have to build
rustc outselves instead of downloading.

(Nightly rustc is needed as "core" distributed with rustc is not built
with PIC relocation model on wam32, so we can't use it to generate a
shared wasm32 library)

Main changes:

- New Rust crate "motoko-rts" introduced, which currently implements the
  garbage collector. It also has some utilities for printing the heap or
  individual objects, to be used when debugging.

- Nix files updated to download rustc and xargo. These are used to build
  Rust's "core" library with PIC relocation model for wasm32.

- We no longer build memset and memcpy of musl as those are provided by
  Rust's "core" now.

The main algorithm is in `gc.rs`. Rest of the Rust files are helpers,
mainly for debugging.

Other changes:

- I had to update lots of ic-ref-run outputs. See #1854 for the details.

Remaining work and issues:

- Figure out how to use rustc nightly (with PIC wasm32 libraries) in CI.

Note to reviewers:

- The main algorithm is in `gc.rs`, everything else is helpers. Start
  reading from `gc.rs`.
osa1 added a commit that referenced this issue Aug 28, 2020
This implements the current garbage collector in Rust. No changes were
made to the GC design -- it's just ports the one implemented in code
generator to Rust.

The goals are:

- Evaluate Rust for Motoko's RTS implementation
- Make the collector easier to read, understand, modify, and extend.

Currently passes the tests locally. We can't run this branch on CI yet
as it needs to download rustc nightly and xargo and the domains are not
allowed on the CI. I think in the final version we'll have to build
rustc outselves instead of downloading.

(Nightly rustc is needed as "core" distributed with rustc is not built
with PIC relocation model on wam32, so we can't use it to generate a
shared wasm32 library)

Main changes:

- New Rust crate "motoko-rts" introduced, which currently implements the
  garbage collector. It also has some utilities for printing the heap or
  individual objects, to be used when debugging.

- Nix files updated to download rustc and xargo. These are used to build
  Rust's "core" library with PIC relocation model for wasm32.

- We no longer build memset and memcpy of musl as those are provided by
  Rust's "core" now.

The main algorithm is in `gc.rs`. Rest of the Rust files are helpers,
mainly for debugging.

Other changes:

- I had to update lots of ic-ref-run outputs. See #1854 for the details.

Remaining work and issues:

- Figure out how to use rustc nightly (with PIC wasm32 libraries) in CI.

Note to reviewers:

- The main algorithm is in `gc.rs`, everything else is helpers. Start
  reading from `gc.rs`.
osa1 added a commit that referenced this issue Aug 31, 2020
This implements the current garbage collector in Rust. No changes were
made to the GC design -- it's just ports the one implemented in code
generator to Rust.

The goals are:

- Evaluate Rust for Motoko's RTS implementation
- Make the collector easier to read, understand, modify, and extend.

Currently passes the tests locally. We can't run this branch on CI yet
as it needs to download rustc nightly and xargo and the domains are not
allowed on the CI. I think in the final version we'll have to build
rustc outselves instead of downloading.

(Nightly rustc is needed as "core" distributed with rustc is not built
with PIC relocation model on wam32, so we can't use it to generate a
shared wasm32 library)

Main changes:

- New Rust crate "motoko-rts" introduced, which currently implements the
  garbage collector. It also has some utilities for printing the heap or
  individual objects, to be used when debugging.

- Nix files updated to download rustc and xargo. These are used to build
  Rust's "core" library with PIC relocation model for wasm32.

- We no longer build memset and memcpy of musl as those are provided by
  Rust's "core" now.

The main algorithm is in `gc.rs`. Rest of the Rust files are helpers,
mainly for debugging.

Other changes:

- I had to update lots of ic-ref-run outputs. See #1854 for the details.

Remaining work and issues:

- Figure out how to use rustc nightly (with PIC wasm32 libraries) in CI.

Note to reviewers:

- The main algorithm is in `gc.rs`, everything else is helpers. Start
  reading from `gc.rs`.
@nomeata
Copy link
Collaborator

nomeata commented Aug 31, 2020

I’ll fix this. Printing blob prefixes is still useful, I think, but I’ll just recognize asm\0 and handle that.

@nomeata
Copy link
Collaborator

nomeata commented Aug 31, 2020

Oh, darn, just extending https://github.com/dfinity-lab/ic-ref/blob/master/impl/src/ic-ref-run.hs#L78 doesn’t help; this is a blob nested inside a Candid value. And patching the Candid pretty printer seems wrong…

I’ll just make it print less characters, that should help

nomeata added a commit that referenced this issue Aug 31, 2020
this should help with, i.e. fixes #1854
@mergify mergify bot closed this as completed in #1884 Sep 1, 2020
mergify bot pushed a commit that referenced this issue Sep 1, 2020
osa1 added a commit that referenced this issue Sep 1, 2020
This implements the current garbage collector in Rust. No changes were
made to the GC design -- it's just ports the one implemented in code
generator to Rust.

The goals are:

- Evaluate Rust for Motoko's RTS implementation
- Make the collector easier to read, understand, modify, and extend.

Currently passes the tests locally. We can't run this branch on CI yet
as it needs to download rustc nightly and xargo and the domains are not
allowed on the CI. I think in the final version we'll have to build
rustc outselves instead of downloading.

(Nightly rustc is needed as "core" distributed with rustc is not built
with PIC relocation model on wam32, so we can't use it to generate a
shared wasm32 library)

Main changes:

- New Rust crate "motoko-rts" introduced, which currently implements the
  garbage collector. It also has some utilities for printing the heap or
  individual objects, to be used when debugging.

- Nix files updated to download rustc and xargo. These are used to build
  Rust's "core" library with PIC relocation model for wasm32.

- We no longer build memset and memcpy of musl as those are provided by
  Rust's "core" now.

The main algorithm is in `gc.rs`. Rest of the Rust files are helpers,
mainly for debugging.

Other changes:

- I had to update lots of ic-ref-run outputs. See #1854 for the details.

Remaining work and issues:

- Figure out how to use rustc nightly (with PIC wasm32 libraries) in CI.

Note to reviewers:

- The main algorithm is in `gc.rs`, everything else is helpers. Start
  reading from `gc.rs`.
osa1 added a commit that referenced this issue Sep 1, 2020
This implements the current garbage collector in Rust. No changes were
made to the GC design -- it's just ports the one implemented in code
generator to Rust.

The goals are:

- Evaluate Rust for Motoko's RTS implementation
- Make the collector easier to read, understand, modify, and extend.

Currently passes the tests locally. We can't run this branch on CI yet
as it needs to download rustc nightly and xargo and the domains are not
allowed on the CI. I think in the final version we'll have to build
rustc outselves instead of downloading.

(Nightly rustc is needed as "core" distributed with rustc is not built
with PIC relocation model on wam32, so we can't use it to generate a
shared wasm32 library)

Main changes:

- New Rust crate "motoko-rts" introduced, which currently implements the
  garbage collector. It also has some utilities for printing the heap or
  individual objects, to be used when debugging.

- Nix files updated to download rustc and xargo. These are used to build
  Rust's "core" library with PIC relocation model for wasm32.

- We no longer build memset and memcpy of musl as those are provided by
  Rust's "core" now.

The main algorithm is in `gc.rs`. Rest of the Rust files are helpers,
mainly for debugging.

Other changes:

- I had to update lots of ic-ref-run outputs. See #1854 for the details.

Remaining work and issues:

- Figure out how to use rustc nightly (with PIC wasm32 libraries) in CI.

Note to reviewers:

- The main algorithm is in `gc.rs`, everything else is helpers. Start
  reading from `gc.rs`.
osa1 added a commit that referenced this issue Sep 2, 2020
This implements the current garbage collector in Rust. No changes were
made to the GC design -- it's just ports the one implemented in code
generator to Rust.

The goals are:

- Evaluate Rust for Motoko's RTS implementation
- Make the collector easier to read, understand, modify, and extend.

Currently passes the tests locally. We can't run this branch on CI yet
as it needs to download rustc nightly and xargo and the domains are not
allowed on the CI. I think in the final version we'll have to build
rustc outselves instead of downloading.

(Nightly rustc is needed as "core" distributed with rustc is not built
with PIC relocation model on wam32, so we can't use it to generate a
shared wasm32 library)

Main changes:

- New Rust crate "motoko-rts" introduced, which currently implements the
  garbage collector. It also has some utilities for printing the heap or
  individual objects, to be used when debugging.

- Nix files updated to download rustc and xargo. These are used to build
  Rust's "core" library with PIC relocation model for wasm32.

- We no longer build memset and memcpy of musl as those are provided by
  Rust's "core" now.

The main algorithm is in `gc.rs`. Rest of the Rust files are helpers,
mainly for debugging.

Other changes:

- I had to update lots of ic-ref-run outputs. See #1854 for the details.

Remaining work and issues:

- Figure out how to use rustc nightly (with PIC wasm32 libraries) in CI.

Note to reviewers:

- The main algorithm is in `gc.rs`, everything else is helpers. Start
  reading from `gc.rs`.
osa1 added a commit that referenced this issue Sep 2, 2020
This implements the current garbage collector in Rust. No changes were
made to the GC design -- it's just ports the one implemented in code
generator to Rust.

The goals are:

- Evaluate Rust for Motoko's RTS implementation
- Make the collector easier to read, understand, modify, and extend.

Currently passes the tests locally. We can't run this branch on CI yet
as it needs to download rustc nightly and xargo and the domains are not
allowed on the CI. I think in the final version we'll have to build
rustc outselves instead of downloading.

(Nightly rustc is needed as "core" distributed with rustc is not built
with PIC relocation model on wam32, so we can't use it to generate a
shared wasm32 library)

Main changes:

- New Rust crate "motoko-rts" introduced, which currently implements the
  garbage collector. It also has some utilities for printing the heap or
  individual objects, to be used when debugging.

- Nix files updated to download rustc and xargo. These are used to build
  Rust's "core" library with PIC relocation model for wasm32.

- We no longer build memset and memcpy of musl as those are provided by
  Rust's "core" now.

The main algorithm is in `gc.rs`. Rest of the Rust files are helpers,
mainly for debugging.

Other changes:

- I had to update lots of ic-ref-run outputs. See #1854 for the details.

Remaining work and issues:

- Figure out how to use rustc nightly (with PIC wasm32 libraries) in CI.

Note to reviewers:

- The main algorithm is in `gc.rs`, everything else is helpers. Start
  reading from `gc.rs`.
osa1 added a commit that referenced this issue Sep 3, 2020
This implements the current garbage collector in Rust. No changes were
made to the GC design -- it's just ports the one implemented in code
generator to Rust.

The goals are:

- Evaluate Rust for Motoko's RTS implementation
- Make the collector easier to read, understand, modify, and extend.

Currently passes the tests locally. We can't run this branch on CI yet
as it needs to download rustc nightly and xargo and the domains are not
allowed on the CI. I think in the final version we'll have to build
rustc outselves instead of downloading.

(Nightly rustc is needed as "core" distributed with rustc is not built
with PIC relocation model on wam32, so we can't use it to generate a
shared wasm32 library)

Main changes:

- New Rust crate "motoko-rts" introduced, which currently implements the
  garbage collector. It also has some utilities for printing the heap or
  individual objects, to be used when debugging.

- Nix files updated to download rustc and xargo. These are used to build
  Rust's "core" library with PIC relocation model for wasm32.

- We no longer build memset and memcpy of musl as those are provided by
  Rust's "core" now.

The main algorithm is in `gc.rs`. Rest of the Rust files are helpers,
mainly for debugging.

Other changes:

- I had to update lots of ic-ref-run outputs. See #1854 for the details.

Remaining work and issues:

- Figure out how to use rustc nightly (with PIC wasm32 libraries) in CI.

Note to reviewers:

- The main algorithm is in `gc.rs`, everything else is helpers. Start
  reading from `gc.rs`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug Something isn't working P1 high priority, resolve before the next milestone
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants