kylebarron opened a new issue, #4776:
URL: https://github.com/apache/arrow-rs/issues/4776
**Describe the bug**
object-store crate fails to compile for wasm32 with the `http` feature.
There are a ton of errors. Some unresolved imports, some ``future is not
`Send` ``, etc.
<details>
```
error[E0432]: unresolved imports `reqwest::NoProxy`, `reqwest::Proxy`
--> src/client/mod.rs:51:38
|
51 | use reqwest::{Client, ClientBuilder, NoProxy, Proxy, RequestBuilder};
| ^^^^^^^ ^^^^^ no `Proxy` in the
root
| |
| no `NoProxy` in the root
|
note: found an item that was configured out
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/reqwest-0.11.20/src/lib.rs:322:33
|
322 | pub use self::proxy::{Proxy,NoProxy};
| ^^^^^^^
note: found an item that was configured out
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/reqwest-0.11.20/src/lib.rs:322:27
|
322 | pub use self::proxy::{Proxy,NoProxy};
| ^^^^^
error[E0432]: unresolved import `crate::client::header`
--> src/http/mod.rs:43:20
|
43 | use crate::client::header::header_meta;
| ^^^^^^ could not find `header` in `client`
error[E0433]: failed to resolve: could not find `header` in `client`
--> src/http/mod.rs:66:32
|
66 | source: crate::client::header::Error,
| ^^^^^^ could not find `header` in
`client`
error[E0433]: failed to resolve: could not find `tls` in `reqwest`
--> src/client/mod.rs:465:30
|
465 |
reqwest::tls::Certificate::from_pem(certificate.as_bytes())
| ^^^ could not find `tls` in `reqwest`
warning: unused macro definition: `builder_opts`
--> src/parse.rs:108:14
|
108 | macro_rules! builder_opts {
| ^^^^^^^^^^^^
|
= note: `#[warn(unused_macros)]` on by default
error: future cannot be sent between threads safely
--> src/http/mod.rs:98:70
|
98 | async fn put(&self, location: &Path, bytes: Bytes) -> Result<()>
{
|
______________________________________________________________________^
99 | | self.client.put(location, bytes).await
100 | | }
| |_____^ future created by async block is not `Send`
|
= help: within `[async block@src/http/mod.rs:98:70: 100:6]`, the trait
`std::marker::Send` is not implemented for `*mut u8`
note: future is not `Send` as this value is used across an await
--> src/http/client.rs:172:66
|
166 | match builder.send_retry(&self.retry_config).await {
| -------------------------------------------- has
type `std::result::Result<reqwest::Response, retry::Error>` which is not `Send`
...
172 | self.create_parent_directories(location).await?
| ^^^^^
await occurs here, with `builder.send_retry(&self.retry_config).await` maybe
used later
...
177 | }
| - `builder.send_retry(&self.retry_config).await` is later
dropped here
= note: required for the cast from `Pin<Box<[async
block@src/http/mod.rs:98:70: 100:6]>>` to `Pin<Box<dyn Future<Output =
Result<(), Error>> + Send>>`
= note: the full name for the target type has been written to
'/Users/kyle/github/apache/arrow-rs/object_store/target/wasm32-unknown-unknown/debug/deps/object_store-87363e35aacc8eb7.long-type-9982652401887617439.txt'
error[E0277]: `Rc<RefCell<wasm_bindgen_futures::Inner>>` cannot be sent
between threads safely
--> src/http/mod.rs:125:14
|
125 | .boxed();
| ^^^^^ `Rc<RefCell<wasm_bindgen_futures::Inner>>` cannot
be sent between threads safely
|
= help: within
`futures::stream::Map<wasm_streams::readable::into_stream::IntoStream<'static>,
[closure@reqwest::Response::bytes_stream::{closure#0}]>`, the trait
`std::marker::Send` is not implemented for
`Rc<RefCell<wasm_bindgen_futures::Inner>>`
note: required because it appears within the type `JsFuture`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/wasm-bindgen-futures-0.4.37/src/lib.rs:98:12
|
98 | pub struct JsFuture {
| ^^^^^^^^
note: required because it appears within the type `Option<JsFuture>`
-->
/Users/kyle/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/option.rs:563:10
|
563 | pub enum Option<T> {
| ^^^^^^
note: required because it appears within the type `IntoStream<'static>`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/wasm-streams-0.3.0/src/readable/into_stream.rs:22:12
|
22 | pub struct IntoStream<'reader> {
| ^^^^^^^^^^
note: required because it appears within the type `Map<IntoStream<'static>,
[closure@Response::bytes_stream::{closure#0}]>`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/stream/stream/map.rs:15:16
|
15 | pub struct Map<St, F> {
| ^^^
= note: required for `Unique<Map<IntoStream<'static>, ...>>` to
implement `std::marker::Send`
= note: the full type name has been written to
'/Users/kyle/github/apache/arrow-rs/object_store/target/wasm32-unknown-unknown/debug/deps/object_store-87363e35aacc8eb7.long-type-262376943904190086.txt'
note: required because it appears within the type
`Box<Map<IntoStream<'static>, [closure@Response::bytes_stream::{closure#0}]>>`
-->
/Users/kyle/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/alloc/src/boxed.rs:195:12
|
195 | pub struct Box<
| ^^^
note: required because it appears within the type
`Pin<Box<Map<IntoStream<'static>,
[closure@Response::bytes_stream::{closure#0}]>>>`
-->
/Users/kyle/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/pin.rs:410:12
|
410 | pub struct Pin<P> {
| ^^^
note: required because it appears within the type `impl Stream<Item =
Result<Bytes, Error>>`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/reqwest-0.11.20/src/wasm/response.rs:137:34
|
137 | pub fn bytes_stream(self) -> impl futures_core::Stream<Item =
crate::Result<Bytes>> {
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
note: required because it appears within the type `IntoStream<impl
Stream<Item = Result<Bytes, Error>>>`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/stream/try_stream/into_stream.rs:12:16
|
12 | pub struct IntoStream<St> {
| ^^^^^^^^^^
note: required because it appears within the type `Map<IntoStream<impl
Stream<Item = Result<Bytes, Error>>>, MapErrFn<[[email protected]:124:22]>>`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/stream/stream/map.rs:15:16
|
15 | pub struct Map<St, F> {
| ^^^
note: required because it appears within the type `MapErr<impl Stream<Item =
Result<Bytes, Error>>, [[email protected]:124:22]>`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/stream/try_stream/mod.rs:63:5
|
63 | MapErr<St, F>(
| ^^^^^^
note: required by a bound in `futures::StreamExt::boxed`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/stream/stream/mod.rs:1331:23
|
1329 | fn boxed<'a>(self) -> BoxStream<'a, Self::Item>
| ----- required by a bound in this associated function
1330 | where
1331 | Self: Sized + Send + 'a,
| ^^^^ required by this bound in
`StreamExt::boxed`
error[E0277]: `*mut u8` cannot be sent between threads safely
--> src/http/mod.rs:125:14
|
125 | .boxed();
| ^^^^^ `*mut u8` cannot be sent between threads safely
|
= help: within
`futures::stream::Map<wasm_streams::readable::into_stream::IntoStream<'static>,
[closure@reqwest::Response::bytes_stream::{closure#0}]>`, the trait
`std::marker::Send` is not implemented for `*mut u8`
note: required because it appears within the type `PhantomData<*mut u8>`
-->
/Users/kyle/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/marker.rs:791:12
|
791 | pub struct PhantomData<T: ?Sized>;
| ^^^^^^^^^^^
note: required because it appears within the type `JsValue`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/wasm-bindgen-0.2.87/src/lib.rs:92:12
|
92 | pub struct JsValue {
| ^^^^^^^
note: required because it appears within the type
`ReadableStreamGenericReader`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/wasm-streams-0.3.0/src/readable/sys.rs:143:14
|
143 | pub type ReadableStreamGenericReader;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
note: required because it appears within the type
`ReadableStreamDefaultReader`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/wasm-streams-0.3.0/src/readable/sys.rs:163:14
|
163 | pub type ReadableStreamDefaultReader;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
note: required because it appears within the type
`ReadableStreamDefaultReader<'static>`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/wasm-streams-0.3.0/src/readable/default_reader.rs:17:12
|
17 | pub struct ReadableStreamDefaultReader<'stream> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
note: required because it appears within the type
`Option<ReadableStreamDefaultReader<'static>>`
-->
/Users/kyle/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/option.rs:563:10
|
563 | pub enum Option<T> {
| ^^^^^^
note: required because it appears within the type `IntoStream<'static>`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/wasm-streams-0.3.0/src/readable/into_stream.rs:22:12
|
22 | pub struct IntoStream<'reader> {
| ^^^^^^^^^^
note: required because it appears within the type `Map<IntoStream<'static>,
[closure@Response::bytes_stream::{closure#0}]>`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/stream/stream/map.rs:15:16
|
15 | pub struct Map<St, F> {
| ^^^
= note: required for `Unique<Map<IntoStream<'static>, ...>>` to
implement `std::marker::Send`
= note: the full type name has been written to
'/Users/kyle/github/apache/arrow-rs/object_store/target/wasm32-unknown-unknown/debug/deps/object_store-87363e35aacc8eb7.long-type-262376943904190086.txt'
note: required because it appears within the type
`Box<Map<IntoStream<'static>, [closure@Response::bytes_stream::{closure#0}]>>`
-->
/Users/kyle/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/alloc/src/boxed.rs:195:12
|
195 | pub struct Box<
| ^^^
note: required because it appears within the type
`Pin<Box<Map<IntoStream<'static>,
[closure@Response::bytes_stream::{closure#0}]>>>`
-->
/Users/kyle/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/pin.rs:410:12
|
410 | pub struct Pin<P> {
| ^^^
note: required because it appears within the type `impl Stream<Item =
Result<Bytes, Error>>`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/reqwest-0.11.20/src/wasm/response.rs:137:34
|
137 | pub fn bytes_stream(self) -> impl futures_core::Stream<Item =
crate::Result<Bytes>> {
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
note: required because it appears within the type `IntoStream<impl
Stream<Item = Result<Bytes, Error>>>`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/stream/try_stream/into_stream.rs:12:16
|
12 | pub struct IntoStream<St> {
| ^^^^^^^^^^
note: required because it appears within the type `Map<IntoStream<impl
Stream<Item = Result<Bytes, Error>>>, MapErrFn<[[email protected]:124:22]>>`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/stream/stream/map.rs:15:16
|
15 | pub struct Map<St, F> {
| ^^^
note: required because it appears within the type `MapErr<impl Stream<Item =
Result<Bytes, Error>>, [[email protected]:124:22]>`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/stream/try_stream/mod.rs:63:5
|
63 | MapErr<St, F>(
| ^^^^^^
note: required by a bound in `futures::StreamExt::boxed`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/stream/stream/mod.rs:1331:23
|
1329 | fn boxed<'a>(self) -> BoxStream<'a, Self::Item>
| ----- required by a bound in this associated function
1330 | where
1331 | Self: Sized + Send + 'a,
| ^^^^ required by this bound in
`StreamExt::boxed`
error: future cannot be sent between threads safely
--> src/http/mod.rs:134:65
|
134 | async fn head(&self, location: &Path) -> Result<ObjectMeta> {
| _________________________________________________________________^
135 | | let status = self.client.list(Some(location), "0").await?;
136 | | match status.response.len() {
137 | | 1 => {
... |
152 | | }
153 | | }
| |_____^ future created by async block is not `Send`
|
= help: within `[async block@src/http/mod.rs:134:65: 153:6]`, the trait
`std::marker::Send` is not implemented for `*mut u8`
note: future is not `Send` as this value is used across an await
--> src/http/client.rs:198:42
|
198 | Ok(result) => result.bytes().await.context(ReqwestSnafu)?,
| ------ ^^^^^ -
`result` is later dropped here
| | |
| | await occurs here, with
`result` maybe used later
| has type `reqwest::Response` which is not `Send`
= note: required for the cast from `Pin<Box<[async
block@src/http/mod.rs:134:65: 153:6]>>` to `Pin<Box<dyn Future<Output =
Result<ObjectMeta, Error>> + Send>>`
= note: the full name for the target type has been written to
'/Users/kyle/github/apache/arrow-rs/object_store/target/wasm32-unknown-unknown/debug/deps/object_store-87363e35aacc8eb7.long-type-11917112363545009078.txt'
error: future cannot be sent between threads safely
--> src/http/mod.rs:134:65
|
134 | async fn head(&self, location: &Path) -> Result<ObjectMeta> {
| _________________________________________________________________^
135 | | let status = self.client.list(Some(location), "0").await?;
136 | | match status.response.len() {
137 | | 1 => {
... |
152 | | }
153 | | }
| |_____^ future created by async block is not `Send`
|
= help: within `[async block@src/http/mod.rs:134:65: 153:6]`, the trait
`std::marker::Send` is not implemented for
`Rc<RefCell<wasm_bindgen_futures::Inner>>`
note: future is not `Send` as this value is used across an await
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/reqwest-0.11.20/src/wasm/mod.rs:23:42
|
23 | let js_val =
JsFuture::from(promise).await.map_err(crate::error::wasm)?;
| ----------------------- ^^^^^
- `JsFuture::from(promise)` is later dropped here
| | |
| | await occurs here, with
`JsFuture::from(promise)` maybe used later
| has type `wasm_bindgen_futures::JsFuture` which is
not `Send`
= note: required for the cast from `Pin<Box<[async
block@src/http/mod.rs:134:65: 153:6]>>` to `Pin<Box<dyn Future<Output =
Result<ObjectMeta, Error>> + Send>>`
= note: the full name for the target type has been written to
'/Users/kyle/github/apache/arrow-rs/object_store/target/wasm32-unknown-unknown/debug/deps/object_store-87363e35aacc8eb7.long-type-11917112363545009078.txt'
error: future cannot be sent between threads safely
--> src/http/mod.rs:162:52
|
162 | ) -> Result<BoxStream<'_, Result<ObjectMeta>>> {
| ____________________________________________________^
163 | | let prefix_len = prefix.map(|p|
p.as_ref().len()).unwrap_or_default();
164 | | let status = self.client.list(prefix, "infinity").await?;
165 | | Ok(futures::stream::iter(
... |
177 | | .boxed())
178 | | }
| |_____^ future created by async block is not `Send`
|
= help: within `[async block@src/http/mod.rs:162:52: 178:6]`, the trait
`std::marker::Send` is not implemented for `*mut u8`
note: future is not `Send` as this value is used across an await
--> src/http/client.rs:198:42
|
198 | Ok(result) => result.bytes().await.context(ReqwestSnafu)?,
| ------ ^^^^^ -
`result` is later dropped here
| | |
| | await occurs here, with
`result` maybe used later
| has type `reqwest::Response` which is not `Send`
= note: required for the cast from `Pin<Box<[async
block@src/http/mod.rs:162:52: 178:6]>>` to `Pin<Box<dyn Future<Output =
Result<Pin<Box<...>>, ...>> + Send>>`
= note: the full name for the target type has been written to
'/Users/kyle/github/apache/arrow-rs/object_store/target/wasm32-unknown-unknown/debug/deps/object_store-87363e35aacc8eb7.long-type-17290204358261428026.txt'
error: future cannot be sent between threads safely
--> src/http/mod.rs:162:52
|
162 | ) -> Result<BoxStream<'_, Result<ObjectMeta>>> {
| ____________________________________________________^
163 | | let prefix_len = prefix.map(|p|
p.as_ref().len()).unwrap_or_default();
164 | | let status = self.client.list(prefix, "infinity").await?;
165 | | Ok(futures::stream::iter(
... |
177 | | .boxed())
178 | | }
| |_____^ future created by async block is not `Send`
|
= help: within `[async block@src/http/mod.rs:162:52: 178:6]`, the trait
`std::marker::Send` is not implemented for
`Rc<RefCell<wasm_bindgen_futures::Inner>>`
note: future is not `Send` as this value is used across an await
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/reqwest-0.11.20/src/wasm/mod.rs:23:42
|
23 | let js_val =
JsFuture::from(promise).await.map_err(crate::error::wasm)?;
| ----------------------- ^^^^^
- `JsFuture::from(promise)` is later dropped here
| | |
| | await occurs here, with
`JsFuture::from(promise)` maybe used later
| has type `wasm_bindgen_futures::JsFuture` which is
not `Send`
= note: required for the cast from `Pin<Box<[async
block@src/http/mod.rs:162:52: 178:6]>>` to `Pin<Box<dyn Future<Output =
Result<Pin<Box<...>>, ...>> + Send>>`
= note: the full name for the target type has been written to
'/Users/kyle/github/apache/arrow-rs/object_store/target/wasm32-unknown-unknown/debug/deps/object_store-87363e35aacc8eb7.long-type-17290204358261428026.txt'
error: future cannot be sent between threads safely
--> src/http/mod.rs:180:86
|
180 | async fn list_with_delimiter(&self, prefix: Option<&Path>) ->
Result<ListResult> {
|
______________________________________________________________________________________^
181 | | let status = self.client.list(prefix, "1").await?;
182 | | let prefix_len = prefix.map(|p|
p.as_ref().len()).unwrap_or(0);
183 | |
... |
209 | | })
210 | | }
| |_____^ future created by async block is not `Send`
|
= help: within `[async block@src/http/mod.rs:180:86: 210:6]`, the trait
`std::marker::Send` is not implemented for `*mut u8`
note: future is not `Send` as this value is used across an await
--> src/http/client.rs:198:42
|
198 | Ok(result) => result.bytes().await.context(ReqwestSnafu)?,
| ------ ^^^^^ -
`result` is later dropped here
| | |
| | await occurs here, with
`result` maybe used later
| has type `reqwest::Response` which is not `Send`
= note: required for the cast from `Pin<Box<[async
block@src/http/mod.rs:180:86: 210:6]>>` to `Pin<Box<dyn Future<Output =
Result<ListResult, Error>> + Send>>`
= note: the full name for the target type has been written to
'/Users/kyle/github/apache/arrow-rs/object_store/target/wasm32-unknown-unknown/debug/deps/object_store-87363e35aacc8eb7.long-type-7476912493252910664.txt'
error: future cannot be sent between threads safely
--> src/http/mod.rs:180:86
|
180 | async fn list_with_delimiter(&self, prefix: Option<&Path>) ->
Result<ListResult> {
|
______________________________________________________________________________________^
181 | | let status = self.client.list(prefix, "1").await?;
182 | | let prefix_len = prefix.map(|p|
p.as_ref().len()).unwrap_or(0);
183 | |
... |
209 | | })
210 | | }
| |_____^ future created by async block is not `Send`
|
= help: within `[async block@src/http/mod.rs:180:86: 210:6]`, the trait
`std::marker::Send` is not implemented for
`Rc<RefCell<wasm_bindgen_futures::Inner>>`
note: future is not `Send` as this value is used across an await
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/reqwest-0.11.20/src/wasm/mod.rs:23:42
|
23 | let js_val =
JsFuture::from(promise).await.map_err(crate::error::wasm)?;
| ----------------------- ^^^^^
- `JsFuture::from(promise)` is later dropped here
| | |
| | await occurs here, with
`JsFuture::from(promise)` maybe used later
| has type `wasm_bindgen_futures::JsFuture` which is
not `Send`
= note: required for the cast from `Pin<Box<[async
block@src/http/mod.rs:180:86: 210:6]>>` to `Pin<Box<dyn Future<Output =
Result<ListResult, Error>> + Send>>`
= note: the full name for the target type has been written to
'/Users/kyle/github/apache/arrow-rs/object_store/target/wasm32-unknown-unknown/debug/deps/object_store-87363e35aacc8eb7.long-type-7476912493252910664.txt'
error: future cannot be sent between threads safely
--> src/http/mod.rs:212:64
|
212 | async fn copy(&self, from: &Path, to: &Path) -> Result<()> {
| ________________________________________________________________^
213 | | self.client.copy(from, to, true).await
214 | | }
| |_____^ future created by async block is not `Send`
|
= help: within `[async block@src/http/mod.rs:212:64: 214:6]`, the trait
`std::marker::Send` is not implemented for `*mut u8`
note: future is not `Send` as this value is used across an await
--> src/http/client.rs:284:60
|
272 | return match builder.send_retry(&self.retry_config).await {
| --------------------------------------------
has type `std::result::Result<reqwest::Response, retry::Error>` which is not
`Send`
...
284 | self.create_parent_directories(to).await?;
| ^^^^^ await
occurs here, with `builder.send_retry(&self.retry_config).await` maybe used
later
...
289 | };
| - `builder.send_retry(&self.retry_config).await` is later
dropped here
= note: required for the cast from `Pin<Box<[async
block@src/http/mod.rs:212:64: 214:6]>>` to `Pin<Box<dyn Future<Output =
Result<(), Error>> + Send>>`
= note: the full name for the target type has been written to
'/Users/kyle/github/apache/arrow-rs/object_store/target/wasm32-unknown-unknown/debug/deps/object_store-87363e35aacc8eb7.long-type-13573442131717126860.txt'
error: future cannot be sent between threads safely
--> src/http/mod.rs:216:78
|
216 | async fn copy_if_not_exists(&self, from: &Path, to: &Path) ->
Result<()> {
|
______________________________________________________________________________^
217 | | self.client.copy(from, to, false).await
218 | | }
| |_____^ future created by async block is not `Send`
|
= help: within `[async block@src/http/mod.rs:216:78: 218:6]`, the trait
`std::marker::Send` is not implemented for `*mut u8`
note: future is not `Send` as this value is used across an await
--> src/http/client.rs:284:60
|
272 | return match builder.send_retry(&self.retry_config).await {
| --------------------------------------------
has type `std::result::Result<reqwest::Response, retry::Error>` which is not
`Send`
...
284 | self.create_parent_directories(to).await?;
| ^^^^^ await
occurs here, with `builder.send_retry(&self.retry_config).await` maybe used
later
...
289 | };
| - `builder.send_retry(&self.retry_config).await` is later
dropped here
= note: required for the cast from `Pin<Box<[async
block@src/http/mod.rs:216:78: 218:6]>>` to `Pin<Box<dyn Future<Output =
Result<(), Error>> + Send>>`
= note: the full name for the target type has been written to
'/Users/kyle/github/apache/arrow-rs/object_store/target/wasm32-unknown-unknown/debug/deps/object_store-87363e35aacc8eb7.long-type-16365264314614274671.txt'
error[E0599]: no method named `is_connect` found for reference
`&reqwest::Error` in the current scope
--> src/client/retry.rs:98:44
|
98 | (Some(source), None) if source.is_connect() => {
| ^^^^^^^^^^ method not found
in `&Error`
error: future cannot be sent between threads safely
--> src/client/retry.rs:162:9
|
162 | / async move {
163 | | let mut retries = 0;
164 | | let now = Instant::now();
165 | |
... |
254 | | }
255 | | }
| |_________^ future created by async block is not `Send`
|
= help: within `[async block@src/client/retry.rs:162:9: 255:10]`, the
trait `std::marker::Send` is not implemented for `*mut u8`
note: future is not `Send` as this value is used across an await
--> src/client/retry.rs:203:60
|
169 | Ok(r) => match r.error_for_status_ref() {
| - has type `reqwest::Response` which is not
`Send`
...
203 | true => match r.text().await {
| ^^^^^ await
occurs here, with `r` maybe used later
...
225 | },
| - `r` is later dropped here
note: required by a bound in `futures::FutureExt::boxed`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/future/future/mod.rs:520:23
|
518 | fn boxed<'a>(self) -> BoxFuture<'a, Self::Output>
| ----- required by a bound in this associated function
519 | where
520 | Self: Sized + Send + 'a,
| ^^^^ required by this bound in `FutureExt::boxed`
error: future cannot be sent between threads safely
--> src/client/retry.rs:162:9
|
162 | / async move {
163 | | let mut retries = 0;
164 | | let now = Instant::now();
165 | |
... |
254 | | }
255 | | }
| |_________^ future created by async block is not `Send`
|
= help: within `reqwest::Response`, the trait `Sync` is not implemented
for `*mut u8`
note: future is not `Send` as this value is used across an await
--> src/client/retry.rs:203:60
|
169 | Ok(r) => match r.error_for_status_ref() {
| - has type `&reqwest::Response`
which is not `Send`
...
203 | true => match r.text().await {
| ^^^^^ await
occurs here, with `r` maybe used later
...
225 | },
| - `r` is later dropped here
help: consider moving this into a `let` binding to create a shorter lived
borrow
--> src/client/retry.rs:169:36
|
169 | Ok(r) => match r.error_for_status_ref() {
| ^^^^^^^^^^^^^^^^^^^^^^^^
note: required by a bound in `futures::FutureExt::boxed`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/future/future/mod.rs:520:23
|
518 | fn boxed<'a>(self) -> BoxFuture<'a, Self::Output>
| ----- required by a bound in this associated function
519 | where
520 | Self: Sized + Send + 'a,
| ^^^^ required by this bound in `FutureExt::boxed`
error: future cannot be sent between threads safely
--> src/client/retry.rs:162:9
|
162 | / async move {
163 | | let mut retries = 0;
164 | | let now = Instant::now();
165 | |
... |
254 | | }
255 | | }
| |_________^ future created by async block is not `Send`
|
= help: within `[async block@src/client/retry.rs:162:9: 255:10]`, the
trait `std::marker::Send` is not implemented for
`Rc<RefCell<wasm_bindgen_futures::Inner>>`
note: future is not `Send` as this value is used across an await
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/reqwest-0.11.20/src/wasm/mod.rs:23:42
|
23 | let js_val =
JsFuture::from(promise).await.map_err(crate::error::wasm)?;
| ----------------------- ^^^^^
- `JsFuture::from(promise)` is later dropped here
| | |
| | await occurs here, with
`JsFuture::from(promise)` maybe used later
| has type `wasm_bindgen_futures::JsFuture` which is
not `Send`
note: required by a bound in `futures::FutureExt::boxed`
-->
/Users/kyle/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/future/future/mod.rs:520:23
|
518 | fn boxed<'a>(self) -> BoxFuture<'a, Self::Output>
| ----- required by a bound in this associated function
519 | where
520 | Self: Sized + Send + 'a,
| ^^^^ required by this bound in `FutureExt::boxed`
error[E0599]: no method named `user_agent` found for struct `ClientBuilder`
in the current scope
--> src/client/mod.rs:452:51
|
452 | Some(user_agent) => builder =
builder.user_agent(user_agent.get()?),
| ^^^^^^^^^^ method
not found in `ClientBuilder`
error[E0599]: no method named `user_agent` found for struct `ClientBuilder`
in the current scope
--> src/client/mod.rs:453:39
|
453 | None => builder = builder.user_agent(DEFAULT_USER_AGENT),
| ^^^^^^^^^^ method not found in
`ClientBuilder`
error[E0599]: no method named `add_root_certificate` found for struct
`ClientBuilder` in the current scope
--> src/client/mod.rs:468:35
|
468 | builder = builder.add_root_certificate(certificate);
| ^^^^^^^^^^^^^^^^^^^^ method not
found in `ClientBuilder`
error[E0599]: no method named `proxy` found for struct `ClientBuilder` in
the current scope
--> src/client/mod.rs:477:31
|
477 | builder = builder.proxy(proxy);
| ^^^^^ method not found in `ClientBuilder`
error[E0599]: no method named `timeout` found for struct `ClientBuilder` in
the current scope
--> src/client/mod.rs:481:31
|
481 | builder = builder.timeout(timeout.get()?)
| ^^^^^^^ method not found in
`ClientBuilder`
error[E0599]: no method named `connect_timeout` found for struct
`ClientBuilder` in the current scope
--> src/client/mod.rs:485:31
|
485 | builder = builder.connect_timeout(timeout.get()?)
| ^^^^^^^^^^^^^^^ method not found in
`ClientBuilder`
error[E0599]: no method named `pool_idle_timeout` found for struct
`ClientBuilder` in the current scope
--> src/client/mod.rs:489:31
|
489 | builder = builder.pool_idle_timeout(timeout.get()?)
| ^^^^^^^^^^^^^^^^^ method not found in
`ClientBuilder`
error[E0599]: no method named `pool_max_idle_per_host` found for struct
`ClientBuilder` in the current scope
--> src/client/mod.rs:493:31
|
493 | builder = builder.pool_max_idle_per_host(max.get()?)
| ^^^^^^^^^^^^^^^^^^^^^^ method not found
in `ClientBuilder`
error[E0599]: no method named `http2_keep_alive_interval` found for struct
`ClientBuilder` in the current scope
--> src/client/mod.rs:497:31
|
497 | builder =
builder.http2_keep_alive_interval(interval.get()?)
| ^^^^^^^^^^^^^^^^^^^^^^^^^ method not
found in `ClientBuilder`
error[E0599]: no method named `http2_keep_alive_timeout` found for struct
`ClientBuilder` in the current scope
--> src/client/mod.rs:501:31
|
501 | builder = builder.http2_keep_alive_timeout(interval.get()?)
| ^^^^^^^^^^^^^^^^^^^^^^^^ method not
found in `ClientBuilder`
error[E0599]: no method named `http2_keep_alive_while_idle` found for struct
`ClientBuilder` in the current scope
--> src/client/mod.rs:505:31
|
505 | builder = builder.http2_keep_alive_while_idle(true)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ method not
found in `ClientBuilder`
error[E0599]: no method named `http1_only` found for struct `ClientBuilder`
in the current scope
--> src/client/mod.rs:509:31
|
509 | builder = builder.http1_only()
| ^^^^^^^^^^ method not found in
`ClientBuilder`
error[E0599]: no method named `http2_prior_knowledge` found for struct
`ClientBuilder` in the current scope
--> src/client/mod.rs:513:31
|
513 | builder = builder.http2_prior_knowledge()
| ^^^^^^^^^^^^^^^^^^^^^ method not found
in `ClientBuilder`
error[E0599]: no method named `danger_accept_invalid_certs` found for struct
`ClientBuilder` in the current scope
--> src/client/mod.rs:517:31
|
517 | builder = builder.danger_accept_invalid_certs(true)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ method not
found in `ClientBuilder`
error[E0599]: no method named `https_only` found for struct `ClientBuilder`
in the current scope
--> src/client/mod.rs:521:14
|
520 | / builder
521 | | .https_only(!self.allow_http.get()?)
| | -^^^^^^^^^^ method not found in `ClientBuilder`
| |_____________|
|
Some errors have detailed explanations: E0277, E0432, E0433, E0599.
For more information about an error, try `rustc --explain E0277`.
```
</details>
**To Reproduce**
```
git clone https://github.com/apache/arrow-rs
git checkout b66c57c4b4
cd object_store
cargo build -p object_store --target wasm32-unknown-unknown --features http
```
**Expected behavior**
Expected the crate to build with the `http` feature. The readme indicates
that the aws, azure, and gcp features don't work in wasm, but I was hoping the
http feature would.
**Additional context**
I have a wasm-bindgen library to read Parquet in WebAssembly and return an
Arrow table to JavaScript: https://github.com/kylebarron/parquet-wasm. I have
an existing implementation working using a `RangedAsyncReader` from
https://github.com/DataEngineeringLabs/ranged-reader-rs but I was trying to
test out the object store reader implementation to see if it would coalesce
requests better. Right now I'm seeing a bunch of requests per row group, and
especially from the browser coalescing requests is a high priority. See e.g.
https://observablehq.com/d/f5723cea6661fb71, where I'm seeing 33 content
requests for a parquet file with 7 row groups. (For context, with the
`parquet2` implementation it appeared to make a separate request for each and
every array in every row group)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]