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

Added backward and forward compatibility integration tests for forkless upgrades #1895

Merged
merged 29 commits into from
May 29, 2024

Conversation

xgreenx
Copy link
Collaborator

@xgreenx xgreenx commented May 15, 2024

Closes #1622

The change adds integration tests for the forkless upgrade feature. The tests verify that it is backward compatible and, where possible, forward compatible.

The main idea is to use published fuel-core crates to produce blocks with different state transition functions.

Tests are using Ignition testnet chain config as a main source to be compatible with.

Before requesting review

  • I have reviewed the code myself

@xgreenx xgreenx requested a review from a team May 15, 2024 07:07
@xgreenx xgreenx self-assigned this May 15, 2024
Comment on lines +209 to +220
const TIMEOUT: u64 = 20;
let result =
tokio::time::timeout(tokio::time::Duration::from_secs(TIMEOUT), channel)
.await;

if result.is_err() {
tracing::error!(
"The previous block processing \
was not finished for {TIMEOUT} seconds."
);
return Err(Error::PreviousBlockProcessingNotFinished)
}
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just added this to catch this problem in tests without debugging

@@ -89,8 +89,6 @@ pub type Service<V> = ServiceRunner<UninitializedTask<V, SharedState>>;
enum TaskRequest {
// Broadcast requests to p2p network
BroadcastTransaction(Arc<Transaction>),
// Request to get one-off data from p2p network
GetPeerIds(oneshot::Sender<Vec<PeerId>>),
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is not used, so I removed it=)

Copy link
Member

@Voxelot Voxelot May 23, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it would be cleaner to make this kind of change in a separate PR, as it's totally unrelated to backwards compatibility testing right?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

- command: test
args: --manifest-path version-compatibility/Cargo.toml --workspace
- command: check
args: --manifest-path version-compatibility/Cargo.toml --workspace && cargo test --manifest-path version-compatibility/Cargo.toml --workspace
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Curious why you stuck this into a single command? Feels weird calling cargo in part of the args.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added a comment


## Adding new test

We need to add a new backward compatibility test for each new release. To add tests, we need to duplicate tests that are using the latest `fuel-core` and replace usage of the latest crate with a new release.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there anything enforcing that we do this?

Copy link
Collaborator Author

@xgreenx xgreenx May 16, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nope, and I don't know who to enforce it=) It is just instruction if someone find this file

Base automatically changed from feature/apply-testnet-configuration to master May 27, 2024 20:09
xgreenx and others added 2 commits May 27, 2024 22:11
…ess-upgrades

# Conflicts:
#	version-compatibility/forkless-upgrade/chain-configurations/ignition/chain_config.json
#	version-compatibility/forkless-upgrade/chain-configurations/ignition/metadata.json
#	version-compatibility/forkless-upgrade/chain-configurations/ignition/state_transition_bytecode.wasm
@xgreenx xgreenx enabled auto-merge (squash) May 29, 2024 22:33
@xgreenx xgreenx merged commit 8eeae5d into master May 29, 2024
27 checks passed
@xgreenx xgreenx deleted the feature/integration-tests-forkless-upgrades branch May 29, 2024 22:58
@xgreenx xgreenx mentioned this pull request Jun 6, 2024
xgreenx added a commit that referenced this pull request Jun 7, 2024
## Version v0.28.0

### Changed
- [#1934](#1934): Updated
benchmark for the `aloc` opcode to be `DependentCost`. Updated
`vm_initialization` benchmark to exclude growing of memory(It is handled
by VM reuse).
- [#1916](#1916): Speed up
synchronisation of the blocks for the `fuel-core-sync` service.
- [#1888](#1888):
optimization: Reuse VM memory across executions.

#### Breaking

- [#1934](#1934): Changed
`GasCosts` endpoint to return `DependentCost` for the `aloc` opcode via
`alocDependentCost`.
- [#1934](#1934): Updated
default gas costs for the local testnet configuration. All opcodes
became cheaper.
- [#1924](#1924):
`dry_run_opt` has new `gas_price: Option<u64>` argument
- [#1888](#1888): Upgraded
`fuel-vm` to `0.51.0`. See
[release](https://github.com/FuelLabs/fuel-vm/releases/tag/v0.51.0) for
more information.

### Added
- [#1939](#1939): Added API
functions to open a RocksDB in different modes.
- [#1929](#1929): Added
support of customization of the state transition version in the
`ChainConfig`.

### Removed
- [#1913](#1913): Removed dead
code from the project.

### Fixed
- [#1921](#1921): Fixed
unstable `gossipsub_broadcast_tx_with_accept` test.
- [#1915](#1915): Fixed
reconnection issue in the dev cluster with AWS cluster.
- [#1914](#1914): Fixed
halting of the node during synchronization in PoA service.

## What's Changed
* Removed dead code by @xgreenx in
#1913
* Added backward and forward compatibility integration tests for
forkless upgrades by @xgreenx in
#1895
* Fixed halting of the node in rare conditions by @xgreenx in
#1914
* Weekly `cargo update` by @github-actions in
#1928
* Fixed logging of the WASM executor by @xgreenx in
#1930
* Added support of customization of the state transition version in the
`ChainConfig` by @xgreenx in
#1929
* Document wasm toolchain installation, add rust-toolchain.toml by
@Dentosal in #1932
* Add optional `gas_price` argument to `dry_run_opt` by @hal3e in
#1924
* Reuse VM memory across executions by @Dentosal in
#1888
* Fixed reconnection issue in the dev cluster with AWS cluster by
@xgreenx in #1915
* Speeds up synchronisation of the blocks for the `fuel-core-sync`
service by @xgreenx in #1916
* Fixed unstable `gossipsub_broadcast_tx_with_accept` test by @xgreenx
in #1921
* Added API functions to open a RocksDB in different modes by @xgreenx
in #1939
* Use `DependentCost` for `aloc` opcode by @xgreenx in
#1934

## New Contributors
* @hal3e made their first contribution in
#1924

**Full Changelog**:
v0.27.0...v0.28.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants