Skip to content

Commit 0d0dbc4

Browse files
Fix error response types for rate limiting in service
Replace hardcoded BuyError responses with appropriate error types based on the actual request (GetInfo vs Buy) when rate limiting is triggered. This fixes incorrect error response types and provides an easy way to test the error event handling added in this PR.
1 parent 50f3130 commit 0d0dbc4

File tree

1 file changed

+21
-22
lines changed

1 file changed

+21
-22
lines changed

lightning-liquidity/src/lsps2/service.rs

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1348,45 +1348,44 @@ where
13481348
&self, peer_state_lock: &mut MutexGuard<'a, PeerState>, request_id: LSPSRequestId,
13491349
counterparty_node_id: PublicKey, request: LSPS2Request,
13501350
) -> (Result<(), LightningError>, Option<LSPSMessage>) {
1351-
if self.total_pending_requests.load(Ordering::Relaxed) >= MAX_TOTAL_PENDING_REQUESTS {
1352-
let response = LSPS2Response::BuyError(LSPSResponseError {
1351+
let create_pending_request_limit_exceeded_response = |error_message: String| {
1352+
let error_details = LSPSResponseError {
13531353
code: LSPS0_CLIENT_REJECTED_ERROR_CODE,
13541354
message: "Reached maximum number of pending requests. Please try again later."
13551355
.to_string(),
13561356
data: None,
1357+
};
1358+
let response = match &request {
1359+
LSPS2Request::GetInfo(_) => LSPS2Response::GetInfoError(error_details),
1360+
LSPS2Request::Buy(_) => LSPS2Response::BuyError(error_details),
1361+
};
1362+
let msg = Some(LSPS2Message::Response(request_id.clone(), response).into());
1363+
1364+
let result = Err(LightningError {
1365+
err: error_message,
1366+
action: ErrorAction::IgnoreAndLog(Level::Debug),
13571367
});
1358-
let msg = Some(LSPS2Message::Response(request_id, response).into());
1368+
(result, msg)
1369+
};
13591370

1360-
let err = format!(
1361-
"Peer {} reached maximum number of total pending requests: {}",
1362-
counterparty_node_id, MAX_TOTAL_PENDING_REQUESTS
1371+
if self.total_pending_requests.load(Ordering::Relaxed) >= MAX_TOTAL_PENDING_REQUESTS {
1372+
let error_message = format!(
1373+
"Reached maximum number of total pending requests: {}",
1374+
MAX_TOTAL_PENDING_REQUESTS
13631375
);
1364-
let result =
1365-
Err(LightningError { err, action: ErrorAction::IgnoreAndLog(Level::Debug) });
1366-
return (result, msg);
1376+
return create_pending_request_limit_exceeded_response(error_message);
13671377
}
13681378

13691379
if peer_state_lock.pending_requests_and_channels() < MAX_PENDING_REQUESTS_PER_PEER {
13701380
peer_state_lock.pending_requests.insert(request_id, request);
13711381
self.total_pending_requests.fetch_add(1, Ordering::Relaxed);
13721382
(Ok(()), None)
13731383
} else {
1374-
let response = LSPS2Response::BuyError(LSPSResponseError {
1375-
code: LSPS0_CLIENT_REJECTED_ERROR_CODE,
1376-
message: "Reached maximum number of pending requests. Please try again later."
1377-
.to_string(),
1378-
data: None,
1379-
});
1380-
let msg = Some(LSPS2Message::Response(request_id, response).into());
1381-
1382-
let err = format!(
1384+
let error_message = format!(
13831385
"Peer {} reached maximum number of pending requests: {}",
13841386
counterparty_node_id, MAX_PENDING_REQUESTS_PER_PEER
13851387
);
1386-
let result =
1387-
Err(LightningError { err, action: ErrorAction::IgnoreAndLog(Level::Debug) });
1388-
1389-
(result, msg)
1388+
create_pending_request_limit_exceeded_response(error_message)
13901389
}
13911390
}
13921391

0 commit comments

Comments
 (0)