opendal 0.1.6.pre.rc.1
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 +7 -0
- data/.standard.yml +20 -0
- data/.tool-versions +1 -0
- data/.yardopts +1 -0
- data/Cargo.toml +65 -0
- data/DEPENDENCIES.md +9 -0
- data/DEPENDENCIES.rust.tsv +277 -0
- data/Gemfile +35 -0
- data/README.md +159 -0
- data/Rakefile +149 -0
- data/build.rs +22 -0
- data/core/CHANGELOG.md +4929 -0
- data/core/CONTRIBUTING.md +61 -0
- data/core/Cargo.lock +10259 -0
- data/core/Cargo.toml +437 -0
- data/core/DEPENDENCIES.md +3 -0
- data/core/DEPENDENCIES.rust.tsv +185 -0
- data/core/LICENSE +201 -0
- data/core/README.md +228 -0
- data/core/benches/README.md +18 -0
- data/core/benches/ops/README.md +26 -0
- data/core/benches/ops/main.rs +25 -0
- data/core/benches/ops/read.rs +100 -0
- data/core/benches/ops/utils.rs +59 -0
- data/core/benches/ops/write.rs +106 -0
- data/core/benches/types/README.md +9 -0
- data/core/benches/types/buffer.rs +114 -0
- data/core/benches/types/main.rs +23 -0
- data/core/benches/types/tasks.rs +64 -0
- data/core/benches/vs_fs/Cargo.toml +32 -0
- data/core/benches/vs_fs/README.md +35 -0
- data/core/benches/vs_fs/src/main.rs +83 -0
- data/core/benches/vs_s3/Cargo.toml +38 -0
- data/core/benches/vs_s3/README.md +55 -0
- data/core/benches/vs_s3/src/main.rs +123 -0
- data/core/edge/README.md +3 -0
- data/core/edge/file_write_on_full_disk/Cargo.toml +31 -0
- data/core/edge/file_write_on_full_disk/README.md +14 -0
- data/core/edge/file_write_on_full_disk/src/main.rs +43 -0
- data/core/edge/s3_aws_assume_role_with_web_identity/Cargo.toml +30 -0
- data/core/edge/s3_aws_assume_role_with_web_identity/README.md +18 -0
- data/core/edge/s3_aws_assume_role_with_web_identity/src/main.rs +34 -0
- data/core/edge/s3_read_on_wasm/.gitignore +3 -0
- data/core/edge/s3_read_on_wasm/Cargo.toml +38 -0
- data/core/edge/s3_read_on_wasm/README.md +42 -0
- data/core/edge/s3_read_on_wasm/src/lib.rs +60 -0
- data/core/edge/s3_read_on_wasm/webdriver.json +15 -0
- data/core/examples/README.md +23 -0
- data/core/examples/basic/Cargo.toml +29 -0
- data/core/examples/basic/README.md +15 -0
- data/core/examples/basic/src/main.rs +51 -0
- data/core/examples/concurrent-upload/Cargo.toml +29 -0
- data/core/examples/concurrent-upload/README.md +15 -0
- data/core/examples/concurrent-upload/src/main.rs +68 -0
- data/core/examples/multipart-upload/Cargo.toml +29 -0
- data/core/examples/multipart-upload/README.md +15 -0
- data/core/examples/multipart-upload/src/main.rs +56 -0
- data/core/fuzz/.gitignore +5 -0
- data/core/fuzz/Cargo.toml +92 -0
- data/core/fuzz/README.md +68 -0
- data/core/fuzz/fuzz_reader.rs +102 -0
- data/core/fuzz/fuzz_writer.rs +123 -0
- data/core/src/blocking/delete.rs +74 -0
- data/core/src/blocking/list.rs +71 -0
- data/core/src/blocking/mod.rs +33 -0
- data/core/src/blocking/operator.rs +729 -0
- data/core/src/blocking/read/buffer_iterator.rs +66 -0
- data/core/src/blocking/read/mod.rs +27 -0
- data/core/src/blocking/read/reader.rs +124 -0
- data/core/src/blocking/read/std_bytes_iterator.rs +69 -0
- data/core/src/blocking/read/std_reader.rs +95 -0
- data/core/src/blocking/write/mod.rs +22 -0
- data/core/src/blocking/write/std_writer.rs +82 -0
- data/core/src/blocking/write/writer.rs +109 -0
- data/core/src/docs/comparisons/mod.rs +30 -0
- data/core/src/docs/comparisons/vs_object_store.md +183 -0
- data/core/src/docs/concepts.rs +135 -0
- data/core/src/docs/internals/accessor.rs +306 -0
- data/core/src/docs/internals/layer.rs +42 -0
- data/core/src/docs/internals/mod.rs +62 -0
- data/core/src/docs/mod.rs +43 -0
- data/core/src/docs/performance/concurrent_write.md +101 -0
- data/core/src/docs/performance/http_optimization.md +124 -0
- data/core/src/docs/performance/mod.rs +32 -0
- data/core/src/docs/rfcs/0000_example.md +74 -0
- data/core/src/docs/rfcs/0000_foyer_integration.md +111 -0
- data/core/src/docs/rfcs/0041_object_native_api.md +185 -0
- data/core/src/docs/rfcs/0044_error_handle.md +198 -0
- data/core/src/docs/rfcs/0057_auto_region.md +160 -0
- data/core/src/docs/rfcs/0069_object_stream.md +145 -0
- data/core/src/docs/rfcs/0090_limited_reader.md +155 -0
- data/core/src/docs/rfcs/0112_path_normalization.md +79 -0
- data/core/src/docs/rfcs/0191_async_streaming_io.md +328 -0
- data/core/src/docs/rfcs/0203_remove_credential.md +96 -0
- data/core/src/docs/rfcs/0221_create_dir.md +89 -0
- data/core/src/docs/rfcs/0247_retryable_error.md +87 -0
- data/core/src/docs/rfcs/0293_object_id.md +67 -0
- data/core/src/docs/rfcs/0337_dir_entry.md +191 -0
- data/core/src/docs/rfcs/0409_accessor_capabilities.md +67 -0
- data/core/src/docs/rfcs/0413_presign.md +154 -0
- data/core/src/docs/rfcs/0423_command_line_interface.md +268 -0
- data/core/src/docs/rfcs/0429_init_from_iter.md +107 -0
- data/core/src/docs/rfcs/0438_multipart.md +163 -0
- data/core/src/docs/rfcs/0443_gateway.md +73 -0
- data/core/src/docs/rfcs/0501_new_builder.md +111 -0
- data/core/src/docs/rfcs/0554_write_refactor.md +96 -0
- data/core/src/docs/rfcs/0561_list_metadata_reuse.md +210 -0
- data/core/src/docs/rfcs/0599_blocking_api.md +157 -0
- data/core/src/docs/rfcs/0623_redis_service.md +300 -0
- data/core/src/docs/rfcs/0627_split_capabilities.md +89 -0
- data/core/src/docs/rfcs/0661_path_in_accessor.md +126 -0
- data/core/src/docs/rfcs/0793_generic_kv_services.md +209 -0
- data/core/src/docs/rfcs/0926_object_reader.md +93 -0
- data/core/src/docs/rfcs/0977_refactor_error.md +151 -0
- data/core/src/docs/rfcs/1085_object_handler.md +73 -0
- data/core/src/docs/rfcs/1391_object_metadataer.md +110 -0
- data/core/src/docs/rfcs/1398_query_based_metadata.md +125 -0
- data/core/src/docs/rfcs/1420_object_writer.md +147 -0
- data/core/src/docs/rfcs/1477_remove_object_concept.md +159 -0
- data/core/src/docs/rfcs/1735_operation_extension.md +117 -0
- data/core/src/docs/rfcs/2083_writer_sink_api.md +106 -0
- data/core/src/docs/rfcs/2133_append_api.md +88 -0
- data/core/src/docs/rfcs/2299_chain_based_operator_api.md +99 -0
- data/core/src/docs/rfcs/2602_object_versioning.md +138 -0
- data/core/src/docs/rfcs/2758_merge_append_into_write.md +79 -0
- data/core/src/docs/rfcs/2774_lister_api.md +66 -0
- data/core/src/docs/rfcs/2779_list_with_metakey.md +143 -0
- data/core/src/docs/rfcs/2852_native_capability.md +58 -0
- data/core/src/docs/rfcs/2884_merge_range_read_into_read.md +80 -0
- data/core/src/docs/rfcs/3017_remove_write_copy_from.md +94 -0
- data/core/src/docs/rfcs/3197_config.md +237 -0
- data/core/src/docs/rfcs/3232_align_list_api.md +69 -0
- data/core/src/docs/rfcs/3243_list_prefix.md +128 -0
- data/core/src/docs/rfcs/3356_lazy_reader.md +111 -0
- data/core/src/docs/rfcs/3526_list_recursive.md +59 -0
- data/core/src/docs/rfcs/3574_concurrent_stat_in_list.md +80 -0
- data/core/src/docs/rfcs/3734_buffered_reader.md +64 -0
- data/core/src/docs/rfcs/3898_concurrent_writer.md +66 -0
- data/core/src/docs/rfcs/3911_deleter_api.md +165 -0
- data/core/src/docs/rfcs/4382_range_based_read.md +213 -0
- data/core/src/docs/rfcs/4638_executor.md +215 -0
- data/core/src/docs/rfcs/5314_remove_metakey.md +120 -0
- data/core/src/docs/rfcs/5444_operator_from_uri.md +162 -0
- data/core/src/docs/rfcs/5479_context.md +140 -0
- data/core/src/docs/rfcs/5485_conditional_reader.md +112 -0
- data/core/src/docs/rfcs/5495_list_with_deleted.md +81 -0
- data/core/src/docs/rfcs/5556_write_returns_metadata.md +121 -0
- data/core/src/docs/rfcs/5871_read_returns_metadata.md +112 -0
- data/core/src/docs/rfcs/6189_remove_native_blocking.md +106 -0
- data/core/src/docs/rfcs/6209_glob_support.md +132 -0
- data/core/src/docs/rfcs/6213_options_api.md +142 -0
- data/core/src/docs/rfcs/README.md +62 -0
- data/core/src/docs/rfcs/mod.rs +278 -0
- data/core/src/docs/upgrade.md +1556 -0
- data/core/src/layers/async_backtrace.rs +174 -0
- data/core/src/layers/await_tree.rs +202 -0
- data/core/src/layers/capability_check.rs +239 -0
- data/core/src/layers/chaos.rs +170 -0
- data/core/src/layers/complete.rs +385 -0
- data/core/src/layers/concurrent_limit.rs +322 -0
- data/core/src/layers/correctness_check.rs +440 -0
- data/core/src/layers/dtrace.rs +294 -0
- data/core/src/layers/error_context.rs +310 -0
- data/core/src/layers/fastmetrics.rs +525 -0
- data/core/src/layers/fastrace.rs +271 -0
- data/core/src/layers/http_client.rs +206 -0
- data/core/src/layers/immutable_index.rs +408 -0
- data/core/src/layers/logging.rs +842 -0
- data/core/src/layers/metrics.rs +182 -0
- data/core/src/layers/mime_guess.rs +199 -0
- data/core/src/layers/mod.rs +130 -0
- data/core/src/layers/observe/metrics.rs +936 -0
- data/core/src/layers/observe/mod.rs +93 -0
- data/core/src/layers/otelmetrics.rs +496 -0
- data/core/src/layers/oteltrace.rs +203 -0
- data/core/src/layers/prometheus.rs +686 -0
- data/core/src/layers/prometheus_client.rs +519 -0
- data/core/src/layers/retry.rs +933 -0
- data/core/src/layers/throttle.rs +204 -0
- data/core/src/layers/timeout.rs +513 -0
- data/core/src/layers/tracing.rs +349 -0
- data/core/src/layers/type_eraser.rs +91 -0
- data/core/src/lib.rs +204 -0
- data/core/src/raw/accessor.rs +856 -0
- data/core/src/raw/adapters/kv/api.rs +164 -0
- data/core/src/raw/adapters/kv/backend.rs +253 -0
- data/core/src/raw/adapters/kv/mod.rs +31 -0
- data/core/src/raw/adapters/mod.rs +50 -0
- data/core/src/raw/adapters/typed_kv/api.rs +171 -0
- data/core/src/raw/adapters/typed_kv/backend.rs +279 -0
- data/core/src/raw/adapters/typed_kv/mod.rs +29 -0
- data/core/src/raw/atomic_util.rs +57 -0
- data/core/src/raw/azure.rs +570 -0
- data/core/src/raw/chrono_util.rs +109 -0
- data/core/src/raw/enum_utils.rs +201 -0
- data/core/src/raw/futures_util.rs +470 -0
- data/core/src/raw/http_util/body.rs +144 -0
- data/core/src/raw/http_util/bytes_content_range.rs +239 -0
- data/core/src/raw/http_util/bytes_range.rs +260 -0
- data/core/src/raw/http_util/client.rs +276 -0
- data/core/src/raw/http_util/error.rs +68 -0
- data/core/src/raw/http_util/header.rs +356 -0
- data/core/src/raw/http_util/mod.rs +78 -0
- data/core/src/raw/http_util/multipart.rs +1180 -0
- data/core/src/raw/http_util/uri.rs +190 -0
- data/core/src/raw/layer.rs +295 -0
- data/core/src/raw/mod.rs +101 -0
- data/core/src/raw/oio/buf/flex_buf.rs +118 -0
- data/core/src/raw/oio/buf/mod.rs +25 -0
- data/core/src/raw/oio/buf/pooled_buf.rs +126 -0
- data/core/src/raw/oio/buf/queue_buf.rs +117 -0
- data/core/src/raw/oio/delete/api.rs +102 -0
- data/core/src/raw/oio/delete/batch_delete.rs +127 -0
- data/core/src/raw/oio/delete/mod.rs +30 -0
- data/core/src/raw/oio/delete/one_shot_delete.rs +79 -0
- data/core/src/raw/oio/entry.rs +89 -0
- data/core/src/raw/oio/list/api.rs +69 -0
- data/core/src/raw/oio/list/flat_list.rs +137 -0
- data/core/src/raw/oio/list/hierarchy_list.rs +135 -0
- data/core/src/raw/oio/list/mod.rs +35 -0
- data/core/src/raw/oio/list/page_list.rs +105 -0
- data/core/src/raw/oio/list/prefix_list.rs +64 -0
- data/core/src/raw/oio/mod.rs +40 -0
- data/core/src/raw/oio/read/api.rs +119 -0
- data/core/src/raw/oio/read/mod.rs +21 -0
- data/core/src/raw/oio/write/api.rs +103 -0
- data/core/src/raw/oio/write/append_write.rs +111 -0
- data/core/src/raw/oio/write/block_write.rs +405 -0
- data/core/src/raw/oio/write/mod.rs +42 -0
- data/core/src/raw/oio/write/multipart_write.rs +518 -0
- data/core/src/raw/oio/write/one_shot_write.rs +77 -0
- data/core/src/raw/oio/write/position_write.rs +284 -0
- data/core/src/raw/operation.rs +88 -0
- data/core/src/raw/ops.rs +917 -0
- data/core/src/raw/path.rs +451 -0
- data/core/src/raw/path_cache.rs +244 -0
- data/core/src/raw/rps.rs +249 -0
- data/core/src/raw/serde_util.rs +423 -0
- data/core/src/raw/std_io_util.rs +65 -0
- data/core/src/raw/tests/mod.rs +30 -0
- data/core/src/raw/tests/read.rs +116 -0
- data/core/src/raw/tests/utils.rs +80 -0
- data/core/src/raw/tests/write.rs +79 -0
- data/core/src/raw/tokio_util.rs +24 -0
- data/core/src/raw/version.rs +19 -0
- data/core/src/services/aliyun_drive/backend.rs +421 -0
- data/core/src/services/aliyun_drive/config.rs +72 -0
- data/core/src/services/aliyun_drive/core.rs +651 -0
- data/core/src/services/aliyun_drive/delete.rs +51 -0
- data/core/src/services/aliyun_drive/docs.md +61 -0
- data/core/src/services/aliyun_drive/error.rs +56 -0
- data/core/src/services/aliyun_drive/lister.rs +134 -0
- data/core/src/services/aliyun_drive/mod.rs +39 -0
- data/core/src/services/aliyun_drive/writer.rs +114 -0
- data/core/src/services/alluxio/backend.rs +257 -0
- data/core/src/services/alluxio/config.rs +50 -0
- data/core/src/services/alluxio/core.rs +367 -0
- data/core/src/services/alluxio/delete.rs +38 -0
- data/core/src/services/alluxio/docs.md +45 -0
- data/core/src/services/alluxio/error.rs +99 -0
- data/core/src/services/alluxio/lister.rs +73 -0
- data/core/src/services/alluxio/mod.rs +39 -0
- data/core/src/services/alluxio/writer.rs +74 -0
- data/core/src/services/azblob/backend.rs +594 -0
- data/core/src/services/azblob/config.rs +220 -0
- data/core/src/services/azblob/core.rs +937 -0
- data/core/src/services/azblob/delete.rs +108 -0
- data/core/src/services/azblob/docs.md +77 -0
- data/core/src/services/azblob/error.rs +164 -0
- data/core/src/services/azblob/lister.rs +107 -0
- data/core/src/services/azblob/mod.rs +38 -0
- data/core/src/services/azblob/writer.rs +177 -0
- data/core/src/services/azdls/backend.rs +435 -0
- data/core/src/services/azdls/config.rs +89 -0
- data/core/src/services/azdls/core.rs +388 -0
- data/core/src/services/azdls/delete.rs +48 -0
- data/core/src/services/azdls/docs.md +73 -0
- data/core/src/services/azdls/error.rs +107 -0
- data/core/src/services/azdls/lister.rs +165 -0
- data/core/src/services/azdls/mod.rs +38 -0
- data/core/src/services/azdls/writer.rs +129 -0
- data/core/src/services/azfile/backend.rs +373 -0
- data/core/src/services/azfile/config.rs +61 -0
- data/core/src/services/azfile/core.rs +435 -0
- data/core/src/services/azfile/delete.rs +51 -0
- data/core/src/services/azfile/docs.md +65 -0
- data/core/src/services/azfile/error.rs +108 -0
- data/core/src/services/azfile/lister.rs +217 -0
- data/core/src/services/azfile/mod.rs +39 -0
- data/core/src/services/azfile/writer.rs +92 -0
- data/core/src/services/b2/backend.rs +434 -0
- data/core/src/services/b2/config.rs +64 -0
- data/core/src/services/b2/core.rs +742 -0
- data/core/src/services/b2/delete.rs +56 -0
- data/core/src/services/b2/docs.md +54 -0
- data/core/src/services/b2/error.rs +132 -0
- data/core/src/services/b2/lister.rs +110 -0
- data/core/src/services/b2/mod.rs +39 -0
- data/core/src/services/b2/writer.rs +189 -0
- data/core/src/services/cacache/backend.rs +160 -0
- data/core/src/services/cacache/config.rs +28 -0
- data/core/src/services/cacache/core.rs +96 -0
- data/core/src/services/cacache/delete.rs +39 -0
- data/core/src/services/cacache/docs.md +38 -0
- data/core/src/services/cacache/mod.rs +34 -0
- data/core/src/services/cacache/writer.rs +61 -0
- data/core/src/services/cloudflare_kv/backend.rs +513 -0
- data/core/src/services/cloudflare_kv/config.rs +55 -0
- data/core/src/services/cloudflare_kv/core.rs +168 -0
- data/core/src/services/cloudflare_kv/delete.rs +119 -0
- data/core/src/services/cloudflare_kv/docs.md +21 -0
- data/core/src/services/cloudflare_kv/error.rs +79 -0
- data/core/src/services/cloudflare_kv/lister.rs +170 -0
- data/core/src/services/cloudflare_kv/mod.rs +39 -0
- data/core/src/services/cloudflare_kv/model.rs +76 -0
- data/core/src/services/cloudflare_kv/writer.rs +68 -0
- data/core/src/services/compfs/backend.rs +290 -0
- data/core/src/services/compfs/config.rs +30 -0
- data/core/src/services/compfs/core.rs +159 -0
- data/core/src/services/compfs/delete.rs +53 -0
- data/core/src/services/compfs/lister.rs +98 -0
- data/core/src/services/compfs/mod.rs +38 -0
- data/core/src/services/compfs/reader.rs +79 -0
- data/core/src/services/compfs/writer.rs +90 -0
- data/core/src/services/cos/backend.rs +442 -0
- data/core/src/services/cos/config.rs +54 -0
- data/core/src/services/cos/core.rs +761 -0
- data/core/src/services/cos/delete.rs +48 -0
- data/core/src/services/cos/docs.md +55 -0
- data/core/src/services/cos/error.rs +105 -0
- data/core/src/services/cos/lister.rs +237 -0
- data/core/src/services/cos/mod.rs +39 -0
- data/core/src/services/cos/writer.rs +234 -0
- data/core/src/services/d1/backend.rs +330 -0
- data/core/src/services/d1/config.rs +55 -0
- data/core/src/services/d1/docs.md +48 -0
- data/core/src/services/d1/error.rs +79 -0
- data/core/src/services/d1/mod.rs +29 -0
- data/core/src/services/d1/model.rs +125 -0
- data/core/src/services/dashmap/backend.rs +203 -0
- data/core/src/services/dashmap/config.rs +37 -0
- data/core/src/services/dashmap/core.rs +61 -0
- data/core/src/services/dashmap/delete.rs +40 -0
- data/core/src/services/dashmap/docs.md +38 -0
- data/core/src/services/dashmap/lister.rs +63 -0
- data/core/src/services/dashmap/mod.rs +36 -0
- data/core/src/services/dashmap/writer.rs +87 -0
- data/core/src/services/dbfs/backend.rs +258 -0
- data/core/src/services/dbfs/config.rs +48 -0
- data/core/src/services/dbfs/core.rs +191 -0
- data/core/src/services/dbfs/delete.rs +49 -0
- data/core/src/services/dbfs/docs.md +57 -0
- data/core/src/services/dbfs/error.rs +74 -0
- data/core/src/services/dbfs/lister.rs +96 -0
- data/core/src/services/dbfs/mod.rs +38 -0
- data/core/src/services/dbfs/writer.rs +64 -0
- data/core/src/services/dropbox/backend.rs +187 -0
- data/core/src/services/dropbox/builder.rs +222 -0
- data/core/src/services/dropbox/config.rs +47 -0
- data/core/src/services/dropbox/core.rs +496 -0
- data/core/src/services/dropbox/delete.rs +54 -0
- data/core/src/services/dropbox/docs.md +64 -0
- data/core/src/services/dropbox/error.rs +85 -0
- data/core/src/services/dropbox/lister.rs +117 -0
- data/core/src/services/dropbox/mod.rs +40 -0
- data/core/src/services/dropbox/writer.rs +51 -0
- data/core/src/services/etcd/backend.rs +345 -0
- data/core/src/services/etcd/config.rs +86 -0
- data/core/src/services/etcd/core.rs +143 -0
- data/core/src/services/etcd/deleter.rs +41 -0
- data/core/src/services/etcd/docs.md +45 -0
- data/core/src/services/etcd/error.rs +26 -0
- data/core/src/services/etcd/lister.rs +79 -0
- data/core/src/services/etcd/mod.rs +36 -0
- data/core/src/services/etcd/writer.rs +61 -0
- data/core/src/services/foundationdb/backend.rs +171 -0
- data/core/src/services/foundationdb/config.rs +45 -0
- data/core/src/services/foundationdb/docs.md +42 -0
- data/core/src/services/foundationdb/mod.rs +24 -0
- data/core/src/services/fs/backend.rs +299 -0
- data/core/src/services/fs/config.rs +33 -0
- data/core/src/services/fs/core.rs +227 -0
- data/core/src/services/fs/delete.rs +53 -0
- data/core/src/services/fs/docs.md +49 -0
- data/core/src/services/fs/error.rs +31 -0
- data/core/src/services/fs/lister.rs +81 -0
- data/core/src/services/fs/mod.rs +40 -0
- data/core/src/services/fs/reader.rs +83 -0
- data/core/src/services/fs/writer.rs +212 -0
- data/core/src/services/ftp/backend.rs +388 -0
- data/core/src/services/ftp/config.rs +46 -0
- data/core/src/services/ftp/core.rs +136 -0
- data/core/src/services/ftp/delete.rs +62 -0
- data/core/src/services/ftp/docs.md +42 -0
- data/core/src/services/ftp/err.rs +47 -0
- data/core/src/services/ftp/lister.rs +72 -0
- data/core/src/services/ftp/mod.rs +41 -0
- data/core/src/services/ftp/reader.rs +84 -0
- data/core/src/services/ftp/writer.rs +122 -0
- data/core/src/services/gcs/backend.rs +499 -0
- data/core/src/services/gcs/config.rs +168 -0
- data/core/src/services/gcs/core.rs +1079 -0
- data/core/src/services/gcs/delete.rs +98 -0
- data/core/src/services/gcs/docs.md +76 -0
- data/core/src/services/gcs/error.rs +122 -0
- data/core/src/services/gcs/lister.rs +136 -0
- data/core/src/services/gcs/mod.rs +40 -0
- data/core/src/services/gcs/uri.rs +75 -0
- data/core/src/services/gcs/writer.rs +163 -0
- data/core/src/services/gdrive/backend.rs +176 -0
- data/core/src/services/gdrive/builder.rs +228 -0
- data/core/src/services/gdrive/config.rs +47 -0
- data/core/src/services/gdrive/core.rs +499 -0
- data/core/src/services/gdrive/delete.rs +57 -0
- data/core/src/services/gdrive/docs.md +65 -0
- data/core/src/services/gdrive/error.rs +80 -0
- data/core/src/services/gdrive/lister.rs +110 -0
- data/core/src/services/gdrive/mod.rs +40 -0
- data/core/src/services/gdrive/writer.rs +77 -0
- data/core/src/services/ghac/backend.rs +285 -0
- data/core/src/services/ghac/config.rs +36 -0
- data/core/src/services/ghac/core.rs +459 -0
- data/core/src/services/ghac/docs.md +84 -0
- data/core/src/services/ghac/error.rs +52 -0
- data/core/src/services/ghac/mod.rs +35 -0
- data/core/src/services/ghac/writer.rs +201 -0
- data/core/src/services/github/backend.rs +285 -0
- data/core/src/services/github/config.rs +59 -0
- data/core/src/services/github/core.rs +351 -0
- data/core/src/services/github/delete.rs +41 -0
- data/core/src/services/github/docs.md +52 -0
- data/core/src/services/github/error.rs +101 -0
- data/core/src/services/github/lister.rs +112 -0
- data/core/src/services/github/mod.rs +38 -0
- data/core/src/services/github/writer.rs +51 -0
- data/core/src/services/gridfs/backend.rs +166 -0
- data/core/src/services/gridfs/config.rs +50 -0
- data/core/src/services/gridfs/core.rs +154 -0
- data/core/src/services/gridfs/docs.md +46 -0
- data/core/src/services/gridfs/mod.rs +26 -0
- data/core/src/services/hdfs/backend.rs +413 -0
- data/core/src/services/hdfs/config.rs +59 -0
- data/core/src/services/hdfs/delete.rs +62 -0
- data/core/src/services/hdfs/docs.md +140 -0
- data/core/src/services/hdfs/lister.rs +70 -0
- data/core/src/services/hdfs/mod.rs +36 -0
- data/core/src/services/hdfs/reader.rs +79 -0
- data/core/src/services/hdfs/writer.rs +104 -0
- data/core/src/services/hdfs_native/backend.rs +340 -0
- data/core/src/services/hdfs_native/config.rs +45 -0
- data/core/src/services/hdfs_native/delete.rs +47 -0
- data/core/src/services/hdfs_native/docs.md +35 -0
- data/core/src/services/hdfs_native/error.rs +59 -0
- data/core/src/services/hdfs_native/lister.rs +85 -0
- data/core/src/services/hdfs_native/mod.rs +39 -0
- data/core/src/services/hdfs_native/reader.rs +62 -0
- data/core/src/services/hdfs_native/writer.rs +61 -0
- data/core/src/services/http/backend.rs +291 -0
- data/core/src/services/http/config.rs +49 -0
- data/core/src/services/http/core.rs +125 -0
- data/core/src/services/http/docs.md +45 -0
- data/core/src/services/http/error.rs +53 -0
- data/core/src/services/http/mod.rs +32 -0
- data/core/src/services/huggingface/backend.rs +289 -0
- data/core/src/services/huggingface/config.rs +75 -0
- data/core/src/services/huggingface/core.rs +406 -0
- data/core/src/services/huggingface/docs.md +61 -0
- data/core/src/services/huggingface/error.rs +93 -0
- data/core/src/services/huggingface/lister.rs +91 -0
- data/core/src/services/huggingface/mod.rs +34 -0
- data/core/src/services/ipfs/backend.rs +257 -0
- data/core/src/services/ipfs/config.rs +32 -0
- data/core/src/services/ipfs/core.rs +239 -0
- data/core/src/services/ipfs/docs.md +45 -0
- data/core/src/services/ipfs/error.rs +52 -0
- data/core/src/services/ipfs/ipld.rs +162 -0
- data/core/src/services/ipfs/mod.rs +34 -0
- data/core/src/services/ipmfs/backend.rs +147 -0
- data/core/src/services/ipmfs/builder.rs +166 -0
- data/core/src/services/ipmfs/config.rs +32 -0
- data/core/src/services/ipmfs/core.rs +142 -0
- data/core/src/services/ipmfs/delete.rs +48 -0
- data/core/src/services/ipmfs/docs.md +14 -0
- data/core/src/services/ipmfs/error.rs +83 -0
- data/core/src/services/ipmfs/lister.rs +135 -0
- data/core/src/services/ipmfs/mod.rs +40 -0
- data/core/src/services/ipmfs/writer.rs +49 -0
- data/core/src/services/koofr/backend.rs +361 -0
- data/core/src/services/koofr/config.rs +50 -0
- data/core/src/services/koofr/core.rs +458 -0
- data/core/src/services/koofr/delete.rs +50 -0
- data/core/src/services/koofr/docs.md +51 -0
- data/core/src/services/koofr/error.rs +72 -0
- data/core/src/services/koofr/lister.rs +88 -0
- data/core/src/services/koofr/mod.rs +38 -0
- data/core/src/services/koofr/writer.rs +53 -0
- data/core/src/services/lakefs/backend.rs +309 -0
- data/core/src/services/lakefs/config.rs +81 -0
- data/core/src/services/lakefs/core.rs +261 -0
- data/core/src/services/lakefs/delete.rs +54 -0
- data/core/src/services/lakefs/docs.md +62 -0
- data/core/src/services/lakefs/error.rs +93 -0
- data/core/src/services/lakefs/lister.rs +120 -0
- data/core/src/services/lakefs/mod.rs +38 -0
- data/core/src/services/lakefs/writer.rs +50 -0
- data/core/src/services/memcached/backend.rs +284 -0
- data/core/src/services/memcached/binary.rs +289 -0
- data/core/src/services/memcached/config.rs +43 -0
- data/core/src/services/memcached/docs.md +47 -0
- data/core/src/services/memcached/mod.rs +27 -0
- data/core/src/services/memory/backend.rs +205 -0
- data/core/src/services/memory/config.rs +30 -0
- data/core/src/services/memory/core.rs +80 -0
- data/core/src/services/memory/delete.rs +42 -0
- data/core/src/services/memory/docs.md +36 -0
- data/core/src/services/memory/lister.rs +56 -0
- data/core/src/services/memory/mod.rs +36 -0
- data/core/src/services/memory/writer.rs +85 -0
- data/core/src/services/mini_moka/backend.rs +260 -0
- data/core/src/services/mini_moka/config.rs +56 -0
- data/core/src/services/mini_moka/core.rs +52 -0
- data/core/src/services/mini_moka/delete.rs +42 -0
- data/core/src/services/mini_moka/docs.md +19 -0
- data/core/src/services/mini_moka/lister.rs +68 -0
- data/core/src/services/mini_moka/mod.rs +36 -0
- data/core/src/services/mini_moka/writer.rs +84 -0
- data/core/src/services/mod.rs +206 -0
- data/core/src/services/moka/backend.rs +326 -0
- data/core/src/services/moka/config.rs +59 -0
- data/core/src/services/moka/core.rs +62 -0
- data/core/src/services/moka/delete.rs +42 -0
- data/core/src/services/moka/docs.md +42 -0
- data/core/src/services/moka/lister.rs +65 -0
- data/core/src/services/moka/mod.rs +41 -0
- data/core/src/services/moka/writer.rs +83 -0
- data/core/src/services/mongodb/backend.rs +291 -0
- data/core/src/services/mongodb/config.rs +54 -0
- data/core/src/services/mongodb/docs.md +49 -0
- data/core/src/services/mongodb/mod.rs +24 -0
- data/core/src/services/monoiofs/backend.rs +238 -0
- data/core/src/services/monoiofs/config.rs +34 -0
- data/core/src/services/monoiofs/core.rs +313 -0
- data/core/src/services/monoiofs/delete.rs +64 -0
- data/core/src/services/monoiofs/docs.md +46 -0
- data/core/src/services/monoiofs/mod.rs +36 -0
- data/core/src/services/monoiofs/reader.rs +147 -0
- data/core/src/services/monoiofs/writer.rs +189 -0
- data/core/src/services/mysql/backend.rs +256 -0
- data/core/src/services/mysql/config.rs +66 -0
- data/core/src/services/mysql/docs.md +47 -0
- data/core/src/services/mysql/mod.rs +24 -0
- data/core/src/services/obs/backend.rs +442 -0
- data/core/src/services/obs/config.rs +53 -0
- data/core/src/services/obs/core.rs +608 -0
- data/core/src/services/obs/delete.rs +48 -0
- data/core/src/services/obs/docs.md +54 -0
- data/core/src/services/obs/error.rs +106 -0
- data/core/src/services/obs/lister.rs +101 -0
- data/core/src/services/obs/mod.rs +38 -0
- data/core/src/services/obs/writer.rs +235 -0
- data/core/src/services/onedrive/backend.rs +127 -0
- data/core/src/services/onedrive/builder.rs +236 -0
- data/core/src/services/onedrive/config.rs +49 -0
- data/core/src/services/onedrive/core.rs +691 -0
- data/core/src/services/onedrive/delete.rs +47 -0
- data/core/src/services/onedrive/docs.md +115 -0
- data/core/src/services/onedrive/error.rs +61 -0
- data/core/src/services/onedrive/graph_model.rs +425 -0
- data/core/src/services/onedrive/lister.rs +150 -0
- data/core/src/services/onedrive/mod.rs +42 -0
- data/core/src/services/onedrive/writer.rs +168 -0
- data/core/src/services/opfs/backend.rs +50 -0
- data/core/src/services/opfs/config.rs +25 -0
- data/core/src/services/opfs/core.rs +74 -0
- data/core/src/services/opfs/docs.md +18 -0
- data/core/src/services/opfs/error.rs +27 -0
- data/core/src/services/opfs/mod.rs +30 -0
- data/core/src/services/opfs/utils.rs +70 -0
- data/core/src/services/oss/backend.rs +734 -0
- data/core/src/services/oss/config.rs +113 -0
- data/core/src/services/oss/core.rs +1088 -0
- data/core/src/services/oss/delete.rs +109 -0
- data/core/src/services/oss/docs.md +74 -0
- data/core/src/services/oss/error.rs +109 -0
- data/core/src/services/oss/lister.rs +256 -0
- data/core/src/services/oss/mod.rs +38 -0
- data/core/src/services/oss/writer.rs +228 -0
- data/core/src/services/pcloud/backend.rs +358 -0
- data/core/src/services/pcloud/config.rs +51 -0
- data/core/src/services/pcloud/core.rs +461 -0
- data/core/src/services/pcloud/delete.rs +66 -0
- data/core/src/services/pcloud/docs.md +51 -0
- data/core/src/services/pcloud/error.rs +88 -0
- data/core/src/services/pcloud/lister.rs +95 -0
- data/core/src/services/pcloud/mod.rs +38 -0
- data/core/src/services/pcloud/writer.rs +66 -0
- data/core/src/services/persy/backend.rs +226 -0
- data/core/src/services/persy/config.rs +32 -0
- data/core/src/services/persy/docs.md +43 -0
- data/core/src/services/persy/mod.rs +24 -0
- data/core/src/services/postgresql/backend.rs +258 -0
- data/core/src/services/postgresql/config.rs +66 -0
- data/core/src/services/postgresql/docs.md +47 -0
- data/core/src/services/postgresql/mod.rs +24 -0
- data/core/src/services/redb/backend.rs +280 -0
- data/core/src/services/redb/config.rs +34 -0
- data/core/src/services/redb/docs.md +41 -0
- data/core/src/services/redb/mod.rs +24 -0
- data/core/src/services/redis/backend.rs +442 -0
- data/core/src/services/redis/config.rs +79 -0
- data/core/src/services/redis/core.rs +209 -0
- data/core/src/services/redis/delete.rs +40 -0
- data/core/src/services/redis/docs.md +43 -0
- data/core/src/services/redis/mod.rs +34 -0
- data/core/src/services/redis/writer.rs +57 -0
- data/core/src/services/rocksdb/backend.rs +159 -0
- data/core/src/services/rocksdb/config.rs +34 -0
- data/core/src/services/rocksdb/docs.md +54 -0
- data/core/src/services/rocksdb/mod.rs +24 -0
- data/core/src/services/s3/backend.rs +1293 -0
- data/core/src/services/s3/compatible_services.md +126 -0
- data/core/src/services/s3/config.rs +327 -0
- data/core/src/services/s3/core.rs +1741 -0
- data/core/src/services/s3/delete.rs +109 -0
- data/core/src/services/s3/docs.md +244 -0
- data/core/src/services/s3/error.rs +171 -0
- data/core/src/services/s3/lister.rs +405 -0
- data/core/src/services/s3/mod.rs +38 -0
- data/core/src/services/s3/writer.rs +262 -0
- data/core/src/services/seafile/backend.rs +297 -0
- data/core/src/services/seafile/config.rs +56 -0
- data/core/src/services/seafile/core.rs +475 -0
- data/core/src/services/seafile/delete.rs +40 -0
- data/core/src/services/seafile/docs.md +54 -0
- data/core/src/services/seafile/error.rs +86 -0
- data/core/src/services/seafile/lister.rs +83 -0
- data/core/src/services/seafile/mod.rs +38 -0
- data/core/src/services/seafile/writer.rs +55 -0
- data/core/src/services/sftp/backend.rs +397 -0
- data/core/src/services/sftp/config.rs +50 -0
- data/core/src/services/sftp/core.rs +154 -0
- data/core/src/services/sftp/delete.rs +55 -0
- data/core/src/services/sftp/docs.md +49 -0
- data/core/src/services/sftp/error.rs +57 -0
- data/core/src/services/sftp/lister.rs +88 -0
- data/core/src/services/sftp/mod.rs +42 -0
- data/core/src/services/sftp/reader.rs +78 -0
- data/core/src/services/sftp/utils.rs +51 -0
- data/core/src/services/sftp/writer.rs +67 -0
- data/core/src/services/sled/backend.rs +194 -0
- data/core/src/services/sled/config.rs +45 -0
- data/core/src/services/sled/docs.md +39 -0
- data/core/src/services/sled/mod.rs +24 -0
- data/core/src/services/sqlite/backend.rs +326 -0
- data/core/src/services/sqlite/config.rs +70 -0
- data/core/src/services/sqlite/docs.md +46 -0
- data/core/src/services/sqlite/mod.rs +24 -0
- data/core/src/services/surrealdb/backend.rs +365 -0
- data/core/src/services/surrealdb/config.rs +64 -0
- data/core/src/services/surrealdb/docs.md +54 -0
- data/core/src/services/surrealdb/mod.rs +24 -0
- data/core/src/services/swift/backend.rs +275 -0
- data/core/src/services/swift/compatible_services.md +53 -0
- data/core/src/services/swift/config.rs +53 -0
- data/core/src/services/swift/core.rs +310 -0
- data/core/src/services/swift/delete.rs +49 -0
- data/core/src/services/swift/docs.md +52 -0
- data/core/src/services/swift/error.rs +90 -0
- data/core/src/services/swift/lister.rs +119 -0
- data/core/src/services/swift/mod.rs +38 -0
- data/core/src/services/swift/writer.rs +53 -0
- data/core/src/services/tikv/backend.rs +237 -0
- data/core/src/services/tikv/config.rs +52 -0
- data/core/src/services/tikv/docs.md +43 -0
- data/core/src/services/tikv/mod.rs +24 -0
- data/core/src/services/upyun/backend.rs +317 -0
- data/core/src/services/upyun/config.rs +51 -0
- data/core/src/services/upyun/core.rs +521 -0
- data/core/src/services/upyun/delete.rs +50 -0
- data/core/src/services/upyun/docs.md +51 -0
- data/core/src/services/upyun/error.rs +97 -0
- data/core/src/services/upyun/lister.rs +101 -0
- data/core/src/services/upyun/mod.rs +38 -0
- data/core/src/services/upyun/writer.rs +127 -0
- data/core/src/services/vercel_artifacts/backend.rs +99 -0
- data/core/src/services/vercel_artifacts/builder.rs +117 -0
- data/core/src/services/vercel_artifacts/config.rs +39 -0
- data/core/src/services/vercel_artifacts/core.rs +112 -0
- data/core/src/services/vercel_artifacts/docs.md +40 -0
- data/core/src/services/vercel_artifacts/error.rs +50 -0
- data/core/src/services/vercel_artifacts/mod.rs +36 -0
- data/core/src/services/vercel_artifacts/writer.rs +58 -0
- data/core/src/services/vercel_blob/backend.rs +251 -0
- data/core/src/services/vercel_blob/config.rs +45 -0
- data/core/src/services/vercel_blob/core.rs +449 -0
- data/core/src/services/vercel_blob/delete.rs +38 -0
- data/core/src/services/vercel_blob/docs.md +45 -0
- data/core/src/services/vercel_blob/error.rs +110 -0
- data/core/src/services/vercel_blob/lister.rs +69 -0
- data/core/src/services/vercel_blob/mod.rs +38 -0
- data/core/src/services/vercel_blob/writer.rs +143 -0
- data/core/src/services/webdav/backend.rs +318 -0
- data/core/src/services/webdav/config.rs +53 -0
- data/core/src/services/webdav/core.rs +859 -0
- data/core/src/services/webdav/delete.rs +47 -0
- data/core/src/services/webdav/docs.md +49 -0
- data/core/src/services/webdav/error.rs +53 -0
- data/core/src/services/webdav/lister.rs +106 -0
- data/core/src/services/webdav/mod.rs +38 -0
- data/core/src/services/webdav/writer.rs +56 -0
- data/core/src/services/webhdfs/backend.rs +376 -0
- data/core/src/services/webhdfs/config.rs +52 -0
- data/core/src/services/webhdfs/core.rs +398 -0
- data/core/src/services/webhdfs/delete.rs +46 -0
- data/core/src/services/webhdfs/docs.md +90 -0
- data/core/src/services/webhdfs/error.rs +126 -0
- data/core/src/services/webhdfs/lister.rs +130 -0
- data/core/src/services/webhdfs/message.rs +249 -0
- data/core/src/services/webhdfs/mod.rs +41 -0
- data/core/src/services/webhdfs/writer.rs +177 -0
- data/core/src/services/yandex_disk/backend.rs +267 -0
- data/core/src/services/yandex_disk/config.rs +45 -0
- data/core/src/services/yandex_disk/core.rs +340 -0
- data/core/src/services/yandex_disk/delete.rs +54 -0
- data/core/src/services/yandex_disk/docs.md +45 -0
- data/core/src/services/yandex_disk/error.rs +104 -0
- data/core/src/services/yandex_disk/lister.rs +113 -0
- data/core/src/services/yandex_disk/mod.rs +38 -0
- data/core/src/services/yandex_disk/writer.rs +52 -0
- data/core/src/types/buffer.rs +991 -0
- data/core/src/types/builder.rs +152 -0
- data/core/src/types/capability.rs +209 -0
- data/core/src/types/context/mod.rs +22 -0
- data/core/src/types/context/read.rs +231 -0
- data/core/src/types/context/write.rs +441 -0
- data/core/src/types/delete/deleter.rs +220 -0
- data/core/src/types/delete/futures_delete_sink.rs +176 -0
- data/core/src/types/delete/input.rs +97 -0
- data/core/src/types/delete/mod.rs +26 -0
- data/core/src/types/entry.rs +69 -0
- data/core/src/types/error.rs +570 -0
- data/core/src/types/execute/api.rs +110 -0
- data/core/src/types/execute/executor.rs +96 -0
- data/core/src/types/execute/executors/mod.rs +27 -0
- data/core/src/types/execute/executors/tokio_executor.rs +60 -0
- data/core/src/types/execute/mod.rs +25 -0
- data/core/src/types/list.rs +137 -0
- data/core/src/types/metadata.rs +436 -0
- data/core/src/types/mod.rs +72 -0
- data/core/src/types/mode.rs +68 -0
- data/core/src/types/operator/builder.rs +535 -0
- data/core/src/types/operator/info.rs +63 -0
- data/core/src/types/operator/mod.rs +33 -0
- data/core/src/types/operator/operator.rs +2236 -0
- data/core/src/types/operator/operator_futures.rs +1430 -0
- data/core/src/types/operator/registry.rs +129 -0
- data/core/src/types/options.rs +548 -0
- data/core/src/types/read/buffer_stream.rs +273 -0
- data/core/src/types/read/futures_async_reader.rs +289 -0
- data/core/src/types/read/futures_bytes_stream.rs +157 -0
- data/core/src/types/read/mod.rs +29 -0
- data/core/src/types/read/reader.rs +604 -0
- data/core/src/types/scheme.rs +475 -0
- data/core/src/types/write/buffer_sink.rs +188 -0
- data/core/src/types/write/futures_async_writer.rs +136 -0
- data/core/src/types/write/futures_bytes_sink.rs +103 -0
- data/core/src/types/write/mod.rs +26 -0
- data/core/src/types/write/writer.rs +411 -0
- data/core/tests/behavior/README.md +77 -0
- data/core/tests/behavior/async_copy.rs +314 -0
- data/core/tests/behavior/async_create_dir.rs +53 -0
- data/core/tests/behavior/async_delete.rs +354 -0
- data/core/tests/behavior/async_list.rs +739 -0
- data/core/tests/behavior/async_presign.rs +175 -0
- data/core/tests/behavior/async_read.rs +871 -0
- data/core/tests/behavior/async_rename.rs +210 -0
- data/core/tests/behavior/async_stat.rs +628 -0
- data/core/tests/behavior/async_write.rs +819 -0
- data/core/tests/behavior/main.rs +78 -0
- data/core/tests/behavior/utils.rs +187 -0
- data/core/tests/data/normal_dir/.gitkeep +0 -0
- data/core/tests/data/normal_file.txt +1041 -0
- data/core/tests/data/special_dir !@#$%^&()_+-=;',/.gitkeep +0 -0
- data/core/tests/data/special_file !@#$%^&()_+-=;',.txt +1041 -0
- data/core/users.md +13 -0
- data/extconf.rb +24 -0
- data/lib/opendal.rb +25 -0
- data/lib/opendal_ruby/entry.rb +35 -0
- data/lib/opendal_ruby/io.rb +70 -0
- data/lib/opendal_ruby/metadata.rb +44 -0
- data/lib/opendal_ruby/operator.rb +29 -0
- data/lib/opendal_ruby/operator_info.rb +26 -0
- data/src/capability.rs +146 -0
- data/src/io.rs +464 -0
- data/src/lib.rs +63 -0
- data/src/lister.rs +141 -0
- data/src/metadata.rs +111 -0
- data/src/middlewares.rs +174 -0
- data/src/operator.rs +310 -0
- data/src/operator_info.rs +83 -0
- data/test/blocking_op_test.rb +112 -0
- data/test/capability_test.rb +42 -0
- data/test/io_test.rb +172 -0
- data/test/lister_test.rb +77 -0
- data/test/metadata_test.rb +78 -0
- data/test/middlewares_test.rb +46 -0
- data/test/operator_info_test.rb +35 -0
- data/test/test_helper.rb +36 -0
- metadata +857 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Licensed to the Apache Software Foundation (ASF) under one
|
|
2
|
+
// or more contributor license agreements. See the NOTICE file
|
|
3
|
+
// distributed with this work for additional information
|
|
4
|
+
// regarding copyright ownership. The ASF licenses this file
|
|
5
|
+
// to you under the Apache License, Version 2.0 (the
|
|
6
|
+
// "License"); you may not use this file except in compliance
|
|
7
|
+
// with the License. You may obtain a copy of the License at
|
|
8
|
+
//
|
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
//
|
|
11
|
+
// Unless required by applicable law or agreed to in writing,
|
|
12
|
+
// software distributed under the License is distributed on an
|
|
13
|
+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
// KIND, either express or implied. See the License for the
|
|
15
|
+
// specific language governing permissions and limitations
|
|
16
|
+
// under the License.
|
|
17
|
+
|
|
18
|
+
/// Default scheme for dashmap service.
|
|
19
|
+
#[cfg(feature = "services-dashmap")]
|
|
20
|
+
pub(super) const DEFAULT_SCHEME: &str = "dashmap";
|
|
21
|
+
#[cfg(feature = "services-dashmap")]
|
|
22
|
+
mod backend;
|
|
23
|
+
#[cfg(feature = "services-dashmap")]
|
|
24
|
+
mod core;
|
|
25
|
+
#[cfg(feature = "services-dashmap")]
|
|
26
|
+
mod delete;
|
|
27
|
+
#[cfg(feature = "services-dashmap")]
|
|
28
|
+
mod lister;
|
|
29
|
+
#[cfg(feature = "services-dashmap")]
|
|
30
|
+
mod writer;
|
|
31
|
+
|
|
32
|
+
#[cfg(feature = "services-dashmap")]
|
|
33
|
+
pub use backend::DashmapBuilder as Dashmap;
|
|
34
|
+
|
|
35
|
+
mod config;
|
|
36
|
+
pub use config::DashmapConfig;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// Licensed to the Apache Software Foundation (ASF) under one
|
|
2
|
+
// or more contributor license agreements. See the NOTICE file
|
|
3
|
+
// distributed with this work for additional information
|
|
4
|
+
// regarding copyright ownership. The ASF licenses this file
|
|
5
|
+
// to you under the Apache License, Version 2.0 (the
|
|
6
|
+
// "License"); you may not use this file except in compliance
|
|
7
|
+
// with the License. You may obtain a copy of the License at
|
|
8
|
+
//
|
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
//
|
|
11
|
+
// Unless required by applicable law or agreed to in writing,
|
|
12
|
+
// software distributed under the License is distributed on an
|
|
13
|
+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
// KIND, either express or implied. See the License for the
|
|
15
|
+
// specific language governing permissions and limitations
|
|
16
|
+
// under the License.
|
|
17
|
+
|
|
18
|
+
use std::sync::Arc;
|
|
19
|
+
use std::time::SystemTime;
|
|
20
|
+
|
|
21
|
+
use super::core::DashmapCore;
|
|
22
|
+
use super::core::DashmapValue;
|
|
23
|
+
use crate::raw::{oio, OpWrite};
|
|
24
|
+
use crate::*;
|
|
25
|
+
|
|
26
|
+
pub struct DashmapWriter {
|
|
27
|
+
core: Arc<DashmapCore>,
|
|
28
|
+
path: String,
|
|
29
|
+
op: OpWrite,
|
|
30
|
+
|
|
31
|
+
buf: oio::QueueBuf,
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
impl DashmapWriter {
|
|
35
|
+
pub fn new(core: Arc<DashmapCore>, path: String, op: OpWrite) -> Self {
|
|
36
|
+
DashmapWriter {
|
|
37
|
+
core,
|
|
38
|
+
path,
|
|
39
|
+
op,
|
|
40
|
+
buf: oio::QueueBuf::new(),
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
impl oio::Write for DashmapWriter {
|
|
46
|
+
async fn write(&mut self, bs: Buffer) -> Result<()> {
|
|
47
|
+
self.buf.push(bs);
|
|
48
|
+
Ok(())
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async fn close(&mut self) -> Result<Metadata> {
|
|
52
|
+
let content = self.buf.clone().collect();
|
|
53
|
+
|
|
54
|
+
let entry_mode = EntryMode::from_path(&self.path);
|
|
55
|
+
let mut meta = Metadata::new(entry_mode);
|
|
56
|
+
meta.set_content_length(content.len() as u64);
|
|
57
|
+
meta.set_last_modified(SystemTime::now().into());
|
|
58
|
+
|
|
59
|
+
if let Some(v) = self.op.content_type() {
|
|
60
|
+
meta.set_content_type(v);
|
|
61
|
+
}
|
|
62
|
+
if let Some(v) = self.op.content_disposition() {
|
|
63
|
+
meta.set_content_disposition(v);
|
|
64
|
+
}
|
|
65
|
+
if let Some(v) = self.op.cache_control() {
|
|
66
|
+
meta.set_cache_control(v);
|
|
67
|
+
}
|
|
68
|
+
if let Some(v) = self.op.content_encoding() {
|
|
69
|
+
meta.set_content_encoding(v);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
self.core.set(
|
|
73
|
+
&self.path,
|
|
74
|
+
DashmapValue {
|
|
75
|
+
metadata: meta.clone(),
|
|
76
|
+
content,
|
|
77
|
+
},
|
|
78
|
+
)?;
|
|
79
|
+
|
|
80
|
+
Ok(meta)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
async fn abort(&mut self) -> Result<()> {
|
|
84
|
+
self.buf.clear();
|
|
85
|
+
Ok(())
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
// Licensed to the Apache Software Foundation (ASF) under one
|
|
2
|
+
// or more contributor license agreements. See the NOTICE file
|
|
3
|
+
// distributed with this work for additional information
|
|
4
|
+
// regarding copyright ownership. The ASF licenses this file
|
|
5
|
+
// to you under the Apache License, Version 2.0 (the
|
|
6
|
+
// "License"); you may not use this file except in compliance
|
|
7
|
+
// with the License. You may obtain a copy of the License at
|
|
8
|
+
//
|
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
//
|
|
11
|
+
// Unless required by applicable law or agreed to in writing,
|
|
12
|
+
// software distributed under the License is distributed on an
|
|
13
|
+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
// KIND, either express or implied. See the License for the
|
|
15
|
+
// specific language governing permissions and limitations
|
|
16
|
+
// under the License.
|
|
17
|
+
|
|
18
|
+
use std::fmt::Debug;
|
|
19
|
+
use std::fmt::Formatter;
|
|
20
|
+
use std::sync::Arc;
|
|
21
|
+
|
|
22
|
+
use bytes::Buf;
|
|
23
|
+
use http::StatusCode;
|
|
24
|
+
use log::debug;
|
|
25
|
+
use serde::Deserialize;
|
|
26
|
+
|
|
27
|
+
use super::core::DbfsCore;
|
|
28
|
+
use super::delete::DbfsDeleter;
|
|
29
|
+
use super::error::parse_error;
|
|
30
|
+
use super::lister::DbfsLister;
|
|
31
|
+
use super::writer::DbfsWriter;
|
|
32
|
+
use super::DEFAULT_SCHEME;
|
|
33
|
+
use crate::raw::*;
|
|
34
|
+
use crate::services::DbfsConfig;
|
|
35
|
+
use crate::*;
|
|
36
|
+
impl Configurator for DbfsConfig {
|
|
37
|
+
type Builder = DbfsBuilder;
|
|
38
|
+
fn into_builder(self) -> Self::Builder {
|
|
39
|
+
DbfsBuilder { config: self }
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/// [Dbfs](https://docs.databricks.com/api/azure/workspace/dbfs)'s REST API support.
|
|
44
|
+
#[doc = include_str!("docs.md")]
|
|
45
|
+
#[derive(Default, Clone)]
|
|
46
|
+
pub struct DbfsBuilder {
|
|
47
|
+
config: DbfsConfig,
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
impl Debug for DbfsBuilder {
|
|
51
|
+
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
|
52
|
+
let mut ds = f.debug_struct("DbfsBuilder");
|
|
53
|
+
|
|
54
|
+
ds.field("config", &self.config);
|
|
55
|
+
|
|
56
|
+
ds.finish()
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
impl DbfsBuilder {
|
|
61
|
+
/// Set root of this backend.
|
|
62
|
+
///
|
|
63
|
+
/// All operations will happen under this root.
|
|
64
|
+
pub fn root(mut self, root: &str) -> Self {
|
|
65
|
+
self.config.root = if root.is_empty() {
|
|
66
|
+
None
|
|
67
|
+
} else {
|
|
68
|
+
Some(root.to_string())
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
self
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/// Set endpoint of this backend.
|
|
75
|
+
///
|
|
76
|
+
/// Endpoint must be full uri, e.g.
|
|
77
|
+
///
|
|
78
|
+
/// - Azure: `https://adb-1234567890123456.78.azuredatabricks.net`
|
|
79
|
+
/// - Aws: `https://dbc-123a5678-90bc.cloud.databricks.com`
|
|
80
|
+
pub fn endpoint(mut self, endpoint: &str) -> Self {
|
|
81
|
+
self.config.endpoint = if endpoint.is_empty() {
|
|
82
|
+
None
|
|
83
|
+
} else {
|
|
84
|
+
Some(endpoint.trim_end_matches('/').to_string())
|
|
85
|
+
};
|
|
86
|
+
self
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/// Set the token of this backend.
|
|
90
|
+
pub fn token(mut self, token: &str) -> Self {
|
|
91
|
+
if !token.is_empty() {
|
|
92
|
+
self.config.token = Some(token.to_string());
|
|
93
|
+
}
|
|
94
|
+
self
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
impl Builder for DbfsBuilder {
|
|
99
|
+
type Config = DbfsConfig;
|
|
100
|
+
|
|
101
|
+
/// Build a DbfsBackend.
|
|
102
|
+
fn build(self) -> Result<impl Access> {
|
|
103
|
+
debug!("backend build started: {:?}", &self);
|
|
104
|
+
|
|
105
|
+
let root = normalize_root(&self.config.root.unwrap_or_default());
|
|
106
|
+
debug!("backend use root {root}");
|
|
107
|
+
|
|
108
|
+
let endpoint = match &self.config.endpoint {
|
|
109
|
+
Some(endpoint) => Ok(endpoint.clone()),
|
|
110
|
+
None => Err(Error::new(ErrorKind::ConfigInvalid, "endpoint is empty")
|
|
111
|
+
.with_operation("Builder::build")
|
|
112
|
+
.with_context("service", Scheme::Dbfs)),
|
|
113
|
+
}?;
|
|
114
|
+
debug!("backend use endpoint: {}", &endpoint);
|
|
115
|
+
|
|
116
|
+
let token = match self.config.token {
|
|
117
|
+
Some(token) => token,
|
|
118
|
+
None => {
|
|
119
|
+
return Err(Error::new(
|
|
120
|
+
ErrorKind::ConfigInvalid,
|
|
121
|
+
"missing token for Dbfs",
|
|
122
|
+
));
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
let client = HttpClient::new()?;
|
|
127
|
+
Ok(DbfsBackend {
|
|
128
|
+
core: Arc::new(DbfsCore {
|
|
129
|
+
root,
|
|
130
|
+
endpoint: endpoint.to_string(),
|
|
131
|
+
token,
|
|
132
|
+
client,
|
|
133
|
+
}),
|
|
134
|
+
})
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/// Backend for DBFS service
|
|
139
|
+
#[derive(Debug, Clone)]
|
|
140
|
+
pub struct DbfsBackend {
|
|
141
|
+
core: Arc<DbfsCore>,
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
impl Access for DbfsBackend {
|
|
145
|
+
type Reader = ();
|
|
146
|
+
type Writer = oio::OneShotWriter<DbfsWriter>;
|
|
147
|
+
type Lister = oio::PageLister<DbfsLister>;
|
|
148
|
+
type Deleter = oio::OneShotDeleter<DbfsDeleter>;
|
|
149
|
+
|
|
150
|
+
fn info(&self) -> Arc<AccessorInfo> {
|
|
151
|
+
let am = AccessorInfo::default();
|
|
152
|
+
am.set_scheme(DEFAULT_SCHEME)
|
|
153
|
+
.set_root(&self.core.root)
|
|
154
|
+
.set_native_capability(Capability {
|
|
155
|
+
stat: true,
|
|
156
|
+
|
|
157
|
+
write: true,
|
|
158
|
+
create_dir: true,
|
|
159
|
+
delete: true,
|
|
160
|
+
rename: true,
|
|
161
|
+
|
|
162
|
+
list: true,
|
|
163
|
+
|
|
164
|
+
shared: true,
|
|
165
|
+
|
|
166
|
+
..Default::default()
|
|
167
|
+
});
|
|
168
|
+
am.into()
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
async fn create_dir(&self, path: &str, _: OpCreateDir) -> Result<RpCreateDir> {
|
|
172
|
+
let resp = self.core.dbfs_create_dir(path).await?;
|
|
173
|
+
|
|
174
|
+
let status = resp.status();
|
|
175
|
+
|
|
176
|
+
match status {
|
|
177
|
+
StatusCode::CREATED | StatusCode::OK => Ok(RpCreateDir::default()),
|
|
178
|
+
_ => Err(parse_error(resp)),
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
async fn stat(&self, path: &str, _: OpStat) -> Result<RpStat> {
|
|
183
|
+
// Stat root always returns a DIR.
|
|
184
|
+
if path == "/" {
|
|
185
|
+
return Ok(RpStat::new(Metadata::new(EntryMode::DIR)));
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
let resp = self.core.dbfs_get_status(path).await?;
|
|
189
|
+
|
|
190
|
+
let status = resp.status();
|
|
191
|
+
|
|
192
|
+
match status {
|
|
193
|
+
StatusCode::OK => {
|
|
194
|
+
let mut meta = parse_into_metadata(path, resp.headers())?;
|
|
195
|
+
let bs = resp.into_body();
|
|
196
|
+
let decoded_response: DbfsStatus =
|
|
197
|
+
serde_json::from_reader(bs.reader()).map_err(new_json_deserialize_error)?;
|
|
198
|
+
meta.set_last_modified(parse_datetime_from_from_timestamp_millis(
|
|
199
|
+
decoded_response.modification_time,
|
|
200
|
+
)?);
|
|
201
|
+
match decoded_response.is_dir {
|
|
202
|
+
true => meta.set_mode(EntryMode::DIR),
|
|
203
|
+
false => {
|
|
204
|
+
meta.set_mode(EntryMode::FILE);
|
|
205
|
+
meta.set_content_length(decoded_response.file_size as u64)
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
Ok(RpStat::new(meta))
|
|
209
|
+
}
|
|
210
|
+
StatusCode::NOT_FOUND if path.ends_with('/') => {
|
|
211
|
+
Ok(RpStat::new(Metadata::new(EntryMode::DIR)))
|
|
212
|
+
}
|
|
213
|
+
_ => Err(parse_error(resp)),
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
async fn write(&self, path: &str, args: OpWrite) -> Result<(RpWrite, Self::Writer)> {
|
|
218
|
+
Ok((
|
|
219
|
+
RpWrite::default(),
|
|
220
|
+
oio::OneShotWriter::new(DbfsWriter::new(self.core.clone(), args, path.to_string())),
|
|
221
|
+
))
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
async fn delete(&self) -> Result<(RpDelete, Self::Deleter)> {
|
|
225
|
+
Ok((
|
|
226
|
+
RpDelete::default(),
|
|
227
|
+
oio::OneShotDeleter::new(DbfsDeleter::new(self.core.clone())),
|
|
228
|
+
))
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
async fn list(&self, path: &str, _args: OpList) -> Result<(RpList, Self::Lister)> {
|
|
232
|
+
let l = DbfsLister::new(self.core.clone(), path.to_string());
|
|
233
|
+
|
|
234
|
+
Ok((RpList::default(), oio::PageLister::new(l)))
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
async fn rename(&self, from: &str, to: &str, _args: OpRename) -> Result<RpRename> {
|
|
238
|
+
self.core.dbfs_ensure_parent_path(to).await?;
|
|
239
|
+
|
|
240
|
+
let resp = self.core.dbfs_rename(from, to).await?;
|
|
241
|
+
|
|
242
|
+
let status = resp.status();
|
|
243
|
+
|
|
244
|
+
match status {
|
|
245
|
+
StatusCode::OK => Ok(RpRename::default()),
|
|
246
|
+
_ => Err(parse_error(resp)),
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
#[derive(Deserialize)]
|
|
252
|
+
struct DbfsStatus {
|
|
253
|
+
// Not used fields.
|
|
254
|
+
// path: String,
|
|
255
|
+
is_dir: bool,
|
|
256
|
+
file_size: i64,
|
|
257
|
+
modification_time: i64,
|
|
258
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// Licensed to the Apache Software Foundation (ASF) under one
|
|
2
|
+
// or more contributor license agreements. See the NOTICE file
|
|
3
|
+
// distributed with this work for additional information
|
|
4
|
+
// regarding copyright ownership. The ASF licenses this file
|
|
5
|
+
// to you under the Apache License, Version 2.0 (the
|
|
6
|
+
// "License"); you may not use this file except in compliance
|
|
7
|
+
// with the License. You may obtain a copy of the License at
|
|
8
|
+
//
|
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
//
|
|
11
|
+
// Unless required by applicable law or agreed to in writing,
|
|
12
|
+
// software distributed under the License is distributed on an
|
|
13
|
+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
// KIND, either express or implied. See the License for the
|
|
15
|
+
// specific language governing permissions and limitations
|
|
16
|
+
// under the License.
|
|
17
|
+
|
|
18
|
+
use std::fmt::Debug;
|
|
19
|
+
use std::fmt::Formatter;
|
|
20
|
+
|
|
21
|
+
use serde::Deserialize;
|
|
22
|
+
use serde::Serialize;
|
|
23
|
+
|
|
24
|
+
/// [Dbfs](https://docs.databricks.com/api/azure/workspace/dbfs)'s REST API support.
|
|
25
|
+
#[derive(Default, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
|
26
|
+
pub struct DbfsConfig {
|
|
27
|
+
/// The root for dbfs.
|
|
28
|
+
pub root: Option<String>,
|
|
29
|
+
/// The endpoint for dbfs.
|
|
30
|
+
pub endpoint: Option<String>,
|
|
31
|
+
/// The token for dbfs.
|
|
32
|
+
pub token: Option<String>,
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
impl Debug for DbfsConfig {
|
|
36
|
+
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
|
37
|
+
let mut ds = f.debug_struct("DbfsConfig");
|
|
38
|
+
|
|
39
|
+
ds.field("root", &self.root);
|
|
40
|
+
ds.field("endpoint", &self.endpoint);
|
|
41
|
+
|
|
42
|
+
if self.token.is_some() {
|
|
43
|
+
ds.field("token", &"<redacted>");
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
ds.finish()
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
// Licensed to the Apache Software Foundation (ASF) under one
|
|
2
|
+
// or more contributor license agreements. See the NOTICE file
|
|
3
|
+
// distributed with this work for additional information
|
|
4
|
+
// regarding copyright ownership. The ASF licenses this file
|
|
5
|
+
// to you under the Apache License, Version 2.0 (the
|
|
6
|
+
// "License"); you may not use this file except in compliance
|
|
7
|
+
// with the License. You may obtain a copy of the License at
|
|
8
|
+
//
|
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
//
|
|
11
|
+
// Unless required by applicable law or agreed to in writing,
|
|
12
|
+
// software distributed under the License is distributed on an
|
|
13
|
+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
// KIND, either express or implied. See the License for the
|
|
15
|
+
// specific language governing permissions and limitations
|
|
16
|
+
// under the License.
|
|
17
|
+
|
|
18
|
+
use std::fmt::Debug;
|
|
19
|
+
|
|
20
|
+
use base64::prelude::BASE64_STANDARD;
|
|
21
|
+
use base64::Engine;
|
|
22
|
+
use bytes::Bytes;
|
|
23
|
+
use http::header;
|
|
24
|
+
use http::Request;
|
|
25
|
+
use http::Response;
|
|
26
|
+
use http::StatusCode;
|
|
27
|
+
use serde_json::json;
|
|
28
|
+
|
|
29
|
+
use super::error::parse_error;
|
|
30
|
+
use crate::raw::*;
|
|
31
|
+
use crate::*;
|
|
32
|
+
|
|
33
|
+
pub struct DbfsCore {
|
|
34
|
+
pub root: String,
|
|
35
|
+
pub endpoint: String,
|
|
36
|
+
pub token: String,
|
|
37
|
+
pub client: HttpClient,
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
impl Debug for DbfsCore {
|
|
41
|
+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
42
|
+
f.debug_struct("DbfsCore")
|
|
43
|
+
.field("root", &self.root)
|
|
44
|
+
.field("endpoint", &self.endpoint)
|
|
45
|
+
.field("token", &self.token)
|
|
46
|
+
.finish_non_exhaustive()
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
impl DbfsCore {
|
|
51
|
+
pub async fn dbfs_create_dir(&self, path: &str) -> Result<Response<Buffer>> {
|
|
52
|
+
let url = format!("{}/api/2.0/dbfs/mkdirs", self.endpoint);
|
|
53
|
+
let mut req = Request::post(&url);
|
|
54
|
+
|
|
55
|
+
let auth_header_content = format!("Bearer {}", self.token);
|
|
56
|
+
req = req.header(header::AUTHORIZATION, auth_header_content);
|
|
57
|
+
|
|
58
|
+
let p = build_rooted_abs_path(&self.root, path)
|
|
59
|
+
.trim_end_matches('/')
|
|
60
|
+
.to_string();
|
|
61
|
+
|
|
62
|
+
let req_body = &json!({
|
|
63
|
+
"path": percent_encode_path(&p),
|
|
64
|
+
});
|
|
65
|
+
let body = Buffer::from(Bytes::from(req_body.to_string()));
|
|
66
|
+
|
|
67
|
+
let req = req.body(body).map_err(new_request_build_error)?;
|
|
68
|
+
|
|
69
|
+
self.client.send(req).await
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
pub async fn dbfs_delete(&self, path: &str) -> Result<Response<Buffer>> {
|
|
73
|
+
let url = format!("{}/api/2.0/dbfs/delete", self.endpoint);
|
|
74
|
+
let mut req = Request::post(&url);
|
|
75
|
+
|
|
76
|
+
let auth_header_content = format!("Bearer {}", self.token);
|
|
77
|
+
req = req.header(header::AUTHORIZATION, auth_header_content);
|
|
78
|
+
|
|
79
|
+
let p = build_rooted_abs_path(&self.root, path)
|
|
80
|
+
.trim_end_matches('/')
|
|
81
|
+
.to_string();
|
|
82
|
+
|
|
83
|
+
let request_body = &json!({
|
|
84
|
+
"path": percent_encode_path(&p),
|
|
85
|
+
// TODO: support recursive toggle, should we add a new field in OpDelete?
|
|
86
|
+
"recursive": true,
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
let body = Buffer::from(Bytes::from(request_body.to_string()));
|
|
90
|
+
|
|
91
|
+
let req = req.body(body).map_err(new_request_build_error)?;
|
|
92
|
+
|
|
93
|
+
self.client.send(req).await
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
pub async fn dbfs_rename(&self, from: &str, to: &str) -> Result<Response<Buffer>> {
|
|
97
|
+
let source = build_rooted_abs_path(&self.root, from);
|
|
98
|
+
let target = build_rooted_abs_path(&self.root, to);
|
|
99
|
+
|
|
100
|
+
let url = format!("{}/api/2.0/dbfs/move", self.endpoint);
|
|
101
|
+
let mut req = Request::post(&url);
|
|
102
|
+
|
|
103
|
+
let auth_header_content = format!("Bearer {}", self.token);
|
|
104
|
+
req = req.header(header::AUTHORIZATION, auth_header_content);
|
|
105
|
+
|
|
106
|
+
let req_body = &json!({
|
|
107
|
+
"source_path": percent_encode_path(&source),
|
|
108
|
+
"destination_path": percent_encode_path(&target),
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
let body = Buffer::from(Bytes::from(req_body.to_string()));
|
|
112
|
+
|
|
113
|
+
let req = req.body(body).map_err(new_request_build_error)?;
|
|
114
|
+
|
|
115
|
+
self.client.send(req).await
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
pub async fn dbfs_list(&self, path: &str) -> Result<Response<Buffer>> {
|
|
119
|
+
let p = build_rooted_abs_path(&self.root, path)
|
|
120
|
+
.trim_end_matches('/')
|
|
121
|
+
.to_string();
|
|
122
|
+
|
|
123
|
+
let url = format!(
|
|
124
|
+
"{}/api/2.0/dbfs/list?path={}",
|
|
125
|
+
self.endpoint,
|
|
126
|
+
percent_encode_path(&p)
|
|
127
|
+
);
|
|
128
|
+
let mut req = Request::get(&url);
|
|
129
|
+
|
|
130
|
+
let auth_header_content = format!("Bearer {}", self.token);
|
|
131
|
+
req = req.header(header::AUTHORIZATION, auth_header_content);
|
|
132
|
+
|
|
133
|
+
let req = req.body(Buffer::new()).map_err(new_request_build_error)?;
|
|
134
|
+
|
|
135
|
+
self.client.send(req).await
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
pub fn dbfs_create_file_request(&self, path: &str, body: Bytes) -> Result<Request<Buffer>> {
|
|
139
|
+
let url = format!("{}/api/2.0/dbfs/put", self.endpoint);
|
|
140
|
+
|
|
141
|
+
let contents = BASE64_STANDARD.encode(body);
|
|
142
|
+
let mut req = Request::post(&url);
|
|
143
|
+
|
|
144
|
+
let auth_header_content = format!("Bearer {}", self.token);
|
|
145
|
+
req = req.header(header::AUTHORIZATION, auth_header_content);
|
|
146
|
+
|
|
147
|
+
let req_body = &json!({
|
|
148
|
+
"path": path,
|
|
149
|
+
"contents": contents,
|
|
150
|
+
"overwrite": true,
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
let body = Buffer::from(Bytes::from(req_body.to_string()));
|
|
154
|
+
|
|
155
|
+
req.body(body).map_err(new_request_build_error)
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
pub async fn dbfs_get_status(&self, path: &str) -> Result<Response<Buffer>> {
|
|
159
|
+
let p = build_rooted_abs_path(&self.root, path)
|
|
160
|
+
.trim_end_matches('/')
|
|
161
|
+
.to_string();
|
|
162
|
+
|
|
163
|
+
let url = format!(
|
|
164
|
+
"{}/api/2.0/dbfs/get-status?path={}",
|
|
165
|
+
&self.endpoint,
|
|
166
|
+
percent_encode_path(&p)
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
let mut req = Request::get(&url);
|
|
170
|
+
|
|
171
|
+
let auth_header_content = format!("Bearer {}", self.token);
|
|
172
|
+
req = req.header(header::AUTHORIZATION, auth_header_content);
|
|
173
|
+
|
|
174
|
+
let req = req.body(Buffer::new()).map_err(new_request_build_error)?;
|
|
175
|
+
|
|
176
|
+
self.client.send(req).await
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
pub async fn dbfs_ensure_parent_path(&self, path: &str) -> Result<()> {
|
|
180
|
+
let resp = self.dbfs_get_status(path).await?;
|
|
181
|
+
|
|
182
|
+
match resp.status() {
|
|
183
|
+
StatusCode::OK => return Ok(()),
|
|
184
|
+
StatusCode::NOT_FOUND => {
|
|
185
|
+
self.dbfs_create_dir(path).await?;
|
|
186
|
+
}
|
|
187
|
+
_ => return Err(parse_error(resp)),
|
|
188
|
+
}
|
|
189
|
+
Ok(())
|
|
190
|
+
}
|
|
191
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// Licensed to the Apache Software Foundation (ASF) under one
|
|
2
|
+
// or more contributor license agreements. See the NOTICE file
|
|
3
|
+
// distributed with this work for additional information
|
|
4
|
+
// regarding copyright ownership. The ASF licenses this file
|
|
5
|
+
// to you under the Apache License, Version 2.0 (the
|
|
6
|
+
// "License"); you may not use this file except in compliance
|
|
7
|
+
// with the License. You may obtain a copy of the License at
|
|
8
|
+
//
|
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
//
|
|
11
|
+
// Unless required by applicable law or agreed to in writing,
|
|
12
|
+
// software distributed under the License is distributed on an
|
|
13
|
+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
// KIND, either express or implied. See the License for the
|
|
15
|
+
// specific language governing permissions and limitations
|
|
16
|
+
// under the License.
|
|
17
|
+
|
|
18
|
+
use std::sync::Arc;
|
|
19
|
+
|
|
20
|
+
use http::StatusCode;
|
|
21
|
+
|
|
22
|
+
use super::core::*;
|
|
23
|
+
use super::error::parse_error;
|
|
24
|
+
use crate::raw::*;
|
|
25
|
+
use crate::*;
|
|
26
|
+
|
|
27
|
+
pub struct DbfsDeleter {
|
|
28
|
+
core: Arc<DbfsCore>,
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
impl DbfsDeleter {
|
|
32
|
+
pub fn new(core: Arc<DbfsCore>) -> Self {
|
|
33
|
+
Self { core }
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
impl oio::OneShotDelete for DbfsDeleter {
|
|
38
|
+
async fn delete_once(&self, path: String, _: OpDelete) -> Result<()> {
|
|
39
|
+
let resp = self.core.dbfs_delete(&path).await?;
|
|
40
|
+
|
|
41
|
+
let status = resp.status();
|
|
42
|
+
|
|
43
|
+
match status {
|
|
44
|
+
// NOTE: Server will return 200 even if the path doesn't exist.
|
|
45
|
+
StatusCode::OK => Ok(()),
|
|
46
|
+
_ => Err(parse_error(resp)),
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|