Skip to content

Commit 3968042

Browse files
fix(kms-connector): listen from latest block if catchup fail (#1737)
* fix(kms-connector): listen from latest block if catchup fail * chore(kms-connector): add tests * ci(kms-connector): upgrade cargo-audit (#1671) * chore(kms-connector): update codeowner
1 parent 62e6da6 commit 3968042

File tree

4 files changed

+41
-17
lines changed

4 files changed

+41
-17
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
/host-contracts/ @zama-ai/fhevm-gateway
1212
/protocol-contracts/ @zama-ai/fhevm-gateway
1313
/library-solidity/ @zama-ai/fhevm-gateway
14-
/kms-connector/ @zama-ai/fhevm-gateway
14+
/kms-connector/ @zama-ai/fhevm-gateway @dartdart26
1515

1616
# Coprocessor Team ownership
1717
/coprocessor/ @zama-ai/fhevm-coprocessor

.github/workflows/kms-connector-dependency-analysis.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ jobs:
3030
rust-files:
3131
- .github/workflows/kms-connector-dependency-analysis.yml
3232
- kms-connector/**
33+
3334
dependencies-check:
3435
name: kms-connector-dependency-analysis/dependencies-check (bpr)
3536
needs: check-changes
@@ -50,13 +51,13 @@ jobs:
5051
toolchain: stable
5152

5253
- name: Install cargo-binstall
53-
uses: cargo-bins/cargo-binstall@84ca29d5c1719e79e23b6af147555a8f4dac79d6 # v1.10.14
54+
uses: cargo-bins/cargo-binstall@80aaafe04903087c333980fa2686259ddd34b2d9 # v1.16.6
5455

5556
- name: Install cargo tools
5657
run: |
5758
cargo binstall --no-confirm --force \
58-
cargo-audit@0.21.2 \
59-
cargo-deny@0.16.2
59+
cargo-audit@0.22.0 \
60+
cargo-deny@0.18.9
6061
6162
- name: Check that Cargo.lock is the source of truth
6263
run: |
@@ -72,4 +73,3 @@ jobs:
7273
run: |
7374
cd kms-connector
7475
cargo-audit audit
75-

kms-connector/Cargo.lock

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

kms-connector/crates/gw-listener/src/core/gw_listener.rs

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,10 @@ where
167167
event_poller.poller = event_poller.poller.with_poll_interval(poll_interval);
168168
info!("✓ Subscribed to {event_type} events");
169169

170-
self.catchup_past_events::<E>(&mut last_block_polled, event_type)
170+
let _ = self
171+
.catchup_past_events::<E>(&mut last_block_polled, event_type)
171172
.await
172-
.map_err(|e| anyhow!("Failed to catch up past {event_type} events: {e}"))?;
173+
.inspect_err(|e| warn!("Failed to catch up past {event_type} events: {e}"));
173174

174175
select! {
175176
_ = self.process_events(event_type, event_poller, &mut last_block_polled) => (),
@@ -407,7 +408,7 @@ mod tests {
407408
#[timeout(Duration::from_secs(90))]
408409
#[tokio::test]
409410
async fn test_reset_filter_stops_listener() {
410-
let (_test_instance, asserter, gw_listener) = test_setup().await;
411+
let (_test_instance, asserter, gw_listener) = test_setup(None).await;
411412

412413
asserter.push_failure(ErrorPayload {
413414
code: -32000,
@@ -418,11 +419,31 @@ mod tests {
418419
gw_listener.subscribe(EventType::KeygenRequest).await;
419420
}
420421

422+
#[rstest::rstest]
423+
#[timeout(Duration::from_secs(90))]
424+
#[tokio::test]
425+
async fn test_failed_catchup_does_not_stop_listener() {
426+
let (mut test_instance, asserter, gw_listener) = test_setup(Some(0)).await;
427+
428+
asserter.push_failure(ErrorPayload {
429+
code: -32002,
430+
message: "request timed out".into(),
431+
data: None,
432+
});
433+
434+
let event_type = EventType::KeygenRequest;
435+
tokio::spawn(gw_listener.subscribe(event_type));
436+
test_instance.wait_for_log("Failed to catch up").await;
437+
test_instance
438+
.wait_for_log(&format!("Waiting for next {event_type}"))
439+
.await;
440+
}
441+
421442
#[rstest::rstest]
422443
#[timeout(Duration::from_secs(90))]
423444
#[tokio::test]
424445
async fn test_listener_ended_by_end_of_any_task() {
425-
let (mut test_instance, _asserter, gw_listener) = test_setup().await;
446+
let (mut test_instance, _asserter, gw_listener) = test_setup(None).await;
426447

427448
// Will stop because some subcription tasks will not be able to init their event filter
428449
gw_listener.start().await;
@@ -438,7 +459,9 @@ mod tests {
438459
RootProvider,
439460
>;
440461

441-
async fn test_setup() -> (TestInstance, Asserter, GatewayListener<MockProvider>) {
462+
async fn test_setup(
463+
from_block_number: Option<u64>,
464+
) -> (TestInstance, Asserter, GatewayListener<MockProvider>) {
442465
let test_instance = TestInstanceBuilder::db_setup().await.unwrap();
443466

444467
// Create a mocked `alloy::Provider`
@@ -452,6 +475,7 @@ mod tests {
452475
let config = Config {
453476
decryption_polling: Duration::from_millis(500),
454477
key_management_polling: Duration::from_millis(500),
478+
from_block_number,
455479
..Default::default()
456480
};
457481
let listener = GatewayListener::new(

0 commit comments

Comments
 (0)