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

Allow more granular configuration of Hermes modes of operation #1539

Merged
merged 38 commits into from
Nov 15, 2021

Conversation

hu55a1n1
Copy link
Member

@hu55a1n1 hu55a1n1 commented Nov 3, 2021

Closes: #1518

Description

  • Default config for mode would look like ->
[mode]

[mode.clients]
enabled = true
refresh = true
misbehaviour = true

[mode.connections]
enabled = false

[mode.channels]
enabled = false

[mode.packets]
enabled = true
clear_interval = 100
clear_on_start = true
filter = false
tx_confirmation = true
  • strategy and clear_packets_interval options would be removed.
  • ...

TODO (aside from acceptance criteria)

  • Guide changes.
  • Fix E2E tests.
  • Fix gm related stuff.

For contributor use:

  • Added a changelog entry, using unclog.
  • If applicable: Unit tests written, added test to CI.
  • Linked to Github issue with discussion and accepted design OR link to spec that describes this work.
  • Updated relevant documentation (docs/) and code comments.
  • Re-reviewed Files changed in the Github PR explorer.

@hu55a1n1 hu55a1n1 marked this pull request as ready for review November 8, 2021 11:03
Copy link
Member

@romac romac left a comment

Choose a reason for hiding this comment

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

Amazing stuff @hu55a1n1 🥇

Here are a few comments for discussion after a first pass over the code.

relayer/src/worker.rs Outdated Show resolved Hide resolved
relayer/src/worker.rs Outdated Show resolved Hide resolved
relayer/src/worker/packet.rs Outdated Show resolved Hide resolved
relayer/src/worker/packet.rs Outdated Show resolved Hide resolved
@adizere
Copy link
Member

adizere commented Nov 10, 2021

@greg-szabo we would appreciate your quick look here, at the gm related changes.

@greg-szabo
Copy link
Member

Looks good to me. The only thing missing is the gm Changelog update but I can deal with that separately in my own PR.

@romac romac changed the title More granular config of op modes Allow more granular configuration of Hermes modes of operation Nov 11, 2021
@ancazamfir
Copy link
Collaborator

@hu55a1n1 I tried with a config that has:

[mode.packets]
# Whether or not to enable the packet workers. [Required]
enabled = true
# Parametrize the periodic packet clearing feature.
# Interval (in number of blocks) at which pending packets
# should be eagerly cleared. A value of '0' will disable
# periodic packet clearing. [Default: 100]
clear_interval = 10
# Whether or not to clear packets on start. [Default: false]
clear_on_start = true

all other modes disabled.
Create a channel, send some packets then start hermes. The packets are not cleared immediately. Also not cleared on the clear_interval. If I send a packet after hermes start then everything is back to normal.
Didn't look yet at the code but I think it should be straight forward to fix.

Also e2e fails with this config.

@hu55a1n1
Copy link
Member Author

The packets are not cleared immediately. Also not cleared on the clear_interval.

Thanks for catching that @ancazamfir! I think this was a bug in the way packet workers were spawned. I just pushed a possible fix -> 4ec957b

Copy link
Collaborator

@ancazamfir ancazamfir left a comment

Choose a reason for hiding this comment

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

Tested a bunch of scenarios, it looks very good!!
I will look again through the changes next but I think we should be good to go.

Copy link
Member

@romac romac left a comment

Choose a reason for hiding this comment

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

Amazing work @hu55a1n1 🌷

Copy link
Collaborator

@ancazamfir ancazamfir left a comment

Choose a reason for hiding this comment

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

Amazing work @hu55a1n1!

@romac romac merged commit ce432b9 into master Nov 15, 2021
@romac romac deleted the 1518-config-modes branch November 15, 2021 08:18
soareschen added a commit that referenced this pull request Nov 15, 2021
romac pushed a commit that referenced this pull request Nov 18, 2021
* WIP relayer test

* Bootstrap chain almost working

* Refactor chain bootstrap code

* Trying to get create client work.

* Test create client is now working

* Fix formatting

* WIP IBC packet transfer

