Skip to content

Commit

Permalink
feat(store): simplify wakunode2 configuration options
Browse files Browse the repository at this point in the history
  • Loading branch information
Lorenzo Delgado committed Oct 25, 2022
1 parent bc1e60d commit 7a82e9d
Showing 1 changed file with 78 additions and 20 deletions.
98 changes: 78 additions & 20 deletions apps/wakunode2/config.nim
Original file line number Diff line number Diff line change
@@ -1,19 +1,23 @@
import
std/strutils,
std/[strutils, nre],
stew/results,
chronicles,
chronos,
confutils,
confutils/defs,
confutils/std/net,
confutils/toml/defs as confTomlDefs,
confutils/toml/std/net as confTomlNet,
chronicles,
chronos,
libp2p/crypto/crypto,
libp2p/crypto/secp,
nimcrypto/utils

export
confTomlDefs,
confTomlNet


type ConfResult*[T] = Result[T, string]

type
WakuNodeConf* = object
Expand Down Expand Up @@ -63,25 +67,43 @@ type
defaultValue: 50
name: "max-connections" }: uint16

peerPersistence* {.
desc: "Enable peer persistence.",
defaultValue: false,
name: "peer-persistence" }: bool

# TODO: Deprecated. Remove in next release
persistPeers* {.
desc: "Enable peer persistence. DEPRECATED: Use '--peers-persistence' instead.",
defaultValue: false,
name: "persist-peers" }: bool

## Persistence config

# TODO: Deprecated. Remove in next release
dbPath* {.
desc: "The database path for peristent storage",
defaultValue: ""
desc: "The database path for peristent storage. DEPRECATED: Use '--db-url' instead",
defaultValue: "sqlite://store.sqlite3",
name: "db-path" }: string

dbUrl* {.
desc: "The database connection URL for peristent storage.",
defaultValue: "sqlite://store.sqlite3",
name: "db-url" }: string

dbVacuum* {.
desc: "Enable database vacuuming at start: true|false",
defaultValue: false
desc: "Enable database vacuuming at start. Only supported by SQLite database engine.",
defaultValue: false,
name: "db-vacuum" }: bool

dbMigration* {.
desc: "Enable database migration at start.",
defaultValue: true,
name: "db-migration" }: bool

persistPeers* {.
desc: "Enable peer persistence: true|false",
defaultValue: false
name: "persist-peers" }: bool

# TODO: Deprecated. Remove in next release
persistMessages* {.
desc: "Enable message persistence: true|false",
desc: "Enable message persistence. DEPRECATED: Use '--store' instead",
defaultValue: false
name: "persist-messages" }: bool

Expand Down Expand Up @@ -192,30 +214,43 @@ type
## Store config

store* {.
desc: "Enable store protocol: true|false",
desc: "Enable/disable waku store protocol",
defaultValue: true
name: "store" }: bool

storeMessageRetentionPolicy* {.
desc: "Message store retention policy. Time retention policy: 'time:<seconds>'. Capacity retention policy: 'capacity:<count>'",
defaultValue: "time:" & $2.days.seconds,
name: "store-retention-policy" }: string

storeResumePeer* {.
desc: "Peer multiaddress to resume the message store at boot.",
defaultValue: "",
name: "store-resume-peer" }: string

# TODO: Deprecated. Remove in next release
storenode* {.
desc: "Peer multiaddr to query for storage.",
desc: "Peer multiaddr to query for storage. DEPRECATED: Use '--store-resume-peer' instead.",
defaultValue: ""
name: "storenode" }: string

# TODO: Deprecated. Remove in next release
storeCapacity* {.
desc: "Maximum number of messages to keep in store.",
desc: "Maximum number of messages to keep in store. DEPRECATED: Use '--store-message-retention-policy=capacity:<count>' instead",
defaultValue: 50000
name: "store-capacity" }: int

# TODO: Deprecated. Remove in next release
sqliteStore* {.
desc: "Enable sqlite-only store: true|false",
desc: "Enable sqlite-only store: true|false. DEPRECATED: SQLite is the default message store implementation.",
defaultValue: false
name: "sqlite-store" }: bool

## TODO: Rename this command-line option to `storeRetentionTime`
# TODO: Deprecated. Remove in next release
sqliteRetentionTime* {.
desc: "time the sqlite-only store keeps messages (in seconds)",
desc: "time the sqlite-only store keeps messages (in seconds). DEPRECATED: Use '--store-message-retention-policy=time:<seconds>' instead",
defaultValue: 30.days.seconds
name: "sqlite-retention-time" }: int64 # TODO: Duration
name: "sqlite-retention-time" }: int64

## Filter config

Expand Down Expand Up @@ -473,3 +508,26 @@ proc readValue*(r: var TomlReader, val: var crypto.PrivateKey)
except CatchableError as err:
raise newException(SerializationError, err.msg)


## Configuration validation

let DbUrlRegex = re"^[\w\+]+:\/\/[\w\/\\\.\:\@]+$"

proc validateDbUrl*(val: string): ConfResult[string] =
let val = val.strip()

if val == "" or val.match(DbUrlRegex).isSome():
return ok(val)
else:
return err("invalid 'db url' option format: " & val)


let StoreMessageRetentionPolicyRegex = re"^\w+:\w$"

proc validateStoreMessageRetentionPolicy*(val: string): ConfResult[string] =
let val = val.strip()

if val == "" or val.match(StoreMessageRetentionPolicyRegex).isSome():
return ok(val)
else:
return err("invalid 'store message retention policy' option format: " & val)

0 comments on commit 7a82e9d

Please sign in to comment.