2006/11/20, Jos van den Oever &lt;<a href="mailto:jvdoever@gmail.com">jvdoever@gmail.com</a>&gt;:<div><span class="gmail_quote"></span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
2006/11/19, Mikkel Kamstrup Erlandsen &lt;<a href="mailto:mikkel.kamstrup@gmail.com">mikkel.kamstrup@gmail.com</a>&gt;:<br>&gt; In a stateless lib you don't have to do any bookkeeping, the list of<br>&gt; providers would be created when the app asks for it. Here's a short sketch
<br>&gt; of how I figure the workflow:<br>&gt;<br>&gt; App: calls lib.getSearchProvider (interface_name)<br>&gt; lib: emit a SearchProvidersSpeakUp(iface_name) signal over<br>&gt; dbus<br>&gt; SearchProvider: return its object path to the lib
<br>&gt; lib: select a provider from the candidates if there's more than one<br>&gt; lib: return candidates object_path<br>&gt; App: dbus connect to iface, object_path<br>&gt;<br>&gt; Does this make sense? What I really wanna do is push as much book keeping to
<br>&gt; dbus itself, since it already does a great deal of what we actually need...<br><br>The question is: how long should you wait for search engines to<br>register themselves before doing any searching? I you have a manager,
<br>you get one reply, this you know. In your scenario, you do not know<br>how long you have to wait. If a search engine is currently swapped out<br>it may take more then a second for it to respond. So the latency of<br>the first operation is the maximum latency you expect a search
<br>application to have.</blockquote><div><br>Wont the result be the same if the search manager is swapped out? Also
apps could easily connect to dbus services async or in an idle call,
when I write user end apps I usually do this to reduce any potential
waiting (it is very fast in 99% of the cases though).
<br>&nbsp;</div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">This is also the argument against introspection. The number of objects<br>may be very large and thus introspection can take forever, again
<br>because you dont know if an app is there.<br><br>The dbus daemon itself does not cache the info we're looking for, so<br>we need to cache it somewhere. There are two options:<br>- a library that reads from a file in which search engines write that
<br>they are available and under which object<br>- a daemon that has this info<br><br>The scenario with the file is awkward for a number of reasons: which<br>language should the library be written in? and what to do if an
<br>application crashes without removing it's name from the list? The<br>daemon can be automatically updated when the name of the application<br>is unregistered.</blockquote><div><br><br>The whole idea with the lib is to have a stateless
implementation, thus no files on disk to cache stuff. Basically I just
want to go through your whole registration step each time an
application requests a specific interface. This way it'll always be up
to date.
<br><br>If the search engine dies (like in crashing and not shutting
down cleanly) underneath the running application it would have to
re-request an object path for the interface. As far as I can tell it is
the same with the daemon, or?
<br><br>Language? C or C++ I guess, no qt or glib. Like your search manager.<br><br>When
I think about it the memory issue is less important since linking
against a light shared lib or having a light daemon run will probably
give roughly the same small memory overhead.
<br><br>Looking through your code it seems that a lot of it would work
in a lib too - it is going to perform almost the same stuff anyway...
As you may guess I'm still not totally hooked on the daemon idea - I'm
still not rejecting it either.
<br><br>Another issue is D-Bus activation. Should we even assume the
search daemon is running when we look for interface providers? Tracker,
for instance, can be started by dbus activation - I don't know about
Strigi, but Beagle can't do this I think. D-Bus activation makes a lot
of sense I think. Some users simply don't use searching, and with
activation they get zero-nadda-no overhead if they don't do searches.
<br><br>I'm not 100% sure how to handle the whole deal if we take dbus
activation into account. Then we'd have to do
org.freedesktop.DBus.ListActiva<div>tableNames() and some black magic
to check what interfaces where provided by the non-running activatables
- without activating them!
<br>&nbsp;</div>Cheers,<br>Mikkel<br><br></div></div>