Skip to content

Commit f986fba

Browse files
junderwshesek
authored andcommitted
Fix: Chunk RPC requests to 50k each
1 parent adedee1 commit f986fba

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

src/daemon.rs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use base64;
99
use bitcoin::hashes::hex::{FromHex, ToHex};
1010
use glob;
1111
use hex;
12+
use itertools::Itertools;
1213
use serde_json::{from_str, from_value, Value};
1314

1415
#[cfg(not(feature = "liquid"))]
@@ -378,19 +379,24 @@ impl Daemon {
378379

379380
fn handle_request_batch(&self, method: &str, params_list: &[Value]) -> Result<Vec<Value>> {
380381
let id = self.message_id.next();
381-
let reqs = params_list
382+
let chunks = params_list
382383
.iter()
383384
.map(|params| json!({"method": method, "params": params, "id": id}))
384-
.collect();
385+
.chunks(50_000); // Max Amount of batched requests
385386
let mut results = vec![];
386-
let mut replies = self.call_jsonrpc(method, &reqs)?;
387-
if let Some(replies_vec) = replies.as_array_mut() {
388-
for reply in replies_vec {
389-
results.push(parse_jsonrpc_reply(reply.take(), method, id)?)
387+
for chunk in &chunks {
388+
let reqs = chunk.collect();
389+
let mut replies = self.call_jsonrpc(method, &reqs)?;
390+
if let Some(replies_vec) = replies.as_array_mut() {
391+
for reply in replies_vec {
392+
results.push(parse_jsonrpc_reply(reply.take(), method, id)?)
393+
}
394+
} else {
395+
bail!("non-array replies: {:?}", replies);
390396
}
391-
return Ok(results);
392397
}
393-
bail!("non-array replies: {:?}", replies);
398+
399+
Ok(results)
394400
}
395401

396402
fn retry_request_batch(&self, method: &str, params_list: &[Value]) -> Result<Vec<Value>> {

0 commit comments

Comments
 (0)