Skip to content

Commit

Permalink
worker/registration: fix waiting for deregister event
Browse files Browse the repository at this point in the history
  • Loading branch information
ptrus committed Apr 12, 2022
1 parent da924ac commit 9e0c570
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 7 deletions.
1 change: 1 addition & 0 deletions .changelog/4662.bugfix.md
@@ -0,0 +1 @@
Fix waiting for deregister event on `RequestShutdown`
3 changes: 3 additions & 0 deletions go/oasis-node/cmd/common/genesis/staking.go
Expand Up @@ -110,6 +110,9 @@ func NewAppendableStakingState() (*AppendableStakingState, error) {
st := &AppendableStakingState{
State: staking.Genesis{
Ledger: make(map[staking.Address]*staking.Account),
Parameters: staking.ConsensusParameters{
DebondingInterval: 1, // Minimum valid debonding interval.
},
},
}
if err := st.setDefaultFeeSplit(); err != nil {
Expand Down
28 changes: 24 additions & 4 deletions go/oasis-test-runner/scenario/e2e/runtime/keymanager_upgrade.go
Expand Up @@ -5,6 +5,7 @@ import (
"context"
"fmt"
"path/filepath"
"time"

"github.com/oasisprotocol/oasis-core/go/common"
"github.com/oasisprotocol/oasis-core/go/common/cbor"
Expand Down Expand Up @@ -262,34 +263,53 @@ func (sc *kmUpgradeImpl) Run(childEnv *env.Env) error {
rtDsc.Deployments[0].ValidFrom = epoch + 1
rtDsc.Deployments = append(oldRtDsc.Deployments, rtDsc.Deployments...) // Add old deployment.
kmTxPath := filepath.Join(childEnv.Dir(), "register_km_runtime.json")
if err := cli.Registry.GenerateRegisterRuntimeTx(childEnv.Dir(), rtDsc, sc.nonce, kmTxPath); err != nil {
if err = cli.Registry.GenerateRegisterRuntimeTx(childEnv.Dir(), rtDsc, sc.nonce, kmTxPath); err != nil {
return fmt.Errorf("failed to generate register KM runtime tx: %w", err)
}
sc.nonce++
if err := cli.Consensus.SubmitTx(kmTxPath); err != nil {
if err = cli.Consensus.SubmitTx(kmTxPath); err != nil {
return fmt.Errorf("failed to update KM runtime: %w", err)
}

// Wait for the new node to register.
sc.Logger.Info("waiting for new keymanager node to register",
"num_nodes", sc.Net.NumRegisterNodes(),
)
if err := sc.Net.Keymanagers()[1].WaitReady(ctx); err != nil {
if err = sc.Net.Keymanagers()[1].WaitReady(ctx); err != nil {
return fmt.Errorf("error waiting for new keymanager to be ready: %w", err)
}

// Ensure replication succeeded.
if err := sc.ensureReplicationWorked(ctx, newKm, newRt); err != nil {
if err = sc.ensureReplicationWorked(ctx, newKm, newRt); err != nil {
return err
}

nodeCh, nodeSub, err := sc.Net.Controller().Registry.WatchNodes(ctx)
if err != nil {
return fmt.Errorf("failed to watch nodes: %w", err)
}
defer nodeSub.Close()

// Shutdown old keymanager and make sure it deregisters.
sc.Logger.Info("shutting down old keymanager")
oldKm := sc.Net.Keymanagers()[0]
if err := oldKm.RequestShutdown(ctx, true); err != nil {
return fmt.Errorf("failed to request shutdown: %w", err)
}

// Ensure keymanager deregisters.
OUTER:
for {
select {
case ev := <-nodeCh:
if !ev.IsRegistration && ev.Node.ID.Equal(oldKm.NodeID) {
break OUTER
}
case <-time.After(10 * time.Second):
return fmt.Errorf("failed to wait for keymanager to de-register")
}
}

// Run client again.
sc.Logger.Info("starting a second client to check if key manager works")
newTestClient := sc.testClient.Clone().(*KeyValueEncTestClient)
Expand Down
3 changes: 0 additions & 3 deletions go/worker/registration/worker.go
Expand Up @@ -652,9 +652,6 @@ func (w *Worker) doNodeRegistration() {

case <-w.stopCh:
return

case <-w.stopRegCh:
return
}
}
}
Expand Down

0 comments on commit 9e0c570

Please sign in to comment.