Track actual bytes read in read operations
Add functionality to determine the actual number of bytes read during read operations, making it possible to detect when a read was truncated because it went past the end of the file. Changes: - Modified file_tree_read() to calculate and return actual_bytes via new output parameter - Updated metadata server to send actual_bytes in READ_SUCCESS messages - Added bytes_read field to ToastyResult structure - Modified client to parse, store, and report actual bytes read - Updated toasty_read() to return the actual number of bytes read instead of always returning 0 - Fixed web server to use bytes_read field instead of non-existent count field This allows clients to distinguish between: - Reading zeros because the file is sparse (has holes) - Reading past the end of the file (truncated read)
This commit is contained in:
+3
-3
@@ -197,13 +197,13 @@ int main(void)
|
||||
// First, ACK the byte we just read, even if it's
|
||||
// just 0 bytes (every bodybuf must by paired with
|
||||
// a bodyack).
|
||||
proxied[i].transferred += result.count;
|
||||
int ack = proxied[i].head_only ? 0 : result.count;
|
||||
proxied[i].transferred += result.bytes_read;
|
||||
int ack = proxied[i].head_only ? 0 : result.bytes_read;
|
||||
http_response_builder_bodyack(proxied[i].builder, ack);
|
||||
|
||||
// If we didn't reach the end of the file, start
|
||||
// a new read.
|
||||
if (result.count > 0) {
|
||||
if (result.bytes_read > 0) {
|
||||
|
||||
// Make sure there is some free space in the buffer
|
||||
int mincap = 1<<10; // TODO: Choose based on overall file size
|
||||
|
||||
Reference in New Issue
Block a user