On Tue, Aug 23, 2011 at 05:39:45PM +0800, Osier Yang wrote:
---
src/xen/xen_hypervisor.c | 4 ++--
src/xen/xend_internal.c | 26 +++++++++++++-------------
src/xen/xm_internal.c | 3 ++-
src/xenxs/xen_sxpr.c | 4 ++--
4 files changed, 19 insertions(+), 18 deletions(-)
diff --git a/src/xen/xen_hypervisor.c b/src/xen/xen_hypervisor.c
index cb22b89..77085c9 100644
--- a/src/xen/xen_hypervisor.c
+++ b/src/xen/xen_hypervisor.c
@@ -1457,7 +1457,7 @@ xenHypervisorDomainBlockStats (virDomainPtr dom,
xenUnifiedUnlock(priv);
return ret;
#else
- virXenErrorFunc(VIR_ERR_NO_SUPPORT, __FUNCTION__,
+ virXenErrorFunc(VIR_ERR_OPERATION_INVALID, __FUNCTION__,
"block statistics not supported on this platform",
dom->id);
return -1;
@@ -1495,7 +1495,7 @@ xenHypervisorDomainInterfaceStats (virDomainPtr dom,
return linuxDomainInterfaceStats(path, stats);
#else
- virXenErrorFunc(VIR_ERR_NO_SUPPORT, __FUNCTION__,
+ virXenErrorFunc(VIR_ERR_OPERATION_INVALID, __FUNCTION__,
"/proc/net/dev: Interface not found", 0);
return -1;
#endif
These two changes are incorrect. Although we've registered a
driver impl for the blockstats/interfacestats APIs here, the
#if...#else.. conditional means these impls are no-op for
any non-Linux host. As such returning VIR_ERR_NO_SUPPORT
is correct.
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
index 6d5a854..f44d674 100644
--- a/src/xen/xend_internal.c
+++ b/src/xen/xend_internal.c
@@ -2793,14 +2793,14 @@ xenDaemonAttachDeviceFlags(virDomainPtr domain, const char *xml,
goto cleanup;
}
} else {
- virXendError(VIR_ERR_NO_SUPPORT, "%s",
+ virXendError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("unsupported device type"));
goto cleanup;
}
break;
default:
- virXendError(VIR_ERR_NO_SUPPORT, "%s",
+ virXendError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("unsupported device type"));
goto cleanup;
}
@@ -2921,7 +2921,7 @@ xenDaemonUpdateDeviceFlags(virDomainPtr domain, const char *xml,
break;
default:
- virXendError(VIR_ERR_NO_SUPPORT, "%s",
+ virXendError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("unsupported device type"));
goto cleanup;
}
@@ -3032,7 +3032,7 @@ xenDaemonDetachDeviceFlags(virDomainPtr domain, const char *xml,
if (xenFormatSxprOnePCI(dev->data.hostdev, &buf, 1) < 0)
goto cleanup;
} else {
- virXendError(VIR_ERR_NO_SUPPORT, "%s",
+ virXendError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("unsupported device type"));
goto cleanup;
}
@@ -3222,7 +3222,7 @@ xenDaemonDomainMigratePerform (virDomainPtr domain,
/* Xen doesn't support renaming domains during migration. */
if (dname) {
- virXendError(VIR_ERR_NO_SUPPORT,
+ virXendError(VIR_ERR_OPERATION_INVALID,
"%s", _("xenDaemonDomainMigrate: Xen does not
support"
" renaming domains during migration"));
return -1;
@@ -3232,7 +3232,7 @@ xenDaemonDomainMigratePerform (virDomainPtr domain,
* ignores it.
*/
if (bandwidth) {
- virXendError(VIR_ERR_NO_SUPPORT,
+ virXendError(VIR_ERR_OPERATION_INVALID,
"%s", _("xenDaemonDomainMigrate: Xen does not
support"
" bandwidth limits during migration"));
return -1;
@@ -3260,7 +3260,7 @@ xenDaemonDomainMigratePerform (virDomainPtr domain,
* a nice error message.
*/
if (flags & VIR_MIGRATE_PAUSED) {
- virXendError(VIR_ERR_NO_SUPPORT,
+ virXendError(VIR_ERR_OPERATION_INVALID,
"%s", _("xenDaemonDomainMigrate: xend cannot
migrate paused domains"));
return -1;
}
@@ -3268,7 +3268,7 @@ xenDaemonDomainMigratePerform (virDomainPtr domain,
/* XXX we could easily do tunnelled & peer2peer migration too
if we want to. support these... */
if (flags != 0) {
- virXendError(VIR_ERR_NO_SUPPORT,
+ virXendError(VIR_ERR_OPERATION_INVALID,
"%s", _("xenDaemonDomainMigrate: unsupported
flag"));
return -1;
}
@@ -3569,7 +3569,7 @@ xenDaemonGetSchedulerType(virDomainPtr domain, int *nparams)
/* Support only xendConfigVersion >=4 */
priv = (xenUnifiedPrivatePtr) domain->conn->privateData;
if (priv->xendConfigVersion < 4) {
- virXendError(VIR_ERR_NO_SUPPORT,
+ virXendError(VIR_ERR_OPERATION_INVALID,
"%s", _("unsupported in xendConfigVersion <
4"));
return NULL;
}
@@ -3645,7 +3645,7 @@ xenDaemonGetSchedulerParameters(virDomainPtr domain,
/* Support only xendConfigVersion >=4 */
priv = (xenUnifiedPrivatePtr) domain->conn->privateData;
if (priv->xendConfigVersion < 4) {
- virXendError(VIR_ERR_NO_SUPPORT,
+ virXendError(VIR_ERR_OPERATION_INVALID,
"%s", _("unsupported in xendConfigVersion <
4"));
return (-1);
}
@@ -3752,7 +3752,7 @@ xenDaemonSetSchedulerParameters(virDomainPtr domain,
/* Support only xendConfigVersion >=4 and active domains */
priv = (xenUnifiedPrivatePtr) domain->conn->privateData;
if (priv->xendConfigVersion < 4) {
- virXendError(VIR_ERR_NO_SUPPORT,
+ virXendError(VIR_ERR_OPERATION_INVALID,
"%s", _("unsupported in xendConfigVersion <
4"));
return (-1);
}
@@ -3871,7 +3871,7 @@ xenDaemonDomainBlockPeek (virDomainPtr domain, const char *path,
domain->name);
else {
/* This call always fails for dom0. */
- virXendError(VIR_ERR_NO_SUPPORT,
+ virXendError(VIR_ERR_OPERATION_INVALID,
"%s", _("domainBlockPeek is not supported for
dom0"));
return -1;
}
@@ -4060,7 +4060,7 @@ virDomainXMLDevID(virDomainPtr domain,
if (tmp == NULL)
return -1;
} else {
- virXendError(VIR_ERR_NO_SUPPORT,
+ virXendError(VIR_ERR_OPERATION_INVALID,
"%s", _("hotplug of device type not
supported"));
return -1;
}
All these are incorrect. VIR_ERR_OPERATION_INVALID is for cases where
an API call is not appropriate for the state of the guest. ie attempting
to pause a guest that is shutoff. ie usage of the API is invalid.
In these cases usage of the API *is* valid, but the features are not
suported. So they should be VIR_ERR_ARGUMENT_UNSUPPORTED
diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c
index 95387c9..24311a7 100644
--- a/src/xen/xm_internal.c
+++ b/src/xen/xm_internal.c
@@ -1571,7 +1571,8 @@ xenXMDomainBlockPeek (virDomainPtr dom ATTRIBUTE_UNUSED,
size_t size ATTRIBUTE_UNUSED,
void *buffer ATTRIBUTE_UNUSED)
{
- xenXMError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
+ xenXMError(VIR_ERR_OPERATION_INVALID, "%s",
+ _("block peeking not implemented"));
return -1;
}
The original error is correct here.
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|