提交 ab871550 编写于 作者: D Dmitry Guryanov 提交者: Peter Krempa

parallels: report proper error in Create/Destroy/Suspend e.t.c.

If we want to perform some operation and domain state is not suitable
for that operation, we should report error VIR_ERR_OPERATION_INVALID.
Signed-off-by: NDmitry Guryanov <dguryanov@parallels.com>
上级 b56c07a6
...@@ -1601,7 +1601,7 @@ void prlsdkUnsubscribeFromPCSEvents(parallelsConnPtr privconn) ...@@ -1601,7 +1601,7 @@ void prlsdkUnsubscribeFromPCSEvents(parallelsConnPtr privconn)
logPrlError(ret); logPrlError(ret);
} }
int prlsdkStart(parallelsConnPtr privconn, PRL_HANDLE sdkdom) PRL_RESULT prlsdkStart(parallelsConnPtr privconn, PRL_HANDLE sdkdom)
{ {
PRL_HANDLE job = PRL_INVALID_HANDLE; PRL_HANDLE job = PRL_INVALID_HANDLE;
...@@ -1609,40 +1609,40 @@ int prlsdkStart(parallelsConnPtr privconn, PRL_HANDLE sdkdom) ...@@ -1609,40 +1609,40 @@ int prlsdkStart(parallelsConnPtr privconn, PRL_HANDLE sdkdom)
return PRL_FAILED(waitJob(job, privconn->jobTimeout)) ? -1 : 0; return PRL_FAILED(waitJob(job, privconn->jobTimeout)) ? -1 : 0;
} }
static int prlsdkStopEx(parallelsConnPtr privconn, static PRL_RESULT prlsdkStopEx(parallelsConnPtr privconn,
PRL_HANDLE sdkdom, PRL_HANDLE sdkdom,
PRL_UINT32 mode) PRL_UINT32 mode)
{ {
PRL_HANDLE job = PRL_INVALID_HANDLE; PRL_HANDLE job = PRL_INVALID_HANDLE;
job = PrlVm_StopEx(sdkdom, mode, 0); job = PrlVm_StopEx(sdkdom, mode, 0);
return PRL_FAILED(waitJob(job, privconn->jobTimeout)) ? -1 : 0; return waitJob(job, privconn->jobTimeout);
} }
int prlsdkKill(parallelsConnPtr privconn, PRL_HANDLE sdkdom) PRL_RESULT prlsdkKill(parallelsConnPtr privconn, PRL_HANDLE sdkdom)
{ {
return prlsdkStopEx(privconn, sdkdom, PSM_KILL); return prlsdkStopEx(privconn, sdkdom, PSM_KILL);
} }
int prlsdkStop(parallelsConnPtr privconn, PRL_HANDLE sdkdom) PRL_RESULT prlsdkStop(parallelsConnPtr privconn, PRL_HANDLE sdkdom)
{ {
return prlsdkStopEx(privconn, sdkdom, PSM_SHUTDOWN); return prlsdkStopEx(privconn, sdkdom, PSM_SHUTDOWN);
} }
int prlsdkPause(parallelsConnPtr privconn, PRL_HANDLE sdkdom) PRL_RESULT prlsdkPause(parallelsConnPtr privconn, PRL_HANDLE sdkdom)
{ {
PRL_HANDLE job = PRL_INVALID_HANDLE; PRL_HANDLE job = PRL_INVALID_HANDLE;
job = PrlVm_Pause(sdkdom, false); job = PrlVm_Pause(sdkdom, false);
return PRL_FAILED(waitJob(job, privconn->jobTimeout)) ? -1 : 0; return waitJob(job, privconn->jobTimeout);
} }
int prlsdkResume(parallelsConnPtr privconn, PRL_HANDLE sdkdom) PRL_RESULT prlsdkResume(parallelsConnPtr privconn, PRL_HANDLE sdkdom)
{ {
PRL_HANDLE job = PRL_INVALID_HANDLE; PRL_HANDLE job = PRL_INVALID_HANDLE;
job = PrlVm_Resume(sdkdom); job = PrlVm_Resume(sdkdom);
return PRL_FAILED(waitJob(job, privconn->jobTimeout)) ? -1 : 0; return waitJob(job, privconn->jobTimeout);
} }
int int
...@@ -1652,7 +1652,9 @@ prlsdkDomainChangeState(virDomainPtr domain, ...@@ -1652,7 +1652,9 @@ prlsdkDomainChangeState(virDomainPtr domain,
parallelsConnPtr privconn = domain->conn->privateData; parallelsConnPtr privconn = domain->conn->privateData;
virDomainObjPtr dom; virDomainObjPtr dom;
parallelsDomObjPtr pdom; parallelsDomObjPtr pdom;
PRL_RESULT pret;
int ret = -1; int ret = -1;
virErrorNumber virerr;
dom = virDomainObjListFindByUUID(privconn->domains, domain->uuid); dom = virDomainObjListFindByUUID(privconn->domains, domain->uuid);
if (dom == NULL) { if (dom == NULL) {
...@@ -1661,8 +1663,24 @@ prlsdkDomainChangeState(virDomainPtr domain, ...@@ -1661,8 +1663,24 @@ prlsdkDomainChangeState(virDomainPtr domain,
} }
pdom = dom->privateData; pdom = dom->privateData;
if ((ret = chstate(privconn, pdom->sdkdom))) pret = chstate(privconn, pdom->sdkdom);
virReportError(VIR_ERR_OPERATION_FAILED,
_("Can't change domain state: %d"), pret);
if (PRL_FAILED(pret)) {
virResetLastError();
switch (pret) {
case PRL_ERR_DISP_VM_IS_NOT_STARTED:
case PRL_ERR_DISP_VM_IS_NOT_STOPPED:
virerr = VIR_ERR_OPERATION_INVALID;
break;
default:
virerr = VIR_ERR_OPERATION_FAILED;
}
virReportError(virerr, "%s", _("Can't change domain state."));
goto cleanup; goto cleanup;
}
ret = prlsdkUpdateDomain(privconn, dom); ret = prlsdkUpdateDomain(privconn, dom);
......
...@@ -41,7 +41,7 @@ int prlsdkStop(parallelsConnPtr privconn, PRL_HANDLE sdkdom); ...@@ -41,7 +41,7 @@ int prlsdkStop(parallelsConnPtr privconn, PRL_HANDLE sdkdom);
int prlsdkPause(parallelsConnPtr privconn, PRL_HANDLE sdkdom); int prlsdkPause(parallelsConnPtr privconn, PRL_HANDLE sdkdom);
int prlsdkResume(parallelsConnPtr privconn, PRL_HANDLE sdkdom); int prlsdkResume(parallelsConnPtr privconn, PRL_HANDLE sdkdom);
typedef int (*prlsdkChangeStateFunc)(parallelsConnPtr privconn, PRL_HANDLE sdkdom); typedef PRL_RESULT (*prlsdkChangeStateFunc)(parallelsConnPtr privconn, PRL_HANDLE sdkdom);
int int
prlsdkDomainChangeState(virDomainPtr domain, prlsdkDomainChangeState(virDomainPtr domain,
prlsdkChangeStateFunc chstate); prlsdkChangeStateFunc chstate);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册