diff --git a/docs/tutorial/chat2.md b/docs/tutorial/chat2.md index 5d43d5ab6..a1a1f1f62 100644 --- a/docs/tutorial/chat2.md +++ b/docs/tutorial/chat2.md @@ -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.* diff --git a/docs/tutorial/store.md b/docs/tutorial/store.md index cf3762814..5013d8a54 100644 --- a/docs/tutorial/store.md +++ b/docs/tutorial/store.md @@ -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. diff --git a/examples/v2/chat2.nim b/examples/v2/chat2.nim index 615154839..7b127a5e3 100644 --- a/examples/v2/chat2.nim +++ b/examples/v2/chat2.nim @@ -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 diff --git a/tests/v2/test_jsonrpc_waku.nim b/tests/v2/test_jsonrpc_waku.nim index 288ab8968..cd8ea3a00 100644 --- a/tests/v2/test_jsonrpc_waku.nim +++ b/tests/v2/test_jsonrpc_waku.nim @@ -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 diff --git a/tests/v2/test_peer_manager.nim b/tests/v2/test_peer_manager.nim index 6007d5f9c..d315dff09 100644 --- a/tests/v2/test_peer_manager.nim +++ b/tests/v2/test_peer_manager.nim @@ -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) diff --git a/tests/v2/test_waku_swap.nim b/tests/v2/test_waku_swap.nim index 0c005ecb4..62405e73f 100644 --- a/tests/v2/test_waku_swap.nim +++ b/tests/v2/test_waku_swap.nim @@ -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) diff --git a/tests/v2/test_wakunode.nim b/tests/v2/test_wakunode.nim index e1d9b746a..02d5fbc7c 100644 --- a/tests/v2/test_wakunode.nim +++ b/tests/v2/test_wakunode.nim @@ -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) diff --git a/waku/common/config_bridge.nim b/waku/common/config_bridge.nim index f4fab7a59..b05119875 100644 --- a/waku/common/config_bridge.nim +++ b/waku/common/config_bridge.nim @@ -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", diff --git a/waku/common/wakubridge.nim b/waku/common/wakubridge.nim index d3e59362b..d27c5b07b 100644 --- a/waku/common/wakubridge.nim +++ b/waku/common/wakubridge.nim @@ -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) diff --git a/waku/v2/node/config.nim b/waku/v2/node/config.nim index 548ac77df..d986cb765 100644 --- a/waku/v2/node/config.nim +++ b/waku/v2/node/config.nim @@ -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* {. diff --git a/waku/v2/node/wakunode2.nim b/waku/v2/node/wakunode2.nim index 9bab38f35..2591f8a4b 100644 --- a/waku/v2/node/wakunode2.nim +++ b/waku/v2/node/wakunode2.nim @@ -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)