From c86838f2e82ed2964142b35bb8dbda31b09d4fba Mon Sep 17 00:00:00 2001 From: StephenButtolph Date: Mon, 8 Jun 2020 11:53:55 -0400 Subject: [PATCH] Moved rpcchainvm logs to live under their chain --- chains/manager.go | 86 ++++++++++++++++----------------- node/node.go | 5 +- vms/avm/factory.go | 3 +- vms/manager.go | 8 +-- vms/nftfx/factory.go | 3 +- vms/nftfx/factory_test.go | 2 +- vms/platformvm/factory.go | 3 +- vms/propertyfx/factory.go | 3 +- vms/propertyfx/factory_test.go | 2 +- vms/rpcchainvm/factory.go | 22 ++++----- vms/secp256k1fx/factory.go | 3 +- vms/secp256k1fx/factory_test.go | 2 +- vms/spchainvm/factory.go | 3 +- vms/spdagvm/factory.go | 3 +- vms/timestampvm/factory.go | 7 ++- 15 files changed, 81 insertions(+), 74 deletions(-) diff --git a/chains/manager.go b/chains/manager.go index 1dbb5e8..78470b4 100644 --- a/chains/manager.go +++ b/chains/manager.go @@ -204,49 +204,6 @@ func (m *manager) ForceCreateChain(chain ChainParameters) { return } - // Get a factory for the vm we want to use on our chain - vmFactory, err := m.vmManager.GetVMFactory(vmID) - if err != nil { - m.log.Error("error while getting vmFactory: %s", err) - return - } - - // Create the chain - vm, err := vmFactory.New() - if err != nil { - m.log.Error("error while creating vm: %s", err) - return - } - // TODO: Shutdown VM if an error occurs - - fxs := make([]*common.Fx, len(chain.FxAliases)) - for i, fxAlias := range chain.FxAliases { - fxID, err := m.vmManager.Lookup(fxAlias) - if err != nil { - m.log.Error("error while looking up Fx: %s", err) - return - } - - // Get a factory for the fx we want to use on our chain - fxFactory, err := m.vmManager.GetVMFactory(fxID) - if err != nil { - m.log.Error("error while getting fxFactory: %s", err) - return - } - - fx, err := fxFactory.New() - if err != nil { - m.log.Error("error while creating fx: %s", err) - return - } - - // Create the fx - fxs[i] = &common.Fx{ - ID: fxID, - Fx: fx, - } - } - primaryAlias, err := m.PrimaryAlias(chain.ID) if err != nil { primaryAlias = chain.ID.String() @@ -272,6 +229,49 @@ func (m *manager) ForceCreateChain(chain ChainParameters) { BCLookup: m, } + // Get a factory for the vm we want to use on our chain + vmFactory, err := m.vmManager.GetVMFactory(vmID) + if err != nil { + m.log.Error("error while getting vmFactory: %s", err) + return + } + + // Create the chain + vm, err := vmFactory.New(ctx) + if err != nil { + m.log.Error("error while creating vm: %s", err) + return + } + // TODO: Shutdown VM if an error occurs + + fxs := make([]*common.Fx, len(chain.FxAliases)) + for i, fxAlias := range chain.FxAliases { + fxID, err := m.vmManager.Lookup(fxAlias) + if err != nil { + m.log.Error("error while looking up Fx: %s", err) + return + } + + // Get a factory for the fx we want to use on our chain + fxFactory, err := m.vmManager.GetVMFactory(fxID) + if err != nil { + m.log.Error("error while getting fxFactory: %s", err) + return + } + + fx, err := fxFactory.New(ctx) + if err != nil { + m.log.Error("error while creating fx: %s", err) + return + } + + // Create the fx + fxs[i] = &common.Fx{ + ID: fxID, + Fx: fx, + } + } + consensusParams := m.consensusParams consensusParams.Namespace = fmt.Sprintf("gecko_%s", primaryAlias) diff --git a/node/node.go b/node/node.go index 510b333..5fbb8d1 100644 --- a/node/node.go +++ b/node/node.go @@ -295,10 +295,7 @@ func (n *Node) initVMManager() error { AVA: avaAssetID, Platform: ids.Empty, }), - n.vmManager.RegisterVMFactory(genesis.EVMID, &rpcchainvm.Factory{ - Log: n.Log, - Path: path.Join(n.Config.PluginDir, "evm"), - }), + n.vmManager.RegisterVMFactory(genesis.EVMID, &rpcchainvm.Factory{Path: path.Join(n.Config.PluginDir, "evm")}), n.vmManager.RegisterVMFactory(spdagvm.ID, &spdagvm.Factory{TxFee: n.Config.AvaTxFee}), n.vmManager.RegisterVMFactory(spchainvm.ID, &spchainvm.Factory{}), n.vmManager.RegisterVMFactory(timestampvm.ID, ×tampvm.Factory{}), diff --git a/vms/avm/factory.go b/vms/avm/factory.go index 96865c6..9830ba6 100644 --- a/vms/avm/factory.go +++ b/vms/avm/factory.go @@ -5,6 +5,7 @@ package avm import ( "github.com/ava-labs/gecko/ids" + "github.com/ava-labs/gecko/snow" ) // ID that this VM uses when labeled @@ -19,7 +20,7 @@ type Factory struct { } // New ... -func (f *Factory) New() (interface{}, error) { +func (f *Factory) New(*snow.Context) (interface{}, error) { return &VM{ ava: f.AVA, platform: f.Platform, diff --git a/vms/manager.go b/vms/manager.go index 4449c27..1f650ba 100644 --- a/vms/manager.go +++ b/vms/manager.go @@ -8,15 +8,15 @@ import ( "sync" "github.com/ava-labs/gecko/api" - "github.com/ava-labs/gecko/snow/engine/common" - "github.com/ava-labs/gecko/ids" + "github.com/ava-labs/gecko/snow" + "github.com/ava-labs/gecko/snow/engine/common" "github.com/ava-labs/gecko/utils/logging" ) // A VMFactory creates new instances of a VM type VMFactory interface { - New() (interface{}, error) + New(*snow.Context) (interface{}, error) } // Manager is a VM manager. @@ -110,7 +110,7 @@ func (m *manager) addStaticAPIEndpoints(vmID ids.ID) { vmFactory, err := m.GetVMFactory(vmID) m.log.AssertNoError(err) m.log.Debug("adding static API for VM with ID %s", vmID) - vm, err := vmFactory.New() + vm, err := vmFactory.New(nil) if err != nil { return } diff --git a/vms/nftfx/factory.go b/vms/nftfx/factory.go index fc28262..7c0ff8f 100644 --- a/vms/nftfx/factory.go +++ b/vms/nftfx/factory.go @@ -2,6 +2,7 @@ package nftfx import ( "github.com/ava-labs/gecko/ids" + "github.com/ava-labs/gecko/snow" ) // ID that this Fx uses when labeled @@ -13,4 +14,4 @@ var ( type Factory struct{} // New ... -func (f *Factory) New() (interface{}, error) { return &Fx{}, nil } +func (f *Factory) New(*snow.Context) (interface{}, error) { return &Fx{}, nil } diff --git a/vms/nftfx/factory_test.go b/vms/nftfx/factory_test.go index 7144129..bf0e15f 100644 --- a/vms/nftfx/factory_test.go +++ b/vms/nftfx/factory_test.go @@ -6,7 +6,7 @@ import ( func TestFactory(t *testing.T) { factory := Factory{} - if fx, err := factory.New(); err != nil { + if fx, err := factory.New(nil); err != nil { t.Fatal(err) } else if fx == nil { t.Fatalf("Factory.New returned nil") diff --git a/vms/platformvm/factory.go b/vms/platformvm/factory.go index c55c070..49c48ad 100644 --- a/vms/platformvm/factory.go +++ b/vms/platformvm/factory.go @@ -6,6 +6,7 @@ package platformvm import ( "github.com/ava-labs/gecko/chains" "github.com/ava-labs/gecko/ids" + "github.com/ava-labs/gecko/snow" "github.com/ava-labs/gecko/snow/validators" ) @@ -24,7 +25,7 @@ type Factory struct { } // New returns a new instance of the Platform Chain -func (f *Factory) New() (interface{}, error) { +func (f *Factory) New(*snow.Context) (interface{}, error) { return &VM{ chainManager: f.ChainManager, validators: f.Validators, diff --git a/vms/propertyfx/factory.go b/vms/propertyfx/factory.go index 67ebb5a..1198b8b 100644 --- a/vms/propertyfx/factory.go +++ b/vms/propertyfx/factory.go @@ -2,6 +2,7 @@ package propertyfx import ( "github.com/ava-labs/gecko/ids" + "github.com/ava-labs/gecko/snow" ) // ID that this Fx uses when labeled @@ -13,4 +14,4 @@ var ( type Factory struct{} // New ... -func (f *Factory) New() (interface{}, error) { return &Fx{}, nil } +func (f *Factory) New(*snow.Context) (interface{}, error) { return &Fx{}, nil } diff --git a/vms/propertyfx/factory_test.go b/vms/propertyfx/factory_test.go index d49d27c..73e1ac0 100644 --- a/vms/propertyfx/factory_test.go +++ b/vms/propertyfx/factory_test.go @@ -6,7 +6,7 @@ import ( func TestFactory(t *testing.T) { factory := Factory{} - if fx, err := factory.New(); err != nil { + if fx, err := factory.New(nil); err != nil { t.Fatal(err) } else if fx == nil { t.Fatalf("Factory.New returned nil") diff --git a/vms/rpcchainvm/factory.go b/vms/rpcchainvm/factory.go index 77e2c0a..a48bb01 100644 --- a/vms/rpcchainvm/factory.go +++ b/vms/rpcchainvm/factory.go @@ -9,7 +9,7 @@ import ( "github.com/hashicorp/go-plugin" - "github.com/ava-labs/gecko/utils/logging" + "github.com/ava-labs/gecko/snow" ) var ( @@ -17,25 +17,25 @@ var ( ) // Factory ... -type Factory struct { - Log logging.Logger - Path string -} +type Factory struct{ Path string } // New ... -func (f *Factory) New() (interface{}, error) { - client := plugin.NewClient(&plugin.ClientConfig{ +func (f *Factory) New(ctx *snow.Context) (interface{}, error) { + config := &plugin.ClientConfig{ HandshakeConfig: Handshake, Plugins: PluginMap, Cmd: exec.Command("sh", "-c", f.Path), - Stderr: f.Log, - SyncStdout: f.Log, - SyncStderr: f.Log, AllowedProtocols: []plugin.Protocol{ plugin.ProtocolNetRPC, plugin.ProtocolGRPC, }, - }) + } + if ctx != nil { + config.Stderr = ctx.Log + config.SyncStdout = ctx.Log + config.SyncStderr = ctx.Log + } + client := plugin.NewClient(config) rpcClient, err := client.Client() if err != nil { diff --git a/vms/secp256k1fx/factory.go b/vms/secp256k1fx/factory.go index cdcb200..67be80f 100644 --- a/vms/secp256k1fx/factory.go +++ b/vms/secp256k1fx/factory.go @@ -5,6 +5,7 @@ package secp256k1fx import ( "github.com/ava-labs/gecko/ids" + "github.com/ava-labs/gecko/snow" ) // ID that this Fx uses when labeled @@ -16,4 +17,4 @@ var ( type Factory struct{} // New ... -func (f *Factory) New() (interface{}, error) { return &Fx{}, nil } +func (f *Factory) New(*snow.Context) (interface{}, error) { return &Fx{}, nil } diff --git a/vms/secp256k1fx/factory_test.go b/vms/secp256k1fx/factory_test.go index 1c92b6a..0fadef8 100644 --- a/vms/secp256k1fx/factory_test.go +++ b/vms/secp256k1fx/factory_test.go @@ -9,7 +9,7 @@ import ( func TestFactory(t *testing.T) { factory := Factory{} - if fx, err := factory.New(); err != nil { + if fx, err := factory.New(nil); err != nil { t.Fatal(err) } else if fx == nil { t.Fatalf("Factory.New returned nil") diff --git a/vms/spchainvm/factory.go b/vms/spchainvm/factory.go index 0b8fa98..7141c5e 100644 --- a/vms/spchainvm/factory.go +++ b/vms/spchainvm/factory.go @@ -5,6 +5,7 @@ package spchainvm import ( "github.com/ava-labs/gecko/ids" + "github.com/ava-labs/gecko/snow" ) // ID this VM should be referenced by @@ -16,4 +17,4 @@ var ( type Factory struct{} // New ... -func (f *Factory) New() (interface{}, error) { return &VM{}, nil } +func (f *Factory) New(*snow.Context) (interface{}, error) { return &VM{}, nil } diff --git a/vms/spdagvm/factory.go b/vms/spdagvm/factory.go index 04e20ab..64277af 100644 --- a/vms/spdagvm/factory.go +++ b/vms/spdagvm/factory.go @@ -5,6 +5,7 @@ package spdagvm import ( "github.com/ava-labs/gecko/ids" + "github.com/ava-labs/gecko/snow" ) // ID this VM should be referenced with @@ -16,6 +17,6 @@ var ( type Factory struct{ TxFee uint64 } // New ... -func (f *Factory) New() (interface{}, error) { +func (f *Factory) New(*snow.Context) (interface{}, error) { return &VM{TxFee: f.TxFee}, nil } diff --git a/vms/timestampvm/factory.go b/vms/timestampvm/factory.go index fb9a9ae..447ef68 100644 --- a/vms/timestampvm/factory.go +++ b/vms/timestampvm/factory.go @@ -3,7 +3,10 @@ package timestampvm -import "github.com/ava-labs/gecko/ids" +import ( + "github.com/ava-labs/gecko/ids" + "github.com/ava-labs/gecko/snow" +) // ID is a unique identifier for this VM var ( @@ -14,4 +17,4 @@ var ( type Factory struct{} // New ... -func (f *Factory) New() (interface{}, error) { return &VM{}, nil } +func (f *Factory) New(*snow.Context) (interface{}, error) { return &VM{}, nil }