Enables perssist-message flag in the store protocol for wakunode2 (#519)

* enables perssistmessage flag

* disables in memory storage when persist-messages is false

* adds the persistMessages input to the mountStore

* defaults the store flag to true

* adds the missing argument

* persists messages in memory conditioned to the persistMessages flag

* adds persistmessages flag to the config_bridge

* defaults persistmessages to true

* defaults the store flag to true and persist-messages to false

* updates store.md

* updates chat2 instructions about --store flag

* removes --store flag from chat2 command execution

Co-authored-by: Oskar Thorén <ot@oskarthoren.com>
This commit is contained in:
Sanaz Taheri Boshrooyeh 2021-05-03 14:30:52 -07:00 committed by GitHub
parent 7b6d93d13b
commit c0d858af1d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 35 additions and 21 deletions

View File

@ -44,10 +44,10 @@ The `chat2` application can retrieve historical chat messages from a node suppor
./build/chat2 --storenode:/ip4/134.209.139.210/tcp/30303/p2p/16Uiu2HAmPLe7Mzm8TsYUubgCAW1aJoeFScxrLj8ppHFivPo97bUZ
```
Alternatively, the `chat2` application will select a random `storenode` for you from the test fleet if the `store` option is set to `true` and `storenode` left unspecified.
Alternatively, the `chat2` application will select a random `storenode` for you from the test fleet if `storenode` left unspecified.
```
./build/chat2 --store:true
./build/chat2
```
> *NOTE: Currently (Mar 3, 2021) the only node in the test fleet that provides reliable store functionality is `/ip4/134.209.139.210/tcp/30303/p2p/16Uiu2HAmPLe7Mzm8TsYUubgCAW1aJoeFScxrLj8ppHFivPo97bUZ`. We're working on fixing this.*

View File

@ -20,8 +20,11 @@ Run two nodes and connect them:
./build/wakunode2 --ports-shift:1 --staticnode:/ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAmF4tuht6fmna6uDqoSMgFqhUrdaVR6VQRyGr6sCpfS2jp --storenode:/ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAmF4tuht6fmna6uDqoSMgFqhUrdaVR6VQRyGr6sCpfS2jp
```
When passing the flag `dbpath` with a path, messages are persisted and stored in a database called `store` under the specified path.
When none is passed, messages are not persisted and are only stored in-memory.
When flag `persist-messages` is passed messages are going to be persisted in-memory.
If additionally flag `dbpath` is passed with a path, messages are persisted and stored in a database called `store` under the specified path.
If flag `persist-messages` is not passed, messages are not persisted and stored at all.
You should see your nodes connecting.

View File

@ -278,7 +278,7 @@ proc processInput(rfd: AsyncFD, rng: ref BrHmacDrbgContext) {.async.} =
node.mountSwap()
if (conf.storenode != "") or (conf.store == true):
node.mountStore()
node.mountStore(persistMessages = conf.persistmessages)
var storenode: string

View File

@ -225,7 +225,7 @@ procSuite "Waku v2 JSON-RPC API":
key = wakunode2.PrivateKey.random(ECDSA, rng[]).get()
peer = PeerInfo.init(key)
node.mountStore()
node.mountStore(persistMessages = true)
let
subscription = node.wakuStore.subscription()
@ -518,7 +518,7 @@ procSuite "Waku v2 JSON-RPC API":
node.mountFilter()
node.mountSwap()
node.mountStore()
node.mountStore(persistMessages = true)
# Create and set some peers
let

View File

@ -101,7 +101,7 @@ procSuite "Peer Manager":
node.mountFilter()
node.mountSwap()
node.mountStore()
node.mountStore(persistMessages = true)
node.wakuFilter.setPeer(filterPeer)
node.wakuSwap.setPeer(swapPeer)

View File

@ -62,10 +62,10 @@ procSuite "Waku SWAP Accounting":
# Start nodes and mount protocols
await node1.start()
node1.mountSwap()
node1.mountStore()
node1.mountStore(persistMessages = true)
await node2.start()
node2.mountSwap()
node2.mountStore()
node2.mountStore(persistMessages = true)
await node2.subscriptions.notify("/waku/2/default-waku/proto", message)
@ -108,10 +108,10 @@ procSuite "Waku SWAP Accounting":
# Start nodes and mount protocols
await node1.start()
node1.mountSwap()
node1.mountStore()
node1.mountStore(persistMessages = true)
await node2.start()
node2.mountSwap()
node2.mountStore()
node2.mountStore(persistMessages = true)
await node2.subscriptions.notify("/waku/2/default-waku/proto", message)

View File

@ -225,9 +225,9 @@ procSuite "WakuNode":
var completionFut = newFuture[bool]()
await node1.start()
node1.mountStore()
node1.mountStore(persistMessages = true)
await node2.start()
node2.mountStore()
node2.mountStore(persistMessages = true)
await node2.subscriptions.notify("/waku/2/default-waku/proto", message)

View File

@ -114,8 +114,13 @@ type
store* {.
desc: "Flag whether to start store protocol",
defaultValue: false
defaultValue: true
name: "store" }: bool
persistmessages* {.
desc: "Enable message persistence: true|false",
defaultValue: false
name: "persist-messages" }: bool
filter* {.
desc: "Flag whether to start filter protocol",

View File

@ -219,7 +219,7 @@ when isMainModule:
# Mount configured Waku v2 protocols
if conf.store:
mountStore(bridge.nodev2)
mountStore(bridge.nodev2, persistMessages = conf.persistmessages)
if conf.filter:
mountFilter(bridge.nodev2)

View File

@ -53,9 +53,14 @@ type
defaultValue: ""
name: "storenode" }: string
persistmessages* {.
desc: "Enable message persistence: true|false",
defaultValue: false
name: "persist-messages" }: bool
store* {.
desc: "Enable store protocol: true|false",
defaultValue: false
defaultValue: true
name: "store" }: bool
filter* {.

View File

@ -394,7 +394,7 @@ proc mountSwap*(node: WakuNode) =
# NYI - Do we need this?
#node.subscriptions.subscribe(WakuSwapCodec, node.wakuSwap.subscription())
proc mountStore*(node: WakuNode, store: MessageStore = nil) =
proc mountStore*(node: WakuNode, store: MessageStore = nil, persistMessages: bool) =
info "mounting store"
if node.wakuSwap.isNil:
@ -405,7 +405,8 @@ proc mountStore*(node: WakuNode, store: MessageStore = nil) =
node.wakuStore = WakuStore.init(node.peerManager, node.rng, store, node.wakuSwap)
node.switch.mount(node.wakuStore)
node.subscriptions.subscribe(WakuStoreCodec, node.wakuStore.subscription())
if persistMessages:
node.subscriptions.subscribe(WakuStoreCodec, node.wakuStore.subscription())
proc mountRlnRelay*(node: WakuNode, ethClientAddress: Option[string] = none(string), ethAccountAddress: Option[Address] = none(Address), membershipContractAddress: Option[Address] = none(Address)) {.async.} =
# TODO return a bool value to indicate the success of the call
@ -678,7 +679,7 @@ when isMainModule:
if (conf.storenode != "") or (conf.store):
var store: WakuMessageStore
if not sqliteDatabase.isNil:
if (not sqliteDatabase.isNil) and conf.persistmessages:
let res = WakuMessageStore.init(sqliteDatabase)
if res.isErr:
warn "failed to init WakuMessageStore", err = res.error
@ -686,7 +687,7 @@ when isMainModule:
else:
store = res.value
mountStore(node, store)
mountStore(node, store, conf.persistmessages)
if conf.storenode != "":
setStorePeer(node, conf.storenode)