提交 05447e3a 编写于 作者: M MATSUDA Daiki 提交者: Daniel Veillard

agent : add @seconds variable to qemuAgentSend().

Add @seconds variable to qemuAgentSend().
When @timemout is true, @seconds controls how long to wait for a
response (if @seconds is VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT,
default to QEMU_AGENT_WAIT_TIME).
In addition, @seconds must be >= 0 or VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT.
If @timeout is false, @seconds is ignored.
Signed-off-by: NMATSUDA Daiki <matsudadik@intellilink.co.jp>
上级 05a66695
...@@ -44,6 +44,13 @@ virDomainPtr virDomainQemuAttach(virConnectPtr domain, ...@@ -44,6 +44,13 @@ virDomainPtr virDomainQemuAttach(virConnectPtr domain,
unsigned int pid_value, unsigned int pid_value,
unsigned int flags); unsigned int flags);
typedef enum {
VIR_DOMAIN_QEMU_AGENT_COMMAND_MIN = -2,
VIR_DOMAIN_QEMU_AGENT_COMMAND_BLOCK = -2,
VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT = -1,
VIR_DOMAIN_QEMU_AGENT_COMMAND_NOWAIT = 0,
} virDomainQemuAgentCommandTimeoutValues;
# ifdef __cplusplus # ifdef __cplusplus
} }
# endif # endif
......
...@@ -837,6 +837,8 @@ void qemuAgentClose(qemuAgentPtr mon) ...@@ -837,6 +837,8 @@ void qemuAgentClose(qemuAgentPtr mon)
* @mon: Monitor * @mon: Monitor
* @msg: Message * @msg: Message
* @timeout: use timeout? * @timeout: use timeout?
* @seconds: timeout seconds. if VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT and
* @timeout is true, use default value.
* *
* Send @msg to agent @mon. * Send @msg to agent @mon.
* Wait max QEMU_AGENT_WAIT_TIME for agent * Wait max QEMU_AGENT_WAIT_TIME for agent
...@@ -848,7 +850,8 @@ void qemuAgentClose(qemuAgentPtr mon) ...@@ -848,7 +850,8 @@ void qemuAgentClose(qemuAgentPtr mon)
*/ */
static int qemuAgentSend(qemuAgentPtr mon, static int qemuAgentSend(qemuAgentPtr mon,
qemuAgentMessagePtr msg, qemuAgentMessagePtr msg,
bool timeout) bool timeout,
int seconds)
{ {
int ret = -1; int ret = -1;
unsigned long long now, then = 0; unsigned long long now, then = 0;
...@@ -864,7 +867,10 @@ static int qemuAgentSend(qemuAgentPtr mon, ...@@ -864,7 +867,10 @@ static int qemuAgentSend(qemuAgentPtr mon,
if (timeout) { if (timeout) {
if (virTimeMillisNow(&now) < 0) if (virTimeMillisNow(&now) < 0)
return -1; return -1;
then = now + QEMU_AGENT_WAIT_TIME; if (!(seconds >= 0 || seconds == VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT))
return -1;
then = now + (seconds == VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT ?
QEMU_AGENT_WAIT_TIME : seconds * 1000ull);
} }
mon->msg = msg; mon->msg = msg;
...@@ -937,7 +943,8 @@ qemuAgentGuestSync(qemuAgentPtr mon) ...@@ -937,7 +943,8 @@ qemuAgentGuestSync(qemuAgentPtr mon)
VIR_DEBUG("Sending guest-sync command with ID: %llu", id); VIR_DEBUG("Sending guest-sync command with ID: %llu", id);
send_ret = qemuAgentSend(mon, &sync_msg, true); send_ret = qemuAgentSend(mon, &sync_msg, true,
VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT);
VIR_DEBUG("qemuAgentSend returned: %d", send_ret); VIR_DEBUG("qemuAgentSend returned: %d", send_ret);
...@@ -977,7 +984,8 @@ cleanup: ...@@ -977,7 +984,8 @@ cleanup:
static int static int
qemuAgentCommand(qemuAgentPtr mon, qemuAgentCommand(qemuAgentPtr mon,
virJSONValuePtr cmd, virJSONValuePtr cmd,
virJSONValuePtr *reply) virJSONValuePtr *reply,
int seconds)
{ {
int ret = -1; int ret = -1;
qemuAgentMessage msg; qemuAgentMessage msg;
...@@ -1003,9 +1011,9 @@ qemuAgentCommand(qemuAgentPtr mon, ...@@ -1003,9 +1011,9 @@ qemuAgentCommand(qemuAgentPtr mon,
} }
msg.txLength = strlen(msg.txBuffer); msg.txLength = strlen(msg.txBuffer);
VIR_DEBUG("Send command '%s' for write", cmdstr); VIR_DEBUG("Send command '%s' for write, seconds = %d", cmdstr, seconds);
ret = qemuAgentSend(mon, &msg, false); ret = qemuAgentSend(mon, &msg, seconds < -1 ? false : true, seconds);
VIR_DEBUG("Receive command reply ret=%d rxObject=%p", VIR_DEBUG("Receive command reply ret=%d rxObject=%p",
ret, msg.rxObject); ret, msg.rxObject);
...@@ -1283,7 +1291,8 @@ int qemuAgentShutdown(qemuAgentPtr mon, ...@@ -1283,7 +1291,8 @@ int qemuAgentShutdown(qemuAgentPtr mon,
return -1; return -1;
mon->await_event = QEMU_AGENT_EVENT_SHUTDOWN; mon->await_event = QEMU_AGENT_EVENT_SHUTDOWN;
ret = qemuAgentCommand(mon, cmd, &reply); ret = qemuAgentCommand(mon, cmd, &reply,
VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT);
if (reply && ret == 0) if (reply && ret == 0)
ret = qemuAgentCheckError(cmd, reply); ret = qemuAgentCheckError(cmd, reply);
...@@ -1315,7 +1324,8 @@ int qemuAgentFSFreeze(qemuAgentPtr mon) ...@@ -1315,7 +1324,8 @@ int qemuAgentFSFreeze(qemuAgentPtr mon)
if (!cmd) if (!cmd)
return -1; return -1;
if (qemuAgentCommand(mon, cmd, &reply) < 0 || if (qemuAgentCommand(mon, cmd, &reply,
VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT) < 0 ||
qemuAgentCheckError(cmd, reply) < 0) qemuAgentCheckError(cmd, reply) < 0)
goto cleanup; goto cleanup;
...@@ -1352,7 +1362,8 @@ int qemuAgentFSThaw(qemuAgentPtr mon) ...@@ -1352,7 +1362,8 @@ int qemuAgentFSThaw(qemuAgentPtr mon)
if (!cmd) if (!cmd)
return -1; return -1;
if (qemuAgentCommand(mon, cmd, &reply) < 0 || if (qemuAgentCommand(mon, cmd, &reply,
VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT) < 0 ||
qemuAgentCheckError(cmd, reply) < 0) qemuAgentCheckError(cmd, reply) < 0)
goto cleanup; goto cleanup;
...@@ -1389,7 +1400,8 @@ qemuAgentSuspend(qemuAgentPtr mon, ...@@ -1389,7 +1400,8 @@ qemuAgentSuspend(qemuAgentPtr mon,
return -1; return -1;
mon->await_event = QEMU_AGENT_EVENT_SUSPEND; mon->await_event = QEMU_AGENT_EVENT_SUSPEND;
ret = qemuAgentCommand(mon, cmd, &reply); ret = qemuAgentCommand(mon, cmd, &reply,
VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT);
if (reply && ret == 0) if (reply && ret == 0)
ret = qemuAgentCheckError(cmd, reply); ret = qemuAgentCheckError(cmd, reply);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册