def _handle_request(self, req, ctx): self._attempt_log_stats() logLevel = logging.DEBUG # VDSM should never respond to any request before all information about # running VMs is recovered, see https://bugzilla.redhat.com/1339291 if not self._cif.ready: self.log.info("In recovery, ignoring '%s' in bridge with %s", req.method, req.params) return JsonRpcResponse(None, vdsmexception.RecoveryInProgress(), req.id) self.log.log(logLevel, "Calling '%s' in bridge with %s", req.method, req.params) try: method = self._bridge.dispatch(req.method) except exception.JsonRpcMethodNotFoundError as e: if req.isNotification(): return None return JsonRpcResponse(None, e, req.id) vars.context = ctx.context try: params = req.params self._bridge.register_server_address(ctx.server_address) if isinstance(req.params, list): res = method(*params) else: res = method(**params) self._bridge.unregister_server_address() except vdsmexception.VdsmException as e: return JsonRpcResponse(None, e, req.id) except Exception as e: self.log.exception("Internal server error") return JsonRpcResponse(None, exception.JsonRpcInternalError(str(e)), req.id) else: res = True if res is None else res self.log.log(logLevel, "Return '%s' in bridge with %s", req.method, res) if isinstance(res, Suppressed): res = res.value return JsonRpcResponse(res, None, req.id) finally: vars.context = None
'updateVmPolicyErr': exception.UpdateVMPolicyFailed().response(), 'updateIoTuneErr': exception.UpdateIOTuneError().response(), 'V2VConnection': exception.V2VConnectionError().response(), 'NoSuchJob': exception.NoSuchJob().response(), 'V2VNoSuchOvf': exception.V2VNoSuchOVF().response(), 'JobNotDone': exception.JobNotDone().response(), 'JobExists': exception.JobExists().response(), 'JobNotActive': exception.JobNotActive().response(), 'hotplugMem': exception.HotplugMemFailed().response(), 'ksmErr': exception.KSMUpdateFailed().response(), 'secretBadRequestErr': exception.BadSecretRequest().response(), 'secretRegisterErr': exception.SecretRegistrationFailed().response(), 'secretUnregisterErr': exception.SecretUnregistrationFailed().response(), 'unsupportedOperationErr': exception.UnsupportedOperation().response(), 'freezeErr': exception.FreezeGuestFSFailed().response(), 'thawErr': exception.ThawGuestFSFailed().response(), 'hookError': exception.HookFailed().response(), 'destVolumeTooSmall': exception.DestinationVolumeTooSmall().response(), 'AbortNotSupported': exception.AbortNotSupported().response(), 'migNotInProgress': exception.MigrationNotInProgress().response(), 'migrateLimit': exception.MigrationLimitExceeded().response(), 'recovery': exception.RecoveryInProgress().response(), 'hostdevDetachErr': exception.HostdevDetachFailed().response(), } doneCode = {'code': 0, 'message': 'Done'} # exitCodes ERROR = 1 NORMAL = 0