Add xyz.openbmc_project.ObjectMapper.Private

The mapper client bindings currently use the NameOwnerChanged
signal as a trigger for a mapper query when waiting for an
object to appear on the bus.  This works because at the moment
the mapper returns a busy response to clients in the window
between NameOwnerChanged and completion of its discovery.

A forthcoming patch will change this behavior such that the
mapper will go ahead and respond in the window to improve
overall mapper responsiveness, at the cost of the current
causal ordering guarantee.

The ordering guarantee is what allows the current wait binding
implementation to work.  Without it, the wait binding requires
a means to determine when it is safe to make a make a query.

Add a new mapper interface xyz.openbmc_project.ObjectMapper.Private
with a single signal IntrospectionComplete to meet this
requirement.  "Private" because the signal should only be
consumed by the mapper client bindings.

Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Change-Id: Ia7b65cd7edd37c49fa7b5ad808b0c59304c68717
diff --git a/obmc/mapper/server.py b/obmc/mapper/server.py
index 8247568..fba4c9b 100644
--- a/obmc/mapper/server.py
+++ b/obmc/mapper/server.py
@@ -286,6 +286,7 @@
 
             for x in pending:
                 x()
+            self.IntrospectionComplete(owner)
 
     def discovery_error(self, owner, path, e):
         if owner in self.defer_signals:
@@ -737,6 +738,10 @@
 
         return self.filter_interfaces(list(objs.iteritems()), interfaces)
 
+    @dbus.service.signal(obmc.mapper.MAPPER_IFACE + '.Private', 's')
+    def IntrospectionComplete(self, name):
+        pass
+
 
 def server_main():
     dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)