(&self, mut worker: WorkerHandle, broken: bool)
| 171 | } |
| 172 | |
| 173 | pub fn return_worker(&self, mut worker: WorkerHandle, broken: bool) { |
| 174 | worker.returned_at = Instant::now(); |
| 175 | let elapsed = worker.returned_at - worker.claimed_at; |
| 176 | if let Some(guild_id) = worker.last_active_guild { |
| 177 | let micros = elapsed.as_micros() as u64; |
| 178 | counter!("bl.worker.claimed_microseconds_total", "guild_id" => guild_id.get().to_string()).increment(micros); |
| 179 | } |
| 180 | |
| 181 | { |
| 182 | let mut w = self.inner.lock().unwrap(); |
| 183 | w.tracking_remove_claimed_worker(worker.priority_index, worker.worker_id); |
| 184 | } |
| 185 | |
| 186 | if broken { |
| 187 | error!( |
| 188 | "returned broken worker to the pool: {:?}", |
| 189 | worker.last_active_guild |
| 190 | ); |
| 191 | metrics::counter!("bl.scheduler.broken_workers_total").increment(1); |
| 192 | self.spawn_worker(worker.priority_index); |
| 193 | } else { |
| 194 | info!( |
| 195 | tier = worker.priority_index, |
| 196 | dur = elapsed.as_secs_f64(), |
| 197 | "returned worker to the pool" |
| 198 | ); |
| 199 | self.add_worker_to_pool(worker); |
| 200 | } |
| 201 | } |
| 202 | |
| 203 | fn add_worker_to_pool(&self, worker: WorkerHandle) { |
| 204 | let mut w = self.inner.lock().unwrap(); |
no test coverage detected