Skip to content

Commit 14f24e8

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 b7e79c6 commit 14f24e8

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
@@ -1226,45 +1226,43 @@ where
12261226
&self, peer_state_lock: &mut MutexGuard<'a, PeerState>, request_id: LSPSRequestId,
12271227
counterparty_node_id: PublicKey, request: LSPS2Request,
12281228
) -> (Result<(), LightningError>, Option<LSPSMessage>) {
1229-
if self.total_pending_requests.load(Ordering::Relaxed) >= MAX_TOTAL_PENDING_REQUESTS {
1230-
let response = LSPS2Response::BuyError(LSPSResponseError {
1229+
let create_pending_request_limit_exceeded_response = |error_message: String| {
1230+
let error_details = LSPSResponseError {
12311231
code: LSPS0_CLIENT_REJECTED_ERROR_CODE,
1232-
message: "Reached maximum number of pending requests. Please try again later."
1233-
.to_string(),
1232+
message: error_message.clone(),
12341233
data: None,
1234+
};
1235+
let response = match &request {
1236+
LSPS2Request::GetInfo(_) => LSPS2Response::GetInfoError(error_details),
1237+
LSPS2Request::Buy(_) => LSPS2Response::BuyError(error_details),
1238+
};
1239+
let msg = Some(LSPS2Message::Response(request_id.clone(), response).into());
1240+
1241+
let result = Err(LightningError {
1242+
err: error_message,
1243+
action: ErrorAction::IgnoreAndLog(Level::Debug),
12351244
});
1236-
let msg = Some(LSPS2Message::Response(request_id, response).into());
1245+
(result, msg)
1246+
};
12371247

1238-
let err = format!(
1239-
"Peer {} reached maximum number of total pending requests: {}",
1248+
if self.total_pending_requests.load(Ordering::Relaxed) >= MAX_TOTAL_PENDING_REQUESTS {
1249+
let error_message = format!(
1250+
"reached maximum number of total pending requests {}: {}",
12401251
counterparty_node_id, MAX_TOTAL_PENDING_REQUESTS
12411252
);
1242-
let result =
1243-
Err(LightningError { err, action: ErrorAction::IgnoreAndLog(Level::Debug) });
1244-
return (result, msg);
1253+
return create_pending_request_limit_exceeded_response(error_message);
12451254
}
12461255

12471256
if peer_state_lock.pending_requests_and_channels() < MAX_PENDING_REQUESTS_PER_PEER {
12481257
peer_state_lock.pending_requests.insert(request_id, request);
12491258
self.total_pending_requests.fetch_add(1, Ordering::Relaxed);
12501259
(Ok(()), None)
12511260
} else {
1252-
let response = LSPS2Response::BuyError(LSPSResponseError {
1253-
code: LSPS0_CLIENT_REJECTED_ERROR_CODE,
1254-
message: "Reached maximum number of pending requests. Please try again later."
1255-
.to_string(),
1256-
data: None,
1257-
});
1258-
let msg = Some(LSPS2Message::Response(request_id, response).into());
1259-
1260-
let err = format!(
1261-
"Peer {} reached maximum number of pending requests: {}",
1261+
let error_message = format!(
1262+
"reached maximum number of pending requests for peer {}: {}",
12621263
counterparty_node_id, MAX_PENDING_REQUESTS_PER_PEER
12631264
);
1264-
let result =
1265-
Err(LightningError { err, action: ErrorAction::IgnoreAndLog(Level::Debug) });
1266-
1267-
(result, msg)
1265+
create_pending_request_limit_exceeded_response(error_message)
12681266
}
12691267
}
12701268

0 commit comments

Comments
 (0)