Skip to content

Commit b3f630f

Browse files
Merge branch 'devin/1750801144-fortuna-multiple-replicas' of https://git-manager.devin.ai/proxy/github.com/pyth-network/pyth-crosschain into devin/1750801144-fortuna-multiple-replicas
2 parents 0c76fa6 + 4801859 commit b3f630f

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

apps/fortuna/src/config.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,12 @@ fn default_chain_sample_interval() -> u64 {
349349
pub struct ReplicaConfig {
350350
pub replica_id: u64,
351351
pub total_replicas: u64,
352+
#[serde(default = "default_backup_delay_seconds")]
353+
pub backup_delay_seconds: u64,
354+
}
355+
356+
fn default_backup_delay_seconds() -> u64 {
357+
30
352358
}
353359

354360
/// Configuration values for the keeper service that are shared across chains.

apps/fortuna/src/keeper/process_event.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,18 @@ pub async fn process_event_with_backoff(
5454
};
5555

5656
if !is_primary_replica {
57+
if let Some(replica_config) = &process_param.keeper_config.replica_config {
58+
tracing::info!(
59+
sequence_number = event.sequence_number,
60+
delay_seconds = replica_config.backup_delay_seconds,
61+
"Waiting before processing as backup replica"
62+
);
63+
tokio::time::sleep(tokio::time::Duration::from_secs(
64+
replica_config.backup_delay_seconds,
65+
))
66+
.await;
67+
}
68+
5769
match chain_state
5870
.contract
5971
.get_request(event.provider_address, event.sequence_number)
@@ -62,21 +74,21 @@ pub async fn process_event_with_backoff(
6274
Ok(Some(_)) => {
6375
tracing::info!(
6476
sequence_number = event.sequence_number,
65-
"Request still open, processing as backup replica"
77+
"Request still open after delay, processing as backup replica"
6678
);
6779
}
6880
Ok(None) => {
6981
tracing::debug!(
7082
sequence_number = event.sequence_number,
71-
"Request already fulfilled by primary replica, skipping"
83+
"Request already fulfilled by primary replica during delay, skipping"
7284
);
7385
return Ok(());
7486
}
7587
Err(e) => {
7688
tracing::warn!(
7789
sequence_number = event.sequence_number,
7890
error = ?e,
79-
"Error checking request status, skipping"
91+
"Error checking request status after delay, skipping"
8092
);
8193
return Ok(());
8294
}

0 commit comments

Comments
 (0)