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

test v23-feeDistributor re-subscribes to timer notifier when v5-timer is upgraded #8730

Open
warner opened this issue Jan 9, 2024 · 0 comments
Labels
contract-upgrade enhancement New feature or request Inter-protocol Overarching Inter Protocol

Comments

@warner
Copy link
Member

warner commented Jan 9, 2024

As part of #8499 (comment) (look for v5-timer-v23-feedistributor-v48-vaultfactory), we're investigating how v23-feeDistributor will react when the upstream v5-timer is upgraded.

v23-feeDistributor has code which talks to the timer service and creates a notifier during startDistributing. The timer service provides durable notifiers, and this subscriber code correctly uses observeNotifier to react to vat-timer being upgraded (and the individual promises being disconnected).

(I suspect this is all working, but if not, it would be a blocker to upgrading v5-timer. Someone who knows what is tested and what is not may be able to trivially close this ticket)

The task is to test this tolerance of upgrading v5-timer, probably through a3p:

  • setup a feeDistributor vat, which will establish the timer loop
  • upgrade v5-timer
  • assert that the feeDistributor has re-subscribed to the timer service
    • perhaps by allowing time to advanace and then observing the feeDistributor reacting to the passage of time correctly
@warner warner added enhancement New feature or request Inter-protocol Overarching Inter Protocol contract-upgrade labels Jan 9, 2024
mergify bot added a commit that referenced this issue Nov 13, 2024
…or, stage in upgrade.go (#10453)

closes: #10393 
refs: #8730

## Description

There is an on going work for making sure all vats must either be upgradable or replaceable safely. In this PR we are focusing on `feeDistributor` for that. As per #8730, we also want to have tests for `feeDistributor` that checks it works properly after a `vat-timer` is upgraded.

### Security Considerations

I can' think of any threats that can come out of `feeDistributor` to cause any system level harm. As it's only job is to collect fees from `vaultFactory` and send it to `reserve`. 

### Scaling Considerations

Making sure the old `feeDistributor` is not collecting fees from the `vaultFactory` is important but I believe to free resources we need to terminate the old instance.

### Documentation Considerations

None.

### Testing Considerations

Here's the testing scenario implemented;
* Write a proposal code where `collectionInterval` is parameterized
* Have two scripts originating from the proposal created above. One for testing and one for staging
    * Test script’s collectionInterval = 5 seconds
    * Staging script’s collectionInterval = 1 hour
* Staging script is placed in `upgrade.go`
* Testing script is built as a submission in `p:upgrade-19`
     * In `TEST` phase of `p:upgrade-19`, this script will override whatever already exists in the bootstrap environment.
When testing new `feeDistributer`
     * Open a few vaults
     * Use syncTools to wait until `reserve` balance increases

#### Note
In the original test plan, there was this sentence: "Get the new instance’s terms from zoe and make sure its `collectionInterval` is correct"

Which I ended up not implementing because it's not possible to get `zoe` in `a3p` and trying to test this using a core-eval seemed like an anti-pattern. 

cc @Chris-Hibbert 

### Upgrade Considerations

`feeDistributor` is not upgradable. There are plans to make it upgradable in the future. See #8729.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
contract-upgrade enhancement New feature or request Inter-protocol Overarching Inter Protocol
Projects
None yet
Development

No branches or pull requests

1 participant