@@ -883,6 +883,24 @@ SequenceBatchScheduler::ReleaseSequenceSlot(
883
883
{
884
884
std::unique_lock<std::mutex> lock (mu_);
885
885
886
+ // If we are releasing the slot for a cancelled sequence,
887
+ // we have to clean up the sequence
888
+ // otherwise the reaper will try to clean it up again.
889
+ if (!requests->empty () && requests->front ()) {
890
+ const InferenceRequest::SequenceId& corr_id =
891
+ requests->front ()->CorrelationId ();
892
+ LOG_VERBOSE (1 ) << " Releasing canceled sequence CORRID " << corr_id;
893
+
894
+ // Clean up the correlation id to sequence slot mapping, to avoid the reaper
895
+ // from trying to release the same slot again on this instance of the
896
+ // correlation id.
897
+ sequence_to_batcherseqslot_map_.erase (corr_id);
898
+ // Clean up the correlation id to sequence timeout timestamp mapping, to
899
+ // avoid removal of a newer sequence from the backlog upon previous timeout
900
+ // if the same id is re-used by the newer sequence.
901
+ correlation_id_timestamps_.erase (corr_id);
902
+ }
903
+
886
904
// If there are any remaining requests on the releasing sequence slot, those
887
905
// requests will be cancelled.
888
906
MarkRequestsCancelled (requests);
@@ -1969,7 +1987,11 @@ OldestSequenceBatch::CompleteAndNext(const uint32_t seq_slot)
1969
1987
<< model_instance_->Name () << " , slot " << seq_slot;
1970
1988
release_seq_slot = true ;
1971
1989
} else if (irequest->IsCancelled ()) {
1972
- LOG_VERBOSE (1 ) << " force-end cancelled sequence in batcher "
1990
+ const InferenceRequest::SequenceId& correlation_id =
1991
+ irequest->CorrelationId ();
1992
+ LOG_VERBOSE (1 ) << irequest->LogRequest ()
1993
+ << " force-end cancelled sequence CORRID "
1994
+ << correlation_id << " in batcher "
1973
1995
<< model_instance_->Name () << " , slot " << seq_slot;
1974
1996
release_seq_slot = true ;
1975
1997
retain_queue_front = true ;
0 commit comments