Skip to content

Commit 1f8d1a0

Browse files
committed
f Account for sub-namespaces
1 parent f7be644 commit 1f8d1a0

2 files changed

Lines changed: 47 additions & 21 deletions

File tree

lightning-background-processor/src/lib.rs

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -506,10 +506,10 @@ use core::task;
506506
/// # use lightning_background_processor::{process_events_async, GossipSync};
507507
/// # struct MyStore {}
508508
/// # impl lightning::util::persist::KVStore for MyStore {
509-
/// # fn read(&self, namespace: &str, key: &str) -> io::Result<Vec<u8>> { Ok(Vec::new()) }
510-
/// # fn write(&self, namespace: &str, key: &str, buf: &[u8]) -> io::Result<()> { Ok(()) }
511-
/// # fn remove(&self, namespace: &str, key: &str) -> io::Result<()> { Ok(()) }
512-
/// # fn list(&self, namespace: &str) -> io::Result<Vec<String>> { Ok(Vec::new()) }
509+
/// # fn read(&self, namespace: &str, sub_namespace: &str, key: &str) -> io::Result<Vec<u8>> { Ok(Vec::new()) }
510+
/// # fn write(&self, namespace: &str, sub_namespace: &str, key: &str, buf: &[u8]) -> io::Result<()> { Ok(()) }
511+
/// # fn remove(&self, namespace: &str, sub_namespace: &str, key: &str) -> io::Result<()> { Ok(()) }
512+
/// # fn list(&self, namespace: &str, sub_namespace: &str) -> io::Result<Vec<String>> { Ok(Vec::new()) }
513513
/// # }
514514
/// # struct MyEventHandler {}
515515
/// # impl MyEventHandler {
@@ -870,7 +870,7 @@ mod tests {
870870
use lightning::util::config::UserConfig;
871871
use lightning::util::ser::Writeable;
872872
use lightning::util::test_utils;
873-
use lightning::util::persist::{KVStore, CHANNEL_MANAGER_PERSISTENCE_NAMESPACE, CHANNEL_MANAGER_PERSISTENCE_KEY, NETWORK_GRAPH_PERSISTENCE_NAMESPACE, NETWORK_GRAPH_PERSISTENCE_KEY, SCORER_PERSISTENCE_NAMESPACE, SCORER_PERSISTENCE_KEY};
873+
use lightning::util::persist::{KVStore, CHANNEL_MANAGER_PERSISTENCE_NAMESPACE, CHANNEL_MANAGER_PERSISTENCE_SUB_NAMESPACE, CHANNEL_MANAGER_PERSISTENCE_KEY, NETWORK_GRAPH_PERSISTENCE_NAMESPACE, NETWORK_GRAPH_PERSISTENCE_SUB_NAMESPACE, NETWORK_GRAPH_PERSISTENCE_KEY, SCORER_PERSISTENCE_NAMESPACE, SCORER_PERSISTENCE_SUB_NAMESPACE, SCORER_PERSISTENCE_KEY};
874874
use lightning_persister::fs_store::FilesystemStore;
875875
use std::collections::VecDeque;
876876
use std::{fs, env};
@@ -985,18 +985,24 @@ mod tests {
985985
}
986986

987987
impl KVStore for Persister {
988-
fn read(&self, namespace: &str, key: &str) -> lightning::io::Result<Vec<u8>> {
989-
self.kv_store.read(namespace, key)
988+
fn read(&self, namespace: &str, sub_namespace: &str, key: &str) -> lightning::io::Result<Vec<u8>> {
989+
self.kv_store.read(namespace, sub_namespace, key)
990990
}
991991

992-
fn write(&self, namespace: &str, key: &str, buf: &[u8]) -> lightning::io::Result<()> {
993-
if namespace == CHANNEL_MANAGER_PERSISTENCE_NAMESPACE && key == CHANNEL_MANAGER_PERSISTENCE_KEY {
992+
fn write(&self, namespace: &str, sub_namespace: &str, key: &str, buf: &[u8]) -> lightning::io::Result<()> {
993+
if namespace == CHANNEL_MANAGER_PERSISTENCE_NAMESPACE &&
994+
sub_namespace == CHANNEL_MANAGER_PERSISTENCE_SUB_NAMESPACE &&
995+
key == CHANNEL_MANAGER_PERSISTENCE_KEY
996+
{
994997
if let Some((error, message)) = self.manager_error {
995998
return Err(std::io::Error::new(error, message))
996999
}
9971000
}
9981001

999-
if namespace == NETWORK_GRAPH_PERSISTENCE_NAMESPACE && key == NETWORK_GRAPH_PERSISTENCE_KEY {
1002+
if namespace == NETWORK_GRAPH_PERSISTENCE_NAMESPACE &&
1003+
sub_namespace == NETWORK_GRAPH_PERSISTENCE_SUB_NAMESPACE &&
1004+
key == NETWORK_GRAPH_PERSISTENCE_KEY
1005+
{
10001006
if let Some(sender) = &self.graph_persistence_notifier {
10011007
match sender.send(()) {
10021008
Ok(()) => {},
@@ -1009,21 +1015,24 @@ mod tests {
10091015
}
10101016
}
10111017

1012-
if namespace == SCORER_PERSISTENCE_NAMESPACE && key == SCORER_PERSISTENCE_KEY {
1018+
if namespace == SCORER_PERSISTENCE_NAMESPACE &&
1019+
sub_namespace == SCORER_PERSISTENCE_SUB_NAMESPACE &&
1020+
key == SCORER_PERSISTENCE_KEY
1021+
{
10131022
if let Some((error, message)) = self.scorer_error {
10141023
return Err(std::io::Error::new(error, message))
10151024
}
10161025
}
10171026

1018-
self.kv_store.write(namespace, key, buf)
1027+
self.kv_store.write(namespace, sub_namespace, key, buf)
10191028
}
10201029

1021-
fn remove(&self, namespace: &str, key: &str) -> lightning::io::Result<()> {
1022-
self.kv_store.remove(namespace, key)
1030+
fn remove(&self, namespace: &str, sub_namespace: &str, key: &str) -> lightning::io::Result<()> {
1031+
self.kv_store.remove(namespace, sub_namespace, key)
10231032
}
10241033

1025-
fn list(&self, namespace: &str) -> lightning::io::Result<Vec<String>> {
1026-
self.kv_store.list(namespace)
1034+
fn list(&self, namespace: &str, sub_namespace: &str) -> lightning::io::Result<Vec<String>> {
1035+
self.kv_store.list(namespace, sub_namespace)
10271036
}
10281037
}
10291038

lightning/src/util/persist.rs

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -143,17 +143,26 @@ impl<'a, A: KVStore, M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Der
143143
{
144144
/// Persist the given ['ChannelManager'] to disk, returning an error if persistence failed.
145145
fn persist_manager(&self, channel_manager: &ChannelManager<M, T, ES, NS, SP, F, R, L>) -> Result<(), io::Error> {
146-
self.write(CHANNEL_MANAGER_PERSISTENCE_NAMESPACE, CHANNEL_MANAGER_PERSISTENCE_KEY, &channel_manager.encode())
146+
self.write(CHANNEL_MANAGER_PERSISTENCE_NAMESPACE,
147+
CHANNEL_MANAGER_PERSISTENCE_SUB_NAMESPACE,
148+
CHANNEL_MANAGER_PERSISTENCE_KEY,
149+
&channel_manager.encode())
147150
}
148151

149152
/// Persist the given [`NetworkGraph`] to disk, returning an error if persistence failed.
150153
fn persist_graph(&self, network_graph: &NetworkGraph<L>) -> Result<(), io::Error> {
151-
self.write(NETWORK_GRAPH_PERSISTENCE_NAMESPACE, NETWORK_GRAPH_PERSISTENCE_KEY, &network_graph.encode())
154+
self.write(NETWORK_GRAPH_PERSISTENCE_NAMESPACE,
155+
NETWORK_GRAPH_PERSISTENCE_SUB_NAMESPACE,
156+
NETWORK_GRAPH_PERSISTENCE_KEY,
157+
&network_graph.encode())
152158
}
153159

154160
/// Persist the given [`WriteableScore`] to disk, returning an error if persistence failed.
155161
fn persist_scorer(&self, scorer: &S) -> Result<(), io::Error> {
156-
self.write(SCORER_PERSISTENCE_NAMESPACE, SCORER_PERSISTENCE_KEY, &scorer.encode())
162+
self.write(SCORER_PERSISTENCE_NAMESPACE,
163+
SCORER_PERSISTENCE_SUB_NAMESPACE,
164+
SCORER_PERSISTENCE_KEY,
165+
&scorer.encode())
157166
}
158167
}
159168

@@ -165,15 +174,23 @@ impl<ChannelSigner: WriteableEcdsaChannelSigner, K: KVStore> Persist<ChannelSign
165174

166175
fn persist_new_channel(&self, funding_txo: OutPoint, monitor: &ChannelMonitor<ChannelSigner>, _update_id: MonitorUpdateId) -> chain::ChannelMonitorUpdateStatus {
167176
let key = format!("{}_{}", funding_txo.txid.to_hex(), funding_txo.index);
168-
match self.write(CHANNEL_MONITOR_PERSISTENCE_NAMESPACE, &key, &monitor.encode()) {
177+
match self.write(
178+
CHANNEL_MONITOR_PERSISTENCE_NAMESPACE,
179+
CHANNEL_MONITOR_PERSISTENCE_SUB_NAMESPACE,
180+
&key, &monitor.encode())
181+
{
169182
Ok(()) => chain::ChannelMonitorUpdateStatus::Completed,
170183
Err(_) => chain::ChannelMonitorUpdateStatus::PermanentFailure,
171184
}
172185
}
173186

174187
fn update_persisted_channel(&self, funding_txo: OutPoint, _update: Option<&ChannelMonitorUpdate>, monitor: &ChannelMonitor<ChannelSigner>, _update_id: MonitorUpdateId) -> chain::ChannelMonitorUpdateStatus {
175188
let key = format!("{}_{}", funding_txo.txid.to_hex(), funding_txo.index);
176-
match self.write(CHANNEL_MONITOR_PERSISTENCE_NAMESPACE, &key, &monitor.encode()) {
189+
match self.write(
190+
CHANNEL_MONITOR_PERSISTENCE_NAMESPACE,
191+
CHANNEL_MONITOR_PERSISTENCE_SUB_NAMESPACE,
192+
&key, &monitor.encode())
193+
{
177194
Ok(()) => chain::ChannelMonitorUpdateStatus::Completed,
178195
Err(_) => chain::ChannelMonitorUpdateStatus::PermanentFailure,
179196
}

0 commit comments

Comments
 (0)