opendal 0.1.12 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Cargo.lock +31 -36
- data/Cargo.toml +1 -1
- data/DEPENDENCIES.rust.tsv +25 -35
- data/README.md +1 -1
- data/core/CHANGELOG.md +4 -0
- data/core/Cargo.lock +128 -187
- data/core/Cargo.toml +95 -95
- data/core/DEPENDENCIES.rust.tsv +259 -289
- data/core/LICENSE +16 -0
- data/core/benches/vs_fs/Cargo.toml +1 -1
- data/core/benches/vs_s3/Cargo.toml +1 -1
- data/core/core/CHANGELOG.md +4 -0
- data/core/core/Cargo.toml +1 -1
- data/core/core/LICENSE +16 -0
- data/core/core/src/docs/upgrade.md +8 -0
- data/core/core/src/lib.rs +1 -3
- data/core/core/src/raw/futures_util.rs +26 -21
- data/core/core/src/raw/http_util/error.rs +9 -0
- data/core/core/src/raw/ops.rs +1 -0
- data/core/core/src/types/http_transport/mod.rs +30 -2
- data/core/core/src/types/http_transport/uri.rs +166 -0
- data/core/core/src/types/metadata.rs +1 -0
- data/core/core/src/types/mod.rs +2 -0
- data/core/http-transports/reqwest/Cargo.toml +1 -1
- data/core/http-transports/reqwest/LICENSE +16 -0
- data/core/http-transports/reqwest/src/lib.rs +46 -4
- data/core/layers/async-backtrace/Cargo.toml +2 -2
- data/core/layers/async-backtrace/LICENSE +16 -0
- data/core/layers/await-tree/Cargo.toml +2 -2
- data/core/layers/await-tree/LICENSE +16 -0
- data/core/layers/capability-check/Cargo.toml +2 -2
- data/core/layers/capability-check/LICENSE +16 -0
- data/core/layers/chaos/Cargo.toml +2 -2
- data/core/layers/chaos/LICENSE +16 -0
- data/core/layers/concurrent-limit/Cargo.toml +3 -3
- data/core/layers/concurrent-limit/LICENSE +16 -0
- data/core/layers/dtrace/Cargo.toml +2 -2
- data/core/layers/dtrace/LICENSE +16 -0
- data/core/layers/fastmetrics/Cargo.toml +3 -3
- data/core/layers/fastmetrics/LICENSE +16 -0
- data/core/layers/fastrace/Cargo.toml +2 -2
- data/core/layers/fastrace/LICENSE +16 -0
- data/core/layers/foyer/Cargo.toml +2 -2
- data/core/layers/foyer/LICENSE +16 -0
- data/core/layers/hotpath/Cargo.toml +2 -2
- data/core/layers/hotpath/LICENSE +16 -0
- data/core/layers/immutable-index/Cargo.toml +2 -2
- data/core/layers/immutable-index/LICENSE +16 -0
- data/core/layers/logging/Cargo.toml +2 -2
- data/core/layers/logging/LICENSE +16 -0
- data/core/layers/metrics/Cargo.toml +3 -3
- data/core/layers/metrics/LICENSE +16 -0
- data/core/layers/mime-guess/Cargo.toml +2 -2
- data/core/layers/mime-guess/LICENSE +16 -0
- data/core/layers/observe-metrics-common/Cargo.toml +1 -1
- data/core/layers/observe-metrics-common/LICENSE +16 -0
- data/core/layers/otelmetrics/Cargo.toml +3 -3
- data/core/layers/otelmetrics/LICENSE +16 -0
- data/core/layers/oteltrace/Cargo.toml +2 -2
- data/core/layers/oteltrace/LICENSE +16 -0
- data/core/layers/prometheus/Cargo.toml +3 -3
- data/core/layers/prometheus/LICENSE +16 -0
- data/core/layers/prometheus-client/Cargo.toml +3 -3
- data/core/layers/prometheus-client/LICENSE +16 -0
- data/core/layers/retry/Cargo.toml +4 -4
- data/core/layers/retry/LICENSE +16 -0
- data/core/layers/route/Cargo.toml +3 -3
- data/core/layers/route/LICENSE +16 -0
- data/core/layers/tail-cut/Cargo.toml +2 -2
- data/core/layers/tail-cut/LICENSE +16 -0
- data/core/layers/throttle/Cargo.toml +2 -2
- data/core/layers/throttle/LICENSE +16 -0
- data/core/layers/timeout/Cargo.toml +3 -3
- data/core/layers/timeout/LICENSE +16 -0
- data/core/layers/tracing/Cargo.toml +2 -2
- data/core/layers/tracing/LICENSE +16 -0
- data/core/services/aliyun-drive/Cargo.toml +2 -2
- data/core/services/aliyun-drive/LICENSE +16 -0
- data/core/services/alluxio/Cargo.toml +1 -1
- data/core/services/alluxio/LICENSE +16 -0
- data/core/services/azblob/Cargo.toml +2 -2
- data/core/services/azblob/LICENSE +16 -0
- data/core/services/azblob/src/backend.rs +21 -7
- data/core/services/azblob/src/config.rs +4 -1
- data/core/services/azdls/Cargo.toml +3 -3
- data/core/services/azdls/LICENSE +16 -0
- data/core/services/azfile/Cargo.toml +2 -2
- data/core/services/azfile/LICENSE +16 -0
- data/core/services/azure-common/Cargo.toml +1 -1
- data/core/services/azure-common/LICENSE +16 -0
- data/core/services/b2/Cargo.toml +2 -2
- data/core/services/b2/LICENSE +16 -0
- data/core/services/cacache/Cargo.toml +1 -1
- data/core/services/cacache/LICENSE +16 -0
- data/core/services/cloudflare-kv/Cargo.toml +1 -1
- data/core/services/cloudflare-kv/LICENSE +16 -0
- data/core/services/compfs/Cargo.toml +1 -1
- data/core/services/compfs/LICENSE +16 -0
- data/core/services/compfs/src/core.rs +27 -11
- data/core/services/cos/Cargo.toml +1 -1
- data/core/services/cos/LICENSE +16 -0
- data/core/services/d1/Cargo.toml +1 -1
- data/core/services/d1/LICENSE +16 -0
- data/core/services/dashmap/Cargo.toml +1 -1
- data/core/services/dashmap/LICENSE +16 -0
- data/core/services/dbfs/Cargo.toml +1 -1
- data/core/services/dbfs/LICENSE +16 -0
- data/core/services/dropbox/Cargo.toml +2 -2
- data/core/services/dropbox/LICENSE +16 -0
- data/core/services/etcd/Cargo.toml +2 -2
- data/core/services/etcd/LICENSE +16 -0
- data/core/services/etcd/src/core.rs +3 -3
- data/core/services/foundationdb/Cargo.toml +1 -1
- data/core/services/foundationdb/LICENSE +16 -0
- data/core/services/foyer/Cargo.toml +3 -3
- data/core/services/foyer/LICENSE +16 -0
- data/core/services/fs/Cargo.toml +1 -1
- data/core/services/fs/LICENSE +16 -0
- data/core/services/fs/src/core.rs +69 -10
- data/core/services/ftp/Cargo.toml +2 -2
- data/core/services/ftp/LICENSE +16 -0
- data/core/services/ftp/src/core.rs +1 -1
- data/core/services/ftp/src/reader.rs +1 -1
- data/core/services/ftp/src/writer.rs +1 -1
- data/core/services/gcs/Cargo.toml +3 -2
- data/core/services/gcs/LICENSE +16 -0
- data/core/services/gcs/src/composer.rs +11 -21
- data/core/services/gcs-grpc/Cargo.toml +1 -1
- data/core/services/gcs-grpc/proto/google/storage/v2/storage.proto +17 -18
- data/core/services/gdrive/Cargo.toml +3 -2
- data/core/services/gdrive/LICENSE +16 -0
- data/core/services/gdrive/src/docs.md +2 -0
- data/core/services/gdrive/src/path_index.rs +109 -18
- data/core/services/ghac/Cargo.toml +2 -2
- data/core/services/ghac/LICENSE +16 -0
- data/core/services/github/Cargo.toml +1 -1
- data/core/services/github/LICENSE +16 -0
- data/core/services/goosefs/Cargo.toml +13 -4
- data/core/services/goosefs/LICENSE +16 -0
- data/core/services/goosefs/README.md +11 -0
- data/core/services/goosefs/src/backend.rs +3 -5
- data/core/services/goosefs/src/core.rs +1 -1
- data/core/services/goosefs/src/docs.md +44 -3
- data/core/services/goosefs/src/reader.rs +22 -89
- data/core/services/gridfs/Cargo.toml +2 -2
- data/core/services/gridfs/LICENSE +16 -0
- data/core/services/hdfs/Cargo.toml +1 -1
- data/core/services/hdfs/LICENSE +16 -0
- data/core/services/hdfs-native/Cargo.toml +1 -1
- data/core/services/hdfs-native/LICENSE +16 -0
- data/core/services/hf/Cargo.toml +3 -3
- data/core/services/hf/LICENSE +16 -0
- data/core/services/hf/src/backend.rs +77 -9
- data/core/services/hf/src/config.rs +58 -0
- data/core/services/hf/src/core.rs +695 -318
- data/core/services/hf/src/docs.md +29 -0
- data/core/services/hf/src/lister.rs +3 -3
- data/core/services/hf/src/reader.rs +128 -143
- data/core/services/http/Cargo.toml +3 -3
- data/core/services/http/LICENSE +16 -0
- data/core/services/ipfs/Cargo.toml +1 -1
- data/core/services/ipfs/LICENSE +16 -0
- data/core/services/ipmfs/Cargo.toml +1 -1
- data/core/services/ipmfs/LICENSE +16 -0
- data/core/services/koofr/Cargo.toml +2 -2
- data/core/services/koofr/LICENSE +16 -0
- data/core/services/lakefs/Cargo.toml +1 -1
- data/core/services/lakefs/LICENSE +16 -0
- data/core/services/memcached/Cargo.toml +2 -2
- data/core/services/memcached/LICENSE +16 -0
- data/core/services/memcached/src/core.rs +3 -3
- data/core/services/mini_moka/Cargo.toml +1 -1
- data/core/services/mini_moka/LICENSE +16 -0
- data/core/services/moka/Cargo.toml +1 -1
- data/core/services/moka/LICENSE +16 -0
- data/core/services/mongodb/Cargo.toml +2 -2
- data/core/services/mongodb/LICENSE +16 -0
- data/core/services/monoiofs/Cargo.toml +2 -2
- data/core/services/monoiofs/LICENSE +16 -0
- data/core/services/monoiofs/src/core.rs +27 -11
- data/core/services/mysql/Cargo.toml +2 -2
- data/core/services/mysql/LICENSE +16 -0
- data/core/services/obs/Cargo.toml +1 -1
- data/core/services/obs/LICENSE +16 -0
- data/core/services/onedrive/Cargo.toml +2 -2
- data/core/services/onedrive/LICENSE +16 -0
- data/core/services/opfs/Cargo.toml +1 -1
- data/core/services/opfs/LICENSE +16 -0
- data/core/services/oss/Cargo.toml +1 -1
- data/core/services/oss/LICENSE +16 -0
- data/core/services/pcloud/Cargo.toml +1 -1
- data/core/services/pcloud/LICENSE +16 -0
- data/core/services/persy/Cargo.toml +1 -1
- data/core/services/persy/LICENSE +16 -0
- data/core/services/postgresql/Cargo.toml +2 -2
- data/core/services/postgresql/LICENSE +16 -0
- data/core/services/redb/Cargo.toml +1 -1
- data/core/services/redb/LICENSE +16 -0
- data/core/services/redis/Cargo.toml +2 -2
- data/core/services/redis/LICENSE +16 -0
- data/core/services/redis/src/core.rs +1 -1
- data/core/services/rocksdb/Cargo.toml +1 -1
- data/core/services/rocksdb/LICENSE +16 -0
- data/core/services/s3/Cargo.toml +1 -1
- data/core/services/s3/LICENSE +16 -0
- data/core/services/seafile/Cargo.toml +4 -2
- data/core/services/seafile/LICENSE +16 -0
- data/core/services/seafile/src/backend.rs +2 -3
- data/core/services/seafile/src/core.rs +189 -86
- data/core/services/seafile/src/docs.md +2 -0
- data/core/services/sftp/Cargo.toml +2 -2
- data/core/services/sftp/LICENSE +16 -0
- data/core/services/sftp/src/core.rs +1 -1
- data/core/services/sftp/src/reader.rs +1 -1
- data/core/services/sled/Cargo.toml +1 -1
- data/core/services/sled/LICENSE +16 -0
- data/core/services/sqlite/Cargo.toml +2 -2
- data/core/services/sqlite/LICENSE +16 -0
- data/core/services/surrealdb/Cargo.toml +2 -2
- data/core/services/surrealdb/LICENSE +16 -0
- data/core/services/swift/Cargo.toml +1 -1
- data/core/services/swift/LICENSE +16 -0
- data/core/services/tikv/Cargo.toml +2 -2
- data/core/services/tikv/LICENSE +16 -0
- data/core/services/tos/Cargo.toml +1 -1
- data/core/services/tos/LICENSE +16 -0
- data/core/services/upyun/Cargo.toml +1 -1
- data/core/services/upyun/LICENSE +16 -0
- data/core/services/vercel-artifacts/Cargo.toml +1 -1
- data/core/services/vercel-artifacts/LICENSE +16 -0
- data/core/services/vercel-blob/Cargo.toml +1 -1
- data/core/services/vercel-blob/LICENSE +16 -0
- data/core/services/webdav/Cargo.toml +1 -2
- data/core/services/webdav/LICENSE +16 -0
- data/core/services/webhdfs/Cargo.toml +2 -2
- data/core/services/webhdfs/LICENSE +16 -0
- data/core/services/yandex-disk/Cargo.toml +1 -1
- data/core/services/yandex-disk/LICENSE +16 -0
- data/core/src/lib.rs +1 -3
- data/core/testkit/Cargo.toml +4 -4
- data/core/testkit/LICENSE +16 -0
- data/core/upgrade.md +8 -0
- metadata +3 -2
data/core/services/d1/LICENSE
CHANGED
|
@@ -199,3 +199,19 @@
|
|
|
199
199
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
200
200
|
See the License for the specific language governing permissions and
|
|
201
201
|
limitations under the License.
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
------------------------------------------------------------------------------------
|
|
205
|
+
This product bundles third-party components under other open source licenses.
|
|
206
|
+
This section summarizes those components and their licenses. See the referenced
|
|
207
|
+
license files for text of these licenses.
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
Creative Commons Zero v1.0 Universal
|
|
211
|
+
------------------------------------
|
|
212
|
+
|
|
213
|
+
bindings/dotnet/.gitignore
|
|
214
|
+
|
|
215
|
+
The above file is derived from VisualStudio.gitignore in
|
|
216
|
+
https://github.com/github/gitignore. Its license text is in
|
|
217
|
+
bindings/dotnet/LICENSE-CC0-1.0.txt.
|
|
@@ -34,7 +34,7 @@ all-features = true
|
|
|
34
34
|
[dependencies]
|
|
35
35
|
dashmap = "6"
|
|
36
36
|
log = { workspace = true }
|
|
37
|
-
opendal-core = { path = "../../core", version = "0.59.
|
|
37
|
+
opendal-core = { path = "../../core", version = "0.59.2", default-features = false }
|
|
38
38
|
serde = { workspace = true, features = ["derive"] }
|
|
39
39
|
|
|
40
40
|
[dev-dependencies]
|
|
@@ -199,3 +199,19 @@
|
|
|
199
199
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
200
200
|
See the License for the specific language governing permissions and
|
|
201
201
|
limitations under the License.
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
------------------------------------------------------------------------------------
|
|
205
|
+
This product bundles third-party components under other open source licenses.
|
|
206
|
+
This section summarizes those components and their licenses. See the referenced
|
|
207
|
+
license files for text of these licenses.
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
Creative Commons Zero v1.0 Universal
|
|
211
|
+
------------------------------------
|
|
212
|
+
|
|
213
|
+
bindings/dotnet/.gitignore
|
|
214
|
+
|
|
215
|
+
The above file is derived from VisualStudio.gitignore in
|
|
216
|
+
https://github.com/github/gitignore. Its license text is in
|
|
217
|
+
bindings/dotnet/LICENSE-CC0-1.0.txt.
|
|
@@ -36,7 +36,7 @@ base64 = { workspace = true }
|
|
|
36
36
|
bytes = { workspace = true }
|
|
37
37
|
http = { workspace = true }
|
|
38
38
|
log = { workspace = true }
|
|
39
|
-
opendal-core = { path = "../../core", version = "0.59.
|
|
39
|
+
opendal-core = { path = "../../core", version = "0.59.2", default-features = false }
|
|
40
40
|
serde = { workspace = true, features = ["derive"] }
|
|
41
41
|
serde_json = { workspace = true }
|
|
42
42
|
|
data/core/services/dbfs/LICENSE
CHANGED
|
@@ -199,3 +199,19 @@
|
|
|
199
199
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
200
200
|
See the License for the specific language governing permissions and
|
|
201
201
|
limitations under the License.
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
------------------------------------------------------------------------------------
|
|
205
|
+
This product bundles third-party components under other open source licenses.
|
|
206
|
+
This section summarizes those components and their licenses. See the referenced
|
|
207
|
+
license files for text of these licenses.
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
Creative Commons Zero v1.0 Universal
|
|
211
|
+
------------------------------------
|
|
212
|
+
|
|
213
|
+
bindings/dotnet/.gitignore
|
|
214
|
+
|
|
215
|
+
The above file is derived from VisualStudio.gitignore in
|
|
216
|
+
https://github.com/github/gitignore. Its license text is in
|
|
217
|
+
bindings/dotnet/LICENSE-CC0-1.0.txt.
|
|
@@ -32,10 +32,10 @@ version = { workspace = true }
|
|
|
32
32
|
all-features = true
|
|
33
33
|
|
|
34
34
|
[dependencies]
|
|
35
|
-
asyncband = { workspace = true }
|
|
35
|
+
asyncband = { workspace = true, features = ["mutex"] }
|
|
36
36
|
bytes = { workspace = true }
|
|
37
37
|
http = { workspace = true }
|
|
38
|
-
opendal-core = { path = "../../core", version = "0.59.
|
|
38
|
+
opendal-core = { path = "../../core", version = "0.59.2", default-features = false }
|
|
39
39
|
serde = { workspace = true, features = ["derive"] }
|
|
40
40
|
serde_json = { workspace = true }
|
|
41
41
|
|
|
@@ -199,3 +199,19 @@
|
|
|
199
199
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
200
200
|
See the License for the specific language governing permissions and
|
|
201
201
|
limitations under the License.
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
------------------------------------------------------------------------------------
|
|
205
|
+
This product bundles third-party components under other open source licenses.
|
|
206
|
+
This section summarizes those components and their licenses. See the referenced
|
|
207
|
+
license files for text of these licenses.
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
Creative Commons Zero v1.0 Universal
|
|
211
|
+
------------------------------------
|
|
212
|
+
|
|
213
|
+
bindings/dotnet/.gitignore
|
|
214
|
+
|
|
215
|
+
The above file is derived from VisualStudio.gitignore in
|
|
216
|
+
https://github.com/github/gitignore. Its license text is in
|
|
217
|
+
bindings/dotnet/LICENSE-CC0-1.0.txt.
|
|
@@ -32,9 +32,9 @@ version = { workspace = true }
|
|
|
32
32
|
all-features = true
|
|
33
33
|
|
|
34
34
|
[dependencies]
|
|
35
|
+
asyncband = { workspace = true, features = ["pool"] }
|
|
35
36
|
etcd-client = { version = "0.19.0", features = ["tls"] }
|
|
36
|
-
|
|
37
|
-
opendal-core = { path = "../../core", version = "0.59.1", default-features = false }
|
|
37
|
+
opendal-core = { path = "../../core", version = "0.59.2", default-features = false }
|
|
38
38
|
serde = { workspace = true, features = ["derive"] }
|
|
39
39
|
tokio = { workspace = true, features = ["time"] }
|
|
40
40
|
|
data/core/services/etcd/LICENSE
CHANGED
|
@@ -199,3 +199,19 @@
|
|
|
199
199
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
200
200
|
See the License for the specific language governing permissions and
|
|
201
201
|
limitations under the License.
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
------------------------------------------------------------------------------------
|
|
205
|
+
This product bundles third-party components under other open source licenses.
|
|
206
|
+
This section summarizes those components and their licenses. See the referenced
|
|
207
|
+
license files for text of these licenses.
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
Creative Commons Zero v1.0 Universal
|
|
211
|
+
------------------------------------
|
|
212
|
+
|
|
213
|
+
bindings/dotnet/.gitignore
|
|
214
|
+
|
|
215
|
+
The above file is derived from VisualStudio.gitignore in
|
|
216
|
+
https://github.com/github/gitignore. Its license text is in
|
|
217
|
+
bindings/dotnet/LICENSE-CC0-1.0.txt.
|
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
// specific language governing permissions and limitations
|
|
16
16
|
// under the License.
|
|
17
17
|
|
|
18
|
+
use asyncband::pool::ManageObject;
|
|
19
|
+
use asyncband::pool::ObjectStatus;
|
|
20
|
+
use asyncband::pool::bounded;
|
|
18
21
|
use etcd_client::Client;
|
|
19
22
|
use etcd_client::ConnectOptions;
|
|
20
|
-
use fastpool::ManageObject;
|
|
21
|
-
use fastpool::ObjectStatus;
|
|
22
|
-
use fastpool::bounded;
|
|
23
23
|
use std::fmt::Debug;
|
|
24
24
|
use std::sync::Arc;
|
|
25
25
|
|
|
@@ -36,7 +36,7 @@ foundationdb = { version = "0.11.0", features = [
|
|
|
36
36
|
"embedded-fdb-include",
|
|
37
37
|
"fdb-7_3",
|
|
38
38
|
] }
|
|
39
|
-
opendal-core = { path = "../../core", version = "0.59.
|
|
39
|
+
opendal-core = { path = "../../core", version = "0.59.2", default-features = false }
|
|
40
40
|
serde = { workspace = true, features = ["derive"] }
|
|
41
41
|
|
|
42
42
|
[dev-dependencies]
|
|
@@ -199,3 +199,19 @@
|
|
|
199
199
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
200
200
|
See the License for the specific language governing permissions and
|
|
201
201
|
limitations under the License.
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
------------------------------------------------------------------------------------
|
|
205
|
+
This product bundles third-party components under other open source licenses.
|
|
206
|
+
This section summarizes those components and their licenses. See the referenced
|
|
207
|
+
license files for text of these licenses.
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
Creative Commons Zero v1.0 Universal
|
|
211
|
+
------------------------------------
|
|
212
|
+
|
|
213
|
+
bindings/dotnet/.gitignore
|
|
214
|
+
|
|
215
|
+
The above file is derived from VisualStudio.gitignore in
|
|
216
|
+
https://github.com/github/gitignore. Its license text is in
|
|
217
|
+
bindings/dotnet/LICENSE-CC0-1.0.txt.
|
|
@@ -34,12 +34,12 @@ all-features = true
|
|
|
34
34
|
[dependencies]
|
|
35
35
|
foyer = { version = "0.22.3" }
|
|
36
36
|
log = { workspace = true }
|
|
37
|
-
opendal-core = { path = "../../core", version = "0.59.
|
|
37
|
+
opendal-core = { path = "../../core", version = "0.59.2", default-features = false }
|
|
38
38
|
serde = { workspace = true, features = ["derive"] }
|
|
39
39
|
|
|
40
40
|
[dev-dependencies]
|
|
41
|
-
opendal = { path = "../..", version = "0.59.
|
|
42
|
-
opendal-core = { path = "../../core", version = "0.59.
|
|
41
|
+
opendal = { path = "../..", version = "0.59.2", features = ["services-memory"] }
|
|
42
|
+
opendal-core = { path = "../../core", version = "0.59.2", features = [
|
|
43
43
|
"services-memory",
|
|
44
44
|
] }
|
|
45
45
|
size = "0.5"
|
data/core/services/foyer/LICENSE
CHANGED
|
@@ -199,3 +199,19 @@
|
|
|
199
199
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
200
200
|
See the License for the specific language governing permissions and
|
|
201
201
|
limitations under the License.
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
------------------------------------------------------------------------------------
|
|
205
|
+
This product bundles third-party components under other open source licenses.
|
|
206
|
+
This section summarizes those components and their licenses. See the referenced
|
|
207
|
+
license files for text of these licenses.
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
Creative Commons Zero v1.0 Universal
|
|
211
|
+
------------------------------------
|
|
212
|
+
|
|
213
|
+
bindings/dotnet/.gitignore
|
|
214
|
+
|
|
215
|
+
The above file is derived from VisualStudio.gitignore in
|
|
216
|
+
https://github.com/github/gitignore. Its license text is in
|
|
217
|
+
bindings/dotnet/LICENSE-CC0-1.0.txt.
|
data/core/services/fs/Cargo.toml
CHANGED
|
@@ -34,7 +34,7 @@ all-features = true
|
|
|
34
34
|
[dependencies]
|
|
35
35
|
bytes = { workspace = true }
|
|
36
36
|
log = { workspace = true }
|
|
37
|
-
opendal-core = { path = "../../core", version = "0.59.
|
|
37
|
+
opendal-core = { path = "../../core", version = "0.59.2", default-features = false, features = [
|
|
38
38
|
"internal-tokio-rt",
|
|
39
39
|
] }
|
|
40
40
|
serde = { workspace = true, features = ["derive"] }
|
data/core/services/fs/LICENSE
CHANGED
|
@@ -199,3 +199,19 @@
|
|
|
199
199
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
200
200
|
See the License for the specific language governing permissions and
|
|
201
201
|
limitations under the License.
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
------------------------------------------------------------------------------------
|
|
205
|
+
This product bundles third-party components under other open source licenses.
|
|
206
|
+
This section summarizes those components and their licenses. See the referenced
|
|
207
|
+
license files for text of these licenses.
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
Creative Commons Zero v1.0 Universal
|
|
211
|
+
------------------------------------
|
|
212
|
+
|
|
213
|
+
bindings/dotnet/.gitignore
|
|
214
|
+
|
|
215
|
+
The above file is derived from VisualStudio.gitignore in
|
|
216
|
+
https://github.com/github/gitignore. Its license text is in
|
|
217
|
+
bindings/dotnet/LICENSE-CC0-1.0.txt.
|
|
@@ -41,24 +41,28 @@ impl FsCore {
|
|
|
41
41
|
/// lexical, so a key such as `../../etc/passwd` would otherwise escape the
|
|
42
42
|
/// configured `root` at syscall time. The fs backend documents that "all
|
|
43
43
|
/// operations will happen under this root", so we reject any key whose
|
|
44
|
-
/// components include a `..` (parent-dir) traversal
|
|
44
|
+
/// components include a `..` (parent-dir) traversal, a root directory, or a
|
|
45
|
+
/// path prefix: `PathBuf::join` discards the base when the key is absolute,
|
|
46
|
+
/// which covers `/etc/passwd` plus the Windows `C:\`, `\\?\` and UNC forms
|
|
47
|
+
/// that `normalize_path` leaves untouched.
|
|
45
48
|
pub fn confined_join(base: &Path, path: &str) -> Result<PathBuf> {
|
|
46
49
|
use std::path::Component;
|
|
47
50
|
let trimmed = path.trim_end_matches('/');
|
|
48
|
-
if Path::new(trimmed)
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return Err(Error::new(
|
|
53
|
-
ErrorKind::NotFound,
|
|
54
|
-
"path escapes the configured root via `..`",
|
|
51
|
+
if Path::new(trimmed).components().any(|c| {
|
|
52
|
+
matches!(
|
|
53
|
+
c,
|
|
54
|
+
Component::ParentDir | Component::RootDir | Component::Prefix(_)
|
|
55
55
|
)
|
|
56
|
-
|
|
56
|
+
}) {
|
|
57
|
+
return Err(
|
|
58
|
+
Error::new(ErrorKind::NotFound, "path escapes the configured root")
|
|
59
|
+
.with_context("path", path),
|
|
60
|
+
);
|
|
57
61
|
}
|
|
58
62
|
Ok(base.join(trimmed))
|
|
59
63
|
}
|
|
60
64
|
|
|
61
|
-
/// Join a caller-supplied key onto `self.root`,
|
|
65
|
+
/// Join a caller-supplied key onto `self.root`, keeping the result confined.
|
|
62
66
|
#[inline]
|
|
63
67
|
pub fn root_join(&self, path: &str) -> Result<PathBuf> {
|
|
64
68
|
Self::confined_join(&self.root, path)
|
|
@@ -382,4 +386,59 @@ mod tests {
|
|
|
382
386
|
let got = FsCore::get_user_metadata(&dst_path).unwrap();
|
|
383
387
|
assert_eq!(got.get("key").map(String::as_str), Some("preserved123"));
|
|
384
388
|
}
|
|
389
|
+
|
|
390
|
+
#[test]
|
|
391
|
+
fn test_confined_join_rejects_escaping_keys() {
|
|
392
|
+
let base = Path::new("/data/root");
|
|
393
|
+
for key in ["../etc/passwd", "a/../../b", "/etc/passwd", "//etc/passwd"] {
|
|
394
|
+
let err = FsCore::confined_join(base, key).unwrap_err();
|
|
395
|
+
assert_eq!(
|
|
396
|
+
err.kind(),
|
|
397
|
+
ErrorKind::NotFound,
|
|
398
|
+
"key should be rejected: {key}"
|
|
399
|
+
);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
#[test]
|
|
404
|
+
fn test_confined_join_allows_normal_keys() {
|
|
405
|
+
let base = Path::new("/data/root");
|
|
406
|
+
assert_eq!(
|
|
407
|
+
FsCore::confined_join(base, "a/b.txt").unwrap(),
|
|
408
|
+
PathBuf::from("/data/root/a/b.txt")
|
|
409
|
+
);
|
|
410
|
+
assert_eq!(
|
|
411
|
+
FsCore::confined_join(base, "a/b/").unwrap(),
|
|
412
|
+
PathBuf::from("/data/root/a/b")
|
|
413
|
+
);
|
|
414
|
+
// The root path `/` trims to empty and resolves to the base itself.
|
|
415
|
+
assert_eq!(
|
|
416
|
+
FsCore::confined_join(base, "/").unwrap(),
|
|
417
|
+
PathBuf::from("/data/root")
|
|
418
|
+
);
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
#[cfg(unix)]
|
|
422
|
+
#[tokio::test]
|
|
423
|
+
async fn test_delete_iter_rejects_absolute_path_outside_root() {
|
|
424
|
+
use opendal_core::Operator;
|
|
425
|
+
|
|
426
|
+
let root_dir = tempfile::TempDir::new().unwrap();
|
|
427
|
+
let outside_dir = tempfile::TempDir::new().unwrap();
|
|
428
|
+
|
|
429
|
+
let outside = outside_dir.path().join("outside.txt");
|
|
430
|
+
std::fs::write(&outside, b"content").unwrap();
|
|
431
|
+
|
|
432
|
+
let op =
|
|
433
|
+
Operator::new(crate::Fs::default().root(root_dir.path().to_str().unwrap())).unwrap();
|
|
434
|
+
|
|
435
|
+
// `Deleter` takes the caller's key verbatim, so an absolute key reaches
|
|
436
|
+
// `root_join` without `normalize_path` having stripped the leading `/`.
|
|
437
|
+
let err = op
|
|
438
|
+
.delete_iter([outside.to_str().unwrap().to_string()])
|
|
439
|
+
.await
|
|
440
|
+
.unwrap_err();
|
|
441
|
+
assert_eq!(err.kind(), ErrorKind::NotFound);
|
|
442
|
+
assert!(outside.exists());
|
|
443
|
+
}
|
|
385
444
|
}
|
|
@@ -32,11 +32,11 @@ version = { workspace = true }
|
|
|
32
32
|
all-features = true
|
|
33
33
|
|
|
34
34
|
[dependencies]
|
|
35
|
+
asyncband = { workspace = true, features = ["pool"] }
|
|
35
36
|
bytes = { workspace = true }
|
|
36
|
-
fastpool = "1.0.2"
|
|
37
37
|
http = { workspace = true }
|
|
38
38
|
log = { workspace = true }
|
|
39
|
-
opendal-core = { path = "../../core", version = "0.59.
|
|
39
|
+
opendal-core = { path = "../../core", version = "0.59.2", default-features = false }
|
|
40
40
|
rustls-native-certs = "0.8"
|
|
41
41
|
serde = { workspace = true, features = ["derive"] }
|
|
42
42
|
suppaftp = { version = "10.0.2", default-features = false, features = [
|
data/core/services/ftp/LICENSE
CHANGED
|
@@ -199,3 +199,19 @@
|
|
|
199
199
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
200
200
|
See the License for the specific language governing permissions and
|
|
201
201
|
limitations under the License.
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
------------------------------------------------------------------------------------
|
|
205
|
+
This product bundles third-party components under other open source licenses.
|
|
206
|
+
This section summarizes those components and their licenses. See the referenced
|
|
207
|
+
license files for text of these licenses.
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
Creative Commons Zero v1.0 Universal
|
|
211
|
+
------------------------------------
|
|
212
|
+
|
|
213
|
+
bindings/dotnet/.gitignore
|
|
214
|
+
|
|
215
|
+
The above file is derived from VisualStudio.gitignore in
|
|
216
|
+
https://github.com/github/gitignore. Its license text is in
|
|
217
|
+
bindings/dotnet/LICENSE-CC0-1.0.txt.
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
use std::sync::Arc;
|
|
19
19
|
use std::time::Duration;
|
|
20
20
|
|
|
21
|
-
use
|
|
21
|
+
use asyncband::pool::{ManageObject, ObjectStatus, bounded};
|
|
22
22
|
use suppaftp::FtpError;
|
|
23
23
|
use suppaftp::Status;
|
|
24
24
|
use suppaftp::tokio::AsyncRustlsConnector;
|
|
@@ -21,8 +21,8 @@ use super::core::Manager;
|
|
|
21
21
|
use super::core::format_ftp_error;
|
|
22
22
|
use super::lister::FtpLister;
|
|
23
23
|
use super::writer::FtpWriter;
|
|
24
|
+
use asyncband::pool::bounded;
|
|
24
25
|
use bytes::BytesMut;
|
|
25
|
-
use fastpool::bounded;
|
|
26
26
|
use opendal_core::raw::*;
|
|
27
27
|
use opendal_core::*;
|
|
28
28
|
use std::sync::Arc;
|
|
@@ -36,7 +36,7 @@ async-trait = "0.1"
|
|
|
36
36
|
bytes = { workspace = true }
|
|
37
37
|
http = { workspace = true }
|
|
38
38
|
log = { workspace = true }
|
|
39
|
-
opendal-core = { path = "../../core", version = "0.59.
|
|
39
|
+
opendal-core = { path = "../../core", version = "0.59.2", default-features = false, features = [
|
|
40
40
|
"reqsign",
|
|
41
41
|
] }
|
|
42
42
|
percent-encoding = "2.3"
|
|
@@ -50,6 +50,7 @@ tokio = { workspace = true, features = ["rt"] }
|
|
|
50
50
|
uuid = { workspace = true, features = ["v4"] }
|
|
51
51
|
|
|
52
52
|
[dev-dependencies]
|
|
53
|
+
asyncband = { workspace = true, features = ["latch", "mutex"] }
|
|
53
54
|
futures = { workspace = true }
|
|
54
55
|
serde_json = { workspace = true }
|
|
55
|
-
tokio = { workspace = true, features = ["macros", "rt-multi-thread"
|
|
56
|
+
tokio = { workspace = true, features = ["macros", "rt-multi-thread"] }
|
data/core/services/gcs/LICENSE
CHANGED
|
@@ -199,3 +199,19 @@
|
|
|
199
199
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
200
200
|
See the License for the specific language governing permissions and
|
|
201
201
|
limitations under the License.
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
------------------------------------------------------------------------------------
|
|
205
|
+
This product bundles third-party components under other open source licenses.
|
|
206
|
+
This section summarizes those components and their licenses. See the referenced
|
|
207
|
+
license files for text of these licenses.
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
Creative Commons Zero v1.0 Universal
|
|
211
|
+
------------------------------------
|
|
212
|
+
|
|
213
|
+
bindings/dotnet/.gitignore
|
|
214
|
+
|
|
215
|
+
The above file is derived from VisualStudio.gitignore in
|
|
216
|
+
https://github.com/github/gitignore. Its license text is in
|
|
217
|
+
bindings/dotnet/LICENSE-CC0-1.0.txt.
|
|
@@ -365,11 +365,12 @@ fn new_tasks(
|
|
|
365
365
|
|
|
366
366
|
#[cfg(test)]
|
|
367
367
|
mod tests {
|
|
368
|
-
use std::sync::Mutex;
|
|
369
368
|
use std::sync::atomic::AtomicUsize;
|
|
370
369
|
use std::sync::atomic::Ordering;
|
|
371
370
|
use std::time::Duration;
|
|
372
371
|
|
|
372
|
+
use asyncband::latch::Latch;
|
|
373
|
+
use asyncband::mutex::Mutex;
|
|
373
374
|
use futures::stream;
|
|
374
375
|
use http::Method;
|
|
375
376
|
use http::Response;
|
|
@@ -378,28 +379,25 @@ mod tests {
|
|
|
378
379
|
use reqsign_core::Signer;
|
|
379
380
|
use reqsign_google::RequestSigner;
|
|
380
381
|
use reqsign_google::TokenCredentialProvider;
|
|
381
|
-
use tokio::sync::Notify;
|
|
382
382
|
|
|
383
383
|
use super::*;
|
|
384
384
|
use opendal_core::raw::oio::Compose;
|
|
385
385
|
|
|
386
386
|
struct ComposeTransport {
|
|
387
|
-
started:
|
|
387
|
+
started: Latch,
|
|
388
388
|
active: AtomicUsize,
|
|
389
389
|
max_active: AtomicUsize,
|
|
390
390
|
generation: AtomicUsize,
|
|
391
|
-
notify: Notify,
|
|
392
391
|
requests: Mutex<Vec<serde_json::Value>>,
|
|
393
392
|
}
|
|
394
393
|
|
|
395
394
|
impl ComposeTransport {
|
|
396
395
|
fn new() -> Self {
|
|
397
396
|
Self {
|
|
398
|
-
started:
|
|
397
|
+
started: Latch::new(2),
|
|
399
398
|
active: AtomicUsize::new(0),
|
|
400
399
|
max_active: AtomicUsize::new(0),
|
|
401
400
|
generation: AtomicUsize::new(1),
|
|
402
|
-
notify: Notify::new(),
|
|
403
401
|
requests: Mutex::new(Vec::new()),
|
|
404
402
|
}
|
|
405
403
|
}
|
|
@@ -432,21 +430,13 @@ mod tests {
|
|
|
432
430
|
|
|
433
431
|
let value: serde_json::Value = serde_json::from_slice(&req.body().to_bytes())
|
|
434
432
|
.expect("compose request body must be valid JSON");
|
|
435
|
-
self.0.requests.lock().
|
|
433
|
+
self.0.requests.lock().await.push(value.clone());
|
|
436
434
|
|
|
437
435
|
if req.uri().path().contains("__opendal%2Fcompose%2F") {
|
|
438
436
|
let active = self.0.active.fetch_add(1, Ordering::SeqCst) + 1;
|
|
439
437
|
self.0.max_active.fetch_max(active, Ordering::SeqCst);
|
|
440
|
-
self.0.started.
|
|
441
|
-
self.0.
|
|
442
|
-
|
|
443
|
-
loop {
|
|
444
|
-
let notified = self.0.notify.notified();
|
|
445
|
-
if self.0.started.load(Ordering::SeqCst) >= 2 {
|
|
446
|
-
break;
|
|
447
|
-
}
|
|
448
|
-
notified.await;
|
|
449
|
-
}
|
|
438
|
+
self.0.started.count_down();
|
|
439
|
+
self.0.started.wait().await;
|
|
450
440
|
self.0.active.fetch_sub(1, Ordering::SeqCst);
|
|
451
441
|
}
|
|
452
442
|
|
|
@@ -485,7 +475,7 @@ mod tests {
|
|
|
485
475
|
|
|
486
476
|
if req.method() == Method::GET {
|
|
487
477
|
self.0.metadata_reads.fetch_add(1, Ordering::SeqCst);
|
|
488
|
-
let token = self.0.token.lock().
|
|
478
|
+
let token = self.0.token.lock().await.clone().unwrap();
|
|
489
479
|
let body = Buffer::from(
|
|
490
480
|
serde_json::to_vec(&serde_json::json!({
|
|
491
481
|
"size": "32",
|
|
@@ -504,7 +494,7 @@ mod tests {
|
|
|
504
494
|
.as_str()
|
|
505
495
|
.unwrap()
|
|
506
496
|
.to_string();
|
|
507
|
-
*self.0.token.lock().
|
|
497
|
+
*self.0.token.lock().await = Some(token);
|
|
508
498
|
|
|
509
499
|
if self.0.intermediate_posts.fetch_add(1, Ordering::SeqCst) == 0 {
|
|
510
500
|
return Err(Error::new(
|
|
@@ -586,7 +576,7 @@ mod tests {
|
|
|
586
576
|
.expect("composition must succeed");
|
|
587
577
|
|
|
588
578
|
assert_eq!(transport.max_active.load(Ordering::SeqCst), 2);
|
|
589
|
-
let requests = transport.requests.lock().
|
|
579
|
+
let requests = transport.requests.lock().await;
|
|
590
580
|
assert_eq!(requests.len(), 3);
|
|
591
581
|
|
|
592
582
|
let source_lists: Vec<&Vec<serde_json::Value>> = requests
|
|
@@ -672,7 +662,7 @@ mod tests {
|
|
|
672
662
|
}
|
|
673
663
|
composer.close().await.expect("composition must succeed");
|
|
674
664
|
|
|
675
|
-
let requests = transport.requests.lock().
|
|
665
|
+
let requests = transport.requests.lock().await;
|
|
676
666
|
assert_eq!(requests.len(), 34);
|
|
677
667
|
let source_lists: Vec<&Vec<serde_json::Value>> = requests
|
|
678
668
|
.iter()
|
|
@@ -36,7 +36,7 @@ bytes = { workspace = true }
|
|
|
36
36
|
futures = { workspace = true, features = ["async-await", "std"] }
|
|
37
37
|
http = { workspace = true }
|
|
38
38
|
log = { workspace = true }
|
|
39
|
-
opendal-core = { path = "../../core", version = "0.59.
|
|
39
|
+
opendal-core = { path = "../../core", version = "0.59.2", default-features = false, features = [
|
|
40
40
|
"reqsign",
|
|
41
41
|
] }
|
|
42
42
|
percent-encoding = "2"
|
|
@@ -1,21 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
*/
|
|
1
|
+
// Copyright 2026 Google LLC
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
|
|
15
|
+
// Modified by the Apache Software Foundation: retain the wire-compatible subset
|
|
16
|
+
// used by OpenDAL, with unused definitions, annotations, and imports removed.
|
|
17
|
+
// Source: https://github.com/googleapis/googleapis/blob/2e9c5681901a2eebf7f547f0b60c895b1732415e/google/storage/v2/storage.proto
|
|
19
18
|
|
|
20
19
|
syntax = "proto3";
|
|
21
20
|
|
|
@@ -32,9 +32,9 @@ version = { workspace = true }
|
|
|
32
32
|
all-features = true
|
|
33
33
|
|
|
34
34
|
[dependencies]
|
|
35
|
-
opendal-core = { path = "../../core", version = "0.59.
|
|
35
|
+
opendal-core = { path = "../../core", version = "0.59.2", default-features = false }
|
|
36
36
|
|
|
37
|
-
asyncband = { workspace = true }
|
|
37
|
+
asyncband = { workspace = true, features = ["mutex", "singleflight"] }
|
|
38
38
|
bytes = { workspace = true }
|
|
39
39
|
http = { workspace = true }
|
|
40
40
|
log = { workspace = true }
|
|
@@ -42,4 +42,5 @@ serde = { workspace = true, features = ["derive"] }
|
|
|
42
42
|
serde_json = { workspace = true }
|
|
43
43
|
|
|
44
44
|
[dev-dependencies]
|
|
45
|
+
asyncband = { workspace = true, features = ["semaphore"] }
|
|
45
46
|
tokio = { workspace = true, features = ["macros", "rt-multi-thread"] }
|