[libvirt] [PATCH 1/2] vz: support virDomainSetVcpus

Acked-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com> Signed-off-by: Konstantin Neumoin <kneumoin@virtuozzo.com> --- src/vz/vz_driver.c | 43 +++++++++++++++++++++++++++++++++++++++++++ src/vz/vz_sdk.c | 23 +++++++++++++++++++++++ src/vz/vz_sdk.h | 1 + 3 files changed, 67 insertions(+) diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c index da83a8f..ed7132f 100644 --- a/src/vz/vz_driver.c +++ b/src/vz/vz_driver.c @@ -3905,6 +3905,47 @@ vzDomainReset(virDomainPtr domain, unsigned int flags) return ret; } +static int vzDomainSetVcpusFlags(virDomainPtr domain, unsigned int nvcpus, + unsigned int flags) +{ + virDomainObjPtr dom = NULL; + int ret = -1; + bool job = false; + + virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | + VIR_DOMAIN_AFFECT_CONFIG, -1); + + if (!(dom = vzDomObjFromDomainRef(domain))) + goto cleanup; + + if (vzCheckConfigUpdateFlags(dom, &flags) < 0) + goto cleanup; + + if (virDomainSetVcpusFlagsEnsureACL(domain->conn, dom->def, flags) < 0) + goto cleanup; + + if (vzDomainObjBeginJob(dom) < 0) + goto cleanup; + job = true; + + if (vzEnsureDomainExists(dom) < 0) + goto cleanup; + + ret = prlsdkSetCpuCount(dom, nvcpus); + + cleanup: + if (job) + vzDomainObjEndJob(dom); + virDomainObjEndAPI(&dom); + return ret; +} + +static int vzDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) +{ + return vzDomainSetVcpusFlags(dom, nvcpus, + VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG); +} + static virHypervisorDriver vzHypervisorDriver = { .name = "vz", .connectOpen = vzConnectOpen, /* 0.10.0 */ @@ -3954,6 +3995,8 @@ static virHypervisorDriver vzHypervisorDriver = { .domainDetachDeviceFlags = vzDomainDetachDeviceFlags, /* 1.2.15 */ .domainIsActive = vzDomainIsActive, /* 1.2.10 */ .domainIsUpdated = vzDomainIsUpdated, /* 1.2.21 */ + .domainSetVcpus = vzDomainSetVcpus, /* 3.3.0 */ + .domainSetVcpusFlags = vzDomainSetVcpusFlags, /* 3.3.0 */ .domainGetVcpusFlags = vzDomainGetVcpusFlags, /* 1.2.21 */ .domainGetMaxVcpus = vzDomainGetMaxVcpus, /* 1.2.21 */ .domainSetUserPassword = vzDomainSetUserPassword, /* 2.0.0 */ diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c index c1a50fd..2daa44a 100644 --- a/src/vz/vz_sdk.c +++ b/src/vz/vz_sdk.c @@ -4902,3 +4902,26 @@ int prlsdkMigrate(virDomainObjPtr dom, virURIPtr uri, cleanup: return ret; } + +int prlsdkSetCpuCount(virDomainObjPtr dom, unsigned int count) +{ + vzDomObjPtr privdom = dom->privateData; + PRL_HANDLE job; + PRL_RESULT pret; + + job = PrlVm_BeginEdit(privdom->sdkdom); + if (PRL_FAILED(waitDomainJob(job, dom))) + goto error; + + pret = PrlVmCfg_SetCpuCount(privdom->sdkdom, count); + prlsdkCheckRetGoto(pret, error); + + job = PrlVm_CommitEx(privdom->sdkdom, 0); + if (PRL_FAILED(waitDomainJob(job, dom))) + goto error; + + return 0; + + error: + return -1; +} diff --git a/src/vz/vz_sdk.h b/src/vz/vz_sdk.h index f8da2ad..100a5e3 100644 --- a/src/vz/vz_sdk.h +++ b/src/vz/vz_sdk.h @@ -71,6 +71,7 @@ int prlsdkGetMemoryStats(PRL_HANDLE sdkstas, virDomainMemoryStatPtr stats, unsigned int nr_stats); /* memsize is in MiB */ int prlsdkSetMemsize(virDomainObjPtr dom, unsigned int memsize); +int prlsdkSetCpuCount(virDomainObjPtr dom, unsigned int count); int prlsdkDomainSetUserPassword(virDomainObjPtr dom, const char *user, -- 2.7.4

Acked-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com> Signed-off-by: Konstantin Neumoin <kneumoin@virtuozzo.com> --- src/vz/vz_driver.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/vz/vz_sdk.c | 37 ++++++++++++++++++++++++++++++++++ src/vz/vz_sdk.h | 1 + 3 files changed, 96 insertions(+) diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c index ed7132f..059e7c9 100644 --- a/src/vz/vz_driver.c +++ b/src/vz/vz_driver.c @@ -3945,6 +3945,63 @@ static int vzDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) return vzDomainSetVcpusFlags(dom, nvcpus, VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG); } +static int +vzDomainBlockResize(virDomainPtr domain, + const char *path, + unsigned long long size, + unsigned int flags) +{ + virDomainObjPtr dom = NULL; + virDomainDiskDefPtr disk = NULL; + int ret = -1; + bool job = false; + + virCheckFlags(VIR_DOMAIN_BLOCK_RESIZE_BYTES, -1); + + if (!(dom = vzDomObjFromDomainRef(domain))) + goto cleanup; + + if (virDomainBlockResizeEnsureACL(domain->conn, dom->def) < 0) + goto cleanup; + + if (path[0] == '\0') { + virReportError(VIR_ERR_INVALID_ARG, + "%s", _("empty path")); + goto cleanup; + } + + /* sdk wants Mb */ + if (flags & VIR_DOMAIN_BLOCK_RESIZE_BYTES) + size /= 1024; + size /= 1024; + + if (!(disk = virDomainDiskByName(dom->def, path, false))) { + virReportError(VIR_ERR_INVALID_ARG, + _("invalid path: %s"), path); + goto cleanup; + } + + if (vzDomainObjBeginJob(dom) < 0) + goto cleanup; + job = true; + + if (vzEnsureDomainExists(dom) < 0) + goto cleanup; + + if (!virDomainObjIsActive(dom)) { + virReportError(VIR_ERR_OPERATION_INVALID, + "%s", _("domain is not running")); + goto cleanup; + } + + ret = prlsdkResizeImage(dom, disk, size); + + cleanup: + if (job) + vzDomainObjEndJob(dom); + virDomainObjEndAPI(&dom); + return ret; +} static virHypervisorDriver vzHypervisorDriver = { .name = "vz", @@ -4046,6 +4103,7 @@ static virHypervisorDriver vzHypervisorDriver = { .connectGetAllDomainStats = vzConnectGetAllDomainStats, /* 3.1.0 */ .domainAbortJob = vzDomainAbortJob, /* 3.1.0 */ .domainReset = vzDomainReset, /* 3.1.0 */ + .domainBlockResize = vzDomainBlockResize, /* 3.3.0 */ }; static virConnectDriver vzConnectDriver = { diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c index 2daa44a..4d2c6b0 100644 --- a/src/vz/vz_sdk.c +++ b/src/vz/vz_sdk.c @@ -4925,3 +4925,40 @@ int prlsdkSetCpuCount(virDomainObjPtr dom, unsigned int count) error: return -1; } + +int prlsdkResizeImage(virDomainObjPtr dom, virDomainDiskDefPtr disk, + unsigned long long newsize) +{ + int ret = -1; + PRL_RESULT pret; + vzDomObjPtr privdom = dom->privateData; + PRL_UINT32 emulatedType; + PRL_HANDLE job = PRL_INVALID_HANDLE; + PRL_HANDLE prldisk = PRL_INVALID_HANDLE; + + prldisk = prlsdkGetDisk(privdom->sdkdom, disk); + if (prldisk == PRL_INVALID_HANDLE) + goto cleanup; + + pret = PrlVmDev_GetEmulatedType(prldisk, &emulatedType); + prlsdkCheckRetGoto(pret, cleanup); + + if (emulatedType != PDT_USE_IMAGE_FILE && + emulatedType != PDT_USE_FILE_SYSTEM) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("Only disk image supported for resize")); + goto cleanup; + } + + job = PrlVmDev_ResizeImage(prldisk, newsize, + PRIF_RESIZE_LAST_PARTITION); + if (PRL_FAILED(waitJob(job))) + goto cleanup; + + ret = 0; + + cleanup: + + PrlHandle_Free(prldisk); + return ret; +} diff --git a/src/vz/vz_sdk.h b/src/vz/vz_sdk.h index 100a5e3..0a77431 100644 --- a/src/vz/vz_sdk.h +++ b/src/vz/vz_sdk.h @@ -90,3 +90,4 @@ prlsdkMigrate(virDomainObjPtr dom, PRL_HANDLE prlsdkSdkDomainLookupByName(vzDriverPtr driver, const char *name); int prlsdkCancelJob(virDomainObjPtr dom); +int prlsdkResizeImage(virDomainObjPtr dom, virDomainDiskDefPtr disk, unsigned long long newsize); -- 2.7.4

14-Apr-17 17:53, Konstantin Neumoin пишет:
Acked-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com> Signed-off-by: Konstantin Neumoin <kneumoin@virtuozzo.com> --- src/vz/vz_driver.c | 43 +++++++++++++++++++++++++++++++++++++++++++ src/vz/vz_sdk.c | 23 +++++++++++++++++++++++ src/vz/vz_sdk.h | 1 + 3 files changed, 67 insertions(+)
diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c index da83a8f..ed7132f 100644 --- a/src/vz/vz_driver.c +++ b/src/vz/vz_driver.c @@ -3905,6 +3905,47 @@ vzDomainReset(virDomainPtr domain, unsigned int flags) return ret; }
+static int vzDomainSetVcpusFlags(virDomainPtr domain, unsigned int nvcpus, + unsigned int flags) +{ + virDomainObjPtr dom = NULL; + int ret = -1; + bool job = false; + + virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | + VIR_DOMAIN_AFFECT_CONFIG, -1); + + if (!(dom = vzDomObjFromDomainRef(domain))) + goto cleanup; + + if (vzCheckConfigUpdateFlags(dom, &flags) < 0) + goto cleanup; + + if (virDomainSetVcpusFlagsEnsureACL(domain->conn, dom->def, flags) < 0) + goto cleanup; + + if (vzDomainObjBeginJob(dom) < 0) + goto cleanup; + job = true; + + if (vzEnsureDomainExists(dom) < 0) + goto cleanup; + + ret = prlsdkSetCpuCount(dom, nvcpus); + + cleanup: + if (job) + vzDomainObjEndJob(dom); + virDomainObjEndAPI(&dom); + return ret; +} + +static int vzDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) +{ + return vzDomainSetVcpusFlags(dom, nvcpus, + VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG); +} + static virHypervisorDriver vzHypervisorDriver = { .name = "vz", .connectOpen = vzConnectOpen, /* 0.10.0 */ @@ -3954,6 +3995,8 @@ static virHypervisorDriver vzHypervisorDriver = { .domainDetachDeviceFlags = vzDomainDetachDeviceFlags, /* 1.2.15 */ .domainIsActive = vzDomainIsActive, /* 1.2.10 */ .domainIsUpdated = vzDomainIsUpdated, /* 1.2.21 */ + .domainSetVcpus = vzDomainSetVcpus, /* 3.3.0 */ + .domainSetVcpusFlags = vzDomainSetVcpusFlags, /* 3.3.0 */ .domainGetVcpusFlags = vzDomainGetVcpusFlags, /* 1.2.21 */ .domainGetMaxVcpus = vzDomainGetMaxVcpus, /* 1.2.21 */ .domainSetUserPassword = vzDomainSetUserPassword, /* 2.0.0 */ diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c index c1a50fd..2daa44a 100644 --- a/src/vz/vz_sdk.c +++ b/src/vz/vz_sdk.c @@ -4902,3 +4902,26 @@ int prlsdkMigrate(virDomainObjPtr dom, virURIPtr uri, cleanup: return ret; } + +int prlsdkSetCpuCount(virDomainObjPtr dom, unsigned int count) +{ + vzDomObjPtr privdom = dom->privateData; + PRL_HANDLE job; + PRL_RESULT pret; + + job = PrlVm_BeginEdit(privdom->sdkdom); + if (PRL_FAILED(waitDomainJob(job, dom))) + goto error; + + pret = PrlVmCfg_SetCpuCount(privdom->sdkdom, count); + prlsdkCheckRetGoto(pret, error); + + job = PrlVm_CommitEx(privdom->sdkdom, 0); + if (PRL_FAILED(waitDomainJob(job, dom))) + goto error; + + return 0; + + error: + return -1; +} diff --git a/src/vz/vz_sdk.h b/src/vz/vz_sdk.h index f8da2ad..100a5e3 100644 --- a/src/vz/vz_sdk.h +++ b/src/vz/vz_sdk.h @@ -71,6 +71,7 @@ int prlsdkGetMemoryStats(PRL_HANDLE sdkstas, virDomainMemoryStatPtr stats, unsigned int nr_stats); /* memsize is in MiB */ int prlsdkSetMemsize(virDomainObjPtr dom, unsigned int memsize); +int prlsdkSetCpuCount(virDomainObjPtr dom, unsigned int count); int prlsdkDomainSetUserPassword(virDomainObjPtr dom, const char *user, -- 2.7.4
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
ACK to both and pushed. Thanks, Maxim
participants (2)
-
Konstantin Neumoin
-
Maxim Nestratov