* Got IBC transfer working

* Refactor supervisor and denom tracing

* More refactoring

* More refactoring

* Refactor build_and_send_transfer_messages

* Round trip IBC token transfer is now working

* Refactor channel bootstrap code

* Add tagged chain handle wrapper

* Rename ChainCommand to ChainDriver

* Make bootstrap pair return impl ChainHandle

* Add tagged types

* Refactor bootstrap pair

* Tag ChainDriver

* Add mono tag, refactor single chain bootstrap

* More refactoring

* More refactoring

* Fix chain tags

* Channel creation ordering is now consistent

* Test IBC transfer in both directions

* Fix monitor shutdown error

* Refactor wait wallet amount

* Make init script return test config. Add hang test helper

* Draft memo testing working

* Add boostrap_chain_and_channel_pair

* Add memo test as separate test

* Disable health check in tests to suppress version errors from gaiad in Nix

* Add CI workflow

* Use experimental Nix with flakes

* Refactor test cases to use composable traits

* Use NoTestConfig wrapper type for test defaults

* Reorder code definitions

* Try out new way to override test config and implement override defaults

* Preemptively shutdown supervisor at the end of chain tests

* Rearrange type definitions

* Rename framework traits

* Rename and move override traits

* Rename ChainDeployment to ConnectedChains

* Refactor chain bootstrap

* Add BinaryNodeTest trait

* Add alpha- and beta- prefix to binary chain nodes

* Add HANG_ON_FAIL test hooks

* Add non-owned BinaryNodeTest

* Refactor Supervisor to use shared reference to chain registry

* Spawn supervisor in OwnedBinaryChainTest

* New test override approach with separate override argument

* Clean up overrides design

* Fix cargo doc

* Save relayer config onto file system

* Simplify test overrides

* Use absolute path for data directory path

* Adding documentation

* Add documentation for `framework` module

* Adding more documentation

* Reorganize test data directory

* Add documentation for `bootstrap` module

* Reorganize tagged module

* Add documentation for MonoTagged

* Refactor tagged methods into traits

* Add documentation for DualTagged

* Finish documenting most constructs

* Move example documentation

* Rename hang to suspend

* Fix example doctest

* Add more detailed documentation for DualTagged::contra_map

* Remove ChainClientServer and inline the handle and node fields directly

* Add documentation for connected chains and channels

* Finish documenting everything

* Only check for version in health check.

Failure in parsing chain version should not result in failure of
the entire relayer.

* Stop chain handle when it is dropped

* Add simulation manual test

* Add documentation for new constructs

* Move manual tests into the tests::manual module

* Add test framework for running tests with self-connected chains

* Add NodeConfigOverride for overriding full node config

* Draft definition for N-ary connected chains using const generics

* Implement N-ary bootstrap chains code

* Done initial bootstrap code for N-ary channels.

* Refactor to allow dynamic sized n-ary chains

* Running binary IBC transfer test as n-ary test successful

* Add environment exporter to test

* Separate drop handlers from chain and node types

* Remove reference version of test traits

* Remove "Owned" and "owned_" prefixes

* Put N-ary chain features behind "experimental" feature flag

* Clean up cargo configuration, address review feedback

* Fix build error

* Fix doctests

* Add custom Default instance for ModeConfig which enables everything by default

* Follow default ModeConfig as specified in #1539

* Add test_setup_with_binary_channel command wrapper

* Fix clippy

* Fix unit test CI

* Randomize created client and connection ids

* Randomize channel IDs when bootstrapping channels

* Move bootstrap connection code to separate module

* Add back child process as a shared Arc pointer in FullNode

* Move experimental N-ary test chains to separate PR

* Fill out missing documentation

* Move N-ary chain constructs to #1572

* Minor fix documentation

* Add a bit more documentation to tagged identifiers

* Slightly clean up bootstrap logs
hu55a1n1 pushed a commit to hu55a1n1/hermes that referenced this pull request Sep 13, 2022
* WIP relayer test

* Bootstrap chain almost working

* Refactor chain bootstrap code

