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 26, 2022
1 parent efd1496 commit 80cbb51
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 26 deletions.
108 changes: 82 additions & 26 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,26 @@ type
defaultValue: 50
name: "max-connections" }: uint16

## Persistence config

dbPath* {.
desc: "The database path for peristent storage",
defaultValue: ""
name: "db-path" }: string

dbVacuum* {.
desc: "Enable database vacuuming at start: true|false",
defaultValue: false
name: "db-vacuum" }: bool
peerPersistence* {.
desc: "Enable peer persistence.",
defaultValue: false,
name: "peer-persistence" }: bool

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

# TODO: Deprecated. Remove in next release
dbPath* {.
desc: "DEPRECATED: Use '--store-message-db-url' instead",
defaultValue: "",
name: "db-path" }: string

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

Expand Down Expand Up @@ -189,34 +194,62 @@ type
defaultValue: "/waku/2/default-waku/proto"
name: "topics" .}: string

## Store config
## Store and message 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-message-retention-policy" }: string

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

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

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

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: "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: "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: "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: "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

filter* {.
Expand Down Expand Up @@ -473,3 +506,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)
4 changes: 4 additions & 0 deletions shell.nix
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,8 @@ pkgs.mkShell {
libiconv
darwin.apple_sdk.frameworks.Security
];

LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath [
pkgs.pcre
];
}

0 comments on commit 80cbb51

Please sign in to comment.