Avoid continuing zeta requests that are cancelled before their throttle (#43505)

Release Notes:

- N/A
This commit is contained in:
Max Brunsfeld
2025-11-25 17:33:10 -08:00
committed by GitHub
parent 98e369285b
commit e13e93063c
+23 -2
View File
@@ -289,6 +289,7 @@ struct ZetaProject {
next_pending_prediction_id: usize,
pending_predictions: ArrayVec<PendingPrediction, 2>,
last_prediction_refresh: Option<(EntityId, Instant)>,
cancelled_predictions: HashSet<usize>,
context: Option<HashMap<Entity<Buffer>, Vec<Range<Anchor>>>>,
refresh_context_task: Option<LogErrorFuture<Task<Result<()>>>>,
refresh_context_debounce_task: Option<Task<Option<()>>>,
@@ -601,6 +602,7 @@ impl Zeta {
recent_paths: VecDeque::new(),
registered_buffers: HashMap::default(),
current_prediction: None,
cancelled_predictions: HashSet::default(),
pending_predictions: ArrayVec::new(),
next_pending_prediction_id: 0,
last_prediction_refresh: None,
@@ -1132,11 +1134,23 @@ impl Zeta {
cx.background_executor().timer(timeout).await;
}
// If this task was cancelled before the throttle timeout expired,
// do not perform a request.
let mut is_cancelled = true;
this.update(cx, |this, cx| {
this.get_or_init_zeta_project(&project, cx)
.last_prediction_refresh = Some((throttle_entity, Instant::now()));
let project_state = this.get_or_init_zeta_project(&project, cx);
if !project_state
.cancelled_predictions
.remove(&pending_prediction_id)
{
project_state.last_prediction_refresh = Some((throttle_entity, Instant::now()));
is_cancelled = false;
}
})
.ok();
if is_cancelled {
return None;
}
let edit_prediction_id = do_refresh(this.clone(), cx).await.log_err().flatten();
@@ -1144,6 +1158,10 @@ impl Zeta {
// any pending predictions that were enqueued before it.
this.update(cx, |this, cx| {
let zeta_project = this.get_or_init_zeta_project(&project, cx);
zeta_project
.cancelled_predictions
.remove(&pending_prediction_id);
let mut pending_predictions = mem::take(&mut zeta_project.pending_predictions);
for (ix, pending_prediction) in pending_predictions.iter().enumerate() {
if pending_prediction.id == pending_prediction_id {
@@ -1174,6 +1192,9 @@ impl Zeta {
id: pending_prediction_id,
task,
});
zeta_project
.cancelled_predictions
.insert(pending_prediction.id);
self.cancel_pending_prediction(pending_prediction, cx);
}
}