From 29282f07acf9c1a369fb7fddee1618037d048a6d Mon Sep 17 00:00:00 2001 From: StephenButtolph Date: Thu, 19 Mar 2020 17:14:27 -0400 Subject: [PATCH] Added shared memory to the context --- chains/manager.go | 5 +++++ node/node.go | 17 ++++++++++++++++- snow/context.go | 7 +++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/chains/manager.go b/chains/manager.go index efb4372..952e491 100644 --- a/chains/manager.go +++ b/chains/manager.go @@ -9,6 +9,7 @@ import ( "github.com/ava-labs/gecko/api" "github.com/ava-labs/gecko/api/keystore" + "github.com/ava-labs/gecko/chains/atomic" "github.com/ava-labs/gecko/database" "github.com/ava-labs/gecko/database/prefixdb" "github.com/ava-labs/gecko/ids" @@ -109,6 +110,7 @@ type manager struct { awaiter Awaiter // Waits for required connections before running bootstrapping server *api.Server // Handles HTTP API calls keystore *keystore.Keystore + sharedMemory *atomic.SharedMemory unblocked bool blockedChains []ChainParameters @@ -135,6 +137,7 @@ func New( awaiter Awaiter, server *api.Server, keystore *keystore.Keystore, + sharedMemory *atomic.SharedMemory, ) Manager { timeoutManager := timeout.Manager{} timeoutManager.Initialize(requestTimeout) @@ -159,6 +162,7 @@ func New( awaiter: awaiter, server: server, keystore: keystore, + sharedMemory: sharedMemory, } m.Initialize() return m @@ -246,6 +250,7 @@ func (m *manager) ForceCreateChain(chain ChainParameters) { NodeID: m.nodeID, HTTP: m.server, Keystore: m.keystore.NewBlockchainKeyStore(chain.ID), + SharedMemory: m.sharedMemory.NewBlockchainSharedMemory(chain.ID), BCLookup: m, } consensusParams := m.consensusParams diff --git a/node/node.go b/node/node.go index 3c53fd5..9fdc92e 100644 --- a/node/node.go +++ b/node/node.go @@ -25,6 +25,7 @@ import ( "github.com/ava-labs/gecko/api/keystore" "github.com/ava-labs/gecko/api/metrics" "github.com/ava-labs/gecko/chains" + "github.com/ava-labs/gecko/chains/atomic" "github.com/ava-labs/gecko/database" "github.com/ava-labs/gecko/database/prefixdb" "github.com/ava-labs/gecko/genesis" @@ -68,6 +69,9 @@ type Node struct { // Handles calls to Keystore API keystoreServer keystore.Keystore + // Manages shared memory + sharedMemory atomic.SharedMemory + // Manages creation of blockchains and routing messages to them chainManager chains.Manager @@ -415,12 +419,20 @@ func (n *Node) initChainManager() { n.ValidatorAPI, &n.APIServer, &n.keystoreServer, + &n.sharedMemory, ) n.chainManager.AddRegistrant(&n.APIServer) } -// initWallet initializes the Wallet service +// initSharedMemory initializes the shared memory for cross chain interation +func (n *Node) initSharedMemory() { + n.Log.Info("initializing SharedMemory") + sharedMemoryDB := prefixdb.New([]byte("shared memory"), n.DB) + n.sharedMemory.Initialize(n.Log, sharedMemoryDB) +} + +// initKeystoreAPI initializes the keystore service // Assumes n.APIServer is already set func (n *Node) initKeystoreAPI() { n.Log.Info("initializing Keystore API") @@ -502,6 +514,9 @@ func (n *Node) Initialize(Config *Config, logger logging.Logger, logFactory logg return fmt.Errorf("problem initializing staker ID: %w", err) } + // initialize shared memory + n.initSharedMemory() + // Start HTTP APIs n.initAPIServer() // Start the API Server n.initKeystoreAPI() // Start the Keystore API diff --git a/snow/context.go b/snow/context.go index ce213c1..f359553 100644 --- a/snow/context.go +++ b/snow/context.go @@ -24,6 +24,12 @@ type Keystore interface { GetDatabase(username, password string) (database.Database, error) } +// SharedMemory ... +type SharedMemory interface { + GetDatabase(id ids.ID) database.Database + ReleaseDatabase(id ids.ID) +} + // AliasLookup ... type AliasLookup interface { Lookup(alias string) (ids.ID, error) @@ -44,6 +50,7 @@ type Context struct { Lock sync.RWMutex HTTP Callable Keystore Keystore + SharedMemory SharedMemory BCLookup AliasLookup }