
Comments inline below Daniel Veillard wrote on 10/29/2008 01:09 PM: ...
+def myDomainEventCallback1 (conn, dom, event, opaque): + print "myDomainEventCallback1 EVENT: Domain %s(%s) %s" % (dom.name(), dom.ID(), eventToString(event)) + +def myDomainEventCallback2 (conn, dom, event, opaque): + print "myDomainEventCallback2 EVENT: Domain %s(%s) %s" % (dom.name(), dom.ID(), eventToString(event))
Thinking out loud, maybe we should allow dom to be NULL/None in examples, if we extend the API later to add node related events dom would be NULL, isn't it
I was under the impression that re-use of this API was undesired, and that the events API would be extended to call out each event class explicitly (IIRC, Daniel B suggested this) If we were to extend the API, there would be a virConnectNodeEventRegister/Deregister and associated callbacks, with their own signatures. So - we would not be mxing NodeEventCallbacks, and DomainEventCallbacks with the same python code.
[...]
+########################################## +# Main +########################################## + +def usage(): + print "usage: "+os.path.basename(sys.argv[0])+" [uri]" + print " uri will default to qemu:///system"
ideally for regression testing it would be nice to be able to provide a test driver definition, but augmented with an emulated scenario, things like: <scenario> <event type="start"> <domain type='test2'> <name>test2</name> <memory>512000</memory> <currentMemory>512000</currentMemory> <vcpu>2</vcpu> <os> <type arch='i686'>hvm</type> <boot dev='hd'/> </os> </domain> </event> <event type="pause"> <domain name="test"/> </event> <event type="resume"> <domain name="test"/> </event> <event type="destroy"> <domain name="test2"/> </event> </scenario>
I really have no knowledge of how the test driver works, or how to design a test of this code. Ad discussed in an earlier thread - since this event code depends on OS state, I made no effort to design tests to exercise the code, beyond the example app. While I agree that a regression test would be desirable, I really don't know how that would be accomplished. ...
+static PyObject * +libvirt_virEventRegisterImpl(ATTRIBUTE_UNUSED PyObject * self, + PyObject * args) +{ + Py_XDECREF(addHandleObj); + Py_XDECREF(updateHandleObj); + Py_XDECREF(removeHandleObj); + Py_XDECREF(addTimeoutObj); + Py_XDECREF(updateTimeoutObj); + Py_XDECREF(removeTimeoutObj);
hum, maybe the ParseTuple should be done before onto temporary variables and then only DECREF, right now if the parse fails, then the next event may lead to a crash due to garbage collected code :-)
hmmm...maybe I'm misunderstanding how XDECREF works...I thought it would not dec the ref if the object was NULL Other than the above comments, I think the other suggestions are good ones. I'll take a look. Ben