Skip to content

Commit 3aca593

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 337b634 commit 3aca593

File tree

1 file changed

+22
-24
lines changed

1 file changed

+22
-24
lines changed

lightning-liquidity/src/lsps2/service.rs

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1348,45 +1348,43 @@ 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,
1354-
message: "Reached maximum number of pending requests. Please try again later."
1355-
.to_string(),
1354+
message: error_message.clone(),
13561355
data: None,
1356+
};
1357+
let response = match &request {
1358+
LSPS2Request::GetInfo(_) => LSPS2Response::GetInfoError(error_details),
1359+
LSPS2Request::Buy(_) => LSPS2Response::BuyError(error_details),
1360+
};
1361+
let msg = Some(LSPS2Message::Response(request_id.clone(), response).into());
1362+
1363+
let result = Err(LightningError {
1364+
err: error_message,
1365+
action: ErrorAction::IgnoreAndLog(Level::Debug),
13571366
});
1358-
let msg = Some(LSPS2Message::Response(request_id, response).into());
1367+
(result, msg)
1368+
};
13591369

1360-
let err = format!(
1361-
"Peer {} reached maximum number of total pending requests: {}",
1370+
if self.total_pending_requests.load(Ordering::Relaxed) >= MAX_TOTAL_PENDING_REQUESTS {
1371+
let error_message = format!(
1372+
"reached maximum number of total pending requests {}: {}",
13621373
counterparty_node_id, MAX_TOTAL_PENDING_REQUESTS
13631374
);
1364-
let result =
1365-
Err(LightningError { err, action: ErrorAction::IgnoreAndLog(Level::Debug) });
1366-
return (result, msg);
1375+
return create_pending_request_limit_exceeded_response(error_message);
13671376
}
13681377

13691378
if peer_state_lock.pending_requests_and_channels() < MAX_PENDING_REQUESTS_PER_PEER {
13701379
peer_state_lock.pending_requests.insert(request_id, request);
13711380
self.total_pending_requests.fetch_add(1, Ordering::Relaxed);
13721381
(Ok(()), None)
13731382
} 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!(
1383-
"Peer {} reached maximum number of pending requests: {}",
1383+
let error_message = format!(
1384+
"reached maximum number of pending requests for peer {}: {}",
13841385
counterparty_node_id, MAX_PENDING_REQUESTS_PER_PEER
13851386
);
1386-
let result =
1387-
Err(LightningError { err, action: ErrorAction::IgnoreAndLog(Level::Debug) });
1388-
1389-
(result, msg)
1387+
create_pending_request_limit_exceeded_response(error_message)
13901388
}
13911389
}
13921390

0 commit comments

Comments
 (0)