* Trying to get create client work.

* Test create client is now working

* Fix formatting

* WIP IBC packet transfer

* Got IBC transfer working

* Refactor supervisor and denom tracing

* More refactoring

* More refactoring

* Refactor build_and_send_transfer_messages

* Round trip IBC token transfer is now working

* Refactor channel bootstrap code

* Add tagged chain handle wrapper

* Rename ChainCommand to ChainDriver

* Make bootstrap pair return impl ChainHandle

* Add tagged types

* Refactor bootstrap pair

* Tag ChainDriver

* Add mono tag, refactor single chain bootstrap

* More refactoring

* More refactoring

* Fix chain tags

* Channel creation ordering is now consistent

* Test IBC transfer in both directions

* Fix monitor shutdown error

* Refactor wait wallet amount

* Make init script return test config. Add hang test helper

* Draft memo testing working

* Add boostrap_chain_and_channel_pair

* Add memo test as separate test

* Disable health check in tests to suppress version errors from gaiad in Nix

* Add CI workflow

* Use experimental Nix with flakes

* Refactor test cases to use composable traits

* Use NoTestConfig wrapper type for test defaults

* Reorder code definitions

* Try out new way to override test config and implement override defaults

* Preemptively shutdown supervisor at the end of chain tests

* Rearrange type definitions

* Rename framework traits

* Rename and move override traits

* Rename ChainDeployment to ConnectedChains

* Refactor chain bootstrap

* Add BinaryNodeTest trait

* Add alpha- and beta- prefix to binary chain nodes

* Add HANG_ON_FAIL test hooks

* Add non-owned BinaryNodeTest

* Refactor Supervisor to use shared reference to chain registry

* Spawn supervisor in OwnedBinaryChainTest

* New test override approach with separate override argument

* Clean up overrides design

* Fix cargo doc

* Save relayer config onto file system

* Simplify test overrides

* Use absolute path for data directory path

* Adding documentation

* Add documentation for `framework` module

* Adding more documentation

* Reorganize test data directory

* Add documentation for `bootstrap` module

* Reorganize tagged module

* Add documentation for MonoTagged

* Refactor tagged methods into traits

* Add documentation for DualTagged

* Finish documenting most constructs

* Move example documentation

* Rename hang to suspend

* Fix example doctest

* Add more detailed documentation for DualTagged::contra_map

* Remove ChainClientServer and inline the handle and node fields directly

* Add documentation for connected chains and channels

* Finish documenting everything

* Only check for version in health check.

Failure in parsing chain version should not result in failure of
the entire relayer.

* Stop chain handle when it is dropped

* Add simulation manual test

* Add documentation for new constructs

* Move manual tests into the tests::manual module

* Add test framework for running tests with self-connected chains

* Add NodeConfigOverride for overriding full node config

* Draft definition for N-ary connected chains using const generics

* Implement N-ary bootstrap chains code

* Done initial bootstrap code for N-ary channels.

* Refactor to allow dynamic sized n-ary chains

* Running binary IBC transfer test as n-ary test successful

* Add environment exporter to test

* Separate drop handlers from chain and node types

* Remove reference version of test traits

* Remove "Owned" and "owned_" prefixes

* Put N-ary chain features behind "experimental" feature flag

* Clean up cargo configuration, address review feedback

* Fix build error

* Fix doctests

* Add custom Default instance for ModeConfig which enables everything by default

* Follow default ModeConfig as specified in informalsystems#1539

* Add test_setup_with_binary_channel command wrapper

* Fix clippy

* Fix unit test CI

* Randomize created client and connection ids

* Randomize channel IDs when bootstrapping channels

* Move bootstrap connection code to separate module

* Add back child process as a shared Arc pointer in FullNode

* Move experimental N-ary test chains to separate PR

* Fill out missing documentation

* Move N-ary chain constructs to informalsystems#1572

* Minor fix documentation

* Add a bit more documentation to tagged identifiers

* Slightly clean up bootstrap logs
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.

Allow more granular configuration of Hermes modes of operation
5 participants