Skip to content

Commit 63c334f

Browse files
committed
remove mut from ScorerAccountingForInFlightHtlcs scorer input
1 parent d11e00f commit 63c334f

8 files changed

+36
-38
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10391,7 +10391,7 @@ pub mod bench {
1039110391
use bitcoin::hashes::sha256::Hash as Sha256;
1039210392
use bitcoin::{Block, BlockHeader, PackedLockTime, Transaction, TxMerkleNode, TxOut};
1039310393

10394-
use crate::sync::{Arc, Mutex};
10394+
use crate::sync::{Arc, Mutex, RwLock};
1039510395

1039610396
use criterion::Criterion;
1039710397

@@ -10428,7 +10428,7 @@ pub mod bench {
1042810428
let tx_broadcaster = test_utils::TestBroadcaster::new(network);
1042910429
let fee_estimator = test_utils::TestFeeEstimator { sat_per_kw: Mutex::new(253) };
1043010430
let logger_a = test_utils::TestLogger::with_id("node a".to_owned());
10431-
let scorer = Mutex::new(test_utils::TestScorer::new());
10431+
let scorer = RwLock::new(test_utils::TestScorer::new());
1043210432
let router = test_utils::TestRouter::new(Arc::new(NetworkGraph::new(network, &logger_a)), &scorer);
1043310433

1043410434
let mut config: UserConfig = Default::default();

lightning/src/ln/functional_test_utils.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ use crate::io;
4343
use crate::prelude::*;
4444
use core::cell::RefCell;
4545
use alloc::rc::Rc;
46-
use crate::sync::{Arc, Mutex, LockTestExt};
46+
use crate::sync::{Arc, Mutex, LockTestExt, RwLock};
4747
use core::mem;
4848
use core::iter::repeat;
4949
use bitcoin::{PackedLockTime, TxMerkleNode};
@@ -352,7 +352,7 @@ pub struct TestChanMonCfg {
352352
pub persister: test_utils::TestPersister,
353353
pub logger: test_utils::TestLogger,
354354
pub keys_manager: test_utils::TestKeysInterface,
355-
pub scorer: Mutex<test_utils::TestScorer>,
355+
pub scorer: RwLock<test_utils::TestScorer>,
356356
}
357357

358358
pub struct NodeCfg<'a> {
@@ -530,7 +530,7 @@ impl<'a, 'b, 'c> Drop for Node<'a, 'b, 'c> {
530530
channel_monitors.insert(monitor.get_funding_txo().0, monitor);
531531
}
532532

533-
let scorer = Mutex::new(test_utils::TestScorer::new());
533+
let scorer = RwLock::new(test_utils::TestScorer::new());
534534
let mut w = test_utils::TestVecWriter(Vec::new());
535535
self.node.write(&mut w).unwrap();
536536
<(BlockHash, ChannelManager<&test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestKeysInterface, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestRouter, &test_utils::TestLogger>)>::read(&mut io::Cursor::new(w.0), ChannelManagerReadArgs {
@@ -2574,7 +2574,7 @@ pub fn create_chanmon_cfgs(node_count: usize) -> Vec<TestChanMonCfg> {
25742574
let persister = test_utils::TestPersister::new();
25752575
let seed = [i as u8; 32];
25762576
let keys_manager = test_utils::TestKeysInterface::new(&seed, Network::Testnet);
2577-
let scorer = Mutex::new(test_utils::TestScorer::new());
2577+
let scorer = RwLock::new(test_utils::TestScorer::new());
25782578

25792579
chan_mon_cfgs.push(TestChanMonCfg { tx_broadcaster, fee_estimator, chain_source, logger, persister, keys_manager, scorer });
25802580
}

lightning/src/ln/functional_tests.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ use alloc::collections::BTreeSet;
5656
use core::default::Default;
5757
use core::iter::repeat;
5858
use bitcoin::hashes::Hash;
59-
use crate::sync::{Arc, Mutex};
59+
use crate::sync::{Arc, Mutex, RwLock};
6060

6161
use crate::ln::functional_test_utils::*;
6262
use crate::ln::chan_utils::CommitmentTransaction;
@@ -5367,7 +5367,7 @@ fn test_key_derivation_params() {
53675367
let keys_manager = test_utils::TestKeysInterface::new(&seed, Network::Testnet);
53685368
let chain_monitor = test_utils::TestChainMonitor::new(Some(&chanmon_cfgs[0].chain_source), &chanmon_cfgs[0].tx_broadcaster, &chanmon_cfgs[0].logger, &chanmon_cfgs[0].fee_estimator, &chanmon_cfgs[0].persister, &keys_manager);
53695369
let network_graph = Arc::new(NetworkGraph::new(Network::Testnet, &chanmon_cfgs[0].logger));
5370-
let scorer = Mutex::new(test_utils::TestScorer::new());
5370+
let scorer = RwLock::new(test_utils::TestScorer::new());
53715371
let router = test_utils::TestRouter::new(network_graph.clone(), &scorer);
53725372
let node = NodeCfg { chain_source: &chanmon_cfgs[0].chain_source, logger: &chanmon_cfgs[0].logger, tx_broadcaster: &chanmon_cfgs[0].tx_broadcaster, fee_estimator: &chanmon_cfgs[0].fee_estimator, router, chain_monitor, keys_manager: &keys_manager, network_graph, node_seed: seed, override_init_features: alloc::rc::Rc::new(core::cell::RefCell::new(None)) };
53735373
let mut node_cfgs = create_node_cfgs(3, &chanmon_cfgs);

lightning/src/ln/outbound_payment.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1501,7 +1501,7 @@ mod tests {
15011501
use crate::ln::outbound_payment::{OutboundPayments, Retry, RetryableSendFailure};
15021502
use crate::routing::gossip::NetworkGraph;
15031503
use crate::routing::router::{InFlightHtlcs, Path, PaymentParameters, Route, RouteHop, RouteParameters};
1504-
use crate::sync::{Arc, Mutex};
1504+
use crate::sync::{Arc, Mutex, RwLock};
15051505
use crate::util::errors::APIError;
15061506
use crate::util::test_utils;
15071507

@@ -1537,10 +1537,11 @@ mod tests {
15371537
}
15381538
#[cfg(feature = "std")]
15391539
fn do_fails_paying_after_expiration(on_retry: bool) {
1540+
15401541
let outbound_payments = OutboundPayments::new();
15411542
let logger = test_utils::TestLogger::new();
15421543
let network_graph = Arc::new(NetworkGraph::new(Network::Testnet, &logger));
1543-
let scorer = Mutex::new(test_utils::TestScorer::new());
1544+
let scorer = RwLock::new(test_utils::TestScorer::new());
15441545
let router = test_utils::TestRouter::new(network_graph, &scorer);
15451546
let secp_ctx = Secp256k1::new();
15461547
let keys_manager = test_utils::TestKeysInterface::new(&[0; 32], Network::Testnet);
@@ -1587,7 +1588,7 @@ mod tests {
15871588
let outbound_payments = OutboundPayments::new();
15881589
let logger = test_utils::TestLogger::new();
15891590
let network_graph = Arc::new(NetworkGraph::new(Network::Testnet, &logger));
1590-
let scorer = Mutex::new(test_utils::TestScorer::new());
1591+
let scorer = RwLock::new(test_utils::TestScorer::new());
15911592
let router = test_utils::TestRouter::new(network_graph, &scorer);
15921593
let secp_ctx = Secp256k1::new();
15931594
let keys_manager = test_utils::TestKeysInterface::new(&[0; 32], Network::Testnet);
@@ -1629,7 +1630,7 @@ mod tests {
16291630
let outbound_payments = OutboundPayments::new();
16301631
let logger = test_utils::TestLogger::new();
16311632
let network_graph = Arc::new(NetworkGraph::new(Network::Testnet, &logger));
1632-
let scorer = Mutex::new(test_utils::TestScorer::new());
1633+
let scorer = RwLock::new(test_utils::TestScorer::new());
16331634
let router = test_utils::TestRouter::new(network_graph, &scorer);
16341635
let secp_ctx = Secp256k1::new();
16351636
let keys_manager = test_utils::TestKeysInterface::new(&[0; 32], Network::Testnet);

lightning/src/ln/payment_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2538,7 +2538,7 @@ fn retry_multi_path_single_failed_payment() {
25382538
}, Ok(route.clone()));
25392539

25402540
{
2541-
let scorer = chanmon_cfgs[0].scorer.lock().unwrap();
2541+
let scorer = chanmon_cfgs[0].scorer.read().unwrap();
25422542
// The initial send attempt, 2 paths
25432543
scorer.expect_usage(chans[0].short_channel_id.unwrap(), ChannelUsage { amount_msat: 10_000, inflight_htlc_msat: 0, effective_capacity: EffectiveCapacity::Unknown });
25442544
scorer.expect_usage(chans[1].short_channel_id.unwrap(), ChannelUsage { amount_msat: 100_000_001, inflight_htlc_msat: 0, effective_capacity: EffectiveCapacity::Unknown });

lightning/src/routing/router.rs

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use crate::prelude::*;
3030
use crate::sync::Mutex;
3131
use alloc::collections::BinaryHeap;
3232
use core::{cmp, fmt};
33-
use core::ops::{Deref, DerefMut};
33+
use core::ops::Deref;
3434

3535
/// A [`Router`] implemented using [`find_route`].
3636
pub struct DefaultRouter<G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref, SP: Sized, Sc: Score<ScoreParams = SP>> where
@@ -73,7 +73,7 @@ impl< G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref, SP: Sized, Sc: Sco
7373
};
7474
find_route(
7575
payer, params, &self.network_graph, first_hops, &*self.logger,
76-
&ScorerAccountingForInFlightHtlcs::new(self.scorer.write_lock().deref_mut(), &inflight_htlcs),
76+
&ScorerAccountingForInFlightHtlcs::new(self.scorer.deref(), &inflight_htlcs),
7777
&self.score_params,
7878
&random_seed_bytes
7979
)
@@ -112,15 +112,14 @@ pub trait Router {
112112
/// [`find_route`].
113113
///
114114
/// [`Score`]: crate::routing::scoring::Score
115-
pub struct ScorerAccountingForInFlightHtlcs<'a, S: Score<ScoreParams = SP>, SP: Sized> {
116-
scorer: &'a mut S,
115+
pub struct ScorerAccountingForInFlightHtlcs<'a, SP: Sized, Sc: 'a + Score<ScoreParams = SP>, S: LockableScore<'a, Score = Sc> + ?Sized> {
116+
scorer: &'a S,
117117
// Maps a channel's short channel id and its direction to the liquidity used up.
118118
inflight_htlcs: &'a InFlightHtlcs,
119119
}
120-
121-
impl<'a, S: Score<ScoreParams = SP>, SP: Sized> ScorerAccountingForInFlightHtlcs<'a, S, SP> {
120+
impl<'a, SP: Sized, Sc: Score<ScoreParams = SP>, S: LockableScore<'a, Score = Sc> + ?Sized> ScorerAccountingForInFlightHtlcs<'a, SP, Sc, S> {
122121
/// Initialize a new `ScorerAccountingForInFlightHtlcs`.
123-
pub fn new(scorer: &'a mut S, inflight_htlcs: &'a InFlightHtlcs) -> Self {
122+
pub fn new(scorer: &'a S, inflight_htlcs: &'a InFlightHtlcs) -> Self {
124123
ScorerAccountingForInFlightHtlcs {
125124
scorer,
126125
inflight_htlcs
@@ -129,12 +128,12 @@ impl<'a, S: Score<ScoreParams = SP>, SP: Sized> ScorerAccountingForInFlightHtlcs
129128
}
130129

131130
#[cfg(c_bindings)]
132-
impl<'a, S: Score<ScoreParams = SP>, SP: Sized> Writeable for ScorerAccountingForInFlightHtlcs<'a, S, SP> {
133-
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> { self.scorer.write(writer) }
131+
impl<'a, SP: Sized, Sc: Score<ScoreParams = SP>, S: LockableScore<'a, Score = Sc> + ?Sized> Writeable for ScorerAccountingForInFlightHtlcs<'a, SP, Sc, S> {
132+
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> { self.scorer.write_lock().write(writer) }
134133
}
135134

136-
impl<'a, S: Score<ScoreParams = SP>, SP: Sized> Score for ScorerAccountingForInFlightHtlcs<'a, S, SP> {
137-
type ScoreParams = S::ScoreParams;
135+
impl<'a, SP: Sized, Sc: 'a + Score<ScoreParams = SP>, S: LockableScore<'a, Score = Sc> + ?Sized> Score for ScorerAccountingForInFlightHtlcs<'a, SP, Sc, S> {
136+
type ScoreParams = Sc::ScoreParams;
138137
fn channel_penalty_msat(&self, short_channel_id: u64, source: &NodeId, target: &NodeId, usage: ChannelUsage, score_params: &Self::ScoreParams) -> u64 {
139138
if let Some(used_liquidity) = self.inflight_htlcs.used_liquidity_msat(
140139
source, target, short_channel_id
@@ -144,26 +143,26 @@ impl<'a, S: Score<ScoreParams = SP>, SP: Sized> Score for ScorerAccountingForInF
144143
..usage
145144
};
146145

147-
self.scorer.channel_penalty_msat(short_channel_id, source, target, usage, score_params)
146+
self.scorer.read_lock().channel_penalty_msat(short_channel_id, source, target, usage, score_params)
148147
} else {
149-
self.scorer.channel_penalty_msat(short_channel_id, source, target, usage, score_params)
148+
self.scorer.read_lock().channel_penalty_msat(short_channel_id, source, target, usage, score_params)
150149
}
151150
}
152151

153152
fn payment_path_failed(&mut self, path: &Path, short_channel_id: u64) {
154-
self.scorer.payment_path_failed(path, short_channel_id)
153+
self.scorer.write_lock().payment_path_failed(path, short_channel_id)
155154
}
156155

157156
fn payment_path_successful(&mut self, path: &Path) {
158-
self.scorer.payment_path_successful(path)
157+
self.scorer.write_lock().payment_path_successful(path)
159158
}
160159

161160
fn probe_failed(&mut self, path: &Path, short_channel_id: u64) {
162-
self.scorer.probe_failed(path, short_channel_id)
161+
self.scorer.write_lock().probe_failed(path, short_channel_id)
163162
}
164163

165164
fn probe_successful(&mut self, path: &Path) {
166-
self.scorer.probe_successful(path)
165+
self.scorer.write_lock().probe_successful(path)
167166
}
168167
}
169168

lightning/src/routing/scoring.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -235,8 +235,6 @@ pub struct MultiThreadedLockableScore<T: Score> {
235235
#[cfg(c_bindings)]
236236
impl<'a, T: 'a + Score> LockableScore<'a> for MultiThreadedLockableScore<T> {
237237
type Score = T;
238-
// type ReadLocked = MultiThreadedScoreLock<'a, T>;
239-
// type WriteLocked = Rw<'a, T>;
240238
type WriteLocked = RwLockWriteGuard<'a, T>;
241239
type ReadLocked = RwLockReadGuard<'a, T>;
242240

lightning/src/util/test_utils.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ use crate::routing::gossip::{EffectiveCapacity, NetworkGraph, NodeId};
2828
use crate::routing::utxo::{UtxoLookup, UtxoLookupError, UtxoResult};
2929
use crate::routing::router::{find_route, InFlightHtlcs, Path, Route, RouteParameters, Router, ScorerAccountingForInFlightHtlcs};
3030
use crate::routing::scoring::{ChannelUsage, Score};
31+
use crate::sync::RwLock;
3132
use crate::util::config::UserConfig;
3233
use crate::util::enforcing_trait_impls::{EnforcingSigner, EnforcementState};
3334
use crate::util::logger::{Logger, Level, Record};
@@ -54,7 +55,7 @@ use regex;
5455
use crate::io;
5556
use crate::prelude::*;
5657
use core::cell::RefCell;
57-
use core::ops::DerefMut;
58+
use core::ops::Deref;
5859
use core::time::Duration;
5960
use crate::sync::{Mutex, Arc};
6061
use core::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
@@ -95,11 +96,11 @@ impl chaininterface::FeeEstimator for TestFeeEstimator {
9596
pub struct TestRouter<'a> {
9697
pub network_graph: Arc<NetworkGraph<&'a TestLogger>>,
9798
pub next_routes: Mutex<VecDeque<(RouteParameters, Result<Route, LightningError>)>>,
98-
pub scorer: &'a Mutex<TestScorer>,
99+
pub scorer: &'a RwLock<TestScorer>,
99100
}
100101

101102
impl<'a> TestRouter<'a> {
102-
pub fn new(network_graph: Arc<NetworkGraph<&'a TestLogger>>, scorer: &'a Mutex<TestScorer>) -> Self {
103+
pub fn new(network_graph: Arc<NetworkGraph<&'a TestLogger>>, scorer: &'a RwLock<TestScorer>) -> Self {
103104
Self { network_graph, next_routes: Mutex::new(VecDeque::new()), scorer }
104105
}
105106

@@ -117,8 +118,7 @@ impl<'a> Router for TestRouter<'a> {
117118
if let Some((find_route_query, find_route_res)) = self.next_routes.lock().unwrap().pop_front() {
118119
assert_eq!(find_route_query, *params);
119120
if let Ok(ref route) = find_route_res {
120-
let mut binding = self.scorer.lock().unwrap();
121-
let scorer = ScorerAccountingForInFlightHtlcs::new(binding.deref_mut(), &inflight_htlcs);
121+
let scorer = ScorerAccountingForInFlightHtlcs::new(self.scorer.deref(), &inflight_htlcs);
122122
for path in &route.paths {
123123
let mut aggregate_msat = 0u64;
124124
for (idx, hop) in path.hops.iter().rev().enumerate() {
@@ -145,7 +145,7 @@ impl<'a> Router for TestRouter<'a> {
145145
let logger = TestLogger::new();
146146
find_route(
147147
payer, params, &self.network_graph, first_hops, &logger,
148-
&ScorerAccountingForInFlightHtlcs::new(self.scorer.lock().unwrap().deref_mut(), &inflight_htlcs), &(),
148+
&ScorerAccountingForInFlightHtlcs::new(self.scorer.deref(), &inflight_htlcs), &(),
149149
&[42; 32]
150150
)
151151
}

0 commit comments

Comments
 (0)