def __fake_source_ranking(source_rse_id, new_ranking, session=None): rowcount = session.query(models.Source).filter(models.Source.rse_id == source_rse_id).update({'ranking': new_ranking}) if not rowcount: models.Source(request_id=request['id'], scope=request['scope'], name=request['name'], rse_id=source_rse_id, dest_rse_id=request['dest_rse_id'], ranking=new_ranking, bytes=request['bytes'], url=None, is_using=False). \ save(session=session, flush=False)
def prepare_sources_for_transfers(transfers, session=None): """ Prepare the sources for transfers. :param transfers: Dictionary containing request transfer info. :param session: Database session to use. """ try: for request_id in transfers: rowcount = session.query(models.Request)\ .filter_by(id=request_id)\ .filter(models.Request.state == RequestState.QUEUED)\ .update({'state': transfers[request_id]['state'], 'external_id': transfers[request_id]['external_id'], 'external_host': transfers[request_id]['external_host'], 'dest_url': transfers[request_id]['dest_url'], 'submitted_at': datetime.datetime.utcnow()}, synchronize_session=False) if rowcount == 0: raise RequestNotFound("Failed to prepare transfer: request %s does not exist or is not in queued state" % (request_id)) if 'file' in transfers[request_id]: file = transfers[request_id]['file'] for src_rse, src_url, src_rse_id, rank in file['sources']: src_rowcount = session.query(models.Source)\ .filter_by(request_id=request_id)\ .filter(models.Source.rse_id == src_rse_id)\ .update({'is_using': True}, synchronize_session=False) if src_rowcount == 0: models.Source(request_id=file['metadata']['request_id'], scope=file['metadata']['scope'], name=file['metadata']['name'], rse_id=src_rse_id, dest_rse_id=file['metadata']['dest_rse_id'], ranking=rank if rank else 0, bytes=file['metadata']['filesize'], url=src_url, is_using=True).\ save(session=session, flush=False) except IntegrityError as error: raise RucioException(error.args)