def _leave_group_handler(async_result, timeout, group_id, member_id): try: async_result.get(block=True, timeout=timeout) except exceptions.NoNodeError: raise coordination.MemberNotJoined(group_id, member_id) except exceptions.ZookeeperError as e: raise coordination.ToozError(str(e))
def _update_capabilities(): cap, metadata = self.client.get(encoded_member) if cap is None: raise coordination.MemberNotJoined(group_id, self._member_id) self.client.put(encoded_member, utils.dumps(capabilities), lease=self._membership_lease)
def _update_capabilities(): member_path = self._path_member(group_id, self._member_id) index, data = self._client.kv.get(member_path) if not data: raise coordination.MemberNotJoined(group_id, self._member_id) # no need to Check-And-Set here, latest write wins self._client.kv.put(member_path, utils.dumps(capabilities))
def _get_member_capabilities(p): if not p.exists(encoded_group): raise coordination.GroupNotCreated(group_id) capabilities = p.hget(encoded_group, encoded_member_id) if capabilities is None: raise coordination.MemberNotJoined(group_id, member_id) return self._loads(capabilities)
def _update_capabilities(): prefix_member = self._prefix_group(group_id) + self._member_id result = self.client.get(prefix_member) if not result: raise coordination.MemberNotJoined(group_id, self._member_id) self.client.put(prefix_member, utils.dumps(capabilities), lease=self._membership_lease)
def _get_member_capabilities_handler(async_result, timeout, group_id, member_id): try: capabilities = async_result.get(block=True, timeout=timeout)[0] except exceptions.NoNodeError: raise coordination.MemberNotJoined(group_id, member_id) except exceptions.ZookeeperError as e: raise coordination.ToozError(str(e)) else: return capabilities
def _update_capabilities(): group_members, cas = self.client.gets(encoded_group) if group_members is None: raise coordination.GroupNotCreated(group_id) if self._member_id not in group_members: raise coordination.MemberNotJoined(group_id, self._member_id) group_members[self._member_id][b'capabilities'] = capabilities if not self.client.cas(encoded_group, group_members, cas): # It changed, try again raise _retry.TryAgain
def _leave_group(p): if not p.exists(encoded_group): raise coordination.GroupNotCreated(group_id) p.multi() p.hdel(encoded_group, encoded_member_id) c = p.execute()[0] if c == 0: raise coordination.MemberNotJoined(group_id, self._member_id) else: self._joined_groups.discard(group_id)
def _leave_group(): group_members, cas = self.client.gets(encoded_group) if group_members is None: raise coordination.GroupNotCreated(group_id) if self._member_id not in group_members: raise coordination.MemberNotJoined(group_id, self._member_id) del group_members[self._member_id] if not self.client.cas(encoded_group, group_members, cas): # It changed, let's try again raise _retry.TryAgain self._joined_groups.discard(group_id)
def _leave_group(): prefix_group = self._prefix_group(group_id) prefix_member = prefix_group + self._member_id members = self.client.get_prefix(prefix_group) for capabilities, metadata in members: if metadata['key'] == prefix_member: break else: raise coordination.MemberNotJoined(group_id, self._member_id) self.client.delete(prefix_member) self._joined_groups.discard(group_id)
def _update_capabilities(script): keys = [ self._encode_group_id(group_id), ] args = [ self._encode_member_id(self._member_id), self._dumps(capabilities), ] result = int(script(keys=keys, args=args)) if result == -1: raise coordination.GroupNotCreated(group_id) if result == -2: raise coordination.MemberNotJoined(group_id, self._member_id)
def _do_leave_group(): if not os.path.exists(os.path.join(group_dir, ".metadata")): raise coordination.GroupNotCreated(group_id) try: os.unlink(me_path) except EnvironmentError as e: if e.errno != errno.ENOENT: raise else: raise coordination.MemberNotJoined(group_id, self._member_id) else: self._joined_groups.discard(group_id)
def _leave_group(): members = list(self.client.get_prefix(encoded_group)) encoded_member = self._encode_group_member_id( group_id, self._member_id) for capabilities, metadata in members: if metadata.key == encoded_member: break else: raise coordination.MemberNotJoined(group_id, self._member_id) self.client.delete(encoded_member)
def _update_capabilities_handler(async_result, timeout, timeout_exception, group_id, member_id): try: async_result.get(block=True, timeout=timeout) except timeout_exception as e: utils.raise_with_cause(coordination.OperationTimedOut, encodeutils.exception_to_unicode(e), cause=e) except exceptions.NoNodeError: raise coordination.MemberNotJoined(group_id, member_id) except exceptions.ZookeeperError as e: utils.raise_with_cause(tooz.ToozError, encodeutils.exception_to_unicode(e), cause=e)
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 = self._load_and_validate(contents, 'member') return details.get(u"capabilities")
def _get_member_capabilities_handler(cls, async_result, timeout, timeout_exception, group_id, member_id): try: capabilities = async_result.get(block=True, timeout=timeout)[0] except timeout_exception as e: coordination.raise_with_cause(coordination.OperationTimedOut, encodeutils.exception_to_unicode(e), cause=e) except exceptions.NoNodeError: raise coordination.MemberNotJoined(group_id, member_id) except exceptions.ZookeeperError as e: coordination.raise_with_cause(coordination.ToozError, encodeutils.exception_to_unicode(e), cause=e) else: return cls._loads(capabilities)
def _leave_group(): # NOTE: We do NOT have to lock the group here because deletes in # Consul are atomic and succeed even if the key doesn't exist # This means that there is no race condition between checking # if the member exists and then deleting it. group_path = self._path_group(group_id) member_path = self._path_member(group_id, self._member_id) group, members = self._get_group_members(group_path) member = None for m in members: if m["Key"] == member_path: member = m break else: raise coordination.MemberNotJoined(group_id, self._member_id) # delete the member key with Check-And-Set semantics based on index # we read above self._client.kv.delete(member_path, cas=member["ModifyIndex"]) self._joined_groups.discard(group_id)
def _get_member_info_handler(cls, async_result, timeout, timeout_exception, group_id, member_id): try: capabilities, znode_stats = async_result.get(block=True, timeout=timeout) except timeout_exception as e: utils.raise_with_cause(coordination.OperationTimedOut, encodeutils.exception_to_unicode(e), cause=e) except exceptions.NoNodeError: raise coordination.MemberNotJoined(group_id, member_id) except exceptions.ZookeeperError as e: utils.raise_with_cause(tooz.ToozError, encodeutils.exception_to_unicode(e), cause=e) else: member_info = { 'capabilities': cls._loads(capabilities), 'created_at': utils.millis_to_datetime(znode_stats.ctime), 'updated_at': utils.millis_to_datetime(znode_stats.mtime) } return member_info
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 _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 _get_member_capabilities(): group_members = self._get_members(group_id) if member_id not in group_members: raise coordination.MemberNotJoined(group_id, member_id) return group_members[member_id][b'capabilities']
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"])