def per_vm_operation(job, period): disp = periodic.VmDispatcher( self._cif.getVMs, self._executor, lambda vm: job(vm, self), _TASK_TIMEOUT) return periodic.Operation( disp, period, self._scheduler, timeout=_TASK_TIMEOUT, executor=self._executor)
def test_dispatch_fails(self): """ make sure that VmDispatcher attempts to dispatch work for every registered VMs, and doesn't exit prematurely when one dispatch() fails. """ exc = _FakeExecutor(fail=True) op = periodic.VmDispatcher(self.cif.getVMs, exc, _Nop, 0) skipped = op() self.assertEqual(set(skipped), set(self.cif.getVMs().keys()))
def _check_dispatching(self, skip_ids): op = periodic.VmDispatcher(self.cif.getVMs, _FakeExecutor(), _Visitor, 0) # we don't care about executor (hence the simplistic fake) op() for vm_id in skip_ids: self.assertNotIn(_fake_vm_id(vm_id), _Visitor.VMS) vms = self.cif.getVMs() expected = (set(vms.keys()) - set(_fake_vm_id(i) for i in skip_ids)) for vm_id in expected: self.assertEqual(_Visitor.VMS.get(vm_id), 1)
def test_dispatch(self, failed_ids): for i in failed_ids: with self.cif.vmContainerLock: vm_id = _fake_vm_id(i) self.cif.vmContainer[vm_id].fail_required = True op = periodic.VmDispatcher(self.cif.getVMs, _FakeExecutor(), _Visitor, 0) # we don't care about executor (hence the simplistic fake) op() vms = self.cif.getVMs() expected = (set(vms.keys()) - set(_fake_vm_id(i) for i in failed_ids)) for vm_id in expected: self.assertEqual(_Visitor.VMS.get(vm_id), 1) for vm_id in failed_ids: self.assertEqual(_Visitor.VMS.get(vm_id), None)