def _delete_group(): prefix_group = self._prefix_group(group_id) members = self.client.get_prefix(prefix_group) if len(members) > 1: raise coordination.GroupNotEmpty(group_id) encoded_group = self._encode_group_id(group_id) txn = { 'compare': [{ 'key': encoded_group, 'result': 'NOT_EQUAL', 'target': 'VERSION', 'version': 0 }], 'success': [{ 'request_delete_range': { 'key': encoded_group, } }], 'failure': [] } result = self.client.transaction(txn) if not result.get("succeeded"): raise coordination.GroupNotCreated(group_id)
def _delete_group(): group_members, cas = self.client.gets(encoded_group) if group_members is None: raise coordination.GroupNotCreated(group_id) if group_members != {}: raise coordination.GroupNotEmpty(group_id) # Delete is not atomic, so we first set the group to # using CAS, and then we delete it, to avoid race conditions. if not self.client.cas(encoded_group, None, cas): raise _retry.TryAgain self.client.delete(encoded_group) self._remove_from_group_list(group_id)
def _delete_group(): members = list(self.client.get_prefix(encoded_group)) if len(members) > 1: raise coordination.GroupNotEmpty(group_id) # Warning: as of this writing python-etcd3 does not support the # NOT_EQUAL operator so we use the EQUAL operator and will retry on # success, hihi status, results = self.client.transaction( compare=[self.client.transactions.version(encoded_group) == 0], success=[], failure=[self.client.transactions.delete(encoded_group)], ) if status: raise coordination.GroupNotCreated(group_id)
def _delete_group_handler(async_result, timeout, timeout_exception, group_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.GroupNotCreated(group_id) except exceptions.NotEmptyError: raise coordination.GroupNotEmpty(group_id) except exceptions.ZookeeperError as e: utils.raise_with_cause(tooz.ToozError, encodeutils.exception_to_unicode(e), cause=e)
def _do_delete_group(): try: entries = os.listdir(group_dir) except EnvironmentError as e: if e.errno == errno.ENOENT: raise coordination.GroupNotCreated(group_id) else: raise else: if len(entries) > 1: raise coordination.GroupNotEmpty(group_id) else: try: shutil.rmtree(group_dir) except EnvironmentError as e: if e.errno != errno.ENOENT: raise
def _delete_group(): # create a lock for the group so that other operations on this # group do not conflict while the group is being deleted with self._get_group_lock(group_id) as lock: group_path = self._path_group(group_id) group, members = self._get_group_members(group_path) if not group: raise coordination.GroupNotCreated(group_id) if members: raise coordination.GroupNotEmpty(group_id) # delete the group recursively result = self._client.kv.delete(group_path, recurse=True) # delete the lock for the group self._client.kv.delete(lock._name) return result
def _delete_group(script): keys = [ self._encode_group_id(group_id), self._groups, ] args = [ self._encode_group_id(group_id, apply_namespace=False), ] result = int(script(keys=keys, args=args)) if result in (-1, -2): raise coordination.GroupNotCreated(group_id) if result == -3: raise coordination.GroupNotEmpty(group_id) if result == -4: raise tooz.ToozError("Unable to remove '%s' key" " from set located at '%s'" % (args[0], keys[-1])) if result != 1: raise tooz.ToozError("Internal error, unable" " to complete group '%s' removal" % (group_id))
def _do_delete_group(): try: entries = os.listdir(group_dir) except EnvironmentError as e: if e.errno == errno.ENOENT: raise coordination.GroupNotCreated(group_id) else: raise else: if len(entries) > 1: raise coordination.GroupNotEmpty(group_id) elif len(entries) == 1 and entries != ['.metadata']: raise tooz.ToozError( "Unexpected path '%s' found in" " group directory '%s' (expected to only find" " a '.metadata' path)" % (entries[0], group_dir)) else: try: shutil.rmtree(group_dir) except EnvironmentError as e: if e.errno != errno.ENOENT: raise