class RLFSMDeletionInterface(DeletionInterface): """ DeletionInterface using the Dynamo RLFSM. """ def __init__(self, config = None): DeletionInterface.__init__(self, config) self.rlfsm = RLFSM(config.get('rlfsm', None)) def set_read_only(self, value = True): #override self._read_only = value self.rlfsm.set_read_only(value) def schedule_deletions(self, replica_list, operation_id, comments = ''): #override sites = set(r.site for r, b in replica_list) if len(sites) != 1: raise OperationalError('schedule_copies should be called with a list of replicas at a single site.') site = list(sites)[0] LOG.info('Scheduling deletion of %d replicas from %s using RLFSM (operation %d)', len(replica_list), site.name, operation_id) clones = [] for dataset_replica, block_replicas in replica_list: if block_replicas is None: to_delete = dataset_replica.block_replicas else: to_delete = block_replicas for block_replica in to_delete: for lfile in block_replica.files(): self.rlfsm.desubscribe_file(block_replica.site, lfile) # No external dependency -> all operations are successful clone_replica = DatasetReplica(dataset_replica.dataset, dataset_replica.site) clone_replica.copy(dataset_replica) if block_replicas is None: clones.append((clone_replica, None)) else: clones.append((clone_replica, [])) for block_replica in block_replicas: clone_block_replica = BlockReplica(block_replica.block, block_replica.site) clone_block_replica.copy(block_replica) clone_block_replica.last_update = int(time.time()) clones[-1][1].append(clone_block_replica) return clones def deletion_status(self, operation_id): #override raise NotImplementedError('deletion_status')
def delete(site, files): """ Enters files into the deletion queue for a site :param str site: Site to execute deletion :param list files: Full LFNs of files or directories to delete :returns: Number of files deleted, in case ``files`` is an rvalue or something :rtype: int """ rlfsm = RLFSM() siteobj = inventory.sites[site] for path in files: path = path.strip() LOG.info('Deleting %s', path) rlfsm.desubscribe_file(siteobj, inventory.find_file(path)) rlfsm.db.close() return len(files)
class RLFSMDeletionInterface(DeletionInterface): """ DeletionInterface using the Dynamo RLFSM. """ def __init__(self, config=None): DeletionInterface.__init__(self, config) self.rlfsm = RLFSM(config.get('rlfsm', None)) def set_read_only(self, value=True): #override self._read_only = value self.rlfsm.set_read_only(value) def schedule_deletions(self, replica_list, operation_id, comments=''): #override sites = set(r.site for r, b in replica_list) if len(sites) != 1: raise OperationalError( 'schedule_copies should be called with a list of replicas at a single site.' ) site = list(sites)[0] LOG.info( 'Scheduling deletion of %d replicas from %s using RLFSM (operation %d)', len(replica_list), site.name, operation_id) clones = [] for dataset_replica, block_replicas in replica_list: if block_replicas is None: to_delete = dataset_replica.block_replicas else: to_delete = block_replicas for block_replica in to_delete: for lfile in block_replica.files(): self.rlfsm.desubscribe_file(block_replica.site, lfile) # No external dependency -> all operations are successful clone_replica = DatasetReplica(dataset_replica.dataset, dataset_replica.site) clone_replica.copy(dataset_replica) if block_replicas is None: clones.append((clone_replica, None)) else: clones.append((clone_replica, [])) for block_replica in block_replicas: clone_block_replica = BlockReplica(block_replica.block, block_replica.site) clone_block_replica.copy(block_replica) clone_block_replica.last_update = int(time.time()) clones[-1][1].append(clone_block_replica) return clones def deletion_status(self, operation_id): #override raise NotImplementedError('deletion_status')