server: Serve well-known bus names
Prior to this patch the mapper served unique connection
names. Serve well-known names instead so clients can
cache mapper lookup results.
Tested: Manually verified mapper content and signals in the
following workflows:
- Service discovery
- Interface added post discovery
- Interface removed post discovery
- Bus disconnect post discovery
- Bus connect post discovery
- Association added post discovery
- Association removed post discovery
- Association modified post discovery
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Change-Id: Ia697c86dc287b6e289ea6d84364b24ef9a2c18c8
diff --git a/obmc/mapper/server.py b/obmc/mapper/server.py
index 11e93ed..aa4c1e3 100644
--- a/obmc/mapper/server.py
+++ b/obmc/mapper/server.py
@@ -206,10 +206,8 @@
self.service = None
self.index = {}
self.manager = Manager(bus, obmc.dbuslib.bindings.OBJ_PREFIX)
- self.unique = bus.get_unique_name()
self.bus_map = {}
self.defer_signals = {}
- self.bus_map[self.unique] = obmc.mapper.MAPPER_NAME
self.namespaces = namespaces
self.interface_namespaces = interface_namespaces
self.blacklist = blacklist
@@ -217,7 +215,8 @@
self.interface_blacklist = interface_blacklist
# add my object mananger instance
- self.add_new_objmgr(obmc.dbuslib.bindings.OBJ_PREFIX, self.unique)
+ self.add_new_objmgr(
+ obmc.dbuslib.bindings.OBJ_PREFIX, obmc.mapper.MAPPER_NAME)
self.bus.add_signal_receiver(
self.bus_handler,
@@ -276,9 +275,7 @@
# since it cannot contain the discovery_error frame.
exctype, value, tb = sys.exc_info()
sys.stderr.write(
- '{} discovery failure on {}\n'.format(
- self.bus_map.get(owner, owner),
- path))
+ '{} discovery failure on {}\n'.format(owner, path))
if tb:
traceback.print_exception(exctype, value, tb, file=sys.stderr)
else:
@@ -308,8 +305,8 @@
def interfaces_added_handler(self, path, iprops, **kw):
path = str(path)
- owner = str(kw['sender'])
- if not self.bus_normalize(owner):
+ owner = self.bus_normalize(str(kw['sender']))
+ if not owner:
return
interfaces = self.filter_signal_interfaces(iter(iprops.keys()))
if not interfaces:
@@ -330,8 +327,8 @@
def interfaces_removed_handler(self, path, interfaces, **kw):
path = str(path)
- owner = str(kw['sender'])
- if not self.bus_normalize(owner):
+ owner = self.bus_normalize(str(kw['sender']))
+ if not owner:
return
interfaces = self.filter_signal_interfaces(interfaces)
if not interfaces:
@@ -350,9 +347,9 @@
path, interfaces, **kw))
def properties_changed_handler(self, interface, new, old, **kw):
- owner = str(kw['sender'])
+ owner = self.bus_normalize(str(kw['sender']))
path = str(kw['path'])
- if not self.bus_normalize(owner):
+ if not owner:
return
interfaces = self.filter_signal_interfaces([interface])
if not self.is_association(interfaces):
@@ -388,10 +385,10 @@
del self.bus_map[owner]
for path, item in self.cache.dataitems():
- old = self.interfaces_get(item, owner)
+ old = self.interfaces_get(item, owned_name)
# remove all interfaces for this service
self.update_interfaces(
- path, owner, old=old, new=[])
+ path, owned_name, old=old, new=[])
def bus_handler(self, owned_name, old, new):
if obmc.dbuslib.bindings.is_unique(owned_name) or \
@@ -403,8 +400,8 @@
if old:
# discard any unhandled signals
# or in progress discovery
- if old in self.defer_signals:
- del self.defer_signals[old]
+ if owned_name in self.defer_signals:
+ del self.defer_signals[owned_name]
self.process_old_owner(owned_name, old)
@@ -489,9 +486,9 @@
if not self.bus_normalize(owned_name):
continue
self.bus_map[o] = owned_name
- self.defer_signals[o] = []
+ self.defer_signals[owned_name] = []
find_dbus_interfaces(
- self.bus, o, '/',
+ self.bus, owned_name, '/',
self.discovery_callback,
self.discovery_error,
subtree_match=self.path_match,
@@ -688,7 +685,7 @@
if create != delete:
self.update_interfaces(
- path, self.unique, delete, create)
+ path, obmc.mapper.MAPPER_NAME, delete, create)
def update_associations(
self, path, owner, old, new, created=[], destroyed=[]):