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
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)
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)