def _msgpack_deserializer(key, value, flags): if flags == 1: return value if flags == 2: return utils.loads(value) raise coordination.SerializationError("Unknown serialization" " format '%s'" % flags)
def _read_group_id(path): with open(path, 'rb') as fh: contents = fh.read() details = utils.loads(contents) if not isinstance(details, (dict)): raise TypeError("Expected dict encoded in '%s'" " but got %s instead" % (path, type(details))) return details['group_id']
def _on_member_join(self, event): try: weight = utils.loads(self._coord.get_member_capabilities( self.group_id, event.member_id).get()).get("weight", 1) except utils.SerializationError: # This node does not seem to have joined with the partitioner # system, so just ignore it. LOG.warning( "Node %s did not join group %s in partition mode, ignoring", self.group_id, event.member_id) else: self.ring.add_node(event.member_id, weight)
def __init__(self, coordinator, group_id, partitions=DEFAULT_PARTITION_NUMBER): members = coordinator.get_members(group_id) self.partitions = partitions self.group_id = group_id self._coord = coordinator caps = [(m, self._coord.get_member_capabilities(self.group_id, m)) for m in members.get()] self._coord.watch_join_group(self.group_id, self._on_member_join) self._coord.watch_leave_group(self.group_id, self._on_member_leave) self.ring = hashring.HashRing([], partitions=self.partitions) for m_id, cap in caps: self.ring.add_node(m_id, utils.loads(cap.get()).get("weight", 1))
def _do_get_member_capabilities(): try: with open(member_path, "rb") as fh: contents = fh.read() except EnvironmentError as e: if e.errno == errno.ENOENT: if not os.path.isdir(group_dir): raise coordination.GroupNotCreated(group_id) else: raise coordination.MemberNotJoined(group_id, member_id) else: raise else: details = utils.loads(contents) if not isinstance(details, (dict)): raise TypeError("Expected dict encoded in '%s'" " but got %s instead" % (member_path, type(details))) return details["capabilities"]
def _load_and_validate(self, blob, schema_key): data = utils.loads(blob) data = _convert_from_old_format(data) schema = self._SCHEMAS[schema_key] return schema(data)
def _load_and_validate(blob, schema_key): data = utils.loads(blob) data = _convert_from_old_format(data) schema = _SCHEMAS[schema_key] schema(data) return data
def _get_member_capabilities(): capabilities, metadata = self.client.get(encoded_member) if capabilities is None: raise coordination.MemberNotJoined(group_id, member_id) return utils.loads(capabilities)
def _loads(blob): return utils.loads(blob)
def _get_member_capabilities(): member_path = self._path_member(group_id, member_id) index, data = self._client.kv.get(member_path) if not data: raise coordination.MemberNotJoined(group_id, member_id) return utils.loads(data["Value"])
def _get_member_capabilities(): prefix_member = self._prefix_group(group_id) + member_id result = self.client.get(prefix_member) if not result: raise coordination.MemberNotJoined(group_id, member_id) return utils.loads(result[0])
def _load_and_validate(blob, schema_key): data = utils.loads(blob) schema = _SCHEMAS[schema_key] schema(data) return data
def _msgpack_deserializer(key, value, flags): if flags == 1: return value if flags == 2: return utils.loads(value) raise Exception("Unknown serialization format '%s'" % flags)