void sync() { int result = hdfsSync(fs.get(), fout); if (result < 0) throwFromErrno("Cannot HDFS sync" + hdfs_uri.toString() + " " + std::string(hdfsGetLastError()), ErrorCodes::CANNOT_FSYNC); }
bool FileManagerHdfs::writeBlockOrBlob(const block_id block, const void *buffer, const size_t length) { DEBUG_ASSERT(buffer); DEBUG_ASSERT(length % kSlotSizeBytes == 0); string filename(blockFilename(block)); hdfsFile file_handle = hdfsOpenFile(hdfs_, filename.c_str(), O_WRONLY, kSlotSizeBytes, FLAGS_hdfs_num_replications, kSlotSizeBytes); if (file_handle == nullptr) { LOG_WARNING("Failed to open file " << filename << " with error: " << strerror(errno)); return false; } size_t bytes_total = 0; while (bytes_total < length) { tSize bytes = hdfsWrite(hdfs_, file_handle, static_cast<const char*>(buffer) + bytes_total, length - bytes_total); if (bytes > 0) { bytes_total += bytes; } else if (bytes == -1) { LOG_WARNING("Failed to write file " << filename << " with error: " << strerror(errno)); break; } } if (hdfsSync(hdfs_, file_handle) != 0) { LOG_WARNING("Failed to sync file " << filename << " with error: " << strerror(errno)); } if (hdfsCloseFile(hdfs_, file_handle) != 0) { LOG_WARNING("Failed to close file " << filename << " with error: " << strerror(errno)); } return (bytes_total == length); }