@@ -21,7 +21,7 @@ use std::cmp::{max, min};
21
21
use std:: path:: { Path , PathBuf } ;
22
22
use std:: sync:: Arc ;
23
23
use tokio:: fs:: { self , File , OpenOptions } ;
24
- use tokio:: io:: { self , AsyncRead , AsyncReadExt , AsyncSeekExt , BufReader , SeekFrom } ;
24
+ use tokio:: io:: { self , AsyncRead , AsyncReadExt , AsyncSeekExt , BufReader , BufWriter , SeekFrom } ;
25
25
use tokio_util:: io:: InspectReader ;
26
26
use tracing:: { error, info, instrument, warn} ;
27
27
@@ -249,35 +249,29 @@ impl Content {
249
249
range : Option < Range > ,
250
250
) -> Result < impl AsyncRead > {
251
251
let task_path = self . get_task_path ( task_id) ;
252
- if let Some ( range) = range {
252
+ let mut f = File :: open ( task_path. as_path ( ) ) . await . map_err ( |err| {
253
+ error ! ( "open {:?} failed: {}" , task_path, err) ;
254
+ err
255
+ } ) ?;
256
+
257
+ // Calculate the target offset and length based on the range.
258
+ let ( target_offset, target_length) = if let Some ( range) = range {
253
259
let target_offset = max ( offset, range. start ) ;
254
260
let target_length =
255
261
min ( offset + length - 1 , range. start + range. length - 1 ) - target_offset + 1 ;
262
+ ( target_offset, target_length)
263
+ } else {
264
+ ( offset, length)
265
+ } ;
256
266
257
- let mut f = File :: open ( task_path. as_path ( ) ) . await . map_err ( |err| {
258
- error ! ( "open {:?} failed: {}" , task_path, err) ;
267
+ f. seek ( SeekFrom :: Start ( target_offset) )
268
+ . await
269
+ . map_err ( |err| {
270
+ error ! ( "seek {:?} failed: {}" , task_path, err) ;
259
271
err
260
272
} ) ?;
261
273
262
- f. seek ( SeekFrom :: Start ( target_offset) )
263
- . await
264
- . map_err ( |err| {
265
- error ! ( "seek {:?} failed: {}" , task_path, err) ;
266
- err
267
- } ) ?;
268
- return Ok ( f. take ( target_length) ) ;
269
- }
270
-
271
- let mut f = File :: open ( task_path. as_path ( ) ) . await . map_err ( |err| {
272
- error ! ( "open {:?} failed: {}" , task_path, err) ;
273
- err
274
- } ) ?;
275
-
276
- f. seek ( SeekFrom :: Start ( offset) ) . await . map_err ( |err| {
277
- error ! ( "seek {:?} failed: {}" , task_path, err) ;
278
- err
279
- } ) ?;
280
- Ok ( f. take ( length) )
274
+ Ok ( f. take ( target_length) )
281
275
}
282
276
283
277
/// write_piece writes the piece to the content.
@@ -318,7 +312,8 @@ impl Content {
318
312
} ) ?;
319
313
320
314
// Copy the piece to the file.
321
- let length = io:: copy ( & mut tee, & mut f) . await . map_err ( |err| {
315
+ let mut writer = BufWriter :: with_capacity ( self . config . storage . write_buffer_size , f) ;
316
+ let length = io:: copy ( & mut tee, & mut writer) . await . map_err ( |err| {
322
317
error ! ( "copy {:?} failed: {}" , task_path, err) ;
323
318
err
324
319
} ) ?;
0 commit comments