XendDomainInfo out from the rest of the code, creating an intermediate
dictionary of common format. This means that the rest of XendDomainInfo can
work whether creating a domain for the first time, or whether xend is
restarted but the domains still exist. This means that xend is now robust in
the face of restarts. The phase of validation of configuration details is
now more explicit, and stronger too.
Change the handling of memory sizes in XendDomainInfo's interface to use KiB
in setMemoryTarget and getMemoryTarget. This gives reasonable granularity
whilst ensuring that we can handle values up to 2TiB without overflowing a
signed 32 bit value. It is not clear that the xend code, especially the C /
Python interface, is either 64-bit clean or unsigned 32-bit clean, so this is
the safest choice for now. The behaviour of Python's shift operator will
change in Python 2.4, so it is best to address this problem once we have moved
to that version.
Determine the backend flags on-the-fly, in getBackendFlags, rather than
computing them in advance in configureBackends and storing the value. Change
addControllerClass so that backend flag information is in this table too,
rather than hard-coded elsewhere.
Improve the error reporting for name clashes.
Remove XendDomainInfo's dependence upon DBMap, and use xstransact directly
instead. This changes the interface from XendDomain to XendDomainInfo, as
paths rather than DBMaps are passed in.
Remove the XendDomainInfo.recreate and restore flags. Since the device and
domain handling is now stateless inside xend, much less work is necessary for
recreate and restore procedures, so we can do without these flags.
Remove XendDomainInfo's unused dependency upon SrvDaemon, and its unnecessary
dependence upon PrettyPrint. Remove the unused show method.
Decouple image.py from XendDomainInfo.bootloader by passing a bootloading flag
into initDomain instead. Decouple it from XendDomainInfo.config by passing
the semiparsed device configuration into create(). Move configuration in
VmxImageHandler so that rather than being scattered around the class it is in
or called from the configure method. Device configuration is no longer
available anywhere else.
From Dan Smith <danms@us.ibm.com>:
I could not find in the existing code the point at which
a domain was added to the XendDomain list after restore. Several
attempts to restore would result in positive log messages, but the
restored domain would not show up in "xm list". This patch includes a
call to _add_domain(), which results in restore working for me.
Signed-off-by: Ewan Mellor <ewan@xensource.com>
_read and _write. Fix gather to not return the string 'None' when reading a
value of type string that does not exist. The value None should be returned
instead.
Signed-off-by: Ewan Mellor <ewan@xensource.com>
parameters between functions in the base classes and those that override them
in subclasses. It's hard to see how this code worked at all.
Signed-off-by: Ewan Mellor <ewan@xensource.com>
previously. This would have caused a memory leak when attempting to get info
on a domain that does not exist.
Signed-off-by: Ewan Mellor <ewan@xensource.com>
underlying xc_domain_setmaxmem already took an unsigned int, and
PyArg_ParseTupleAndKeywords call was only parsing an int, so there is no way
that longer values would get through here in any case. Fixing the documentation
and the local variable is the best solution, until someone decides that we need
to support maxmem values greater than 2TiB.
Signed-off-by: Ewan Mellor <ewan@xensource.com>
xs_write with O_CREAT|O_EXCL causes problems over daemon restarts, since
it's not idempotent.
It turns out noone really needs the flags word at all, so get rid of it.
It's now as if everyone specified "O_CREAT".
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
Also don't add XendDomainInfo object to XendDomain dictionary from
XendDomainInfo object but do it in XendDomain.
Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
Renamed variables type and ord since these clash with built-in names. Renamed
unused variables to mark them as such. Changed scheduler.py to use *args and
**kwargs rather than the strange non-idiomatic imitation of the same.
Signed-off-by: Ewan Mellor <ewan@xensource.com>
configure_maxmem method. The config_handlers mechanism was trying to be a
general configuration-registration framework, but that functionality was
unused and confusing.
Signed-off-by: Ewan Mellor <ewan@xensource.com>
this looks like the resurrection of DevController from controller.py, but the
mechanism is actually very different. Device handling is now stateless inside
xend, relying on the store for state management, reducing DevController
instances to one-shot lifetimes. Dev and its subclasses have gone completely.
The device creation code itself has moved from XendDomainInfo.createDevice into
DevController subclasses, and the previous contents of the subclasses has been
discarded (these subclasses were no longer being called, so all this code was
dead).
XendDomainInfo.getDeviceIds has gone, as it was unused.
XendDomainInfo.delete_device has been subsumed by XendDomainInfo.destroyDevice;
since device handling is now stateless inside xend, the distinction between
device 'deletion' and device 'destruction' is meaningless.
The s-expression describing devices has gone, as this information is no longer
available to xend in the same way, and seems to be unused. If it is required,
it can be reinstated by loading device information from Xen or the store.
Signed-off-by: Ewan Mellor <ewan@xensource.com>
handling exceptions raised inside that transaction. If the creation (start) of
the transaction fails, then t has not been assigned, and in any case no
transaction has been created, so it is wrong to attempt to abort that
(non-existent) transaction.
Signed-off-by: Ewan Mellor <ewan@xensource.com>
setStoreChannel was only ever called with channel=None (implying that the
current channel would be closed) so the other code there was superfluous.
Signed-off-by: Ewan Mellor<ewan@xensource.com>
getTargetMemory inside image.py to decouple the latter from the internals of
the former. Move the definition of xc inside image.py to please pylint.
Signed-off-by: Ewan Mellor<ewan@xensource.com>
getDomain, getName in SrvDomainDir, to decouple the latter from the internals of
the former, in preparation for changes internal to XendDomainInfo.
Signed-off-by: Ewan Mellor<ewan@xensource.com>