mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 21:55:25 +00:00
virsh: blockjob: Extract block job info code into a separate function
cmdBlockJob will be converted to a hub that will call into the individual executor functions.
This commit is contained in:
parent
ac3ed2085f
commit
dda95b531f
@ -2451,47 +2451,19 @@ vshDomainBlockJobToString(int type)
|
|||||||
return str ? _(str) : _("Unknown job");
|
return str ? _(str) : _("Unknown job");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
cmdBlockJob(vshControl *ctl, const vshCmd *cmd)
|
vshBlockJobInfo(vshControl *ctl,
|
||||||
|
virDomainPtr dom,
|
||||||
|
const char *path,
|
||||||
|
bool raw,
|
||||||
|
bool bytes)
|
||||||
{
|
{
|
||||||
virDomainBlockJobInfo info;
|
virDomainBlockJobInfo info;
|
||||||
|
unsigned long long speed;
|
||||||
|
unsigned int flags = 0;
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
int rc = -1;
|
int rc = -1;
|
||||||
bool raw = vshCommandOptBool(cmd, "raw");
|
|
||||||
bool bytes = vshCommandOptBool(cmd, "bytes");
|
|
||||||
bool abortMode = (vshCommandOptBool(cmd, "abort") ||
|
|
||||||
vshCommandOptBool(cmd, "async") ||
|
|
||||||
vshCommandOptBool(cmd, "pivot"));
|
|
||||||
bool infoMode = vshCommandOptBool(cmd, "info") || raw;
|
|
||||||
bool bandwidth = vshCommandOptBool(cmd, "bandwidth");
|
|
||||||
virDomainPtr dom = NULL;
|
|
||||||
const char *path;
|
|
||||||
unsigned int flags = 0;
|
|
||||||
unsigned long long speed;
|
|
||||||
|
|
||||||
if (abortMode + infoMode + bandwidth > 1) {
|
|
||||||
vshError(ctl, "%s",
|
|
||||||
_("conflict between abort, info, and bandwidth modes"));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
/* XXX also support --bytes with bandwidth mode */
|
|
||||||
if (bytes && (abortMode || bandwidth)) {
|
|
||||||
vshError(ctl, "%s", _("--bytes requires info mode"));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (abortMode)
|
|
||||||
return blockJobImpl(ctl, cmd, VSH_CMD_BLOCK_JOB_ABORT, NULL);
|
|
||||||
if (bandwidth)
|
|
||||||
return blockJobImpl(ctl, cmd, VSH_CMD_BLOCK_JOB_SPEED, NULL);
|
|
||||||
|
|
||||||
/* Everything below here is for --info mode */
|
|
||||||
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
/* XXX Allow path to be optional to list info on all devices at once */
|
|
||||||
if (vshCommandOptStringReq(ctl, cmd, "path", &path) < 0)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
/* If bytes were requested, or if raw mode is not forcing a MiB/s
|
/* If bytes were requested, or if raw mode is not forcing a MiB/s
|
||||||
* query and cache can't prove failure, then query bytes/sec. */
|
* query and cache can't prove failure, then query bytes/sec. */
|
||||||
@ -2556,7 +2528,54 @@ cmdBlockJob(vshControl *ctl, const vshCmd *cmd)
|
|||||||
}
|
}
|
||||||
vshPrint(ctl, "\n");
|
vshPrint(ctl, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = true;
|
ret = true;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static bool
|
||||||
|
cmdBlockJob(vshControl *ctl, const vshCmd *cmd)
|
||||||
|
{
|
||||||
|
bool ret = false;
|
||||||
|
bool raw = vshCommandOptBool(cmd, "raw");
|
||||||
|
bool bytes = vshCommandOptBool(cmd, "bytes");
|
||||||
|
bool abortMode = (vshCommandOptBool(cmd, "abort") ||
|
||||||
|
vshCommandOptBool(cmd, "async") ||
|
||||||
|
vshCommandOptBool(cmd, "pivot"));
|
||||||
|
bool infoMode = vshCommandOptBool(cmd, "info") || raw;
|
||||||
|
bool bandwidth = vshCommandOptBool(cmd, "bandwidth");
|
||||||
|
virDomainPtr dom = NULL;
|
||||||
|
const char *path;
|
||||||
|
|
||||||
|
if (abortMode + infoMode + bandwidth > 1) {
|
||||||
|
vshError(ctl, "%s",
|
||||||
|
_("conflict between abort, info, and bandwidth modes"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
/* XXX also support --bytes with bandwidth mode */
|
||||||
|
if (bytes && (abortMode || bandwidth)) {
|
||||||
|
vshError(ctl, "%s", _("--bytes requires info mode"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (abortMode)
|
||||||
|
return blockJobImpl(ctl, cmd, VSH_CMD_BLOCK_JOB_ABORT, NULL);
|
||||||
|
if (bandwidth)
|
||||||
|
return blockJobImpl(ctl, cmd, VSH_CMD_BLOCK_JOB_SPEED, NULL);
|
||||||
|
|
||||||
|
/* Everything below here is for --info mode */
|
||||||
|
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
/* XXX Allow path to be optional to list info on all devices at once */
|
||||||
|
if (vshCommandOptStringReq(ctl, cmd, "path", &path) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
ret = vshBlockJobInfo(ctl, dom, path, raw, bytes);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (dom)
|
if (dom)
|
||||||
virDomainFree(dom);
|
virDomainFree(dom);
|
||||||
|
Loading…
Reference in New Issue
Block a user