Ejemplo n.º 1
0
    def destination_has_enough_space(self, data):
        dst_host = data['host_dst']
        dst_path = data['path_dst']
        src_host = data['host_src']
        src_path = data['path_src']

        src_runner = self.runner(src_host, 'src')
        dst_runner = self.runner(dst_host, 'dst')

        file_size = files.remote_file_size_mb(src_runner, src_path)
        available_space = files.remote_free_space(dst_runner, dst_path)

        return file_size < available_space
Ejemplo n.º 2
0
    def transfer(self, data):
        host_src = data['host_src']
        path_src = data['path_src']
        host_dst = data['host_dst']
        path_dst = data['path_dst']
        gateway = data.get('gateway')

        src_runner = self.runner(host_src, 'src', gateway)
        dst_runner = self.runner(host_dst, 'dst', gateway)

        block_size = CONF.migrate.ssh_chunk_size
        file_size = files.remote_file_size_mb(src_runner, path_src)
        num_blocks = int(math.ceil(float(file_size) / block_size))

        src_temp_dir = os.path.join(os.path.basename(path_src), '.cf.copy')
        dst_temp_dir = os.path.join(os.path.basename(path_dst), '.cf.copy')

        partial_files = []
        with files.RemoteDir(src_runner, src_temp_dir) as src_temp, \
                files.RemoteDir(dst_runner, dst_temp_dir) as dst_temp:
            for i in xrange(num_blocks):
                part = os.path.basename(path_src) + '.part{i}'.format(i=i)
                part_path = os.path.join(src_temp.dirname, part)
                files.remote_split_file(src_runner, path_src, part_path, i,
                                        block_size)
                gzipped_path = files.remote_gzip(src_runner, part_path)
                gzipped_filename = os.path.basename(gzipped_path)
                dst_gzipped_path = os.path.join(dst_temp.dirname,
                                                gzipped_filename)

                self.run_scp(host_src, gzipped_path, host_dst,
                             dst_gzipped_path, gateway)

                files.remote_unzip(dst_runner, dst_gzipped_path)
                partial_files.append(os.path.join(dst_temp.dirname, part))

            for i in xrange(num_blocks):
                files.remote_join_file(dst_runner, path_dst, partial_files[i],
                                       i, block_size)
        if not self.verify(host_src, path_src, host_dst, path_dst, gateway):
            self.clean_dst(host_dst, path_dst)
            raise base.FileCopyError(**data)
Ejemplo n.º 3
0
    def transfer(self, data):
        host_src = data['host_src']
        path_src = data['path_src']
        host_dst = data['host_dst']
        path_dst = data['path_dst']
        gateway = data.get('gateway')

        src_runner = self.runner(host_src, 'src', gateway)
        dst_runner = self.runner(host_dst, 'dst', gateway)

        block_size = CONF.migrate.ssh_chunk_size
        file_size = files.remote_file_size_mb(src_runner, path_src)
        num_blocks = int(math.ceil(float(file_size) / block_size))

        src_temp_dir = os.path.join(os.path.basename(path_src), '.cf.copy')
        dst_temp_dir = os.path.join(os.path.basename(path_dst), '.cf.copy')
        part_filename = os.path.basename(path_src) + '.part'

        with files.FullAccessRemoteDir(src_runner, src_temp_dir) as src_tmp, \
                files.FullAccessRemoteDir(dst_runner, dst_temp_dir) as dst_tmp:
            src_part_path = os.path.join(src_tmp.dirname, part_filename)
            dst_part_path = os.path.join(dst_tmp.dirname, part_filename)
            for i in xrange(num_blocks):
                files.remote_split_file(src_runner, path_src, src_part_path, i,
                                        block_size)
                gzipped_path = files.remote_gzip(src_runner, src_part_path)
                gzipped_filename = os.path.basename(gzipped_path)
                dst_gzipped_path = os.path.join(dst_tmp.dirname,
                                                gzipped_filename)

                self.run_scp(host_src, gzipped_path, host_dst,
                             dst_gzipped_path, gateway)
                files.remote_unzip(dst_runner, dst_gzipped_path)
                files.remote_join_file(dst_runner, path_dst, dst_part_path, i,
                                       block_size)
                files.remote_rm(src_runner, src_part_path)
                files.remote_rm(dst_runner, dst_part_path)
        if not self.verify(host_src, path_src, host_dst, path_dst, gateway):
            self.clean_dst(host_dst, path_dst)
            raise base.FileCopyError(**data)