Added shared memory to the context

This commit is contained in:
StephenButtolph 2020-03-19 17:14:27 -04:00
parent bb93cc3eee
commit 29282f07ac
3 changed files with 28 additions and 1 deletions

View File

@ -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

View File

@ -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

View File

@ -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
}