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

TmpNet on Local Networks #2576

Open
wants to merge 61 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
6212ea6
start/stop/clean start working for basic local network
felipemadero Jan 23, 2025
d1f3bfa
add missing files
felipemadero Jan 23, 2025
f73096e
goimports
felipemadero Jan 23, 2025
dd8dc6f
move network load and stop inside tmpnet file
felipemadero Jan 23, 2025
bda1f25
improve bootstrapping status check and have better names for localnet…
felipemadero Jan 24, 2025
7199092
centralize tmpnet usage. fix status partially
felipemadero Jan 24, 2025
dd63037
make network start to use given avalanchego
felipemadero Jan 24, 2025
813576f
some refactors
felipemadero Jan 24, 2025
fc5e164
more refactoring
felipemadero Jan 24, 2025
af21cc2
cleanup
felipemadero Jan 24, 2025
bb2ac3e
refactor
felipemadero Jan 24, 2025
4325c48
preparing to work on track
felipemadero Jan 24, 2025
a695bbe
move blockchain boostrapping check to tmpnet
felipemadero Jan 24, 2025
4acc692
added blockchain config stuff
felipemadero Jan 25, 2025
0ce9210
saving RPCs into sidecar
felipemadero Jan 25, 2025
a70da78
local network non sovereign flow kind of migrated
felipemadero Jan 25, 2025
ad4f1ff
add missing file
felipemadero Jan 25, 2025
7444466
adding health info to status
felipemadero Jan 25, 2025
b64cdb8
fixed output
felipemadero Jan 26, 2025
fe1eb4a
lint
felipemadero Jan 26, 2025
db4c51a
Merge branch 'main' into localnetworks-tmpnet
felipemadero Jan 26, 2025
75979a0
fix go.mod
felipemadero Jan 26, 2025
0f176b7
fix licenses
felipemadero Jan 26, 2025
36d24d3
make clean to not fail if no network up
felipemadero Jan 26, 2025
af05ddc
add wait before setting aliases
felipemadero Jan 26, 2025
1fd0cf6
only set aliases on validators
felipemadero Jan 26, 2025
1359373
improve alias and bootstrap check functions to base on subnet id
felipemadero Jan 26, 2025
cd0403f
rm debugging print
felipemadero Jan 26, 2025
2e37069
fix for a e2e
felipemadero Jan 27, 2025
30ba489
fix more e2e
felipemadero Jan 27, 2025
a6f646c
more fixes
felipemadero Jan 27, 2025
4b9decd
e2e fix attempt
felipemadero Jan 27, 2025
c92b06c
fixes to pass e2e
felipemadero Jan 27, 2025
9643615
Merge branch 'main' into localnetworks-tmpnet
felipemadero Jan 27, 2025
e3a8167
use GetApp() on all tests
felipemadero Jan 28, 2025
bcc9da2
add some comments
felipemadero Jan 28, 2025
09f64c0
move helpers to application
felipemadero Jan 28, 2025
73a1923
fix uris inside tmpnet wrapper
felipemadero Jan 28, 2025
d2649a1
add some comments
felipemadero Jan 28, 2025
8890fc2
avoid using latest on network restart
felipemadero Jan 28, 2025
ef631cb
nit
felipemadero Jan 28, 2025
556a5e8
e2e
felipemadero Jan 30, 2025
24bf438
fix e2e
felipemadero Jan 30, 2025
122a407
Merge branch 'main' into localnetworks-tmpnet
felipemadero Jan 30, 2025
d747773
chore: Update MD files [skip ci]
github-actions[bot] Jan 30, 2025
7c2e083
empty
felipemadero Jan 30, 2025
4783abf
chore: Update MD files [skip ci]
github-actions[bot] Jan 30, 2025
95a8945
e2e
felipemadero Jan 30, 2025
2b64943
nit
felipemadero Jan 30, 2025
6491307
chore: Update MD files [skip ci]
github-actions[bot] Jan 30, 2025
2574c63
chore: Update MD files [skip ci]
github-actions[bot] Jan 30, 2025
e780fbd
use fixed ANR
felipemadero Jan 30, 2025
a54d24d
chore: Update MD files [skip ci]
github-actions[bot] Jan 30, 2025
2629409
more fixes
felipemadero Jan 30, 2025
6d12f30
chore: Update MD files [skip ci]
github-actions[bot] Jan 30, 2025
3eff6bb
add back script
felipemadero Jan 30, 2025
8c79370
chore: Update MD files [skip ci]
github-actions[bot] Jan 30, 2025
c8ed136
Merge branch 'main' into localnetworks-tmpnet
felipemadero Jan 31, 2025
463ed92
reformatting and comments
felipemadero Jan 31, 2025
c8d3eef
Update cmd/networkcmd/start.go
felipemadero Feb 5, 2025
57d5581
address PR comment
felipemadero Feb 5, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 24 additions & 27 deletions cmd/blockchaincmd/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import (
"github.com/ava-labs/avalanche-cli/cmd/interchaincmd/messengercmd"
"github.com/ava-labs/avalanche-cli/cmd/interchaincmd/relayercmd"
"github.com/ava-labs/avalanche-cli/cmd/networkcmd"
"github.com/ava-labs/avalanche-cli/pkg/binutils"
"github.com/ava-labs/avalanche-cli/pkg/cobrautils"
"github.com/ava-labs/avalanche-cli/pkg/constants"
"github.com/ava-labs/avalanche-cli/pkg/contract"
Expand Down Expand Up @@ -517,7 +516,7 @@ func deployBlockchain(cmd *cobra.Command, args []string) error {

// check if blockchain rpc version matches what is currently running
// for the case version or binary was provided
_, _, networkRPCVersion, err := localnet.GetVersion()
_, _, networkRPCVersion, err := localnet.GetLocalNetworkAvalancheGoVersion(app)
if err != nil {
return err
}
Expand All @@ -534,7 +533,7 @@ func deployBlockchain(cmd *cobra.Command, args []string) error {
if !sidecar.Sovereign {
// sovereign blockchains are deployed into new local clusters,
// non sovereign blockchains are deployed into the local network itself
if b, err := networkcmd.AlreadyDeployed(blockchainName); err != nil {
if b, err := localnet.BlockchainAlreadyDeployedOnLocalNetwork(app, blockchainName); err != nil {
return err
} else if b {
return fmt.Errorf("blockchain %s has already been deployed", blockchainName)
Expand Down Expand Up @@ -675,29 +674,25 @@ func deployBlockchain(cmd *cobra.Command, args []string) error {
_ = node.StopLocalNode(app)
anrSettings := node.ANRSettings{}
avagoVersionSettings := node.AvalancheGoVersionSettings{}
if avagoBinaryPath == "" {
useLatestAvalanchegoPreReleaseVersion := true
useLatestAvalanchegoReleaseVersion := false
if userProvidedAvagoVersion != constants.DefaultAvalancheGoVersion {
useLatestAvalanchegoReleaseVersion = false
useLatestAvalanchegoPreReleaseVersion = false
} else {
userProvidedAvagoVersion = ""
}
avaGoVersionSetting := node.AvalancheGoVersionSettings{
UseCustomAvalanchegoVersion: userProvidedAvagoVersion,
UseLatestAvalanchegoPreReleaseVersion: useLatestAvalanchegoPreReleaseVersion,
UseLatestAvalanchegoReleaseVersion: useLatestAvalanchegoReleaseVersion,
}
avalancheGoVersion, err := node.GetAvalancheGoVersion(app, avaGoVersionSetting)
if err != nil {
return err
}
_, avagoDir, err := binutils.SetupAvalanchego(app, avalancheGoVersion)
// setup (install if needed) avalanchego binary
avagoVersion := userProvidedAvagoVersion
if userProvidedAvagoVersion == constants.DefaultAvalancheGoVersion && avagoBinaryPath == "" {
// nothing given: get avago version from RPC compat
avagoVersion, err = vm.GetLatestAvalancheGoByProtocolVersion(
app,
sidecar.RPCVersion,
constants.AvalancheGoCompatibilityURL,
)
if err != nil {
return fmt.Errorf("failed installing Avalanche Go version %s: %w", avalancheGoVersion, err)
if err != vm.ErrNoAvagoVersion {
return err
}
avagoVersion = constants.LatestPreReleaseVersionTag
}
avagoBinaryPath = filepath.Join(avagoDir, "avalanchego")
}
avagoBinaryPath, err := localnet.SetupAvalancheGoBinary(app, avagoVersion, avagoBinaryPath)
if err != nil {
return err
}
nodeConfig := map[string]interface{}{}
if app.AvagoNodeConfigExists(blockchainName) {
Expand Down Expand Up @@ -1133,10 +1128,12 @@ func deployBlockchain(cmd *cobra.Command, args []string) error {
}
if network.Kind == models.Local && !simulatedPublicNetwork() {
ux.Logger.PrintToUser("")
if err := networkcmd.TrackSubnet(
ctx, cancel := localnet.GetLocalNetworkDefaultContext()
defer cancel()
if err := localnet.LocalNetworkTrackSubnet(
ctx,
app,
blockchainName,
avagoBinaryPath,
sidecar.Sovereign,
); err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/blockchaincmd/validators.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ func printValidatorsFromList(validators []platformvm.ClientPermissionlessValidat

table.Append([]string{
validator.NodeID.String(),
strconv.FormatUint(*validator.StakeAmount, 10),
strconv.FormatUint(validator.Weight, 10),
strconv.FormatUint(delegatorWeight, 10),
formatUnixTime(validator.StartTime),
formatUnixTime(validator.EndTime),
Expand Down
2 changes: 1 addition & 1 deletion cmd/blockchaincmd/vmid.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import (
"fmt"

"github.com/ava-labs/avalanche-cli/pkg/cobrautils"
"github.com/ava-labs/avalanche-cli/pkg/utils"
"github.com/ava-labs/avalanche-cli/pkg/ux"
"github.com/ava-labs/avalanche-network-runner/utils"
"github.com/spf13/cobra"
)

Expand Down
4 changes: 2 additions & 2 deletions cmd/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -2067,7 +2067,7 @@ avalanche network start [subcommand] [flags]
--num-nodes uint32 number of nodes to be created on local network (default 2)
--relayer-path string use this relayer binary path
--relayer-version string use this relayer version (default "latest-prerelease")
--snapshot-name string name of snapshot to use to start the network from (default "default-1654102509")
--snapshot-name string name of snapshot to use to start the network from (default "default")
--config string config file (default is $HOME/.avalanche-cli/config.json)
--log-level string log level for the application (default "ERROR")
--skip-update-check skip check for new versions
Expand Down Expand Up @@ -2114,7 +2114,7 @@ avalanche network stop [subcommand] [flags]
```bash
--dont-save do not save snapshot, just stop the network
-h, --help help for stop
--snapshot-name string name of snapshot to use to save network state into (default "default-1654102509")
--snapshot-name string name of snapshot to use to save network state into (default "default")
--config string config file (default is $HOME/.avalanche-cli/config.json)
--log-level string log level for the application (default "ERROR")
--skip-update-check skip check for new versions
Expand Down
2 changes: 2 additions & 0 deletions cmd/interchaincmd/messengercmd/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,8 @@ func CallDeploy(_ []string, flags DeployFlags, network models.Network) error {
if !alreadyDeployed {
if network.Kind == models.Local {
if err := localnet.WriteExtraLocalNetworkData(
app,
"",
"",
"",
messengerAddress,
Expand Down
5 changes: 2 additions & 3 deletions cmd/interchaincmd/relayercmd/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -430,11 +430,10 @@ func CallDeploy(_ []string, flags DeployFlags, network models.Network) error {
storageDir := app.GetLocalRelayerStorageDir(network.Kind)
localNetworkRootDir := ""
if network.Kind == models.Local {
clusterInfo, err := localnet.GetClusterInfo()
localNetworkRootDir, err = localnet.GetLocalNetworkDir(app)
if err != nil {
return err
}
localNetworkRootDir = clusterInfo.GetRootDataDir()
}
configPath := app.GetLocalRelayerConfigPath(network.Kind, localNetworkRootDir)
logPath := app.GetLocalRelayerLogPath(network.Kind)
Expand Down Expand Up @@ -509,7 +508,7 @@ func CallDeploy(_ []string, flags DeployFlags, network models.Network) error {
return err
}
if network.Kind == models.Local {
if err := localnet.WriteExtraLocalNetworkData("", binPath, "", ""); err != nil {
if err := localnet.WriteExtraLocalNetworkData(app, "", "", binPath, "", ""); err != nil {
return err
}
}
Expand Down
7 changes: 3 additions & 4 deletions cmd/interchaincmd/relayercmd/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,15 +83,14 @@ func start(_ *cobra.Command, _ []string) error {
}
localNetworkRootDir := ""
if network.Kind == models.Local {
clusterInfo, err := localnet.GetClusterInfo()
localNetworkRootDir, err = localnet.GetLocalNetworkDir(app)
if err != nil {
return err
}
localNetworkRootDir = clusterInfo.GetRootDataDir()
}
relayerConfigPath := app.GetLocalRelayerConfigPath(network.Kind, localNetworkRootDir)
if network.Kind == models.Local && binPath == "" {
if b, extraLocalNetworkData, err := localnet.GetExtraLocalNetworkData(""); err != nil {
if b, extraLocalNetworkData, err := localnet.GetExtraLocalNetworkData(app, ""); err != nil {
return err
} else if b {
binPath = extraLocalNetworkData.RelayerPath
Expand All @@ -110,7 +109,7 @@ func start(_ *cobra.Command, _ []string) error {
); err != nil {
return err
} else if network.Kind == models.Local {
if err := localnet.WriteExtraLocalNetworkData("", binPath, "", ""); err != nil {
if err := localnet.WriteExtraLocalNetworkData(app, "", "", binPath, "", ""); err != nil {
return err
}
}
Expand Down
44 changes: 7 additions & 37 deletions cmd/networkcmd/clean.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,20 @@
package networkcmd

import (
"errors"
"os"
"path/filepath"
"regexp"

"github.com/ava-labs/avalanche-cli/pkg/binutils"
"github.com/ava-labs/avalanche-cli/pkg/cobrautils"
"github.com/ava-labs/avalanche-cli/pkg/constants"
"github.com/ava-labs/avalanche-cli/pkg/interchain"
"github.com/ava-labs/avalanche-cli/pkg/localnet"
"github.com/ava-labs/avalanche-cli/pkg/models"
"github.com/ava-labs/avalanche-cli/pkg/node"
"github.com/ava-labs/avalanche-cli/pkg/subnet"
"github.com/ava-labs/avalanche-cli/pkg/ux"
"github.com/shirou/gopsutil/process"

"github.com/spf13/cobra"
"go.uber.org/zap"
)

var hard bool
Expand All @@ -44,16 +43,8 @@ configuration.`,
}

func clean(*cobra.Command, []string) error {
app.Log.Info("killing gRPC server process...")

if err := binutils.KillgRPCServerProcess(
app,
binutils.LocalNetworkGRPCServerEndpoint,
constants.ServerRunFileLocalNetworkPrefix,
); err != nil {
app.Log.Warn("failed killing server process", zap.Error(err))
} else {
ux.Logger.PrintToUser("Process terminated.")
if err := localnet.LocalNetworkStop(app); err != nil && !errors.Is(err, localnet.ErrNetworkNotBootstrapped) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

Currently on main, if network clean is successful it prints out

Process terminated.

We should print out something if clean is successful.

return err
}

if err := interchain.RelayerCleanup(
Expand All @@ -68,7 +59,6 @@ func clean(*cobra.Command, []string) error {
ux.Logger.PrintToUser("hard clean requested via flag, removing all downloaded avalanchego and plugin binaries")
binDir := filepath.Join(app.GetBaseDir(), constants.AvalancheCliBinDir)
cleanBins(binDir)
_ = killAllBackendsByName()
}

if err := app.ResetPluginsDir(); err != nil {
Expand Down Expand Up @@ -111,27 +101,7 @@ func removeLocalDeployInfoFromSidecars() error {
func cleanBins(dir string) {
if err := os.RemoveAll(dir); err != nil {
ux.Logger.PrintToUser("Removal failed: %s", err)
} else {
ux.Logger.PrintToUser("All existing binaries removed.")
}
ux.Logger.PrintToUser("All existing binaries removed.")
}

func killAllBackendsByName() error {
procs, err := process.Processes()
if err != nil {
return err
}
regex := regexp.MustCompile(".* " + constants.BackendCmd + ".*")
for _, p := range procs {
name, err := p.Cmdline()
if err != nil {
// ignore errors for processes that just died (macos implementation)
continue
}
if regex.MatchString(name) {
if err := p.Terminate(); err != nil {
return err
}
}
}
return nil
}
Loading
Loading