Removes circular dependency from blockstoremanager to config

This commit is contained in:
benbierens 2023-03-14 13:28:26 +01:00
parent cc97010898
commit 63d7647635
No known key found for this signature in database
GPG Key ID: FE44815D96D0A1AA
3 changed files with 20 additions and 8 deletions

View File

@ -26,7 +26,6 @@ import ./conf
import ./rng
import ./rest/api
import ./stores
import ./stores/blockstoremanager
import ./blockexchange
import ./utils/fileutils
import ./erasure
@ -178,7 +177,13 @@ proc new*(T: type CodexServer, config: CodexConf, privateKey: CodexPrivateKey):
wallet = WalletRef.new(EthPrivateKey.random())
network = BlockExcNetwork.new(switch)
blockStoreManager = BlockStoreManager.new(config)
blockStoreManager = BlockStoreManager.new(BlockStoreManagerConfig(
dataDir: config.dataDir,
storageQuota: config.storageQuota,
blockTtlSeconds: config.blockTtlSeconds,
blockMaintenanceIntervalSeconds: config.blockMaintenanceIntervalSeconds,
blockMaintenanceNumberOfBlocks: config.blockMaintenanceNumberOfBlocks,
cacheSize: config.cacheSize))
blockStore = blockStoreManager.getBlockStore()
peerStore = PeerCtxStore.new()

View File

@ -1,3 +1,4 @@
import ./stores/blockstoremanager
import ./stores/cachestore
import ./stores/blockstore
import ./stores/networkstore
@ -6,4 +7,4 @@ import ./stores/memorystore
import ./stores/maintenance
import ./stores/keyutils
export cachestore, blockstore, networkstore, repostore, memorystore, maintenance, keyutils
export blockstoremanager, cachestore, blockstore, networkstore, repostore, memorystore, maintenance, keyutils

View File

@ -16,7 +16,6 @@ import pkg/confutils/defs
import ../namespaces
import ../conf
import ../consts
import ./blockstore
import ./repostore
@ -28,6 +27,13 @@ type
repoStore: RepoStore
maintenance: BlockMaintainer
blockStore: BlockStore
BlockStoreManagerConfig* = ref object
dataDir*: OutDir
storageQuota*: Natural
blockTtlSeconds*: int
blockMaintenanceIntervalSeconds*: int
blockMaintenanceNumberOfBlocks*: int
cacheSize*: Natural
proc start*(self: BlockStoreManager): Future[void] {.async.} =
await self.repoStore.start()
@ -40,25 +46,25 @@ proc stop*(self: BlockStoreManager): Future[void] {.async.} =
proc getBlockStore*(self: BlockStoreManager): BlockStore =
self.blockStore
proc createRepoStore(config: CodexConf): RepoStore =
proc createRepoStore(config: BlockStoreManagerConfig): RepoStore =
RepoStore.new(
repoDs = Datastore(FSDatastore.new($config.dataDir, depth = 5).expect("Should create repo data store!")),
metaDs = SQLiteDatastore.new(config.dataDir / CodexMetaNamespace).expect("Should create meta data store!"),
quotaMaxBytes = config.storageQuota.uint,
blockTtl = config.blockTtlSeconds.seconds)
proc createMaintenance(repoStore: RepoStore, config: CodexConf): BlockMaintainer =
proc createMaintenance(repoStore: RepoStore, config: BlockStoreManagerConfig): BlockMaintainer =
BlockMaintainer.new(
repoStore,
interval = config.blockMaintenanceIntervalSeconds.seconds,
numberOfBlocksPerInterval = config.blockMaintenanceNumberOfBlocks)
proc getBlockStore(repoStore: RepoStore, config: CodexConf): BlockStore =
proc getBlockStore(repoStore: RepoStore, config: BlockStoreManagerConfig): BlockStore =
if config.cacheSize > 0:
return CacheStore.new(backingStore = repoStore, cacheSize = config.cacheSize * MiB)
return repoStore
proc new*(T: type BlockStoreManager, config: CodexConf): T =
proc new*(T: type BlockStoreManager, config: BlockStoreManagerConfig): T =
let
repoStore = createRepoStore(config)
maintenance = createMaintenance(repoStore, config)