diff --git a/codex/codex.nim b/codex/codex.nim index 7e39c3e0..5585500b 100644 --- a/codex/codex.nim +++ b/codex/codex.nim @@ -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() diff --git a/codex/stores.nim b/codex/stores.nim index a2c7acd3..5d78f1fd 100644 --- a/codex/stores.nim +++ b/codex/stores.nim @@ -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 diff --git a/codex/stores/blockstoremanager.nim b/codex/stores/blockstoremanager.nim index 88df5770..e60a3a6c 100644 --- a/codex/stores/blockstoremanager.nim +++ b/codex/stores/blockstoremanager.nim @@ -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)