diff --git a/examples/client.c b/examples/client.c index ba36b249acb1f01eeca1eed98b3ffd451e4bc769..f7768bf733fd6ce3b0aca9216066996ce6233bad 100644 --- a/examples/client.c +++ b/examples/client.c @@ -89,6 +89,7 @@ int main(int argc, char** argv) } remi_fileset_register_metadata(fileset, "AERED", "qerqwer"); + remi_fileset_set_xfer_size(fileset, 4); // migrate the fileset int status = 0; ret = remi_fileset_migrate(remi_ph, fileset, remote_root, REMI_KEEP_SOURCE, REMI_USE_ABTIO, &status); diff --git a/src/remi-client.cpp b/src/remi-client.cpp index 3b94a09598b69ef340d59b2fd5d1ae4d4f24b8e8..550d4aa4b782158b06de51a8e5e3f03d96051b67 100644 --- a/src/remi-client.cpp +++ b/src/remi-client.cpp @@ -429,8 +429,6 @@ int migrate_using_abtio( current_chunk_size = remaining_size < max_chunk_size ? remaining_size : max_chunk_size; current_buffer.resize(current_chunk_size); auto sizeRead = abt_io_pread(abtio, fd, ¤t_buffer[0], current_chunk_size, current_chunk_offset); - current_chunk_offset += current_chunk_size; - remaining_size -= current_chunk_size; } // wait for the RPC to finish ret = async_req.wait(); @@ -439,6 +437,8 @@ int migrate_using_abtio( if(!can_stop) { previous_chunk_offset = current_chunk_offset; previous_chunk_size = current_chunk_size; + current_chunk_offset += current_chunk_size; + remaining_size -= current_chunk_size; std::swap(current_buffer, previous_buffer); } } diff --git a/src/remi-server.cpp b/src/remi-server.cpp index 36f487e57d56f385435645059bf83022a32a2b2a..6552171656cd403e82a63a3af2ef99cbda5aab25 100644 --- a/src/remi-server.cpp +++ b/src/remi-server.cpp @@ -329,23 +329,23 @@ struct remi_provider : public tl::provider { int fd = op.m_fds[fileNumber]; ssize_t s; { // only HDDs will be locked to avoid concurrent writes - std::lock_guard(*(op.m_devices[fileNumber])); + std::lock_guard guard(*(op.m_devices[fileNumber])); // send an early response so the client can start sending the next chunk // in parallel while this chunk is being written ret = REMI_SUCCESS; req.respond(ret); - + if(m_abtio == ABT_IO_INSTANCE_NULL) { s = pwrite(fd, data.data(), data.size(), writeOffset); } else { s = abt_io_pwrite(m_abtio, fd, data.data(), data.size(), writeOffset); } + if(s != data.size()) { + op.m_error = REMI_ERR_IO; + } } - if(s != data.size()) { - op.m_error = REMI_ERR_IO; - } return; }