You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opendal.apache.org by gi...@apache.org on 2023/07/18 11:31:41 UTC
[incubator-opendal] branch gh-pages updated: deploy: a1921e928d740f6867fb9751a93ded7d2ae04480
This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch gh-pages
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git
The following commit(s) were added to refs/heads/gh-pages by this push:
new 54d5c3243 deploy: a1921e928d740f6867fb9751a93ded7d2ae04480
54d5c3243 is described below
commit 54d5c324319f40afda39d3deb251e0ef3f7d8664
Author: Xuanwo <Xu...@users.noreply.github.com>
AuthorDate: Tue Jul 18 11:31:38 2023 +0000
deploy: a1921e928d740f6867fb9751a93ded7d2ae04480
---
404.html | 4 +-
.../{054cd2fb.e6b995f9.js => 054cd2fb.365a63e0.js} | 2 +-
.../{136e1c50.6235be29.js => 136e1c50.e9ebc597.js} | 2 +-
.../{1957547a.129a3189.js => 1957547a.73af6061.js} | 2 +-
assets/js/1db64337.16f06ea6.js | 1 +
assets/js/1db64337.57d5db53.js | 1 -
.../{22d8fa67.e048f3df.js => 22d8fa67.56645370.js} | 2 +-
.../{2cbf1097.fc309a92.js => 2cbf1097.fb5a85bf.js} | 2 +-
.../{434bbc94.6bd365ba.js => 434bbc94.3420ce34.js} | 2 +-
.../{57a16c1d.79528159.js => 57a16c1d.995d7c93.js} | 2 +-
assets/js/5a65e608.636d4035.js | 1 +
assets/js/5a65e608.68e61fee.js | 1 -
.../{62a401e9.e45eada0.js => 62a401e9.f283b0d5.js} | 2 +-
assets/js/6eb7fe18.1986413e.js | 1 +
assets/js/6eb7fe18.d501206a.js | 1 -
.../{8cc9519e.6809a179.js => 8cc9519e.2d5fb06c.js} | 2 +-
.../{8f4159f2.386be63a.js => 8f4159f2.cdaa06ec.js} | 2 +-
.../{a0405932.caec2e03.js => a0405932.a19b3d62.js} | 2 +-
.../{ab10c306.f2995bfa.js => ab10c306.d964821f.js} | 2 +-
assets/js/ae4554eb.9e638c45.js | 1 -
assets/js/ae4554eb.a31a4f4f.js | 1 +
.../{b56f9725.8ccabf7f.js => b56f9725.88112f51.js} | 2 +-
.../{bb5b2057.2984d4c1.js => bb5b2057.4f07dcb1.js} | 2 +-
.../{c6ab695b.b1c8494f.js => c6ab695b.a55f0a31.js} | 2 +-
.../{cc62039a.0af20375.js => cc62039a.cdb6af21.js} | 2 +-
assets/js/d5c31a96.64fed920.js | 1 -
assets/js/d5c31a96.87ae49c6.js | 1 +
.../{e892cec6.29aa354a.js => e892cec6.8b1fcf8d.js} | 2 +-
.../{f1ca5a39.9081f058.js => f1ca5a39.8fe445fc.js} | 2 +-
assets/js/runtime~main.411809a4.js | 1 -
assets/js/runtime~main.7e185f83.js | 1 +
blog/archive/index.html | 4 +-
blog/index.html | 4 +-
blog/opendal-access-data-freely/index.html | 4 +-
blog/opendal-entered-apache-incubator/index.html | 4 +-
blog/tags/announcement/index.html | 4 +-
blog/tags/index.html | 4 +-
docs/category/contributing/index.html | 4 +-
docs/category/reference/index.html | 4 +-
docs/category/services/index.html | 4 +-
.../reference/generate_release_note/index.html | 6 +-
docs/contributing/reference/setup_gpg/index.html | 6 +-
docs/contributing/release/index.html | 6 +-
docs/contributing/verify/index.html | 6 +-
docs/lua/classes/opendal.metadata.html | 2 +-
docs/lua/classes/opendal.operator.html | 2 +-
docs/lua/index.html | 2 +-
docs/nodejs/classes/BlockingLister.html | 4 +-
docs/nodejs/classes/Entry.html | 4 +-
docs/nodejs/classes/Lister.html | 4 +-
docs/nodejs/classes/Metadata.html | 18 +-
docs/nodejs/classes/Operator.html | 58 +-
docs/nodejs/interfaces/PresignedRequest.html | 8 +-
docs/overview/index.html | 6 +-
docs/python/opendal.html | 48 +-
docs/python/search.js | 2 +-
docs/rust/implementors/core/clone/trait.Clone.js | 2 +-
.../implementors/core/default/trait.Default.js | 2 +-
docs/rust/implementors/core/marker/trait.Freeze.js | 2 +-
docs/rust/implementors/core/marker/trait.Send.js | 2 +-
docs/rust/implementors/core/marker/trait.Sync.js | 2 +-
docs/rust/implementors/core/marker/trait.Unpin.js | 2 +-
.../core/panic/unwind_safe/trait.RefUnwindSafe.js | 2 +-
.../core/panic/unwind_safe/trait.UnwindSafe.js | 2 +-
docs/rust/opendal/all.html | 2 +-
docs/rust/opendal/layers/index.html | 4 +-
.../layers/retry/trait.RetryInterceptor.html | 11 +
docs/rust/opendal/layers/sidebar-items.js | 2 +-
docs/rust/opendal/layers/struct.RetryLayer.html | 92 ++-
.../opendal/layers/trait.RetryInterceptor.html | 17 +
docs/rust/opendal/raw/trait.Layer.html | 2 +-
docs/rust/opendal/services/struct.S3.html | 10 +-
docs/rust/opendal/struct.BlockingOperator.html | 17 +-
docs/rust/opendal/struct.BlockingWriter.html | 8 +-
docs/rust/opendal/struct.Writer.html | 29 +-
docs/rust/opendal/trait.Builder.html | 2 +-
docs/rust/search-index.js | 2 +-
docs/rust/src/opendal/layers/mod.rs.html | 2 +
docs/rust/src/opendal/layers/retry.rs.html | 886 +++++++++++++++++----
docs/rust/src/opendal/services/s3/backend.rs.html | 6 +-
.../types/operator/blocking_operator.rs.html | 4 +-
docs/rust/src/opendal/types/writer.rs.html | 12 +-
docs/services/azblob/index.html | 6 +-
docs/services/azdfs/index.html | 6 +-
docs/services/cos/index.html | 6 +-
docs/services/dashmap/index.html | 6 +-
docs/services/fs/index.html | 6 +-
docs/services/ftp/index.html | 6 +-
docs/services/hdfs/index.html | 6 +-
docs/services/ipfs/index.html | 6 +-
docs/services/ipmfs/index.html | 6 +-
docs/services/memory/index.html | 6 +-
docs/services/oss/index.html | 6 +-
docs/services/redis/index.html | 6 +-
docs/services/rocksdb/index.html | 6 +-
docs/services/s3/index.html | 6 +-
docs/services/sftp/index.html | 6 +-
docs/services/sled/index.html | 6 +-
docs/services/webhdfs/index.html | 6 +-
docs/vision/index.html | 6 +-
download/index.html | 4 +-
index.html | 4 +-
102 files changed, 1074 insertions(+), 436 deletions(-)
diff --git a/404.html b/404.html
index b54b40a52..63039dcda 100644
--- a/404.html
+++ b/404.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Page Not Found | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/404.html"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/assets/js/054cd2fb.e6b995f9.js b/assets/js/054cd2fb.365a63e0.js
similarity index 84%
rename from assets/js/054cd2fb.e6b995f9.js
rename to assets/js/054cd2fb.365a63e0.js
index 050e81ff2..6f67adb07 100644
--- a/assets/js/054cd2fb.e6b995f9.js
+++ b/assets/js/054cd2fb.365a63e0.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1846],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1846],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/136e1c50.6235be29.js b/assets/js/136e1c50.e9ebc597.js
similarity index 83%
rename from assets/js/136e1c50.6235be29.js
rename to assets/js/136e1c50.e9ebc597.js
index 88b564a16..5cc872043 100644
--- a/assets/js/136e1c50.6235be29.js
+++ b/assets/js/136e1c50.e9ebc597.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3057],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3057],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/1957547a.129a3189.js b/assets/js/1957547a.73af6061.js
similarity index 74%
rename from assets/js/1957547a.129a3189.js
rename to assets/js/1957547a.73af6061.js
index 72736e6a4..53ad20eb3 100644
--- a/assets/js/1957547a.129a3189.js
+++ b/assets/js/1957547a.73af6061.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4477],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4477],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/1db64337.16f06ea6.js b/assets/js/1db64337.16f06ea6.js
new file mode 100644
index 000000000..5bc85ca5f
--- /dev/null
+++ b/assets/js/1db64337.16f06ea6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1372],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/1db64337.57d5db53.js b/assets/js/1db64337.57d5db53.js
deleted file mode 100644
index fba05a2aa..000000000
--- a/assets/js/1db64337.57d5db53.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1372],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/22d8fa67.e048f3df.js b/assets/js/22d8fa67.56645370.js
similarity index 85%
rename from assets/js/22d8fa67.e048f3df.js
rename to assets/js/22d8fa67.56645370.js
index 8235fb099..38625a9f9 100644
--- a/assets/js/22d8fa67.e048f3df.js
+++ b/assets/js/22d8fa67.56645370.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4536],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4536],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/2cbf1097.fc309a92.js b/assets/js/2cbf1097.fb5a85bf.js
similarity index 91%
rename from assets/js/2cbf1097.fc309a92.js
rename to assets/js/2cbf1097.fb5a85bf.js
index 2cb0eb58a..a8d2267af 100644
--- a/assets/js/2cbf1097.fc309a92.js
+++ b/assets/js/2cbf1097.fb5a85bf.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2804],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2804],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/434bbc94.6bd365ba.js b/assets/js/434bbc94.3420ce34.js
similarity index 86%
rename from assets/js/434bbc94.6bd365ba.js
rename to assets/js/434bbc94.3420ce34.js
index 51828df40..886b15a2b 100644
--- a/assets/js/434bbc94.6bd365ba.js
+++ b/assets/js/434bbc94.3420ce34.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1163],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1163],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/57a16c1d.79528159.js b/assets/js/57a16c1d.995d7c93.js
similarity index 83%
rename from assets/js/57a16c1d.79528159.js
rename to assets/js/57a16c1d.995d7c93.js
index 9f1401d8f..9d0e9b654 100644
--- a/assets/js/57a16c1d.79528159.js
+++ b/assets/js/57a16c1d.995d7c93.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7757],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7757],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/5a65e608.636d4035.js b/assets/js/5a65e608.636d4035.js
new file mode 100644
index 000000000..695ce6b59
--- /dev/null
+++ b/assets/js/5a65e608.636d4035.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6427],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/5a65e608.68e61fee.js b/assets/js/5a65e608.68e61fee.js
deleted file mode 100644
index 83e62bfeb..000000000
--- a/assets/js/5a65e608.68e61fee.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6427],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/62a401e9.e45eada0.js b/assets/js/62a401e9.f283b0d5.js
similarity index 84%
rename from assets/js/62a401e9.e45eada0.js
rename to assets/js/62a401e9.f283b0d5.js
index 42b0768db..f94791376 100644
--- a/assets/js/62a401e9.e45eada0.js
+++ b/assets/js/62a401e9.f283b0d5.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6089],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6089],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/6eb7fe18.1986413e.js b/assets/js/6eb7fe18.1986413e.js
new file mode 100644
index 000000000..c0829e8d1
--- /dev/null
+++ b/assets/js/6eb7fe18.1986413e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3922],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/6eb7fe18.d501206a.js b/assets/js/6eb7fe18.d501206a.js
deleted file mode 100644
index c5663612e..000000000
--- a/assets/js/6eb7fe18.d501206a.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3922],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8cc9519e.6809a179.js b/assets/js/8cc9519e.2d5fb06c.js
similarity index 89%
rename from assets/js/8cc9519e.6809a179.js
rename to assets/js/8cc9519e.2d5fb06c.js
index 9c765f787..1ad47608b 100644
--- a/assets/js/8cc9519e.6809a179.js
+++ b/assets/js/8cc9519e.2d5fb06c.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1652],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1652],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8f4159f2.386be63a.js b/assets/js/8f4159f2.cdaa06ec.js
similarity index 89%
rename from assets/js/8f4159f2.386be63a.js
rename to assets/js/8f4159f2.cdaa06ec.js
index 950938c20..e0f226e73 100644
--- a/assets/js/8f4159f2.386be63a.js
+++ b/assets/js/8f4159f2.cdaa06ec.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4719],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4719],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/a0405932.caec2e03.js b/assets/js/a0405932.a19b3d62.js
similarity index 84%
rename from assets/js/a0405932.caec2e03.js
rename to assets/js/a0405932.a19b3d62.js
index 4d7fc9677..e8a93c773 100644
--- a/assets/js/a0405932.caec2e03.js
+++ b/assets/js/a0405932.a19b3d62.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[716],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retur [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[716],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retur [...]
\ No newline at end of file
diff --git a/assets/js/ab10c306.f2995bfa.js b/assets/js/ab10c306.d964821f.js
similarity index 68%
rename from assets/js/ab10c306.f2995bfa.js
rename to assets/js/ab10c306.d964821f.js
index 2b15afa21..1b6f9f2b6 100644
--- a/assets/js/ab10c306.f2995bfa.js
+++ b/assets/js/ab10c306.d964821f.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[380],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retur [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[380],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retur [...]
\ No newline at end of file
diff --git a/assets/js/ae4554eb.9e638c45.js b/assets/js/ae4554eb.9e638c45.js
deleted file mode 100644
index e96c5ee32..000000000
--- a/assets/js/ae4554eb.9e638c45.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6983],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/ae4554eb.a31a4f4f.js b/assets/js/ae4554eb.a31a4f4f.js
new file mode 100644
index 000000000..5ade41bfc
--- /dev/null
+++ b/assets/js/ae4554eb.a31a4f4f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6983],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/b56f9725.8ccabf7f.js b/assets/js/b56f9725.88112f51.js
similarity index 84%
rename from assets/js/b56f9725.8ccabf7f.js
rename to assets/js/b56f9725.88112f51.js
index 7a6f88a3f..6745fe8ed 100644
--- a/assets/js/b56f9725.8ccabf7f.js
+++ b/assets/js/b56f9725.88112f51.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[217],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retur [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[217],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retur [...]
\ No newline at end of file
diff --git a/assets/js/bb5b2057.2984d4c1.js b/assets/js/bb5b2057.4f07dcb1.js
similarity index 83%
rename from assets/js/bb5b2057.2984d4c1.js
rename to assets/js/bb5b2057.4f07dcb1.js
index 35dee0f54..c4a27c724 100644
--- a/assets/js/bb5b2057.2984d4c1.js
+++ b/assets/js/bb5b2057.4f07dcb1.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5214],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5214],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/c6ab695b.b1c8494f.js b/assets/js/c6ab695b.a55f0a31.js
similarity index 72%
rename from assets/js/c6ab695b.b1c8494f.js
rename to assets/js/c6ab695b.a55f0a31.js
index c6b494611..ca5875c2c 100644
--- a/assets/js/c6ab695b.b1c8494f.js
+++ b/assets/js/c6ab695b.a55f0a31.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7289],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7289],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/cc62039a.0af20375.js b/assets/js/cc62039a.cdb6af21.js
similarity index 88%
rename from assets/js/cc62039a.0af20375.js
rename to assets/js/cc62039a.cdb6af21.js
index 144f5a2e9..4fab3005f 100644
--- a/assets/js/cc62039a.0af20375.js
+++ b/assets/js/cc62039a.cdb6af21.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1011],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1011],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/d5c31a96.64fed920.js b/assets/js/d5c31a96.64fed920.js
deleted file mode 100644
index 63a3fe895..000000000
--- a/assets/js/d5c31a96.64fed920.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2379],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/d5c31a96.87ae49c6.js b/assets/js/d5c31a96.87ae49c6.js
new file mode 100644
index 000000000..ad6dc82d2
--- /dev/null
+++ b/assets/js/d5c31a96.87ae49c6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2379],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/e892cec6.29aa354a.js b/assets/js/e892cec6.8b1fcf8d.js
similarity index 86%
rename from assets/js/e892cec6.29aa354a.js
rename to assets/js/e892cec6.8b1fcf8d.js
index 4f5cf0b24..90e9da661 100644
--- a/assets/js/e892cec6.29aa354a.js
+++ b/assets/js/e892cec6.8b1fcf8d.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3845],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3845],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/f1ca5a39.9081f058.js b/assets/js/f1ca5a39.8fe445fc.js
similarity index 87%
rename from assets/js/f1ca5a39.9081f058.js
rename to assets/js/f1ca5a39.8fe445fc.js
index 30c70cee2..16eaeff2b 100644
--- a/assets/js/f1ca5a39.9081f058.js
+++ b/assets/js/f1ca5a39.8fe445fc.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4538],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4538],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.411809a4.js b/assets/js/runtime~main.411809a4.js
deleted file mode 100644
index 4ff8b03ff..000000000
--- a/assets/js/runtime~main.411809a4.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{"use strict";var e,a,t,c,r,f={},b={};function d(e){var a=b[e];if(void 0!==a)return a.exports;var t=b[e]={exports:{}};return f[e].call(t.exports,t,t.exports,d),t.exports}d.m=f,e=[],d.O=(a,t,c,r)=>{if(!t){var f=1/0;for(i=0;i<e.length;i++){t=e[i][0],c=e[i][1],r=e[i][2];for(var b=!0,o=0;o<t.length;o++)(!1&r||f>=r)&&Object.keys(d.O).every((e=>d.O[e](t[o])))?t.splice(o--,1):(b=!1,r<f&&(f=r));if(b){e.splice(i--,1);var n=c();void 0!==n&&(a=n)}}return a}r=r||0;for(var i=e.length;i>0&&e[i-1] [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.7e185f83.js b/assets/js/runtime~main.7e185f83.js
new file mode 100644
index 000000000..36f7016d6
--- /dev/null
+++ b/assets/js/runtime~main.7e185f83.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,a,t,c,r,f={},d={};function b(e){var a=d[e];if(void 0!==a)return a.exports;var t=d[e]={exports:{}};return f[e].call(t.exports,t,t.exports,b),t.exports}b.m=f,e=[],b.O=(a,t,c,r)=>{if(!t){var f=1/0;for(i=0;i<e.length;i++){t=e[i][0],c=e[i][1],r=e[i][2];for(var d=!0,o=0;o<t.length;o++)(!1&r||f>=r)&&Object.keys(b.O).every((e=>b.O[e](t[o])))?t.splice(o--,1):(d=!1,r<f&&(f=r));if(d){e.splice(i--,1);var n=c();void 0!==n&&(a=n)}}return a}r=r||0;for(var i=e.length;i>0&&e[i-1] [...]
\ No newline at end of file
diff --git a/blog/archive/index.html b/blog/archive/index.html
index 5852b77e9..d0e36fdb1 100644
--- a/blog/archive/index.html
+++ b/blog/archive/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Archive | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/archive"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="t [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/index.html b/blog/index.html
index 296d42e02..51f0f6431 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Blog | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" content="Blog | Apache OpenDAL"><meta data-rh=" [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/opendal-access-data-freely/index.html b/blog/opendal-access-data-freely/index.html
index 1c18485e5..53d30a11c 100644
--- a/blog/opendal-access-data-freely/index.html
+++ b/blog/opendal-access-data-freely/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Apache OpenDAL(Incubating): Access Data Freely | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/opendal-access-data-freely"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="tru [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/opendal-entered-apache-incubator/index.html b/blog/opendal-entered-apache-incubator/index.html
index aafa60ae9..f0ce5ce95 100644
--- a/blog/opendal-entered-apache-incubator/index.html
+++ b/blog/opendal-entered-apache-incubator/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Way to Go: OpenDAL successfully entered Apache Incubator | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/opendal-entered-apache-incubator"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><m [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/announcement/index.html b/blog/tags/announcement/index.html
index d86472f46..57d06ba62 100644
--- a/blog/tags/announcement/index.html
+++ b/blog/tags/announcement/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">2 posts tagged with "announcement" | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags/announcement"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property= [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/blog/tags/index.html b/blog/tags/index.html
index 90a9ef65e..678ca08a7 100644
--- a/blog/tags/index.html
+++ b/blog/tags/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Tags | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" content="Tags | Apache OpenDAL"><meta data [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/category/contributing/index.html b/docs/category/contributing/index.html
index a2b3c6c8b..03317c8c2 100644
--- a/docs/category/contributing/index.html
+++ b/docs/category/contributing/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Contributing | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/category/contributing"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="cu [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/category/reference/index.html b/docs/category/reference/index.html
index d51885aa9..321a68c37 100644
--- a/docs/category/reference/index.html
+++ b/docs/category/reference/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Reference | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/category/reference"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current" [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/category/services/index.html b/docs/category/services/index.html
index a2518211f..3997eab25 100644
--- a/docs/category/services/index.html
+++ b/docs/category/services/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Services | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/category/services"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current">< [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/contributing/reference/generate_release_note/index.html b/docs/contributing/reference/generate_release_note/index.html
index 4f353be06..6522389d5 100644
--- a/docs/contributing/reference/generate_release_note/index.html
+++ b/docs/contributing/reference/generate_release_note/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Generate Release Note | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/contributing/reference/generate_release_note"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name= [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/contributing/reference/setup_gpg/index.html b/docs/contributing/reference/setup_gpg/index.html
index eaceb8264..288fb2d62 100644
--- a/docs/contributing/reference/setup_gpg/index.html
+++ b/docs/contributing/reference/setup_gpg/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Setup GPG Key | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/contributing/reference/setup_gpg"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/contributing/release/index.html b/docs/contributing/release/index.html
index 5f753e124..bedc90dab 100644
--- a/docs/contributing/release/index.html
+++ b/docs/contributing/release/index.html
@@ -5,7 +5,7 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Release | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/contributing/release"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current" [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
@@ -13,8 +13,8 @@
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
how the release manager releases a new version in accordance with the Apache requirements.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="introduction">Introduction<a href="#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction"></a></h2><p><code>Source Release</code> is the key point which Apache values, also, is necessary for a release. And OpenDAL will only have source release.</p><p>Please remember that publishing software [...]
we will abandon that version and prepare for the next one.
-Our release page will only display ASF releases instead of GitHub Releases.</p><blockquote><ul><li><code>opendal_version</code>: the version for opendal, like <code>0.36.0</code>.</li><li><code>release_version</code>: the version for voting, like <code>0.36.0-rc1</code>.</li></ul></blockquote><h3 class="anchor anchorWithStickyNavbar_LWe7" id="create-an-asf-release">Create an ASF Release<a href="#create-an-asf-release" class="hash-link" aria-label="Direct link to Create an ASF Release" ti [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+Our release page will only display ASF releases instead of GitHub Releases.</p><blockquote><ul><li><code>opendal_version</code>: the version for opendal, like <code>0.36.0</code>.</li><li><code>release_version</code>: the version for voting, like <code>0.36.0-rc1</code>.</li></ul></blockquote><h3 class="anchor anchorWithStickyNavbar_LWe7" id="create-an-asf-release">Create an ASF Release<a href="#create-an-asf-release" class="hash-link" aria-label="Direct link to Create an ASF Release" ti [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/contributing/verify/index.html b/docs/contributing/verify/index.html
index 24535e050..059b64415 100644
--- a/docs/contributing/verify/index.html
+++ b/docs/contributing/verify/index.html
@@ -5,15 +5,15 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Verify | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/contributing/verify"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current">< [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
You can download it directly from <a href="https://raw.githubusercontent.com/apache/incubator-opendal/main/scripts/check.sh" target="_blank" rel="noopener noreferrer">here</a>
-or check it out from the repository:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">git</span><span class="token plain"> clone git@github.com:apache/incuba [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+or check it out from the repository:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">git</span><span class="token plain"> clone git@github.com:apache/incuba [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/lua/classes/opendal.metadata.html b/docs/lua/classes/opendal.metadata.html
index 389ee1d7e..dad9b225e 100644
--- a/docs/lua/classes/opendal.metadata.html
+++ b/docs/lua/classes/opendal.metadata.html
@@ -138,7 +138,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-07-18 09:58:29 </i>
+<i style="float:right;">Last updated 2023-07-18 11:24:57 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
diff --git a/docs/lua/classes/opendal.operator.html b/docs/lua/classes/opendal.operator.html
index 161b9c071..f48f5700c 100644
--- a/docs/lua/classes/opendal.operator.html
+++ b/docs/lua/classes/opendal.operator.html
@@ -321,7 +321,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-07-18 09:58:29 </i>
+<i style="float:right;">Last updated 2023-07-18 11:24:57 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
diff --git a/docs/lua/index.html b/docs/lua/index.html
index af2ab14bc..04279df91 100644
--- a/docs/lua/index.html
+++ b/docs/lua/index.html
@@ -57,7 +57,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-07-18 09:58:29 </i>
+<i style="float:right;">Last updated 2023-07-18 11:24:57 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
diff --git a/docs/nodejs/classes/BlockingLister.html b/docs/nodejs/classes/BlockingLister.html
index 0fe0cf78b..d472f3b85 100644
--- a/docs/nodejs/classes/BlockingLister.html
+++ b/docs/nodejs/classes/BlockingLister.html
@@ -20,7 +20,7 @@
<ul class="tsd-hierarchy">
<li><span class="target">BlockingLister</span></li></ul></section><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L434">index.d.ts:434</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L434">index.d.ts:434</a></li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -51,7 +51,7 @@
<li class="tsd-description">
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="Entry.html" class="tsd-signature-type tsd-kind-class">Entry</a></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L435">index.d.ts:435</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L435">index.d.ts:435</a></li></ul></aside></li></ul></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Entry.html b/docs/nodejs/classes/Entry.html
index ec36c277e..8826235c4 100644
--- a/docs/nodejs/classes/Entry.html
+++ b/docs/nodejs/classes/Entry.html
@@ -20,7 +20,7 @@
<ul class="tsd-hierarchy">
<li><span class="target">Entry</span></li></ul></section><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L397">index.d.ts:397</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L397">index.d.ts:397</a></li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -53,7 +53,7 @@
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L399">index.d.ts:399</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L399">index.d.ts:399</a></li></ul></aside></li></ul></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Lister.html b/docs/nodejs/classes/Lister.html
index 62cfd792b..25647802a 100644
--- a/docs/nodejs/classes/Lister.html
+++ b/docs/nodejs/classes/Lister.html
@@ -20,7 +20,7 @@
<ul class="tsd-hierarchy">
<li><span class="target">Lister</span></li></ul></section><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L423">index.d.ts:423</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L423">index.d.ts:423</a></li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -57,7 +57,7 @@ thing internally.</p>
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="Entry.html" class="tsd-signature-type tsd-kind-class">Entry</a><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L432">index.d.ts:432</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L432">index.d.ts:432</a></li></ul></aside></li></ul></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Metadata.html b/docs/nodejs/classes/Metadata.html
index 5690cdca9..16ecfcb6d 100644
--- a/docs/nodejs/classes/Metadata.html
+++ b/docs/nodejs/classes/Metadata.html
@@ -20,7 +20,7 @@
<ul class="tsd-hierarchy">
<li><span class="target">Metadata</span></li></ul></section><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L401">index.d.ts:401</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L401">index.d.ts:401</a></li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -63,7 +63,7 @@
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L407">index.d.ts:407</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L407">index.d.ts:407</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="contentLength" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>content<wbr/>Length</span><a href="#contentLength" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -73,7 +73,7 @@
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">bigint</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L409">index.d.ts:409</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L409">index.d.ts:409</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="contentMd5" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>content<wbr/>Md5</span><a href="#contentMd5" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -83,7 +83,7 @@
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L411">index.d.ts:411</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L411">index.d.ts:411</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="contentType" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>content<wbr/>Type</span><a href="#contentType" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -93,7 +93,7 @@
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L413">index.d.ts:413</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L413">index.d.ts:413</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="etag" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>etag</span><a href="#etag" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -103,7 +103,7 @@
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L415">index.d.ts:415</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L415">index.d.ts:415</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="lastModified" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>last<wbr/>Modified</span><a href="#lastModified" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -114,7 +114,7 @@
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L421">index.d.ts:421</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L421">index.d.ts:421</a></li></ul></aside></li></ul></section></section>
<section class="tsd-panel-group tsd-member-group">
<h2>Methods</h2>
<section class="tsd-panel tsd-member"><a id="isDirectory" class="tsd-anchor"></a>
@@ -126,7 +126,7 @@
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L403">index.d.ts:403</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L403">index.d.ts:403</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="isFile" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>is<wbr/>File</span><a href="#isFile" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -136,7 +136,7 @@
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L405">index.d.ts:405</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L405">index.d.ts:405</a></li></ul></aside></li></ul></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Operator.html b/docs/nodejs/classes/Operator.html
index 1753264ac..df178d24c 100644
--- a/docs/nodejs/classes/Operator.html
+++ b/docs/nodejs/classes/Operator.html
@@ -20,7 +20,7 @@
<ul class="tsd-hierarchy">
<li><span class="target">Operator</span></li></ul></section><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L33">index.d.ts:33</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L33">index.d.ts:33</a></li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -79,7 +79,7 @@
<h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Record</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">></span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <a href="Operator.html" class="tsd-signature-type tsd-kind-class">Operator</a></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L35">index.d.ts:35</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L35">index.d.ts:35</a></li></ul></aside></li></ul></section></section>
<section class="tsd-panel-group tsd-member-group">
<h2>Methods</h2>
<section class="tsd-panel tsd-member"><a id="append" class="tsd-anchor"></a>
@@ -104,7 +104,7 @@
<h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L170">index.d.ts:170</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L170">index.d.ts:170</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="check" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>check</span><a href="#check" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -117,7 +117,7 @@
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L78">index.d.ts:78</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L78">index.d.ts:78</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="copy" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>copy</span><a href="#copy" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -136,7 +136,7 @@
<h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L179">index.d.ts:179</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L179">index.d.ts:179</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="copySync" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>copy<wbr/>Sync</span><a href="#copySync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -155,7 +155,7 @@
<h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L188">index.d.ts:188</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L188">index.d.ts:188</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="createDir" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>create<wbr/>Dir</span><a href="#createDir" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -172,7 +172,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L105">index.d.ts:105</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L105">index.d.ts:105</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="createDirSync" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>create<wbr/>Dir<wbr/>Sync</span><a href="#createDirSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -189,7 +189,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L114">index.d.ts:114</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L114">index.d.ts:114</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="delete" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>delete</span><a href="#delete" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -207,7 +207,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L268">index.d.ts:268</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L268">index.d.ts:268</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="deleteSync" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>delete<wbr/>Sync</span><a href="#deleteSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -224,7 +224,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L277">index.d.ts:277</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L277">index.d.ts:277</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="isExist" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>is<wbr/>Exist</span><a href="#isExist" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -241,7 +241,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L87">index.d.ts:87</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L87">index.d.ts:87</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="isExistSync" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>is<wbr/>Exist<wbr/>Sync</span><a href="#isExistSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -258,7 +258,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L96">index.d.ts:96</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L96">index.d.ts:96</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="list" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>list</span><a href="#list" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -277,7 +277,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><a href="Lister.html" class="tsd-signature-type tsd-kind-class">Lister</a><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L324">index.d.ts:324</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L324">index.d.ts:324</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="listSync" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>list<wbr/>Sync</span><a href="#listSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -296,7 +296,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <a href="BlockingLister.html" class="tsd-signature-type tsd-kind-class">BlockingLister</a></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L347">index.d.ts:347</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L347">index.d.ts:347</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="presignRead" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>presign<wbr/>Read</span><a href="#presignRead" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -316,7 +316,7 @@
<h5><span class="tsd-kind-parameter">expires</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type tsd-kind-interface">PresignedRequest</a><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L363">index.d.ts:363</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L363">index.d.ts:363</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="presignStat" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>presign<wbr/>Stat</span><a href="#presignStat" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -336,7 +336,7 @@
<h5><span class="tsd-kind-parameter">expires</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type tsd-kind-interface">PresignedRequest</a><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L395">index.d.ts:395</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L395">index.d.ts:395</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="presignWrite" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>presign<wbr/>Write</span><a href="#presignWrite" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -356,7 +356,7 @@
<h5><span class="tsd-kind-parameter">expires</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type tsd-kind-interface">PresignedRequest</a><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L379">index.d.ts:379</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L379">index.d.ts:379</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="read" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>read</span><a href="#read" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -373,7 +373,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type ">Buffer</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L123">index.d.ts:123</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L123">index.d.ts:123</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="readSync" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>read<wbr/>Sync</span><a href="#readSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -390,7 +390,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Buffer</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L132">index.d.ts:132</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L132">index.d.ts:132</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="remove" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>remove</span><a href="#remove" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -408,7 +408,7 @@
<h5><span class="tsd-kind-parameter">paths</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L289">index.d.ts:289</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L289">index.d.ts:289</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="removeAll" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>remove<wbr/>All</span><a href="#removeAll" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -426,7 +426,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L301">index.d.ts:301</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L301">index.d.ts:301</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="rename" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>rename</span><a href="#rename" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -446,7 +446,7 @@
<h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L199">index.d.ts:199</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L199">index.d.ts:199</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="renameSync" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>rename<wbr/>Sync</span><a href="#renameSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -466,7 +466,7 @@
<h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L210">index.d.ts:210</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L210">index.d.ts:210</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="scan" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>scan</span><a href="#scan" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -485,7 +485,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><a href="Lister.html" class="tsd-signature-type tsd-kind-class">Lister</a><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L233">index.d.ts:233</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L233">index.d.ts:233</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="scanSync" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>scan<wbr/>Sync</span><a href="#scanSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -504,7 +504,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <a href="BlockingLister.html" class="tsd-signature-type tsd-kind-class">BlockingLister</a></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L256">index.d.ts:256</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L256">index.d.ts:256</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="stat" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>stat</span><a href="#stat" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -527,7 +527,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><a href="Metadata.html" class="tsd-signature-type tsd-kind-class">Metadata</a><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L55">index.d.ts:55</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L55">index.d.ts:55</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="statSync" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>stat<wbr/>Sync</span><a href="#statSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -544,7 +544,7 @@
<h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <a href="Metadata.html" class="tsd-signature-type tsd-kind-class">Metadata</a></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L67">index.d.ts:67</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L67">index.d.ts:67</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="write" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>write</span><a href="#write" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -563,7 +563,7 @@
<h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L143">index.d.ts:143</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L143">index.d.ts:143</a></li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="writeSync" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>write<wbr/>Sync</span><a href="#writeSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
@@ -582,7 +582,7 @@
<h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L154">index.d.ts:154</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L154">index.d.ts:154</a></li></ul></aside></li></ul></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
diff --git a/docs/nodejs/interfaces/PresignedRequest.html b/docs/nodejs/interfaces/PresignedRequest.html
index cde1c856c..4a03043e4 100644
--- a/docs/nodejs/interfaces/PresignedRequest.html
+++ b/docs/nodejs/interfaces/PresignedRequest.html
@@ -20,7 +20,7 @@
<ul class="tsd-hierarchy">
<li><span class="target">PresignedRequest</span></li></ul></section><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L25">index.d.ts:25</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L25">index.d.ts:25</a></li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -40,21 +40,21 @@
<div class="tsd-comment tsd-typography"><p>HTTP headers of this request.</p>
</div><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L31">index.d.ts:31</a></li></ul></aside></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L31">index.d.ts:31</a></li></ul></aside></section>
<section class="tsd-panel tsd-member"><a id="method" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>method</span><a href="#method" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<div class="tsd-signature"><span class="tsd-kind-property">method</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
<div class="tsd-comment tsd-typography"><p>HTTP method of this request.</p>
</div><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L27">index.d.ts:27</a></li></ul></aside></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L27">index.d.ts:27</a></li></ul></aside></section>
<section class="tsd-panel tsd-member"><a id="url" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>url</span><a href="#url" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<div class="tsd-signature"><span class="tsd-kind-property">url</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
<div class="tsd-comment tsd-typography"><p>URL of this request.</p>
</div><aside class="tsd-sources">
<ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/3d8f0f5/bindings/nodejs/index.d.ts#L29">index.d.ts:29</a></li></ul></aside></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/a1921e9/bindings/nodejs/index.d.ts#L29">index.d.ts:29</a></li></ul></aside></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
diff --git a/docs/overview/index.html b/docs/overview/index.html
index 3faa29051..e55b19237 100644
--- a/docs/overview/index.html
+++ b/docs/overview/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Overview | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/python/opendal.html b/docs/python/opendal.html
index 81738fa92..24819f05f 100644
--- a/docs/python/opendal.html
+++ b/docs/python/opendal.html
@@ -156,22 +156,22 @@
<a class="class" href="#Metadata">Metadata</a>
<ul class="memberlist">
<li>
- <a class="variable" href="#Metadata.etag">etag</a>
+ <a class="variable" href="#Metadata.content_md5">content_md5</a>
</li>
<li>
- <a class="variable" href="#Metadata.content_md5">content_md5</a>
+ <a class="variable" href="#Metadata.etag">etag</a>
</li>
<li>
<a class="variable" href="#Metadata.mode">mode</a>
</li>
<li>
- <a class="variable" href="#Metadata.content_length">content_length</a>
+ <a class="variable" href="#Metadata.content_disposition">content_disposition</a>
</li>
<li>
- <a class="variable" href="#Metadata.content_type">content_type</a>
+ <a class="variable" href="#Metadata.content_length">content_length</a>
</li>
<li>
- <a class="variable" href="#Metadata.content_disposition">content_disposition</a>
+ <a class="variable" href="#Metadata.content_type">content_type</a>
</li>
</ul>
@@ -855,28 +855,28 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
- <div id="Metadata.etag" class="classattr">
+ <div id="Metadata.content_md5" class="classattr">
<div class="attr variable">
- <span class="name">etag</span><span class="annotation">: Optional[str]</span>
+ <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
</div>
- <a class="headerlink" href="#Metadata.etag"></a>
+ <a class="headerlink" href="#Metadata.content_md5"></a>
- <div class="docstring"><p>ETag of this entry.</p>
+ <div class="docstring"><p>Content MD5 of this entry.</p>
</div>
</div>
- <div id="Metadata.content_md5" class="classattr">
+ <div id="Metadata.etag" class="classattr">
<div class="attr variable">
- <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
+ <span class="name">etag</span><span class="annotation">: Optional[str]</span>
</div>
- <a class="headerlink" href="#Metadata.content_md5"></a>
+ <a class="headerlink" href="#Metadata.etag"></a>
- <div class="docstring"><p>Content MD5 of this entry.</p>
+ <div class="docstring"><p>ETag of this entry.</p>
</div>
@@ -893,6 +893,17 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
</div>
+ </div>
+ <div id="Metadata.content_disposition" class="classattr">
+ <div class="attr variable">
+ <span class="name">content_disposition</span><span class="annotation">: Optional[str]</span>
+
+
+ </div>
+ <a class="headerlink" href="#Metadata.content_disposition"></a>
+
+
+
</div>
<div id="Metadata.content_length" class="classattr">
<div class="attr variable">
@@ -919,17 +930,6 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
</div>
- </div>
- <div id="Metadata.content_disposition" class="classattr">
- <div class="attr variable">
- <span class="name">content_disposition</span><span class="annotation">: Optional[str]</span>
-
-
- </div>
- <a class="headerlink" href="#Metadata.content_disposition"></a>
-
-
-
</div>
</section>
<section id="Error">
diff --git a/docs/python/search.js b/docs/python/search.js
index eaee1cced..b7f76949a 100644
--- a/docs/python/search.js
+++ b/docs/python/search.js
@@ -1,6 +1,6 @@
window.pdocSearch = (function(){
/** elasticlunr - http://weixsong.github.io * Copyright (C) 2017 Oliver Nightingale * Copyright (C) 2017 Wei Song * MIT Licensed */!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.wa [...]
- /** pdoc search index */const docs = {"version": "0.9.5", "fields": ["qualname", "fullname", "annotation", "default_value", "signature", "bases", "doc"], "ref": "fullname", "documentStore": {"docs": {"opendal": {"fullname": "opendal", "modulename": "opendal", "kind": "module", "doc": "<p>OpenDAL Python binding</p>\n\n<h2 id=\"installation\">Installation</h2>\n\n<div class=\"pdoc-code codehilite\">\n<pre><span></span><code>pip<span class=\"w\"> </span>install<span class=\"w\"> </span> [...]
+ /** pdoc search index */const docs = {"version": "0.9.5", "fields": ["qualname", "fullname", "annotation", "default_value", "signature", "bases", "doc"], "ref": "fullname", "documentStore": {"docs": {"opendal": {"fullname": "opendal", "modulename": "opendal", "kind": "module", "doc": "<p>OpenDAL Python binding</p>\n\n<h2 id=\"installation\">Installation</h2>\n\n<div class=\"pdoc-code codehilite\">\n<pre><span></span><code>pip<span class=\"w\"> </span>install<span class=\"w\"> </span> [...]
// mirrored in build-search-index.js (part 1)
// Also split on html tags. this is a cheap heuristic, but good enough.
diff --git a/docs/rust/implementors/core/clone/trait.Clone.js b/docs/rust/implementors/core/clone/trait.Clone.js
index b12b04383..a88c389df 100644
--- a/docs/rust/implementors/core/clone/trait.Clone.js
+++ b/docs/rust/implementors/core/clone/trait.Clone.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"struct\" href=\"opendal/struct.BlockingOperator.html\" title=\"struct opendal::BlockingOperator\">BlockingOperator</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"struct\" href=\"opendal/struct.OperatorInfo.html [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"struct\" href=\"opendal/struct.BlockingOperator.html\" title=\"struct opendal::BlockingOperator\">BlockingOperator</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"struct\" href=\"opendal/struct.OperatorInfo.html [...]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/default/trait.Default.js b/docs/rust/implementors/core/default/trait.Default.js
index 1f1211387..327f4b89d 100644
--- a/docs/rust/implementors/core/default/trait.Default.js
+++ b/docs/rust/implementors/core/default/trait.Default.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/raw/struct.OpAppend.html\" title=\"struct opendal::raw::OpAppend\">OpAppend</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/services/struct.Fs. [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/raw/struct.OpAppend.html\" title=\"struct opendal::raw::OpAppend\">OpAppend</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/services/struct.Fs. [...]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Freeze.js b/docs/rust/implementors/core/marker/trait.Freeze.js
index b644481e7..de09df370 100644
--- a/docs/rust/implementors/core/marker/trait.Freeze.js
+++ b/docs/rust/implementors/core/marker/trait.Freeze.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"opendal":[["impl Freeze for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Entry.html\" title=\"struct opendal::Entry\">Entry</a>",1,["opendal::types::entry::Entry"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Metadata.html\" title=\"struct opendal::Metadata\">Metadata</a>",1,["opendal::types::metadata::Metadata"]],[ [...]
+"opendal":[["impl Freeze for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Entry.html\" title=\"struct opendal::Entry\">Entry</a>",1,["opendal::types::entry::Entry"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Metadata.html\" title=\"struct opendal::Metadata\">Metadata</a>",1,["opendal::types::metadata::Metadata"]],[ [...]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Send.js b/docs/rust/implementors/core/marker/trait.Send.js
index 71294dda4..e6783bbe8 100644
--- a/docs/rust/implementors/core/marker/trait.Send.js
+++ b/docs/rust/implementors/core/marker/trait.Send.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"struct\" href=\"opendal/struct.Entry.ht [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"struct\" href=\"opendal/struct.Entry.ht [...]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Sync.js b/docs/rust/implementors/core/marker/trait.Sync.js
index 275684921..dcb55bd3d 100644
--- a/docs/rust/implementors/core/marker/trait.Sync.js
+++ b/docs/rust/implementors/core/marker/trait.Sync.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"opendal/struct.Entry.ht [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"opendal/struct.Entry.ht [...]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Unpin.js b/docs/rust/implementors/core/marker/trait.Unpin.js
index 08d4c5f25..a4acab78b 100644
--- a/docs/rust/implementors/core/marker/trait.Unpin.js
+++ b/docs/rust/implementors/core/marker/trait.Unpin.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"struct\" href=\"opendal/struct.En [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"struct\" href=\"opendal/struct.En [...]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/docs/rust/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js
index 3645ffd1d..6d2461aac 100644
--- a/docs/rust/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js
+++ b/docs/rust/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::u [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::u [...]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/docs/rust/implementors/core/panic/unwind_safe/trait.UnwindSafe.js
index 78dd74226..169b33c91 100644
--- a/docs/rust/implementors/core/panic/unwind_safe/trait.UnwindSafe.js
+++ b/docs/rust/implementors/core/panic/unwind_safe/trait.UnwindSafe.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe:: [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.0/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe:: [...]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/opendal/all.html b/docs/rust/opendal/all.html
index 273ce696c..8d60b9c38 100644
--- a/docs/rust/opendal/all.html
+++ b/docs/rust/opendal/all.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of all items in this crate"><title>List of all items in this crate</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.fi [...]
\ No newline at end of file
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of all items in this crate"><title>List of all items in this crate</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.fi [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/layers/index.html b/docs/rust/opendal/layers/index.html
index 54b143f4e..6a97d5912 100644
--- a/docs/rust/opendal/layers/index.html
+++ b/docs/rust/opendal/layers/index.html
@@ -1,2 +1,2 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="`Layer` is the mechanism to intercept operations."><title>opendal::layers - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href=" [...]
-</div></details><h2 id="structs" class="small-section-header"><a href="#structs">Structs</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.ChaosLayer.html" title="struct opendal::layers::ChaosLayer">ChaosLayer</a></div><div class="desc docblock-short">Inject chaos into underlying services for robustness test.</div></li><li><div class="item-name"><a class="struct" href="struct.ConcurrentLimitLayer.html" title="struct opendal::layers::ConcurrentLimitL [...]
\ No newline at end of file
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="`Layer` is the mechanism to intercept operations."><title>opendal::layers - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href=" [...]
+</div></details><h2 id="structs" class="small-section-header"><a href="#structs">Structs</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.ChaosLayer.html" title="struct opendal::layers::ChaosLayer">ChaosLayer</a></div><div class="desc docblock-short">Inject chaos into underlying services for robustness test.</div></li><li><div class="item-name"><a class="struct" href="struct.ConcurrentLimitLayer.html" title="struct opendal::layers::ConcurrentLimitL [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/layers/retry/trait.RetryInterceptor.html b/docs/rust/opendal/layers/retry/trait.RetryInterceptor.html
new file mode 100644
index 000000000..0a48d75c0
--- /dev/null
+++ b/docs/rust/opendal/layers/retry/trait.RetryInterceptor.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta http-equiv="refresh" content="0;URL=../../../opendal/layers/trait.RetryInterceptor.html">
+ <title>Redirection</title>
+</head>
+<body>
+ <p>Redirecting to <a href="../../../opendal/layers/trait.RetryInterceptor.html">../../../opendal/layers/trait.RetryInterceptor.html</a>...</p>
+ <script>location.replace("../../../opendal/layers/trait.RetryInterceptor.html" + location.search + location.hash);</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/rust/opendal/layers/sidebar-items.js b/docs/rust/opendal/layers/sidebar-items.js
index 417c21bf1..a12732d6d 100644
--- a/docs/rust/opendal/layers/sidebar-items.js
+++ b/docs/rust/opendal/layers/sidebar-items.js
@@ -1 +1 @@
-window.SIDEBAR_ITEMS = {"struct":["ChaosLayer","ConcurrentLimitLayer","ImmutableIndexLayer","LoggingLayer","MadsimLayer","MadsimServer","MetricsLayer","MinitraceLayer","OtelTraceLayer","PrometheusLayer","RetryLayer","ThrottleLayer","TimeoutLayer","TracingLayer"]};
\ No newline at end of file
+window.SIDEBAR_ITEMS = {"struct":["ChaosLayer","ConcurrentLimitLayer","ImmutableIndexLayer","LoggingLayer","MadsimLayer","MadsimServer","MetricsLayer","MinitraceLayer","OtelTraceLayer","PrometheusLayer","RetryLayer","ThrottleLayer","TimeoutLayer","TracingLayer"],"trait":["RetryInterceptor"]};
\ No newline at end of file
diff --git a/docs/rust/opendal/layers/struct.RetryLayer.html b/docs/rust/opendal/layers/struct.RetryLayer.html
index 03523c746..52b65c179 100644
--- a/docs/rust/opendal/layers/struct.RetryLayer.html
+++ b/docs/rust/opendal/layers/struct.RetryLayer.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Add retry for temporary failed operations."><title>RetryLayer in opendal::layers - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Add retry for temporary failed operations."><title>RetryLayer in opendal::layers - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin [...]
<h2 id="notes"><a href="#notes">Notes</a></h2>
<p>This layer will retry failed operations when <a href="../struct.Error.html#method.is_temporary" title="method opendal::Error::is_temporary"><code>Error::is_temporary</code></a>
returns true. If operation still failed, this layer will set error to
@@ -15,7 +15,33 @@ returns true. If operation still failed, this layer will set error to
.expect(<span class="string">"must init"</span>)
.layer(RetryLayer::new())
.finish();</code></pre></div>
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-RetryLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#71-130">source</a><a href="#impl-RetryLayer" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.RetryLayer.html" title=" [...]
+<h3 id="customize-retry-interceptor"><a href="#customize-retry-interceptor">Customize retry interceptor</a></h3>
+<p>RetryLayer accepts <a href="trait.RetryInterceptor.html" title="trait opendal::layers::RetryInterceptor"><code>RetryInterceptor</code></a> to allow users to customize
+their own retry interceptor logic.</p>
+
+<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::time::Duration;
+
+<span class="kw">use </span>anyhow::Result;
+<span class="kw">use </span>opendal::layers::RetryInterceptor;
+<span class="kw">use </span>opendal::layers::RetryLayer;
+<span class="kw">use </span>opendal::services;
+<span class="kw">use </span>opendal::Error;
+<span class="kw">use </span>opendal::Operator;
+<span class="kw">use </span>opendal::Scheme;
+
+<span class="kw">struct </span>MyRetryInterceptor;
+
+<span class="kw">impl </span>RetryInterceptor <span class="kw">for </span>MyRetryInterceptor {
+ <span class="kw">fn </span>intercept(<span class="kw-2">&</span><span class="self">self</span>, err: <span class="kw-2">&</span>Error, dur: Duration, ctx: <span class="kw-2">&</span>[(<span class="kw-2">&</span>str, <span class="kw-2">&</span>str)]) {
+ <span class="comment">// do something
+ </span>}
+}
+
+<span class="kw">let _ </span>= Operator::new(services::Memory::default())
+ .expect(<span class="string">"must init"</span>)
+ .layer(RetryLayer::new().with_notify(MyRetryInterceptor))
+ .finish();</code></pre></div>
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-RetryLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#122-214">source</a><a href="#impl-RetryLayer" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.RetryLayer.html" title= [...]
<h5 id="examples-1"><a href="#examples-1">Examples</a></h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>anyhow::Result;
<span class="kw">use </span>opendal::layers::RetryLayer;
@@ -26,34 +52,62 @@ returns true. If operation still failed, this layer will set error to
<span class="kw">let _ </span>= Operator::new(services::Memory::default())
.expect(<span class="string">"must init"</span>)
.layer(RetryLayer::new());</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_jitter" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#94-97">source</a><h4 class="code-header">pub fn <a href="#method.with_jitter" class="fn">with_jitter</a>(self) -> Self</h4></section></summary><div class="docblock"><p>Set jitter of current backoff.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_notify" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#167-172">source</a><h4 class="code-header">pub fn <a href="#method.with_notify" class="fn">with_notify</a><I: <a class="trait" href="trait.RetryInterceptor.html" title="trait opendal::layers::RetryInterceptor">RetryInterceptor</a>>(self, notify: I) -> <a class="struct" href="struct.RetryLayer [...]
+
+<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::time::Duration;
+
+<span class="kw">use </span>anyhow::Result;
+<span class="kw">use </span>opendal::layers::RetryInterceptor;
+<span class="kw">use </span>opendal::layers::RetryLayer;
+<span class="kw">use </span>opendal::services;
+<span class="kw">use </span>opendal::Error;
+<span class="kw">use </span>opendal::Operator;
+<span class="kw">use </span>opendal::Scheme;
+
+<span class="kw">struct </span>MyRetryInterceptor;
+
+<span class="kw">impl </span>RetryInterceptor <span class="kw">for </span>MyRetryInterceptor {
+ <span class="kw">fn </span>intercept(<span class="kw-2">&</span><span class="self">self</span>, err: <span class="kw-2">&</span>Error, dur: Duration, ctx: <span class="kw-2">&</span>[(<span class="kw-2">&</span>str, <span class="kw-2">&</span>str)]) {
+ <span class="comment">// do something
+ </span>}
+}
+
+<span class="kw">let _ </span>= Operator::new(services::Memory::default())
+ .expect(<span class="string">"must init"</span>)
+ .layer(RetryLayer::new().with_notify(MyRetryInterceptor))
+ .finish();</code></pre></div>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_jitter" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#178-181">source</a><h4 class="code-header">pub fn <a href="#method.with_jitter" class="fn">with_jitter</a>(self) -> Self</h4></section></summary><div class="docblock"><p>Set jitter of current backoff.</p>
<p>If jitter is enabled, ExponentialBackoff will add a random jitter in `[0, min_delay)
to current delay.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_factor" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#104-107">source</a><h4 class="code-header">pub fn <a href="#method.with_factor" class="fn">with_factor</a>(self, factor: <a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.f32.html">f32</a>) -> Self</h4></section></summary><div class="docblock"><p>Set factor of current backoff.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_factor" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#188-191">source</a><h4 class="code-header">pub fn <a href="#method.with_factor" class="fn">with_factor</a>(self, factor: <a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.f32.html">f32</a>) -> Self</h4></section></summary><div class="docblock"><p>Set factor of current backoff.</p>
<h5 id="panics"><a href="#panics">Panics</a></h5>
<p>This function will panic if input factor smaller than <code>1.0</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_min_delay" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#110-113">source</a><h4 class="code-header">pub fn <a href="#method.with_min_delay" class="fn">with_min_delay</a>(self, min_delay: <a class="struct" href="https://doc.rust-lang.org/1.71.0/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>) -> Self</h4></section></sum [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_max_delay" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#118-121">source</a><h4 class="code-header">pub fn <a href="#method.with_max_delay" class="fn">with_max_delay</a>(self, max_delay: <a class="struct" href="https://doc.rust-lang.org/1.71.0/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>) -> Self</h4></section></sum [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_min_delay" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#194-197">source</a><h4 class="code-header">pub fn <a href="#method.with_min_delay" class="fn">with_min_delay</a>(self, min_delay: <a class="struct" href="https://doc.rust-lang.org/1.71.0/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>) -> Self</h4></section></sum [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_max_delay" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#202-205">source</a><h4 class="code-header">pub fn <a href="#method.with_max_delay" class="fn">with_max_delay</a>(self, max_delay: <a class="struct" href="https://doc.rust-lang.org/1.71.0/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>) -> Self</h4></section></sum [...]
<p>Delay will not increasing if current delay is larger than max_delay.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_max_times" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#126-129">source</a><h4 class="code-header">pub fn <a href="#method.with_max_times" class="fn">with_max_times</a>(self, max_times: <a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.usize.html">usize</a>) -> Self</h4></section></summary><div class="docblock"><p>Set max_time [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_max_times" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#210-213">source</a><h4 class="code-header">pub fn <a href="#method.with_max_times" class="fn">with_max_times</a>(self, max_times: <a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.usize.html">usize</a>) -> Self</h4></section></summary><div class="docblock"><p>Set max_time [...]
<p>Backoff will return <code>None</code> if max times is reaching.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-RetryLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#68">source</a><a href="#impl-Clone-for-RetryLayer" class="anchor">§</a><h3 class="code-header [...]
- T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
- T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.0/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
- T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.0/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
-</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-RetryLayer" class="impl"><a href="#impl-FutureExt-for-RetryLayer" class="anchor">§</a><h3 class="code-header">impl<T> FutureExt for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.with_context" class="method trait-impl"><a href="#method.with_context" class="anchor">§</a><h4 class="code-header"> [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-RetryLayer%3CI%3E" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#104-111">source</a><a href="#impl-Clone-for-RetryLayer%3CI%3E" class="anchor">§</a><h3 [...]
+ I: <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,</span></h3></section><section id="impl-Send-for-RetryLayer%3CI%3E" class="impl"><a href="#impl-Send-for-RetryLayer%3CI%3E" class="anchor">§</a><h3 class="code-header">impl<I> <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> [...]
+ I: <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a>,</span></h3></section><section id="impl-Sync-for-RetryLayer%3CI%3E" class="impl"><a href="#impl-Sync-for-RetryLayer%3CI%3E" class="anchor">§</a><h3 class="code-header">impl<I> <a class="trait" href="https://doc.rust-lang.or [...]
+ I: <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a>,</span></h3></section><section id="impl-Unpin-for-RetryLayer%3CI%3E" class="impl"><a href="#impl-Unpin-for-RetryLayer%3CI%3E" class="anchor">§</a><h3 class="code-header">impl<I> <a class="trait" href="https://doc.rust-lang. [...]
+ I: <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,</span></h3></section></div><h2 id="blanket-implementations" class="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor">§</a></h2><div id="blanket-implementations-list"><details class="toggle implementors-toggle"><summary><section id="impl-Any-for-RetryLayer%3CI%3E [...]
+ T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
+ T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.0/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
+ T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.0/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
+</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-RetryLayer%3CI%3E" class="impl"><a href="#impl-FutureExt-for-RetryLayer%3CI%3E" class="anchor">§</a><h3 class="code-header">impl<T> FutureExt for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.with_context" class="method trait-impl"><a href="#method.with_context" class="anchor">§</a><h4 class= [...]
wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_context" class="method trait-impl"><a href="#method.with_current_context" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_current_context</a>(self) -> WithContext<Self></h4></section></summary><div class='docblock'>Attaches the current <a href="crate::Context"><code>Context</code></a> to this type, returning a <code>WithContext</code>
-wrapper. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Instrument-for-RetryLayer" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#276">source</a><a href="#impl-Instrument-for-RetryLayer" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html" title="trait tra [...]
+wrapper. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Instrument-for-RetryLayer%3CI%3E" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#276">source</a><a href="#impl-Instrument-for-RetryLayer%3CI%3E" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html" ti [...]
<code>Instrumented</code> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html#method.instrument">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.in_current_span" class="method trait-impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#121">source</a><a href="#method.in_current_span" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc [...]
-<code>Instrumented</code> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html#method.in_current_span">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-RetryLayer" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.0/src/core/convert/mod.rs.html#707">source</a><a href="#impl-Into%3CU%3E-for-RetryLayer" class="anchor">§</a><h3 class="code-head [...]
+<code>Instrumented</code> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html#method.in_current_span">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-RetryLayer%3CI%3E" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.0/src/core/convert/mod.rs.html#707">source</a><a href="#impl-Into%3CU%3E-for-RetryLayer%3CI%3E" class="anchor">§</a><h3 cl [...]
U: <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/convert/trait.From.html" title="trait core::convert::From">From</a><T>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.0/src/core/convert/mod.rs.html#716">source</a><a href="#method.into" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
<p>That is, this conversion is whatever the implementation of
<code><a href="https://doc.rust-lang.org/1.71.0/core/convert/trait.From.html" title="trait core::convert::From">From</a><T> for U</code> chooses to do.</p>
-</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Pointable-for-RetryLayer" class="impl"><a href="#impl-Pointable-for-RetryLayer" class="anchor">§</a><h3 class="code-header">impl<T> Pointable for T</h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedconstant.ALIGN" class="associatedconstant trait-impl"><a href="#associatedconstant.ALIGN" class="anchor">§</a><h4 class="code- [...]
- T: <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Owned" class="associatedtype trait-impl"><a href="#associatedtype.Owned" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.71.0/alloc/borrow/trait.ToOwned.html#associatedtype.Owned" class="associated [...]
- U: <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><T>,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.71.0/core/convert/trait.TryFrom.html#associatedtype.Error" class=" [...]
- U: <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><T>,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.71.0/core/convert/trait.TryInto.html#associatedtype.E [...]
- V: MultiLane<T>,</span></h3></section></summary><div class="impl-items"><section id="method.vzip" class="method trait-impl"><a href="#method.vzip" class="anchor">§</a><h4 class="code-header">fn <a class="fn">vzip</a>(self) -> V</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-WithSubscriber-for-RetryLayer" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#334">sour [...]
+</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Pointable-for-RetryLayer%3CI%3E" class="impl"><a href="#impl-Pointable-for-RetryLayer%3CI%3E" class="anchor">§</a><h3 class="code-header">impl<T> Pointable for T</h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedconstant.ALIGN" class="associatedconstant trait-impl"><a href="#associatedconstant.ALIGN" class="anchor">§</a><h [...]
+ T: <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Owned" class="associatedtype trait-impl"><a href="#associatedtype.Owned" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.71.0/alloc/borrow/trait.ToOwned.html#associatedtype.Owned" class="associated [...]
+ U: <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><T>,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.71.0/core/convert/trait.TryFrom.html#associatedtype.Error" class=" [...]
+ U: <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><T>,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.71.0/core/convert/trait.TryInto.html#associatedtype.E [...]
+ V: MultiLane<T>,</span></h3></section></summary><div class="impl-items"><section id="method.vzip" class="method trait-impl"><a href="#method.vzip" class="anchor">§</a><h4 class="code-header">fn <a class="fn">vzip</a>(self) -> V</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-WithSubscriber-for-RetryLayer%3CI%3E" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#33 [...]
S: <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><Dispatch>,</span></h4></section></summary><div class='docblock'>Attaches the provided <a href="super::Subscriber"><code>Subscriber</code></a> to this type, returning a
<a href="https://docs.rs/tracing/0.1.37/tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_subscriber" class="method trait-impl"><a class="srclink rightside" href="https://docs.rs/tracing [...]
<a href="https://docs.rs/tracing/0.1.37/tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber">Read more</a></div></details></div></details></div></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/layers/trait.RetryInterceptor.html b/docs/rust/opendal/layers/trait.RetryInterceptor.html
new file mode 100644
index 000000000..e7221c2fc
--- /dev/null
+++ b/docs/rust/opendal/layers/trait.RetryInterceptor.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="RetryInterceptor is used to intercept while retry happened."><title>RetryInterceptor in opendal::layers - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type=" [...]
+ // Required method
+ fn <a href="#tymethod.intercept" class="fn">intercept</a>(&self, err: &<a class="struct" href="../struct.Error.html" title="struct opendal::Error">Error</a>, dur: <a class="struct" href="https://doc.rust-lang.org/1.71.0/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>, ctx: &[(&<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.str.html">str</a>, &<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std [...]
+}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>RetryInterceptor is used to intercept while retry happened.</p>
+</div></details><h2 id="required-methods" class="small-section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="tymethod.intercept" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#246">source</a><h4 class="code-header">fn <a href="#tymethod.intercept" class="fn">intercept</a>(&self, err: &<a class="struct" href="../struct.Error [...]
+<h5 id="timing"><a href="#timing">Timing</a></h5>
+<p>just before the retry sleep.</p>
+<h5 id="inputs"><a href="#inputs">Inputs</a></h5>
+<ul>
+<li>err: The error that caused the current retry.</li>
+<li>dur: The duration that will sleep before next retry.</li>
+<li>ctx: The context (<code>name</code>, <code>value</code>) of current operation, like <code>operation</code> and <code>path</code>.</li>
+</ul>
+<h5 id="notes"><a href="#notes">Notes</a></h5>
+<p>The intercept must be quick and non-blocking. No heavy IO is
+allowed. Otherwise the retry will be blocked.</p>
+</div></details></div><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"></div><script src="../../implementors/opendal/layers/retry/trait.RetryInterceptor.js" async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/trait.Layer.html b/docs/rust/opendal/raw/trait.Layer.html
index 3ac2d63b0..0c26db676 100644
--- a/docs/rust/opendal/raw/trait.Layer.html
+++ b/docs/rust/opendal/raw/trait.Layer.html
@@ -91,4 +91,4 @@ requires <code>Send</code> and <code>Sync</code>.</p>
}</code></pre></div>
</div></details><h2 id="required-associated-types" class="small-section-header">Required Associated Types<a href="#required-associated-types" class="anchor">§</a></h2><div class="methods"><details class="toggle" open><summary><section id="associatedtype.LayeredAccessor" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#124">source</a><h4 class="code-header">type <a href="#associatedtype.LayeredAccessor" class="associatedtype">LayeredAccessor</a>: <a cl [...]
</div></details></div><h2 id="required-methods" class="small-section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="tymethod.layer" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#127">source</a><h4 class="code-header">fn <a href="#tymethod.layer" class="fn">layer</a>(&self, inner: A) -> Self::<a class="associatedtype" href="trai [...]
-</div></details></div><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"><details class="toggle implementors-toggle"><summary><section id="impl-Layer%3CA%3E-for-ChaosLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/chaos.rs.html#82-92">source</a><a href="#impl-Layer%3CA%3E-for-ChaosLayer" class="anchor">§</a><h3 class="code-header">impl<A: <a class="trait" href="trai [...]
\ No newline at end of file
+</div></details></div><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"><details class="toggle implementors-toggle"><summary><section id="impl-Layer%3CA%3E-for-ChaosLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/chaos.rs.html#82-92">source</a><a href="#impl-Layer%3CA%3E-for-ChaosLayer" class="anchor">§</a><h3 class="code-header">impl<A: <a class="trait" href="trai [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/services/struct.S3.html b/docs/rust/opendal/services/struct.S3.html
index 35cbb0cab..8bc4764cd 100644
--- a/docs/rust/opendal/services/struct.S3.html
+++ b/docs/rust/opendal/services/struct.S3.html
@@ -330,7 +330,7 @@ builder.bucket(<span class="string">"<bucket_name>"</span>);</co
<li><code>region</code>: When you create a new bucket, the data location is set to Automatic by default. So please use <code>auto</code> for region.</li>
<li><code>batch_max_operations</code>: R2’s delete objects will return <code>Internal Error</code> if the batch is larger than <code>700</code>. Please set this value <code><= 700</code> to make sure batch delete work as expected.</li>
</ul>
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-S3Builder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/s3/backend.rs.html#114-632">source</a><a href="#impl-S3Builder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.S3.html" title="st [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-S3Builder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/s3/backend.rs.html#114-634">source</a><a href="#impl-S3Builder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.S3.html" title="st [...]
<p>All operations will happen under this root.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.bucket" class="method"><a class="srclink rightside" href="../../src/opendal/services/s3/backend.rs.html#129-133">source</a><h4 class="code-header">pub fn <a href="#method.bucket" class="fn">bucket</a>(&mut self, bucket: &<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.str.html">str</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.re [...]
</div></details><details class="toggle method-toggle" open><summary><section id="method.endpoint" class="method"><a class="srclink rightside" href="../../src/opendal/services/s3/backend.rs.html#146-153">source</a><h4 class="code-header">pub fn <a href="#method.endpoint" class="fn">endpoint</a>(&mut self, endpoint: &<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.str.html">str</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/prim [...]
@@ -471,7 +471,7 @@ during minor updates.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.write_min_size" class="method"><a class="srclink rightside" href="../../src/opendal/services/s3/backend.rs.html#511-515">source</a><h4 class="code-header">pub fn <a href="#method.write_min_size" class="fn">write_min_size</a>(&mut self, write_min_size: <a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.usize.html">usize</a>) -> <a class="primitive" href="https://doc.rust-l [...]
Reference: <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/qfacts.html">Amazon S3 multipart upload limits</a></p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.batch_max_operations" class="method"><a class="srclink rightside" href="../../src/opendal/services/s3/backend.rs.html#517-521">source</a><h4 class="code-header">pub fn <a href="#method.batch_max_operations" class="fn">batch_max_operations</a>(&mut self, batch_max_operations: <a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.usize.html">usize</a>) -> <a class="primitive" [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.detect_region" class="method"><a class="srclink rightside" href="../../src/opendal/services/s3/backend.rs.html#559-631">source</a><h4 class="code-header">pub async fn <a href="#method.detect_region" class="fn">detect_region</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.detect_region" class="method"><a class="srclink rightside" href="../../src/opendal/services/s3/backend.rs.html#561-633">source</a><h4 class="code-header">pub async fn <a href="#method.detect_region" class="fn">detect_region</a>(
&self,
endpoint: &<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.str.html">str</a>,
bucket: &<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.str.html">str</a>
@@ -502,12 +502,14 @@ Reference: <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/qfacts
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>opendal::services::S3;
<span class="kw">let </span>builder = S3::default();
-<span class="kw">let </span>region: <span class="prelude-ty">Option</span><String> = builder.detect_region(<span class="string">"https://s3.amazonaws.com"</span>, <span class="string">"example"</span>).<span class="kw">await</span>;</code></pre></div>
+<span class="kw">let </span>region: <span class="prelude-ty">Option</span><String> = builder
+ .detect_region(<span class="string">"https://s3.amazonaws.com"</span>, <span class="string">"example"</span>)
+ .<span class="kw">await</span>;</code></pre></div>
<h5 id="reference"><a href="#reference">Reference</a></h5>
<ul>
<li><a href="https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/API/API_HeadBucket.html">Amazon S3 HeadBucket API</a></li>
</ul>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-S3Builder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/s3/backend.rs.html#634-846">source</a><a href="#impl-Builder-for-S3Builder" class="anchor">§</a><h3 clas [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-S3Builder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/s3/backend.rs.html#636-848">source</a><a href="#impl-Builder-for-S3Builder" class="anchor">§</a><h3 clas [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.0/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.0/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
diff --git a/docs/rust/opendal/struct.BlockingOperator.html b/docs/rust/opendal/struct.BlockingOperator.html
index 3d66dde15..7860219c8 100644
--- a/docs/rust/opendal/struct.BlockingOperator.html
+++ b/docs/rust/opendal/struct.BlockingOperator.html
@@ -28,7 +28,7 @@
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>opendal::BlockingOperator;
<span class="kw">let </span>info = op.info();</code></pre></div>
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingOperator-1" class="impl"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#116-917">source</a><a href="#impl-BlockingOperator-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.BlockingOperator.html" title="struct opendal::BlockingOperator">BlockingOperator</a></h3></section></summary><div class="docbl [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingOperator-1" class="impl"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#116-918">source</a><a href="#impl-BlockingOperator-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.BlockingOperator.html" title="struct opendal::BlockingOperator">BlockingOperator</a></h3></section></summary><div class="docbl [...]
<h5 id="notes"><a href="#notes">Notes</a></h5>
<p>Use <code>stat</code> if you:</p>
<ul>
@@ -202,7 +202,7 @@ w.close()<span class="question-mark">?</span>;</code></pre></div>
</ul>
<h5 id="examples-14"><a href="#examples-14">Examples</a></h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code>op.delete(<span class="string">"path/to/file"</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.delete_with" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#700-713">source</a><h4 class="code-header">pub fn <a href="#method.delete_with" class="fn">delete_with</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.str.html">str</a>) -> <a class="struct" href="operator_functions/struct.Functio [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.delete_with" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#701-714">source</a><h4 class="code-header">pub fn <a href="#method.delete_with" class="fn">delete_with</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.str.html">str</a>) -> <a class="struct" href="operator_functions/struct.Functio [...]
<h5 id="notes-9"><a href="#notes-9">Notes</a></h5>
<ul>
<li>Delete not existing error won’t return errors.</li>
@@ -210,24 +210,25 @@ w.close()<span class="question-mark">?</span>;</code></pre></div>
<h5 id="examples-15"><a href="#examples-15">Examples</a></h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let _ </span>= op
.delete_with(<span class="string">"path/to/file"</span>)
- .version(<span class="string">"example_version"</span>).call()<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.remove_via" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#735-740">source</a><h4 class="code-header">pub fn <a href="#method.remove_via" class="fn">remove_via</a>(&self, input: impl <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator">It [...]
+ .version(<span class="string">"example_version"</span>)
+ .call()<span class="question-mark">?</span>;</code></pre></div>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.remove_via" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#736-741">source</a><h4 class="code-header">pub fn <a href="#method.remove_via" class="fn">remove_via</a>(&self, input: impl <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator">It [...]
<p>remove_via will remove files via the given vector iterators.</p>
<h5 id="notes-10"><a href="#notes-10">Notes</a></h5>
<p>We don’t support batch delete now.</p>
<h5 id="examples-16"><a href="#examples-16">Examples</a></h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>stream = <span class="macro">vec!</span>[<span class="string">"abc"</span>.to_string(), <span class="string">"def"</span>.to_string()].into_iter();
op.remove_via(stream)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.remove" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#757-761">source</a><h4 class="code-header">pub fn <a href="#method.remove" class="fn">remove</a>(&self, paths: <a class="struct" href="https://doc.rust-lang.org/1.71.0/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><<a class="struct" href="https://doc.rust-lang.org [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.remove" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#758-762">source</a><h4 class="code-header">pub fn <a href="#method.remove" class="fn">remove</a>(&self, paths: <a class="struct" href="https://doc.rust-lang.org/1.71.0/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><<a class="struct" href="https://doc.rust-lang.org [...]
<p>We don’t support batch delete now.</p>
<h5 id="examples-17"><a href="#examples-17">Examples</a></h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code>op.remove(<span class="macro">vec!</span>[<span class="string">"abc"</span>.to_string(), <span class="string">"def"</span>.to_string()])<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.remove_all" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#780-809">source</a><h4 class="code-header">pub fn <a href="#method.remove_all" class="fn">remove_all</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal: [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.remove_all" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#781-810">source</a><h4 class="code-header">pub fn <a href="#method.remove_all" class="fn">remove_all</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal: [...]
<h5 id="notes-12"><a href="#notes-12">Notes</a></h5>
<p>We don’t support batch delete now.</p>
<h5 id="examples-18"><a href="#examples-18">Examples</a></h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code>op.remove_all(<span class="string">"path/to/dir"</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.list" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#844-859">source</a><h4 class="code-header">pub fn <a href="#method.list" class="fn">list</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.list" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#845-860">source</a><h4 class="code-header">pub fn <a href="#method.list" class="fn">list</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a [...]
<p>This function will create a new handle to list entries.</p>
<p>An error will be returned if path doesn’t end with <code>/</code>.</p>
<h5 id="examples-19"><a href="#examples-19">Examples</a></h5>
@@ -247,7 +248,7 @@ op.remove_via(stream)<span class="question-mark">?</span>;</code></pre></div>
EntryMode::Unknown => <span class="kw">continue</span>,
}
}</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.scan" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#899-916">source</a><h4 class="code-header">pub fn <a href="#method.scan" class="fn">scan</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.scan" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#900-917">source</a><h4 class="code-header">pub fn <a href="#method.scan" class="fn">scan</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a [...]
<p>Also, this function can be used to list a prefix.</p>
<p>An error will be returned if given path doesn’t end with <code>/</code>.</p>
<h5 id="notes-13"><a href="#notes-13">Notes</a></h5>
diff --git a/docs/rust/opendal/struct.BlockingWriter.html b/docs/rust/opendal/struct.BlockingWriter.html
index 521c967a8..61abf50fa 100644
--- a/docs/rust/opendal/struct.BlockingWriter.html
+++ b/docs/rust/opendal/struct.BlockingWriter.html
@@ -1,8 +1,8 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="BlockingWriter is designed to write data into given path in an blocking manner."><title>BlockingWriter in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="BlockingWriter is designed to write data into given path in an blocking manner."><title>BlockingWriter in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" [...]
manner.</p>
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingWriter" class="impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#382-405">source</a><a href="#impl-BlockingWriter" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.BlockingWriter.htm [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.close" class="method"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#402-404">source</a><h4 class="code-header">pub fn <a href="#method.close" class="fn">close</a>(&mut self) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.unit.html">()</a>></h4></section></ [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Write-for-BlockingWriter" class="impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#407-419">source</a><a href="#impl-Write-for-BlockingWriter" class="anchor">§</a><h3 class="c [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingWriter" class="impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#379-402">source</a><a href="#impl-BlockingWriter" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.BlockingWriter.htm [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.close" class="method"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#399-401">source</a><h4 class="code-header">pub fn <a href="#method.close" class="fn">close</a>(&mut self) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.unit.html">()</a>></h4></section></ [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Write-for-BlockingWriter" class="impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#404-416">source</a><a href="#impl-Write-for-BlockingWriter" class="anchor">§</a><h3 class="c [...]
contents reach their destination. <a href="https://doc.rust-lang.org/1.71.0/std/io/trait.Write.html#tymethod.flush">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_vectored" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.36.0">1.36.0</span> · <a class="srclink" href="https://doc.rust-lang.org/1.71.0/src/std/io/mod.rs.html#1494">source</a></span><a href="#method.write_vecto [...]
implementation. <a href="https://doc.rust-lang.org/1.71.0/std/io/trait.Write.html#method.is_write_vectored">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_all" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/1.71.0/src/std/io/mod.rs.html#1571">source</a></span><a href="#method.write_all" class="anchor"> [...]
encountered. <a href="https://doc.rust-lang.org/1.71.0/std/io/trait.Write.html#method.write_fmt">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.by_ref" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/1.71.0/src/std/io/mod.rs.html#1748-1750">source</a></span><a href="#method.by_ref" class="anchor">§</a><h4 cla [...]
diff --git a/docs/rust/opendal/struct.Writer.html b/docs/rust/opendal/struct.Writer.html
index 6c87d3dc8..cd491a675 100644
--- a/docs/rust/opendal/struct.Writer.html
+++ b/docs/rust/opendal/struct.Writer.html
@@ -15,7 +15,7 @@ be written in one request.</p>
<p>Some services also supports <code>unsized</code> writer. They MAY buffer part of the data
and flush them into storage at needs. And finally, the file will be available
after <code>close</code> has been called.</p>
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Writer" class="impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#66-225">source</a><a href="#impl-Writer" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Writer.html" title="struct opendal: [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Writer" class="impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#66-222">source</a><a href="#impl-Writer" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Writer.html" title="struct opendal: [...]
</div></details><details class="toggle method-toggle" open><summary><section id="method.sink" class="method"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#126-142">source</a><h4 class="code-header">pub async fn <a href="#method.sink" class="fn">sink</a><S, T>(&mut self, size: <a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.u64.html">u64</a>, sink_from: S) -> <a class="type" href="type.Result.html" title="type opendal::Result [...]
S: Stream<Item = <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><T>> + <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> + <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/marker/trait.Unpin.html" title="trait core::marker::Un [...]
T: <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><Bytes>,</span></h4></section></summary><div class="docblock"><p>Sink into writer.</p>
@@ -45,7 +45,7 @@ directly without extra in-memory buffer.</p>
w.close().<span class="kw">await</span><span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.copy" class="method"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#177-190">source</a><h4 class="code-header">pub async fn <a href="#method.copy" class="fn">copy</a><R>(&mut self, size: <a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.u64.html">u64</a>, read_from: R) -> <a class="type" href="type.Result.html" title="type opendal::Result">R [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.copy" class="method"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#174-187">source</a><h4 class="code-header">pub async fn <a href="#method.copy" class="fn">copy</a><R>(&mut self, size: <a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.u64.html">u64</a>, read_from: R) -> <a class="type" href="type.Result.html" title="type opendal::Result">R [...]
R: AsyncRead + <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> + <a class="trait" href="https://doc.rust-lang.org/1.71.0/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> + 'static,</span></h4></section></summary><div class="docblock"><p>Copy into writer.</p>
<p>copy will read data from given reader and write them into writer
directly with only one constant in-memory buffer.</p>
@@ -58,46 +58,43 @@ directly with only one constant in-memory buffer.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::io::Result;
<span class="kw">use </span>bytes::Bytes;
+<span class="kw">use </span>futures::io::Cursor;
<span class="kw">use </span>futures::stream;
<span class="kw">use </span>futures::StreamExt;
<span class="kw">use </span>opendal::Operator;
-<span class="kw">use </span>futures::io::Cursor;
<span class="attr">#[tokio::main]
</span><span class="kw">async fn </span>copy_example(op: Operator) -> <span class="prelude-ty">Result</span><()> {
- <span class="kw">let </span><span class="kw-2">mut </span>w = op
- .writer_with(<span class="string">"path/to/file"</span>)
- .content_length(<span class="number">4096</span>)
- .<span class="kw">await</span><span class="question-mark">?</span>;
- <span class="kw">let </span>reader = Cursor::new(<span class="macro">vec!</span>[<span class="number">0</span>;<span class="number">4096</span>]);
+ <span class="kw">let </span><span class="kw-2">mut </span>w = op.writer_with(<span class="string">"path/to/file"</span>).content_length(<span class="number">4096</span>).<span class="kw">await</span><span class="question-mark">?</span>;
+ <span class="kw">let </span>reader = Cursor::new(<span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">4096</span>]);
w.copy(<span class="number">4096</span>, reader).<span class="kw">await</span><span class="question-mark">?</span>;
w.close().<span class="kw">await</span><span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.abort" class="method"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#198-207">source</a><h4 class="code-header">pub async fn <a href="#method.abort" class="fn">abort</a>(&mut self) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.unit.html">()</a>></h4></sect [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.abort" class="method"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#195-204">source</a><h4 class="code-header">pub async fn <a href="#method.abort" class="fn">abort</a>(&mut self) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.unit.html">()</a>></h4></sect [...]
<h6 id="notes-4"><a href="#notes-4">Notes</a></h6>
<p>Abort should only be called when the writer is not closed or
aborted, otherwise an unexpected error could be returned.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.close" class="method"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#215-224">source</a><h4 class="code-header">pub async fn <a href="#method.close" class="fn">close</a>(&mut self) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.unit.html">()</a>></h4></sect [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.close" class="method"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#212-221">source</a><h4 class="code-header">pub async fn <a href="#method.close" class="fn">close</a>(&mut self) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.unit.html">()</a>></h4></sect [...]
<h6 id="notes-5"><a href="#notes-5">Notes</a></h6>
<p>Close should only be called when the writer is not closed or
aborted, otherwise an unexpected error could be returned.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-AsyncWrite-for-Writer" class="impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#243-308">source</a><a href="#impl-AsyncWrite-for-Writer" class="anchor">§</a><h3 class="code-he [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.poll_write" class="method trait-impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#244-275">source</a><a href="#method.poll_write" class="anchor">§</a><h4 class="code-header">fn <a class="fn">poll_write</a>(
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-AsyncWrite-for-Writer" class="impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#240-305">source</a><a href="#impl-AsyncWrite-for-Writer" class="anchor">§</a><h3 class="code-he [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.poll_write" class="method trait-impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#241-272">source</a><a href="#method.poll_write" class="anchor">§</a><h4 class="code-header">fn <a class="fn">poll_write</a>(
self: <a class="struct" href="https://doc.rust-lang.org/1.71.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.reference.html">&mut Self</a>>,
cx: &mut <a class="struct" href="https://doc.rust-lang.org/1.71.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a><'_>,
buf: &[<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.u8.html">u8</a>]
-) -> <a class="enum" href="https://doc.rust-lang.org/1.71.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a><<a class="type" href="https://doc.rust-lang.org/1.71.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.usize.html">usize</a>>></h4></section></summary><div class='docblock'>Attempt to write bytes from <code>buf</code> into the object. <a [...]
+) -> <a class="enum" href="https://doc.rust-lang.org/1.71.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a><<a class="type" href="https://doc.rust-lang.org/1.71.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.usize.html">usize</a>>></h4></section></summary><div class='docblock'>Attempt to write bytes from <code>buf</code> into the object. <a [...]
self: <a class="struct" href="https://doc.rust-lang.org/1.71.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.reference.html">&mut Self</a>>,
cx: &mut <a class="struct" href="https://doc.rust-lang.org/1.71.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a><'_>,
bufs: &[<a class="struct" href="https://doc.rust-lang.org/1.71.0/std/io/struct.IoSlice.html" title="struct std::io::IoSlice">IoSlice</a><'_>]
) -> <a class="enum" href="https://doc.rust-lang.org/1.71.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a><<a class="enum" href="https://doc.rust-lang.org/1.71.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.usize.html">usize</a>, <a class="struct" href="https://doc.rust-lang.org/1.71.0/std/io/error/struct.Error.html" title="struct std::io::error::E [...]
-IO operations. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-AsyncWrite-for-Writer-1" class="impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#310-374">source</a><a href="#impl-AsyncWrite-for-Writer-1" class="anchor">§</a><h3 class="code-header">impl AsyncWrite for <a class="struct" href="struct.Writer.html" title="struct opendal::Writer">Writer</a></h3></section></summary><div class= [...]
+IO operations. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-AsyncWrite-for-Writer-1" class="impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#307-371">source</a><a href="#impl-AsyncWrite-for-Writer-1" class="anchor">§</a><h3 class="code-header">impl AsyncWrite for <a class="struct" href="struct.Writer.html" title="struct opendal::Writer">Writer</a></h3></section></summary><div class= [...]
self: <a class="struct" href="https://doc.rust-lang.org/1.71.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.reference.html">&mut Self</a>>,
cx: &mut <a class="struct" href="https://doc.rust-lang.org/1.71.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a><'_>,
buf: &[<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.u8.html">u8</a>]
-) -> <a class="enum" href="https://doc.rust-lang.org/1.71.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a><<a class="type" href="https://doc.rust-lang.org/1.71.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.usize.html">usize</a>>></h4></section></summary><div class='docblock'>Attempt to write bytes from <code>buf</code> into the object. <a [...]
-their destination. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.poll_shutdown" class="method trait-impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#348-373">source</a><a href="#method.poll_shutdown" class="anchor">§</a><h4 class="code-header">fn <a class="fn">poll_shutdown</a>(self: <a class="struct" href="https://doc.rust-lang.org/1.71.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>& [...]
+) -> <a class="enum" href="https://doc.rust-lang.org/1.71.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a><<a class="type" href="https://doc.rust-lang.org/1.71.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.usize.html">usize</a>>></h4></section></summary><div class='docblock'>Attempt to write bytes from <code>buf</code> into the object. <a [...]
+their destination. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.poll_shutdown" class="method trait-impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#345-370">source</a><a href="#method.poll_shutdown" class="anchor">§</a><h4 class="code-header">fn <a class="fn">poll_shutdown</a>(self: <a class="struct" href="https://doc.rust-lang.org/1.71.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>& [...]
the I/O connection has completely shut down. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.poll_write_vectored-1" class="method trait-impl"><a href="#method.poll_write_vectored-1" class="anchor">§</a><h4 class="code-header">fn <a class="fn">poll_write_vectored</a>(
self: <a class="struct" href="https://doc.rust-lang.org/1.71.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><<a class="primitive" href="https://doc.rust-lang.org/1.71.0/std/primitive.reference.html">&mut Self</a>>,
cx: &mut <a class="struct" href="https://doc.rust-lang.org/1.71.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a><'_>,
diff --git a/docs/rust/opendal/trait.Builder.html b/docs/rust/opendal/trait.Builder.html
index 02ba6e4df..94d8dcea3 100644
--- a/docs/rust/opendal/trait.Builder.html
+++ b/docs/rust/opendal/trait.Builder.html
@@ -22,4 +22,4 @@ We also promise that every public API will provide detailed documentation.</p>
</div></details></div><h2 id="required-methods" class="small-section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="tymethod.from_map" class="method"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#45">source</a><h4 class="code-header">fn <a href="#tymethod.from_map" class="fn">from_map</a>(map: <a class="struct" href="https://doc.rust-lang.org/1.71. [...]
</div></details><details class="toggle method-toggle" open><summary><section id="tymethod.build" class="method"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#48">source</a><h4 class="code-header">fn <a href="#tymethod.build" class="fn">build</a>(&mut self) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><Self::<a class="associatedtype" href="trait.Builder.html#associatedtype.Accessor" title="type opendal::Builder::Acce [...]
</div></details></div><h2 id="foreign-impls" class="small-section-header">Implementations on Foreign Types<a href="#foreign-impls" class="anchor">§</a></h2><details class="toggle implementors-toggle"><summary><section id="impl-Builder-for-()" class="impl"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#52-62">source</a><a href="#impl-Builder-for-()" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.Builder.html" title="trait opendal::Bu [...]
-</div><div class="impl-items"><section id="associatedconstant.SCHEME-1" class="associatedconstant trait-impl"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#53">source</a><a href="#associatedconstant.SCHEME-1" class="anchor">§</a><h4 class="code-header">const <a href="#associatedconstant.SCHEME" class="constant">SCHEME</a>: <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme">Scheme</a> = _</h4></section><section id="associatedtype.Accessor-1" cla [...]
\ No newline at end of file
+</div><div class="impl-items"><section id="associatedconstant.SCHEME-1" class="associatedconstant trait-impl"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#53">source</a><a href="#associatedconstant.SCHEME-1" class="anchor">§</a><h4 class="code-header">const <a href="#associatedconstant.SCHEME" class="constant">SCHEME</a>: <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme">Scheme</a> = _</h4></section><section id="associatedtype.Accessor-1" cla [...]
\ No newline at end of file
diff --git a/docs/rust/search-index.js b/docs/rust/search-index.js
index c6390036c..6da6dfa41 100644
--- a/docs/rust/search-index.js
+++ b/docs/rust/search-index.js
@@ -1,5 +1,5 @@
var searchIndex = JSON.parse('{\
-"opendal":{"doc":"OpenDAL is the Open Data Access Layer to <strong>freely</strong> access …","t":"QNDNNDDDDINNDNNNNNNNNNNNNNNNDEDENNNNNNNNNNNNNNNDNNDENNNNNNNDDDNNNNDNNGNNSENNNNNNNNNNNDLLLMLMMMLLMMMLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLMLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLL [...]
+"opendal":{"doc":"OpenDAL is the Open Data Access Layer to <strong>freely</strong> access …","t":"QNDNNDDDDINNDNNNNNNNNNNNNNNNDEDENNNNNNNNNNNNNNNDNNDENNNNNNNDDDNNNNDNNGNNSENNNNNNNNNNNDLLLMLMMMLLMMMLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLMLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLL [...]
}');
if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)};
if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex};
diff --git a/docs/rust/src/opendal/layers/mod.rs.html b/docs/rust/src/opendal/layers/mod.rs.html
index 5dfd1403b..5c9e4a28a 100644
--- a/docs/rust/src/opendal/layers/mod.rs.html
+++ b/docs/rust/src/opendal/layers/mod.rs.html
@@ -83,6 +83,7 @@
<a href="#83" id="83">83</a>
<a href="#84" id="84">84</a>
<a href="#85" id="85">85</a>
+<a href="#86" id="86">86</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -130,6 +131,7 @@
</span><span class="kw">pub use </span><span class="self">self</span>::prometheus::PrometheusLayer;
<span class="kw">mod </span>retry;
+<span class="kw">pub use </span><span class="self">self</span>::retry::RetryInterceptor;
<span class="kw">pub use </span><span class="self">self</span>::retry::RetryLayer;
<span class="attr">#[cfg(feature = <span class="string">"layers-tracing"</span>)]
diff --git a/docs/rust/src/opendal/layers/retry.rs.html b/docs/rust/src/opendal/layers/retry.rs.html
index d19bf3ff8..40f7922cb 100644
--- a/docs/rust/src/opendal/layers/retry.rs.html
+++ b/docs/rust/src/opendal/layers/retry.rs.html
@@ -1115,6 +1115,283 @@
<a href="#1115" id="1115">1115</a>
<a href="#1116" id="1116">1116</a>
<a href="#1117" id="1117">1117</a>
+<a href="#1118" id="1118">1118</a>
+<a href="#1119" id="1119">1119</a>
+<a href="#1120" id="1120">1120</a>
+<a href="#1121" id="1121">1121</a>
+<a href="#1122" id="1122">1122</a>
+<a href="#1123" id="1123">1123</a>
+<a href="#1124" id="1124">1124</a>
+<a href="#1125" id="1125">1125</a>
+<a href="#1126" id="1126">1126</a>
+<a href="#1127" id="1127">1127</a>
+<a href="#1128" id="1128">1128</a>
+<a href="#1129" id="1129">1129</a>
+<a href="#1130" id="1130">1130</a>
+<a href="#1131" id="1131">1131</a>
+<a href="#1132" id="1132">1132</a>
+<a href="#1133" id="1133">1133</a>
+<a href="#1134" id="1134">1134</a>
+<a href="#1135" id="1135">1135</a>
+<a href="#1136" id="1136">1136</a>
+<a href="#1137" id="1137">1137</a>
+<a href="#1138" id="1138">1138</a>
+<a href="#1139" id="1139">1139</a>
+<a href="#1140" id="1140">1140</a>
+<a href="#1141" id="1141">1141</a>
+<a href="#1142" id="1142">1142</a>
+<a href="#1143" id="1143">1143</a>
+<a href="#1144" id="1144">1144</a>
+<a href="#1145" id="1145">1145</a>
+<a href="#1146" id="1146">1146</a>
+<a href="#1147" id="1147">1147</a>
+<a href="#1148" id="1148">1148</a>
+<a href="#1149" id="1149">1149</a>
+<a href="#1150" id="1150">1150</a>
+<a href="#1151" id="1151">1151</a>
+<a href="#1152" id="1152">1152</a>
+<a href="#1153" id="1153">1153</a>
+<a href="#1154" id="1154">1154</a>
+<a href="#1155" id="1155">1155</a>
+<a href="#1156" id="1156">1156</a>
+<a href="#1157" id="1157">1157</a>
+<a href="#1158" id="1158">1158</a>
+<a href="#1159" id="1159">1159</a>
+<a href="#1160" id="1160">1160</a>
+<a href="#1161" id="1161">1161</a>
+<a href="#1162" id="1162">1162</a>
+<a href="#1163" id="1163">1163</a>
+<a href="#1164" id="1164">1164</a>
+<a href="#1165" id="1165">1165</a>
+<a href="#1166" id="1166">1166</a>
+<a href="#1167" id="1167">1167</a>
+<a href="#1168" id="1168">1168</a>
+<a href="#1169" id="1169">1169</a>
+<a href="#1170" id="1170">1170</a>
+<a href="#1171" id="1171">1171</a>
+<a href="#1172" id="1172">1172</a>
+<a href="#1173" id="1173">1173</a>
+<a href="#1174" id="1174">1174</a>
+<a href="#1175" id="1175">1175</a>
+<a href="#1176" id="1176">1176</a>
+<a href="#1177" id="1177">1177</a>
+<a href="#1178" id="1178">1178</a>
+<a href="#1179" id="1179">1179</a>
+<a href="#1180" id="1180">1180</a>
+<a href="#1181" id="1181">1181</a>
+<a href="#1182" id="1182">1182</a>
+<a href="#1183" id="1183">1183</a>
+<a href="#1184" id="1184">1184</a>
+<a href="#1185" id="1185">1185</a>
+<a href="#1186" id="1186">1186</a>
+<a href="#1187" id="1187">1187</a>
+<a href="#1188" id="1188">1188</a>
+<a href="#1189" id="1189">1189</a>
+<a href="#1190" id="1190">1190</a>
+<a href="#1191" id="1191">1191</a>
+<a href="#1192" id="1192">1192</a>
+<a href="#1193" id="1193">1193</a>
+<a href="#1194" id="1194">1194</a>
+<a href="#1195" id="1195">1195</a>
+<a href="#1196" id="1196">1196</a>
+<a href="#1197" id="1197">1197</a>
+<a href="#1198" id="1198">1198</a>
+<a href="#1199" id="1199">1199</a>
+<a href="#1200" id="1200">1200</a>
+<a href="#1201" id="1201">1201</a>
+<a href="#1202" id="1202">1202</a>
+<a href="#1203" id="1203">1203</a>
+<a href="#1204" id="1204">1204</a>
+<a href="#1205" id="1205">1205</a>
+<a href="#1206" id="1206">1206</a>
+<a href="#1207" id="1207">1207</a>
+<a href="#1208" id="1208">1208</a>
+<a href="#1209" id="1209">1209</a>
+<a href="#1210" id="1210">1210</a>
+<a href="#1211" id="1211">1211</a>
+<a href="#1212" id="1212">1212</a>
+<a href="#1213" id="1213">1213</a>
+<a href="#1214" id="1214">1214</a>
+<a href="#1215" id="1215">1215</a>
+<a href="#1216" id="1216">1216</a>
+<a href="#1217" id="1217">1217</a>
+<a href="#1218" id="1218">1218</a>
+<a href="#1219" id="1219">1219</a>
+<a href="#1220" id="1220">1220</a>
+<a href="#1221" id="1221">1221</a>
+<a href="#1222" id="1222">1222</a>
+<a href="#1223" id="1223">1223</a>
+<a href="#1224" id="1224">1224</a>
+<a href="#1225" id="1225">1225</a>
+<a href="#1226" id="1226">1226</a>
+<a href="#1227" id="1227">1227</a>
+<a href="#1228" id="1228">1228</a>
+<a href="#1229" id="1229">1229</a>
+<a href="#1230" id="1230">1230</a>
+<a href="#1231" id="1231">1231</a>
+<a href="#1232" id="1232">1232</a>
+<a href="#1233" id="1233">1233</a>
+<a href="#1234" id="1234">1234</a>
+<a href="#1235" id="1235">1235</a>
+<a href="#1236" id="1236">1236</a>
+<a href="#1237" id="1237">1237</a>
+<a href="#1238" id="1238">1238</a>
+<a href="#1239" id="1239">1239</a>
+<a href="#1240" id="1240">1240</a>
+<a href="#1241" id="1241">1241</a>
+<a href="#1242" id="1242">1242</a>
+<a href="#1243" id="1243">1243</a>
+<a href="#1244" id="1244">1244</a>
+<a href="#1245" id="1245">1245</a>
+<a href="#1246" id="1246">1246</a>
+<a href="#1247" id="1247">1247</a>
+<a href="#1248" id="1248">1248</a>
+<a href="#1249" id="1249">1249</a>
+<a href="#1250" id="1250">1250</a>
+<a href="#1251" id="1251">1251</a>
+<a href="#1252" id="1252">1252</a>
+<a href="#1253" id="1253">1253</a>
+<a href="#1254" id="1254">1254</a>
+<a href="#1255" id="1255">1255</a>
+<a href="#1256" id="1256">1256</a>
+<a href="#1257" id="1257">1257</a>
+<a href="#1258" id="1258">1258</a>
+<a href="#1259" id="1259">1259</a>
+<a href="#1260" id="1260">1260</a>
+<a href="#1261" id="1261">1261</a>
+<a href="#1262" id="1262">1262</a>
+<a href="#1263" id="1263">1263</a>
+<a href="#1264" id="1264">1264</a>
+<a href="#1265" id="1265">1265</a>
+<a href="#1266" id="1266">1266</a>
+<a href="#1267" id="1267">1267</a>
+<a href="#1268" id="1268">1268</a>
+<a href="#1269" id="1269">1269</a>
+<a href="#1270" id="1270">1270</a>
+<a href="#1271" id="1271">1271</a>
+<a href="#1272" id="1272">1272</a>
+<a href="#1273" id="1273">1273</a>
+<a href="#1274" id="1274">1274</a>
+<a href="#1275" id="1275">1275</a>
+<a href="#1276" id="1276">1276</a>
+<a href="#1277" id="1277">1277</a>
+<a href="#1278" id="1278">1278</a>
+<a href="#1279" id="1279">1279</a>
+<a href="#1280" id="1280">1280</a>
+<a href="#1281" id="1281">1281</a>
+<a href="#1282" id="1282">1282</a>
+<a href="#1283" id="1283">1283</a>
+<a href="#1284" id="1284">1284</a>
+<a href="#1285" id="1285">1285</a>
+<a href="#1286" id="1286">1286</a>
+<a href="#1287" id="1287">1287</a>
+<a href="#1288" id="1288">1288</a>
+<a href="#1289" id="1289">1289</a>
+<a href="#1290" id="1290">1290</a>
+<a href="#1291" id="1291">1291</a>
+<a href="#1292" id="1292">1292</a>
+<a href="#1293" id="1293">1293</a>
+<a href="#1294" id="1294">1294</a>
+<a href="#1295" id="1295">1295</a>
+<a href="#1296" id="1296">1296</a>
+<a href="#1297" id="1297">1297</a>
+<a href="#1298" id="1298">1298</a>
+<a href="#1299" id="1299">1299</a>
+<a href="#1300" id="1300">1300</a>
+<a href="#1301" id="1301">1301</a>
+<a href="#1302" id="1302">1302</a>
+<a href="#1303" id="1303">1303</a>
+<a href="#1304" id="1304">1304</a>
+<a href="#1305" id="1305">1305</a>
+<a href="#1306" id="1306">1306</a>
+<a href="#1307" id="1307">1307</a>
+<a href="#1308" id="1308">1308</a>
+<a href="#1309" id="1309">1309</a>
+<a href="#1310" id="1310">1310</a>
+<a href="#1311" id="1311">1311</a>
+<a href="#1312" id="1312">1312</a>
+<a href="#1313" id="1313">1313</a>
+<a href="#1314" id="1314">1314</a>
+<a href="#1315" id="1315">1315</a>
+<a href="#1316" id="1316">1316</a>
+<a href="#1317" id="1317">1317</a>
+<a href="#1318" id="1318">1318</a>
+<a href="#1319" id="1319">1319</a>
+<a href="#1320" id="1320">1320</a>
+<a href="#1321" id="1321">1321</a>
+<a href="#1322" id="1322">1322</a>
+<a href="#1323" id="1323">1323</a>
+<a href="#1324" id="1324">1324</a>
+<a href="#1325" id="1325">1325</a>
+<a href="#1326" id="1326">1326</a>
+<a href="#1327" id="1327">1327</a>
+<a href="#1328" id="1328">1328</a>
+<a href="#1329" id="1329">1329</a>
+<a href="#1330" id="1330">1330</a>
+<a href="#1331" id="1331">1331</a>
+<a href="#1332" id="1332">1332</a>
+<a href="#1333" id="1333">1333</a>
+<a href="#1334" id="1334">1334</a>
+<a href="#1335" id="1335">1335</a>
+<a href="#1336" id="1336">1336</a>
+<a href="#1337" id="1337">1337</a>
+<a href="#1338" id="1338">1338</a>
+<a href="#1339" id="1339">1339</a>
+<a href="#1340" id="1340">1340</a>
+<a href="#1341" id="1341">1341</a>
+<a href="#1342" id="1342">1342</a>
+<a href="#1343" id="1343">1343</a>
+<a href="#1344" id="1344">1344</a>
+<a href="#1345" id="1345">1345</a>
+<a href="#1346" id="1346">1346</a>
+<a href="#1347" id="1347">1347</a>
+<a href="#1348" id="1348">1348</a>
+<a href="#1349" id="1349">1349</a>
+<a href="#1350" id="1350">1350</a>
+<a href="#1351" id="1351">1351</a>
+<a href="#1352" id="1352">1352</a>
+<a href="#1353" id="1353">1353</a>
+<a href="#1354" id="1354">1354</a>
+<a href="#1355" id="1355">1355</a>
+<a href="#1356" id="1356">1356</a>
+<a href="#1357" id="1357">1357</a>
+<a href="#1358" id="1358">1358</a>
+<a href="#1359" id="1359">1359</a>
+<a href="#1360" id="1360">1360</a>
+<a href="#1361" id="1361">1361</a>
+<a href="#1362" id="1362">1362</a>
+<a href="#1363" id="1363">1363</a>
+<a href="#1364" id="1364">1364</a>
+<a href="#1365" id="1365">1365</a>
+<a href="#1366" id="1366">1366</a>
+<a href="#1367" id="1367">1367</a>
+<a href="#1368" id="1368">1368</a>
+<a href="#1369" id="1369">1369</a>
+<a href="#1370" id="1370">1370</a>
+<a href="#1371" id="1371">1371</a>
+<a href="#1372" id="1372">1372</a>
+<a href="#1373" id="1373">1373</a>
+<a href="#1374" id="1374">1374</a>
+<a href="#1375" id="1375">1375</a>
+<a href="#1376" id="1376">1376</a>
+<a href="#1377" id="1377">1377</a>
+<a href="#1378" id="1378">1378</a>
+<a href="#1379" id="1379">1379</a>
+<a href="#1380" id="1380">1380</a>
+<a href="#1381" id="1381">1381</a>
+<a href="#1382" id="1382">1382</a>
+<a href="#1383" id="1383">1383</a>
+<a href="#1384" id="1384">1384</a>
+<a href="#1385" id="1385">1385</a>
+<a href="#1386" id="1386">1386</a>
+<a href="#1387" id="1387">1387</a>
+<a href="#1388" id="1388">1388</a>
+<a href="#1389" id="1389">1389</a>
+<a href="#1390" id="1390">1390</a>
+<a href="#1391" id="1391">1391</a>
+<a href="#1392" id="1392">1392</a>
+<a href="#1393" id="1393">1393</a>
+<a href="#1394" id="1394">1394</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -1136,6 +1413,7 @@
<span class="kw">use </span>std::fmt::Formatter;
<span class="kw">use </span>std::io;
<span class="kw">use </span>std::pin::Pin;
+<span class="kw">use </span>std::sync::Arc;
<span class="kw">use </span>std::task::ready;
<span class="kw">use </span>std::task::Context;
<span class="kw">use </span>std::task::Poll;
@@ -1182,8 +1460,58 @@
/// .layer(RetryLayer::new())
/// .finish();
/// ```
-</span><span class="attr">#[derive(Default, Clone)]
-</span><span class="kw">pub struct </span>RetryLayer(ExponentialBuilder);
+///
+/// ## Customize retry interceptor
+///
+/// RetryLayer accepts [`RetryInterceptor`] to allow users to customize
+/// their own retry interceptor logic.
+///
+/// ```
+/// use std::time::Duration;
+///
+/// use anyhow::Result;
+/// use opendal::layers::RetryInterceptor;
+/// use opendal::layers::RetryLayer;
+/// use opendal::services;
+/// use opendal::Error;
+/// use opendal::Operator;
+/// use opendal::Scheme;
+///
+/// struct MyRetryInterceptor;
+///
+/// impl RetryInterceptor for MyRetryInterceptor {
+/// fn intercept(&self, err: &Error, dur: Duration, ctx: &[(&str, &str)]) {
+/// // do something
+/// }
+/// }
+///
+/// let _ = Operator::new(services::Memory::default())
+/// .expect("must init")
+/// .layer(RetryLayer::new().with_notify(MyRetryInterceptor))
+/// .finish();
+/// ```
+</span><span class="kw">pub struct </span>RetryLayer<I = DefaultRetryInterceptor> {
+ builder: ExponentialBuilder,
+ notify: Arc<I>,
+}
+
+<span class="kw">impl</span><I> Clone <span class="kw">for </span>RetryLayer<I> {
+ <span class="kw">fn </span>clone(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="self">Self </span>{
+ <span class="self">Self </span>{
+ builder: <span class="self">self</span>.builder.clone(),
+ notify: <span class="self">self</span>.notify.clone(),
+ }
+ }
+}
+
+<span class="kw">impl </span>Default <span class="kw">for </span>RetryLayer {
+ <span class="kw">fn </span>default() -> <span class="self">Self </span>{
+ <span class="self">Self </span>{
+ builder: ExponentialBuilder::default(),
+ notify: Arc::new(DefaultRetryInterceptor),
+ }
+ }
+}
<span class="kw">impl </span>RetryLayer {
<span class="doccomment">/// Create a new retry layer.
@@ -1204,12 +1532,45 @@
<span class="self">Self</span>::default()
}
+ <span class="doccomment">/// Set the retry interceptor as new notify.
+ ///
+ /// ```
+ /// use std::time::Duration;
+ ///
+ /// use anyhow::Result;
+ /// use opendal::layers::RetryInterceptor;
+ /// use opendal::layers::RetryLayer;
+ /// use opendal::services;
+ /// use opendal::Error;
+ /// use opendal::Operator;
+ /// use opendal::Scheme;
+ ///
+ /// struct MyRetryInterceptor;
+ ///
+ /// impl RetryInterceptor for MyRetryInterceptor {
+ /// fn intercept(&self, err: &Error, dur: Duration, ctx: &[(&str, &str)]) {
+ /// // do something
+ /// }
+ /// }
+ ///
+ /// let _ = Operator::new(services::Memory::default())
+ /// .expect("must init")
+ /// .layer(RetryLayer::new().with_notify(MyRetryInterceptor))
+ /// .finish();
+ /// ```
+ </span><span class="kw">pub fn </span>with_notify<I: RetryInterceptor>(<span class="self">self</span>, notify: I) -> RetryLayer<I> {
+ RetryLayer {
+ builder: <span class="self">self</span>.builder,
+ notify: Arc::new(notify),
+ }
+ }
+
<span class="doccomment">/// Set jitter of current backoff.
///
/// If jitter is enabled, ExponentialBackoff will add a random jitter in `[0, min_delay)
/// to current delay.
</span><span class="kw">pub fn </span>with_jitter(<span class="kw-2">mut </span><span class="self">self</span>) -> <span class="self">Self </span>{
- <span class="self">self</span>.<span class="number">0 </span>= <span class="self">self</span>.<span class="number">0</span>.with_jitter();
+ <span class="self">self</span>.builder = <span class="self">self</span>.builder.with_jitter();
<span class="self">self
</span>}
@@ -1219,13 +1580,13 @@
///
/// This function will panic if input factor smaller than `1.0`.
</span><span class="kw">pub fn </span>with_factor(<span class="kw-2">mut </span><span class="self">self</span>, factor: f32) -> <span class="self">Self </span>{
- <span class="self">self</span>.<span class="number">0 </span>= <span class="self">self</span>.<span class="number">0</span>.with_factor(factor);
+ <span class="self">self</span>.builder = <span class="self">self</span>.builder.with_factor(factor);
<span class="self">self
</span>}
<span class="doccomment">/// Set min_delay of current backoff.
</span><span class="kw">pub fn </span>with_min_delay(<span class="kw-2">mut </span><span class="self">self</span>, min_delay: Duration) -> <span class="self">Self </span>{
- <span class="self">self</span>.<span class="number">0 </span>= <span class="self">self</span>.<span class="number">0</span>.with_min_delay(min_delay);
+ <span class="self">self</span>.builder = <span class="self">self</span>.builder.with_min_delay(min_delay);
<span class="self">self
</span>}
@@ -1233,7 +1594,7 @@
///
/// Delay will not increasing if current delay is larger than max_delay.
</span><span class="kw">pub fn </span>with_max_delay(<span class="kw-2">mut </span><span class="self">self</span>, max_delay: Duration) -> <span class="self">Self </span>{
- <span class="self">self</span>.<span class="number">0 </span>= <span class="self">self</span>.<span class="number">0</span>.with_max_delay(max_delay);
+ <span class="self">self</span>.builder = <span class="self">self</span>.builder.with_max_delay(max_delay);
<span class="self">self
</span>}
@@ -1241,29 +1602,69 @@
///
/// Backoff will return `None` if max times is reaching.
</span><span class="kw">pub fn </span>with_max_times(<span class="kw-2">mut </span><span class="self">self</span>, max_times: usize) -> <span class="self">Self </span>{
- <span class="self">self</span>.<span class="number">0 </span>= <span class="self">self</span>.<span class="number">0</span>.with_max_times(max_times);
+ <span class="self">self</span>.builder = <span class="self">self</span>.builder.with_max_times(max_times);
<span class="self">self
</span>}
}
-<span class="kw">impl</span><A: Accessor> Layer<A> <span class="kw">for </span>RetryLayer {
- <span class="kw">type </span>LayeredAccessor = RetryAccessor<A>;
+<span class="kw">impl</span><A: Accessor, I: RetryInterceptor> Layer<A> <span class="kw">for </span>RetryLayer<I> {
+ <span class="kw">type </span>LayeredAccessor = RetryAccessor<A, I>;
<span class="kw">fn </span>layer(<span class="kw-2">&</span><span class="self">self</span>, inner: A) -> <span class="self">Self</span>::LayeredAccessor {
RetryAccessor {
inner,
- builder: <span class="self">self</span>.<span class="number">0</span>.clone(),
+ builder: <span class="self">self</span>.builder.clone(),
+ notify: <span class="self">self</span>.notify.clone(),
}
}
}
-<span class="attr">#[derive(Clone)]
-</span><span class="kw">pub struct </span>RetryAccessor<A: Accessor> {
+<span class="doccomment">/// RetryInterceptor is used to intercept while retry happened.
+</span><span class="kw">pub trait </span>RetryInterceptor: Send + Sync + <span class="lifetime">'static </span>{
+ <span class="doccomment">/// Everytime RetryLayer is retrying, this function will be called.
+ ///
+ /// # Timing
+ ///
+ /// just before the retry sleep.
+ ///
+ /// # Inputs
+ ///
+ /// - err: The error that caused the current retry.
+ /// - dur: The duration that will sleep before next retry.
+ /// - ctx: The context (`name`, `value`) of current operation, like `operation` and `path`.
+ ///
+ /// # Notes
+ ///
+ /// The intercept must be quick and non-blocking. No heavy IO is
+ /// allowed. Otherwise the retry will be blocked.
+ </span><span class="kw">fn </span>intercept(<span class="kw-2">&</span><span class="self">self</span>, err: <span class="kw-2">&</span>Error, dur: Duration, ctx: <span class="kw-2">&</span>[(<span class="kw-2">&</span>str, <span class="kw-2">&</span>str)]);
+}
+
+<span class="doccomment">/// The DefaultRetryInterceptor will log the retry error in warning level.
+</span><span class="kw">pub struct </span>DefaultRetryInterceptor;
+
+<span class="kw">impl </span>RetryInterceptor <span class="kw">for </span>DefaultRetryInterceptor {
+ <span class="kw">fn </span>intercept(<span class="kw-2">&</span><span class="self">self</span>, err: <span class="kw-2">&</span>Error, dur: Duration, ctx: <span class="kw-2">&</span>[(<span class="kw-2">&</span>str, <span class="kw-2">&</span>str)]) {
+ <span class="kw">let </span>context = ctx
+ .iter()
+ .map(|(k, v)| <span class="macro">format!</span>(<span class="string">"{}={}"</span>, k, v))
+ .collect::<Vec<<span class="kw">_</span>>>()
+ .join(<span class="string">" "</span>);
+
+ <span class="macro">warn!</span>(
+ target: <span class="string">"opendal::service"</span>,
+ <span class="string">"{} -> retry after {}s: error={:?}"</span>,
+ context, dur.as_secs_f64(), err)
+ }
+}
+
+<span class="kw">pub struct </span>RetryAccessor<A: Accessor, I: RetryInterceptor> {
inner: A,
builder: ExponentialBuilder,
+ notify: Arc<I>,
}
-<span class="kw">impl</span><A: Accessor> Debug <span class="kw">for </span>RetryAccessor<A> {
+<span class="kw">impl</span><A: Accessor, I: RetryInterceptor> Debug <span class="kw">for </span>RetryAccessor<A, I> {
<span class="kw">fn </span>fmt(<span class="kw-2">&</span><span class="self">self</span>, f: <span class="kw-2">&mut </span>Formatter<<span class="lifetime">'_</span>>) -> std::fmt::Result {
f.debug_struct(<span class="string">"RetryAccessor"</span>)
.field(<span class="string">"inner"</span>, <span class="kw-2">&</span><span class="self">self</span>.inner)
@@ -1272,15 +1673,15 @@
}
<span class="attr">#[async_trait]
-</span><span class="kw">impl</span><A: Accessor> LayeredAccessor <span class="kw">for </span>RetryAccessor<A> {
+</span><span class="kw">impl</span><A: Accessor, I: RetryInterceptor> LayeredAccessor <span class="kw">for </span>RetryAccessor<A, I> {
<span class="kw">type </span>Inner = A;
- <span class="kw">type </span>Reader = RetryWrapper<A::Reader>;
- <span class="kw">type </span>BlockingReader = RetryWrapper<A::BlockingReader>;
- <span class="kw">type </span>Writer = RetryWrapper<A::Writer>;
- <span class="kw">type </span>BlockingWriter = RetryWrapper<A::BlockingWriter>;
- <span class="kw">type </span>Appender = RetryWrapper<A::Appender>;
- <span class="kw">type </span>Pager = RetryWrapper<A::Pager>;
- <span class="kw">type </span>BlockingPager = RetryWrapper<A::BlockingPager>;
+ <span class="kw">type </span>Reader = RetryWrapper<A::Reader, I>;
+ <span class="kw">type </span>BlockingReader = RetryWrapper<A::BlockingReader, I>;
+ <span class="kw">type </span>Writer = RetryWrapper<A::Writer, I>;
+ <span class="kw">type </span>BlockingWriter = RetryWrapper<A::BlockingWriter, I>;
+ <span class="kw">type </span>Appender = RetryWrapper<A::Appender, I>;
+ <span class="kw">type </span>Pager = RetryWrapper<A::Pager, I>;
+ <span class="kw">type </span>BlockingPager = RetryWrapper<A::BlockingPager, I>;
<span class="kw">fn </span>inner(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="kw-2">&</span><span class="self">Self</span>::Inner {
<span class="kw-2">&</span><span class="self">self</span>.inner
@@ -1290,11 +1691,15 @@
{ || <span class="self">self</span>.inner.create_dir(path, args.clone()) }
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e| e.is_temporary())
- .notify(|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> retry after {}s: error={:?}"</span>,
- Operation::CreateDir, dur.as_secs_f64(), err)
+ .notify(|err, dur: Duration| {
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, Operation::CreateDir.into_static()),
+ (<span class="string">"path"</span>, path),
+ ],
+ )
})
.map(|v| v.map_err(|e| e.set_persistent()))
.<span class="kw">await
@@ -1305,14 +1710,20 @@
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e| e.is_temporary())
.notify(|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> retry after {}s: error={:?}"</span>,
- Operation::Read, dur.as_secs_f64(), err)
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[(<span class="string">"operation"</span>, Operation::Read.into_static()), (<span class="string">"path"</span>, path)],
+ )
})
.map(|v| {
- v.map(|(rp, r)| (rp, RetryWrapper::new(r, path, <span class="self">self</span>.builder.clone())))
- .map_err(|e| e.set_persistent())
+ v.map(|(rp, r)| {
+ (
+ rp,
+ RetryWrapper::new(r, <span class="self">self</span>.notify.clone(), path, <span class="self">self</span>.builder.clone()),
+ )
+ })
+ .map_err(|e| e.set_persistent())
})
.<span class="kw">await
</span>}
@@ -1325,14 +1736,23 @@
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e| e.is_temporary())
.notify(|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> retry after {}s: error={:?}"</span>,
- Operation::Write, dur.as_secs_f64(), err)
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, Operation::Write.into_static()),
+ (<span class="string">"path"</span>, path),
+ ],
+ )
})
.map(|v| {
- v.map(|(rp, r)| (rp, RetryWrapper::new(r, path, <span class="self">self</span>.builder.clone())))
- .map_err(|e| e.set_persistent())
+ v.map(|(rp, r)| {
+ (
+ rp,
+ RetryWrapper::new(r, <span class="self">self</span>.notify.clone(), path, <span class="self">self</span>.builder.clone()),
+ )
+ })
+ .map_err(|e| e.set_persistent())
})
.<span class="kw">await
</span>}
@@ -1342,14 +1762,23 @@
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e| e.is_temporary())
.notify(|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> retry after {}s: error={:?}"</span>,
- Operation::Append, dur.as_secs_f64(), err)
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, Operation::Append.into_static()),
+ (<span class="string">"path"</span>, path),
+ ],
+ )
})
.map(|v| {
- v.map(|(rp, r)| (rp, RetryWrapper::new(r, path, <span class="self">self</span>.builder.clone())))
- .map_err(|e| e.set_persistent())
+ v.map(|(rp, r)| {
+ (
+ rp,
+ RetryWrapper::new(r, <span class="self">self</span>.notify.clone(), path, <span class="self">self</span>.builder.clone()),
+ )
+ })
+ .map_err(|e| e.set_persistent())
})
.<span class="kw">await
</span>}
@@ -1359,10 +1788,11 @@
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e| e.is_temporary())
.notify(|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> retry after {}s: error={:?}"</span>,
- Operation::Stat, dur.as_secs_f64(), err)
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[(<span class="string">"operation"</span>, Operation::Stat.into_static()), (<span class="string">"path"</span>, path)],
+ )
})
.map(|v| v.map_err(|e| e.set_persistent()))
.<span class="kw">await
@@ -1373,10 +1803,14 @@
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e| e.is_temporary())
.notify(|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> retry after {}s: error={:?}"</span>,
- Operation::Delete, dur.as_secs_f64(), err)
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, Operation::Delete.into_static()),
+ (<span class="string">"path"</span>, path),
+ ],
+ )
})
.map(|v| v.map_err(|e| e.set_persistent()))
.<span class="kw">await
@@ -1387,10 +1821,15 @@
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e| e.is_temporary())
.notify(|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> retry after {}s: error={:?}"</span>,
- Operation::Copy, dur.as_secs_f64(), err)
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, Operation::Copy.into_static()),
+ (<span class="string">"from"</span>, from),
+ (<span class="string">"to"</span>, to),
+ ],
+ )
})
.map(|v| v.map_err(|e| e.set_persistent()))
.<span class="kw">await
@@ -1401,10 +1840,15 @@
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e| e.is_temporary())
.notify(|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> retry after {}s: error={:?}"</span>,
- Operation::Rename, dur.as_secs_f64(), err)
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, Operation::Rename.into_static()),
+ (<span class="string">"from"</span>, from),
+ (<span class="string">"to"</span>, to),
+ ],
+ )
})
.map(|v| v.map_err(|e| e.set_persistent()))
.<span class="kw">await
@@ -1415,14 +1859,16 @@
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e| e.is_temporary())
.notify(|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> retry after {}s: error={:?}"</span>,
- Operation::List, dur.as_secs_f64(), err)
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[(<span class="string">"operation"</span>, Operation::List.into_static()), (<span class="string">"path"</span>, path)],
+ )
})
.map(|v| {
v.map(|(l, p)| {
- <span class="kw">let </span>pager = RetryWrapper::new(p, path, <span class="self">self</span>.builder.clone());
+ <span class="kw">let </span>pager =
+ RetryWrapper::new(p, <span class="self">self</span>.notify.clone(), path, <span class="self">self</span>.builder.clone());
(l, pager)
})
.map_err(|e| e.set_persistent())
@@ -1445,10 +1891,14 @@
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e: <span class="kw-2">&</span>Error| e.is_temporary())
.notify(|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> retry after {}s: error={:?}"</span>,
- Operation::Batch, dur.as_secs_f64(), err)
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, Operation::Batch.into_static()),
+ (<span class="string">"count"</span>, <span class="kw-2">&</span>args.operation().len().to_string()),
+ ],
+ )
})
.<span class="kw">await
</span>.map_err(|e| e.set_persistent())
@@ -1459,10 +1909,14 @@
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e| e.is_temporary())
.notify(|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> retry after {}s: error={:?}"</span>,
- Operation::BlockingCreateDir, dur.as_secs_f64(), err)
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, Operation::BlockingCreateDir.into_static()),
+ (<span class="string">"path"</span>, path),
+ ],
+ )
})
.call()
.map_err(|e| e.set_persistent())
@@ -1473,13 +1927,22 @@
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e| e.is_temporary())
.notify(|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> retry after {}s: error={:?}"</span>,
- Operation::BlockingRead, dur.as_secs_f64(), err)
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, Operation::BlockingRead.into_static()),
+ (<span class="string">"path"</span>, path),
+ ],
+ )
})
.call()
- .map(|(rp, r)| (rp, RetryWrapper::new(r, path, <span class="self">self</span>.builder.clone())))
+ .map(|(rp, r)| {
+ (
+ rp,
+ RetryWrapper::new(r, <span class="self">self</span>.notify.clone(), path, <span class="self">self</span>.builder.clone()),
+ )
+ })
.map_err(|e| e.set_persistent())
}
@@ -1488,13 +1951,22 @@
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e| e.is_temporary())
.notify(|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> retry after {}s: error={:?}"</span>,
- Operation::BlockingWrite, dur.as_secs_f64(), err)
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, Operation::BlockingWrite.into_static()),
+ (<span class="string">"path"</span>, path),
+ ],
+ )
})
.call()
- .map(|(rp, r)| (rp, RetryWrapper::new(r, path, <span class="self">self</span>.builder.clone())))
+ .map(|(rp, r)| {
+ (
+ rp,
+ RetryWrapper::new(r, <span class="self">self</span>.notify.clone(), path, <span class="self">self</span>.builder.clone()),
+ )
+ })
.map_err(|e| e.set_persistent())
}
@@ -1503,10 +1975,14 @@
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e| e.is_temporary())
.notify(|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> retry after {}s: error={:?}"</span>,
- Operation::BlockingStat, dur.as_secs_f64(), err)
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, Operation::BlockingStat.into_static()),
+ (<span class="string">"path"</span>, path),
+ ],
+ )
})
.call()
.map_err(|e| e.set_persistent())
@@ -1517,10 +1993,14 @@
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e| e.is_temporary())
.notify(|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> retry after {}s: error={:?}"</span>,
- Operation::BlockingDelete, dur.as_secs_f64(), err)
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, Operation::BlockingDelete.into_static()),
+ (<span class="string">"path"</span>, path),
+ ],
+ )
})
.call()
.map_err(|e| e.set_persistent())
@@ -1531,32 +2011,40 @@
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e| e.is_temporary())
.notify(|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> retry after {}s: error={:?}"</span>,
- Operation::BlockingList, dur.as_secs_f64(), err)
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, Operation::BlockingList.into_static()),
+ (<span class="string">"path"</span>, path),
+ ],
+ )
})
.call()
.map(|(rp, p)| {
- <span class="kw">let </span>p = RetryWrapper::new(p, path, <span class="self">self</span>.builder.clone());
+ <span class="kw">let </span>p = RetryWrapper::new(p, <span class="self">self</span>.notify.clone(), path, <span class="self">self</span>.builder.clone());
(rp, p)
})
.map_err(|e| e.set_persistent())
}
}
-<span class="kw">pub struct </span>RetryWrapper<R> {
+<span class="kw">pub struct </span>RetryWrapper<R, I> {
inner: R,
+ notify: Arc<I>,
+
path: String,
builder: ExponentialBuilder,
current_backoff: <span class="prelude-ty">Option</span><ExponentialBackoff>,
sleep: <span class="prelude-ty">Option</span><Pin<Box<tokio::time::Sleep>>>,
}
-<span class="kw">impl</span><R> RetryWrapper<R> {
- <span class="kw">fn </span>new(inner: R, path: <span class="kw-2">&</span>str, backoff: ExponentialBuilder) -> <span class="self">Self </span>{
+<span class="kw">impl</span><R, I> RetryWrapper<R, I> {
+ <span class="kw">fn </span>new(inner: R, notify: Arc<I>, path: <span class="kw-2">&</span>str, backoff: ExponentialBuilder) -> <span class="self">Self </span>{
<span class="self">Self </span>{
inner,
+ notify,
+
path: path.to_string(),
builder: backoff,
current_backoff: <span class="prelude-val">None</span>,
@@ -1565,7 +2053,7 @@
}
}
-<span class="kw">impl</span><R: oio::Read> oio::Read <span class="kw">for </span>RetryWrapper<R> {
+<span class="kw">impl</span><R: oio::Read, I: RetryInterceptor> oio::Read <span class="kw">for </span>RetryWrapper<R, I> {
<span class="kw">fn </span>poll_read(<span class="kw-2">&mut </span><span class="self">self</span>, cx: <span class="kw-2">&mut </span>Context<<span class="lifetime">'_</span>>, buf: <span class="kw-2">&mut </span>[u8]) -> Poll<<span class="prelude-ty">Result</span><usize>> {
<span class="kw">if let </span><span class="prelude-val">Some</span>(sleep) = <span class="self">self</span>.sleep.as_mut() {
<span class="macro">ready!</span>(sleep.poll_unpin(cx));
@@ -1596,10 +2084,14 @@
Poll::Ready(<span class="prelude-val">Err</span>(err))
}
<span class="prelude-val">Some</span>(dur) => {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} path={} -> retry after {}s: error={:?}"</span>,
- ReadOperation::Read, <span class="self">self</span>.path, dur.as_secs_f64(), err);
+ <span class="self">self</span>.notify.intercept(
+ <span class="kw-2">&</span>err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, ReadOperation::Read.into_static()),
+ (<span class="string">"path"</span>, <span class="kw-2">&</span><span class="self">self</span>.path),
+ ],
+ );
<span class="self">self</span>.sleep = <span class="prelude-val">Some</span>(Box::pin(tokio::time::sleep(dur)));
<span class="self">self</span>.poll_read(cx, buf)
}
@@ -1638,10 +2130,14 @@
Poll::Ready(<span class="prelude-val">Err</span>(err))
}
<span class="prelude-val">Some</span>(dur) => {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} path={} -> retry after {}s: error={:?}"</span>,
- ReadOperation::Seek, <span class="self">self</span>.path, dur.as_secs_f64(), err);
+ <span class="self">self</span>.notify.intercept(
+ <span class="kw-2">&</span>err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, ReadOperation::Seek.into_static()),
+ (<span class="string">"path"</span>, <span class="kw-2">&</span><span class="self">self</span>.path),
+ ],
+ );
<span class="self">self</span>.sleep = <span class="prelude-val">Some</span>(Box::pin(tokio::time::sleep(dur)));
<span class="self">self</span>.poll_seek(cx, pos)
}
@@ -1684,10 +2180,14 @@
Poll::Ready(<span class="prelude-val">Some</span>(<span class="prelude-val">Err</span>(err)))
}
<span class="prelude-val">Some</span>(dur) => {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} path={} -> retry after {}s: error={:?}"</span>,
- ReadOperation::Next, <span class="self">self</span>.path, dur.as_secs_f64(), err);
+ <span class="self">self</span>.notify.intercept(
+ <span class="kw-2">&</span>err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, ReadOperation::Next.into_static()),
+ (<span class="string">"path"</span>, <span class="kw-2">&</span><span class="self">self</span>.path),
+ ],
+ );
<span class="self">self</span>.sleep = <span class="prelude-val">Some</span>(Box::pin(tokio::time::sleep(dur)));
<span class="self">self</span>.poll_next(cx)
}
@@ -1697,16 +2197,20 @@
}
}
-<span class="kw">impl</span><R: oio::BlockingRead> oio::BlockingRead <span class="kw">for </span>RetryWrapper<R> {
+<span class="kw">impl</span><R: oio::BlockingRead, I: RetryInterceptor> oio::BlockingRead <span class="kw">for </span>RetryWrapper<R, I> {
<span class="kw">fn </span>read(<span class="kw-2">&mut </span><span class="self">self</span>, buf: <span class="kw-2">&mut </span>[u8]) -> <span class="prelude-ty">Result</span><usize> {
{ || <span class="self">self</span>.inner.read(buf) }
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e| e.is_temporary())
- .notify(<span class="kw">move </span>|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> pager retry after {}s: error={:?}"</span>,
- ReadOperation::BlockingRead, dur.as_secs_f64(), err)
+ .notify(|err, dur| {
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, ReadOperation::BlockingRead.into_static()),
+ (<span class="string">"path"</span>, <span class="kw-2">&</span><span class="self">self</span>.path),
+ ],
+ );
})
.call()
.map_err(|e| e.set_persistent())
@@ -1716,11 +2220,15 @@
{ || <span class="self">self</span>.inner.seek(pos) }
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e| e.is_temporary())
- .notify(<span class="kw">move </span>|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> pager retry after {}s: error={:?}"</span>,
- ReadOperation::BlockingSeek, dur.as_secs_f64(), err)
+ .notify(|err, dur| {
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, ReadOperation::BlockingSeek.into_static()),
+ (<span class="string">"path"</span>, <span class="kw-2">&</span><span class="self">self</span>.path),
+ ],
+ );
})
.call()
.map_err(|e| e.set_persistent())
@@ -1730,11 +2238,15 @@
{ || <span class="self">self</span>.inner.next().transpose() }
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e| e.is_temporary())
- .notify(<span class="kw">move </span>|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> pager retry after {}s: error={:?}"</span>,
- ReadOperation::BlockingNext, dur.as_secs_f64(), err)
+ .notify(|err, dur| {
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, ReadOperation::BlockingNext.into_static()),
+ (<span class="string">"path"</span>, <span class="kw-2">&</span><span class="self">self</span>.path),
+ ],
+ );
})
.call()
.map_err(|e| e.set_persistent())
@@ -1743,7 +2255,7 @@
}
<span class="attr">#[async_trait]
-</span><span class="kw">impl</span><R: oio::Write> oio::Write <span class="kw">for </span>RetryWrapper<R> {
+</span><span class="kw">impl</span><R: oio::Write, I: RetryInterceptor> oio::Write <span class="kw">for </span>RetryWrapper<R, I> {
<span class="kw">async fn </span>write(<span class="kw-2">&mut </span><span class="self">self</span>, bs: Bytes) -> <span class="prelude-ty">Result</span><()> {
<span class="kw">let </span><span class="kw-2">mut </span>backoff = <span class="self">self</span>.builder.build();
@@ -1754,9 +2266,14 @@
<span class="prelude-val">Err</span>(e) => <span class="kw">match </span>backoff.next() {
<span class="prelude-val">None </span>=> <span class="kw">return </span><span class="prelude-val">Err</span>(e),
<span class="prelude-val">Some</span>(dur) => {
- <span class="macro">warn!</span>(target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} path={} -> pager retry after {}s: error={:?}"</span>,
- WriteOperation::Write, <span class="self">self</span>.path, dur.as_secs_f64(), e);
+ <span class="self">self</span>.notify.intercept(
+ <span class="kw-2">&</span>e,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, WriteOperation::Write.into_static()),
+ (<span class="string">"path"</span>, <span class="kw-2">&</span><span class="self">self</span>.path),
+ ],
+ );
tokio::time::sleep(dur).<span class="kw">await</span>;
<span class="kw">continue</span>;
}
@@ -1780,9 +2297,14 @@
<span class="prelude-val">Err</span>(e) => <span class="kw">match </span>backoff.next() {
<span class="prelude-val">None </span>=> <span class="kw">return </span><span class="prelude-val">Err</span>(e),
<span class="prelude-val">Some</span>(dur) => {
- <span class="macro">warn!</span>(target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} path={} -> pager retry after {}s: error={:?}"</span>,
- WriteOperation::Abort, <span class="self">self</span>.path, dur.as_secs_f64(), e);
+ <span class="self">self</span>.notify.intercept(
+ <span class="kw-2">&</span>e,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, WriteOperation::Abort.into_static()),
+ (<span class="string">"path"</span>, <span class="kw-2">&</span><span class="self">self</span>.path),
+ ],
+ );
tokio::time::sleep(dur).<span class="kw">await</span>;
<span class="kw">continue</span>;
}
@@ -1801,9 +2323,14 @@
<span class="prelude-val">Err</span>(e) => <span class="kw">match </span>backoff.next() {
<span class="prelude-val">None </span>=> <span class="kw">return </span><span class="prelude-val">Err</span>(e),
<span class="prelude-val">Some</span>(dur) => {
- <span class="macro">warn!</span>(target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} path={} -> pager retry after {}s: error={:?}"</span>,
- WriteOperation::Close, <span class="self">self</span>.path, dur.as_secs_f64(), e);
+ <span class="self">self</span>.notify.intercept(
+ <span class="kw-2">&</span>e,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, WriteOperation::Close.into_static()),
+ (<span class="string">"path"</span>, <span class="kw-2">&</span><span class="self">self</span>.path),
+ ],
+ );
tokio::time::sleep(dur).<span class="kw">await</span>;
<span class="kw">continue</span>;
}
@@ -1813,16 +2340,20 @@
}
}
-<span class="kw">impl</span><R: oio::BlockingWrite> oio::BlockingWrite <span class="kw">for </span>RetryWrapper<R> {
+<span class="kw">impl</span><R: oio::BlockingWrite, I: RetryInterceptor> oio::BlockingWrite <span class="kw">for </span>RetryWrapper<R, I> {
<span class="kw">fn </span>write(<span class="kw-2">&mut </span><span class="self">self</span>, bs: Bytes) -> <span class="prelude-ty">Result</span><()> {
{ || <span class="self">self</span>.inner.write(bs.clone()) }
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e| e.is_temporary())
- .notify(<span class="kw">move </span>|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> pager retry after {}s: error={:?}"</span>,
- WriteOperation::BlockingWrite, dur.as_secs_f64(), err)
+ .notify(|err, dur| {
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, WriteOperation::BlockingWrite.into_static()),
+ (<span class="string">"path"</span>, <span class="kw-2">&</span><span class="self">self</span>.path),
+ ],
+ );
})
.call()
.map_err(|e| e.set_persistent())
@@ -1832,11 +2363,15 @@
{ || <span class="self">self</span>.inner.close() }
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e| e.is_temporary())
- .notify(<span class="kw">move </span>|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> pager retry after {}s: error={:?}"</span>,
- WriteOperation::BlockingClose, dur.as_secs_f64(), err)
+ .notify(|err, dur| {
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, WriteOperation::BlockingClose.into_static()),
+ (<span class="string">"path"</span>, <span class="kw-2">&</span><span class="self">self</span>.path),
+ ],
+ );
})
.call()
.map_err(|e| e.set_persistent())
@@ -1844,7 +2379,7 @@
}
<span class="attr">#[async_trait]
-</span><span class="kw">impl</span><A: oio::Append> oio::Append <span class="kw">for </span>RetryWrapper<A> {
+</span><span class="kw">impl</span><A: oio::Append, I: RetryInterceptor> oio::Append <span class="kw">for </span>RetryWrapper<A, I> {
<span class="kw">async fn </span>append(<span class="kw-2">&mut </span><span class="self">self</span>, bs: Bytes) -> <span class="prelude-ty">Result</span><()> {
<span class="kw">let </span><span class="kw-2">mut </span>backoff = <span class="self">self</span>.builder.build();
@@ -1855,9 +2390,14 @@
<span class="prelude-val">Err</span>(e) => <span class="kw">match </span>backoff.next() {
<span class="prelude-val">None </span>=> <span class="kw">return </span><span class="prelude-val">Err</span>(e),
<span class="prelude-val">Some</span>(dur) => {
- <span class="macro">warn!</span>(target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} path={} -> appender retry after {}s: error={:?}"</span>,
- AppendOperation::Append, <span class="self">self</span>.path, dur.as_secs_f64(), e);
+ <span class="self">self</span>.notify.intercept(
+ <span class="kw-2">&</span>e,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, AppendOperation::Append.into_static()),
+ (<span class="string">"path"</span>, <span class="kw-2">&</span><span class="self">self</span>.path),
+ ],
+ );
tokio::time::sleep(dur).<span class="kw">await</span>;
<span class="kw">continue</span>;
}
@@ -1876,9 +2416,14 @@
<span class="prelude-val">Err</span>(e) => <span class="kw">match </span>backoff.next() {
<span class="prelude-val">None </span>=> <span class="kw">return </span><span class="prelude-val">Err</span>(e),
<span class="prelude-val">Some</span>(dur) => {
- <span class="macro">warn!</span>(target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} path={} -> appender retry after {}s: error={:?}"</span>,
- AppendOperation::Close, <span class="self">self</span>.path, dur.as_secs_f64(), e);
+ <span class="self">self</span>.notify.intercept(
+ <span class="kw-2">&</span>e,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, AppendOperation::Close.into_static()),
+ (<span class="string">"path"</span>, <span class="kw-2">&</span><span class="self">self</span>.path),
+ ],
+ );
tokio::time::sleep(dur).<span class="kw">await</span>;
<span class="kw">continue</span>;
}
@@ -1889,7 +2434,7 @@
}
<span class="attr">#[async_trait]
-</span><span class="kw">impl</span><P: oio::Page> oio::Page <span class="kw">for </span>RetryWrapper<P> {
+</span><span class="kw">impl</span><P: oio::Page, I: RetryInterceptor> oio::Page <span class="kw">for </span>RetryWrapper<P, I> {
<span class="kw">async fn </span>next(<span class="kw-2">&mut </span><span class="self">self</span>) -> <span class="prelude-ty">Result</span><<span class="prelude-ty">Option</span><Vec<oio::Entry>>> {
<span class="kw">let </span><span class="kw-2">mut </span>backoff = <span class="self">self</span>.builder.build();
@@ -1900,9 +2445,14 @@
<span class="prelude-val">Err</span>(e) => <span class="kw">match </span>backoff.next() {
<span class="prelude-val">None </span>=> <span class="kw">return </span><span class="prelude-val">Err</span>(e),
<span class="prelude-val">Some</span>(dur) => {
- <span class="macro">warn!</span>(target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} path={} -> pager retry after {}s: error={:?}"</span>,
- PageOperation::Next, <span class="self">self</span>.path, dur.as_secs_f64(), e);
+ <span class="self">self</span>.notify.intercept(
+ <span class="kw-2">&</span>e,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, PageOperation::Next.into_static()),
+ (<span class="string">"path"</span>, <span class="kw-2">&</span><span class="self">self</span>.path),
+ ],
+ );
tokio::time::sleep(dur).<span class="kw">await</span>;
<span class="kw">continue</span>;
}
@@ -1912,16 +2462,20 @@
}
}
-<span class="kw">impl</span><P: oio::BlockingPage> oio::BlockingPage <span class="kw">for </span>RetryWrapper<P> {
+<span class="kw">impl</span><P: oio::BlockingPage, I: RetryInterceptor> oio::BlockingPage <span class="kw">for </span>RetryWrapper<P, I> {
<span class="kw">fn </span>next(<span class="kw-2">&mut </span><span class="self">self</span>) -> <span class="prelude-ty">Result</span><<span class="prelude-ty">Option</span><Vec<oio::Entry>>> {
{ || <span class="self">self</span>.inner.next() }
.retry(<span class="kw-2">&</span><span class="self">self</span>.builder)
.when(|e| e.is_temporary())
- .notify(<span class="kw">move </span>|err, dur| {
- <span class="macro">warn!</span>(
- target: <span class="string">"opendal::service"</span>,
- <span class="string">"operation={} -> pager retry after {}s: error={:?}"</span>,
- PageOperation::BlockingNext, dur.as_secs_f64(), err)
+ .notify(|err, dur| {
+ <span class="self">self</span>.notify.intercept(
+ err,
+ dur,
+ <span class="kw-2">&</span>[
+ (<span class="string">"operation"</span>, PageOperation::BlockingNext.into_static()),
+ (<span class="string">"path"</span>, <span class="kw-2">&</span><span class="self">self</span>.path),
+ ],
+ );
})
.call()
.map_err(|e| e.set_persistent())
diff --git a/docs/rust/src/opendal/services/s3/backend.rs.html b/docs/rust/src/opendal/services/s3/backend.rs.html
index 70a3e3924..5e321e52d 100644
--- a/docs/rust/src/opendal/services/s3/backend.rs.html
+++ b/docs/rust/src/opendal/services/s3/backend.rs.html
@@ -1211,6 +1211,8 @@
<a href="#1211" id="1211">1211</a>
<a href="#1212" id="1212">1212</a>
<a href="#1213" id="1213">1213</a>
+<a href="#1214" id="1214">1214</a>
+<a href="#1215" id="1215">1215</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -1762,7 +1764,9 @@
///
/// # async fn example() {
/// let builder = S3::default();
- /// let region: Option<String> = builder.detect_region("https://s3.amazonaws.com", "example").await;
+ /// let region: Option<String> = builder
+ /// .detect_region("https://s3.amazonaws.com", "example")
+ /// .await;
/// # }
/// ```
///
diff --git a/docs/rust/src/opendal/types/operator/blocking_operator.rs.html b/docs/rust/src/opendal/types/operator/blocking_operator.rs.html
index c588ce29b..8b207c92d 100644
--- a/docs/rust/src/opendal/types/operator/blocking_operator.rs.html
+++ b/docs/rust/src/opendal/types/operator/blocking_operator.rs.html
@@ -915,6 +915,7 @@
<a href="#915" id="915">915</a>
<a href="#916" id="916">916</a>
<a href="#917" id="917">917</a>
+<a href="#918" id="918">918</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -1610,7 +1611,8 @@
/// # fn test(op: BlockingOperator) -> Result<()> {
/// let _ = op
/// .delete_with("path/to/file")
- /// .version("example_version").call()?;
+ /// .version("example_version")
+ /// .call()?;
/// # Ok(())
/// # }
/// ```
diff --git a/docs/rust/src/opendal/types/writer.rs.html b/docs/rust/src/opendal/types/writer.rs.html
index d3a4dbc4d..c4cbec458 100644
--- a/docs/rust/src/opendal/types/writer.rs.html
+++ b/docs/rust/src/opendal/types/writer.rs.html
@@ -414,9 +414,6 @@
<a href="#414" id="414">414</a>
<a href="#415" id="415">415</a>
<a href="#416" id="416">416</a>
-<a href="#417" id="417">417</a>
-<a href="#418" id="418">418</a>
-<a href="#419" id="419">419</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -576,18 +573,15 @@
/// use std::io::Result;
///
/// use bytes::Bytes;
+ /// use futures::io::Cursor;
/// use futures::stream;
/// use futures::StreamExt;
/// use opendal::Operator;
- /// use futures::io::Cursor;
///
/// #[tokio::main]
/// async fn copy_example(op: Operator) -> Result<()> {
- /// let mut w = op
- /// .writer_with("path/to/file")
- /// .content_length(4096)
- /// .await?;
- /// let reader = Cursor::new(vec![0;4096]);
+ /// let mut w = op.writer_with("path/to/file").content_length(4096).await?;
+ /// let reader = Cursor::new(vec![0; 4096]);
/// w.copy(4096, reader).await?;
/// w.close().await?;
/// Ok(())
diff --git a/docs/services/azblob/index.html b/docs/services/azblob/index.html
index 3fd20a8d4..d02b06421 100644
--- a/docs/services/azblob/index.html
+++ b/docs/services/azblob/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Azblob | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/azblob"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/azdfs/index.html b/docs/services/azdfs/index.html
index 5a65582ae..c0bf403be 100644
--- a/docs/services/azdfs/index.html
+++ b/docs/services/azdfs/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Azdfs | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/azdfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta d [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/cos/index.html b/docs/services/cos/index.html
index fe06d5ddb..687538949 100644
--- a/docs/services/cos/index.html
+++ b/docs/services/cos/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">COS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/cos"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data- [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/dashmap/index.html b/docs/services/dashmap/index.html
index 02b32ee6e..86534602b 100644
--- a/docs/services/dashmap/index.html
+++ b/docs/services/dashmap/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">DashMap | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/dashmap"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><me [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/fs/index.html b/docs/services/fs/index.html
index 5bc9aa95f..d0a9ad7e6 100644
--- a/docs/services/fs/index.html
+++ b/docs/services/fs/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Fs | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/fs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/ftp/index.html b/docs/services/ftp/index.html
index c1c3db94a..61efdee08 100644
--- a/docs/services/ftp/index.html
+++ b/docs/services/ftp/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">FTP | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/ftp"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data- [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/hdfs/index.html b/docs/services/hdfs/index.html
index 162cb4647..bdc114459 100644
--- a/docs/services/hdfs/index.html
+++ b/docs/services/hdfs/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">HDFS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/hdfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/ipfs/index.html b/docs/services/ipfs/index.html
index fe34be102..989604816 100644
--- a/docs/services/ipfs/index.html
+++ b/docs/services/ipfs/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">IPFS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/ipfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/ipmfs/index.html b/docs/services/ipmfs/index.html
index 7e2ca64c9..1ddf069e9 100644
--- a/docs/services/ipmfs/index.html
+++ b/docs/services/ipmfs/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">IPMFS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/ipmfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta d [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/memory/index.html b/docs/services/memory/index.html
index 98b8292bb..9152ad59d 100644
--- a/docs/services/memory/index.html
+++ b/docs/services/memory/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Memory | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/memory"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/oss/index.html b/docs/services/oss/index.html
index b6b3653c8..3750c2743 100644
--- a/docs/services/oss/index.html
+++ b/docs/services/oss/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">OSS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/oss"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data- [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/redis/index.html b/docs/services/redis/index.html
index cb30830bd..4dbebb681 100644
--- a/docs/services/redis/index.html
+++ b/docs/services/redis/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Redis | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/redis"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta d [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/rocksdb/index.html b/docs/services/rocksdb/index.html
index faae1f299..f05dbc3e3 100644
--- a/docs/services/rocksdb/index.html
+++ b/docs/services/rocksdb/index.html
@@ -5,7 +5,7 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">RocksDB | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/rocksdb"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><me [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
@@ -13,8 +13,8 @@
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
issues. It is advisable to follow the steps provided in the <a href="https://github.com/facebook/rocksdb/blob/main/INSTALL.md" target="_blank" rel="noopener noreferrer"><code>INSTALL</code></a>
file to build rocksdb, rather than relying on system libraries that
-may be outdated and incompatible.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration"></a></h2><ul><li><code>root</code>: Set the working directory of <code>OpenDAL</code></li><li><code>datadir</code>: Set the path to the rocksdb data directory</li></ul><p>You can refer to <!-- -->[<code>RocksdbBuilder</code>]<!-- -->'s docs for mor [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+may be outdated and incompatible.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration"></a></h2><ul><li><code>root</code>: Set the working directory of <code>OpenDAL</code></li><li><code>datadir</code>: Set the path to the rocksdb data directory</li></ul><p>You can refer to <!-- -->[<code>RocksdbBuilder</code>]<!-- -->'s docs for mor [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/s3/index.html b/docs/services/s3/index.html
index c09cc1f48..3d4cf9419 100644
--- a/docs/services/s3/index.html
+++ b/docs/services/s3/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">S3 | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/s3"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/sftp/index.html b/docs/services/sftp/index.html
index 3cec385b7..3b1c43508 100644
--- a/docs/services/sftp/index.html
+++ b/docs/services/sftp/index.html
@@ -5,14 +5,14 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">SFTP | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/sftp"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-lots of files, you should pay attention to close the file after using it.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="capabilities">Capabilities<a href="#capabilities" class="hash-link" aria-label="Direct link to Capabilities" title="Direct link to Capabilities"></a></h2><p>This service can be used to:</p><ul class="contains-task-list containsTaskList_mC6p"><li class="task-list-item"><input type="checkbox" checked="" disabled=""> <!-- -->stat</li><li class="task-li [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+lots of files, you should pay attention to close the file after using it.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="capabilities">Capabilities<a href="#capabilities" class="hash-link" aria-label="Direct link to Capabilities" title="Direct link to Capabilities"></a></h2><p>This service can be used to:</p><ul class="contains-task-list containsTaskList_mC6p"><li class="task-list-item"><input type="checkbox" checked="" disabled=""> <!-- -->stat</li><li class="task-li [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/sled/index.html b/docs/services/sled/index.html
index d19e33a02..ecf635851 100644
--- a/docs/services/sled/index.html
+++ b/docs/services/sled/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Sled | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/sled"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/services/webhdfs/index.html b/docs/services/webhdfs/index.html
index 7a6096523..bda5469bb 100644
--- a/docs/services/webhdfs/index.html
+++ b/docs/services/webhdfs/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">WebHDFS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/webhdfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><me [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/docs/vision/index.html b/docs/vision/index.html
index 7250c9de1..f020b60fb 100644
--- a/docs/vision/index.html
+++ b/docs/vision/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Vision | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/vision"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh= [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/download/index.html b/download/index.html
index cab36b19d..ec823903e 100644
--- a/download/index.html
+++ b/download/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Download | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/download"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/index.html b/index.html
index 96a006141..6c1527db5 100644
--- a/index.html
+++ b/index.html
@@ -5,13 +5,13 @@
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">Apache OpenDAL</title><meta data-rh="true" property="og:title" content="Apache OpenDAL"><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docse [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.411809a4.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.7e185f83.js" as="script">
<link rel="preload" href="/assets/js/main.33d8db5d.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div id="__docusaurus-base-url-issue-banner-container"></div><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria [...]
-<script src="/assets/js/runtime~main.411809a4.js"></script>
+<script src="/assets/js/runtime~main.7e185f83.js"></script>
<script src="/assets/js/main.33d8db5d.js"></script>
</body>
</html>
\ No newline at end of file