[packagekit] The dbus backend

Tim Lauridsen tim.lauridsen at googlemail.com
Mon Feb 11 23:59:22 PST 2008


Richard Hughes wrote:
> rnorwood and I have been working on the yum2 dbus backend. I've actually
> got the yum2 backend to run now, with search times down from 3 seconds
> to 0.7 seconds. So quite a dramatic speedup. Good stuff to look forward
> to.
> 

Cool !!!
How do i test it, in an easy way ?

> What I really want to do is emit the enumerated values up the stack as
> numeric types. This poses a problem for python I think:
> 
> enum.py:
> STATUS_CANCEL = "cancel"
> STATUS_CLEANUP = "cleanup"
> 
> yumDBUSbackend.py:
> ...
>     self.StatusChanged(STATUS_WAIT)
> ...
>     @dbus.service.signal(dbus_interface=PACKAGEKIT_DBUS_INTERFACE,
>                          signature='u')
>     def StatusChanged(self, status):
>         print "StatusChanged (%i)" % (status)
> 
> So, the dbus interface is expecting an integer back (corresponding to
> src/pk-common.h) and python is passing back a string, hence boom.
> 
> So we have two ways to do this:
> 
> enum.py:
> STATUS_CANCEL_ID = 4
> STATUS_CLEANUP_ID = 7
> STATUS_CANCEL = "cancel"
> STATUS_CLEANUP = "cleanup"
> 
> yumDBUSbackend.py:
> ...
>     self.StatusChanged(STATUS_WAIT_ID)
> ...
>     @dbus.service.signal(dbus_interface=PACKAGEKIT_DBUS_INTERFACE,
>                          signature='u')
>     def StatusChanged(self, status):
>         print "StatusChanged (%i)" % (status)
> 
> This is the most efficient way, although needs a whole set of new
> constants, although, these are trivially autogenerated using Toms magic
> generator.
> 
> Or, we could just send text and parse the text back into enumerated
> types in the deamon, albeit with a speed penalty.
> 
> There's no API or ABI guarantees for DBUS modules for IPC (shoulnd't be
> built out of tree), so I'm not scared of using raw uint32 numbers.
> 
> So, do we be efficient and pass back integers (risking ABI breakage), or
> do it belt and braces and parse each one in the daemon.
> 
> Comments welcome.
> 

Adding new constants is the right way to go IMO, to not break the old 
backends.

Tim



More information about the PackageKit mailing list