Better comments

This commit is contained in:
Half-Shot 2024-02-06 16:20:21 +00:00
parent 64ab808179
commit 9232213159

View File

@ -12,8 +12,14 @@ const BACKOFF_TIME_MS: f32 = 5f32 * 1000f32;
pub struct QueueWithBackoff { pub struct QueueWithBackoff {
queue: LinkedList<String>, queue: LinkedList<String>,
/**
* A map of absolute backoff timestamps mapped to the value.
*/
backoff: BTreeMap<u128, String>, backoff: BTreeMap<u128, String>,
last_backoff: HashMap<String, u32>, /**
* The last duration applied when a value was backed off.
*/
last_backoff_duration: HashMap<String, u32>,
} }
impl Default for QueueWithBackoff { impl Default for QueueWithBackoff {
@ -29,7 +35,7 @@ impl QueueWithBackoff {
QueueWithBackoff { QueueWithBackoff {
queue: LinkedList::new(), queue: LinkedList::new(),
backoff: BTreeMap::new(), backoff: BTreeMap::new(),
last_backoff: HashMap::new(), last_backoff_duration: HashMap::new(),
} }
} }
@ -52,13 +58,13 @@ impl QueueWithBackoff {
#[napi] #[napi]
pub fn push(&mut self, item: String) { pub fn push(&mut self, item: String) {
self.last_backoff.remove(&item); self.last_backoff_duration.remove(&item);
self.queue.push_back(item); self.queue.push_back(item);
} }
#[napi] #[napi]
pub fn backoff(&mut self, item: String) -> u32 { pub fn backoff(&mut self, item: String) -> u32 {
let last_backoff = (*self.last_backoff.get(&item).unwrap_or(&0)) as f32; let last_backoff = (*self.last_backoff_duration.get(&item).unwrap_or(&0)) as f32;
let mut rng = rand::thread_rng(); let mut rng = rand::thread_rng();
let y: f32 = rng.gen::<f32>() + 0.5f32; // generates a float between 0 and 1 let y: f32 = rng.gen::<f32>() + 0.5f32; // generates a float between 0 and 1
@ -66,7 +72,7 @@ impl QueueWithBackoff {
let backoff_duration = ((y * BACKOFF_TIME_MS) + last_backoff.powf(BACKOFF_POW)) let backoff_duration = ((y * BACKOFF_TIME_MS) + last_backoff.powf(BACKOFF_POW))
.min(BACKOFF_TIME_MAX_MS) as u32; .min(BACKOFF_TIME_MAX_MS) as u32;
let backoff_item = item.clone(); let backoff_item = item.clone();
self.last_backoff.insert(item, backoff_duration); self.last_backoff_duration.insert(item, backoff_duration);
let start = SystemTime::now(); let start = SystemTime::now();
let since_the_epoch = start.duration_since(UNIX_EPOCH).unwrap(); let since_the_epoch = start.duration_since(UNIX_EPOCH).unwrap();