From 1b0a051d4c617547e3f735461c42ce962f4b9b03 Mon Sep 17 00:00:00 2001 From: Christopher Dro Date: Sat, 13 Jan 2018 17:59:02 -0800 Subject: [PATCH] [Store] Allow parameters to be set via cli and env vars --- cmd/swarm/config.go | 48 +++++++++++++++++++++++++++------------ cmd/swarm/main.go | 25 ++++++++++++++++++++ swarm/storage/netstore.go | 4 +++- 3 files changed, 62 insertions(+), 15 deletions(-) diff --git a/cmd/swarm/config.go b/cmd/swarm/config.go index e6a64cd85d..b23d452869 100644 --- a/cmd/swarm/config.go +++ b/cmd/swarm/config.go @@ -57,20 +57,24 @@ var ( //constants for environment variables const ( - SWARM_ENV_CHEQUEBOOK_ADDR = "SWARM_CHEQUEBOOK_ADDR" - SWARM_ENV_ACCOUNT = "SWARM_ACCOUNT" - SWARM_ENV_LISTEN_ADDR = "SWARM_LISTEN_ADDR" - SWARM_ENV_PORT = "SWARM_PORT" - SWARM_ENV_NETWORK_ID = "SWARM_NETWORK_ID" - SWARM_ENV_SWAP_ENABLE = "SWARM_SWAP_ENABLE" - SWARM_ENV_SWAP_API = "SWARM_SWAP_API" - SWARM_ENV_SYNC_ENABLE = "SWARM_SYNC_ENABLE" - SWARM_ENV_ENS_API = "SWARM_ENS_API" - SWARM_ENV_ENS_ADDR = "SWARM_ENS_ADDR" - SWARM_ENV_CORS = "SWARM_CORS" - SWARM_ENV_BOOTNODES = "SWARM_BOOTNODES" - SWARM_ENV_PSS_ENABLE = "SWARM_PSS_ENABLE" - GETH_ENV_DATADIR = "GETH_DATADIR" + SWARM_ENV_CHEQUEBOOK_ADDR = "SWARM_CHEQUEBOOK_ADDR" + SWARM_ENV_ACCOUNT = "SWARM_ACCOUNT" + SWARM_ENV_LISTEN_ADDR = "SWARM_LISTEN_ADDR" + SWARM_ENV_PORT = "SWARM_PORT" + SWARM_ENV_NETWORK_ID = "SWARM_NETWORK_ID" + SWARM_ENV_SWAP_ENABLE = "SWARM_SWAP_ENABLE" + SWARM_ENV_SWAP_API = "SWARM_SWAP_API" + SWARM_ENV_SYNC_ENABLE = "SWARM_SYNC_ENABLE" + SWARM_ENV_ENS_API = "SWARM_ENS_API" + SWARM_ENV_ENS_ADDR = "SWARM_ENS_ADDR" + SWARM_ENV_CORS = "SWARM_CORS" + SWARM_ENV_BOOTNODES = "SWARM_BOOTNODES" + SWARM_ENV_PSS_ENABLE = "SWARM_PSS_ENABLE" + SWARM_ENV_STORE_PATH = "SWARM_STORE_PATH" + SWARM_ENV_STORE_CAPACITY = "SWARM_STORE_CAPACITY" + SWARM_ENV_STORE_CACHE_CAPACITY = "SWARM_STORE_CACHE_CAPACITY" + SWARM_ENV_STORE_RADIUS = "SWARM_STORE_RADIUS" + GETH_ENV_DATADIR = "GETH_DATADIR" ) // These settings ensure that TOML keys use the same names as Go struct fields. @@ -216,6 +220,22 @@ func cmdLineOverride(currentConfig *bzzapi.Config, ctx *cli.Context) *bzzapi.Con currentConfig.PssEnabled = true } + if storePath := ctx.GlobalString(SwarmStorePath.Name); storePath != "" { + currentConfig.StoreParams.ChunkDbPath = storePath + } + + if storeCapacity := ctx.GlobalUint64(SwarmStoreCapacity.Name); storeCapacity != 0 { + currentConfig.StoreParams.DbCapacity = uint64(storeCapacity) + } + + if storeCacheCapacity := ctx.GlobalUint(SwarmStoreCacheCapacity.Name); storeCacheCapacity != 0 { + currentConfig.StoreParams.CacheCapacity = uint(storeCacheCapacity) + } + + if storeRadius := ctx.GlobalInt(SwarmStoreRadius.Name); storeRadius != 0 { + currentConfig.StoreParams.Radius = int(storeRadius) + } + return currentConfig } diff --git a/cmd/swarm/main.go b/cmd/swarm/main.go index 296f4a609c..c0698d5dc2 100644 --- a/cmd/swarm/main.go +++ b/cmd/swarm/main.go @@ -154,6 +154,26 @@ var ( Usage: "Domain on which to send Access-Control-Allow-Origin header (multiple domains can be supplied separated by a ',')", EnvVar: SWARM_ENV_CORS, } + SwarmStorePath = cli.StringFlag{ + Name: "store.path", + Usage: "Path to leveldb chunk DB (default <$GETH_ENV_DIR>/swarm/bzz-<$BZZ_KEY>/chunks)", + EnvVar: SWARM_ENV_STORE_PATH, + } + SwarmStoreCapacity = cli.Uint64Flag{ + Name: "store.size", + Usage: "Number of chunks (5M is roughly 20-25GB) (default 5000000)", + EnvVar: SWARM_ENV_STORE_CAPACITY, + } + SwarmStoreCacheCapacity = cli.UintFlag{ + Name: "store.cache.size", + Usage: "Number of recent chunks cached in memory (default 5000)", + EnvVar: SWARM_ENV_STORE_CACHE_CAPACITY, + } + SwarmStoreRadius = cli.IntFlag{ + Name: "store.radius", + Usage: "Minimum proximity order (number of identical prefix bits of address key) for chunks to warrant storage (default 0)", + EnvVar: SWARM_ENV_STORE_RADIUS, + } // the following flags are deprecated and should be removed in the future DeprecatedEthAPIFlag = cli.StringFlag{ @@ -367,6 +387,11 @@ DEPRECATED: use 'swarm db clean'. SwarmUploadMimeType, // pss flags SwarmPssEnabledFlag, + // storage flags + SwarmStorePath, + SwarmStoreCapacity, + SwarmStoreCacheCapacity, + SwarmStoreRadius, //deprecated flags DeprecatedEthAPIFlag, } diff --git a/swarm/storage/netstore.go b/swarm/storage/netstore.go index 5d4f17deb1..7661f122b5 100644 --- a/swarm/storage/netstore.go +++ b/swarm/storage/netstore.go @@ -69,7 +69,9 @@ func NewDefaultStoreParams() (self *StoreParams) { //this can only finally be set after all config options (file, cmd line, env vars) //have been evaluated func (self *StoreParams) Init(path string) { - self.ChunkDbPath = filepath.Join(path, "chunks") + if self.ChunkDbPath == "" { + self.ChunkDbPath = filepath.Join(path, "chunks") + } } // netstore contructor, takes path argument that is used to initialise dbStore,