Skip to content

Commit 1f13c80

Browse files
committed
LSPS2: DRY up pending request insertion/removal
.. which is a prefactor to also start checking the total number of pending requests in the next commit.
1 parent 3f2e232 commit 1f13c80

File tree

1 file changed

+78
-68
lines changed

1 file changed

+78
-68
lines changed

lightning-liquidity/src/lsps2/service.rs

Lines changed: 78 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@
1111
1212
use crate::events::{Event, EventQueue};
1313
use crate::lsps0::ser::{
14-
ProtocolMessageHandler, RequestId, ResponseError, LSPS0_CLIENT_REJECTED_ERROR_CODE,
14+
LSPSMessage, ProtocolMessageHandler, RequestId, ResponseError, LSPS0_CLIENT_REJECTED_ERROR_CODE,
1515
};
1616
use crate::lsps2::event::LSPS2ServiceEvent;
1717
use crate::lsps2::payment_queue::{InterceptedHTLC, PaymentQueue};
1818
use crate::lsps2::utils::{compute_opening_fee, is_valid_opening_fee_params};
1919
use crate::message_queue::MessageQueue;
2020
use crate::prelude::{new_hash_map, HashMap, String, ToString, Vec};
21-
use crate::sync::{Arc, Mutex, RwLock};
21+
use crate::sync::{Arc, Mutex, MutexGuard, RwLock};
2222

2323
use lightning::events::HTLCDestination;
2424
use lightning::ln::channelmanager::{AChannelManager, InterceptId};
@@ -506,9 +506,9 @@ where
506506

