Esempio n. 1
0
 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))
Esempio n. 2
0
        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)
Esempio n. 3
0
 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))
Esempio n. 4
0
 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)
Esempio n. 5
0
File: etcd3gw.py Progetto: Kami/tooz
        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)
Esempio n. 6
0
 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
Esempio n. 7
0
 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
Esempio n. 8
0
 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)
Esempio n. 9
0
 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)
Esempio n. 10
0
        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)
Esempio n. 11
0
 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)
Esempio n. 12
0
 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)
Esempio n. 13
0
        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)
Esempio n. 14
0
 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)
Esempio n. 15
0
 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")
Esempio n. 16
0
 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)
Esempio n. 17
0
        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)
Esempio n. 18
0
 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
Esempio n. 19
0
File: etcd3gw.py Progetto: Kami/tooz
 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])
Esempio n. 20
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)
Esempio n. 21
0
 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']
Esempio n. 22
0
 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"])