mirror of
https://github.com/tendermint/tendermint.git
synced 2026-08-31 21:27:04 +00:00
create versioned e2e docker image
This commit is contained in:
@@ -353,6 +353,14 @@ Does not run any perbutations.
|
||||
},
|
||||
})
|
||||
|
||||
cli.root.AddCommand(&cobra.Command{
|
||||
Use: "upgrade",
|
||||
Short: "Runs a testnet through an upgrade process from the specified version to the current version",
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
return Upgrade(cmd.Context(), cli.testnet, logger)
|
||||
},
|
||||
})
|
||||
|
||||
return cli
|
||||
}
|
||||
|
||||
|
||||
@@ -162,7 +162,7 @@ services:
|
||||
labels:
|
||||
e2e: true
|
||||
container_name: {{ .Name }}
|
||||
image: tendermint/e2e-node
|
||||
image: tendermint/e2e-node:{{ $.Version }}
|
||||
{{- if eq .ABCIProtocol "builtin" }}
|
||||
entrypoint: /usr/bin/entrypoint-builtin
|
||||
{{- else if .LogLevel }}
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"strings"
|
||||
|
||||
"github.com/tendermint/tendermint/libs/log"
|
||||
e2e "github.com/tendermint/tendermint/test/e2e/pkg"
|
||||
|
||||
"github.com/tendermint/tendermint/scripts/keymigrate"
|
||||
"github.com/tendermint/tendermint/scripts/scmigrate"
|
||||
)
|
||||
|
||||
func Upgrade(ctx context.Context, testnet *e2e.Testnet, logger log.Logger) error {
|
||||
if err := Cleanup(logger, testnet); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := Setup(logger, testnet); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
r := rand.New(rand.NewSource(randomSeed)) // nolint: gosec
|
||||
|
||||
chLoadResult := make(chan error)
|
||||
|
||||
lctx, loadCancel := context.WithCancel(ctx)
|
||||
defer loadCancel()
|
||||
go func() {
|
||||
chLoadResult <- Load(lctx, logger, r, testnet)
|
||||
}()
|
||||
|
||||
if err := Start(ctx, logger, testnet); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := Wait(ctx, logger, testnet, 10); err != nil { // allow some txs to go through
|
||||
return err
|
||||
}
|
||||
|
||||
loadCancel()
|
||||
if err := <-chLoadResult; err != nil {
|
||||
return fmt.Errorf("transaction load failed: %w", err)
|
||||
}
|
||||
|
||||
// stop the network
|
||||
if err := execCompose(testnet.Dir, "down"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := Migrate(ctx, logger, testnet); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := Start(ctx, logger, testnet); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func Migrate(ctx context.Context, logger log.Logger, testnet *e2e.Testnet) error {
|
||||
stores := []string{
|
||||
"tx_index",
|
||||
"light",
|
||||
"blockstore",
|
||||
"state",
|
||||
"evidence",
|
||||
}
|
||||
for _, node := range testnet.Nodes {
|
||||
if strings.HasPrefix(oldVersion, "v0.34") && newVersion > "v0.35" {
|
||||
for _, store := range stores {
|
||||
db, err := node.DB(store)
|
||||
if err != nil {
|
||||
return fmt.Errorf("migrating db: %w", err)
|
||||
}
|
||||
|
||||
if err = keymigrate.Migrate(ctx, db); err != nil {
|
||||
return fmt.Errorf("running migration for context %q: %w",
|
||||
store, err)
|
||||
}
|
||||
|
||||
if store == "blockstore" {
|
||||
if err := scmigrate.Migrate(ctx, db); err != nil {
|
||||
return fmt.Errorf("running seen commit migration: %w", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user