507507
match outer_state_lock.get(counterparty_node_id) {
508508
Some(inner_state_lock) => {
509-
let mut peer_state = inner_state_lock.lock().unwrap();
509+
let mut peer_state_lock = inner_state_lock.lock().unwrap();
510510

511-
match peer_state.pending_requests.remove(&request_id) {
511+
match self.remove_pending_request(&mut peer_state_lock, &request_id) {
512512
Some(LSPS2Request::GetInfo(_)) => {
513513
let response = LSPS2Response::GetInfoError(ResponseError {
514514
code: LSPS2_GET_INFO_REQUEST_UNRECOGNIZED_OR_STALE_TOKEN_ERROR_CODE,
@@ -562,9 +562,9 @@ where
562562

563563
match outer_state_lock.get(counterparty_node_id) {
564564
Some(inner_state_lock) => {
565-
let mut peer_state = inner_state_lock.lock().unwrap();
565+
let mut peer_state_lock = inner_state_lock.lock().unwrap();
566566

567-
match peer_state.pending_requests.remove(&request_id) {
567+
match self.remove_pending_request(&mut peer_state_lock, &request_id) {
568568
Some(LSPS2Request::GetInfo(_)) => {
569569
let response = LSPS2Response::GetInfo(GetInfoResponse {
570570
opening_fee_params_menu: opening_fee_params_menu
@@ -621,9 +621,9 @@ where
621621

622622
match outer_state_lock.get(counterparty_node_id) {
623623
Some(inner_state_lock) => {
624-
let mut peer_state = inner_state_lock.lock().unwrap();
624+
let mut peer_state_lock = inner_state_lock.lock().unwrap();
625625

626-
match peer_state.pending_requests.remove(&request_id) {
626+
match self.remove_pending_request(&mut peer_state_lock, &request_id) {
627627
Some(LSPS2Request::Buy(buy_request)) => {
628628
{
629629
let mut peer_by_intercept_scid =
@@ -638,10 +638,10 @@ where
638638
user_channel_id,
639639
);
640640

641-
peer_state
641+
peer_state_lock
642642
.intercept_scid_by_user_channel_id
643643
.insert(user_channel_id, intercept_scid);
644-
peer_state
644+
peer_state_lock
645645
.insert_outbound_channel(intercept_scid, outbound_jit_channel);
646646

647647
let response = LSPS2Response::Buy(BuyResponse {
@@ -992,35 +992,24 @@ where
992992
.entry(*counterparty_node_id)
993993
.or_insert(Mutex::new(PeerState::new()));
994994
let mut peer_state_lock = inner_state_lock.lock().unwrap();
995-
if peer_state_lock.pending_requests.len() < MAX_PENDING_REQUESTS_PER_PEER {
996-
peer_state_lock
997-
.pending_requests
998-
.insert(request_id.clone(), LSPS2Request::GetInfo(params.clone()));
999-
1000-
let event = Event::LSPS2Service(LSPS2ServiceEvent::GetInfo {
1001-
request_id,
1002-
counterparty_node_id: *counterparty_node_id,
1003-
token: params.token,
1004-
});
1005-
self.pending_events.enqueue(event);
1006-
(Ok(()), None)
1007-
} else {
1008-
let response = LSPS2Response::GetInfoError(ResponseError {
1009-
code: LSPS0_CLIENT_REJECTED_ERROR_CODE,
1010-
message: "Reached maximum number of pending requests. Please try again later."
1011-
.to_string(),
1012-
data: None,
1013-
});
1014-
let msg = Some(LSPS2Message::Response(request_id, response).into());
1015-
1016-
let err = format!(
1017-
"Peer {} reached maximum number of pending requests: {}",
1018-
counterparty_node_id, MAX_PENDING_REQUESTS_PER_PEER
1019-
);
995+
let request = LSPS2Request::GetInfo(params.clone());
996+
match self.insert_pending_request(
997+
&mut peer_state_lock,
998+
request_id.clone(),
999+
*counterparty_node_id,
1000+
request,
1001+
) {
1002+
(Ok(()), msg) => {
1003+
let event = Event::LSPS2Service(LSPS2ServiceEvent::GetInfo {
1004+
request_id,
1005+
counterparty_node_id: *counterparty_node_id,
1006+
token: params.token,
1007+
});
1008+
self.pending_events.enqueue(event);
10201009

1021-
let result =
1022-
Err(LightningError { err, action: ErrorAction::IgnoreAndLog(Level::Debug) });
1023-
(result, msg)
1010+
(Ok(()), msg)
1011+
},
1012+
(e, msg) => (e, msg),
10241013
}
10251014
};
10261015

@@ -1123,37 +1112,25 @@ where
11231112
.or_insert(Mutex::new(PeerState::new()));
11241113
let mut peer_state_lock = inner_state_lock.lock().unwrap();
11251114

1126-
if peer_state_lock.pending_requests.len() < MAX_PENDING_REQUESTS_PER_PEER {
1127-
peer_state_lock
1128-
.pending_requests
1129-
.insert(request_id.clone(), LSPS2Request::Buy(params.clone()));
1130-
1131-
let event = Event::LSPS2Service(LSPS2ServiceEvent::BuyRequest {
1132-
request_id,
1133-
counterparty_node_id: *counterparty_node_id,
1134-
opening_fee_params: params.opening_fee_params,
1135-
payment_size_msat: params.payment_size_msat,
1136-
});
1137-
self.pending_events.enqueue(event);
1138-
1139-
(Ok(()), None)
1140-
} else {
1141-
let response = LSPS2Response::BuyError(ResponseError {
1142-
code: LSPS0_CLIENT_REJECTED_ERROR_CODE,
1143-
message: "Reached maximum number of pending requests. Please try again later."
1144-
.to_string(),
1145-
data: None,
1146-
});
1147-
let msg = Some(LSPS2Message::Response(request_id, response).into());
1148-
1149-
let err = format!(
1150-
"Peer {} reached maximum number of pending requests: {}",
1151-
counterparty_node_id, MAX_PENDING_REQUESTS_PER_PEER
1152-
);
1153-
let result =
1154-
Err(LightningError { err, action: ErrorAction::IgnoreAndLog(Level::Debug) });
1115+
let request = LSPS2Request::Buy(params.clone());
1116+
match self.insert_pending_request(
1117+
&mut peer_state_lock,
1118+
request_id.clone(),
1119+
*counterparty_node_id,
1120+
request,
1121+
) {
1122+
(Ok(()), msg) => {
1123+
let event = Event::LSPS2Service(LSPS2ServiceEvent::BuyRequest {
1124+
request_id,
1125+
counterparty_node_id: *counterparty_node_id,
1126+
opening_fee_params: params.opening_fee_params,
1127+
payment_size_msat: params.payment_size_msat,
1128+
});
1129+
self.pending_events.enqueue(event);
11551130

1156-
(result, msg)
1131+
(Ok(()), msg)
1132+
},
1133+
(e, msg) => (e, msg),
11571134
}
11581135
};
11591136

@@ -1163,6 +1140,39 @@ where
11631140

11641141
result
11651142
}
1143+
1144+
fn insert_pending_request<'a>(
1145+
&self, peer_state_lock: &mut MutexGuard<'a, PeerState>, request_id: RequestId,
1146+
counterparty_node_id: PublicKey, request: LSPS2Request,
1147+
) -> (Result<(), LightningError>, Option<LSPSMessage>) {
1148+
if peer_state_lock.pending_requests.len() < MAX_PENDING_REQUESTS_PER_PEER {
1149+
peer_state_lock.pending_requests.insert(request_id, request);
1150+
(Ok(()), None)
1151+
} else {
1152+
let response = LSPS2Response::BuyError(ResponseError {
1153+
code: LSPS0_CLIENT_REJECTED_ERROR_CODE,
1154+
message: "Reached maximum number of pending requests. Please try again later."
1155+
.to_string(),
1156+
data: None,
1157+
});
1158+
let msg = Some(LSPS2Message::Response(request_id, response).into());
1159+
1160+
let err = format!(
1161+
"Peer {} reached maximum number of pending requests: {}",
1162+
counterparty_node_id, MAX_PENDING_REQUESTS_PER_PEER
1163+
);
1164+
let result =
1165+
Err(LightningError { err, action: ErrorAction::IgnoreAndLog(Level::Debug) });
1166+
1167+
(result, msg)
1168+
}
1169+
}
1170+
1171+
fn remove_pending_request<'a>(
1172+
&self, peer_state_lock: &mut MutexGuard<'a, PeerState>, request_id: &RequestId,
1173+
) -> Option<LSPS2Request> {
1174+
peer_state_lock.pending_requests.remove(request_id)
1175+
}
11661176
}
11671177

11681178
impl<CM: Deref + Clone> ProtocolMessageHandler for LSPS2ServiceHandler<CM>

0 commit comments

Comments
 (0)