Skip to content

Commit 45a358e

Browse files
Integrate spawning tokio runtime into rusoto
1 parent bd39e0b commit 45a358e

File tree

1 file changed

+8
-13
lines changed

1 file changed

+8
-13
lines changed

src/report/s3.rs

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,18 @@ impl FromStr for S3Prefix {
5656
pub struct S3Writer {
5757
prefix: S3Prefix,
5858
client: S3Client,
59+
runtime: tokio::runtime::Runtime,
5960
}
6061

6162
const S3RETRIES: u64 = 4;
6263

6364
impl S3Writer {
6465
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+
})
6671
}
6772
}
6873

@@ -93,12 +98,7 @@ impl ReportWriter for S3Writer {
9398
},
9499
..Default::default()
95100
};
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)) {
102102
Err(_) if retry < S3RETRIES => {
103103
retry += 1;
104104
thread::sleep(Duration::from_secs(2 * retry));
@@ -142,12 +142,7 @@ impl ReportWriter for S3Writer {
142142
},
143143
..Default::default()
144144
};
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)) {
151146
Err(e) => {
152147
failure::bail!("Failed to upload to {:?}: {:?}", path.as_ref(), e);
153148
}

0 commit comments

Comments
 (0)