(&self, worker: WorkerHandle)
| 201 | } |
| 202 | |
| 203 | fn add_worker_to_pool(&self, worker: WorkerHandle) { |
| 204 | let mut w = self.inner.lock().unwrap(); |
| 205 | |
| 206 | // potentially hand over to next queued request |
| 207 | let mut i = MAX_PREMIUM_SLOT_TIER; |
| 208 | loop { |
| 209 | let queue = &mut w.req_queues[i]; |
| 210 | if let Some(req) = queue.pop_front() { |
| 211 | let claim = ClaimedWorker::new_claim(req.guild_id, &worker); |
| 212 | |
| 213 | if req.tx.send(worker).is_err() { |
| 214 | panic!("worker request dropped") |
| 215 | } |
| 216 | |
| 217 | w.track_claimed_worker(claim); |
| 218 | |
| 219 | return; |
| 220 | } |
| 221 | |
| 222 | if i == worker.priority_index { |
| 223 | break; |
| 224 | } |
| 225 | |
| 226 | i -= 1; |
| 227 | } |
| 228 | |
| 229 | // no pending worker requests |
| 230 | metrics::gauge!("bl.scheduler.workerpool_available_workers", "priority_index" => worker.priority_index.to_string()).increment(1.0); |
| 231 | w.pools[worker.priority_index].push(worker); |
| 232 | } |
| 233 | |
| 234 | fn add_pending_worker(&self, worker: PendingWorkerHandle) { |
| 235 | let mut w = self.inner.lock().unwrap(); |
no test coverage detected