Skip to content

Commit ccaf297

Browse files
committed
Make snapshotter a bit more amenable to changes in interval
By separating the concept of "seconds in a day" from the snapshot interval.
1 parent 7eda680 commit ccaf297

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

src/snapshot.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ impl<L: Deref + Clone> Snapshotter<L> where L::Target: Logger {
2626
log_info!(self.logger, "Initiating snapshotting service");
2727

2828
let snapshot_sync_day_factors = [1, 2, 3, 4, 5, 6, 7, 14, 21, u64::MAX];
29-
let round_day_seconds = config::SNAPSHOT_CALCULATION_INTERVAL as u64;
29+
const DAY_SECONDS: u64 = 60 * 60 * 24;
3030

3131
let pending_snapshot_directory = format!("{}/snapshots_pending", cache_path());
3232
let pending_symlink_directory = format!("{}/symlinks_pending", cache_path());
@@ -38,7 +38,7 @@ impl<L: Deref + Clone> Snapshotter<L> where L::Target: Logger {
3838
loop {
3939
// 1. get the current timestamp
4040
let snapshot_generation_timestamp = SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs();
41-
let reference_timestamp = Self::round_down_to_nearest_multiple(snapshot_generation_timestamp, round_day_seconds);
41+
let reference_timestamp = Self::round_down_to_nearest_multiple(snapshot_generation_timestamp, config::SNAPSHOT_CALCULATION_INTERVAL as u64);
4242
log_info!(self.logger, "Capturing snapshots at {} for: {}", snapshot_generation_timestamp, reference_timestamp);
4343

4444
// 2. sleep until the next round 24 hours
@@ -70,7 +70,7 @@ impl<L: Deref + Clone> Snapshotter<L> where L::Target: Logger {
7070
let mut snapshot_sync_timestamps: Vec<(u64, u64)> = Vec::new();
7171
for factor in &snapshot_sync_day_factors {
7272
// basically timestamp - day_seconds * factor
73-
let timestamp = reference_timestamp.saturating_sub(round_day_seconds.saturating_mul(factor.clone()));
73+
let timestamp = reference_timestamp.saturating_sub(DAY_SECONDS.saturating_mul(factor.clone()));
7474
snapshot_sync_timestamps.push((factor.clone(), timestamp));
7575
};
7676

@@ -117,7 +117,7 @@ impl<L: Deref + Clone> Snapshotter<L> where L::Target: Logger {
117117
} else {
118118
// find min(x) in snapshot_sync_day_factors where x >= i
119119
snapshot_sync_day_factors.iter().find(|x| {
120-
x >= &&i
120+
*x * DAY_SECONDS >= i * config::SNAPSHOT_CALCULATION_INTERVAL as u64
121121
}).unwrap().clone()
122122
};
123123

@@ -128,7 +128,7 @@ impl<L: Deref + Clone> Snapshotter<L> where L::Target: Logger {
128128
// special-case 0 to always refer to a full/initial sync
129129
0
130130
} else {
131-
reference_timestamp.saturating_sub(round_day_seconds.saturating_mul(i))
131+
reference_timestamp.saturating_sub((config::SNAPSHOT_CALCULATION_INTERVAL as u64).saturating_mul(i))
132132
};
133133
let symlink_path = format!("{}/{}.bin", pending_symlink_directory, canonical_last_sync_timestamp);
134134

@@ -151,8 +151,8 @@ impl<L: Deref + Clone> Snapshotter<L> where L::Target: Logger {
151151

152152
// constructing the snapshots may have taken a while
153153
let current_time = SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs();
154-
let remainder = current_time % round_day_seconds;
155-
let time_until_next_day = round_day_seconds - remainder;
154+
let remainder = current_time % config::SNAPSHOT_CALCULATION_INTERVAL as u64;
155+
let time_until_next_day = config::SNAPSHOT_CALCULATION_INTERVAL as u64 - remainder;
156156

157157
log_info!(self.logger, "Sleeping until next snapshot capture: {}s", time_until_next_day);
158158
// add in an extra five seconds to assure the rounding down works correctly

0 commit comments

Comments
 (0)