@@ -56,13 +56,18 @@ impl FromStr for S3Prefix {
56
56
pub struct S3Writer {
57
57
prefix : S3Prefix ,
58
58
client : S3Client ,
59
+ runtime : tokio:: runtime:: Runtime ,
59
60
}
60
61
61
62
const S3RETRIES : u64 = 4 ;
62
63
63
64
impl S3Writer {
64
65
pub fn create ( client : S3Client , prefix : S3Prefix ) -> Fallible < S3Writer > {
65
- Ok ( S3Writer { prefix, client } )
66
+ Ok ( S3Writer {
67
+ prefix,
68
+ client,
69
+ runtime : tokio:: runtime:: Runtime :: new ( ) ?,
70
+ } )
66
71
}
67
72
}
68
73
@@ -93,12 +98,7 @@ impl ReportWriter for S3Writer {
93
98
} ,
94
99
..Default :: default ( )
95
100
} ;
96
- let ( tx, rx) = std:: sync:: mpsc:: sync_channel ( 0 ) ;
97
- let client = self . client . clone ( ) ;
98
- tokio:: task:: spawn ( async move {
99
- tx. send ( client. put_object ( req) . await ) . unwrap ( ) ;
100
- } ) ;
101
- match rx. recv ( ) {
101
+ match self . runtime . block_on ( self . client . put_object ( req) ) {
102
102
Err ( _) if retry < S3RETRIES => {
103
103
retry += 1 ;
104
104
thread:: sleep ( Duration :: from_secs ( 2 * retry) ) ;
@@ -142,12 +142,7 @@ impl ReportWriter for S3Writer {
142
142
} ,
143
143
..Default :: default ( )
144
144
} ;
145
- let ( tx, rx) = std:: sync:: mpsc:: sync_channel ( 0 ) ;
146
- let client = self . client . clone ( ) ;
147
- tokio:: task:: spawn ( async move {
148
- tx. send ( client. put_object ( req) . await ) . unwrap ( ) ;
149
- } ) ;
150
- match rx. recv ( ) {
145
+ match self . runtime . block_on ( self . client . put_object ( req) ) {
151
146
Err ( e) => {
152
147
failure:: bail!( "Failed to upload to {:?}: {:?}" , path. as_ref( ) , e) ;
153
148
}
0 commit comments