예제 #1
0
def make_local_copy(datafile_id):
    datafile = Dataset_File.objects.get(id=datafile_id)
    # Check that we still need to verify - it might have been done already
    if datafile.is_local():
        return
    # Use a transaction for safety
    with transaction.commit_on_success():
        # Get datafile locked for write (to prevent concurrent actions)
        datafile = Dataset_File.objects.select_for_update().get(id=datafile_id)
        # Second check after lock (concurrency paranoia)
        if not datafile.is_local():
            stage_file(datafile)
예제 #2
0
def make_local_copy(datafile_id):
    datafile = Dataset_File.objects.get(id=datafile_id)
    # Check that we still need to verify - it might have been done already
    if datafile.is_local():
        return
    # Use a transaction for safety
    with transaction.commit_on_success():
        # Get datafile locked for write (to prevent concurrent actions)
        datafile = Dataset_File.objects.select_for_update().get(id=datafile_id)
        # Second check after lock (concurrency paranoia)
        if not datafile.is_local():
            stage_file(datafile)
예제 #3
0
def restore_datafile(datafile, noRemove=False):
    """
    Restore a file that has been migrated
    """
    
    # (Deferred imports to avoid prematurely triggering DB init)
    from tardis.tardis_portal.models import Dataset_File
    from django.db import transaction
    with transaction.commit_on_success():
        df = Dataset_File.objects.select_for_update().get(id=datafile.id)
        if df.is_local():
            return False
        destination = Destination.identify_destination(df.url)
        if not destination:
            raise MigrationError('Cannot identify the migration destination' \
                                     ' holding %s' % df.url)
        if not df.verified or destination.trust_length:
            raise MigrationError('Only verified datafiles can be restored' \
                                 ' from destination %s' % destination.name)
        df.verified = False
        url = df.url
        if not stage_file(df):
            raise MigrationError('Restoration failed')
        logger.info('Restored file %s for datafile %s' %
                    (df.get_absolute_filepath(), df.id))
        if not noRemove:
            destination.provider.remove_file(url)
            logger.info('Removed remote file %s for datafile %s' % (url, df.id))
        return True
예제 #4
0
    def test_stage_file(self):
        from tardis.tardis_portal import staging

        staging.stage_file(self.df)
예제 #5
0
    def test_stage_file(self):
        from tardis.tardis_portal import staging

        staging.stage_file(self.df)