opendal 0.1.8 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (717) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -1
  3. data/Cargo.lock +3469 -0
  4. data/Cargo.toml +1 -1
  5. data/DEPENDENCIES.rust.tsv +51 -48
  6. data/LICENSE +201 -0
  7. data/LICENSE-MPL-2.0.txt +373 -0
  8. data/NOTICE +5 -0
  9. data/README.md +4 -1
  10. data/Rakefile +0 -7
  11. data/core/CHANGELOG.md +173 -0
  12. data/core/Cargo.lock +545 -625
  13. data/core/Cargo.toml +99 -96
  14. data/core/DEPENDENCIES.rust.tsv +289 -324
  15. data/core/NOTICE +5 -0
  16. data/core/README.md +11 -6
  17. data/core/benches/vs_fs/Cargo.toml +1 -1
  18. data/core/benches/vs_s3/Cargo.toml +1 -1
  19. data/core/core/Cargo.toml +3 -3
  20. data/core/core/LICENSE +201 -0
  21. data/core/core/NOTICE +5 -0
  22. data/core/core/README.md +93 -0
  23. data/core/core/src/blocking/delete.rs +2 -2
  24. data/core/core/src/blocking/list.rs +2 -1
  25. data/core/core/src/blocking/operator.rs +10 -5
  26. data/core/core/src/blocking/read/std_bytes_iterator.rs +2 -1
  27. data/core/core/src/blocking/read/std_reader.rs +2 -1
  28. data/core/core/src/blocking/write/std_writer.rs +1 -1
  29. data/core/core/src/docs/performance/http_optimization.md +9 -1
  30. data/core/core/src/docs/rfcs/7749_http_transporter.md +9 -5
  31. data/core/core/src/docs/rfcs/7948_s3_provider_presets.md +254 -0
  32. data/core/core/src/docs/rfcs/mod.rs +4 -0
  33. data/core/core/src/layers/mod.rs +6 -1
  34. data/core/core/src/lib.rs +2 -137
  35. data/core/core/src/raw/accessor.rs +23 -21
  36. data/core/core/src/raw/oio/buf/queue_buf.rs +4 -2
  37. data/core/core/src/raw/oio/read/position_read.rs +1 -1
  38. data/core/core/src/raw/oio/write/block_write.rs +3 -2
  39. data/core/core/src/raw/oio/write/multipart_write.rs +1 -1
  40. data/core/core/src/raw/operation.rs +5 -5
  41. data/core/core/src/raw/ops.rs +89 -64
  42. data/core/core/src/raw/std_io_util.rs +33 -1
  43. data/core/core/src/services/memory/backend.rs +0 -1
  44. data/core/core/src/services/memory/mod.rs +6 -2
  45. data/core/core/src/services/mod.rs +8 -2
  46. data/core/core/src/types/buffer.rs +106 -16
  47. data/core/core/src/types/builder.rs +15 -17
  48. data/core/core/src/types/bytes_range.rs +20 -1
  49. data/core/core/src/types/context/write.rs +1 -1
  50. data/core/core/src/types/copy.rs +3 -3
  51. data/core/core/src/types/entry.rs +3 -1
  52. data/core/core/src/types/error.rs +16 -11
  53. data/core/core/src/types/execute/executors/mod.rs +3 -3
  54. data/core/core/src/types/http_transport/mod.rs +6 -0
  55. data/core/core/src/types/list.rs +5 -6
  56. data/core/core/src/types/operator/info.rs +6 -4
  57. data/core/core/src/types/operator/mod.rs +1 -1
  58. data/core/core/src/types/operator/operator.rs +42 -8
  59. data/core/core/src/types/operator/operator_futures.rs +42 -41
  60. data/core/core/src/types/operator/registry.rs +73 -14
  61. data/core/core/src/types/options.rs +58 -46
  62. data/core/core/src/types/read/reader.rs +11 -1
  63. data/core/core/src/types/write/writer.rs +2 -1
  64. data/core/http-transports/reqwest/Cargo.toml +2 -1
  65. data/core/http-transports/reqwest/LICENSE +201 -0
  66. data/core/http-transports/reqwest/NOTICE +5 -0
  67. data/core/http-transports/reqwest/README.md +37 -9
  68. data/core/http-transports/reqwest/src/lib.rs +30 -51
  69. data/core/layers/async-backtrace/Cargo.toml +3 -2
  70. data/core/layers/async-backtrace/LICENSE +201 -0
  71. data/core/layers/async-backtrace/NOTICE +5 -0
  72. data/core/layers/async-backtrace/README.md +48 -0
  73. data/core/layers/async-backtrace/src/lib.rs +5 -5
  74. data/core/layers/await-tree/Cargo.toml +3 -2
  75. data/core/layers/await-tree/LICENSE +201 -0
  76. data/core/layers/await-tree/NOTICE +5 -0
  77. data/core/layers/await-tree/README.md +48 -0
  78. data/core/layers/await-tree/src/lib.rs +5 -6
  79. data/core/layers/capability-check/Cargo.toml +3 -2
  80. data/core/layers/capability-check/LICENSE +201 -0
  81. data/core/layers/capability-check/NOTICE +5 -0
  82. data/core/layers/capability-check/README.md +48 -0
  83. data/core/layers/capability-check/src/lib.rs +7 -8
  84. data/core/layers/chaos/Cargo.toml +3 -2
  85. data/core/layers/chaos/LICENSE +201 -0
  86. data/core/layers/chaos/NOTICE +5 -0
  87. data/core/layers/chaos/README.md +47 -0
  88. data/core/layers/chaos/src/lib.rs +6 -7
  89. data/core/layers/concurrent-limit/Cargo.toml +4 -3
  90. data/core/layers/concurrent-limit/LICENSE +201 -0
  91. data/core/layers/concurrent-limit/NOTICE +5 -0
  92. data/core/layers/concurrent-limit/README.md +48 -0
  93. data/core/layers/concurrent-limit/src/lib.rs +11 -17
  94. data/core/layers/dtrace/Cargo.toml +3 -2
  95. data/core/layers/dtrace/LICENSE +201 -0
  96. data/core/layers/dtrace/NOTICE +5 -0
  97. data/core/layers/dtrace/README.md +52 -0
  98. data/core/layers/dtrace/src/lib.rs +5 -5
  99. data/core/layers/fastmetrics/Cargo.toml +4 -3
  100. data/core/layers/fastmetrics/LICENSE +201 -0
  101. data/core/layers/fastmetrics/NOTICE +5 -0
  102. data/core/layers/fastmetrics/README.md +47 -0
  103. data/core/layers/fastmetrics/src/lib.rs +4 -4
  104. data/core/layers/fastrace/Cargo.toml +3 -2
  105. data/core/layers/fastrace/LICENSE +201 -0
  106. data/core/layers/fastrace/NOTICE +5 -0
  107. data/core/layers/fastrace/README.md +47 -0
  108. data/core/layers/fastrace/src/lib.rs +5 -5
  109. data/core/layers/foyer/Cargo.toml +3 -2
  110. data/core/layers/foyer/LICENSE +201 -0
  111. data/core/layers/foyer/NOTICE +5 -0
  112. data/core/layers/foyer/README.md +47 -0
  113. data/core/layers/foyer/src/deleter.rs +1 -0
  114. data/core/layers/foyer/src/lib.rs +27 -10
  115. data/core/layers/foyer/src/writer.rs +1 -0
  116. data/core/layers/hotpath/Cargo.toml +4 -3
  117. data/core/layers/hotpath/LICENSE +201 -0
  118. data/core/layers/hotpath/NOTICE +5 -0
  119. data/core/layers/hotpath/README.md +47 -0
  120. data/core/layers/hotpath/src/lib.rs +4 -4
  121. data/core/layers/immutable-index/Cargo.toml +3 -2
  122. data/core/layers/immutable-index/LICENSE +201 -0
  123. data/core/layers/immutable-index/NOTICE +5 -0
  124. data/core/layers/immutable-index/README.md +48 -0
  125. data/core/layers/immutable-index/src/lib.rs +3 -4
  126. data/core/layers/logging/Cargo.toml +3 -2
  127. data/core/layers/logging/LICENSE +201 -0
  128. data/core/layers/logging/NOTICE +5 -0
  129. data/core/layers/logging/README.md +47 -0
  130. data/core/layers/logging/src/lib.rs +11 -11
  131. data/core/layers/metrics/Cargo.toml +4 -3
  132. data/core/layers/metrics/LICENSE +201 -0
  133. data/core/layers/metrics/NOTICE +5 -0
  134. data/core/layers/metrics/README.md +47 -0
  135. data/core/layers/metrics/src/lib.rs +6 -6
  136. data/core/layers/mime-guess/Cargo.toml +3 -2
  137. data/core/layers/mime-guess/LICENSE +201 -0
  138. data/core/layers/mime-guess/NOTICE +5 -0
  139. data/core/layers/mime-guess/README.md +47 -0
  140. data/core/layers/mime-guess/src/lib.rs +13 -17
  141. data/core/layers/observe-metrics-common/Cargo.toml +2 -1
  142. data/core/layers/observe-metrics-common/LICENSE +201 -0
  143. data/core/layers/observe-metrics-common/NOTICE +5 -0
  144. data/core/layers/observe-metrics-common/README.md +27 -0
  145. data/core/layers/observe-metrics-common/src/lib.rs +15 -9
  146. data/core/layers/otelmetrics/Cargo.toml +4 -3
  147. data/core/layers/otelmetrics/LICENSE +201 -0
  148. data/core/layers/otelmetrics/NOTICE +5 -0
  149. data/core/layers/otelmetrics/README.md +47 -0
  150. data/core/layers/otelmetrics/src/lib.rs +4 -4
  151. data/core/layers/oteltrace/Cargo.toml +3 -2
  152. data/core/layers/oteltrace/LICENSE +201 -0
  153. data/core/layers/oteltrace/NOTICE +5 -0
  154. data/core/layers/oteltrace/README.md +48 -0
  155. data/core/layers/oteltrace/src/lib.rs +13 -4
  156. data/core/layers/prometheus/Cargo.toml +4 -3
  157. data/core/layers/prometheus/LICENSE +201 -0
  158. data/core/layers/prometheus/NOTICE +5 -0
  159. data/core/layers/prometheus/README.md +47 -0
  160. data/core/layers/prometheus/src/lib.rs +4 -4
  161. data/core/layers/prometheus-client/Cargo.toml +4 -3
  162. data/core/layers/prometheus-client/LICENSE +201 -0
  163. data/core/layers/prometheus-client/NOTICE +5 -0
  164. data/core/layers/prometheus-client/README.md +48 -0
  165. data/core/layers/prometheus-client/src/lib.rs +4 -4
  166. data/core/layers/retry/Cargo.toml +5 -4
  167. data/core/layers/retry/LICENSE +201 -0
  168. data/core/layers/retry/NOTICE +5 -0
  169. data/core/layers/retry/README.md +50 -0
  170. data/core/layers/retry/src/lib.rs +6 -7
  171. data/core/layers/route/Cargo.toml +4 -3
  172. data/core/layers/route/LICENSE +201 -0
  173. data/core/layers/route/NOTICE +5 -0
  174. data/core/layers/route/README.md +58 -0
  175. data/core/layers/route/src/lib.rs +39 -9
  176. data/core/layers/tail-cut/Cargo.toml +3 -2
  177. data/core/layers/tail-cut/LICENSE +201 -0
  178. data/core/layers/tail-cut/NOTICE +5 -0
  179. data/core/layers/tail-cut/README.md +47 -0
  180. data/core/layers/tail-cut/src/lib.rs +7 -9
  181. data/core/layers/throttle/Cargo.toml +3 -2
  182. data/core/layers/throttle/LICENSE +201 -0
  183. data/core/layers/throttle/NOTICE +5 -0
  184. data/core/layers/throttle/README.md +47 -0
  185. data/core/layers/throttle/src/lib.rs +5 -7
  186. data/core/layers/timeout/Cargo.toml +4 -3
  187. data/core/layers/timeout/LICENSE +201 -0
  188. data/core/layers/timeout/NOTICE +5 -0
  189. data/core/layers/timeout/README.md +50 -0
  190. data/core/layers/timeout/src/lib.rs +9 -10
  191. data/core/layers/tracing/Cargo.toml +3 -2
  192. data/core/layers/tracing/LICENSE +201 -0
  193. data/core/layers/tracing/NOTICE +5 -0
  194. data/core/layers/tracing/README.md +47 -0
  195. data/core/layers/tracing/src/lib.rs +4 -4
  196. data/core/services/aliyun-drive/Cargo.toml +3 -2
  197. data/core/services/aliyun-drive/LICENSE +201 -0
  198. data/core/services/aliyun-drive/NOTICE +5 -0
  199. data/core/services/aliyun-drive/README.md +56 -0
  200. data/core/services/aliyun-drive/src/backend.rs +3 -3
  201. data/core/services/aliyun-drive/src/core.rs +1 -1
  202. data/core/services/aliyun-drive/src/docs.md +7 -9
  203. data/core/services/aliyun-drive/src/lib.rs +12 -2
  204. data/core/services/aliyun-drive/src/lister.rs +2 -2
  205. data/core/services/alluxio/Cargo.toml +2 -1
  206. data/core/services/alluxio/LICENSE +201 -0
  207. data/core/services/alluxio/NOTICE +5 -0
  208. data/core/services/alluxio/README.md +56 -0
  209. data/core/services/alluxio/src/backend.rs +3 -3
  210. data/core/services/alluxio/src/docs.md +7 -5
  211. data/core/services/alluxio/src/lib.rs +12 -2
  212. data/core/services/azblob/Cargo.toml +6 -5
  213. data/core/services/azblob/LICENSE +201 -0
  214. data/core/services/azblob/NOTICE +5 -0
  215. data/core/services/azblob/README.md +56 -0
  216. data/core/services/azblob/src/backend.rs +4 -3
  217. data/core/services/azblob/src/core.rs +23 -4
  218. data/core/services/azblob/src/docs.md +7 -9
  219. data/core/services/azblob/src/lib.rs +14 -2
  220. data/core/services/azdls/Cargo.toml +7 -6
  221. data/core/services/azdls/LICENSE +201 -0
  222. data/core/services/azdls/NOTICE +5 -0
  223. data/core/services/azdls/README.md +56 -0
  224. data/core/services/azdls/src/backend.rs +3 -3
  225. data/core/services/azdls/src/core.rs +1 -0
  226. data/core/services/azdls/src/docs.md +7 -8
  227. data/core/services/azdls/src/lib.rs +12 -2
  228. data/core/services/azdls/src/lister.rs +1 -1
  229. data/core/services/azdls/src/writer.rs +1 -1
  230. data/core/services/azfile/Cargo.toml +6 -5
  231. data/core/services/azfile/LICENSE +201 -0
  232. data/core/services/azfile/NOTICE +5 -0
  233. data/core/services/azfile/README.md +56 -0
  234. data/core/services/azfile/src/backend.rs +2 -2
  235. data/core/services/azfile/src/core.rs +1 -1
  236. data/core/services/azfile/src/docs.md +7 -8
  237. data/core/services/azfile/src/lib.rs +12 -2
  238. data/core/services/azure-common/Cargo.toml +2 -1
  239. data/core/services/azure-common/LICENSE +201 -0
  240. data/core/services/azure-common/NOTICE +5 -0
  241. data/core/services/azure-common/README.md +26 -0
  242. data/core/services/azure-common/src/lib.rs +2 -5
  243. data/core/services/b2/Cargo.toml +3 -2
  244. data/core/services/b2/LICENSE +201 -0
  245. data/core/services/b2/NOTICE +5 -0
  246. data/core/services/b2/README.md +56 -0
  247. data/core/services/b2/src/backend.rs +17 -8
  248. data/core/services/b2/src/core.rs +1 -1
  249. data/core/services/b2/src/docs.md +7 -8
  250. data/core/services/b2/src/lib.rs +9 -3
  251. data/core/services/cacache/Cargo.toml +2 -1
  252. data/core/services/cacache/LICENSE +201 -0
  253. data/core/services/cacache/NOTICE +5 -0
  254. data/core/services/cacache/README.md +56 -0
  255. data/core/services/cacache/src/backend.rs +0 -1
  256. data/core/services/cacache/src/docs.md +7 -4
  257. data/core/services/cacache/src/lib.rs +9 -4
  258. data/core/services/cloudflare-kv/Cargo.toml +2 -1
  259. data/core/services/cloudflare-kv/LICENSE +201 -0
  260. data/core/services/cloudflare-kv/NOTICE +5 -0
  261. data/core/services/cloudflare-kv/README.md +56 -0
  262. data/core/services/cloudflare-kv/src/backend.rs +0 -2
  263. data/core/services/cloudflare-kv/src/docs.md +7 -5
  264. data/core/services/cloudflare-kv/src/lib.rs +9 -3
  265. data/core/services/cloudflare-kv/src/lister.rs +48 -2
  266. data/core/services/compfs/Cargo.toml +2 -1
  267. data/core/services/compfs/LICENSE +201 -0
  268. data/core/services/compfs/NOTICE +5 -0
  269. data/core/services/compfs/README.md +58 -0
  270. data/core/services/compfs/src/lib.rs +9 -3
  271. data/core/services/cos/Cargo.toml +5 -4
  272. data/core/services/cos/LICENSE +201 -0
  273. data/core/services/cos/NOTICE +5 -0
  274. data/core/services/cos/README.md +56 -0
  275. data/core/services/cos/src/backend.rs +94 -11
  276. data/core/services/cos/src/core.rs +22 -4
  277. data/core/services/cos/src/docs.md +7 -9
  278. data/core/services/cos/src/lib.rs +12 -2
  279. data/core/services/cos/src/writer.rs +1 -1
  280. data/core/services/d1/Cargo.toml +2 -1
  281. data/core/services/d1/LICENSE +201 -0
  282. data/core/services/d1/NOTICE +5 -0
  283. data/core/services/d1/README.md +56 -0
  284. data/core/services/d1/src/core.rs +3 -3
  285. data/core/services/d1/src/docs.md +7 -8
  286. data/core/services/d1/src/lib.rs +9 -3
  287. data/core/services/dashmap/Cargo.toml +2 -1
  288. data/core/services/dashmap/LICENSE +201 -0
  289. data/core/services/dashmap/NOTICE +5 -0
  290. data/core/services/dashmap/README.md +56 -0
  291. data/core/services/dashmap/src/backend.rs +1 -2
  292. data/core/services/dashmap/src/docs.md +7 -4
  293. data/core/services/dashmap/src/lib.rs +9 -4
  294. data/core/services/dbfs/Cargo.toml +2 -1
  295. data/core/services/dbfs/LICENSE +201 -0
  296. data/core/services/dbfs/NOTICE +5 -0
  297. data/core/services/dbfs/README.md +56 -0
  298. data/core/services/dbfs/src/backend.rs +2 -2
  299. data/core/services/dbfs/src/core.rs +6 -6
  300. data/core/services/dbfs/src/docs.md +7 -6
  301. data/core/services/dbfs/src/lib.rs +9 -4
  302. data/core/services/dbfs/src/lister.rs +3 -2
  303. data/core/services/dropbox/Cargo.toml +3 -2
  304. data/core/services/dropbox/LICENSE +201 -0
  305. data/core/services/dropbox/NOTICE +5 -0
  306. data/core/services/dropbox/README.md +56 -0
  307. data/core/services/dropbox/src/backend.rs +1 -1
  308. data/core/services/dropbox/src/core.rs +1 -1
  309. data/core/services/dropbox/src/docs.md +7 -4
  310. data/core/services/dropbox/src/lib.rs +9 -4
  311. data/core/services/etcd/Cargo.toml +2 -1
  312. data/core/services/etcd/LICENSE +201 -0
  313. data/core/services/etcd/NOTICE +5 -0
  314. data/core/services/etcd/README.md +56 -0
  315. data/core/services/etcd/src/docs.md +7 -10
  316. data/core/services/etcd/src/lib.rs +9 -4
  317. data/core/services/foundationdb/Cargo.toml +2 -1
  318. data/core/services/foundationdb/LICENSE +201 -0
  319. data/core/services/foundationdb/NOTICE +5 -0
  320. data/core/services/foundationdb/README.md +56 -0
  321. data/core/services/foundationdb/src/docs.md +7 -5
  322. data/core/services/foundationdb/src/lib.rs +9 -4
  323. data/core/services/foyer/Cargo.toml +4 -3
  324. data/core/services/foyer/LICENSE +201 -0
  325. data/core/services/foyer/NOTICE +5 -0
  326. data/core/services/foyer/README.md +57 -0
  327. data/core/services/foyer/src/backend.rs +1 -1
  328. data/core/services/foyer/src/docs.md +12 -1
  329. data/core/services/foyer/src/lib.rs +9 -11
  330. data/core/services/fs/Cargo.toml +2 -1
  331. data/core/services/fs/LICENSE +201 -0
  332. data/core/services/fs/NOTICE +5 -0
  333. data/core/services/fs/README.md +56 -0
  334. data/core/services/fs/src/backend.rs +1 -1
  335. data/core/services/fs/src/docs.md +7 -5
  336. data/core/services/fs/src/lib.rs +9 -3
  337. data/core/services/ftp/Cargo.toml +2 -1
  338. data/core/services/ftp/LICENSE +201 -0
  339. data/core/services/ftp/NOTICE +5 -0
  340. data/core/services/ftp/README.md +56 -0
  341. data/core/services/ftp/src/backend.rs +1 -1
  342. data/core/services/ftp/src/docs.md +7 -7
  343. data/core/services/ftp/src/lib.rs +12 -2
  344. data/core/services/ftp/src/lister.rs +1 -1
  345. data/core/services/gcs/Cargo.toml +5 -4
  346. data/core/services/gcs/LICENSE +201 -0
  347. data/core/services/gcs/NOTICE +5 -0
  348. data/core/services/gcs/README.md +56 -0
  349. data/core/services/gcs/src/core.rs +55 -1
  350. data/core/services/gcs/src/docs.md +7 -13
  351. data/core/services/gcs/src/lib.rs +9 -3
  352. data/core/services/gcs/src/writer.rs +5 -12
  353. data/core/services/gdrive/Cargo.toml +3 -2
  354. data/core/services/gdrive/LICENSE +201 -0
  355. data/core/services/gdrive/NOTICE +5 -0
  356. data/core/services/gdrive/README.md +56 -0
  357. data/core/services/gdrive/src/backend.rs +1 -1
  358. data/core/services/gdrive/src/core.rs +1 -1
  359. data/core/services/gdrive/src/docs.md +8 -5
  360. data/core/services/gdrive/src/lib.rs +12 -2
  361. data/core/services/gdrive/src/lister.rs +8 -8
  362. data/core/services/gdrive/src/path_index.rs +2 -2
  363. data/core/services/ghac/Cargo.toml +5 -4
  364. data/core/services/ghac/LICENSE +201 -0
  365. data/core/services/ghac/NOTICE +5 -0
  366. data/core/services/ghac/README.md +56 -0
  367. data/core/services/ghac/src/docs.md +7 -4
  368. data/core/services/ghac/src/lib.rs +12 -2
  369. data/core/services/github/Cargo.toml +2 -1
  370. data/core/services/github/LICENSE +201 -0
  371. data/core/services/github/NOTICE +5 -0
  372. data/core/services/github/README.md +56 -0
  373. data/core/services/github/src/backend.rs +4 -4
  374. data/core/services/github/src/docs.md +7 -8
  375. data/core/services/github/src/lib.rs +12 -2
  376. data/core/services/github/src/lister.rs +1 -1
  377. data/core/services/goosefs/Cargo.toml +4 -3
  378. data/core/services/goosefs/LICENSE +201 -0
  379. data/core/services/goosefs/NOTICE +5 -0
  380. data/core/services/goosefs/README.md +56 -0
  381. data/core/services/goosefs/src/backend.rs +31 -12
  382. data/core/services/goosefs/src/config.rs +1 -1
  383. data/core/services/goosefs/src/core.rs +72 -25
  384. data/core/services/goosefs/src/docs.md +10 -10
  385. data/core/services/goosefs/src/lib.rs +12 -2
  386. data/core/services/goosefs/src/writer.rs +24 -20
  387. data/core/services/goosefs/tests/safe_conditional_put.rs +199 -0
  388. data/core/services/gridfs/Cargo.toml +3 -2
  389. data/core/services/gridfs/LICENSE +201 -0
  390. data/core/services/gridfs/NOTICE +5 -0
  391. data/core/services/gridfs/README.md +56 -0
  392. data/core/services/gridfs/src/backend.rs +6 -3
  393. data/core/services/gridfs/src/core.rs +1 -1
  394. data/core/services/gridfs/src/docs.md +7 -6
  395. data/core/services/gridfs/src/lib.rs +9 -4
  396. data/core/services/hdfs/Cargo.toml +2 -1
  397. data/core/services/hdfs/LICENSE +201 -0
  398. data/core/services/hdfs/NOTICE +5 -0
  399. data/core/services/hdfs/README.md +58 -0
  400. data/core/services/hdfs/src/backend.rs +1 -1
  401. data/core/services/hdfs/src/docs.md +9 -9
  402. data/core/services/hdfs/src/lib.rs +12 -2
  403. data/core/services/hdfs-native/Cargo.toml +3 -2
  404. data/core/services/hdfs-native/LICENSE +201 -0
  405. data/core/services/hdfs-native/NOTICE +5 -0
  406. data/core/services/hdfs-native/README.md +56 -0
  407. data/core/services/hdfs-native/src/backend.rs +3 -2
  408. data/core/services/hdfs-native/src/docs.md +7 -4
  409. data/core/services/hdfs-native/src/lib.rs +12 -2
  410. data/core/services/hdfs-native/src/writer.rs +1 -1
  411. data/core/services/hf/Cargo.toml +3 -2
  412. data/core/services/hf/LICENSE +201 -0
  413. data/core/services/hf/NOTICE +5 -0
  414. data/core/services/hf/README.md +56 -0
  415. data/core/services/hf/src/backend.rs +12 -9
  416. data/core/services/hf/src/config.rs +1 -1
  417. data/core/services/hf/src/core.rs +28 -24
  418. data/core/services/hf/src/docs.md +11 -12
  419. data/core/services/hf/src/lib.rs +13 -3
  420. data/core/services/hf/src/lister.rs +1 -1
  421. data/core/services/http/Cargo.toml +4 -3
  422. data/core/services/http/LICENSE +201 -0
  423. data/core/services/http/NOTICE +5 -0
  424. data/core/services/http/README.md +56 -0
  425. data/core/services/http/src/backend.rs +1 -1
  426. data/core/services/http/src/docs.md +7 -5
  427. data/core/services/http/src/lib.rs +10 -4
  428. data/core/services/ipfs/Cargo.toml +2 -1
  429. data/core/services/ipfs/LICENSE +201 -0
  430. data/core/services/ipfs/NOTICE +5 -0
  431. data/core/services/ipfs/README.md +56 -0
  432. data/core/services/ipfs/src/backend.rs +16 -8
  433. data/core/services/ipfs/src/docs.md +7 -5
  434. data/core/services/ipfs/src/lib.rs +9 -3
  435. data/core/services/ipmfs/Cargo.toml +2 -1
  436. data/core/services/ipmfs/LICENSE +201 -0
  437. data/core/services/ipmfs/NOTICE +5 -0
  438. data/core/services/ipmfs/README.md +56 -0
  439. data/core/services/ipmfs/src/docs.md +10 -1
  440. data/core/services/ipmfs/src/lib.rs +12 -2
  441. data/core/services/ipmfs/src/lister.rs +7 -4
  442. data/core/services/koofr/Cargo.toml +3 -2
  443. data/core/services/koofr/LICENSE +201 -0
  444. data/core/services/koofr/NOTICE +5 -0
  445. data/core/services/koofr/README.md +56 -0
  446. data/core/services/koofr/src/backend.rs +6 -6
  447. data/core/services/koofr/src/core.rs +2 -2
  448. data/core/services/koofr/src/docs.md +7 -7
  449. data/core/services/koofr/src/lib.rs +12 -2
  450. data/core/services/lakefs/Cargo.toml +2 -1
  451. data/core/services/lakefs/LICENSE +201 -0
  452. data/core/services/lakefs/NOTICE +5 -0
  453. data/core/services/lakefs/README.md +56 -0
  454. data/core/services/lakefs/src/backend.rs +5 -5
  455. data/core/services/lakefs/src/core.rs +1 -1
  456. data/core/services/lakefs/src/docs.md +7 -9
  457. data/core/services/lakefs/src/lib.rs +9 -4
  458. data/core/services/lakefs/src/lister.rs +7 -4
  459. data/core/services/memcached/Cargo.toml +3 -2
  460. data/core/services/memcached/LICENSE +201 -0
  461. data/core/services/memcached/NOTICE +5 -0
  462. data/core/services/memcached/README.md +56 -0
  463. data/core/services/memcached/src/docs.md +7 -8
  464. data/core/services/memcached/src/lib.rs +9 -4
  465. data/core/services/mini_moka/Cargo.toml +2 -1
  466. data/core/services/mini_moka/LICENSE +201 -0
  467. data/core/services/mini_moka/NOTICE +5 -0
  468. data/core/services/mini_moka/README.md +56 -0
  469. data/core/services/mini_moka/src/backend.rs +1 -1
  470. data/core/services/mini_moka/src/docs.md +10 -1
  471. data/core/services/mini_moka/src/lib.rs +9 -4
  472. data/core/services/moka/Cargo.toml +2 -1
  473. data/core/services/moka/LICENSE +201 -0
  474. data/core/services/moka/NOTICE +5 -0
  475. data/core/services/moka/README.md +56 -0
  476. data/core/services/moka/src/backend.rs +1 -2
  477. data/core/services/moka/src/docs.md +7 -7
  478. data/core/services/moka/src/lib.rs +9 -3
  479. data/core/services/mongodb/Cargo.toml +3 -2
  480. data/core/services/mongodb/LICENSE +201 -0
  481. data/core/services/mongodb/NOTICE +5 -0
  482. data/core/services/mongodb/README.md +56 -0
  483. data/core/services/mongodb/src/backend.rs +1 -1
  484. data/core/services/mongodb/src/core.rs +1 -1
  485. data/core/services/mongodb/src/docs.md +7 -7
  486. data/core/services/mongodb/src/lib.rs +12 -2
  487. data/core/services/monoiofs/Cargo.toml +2 -1
  488. data/core/services/monoiofs/LICENSE +201 -0
  489. data/core/services/monoiofs/NOTICE +5 -0
  490. data/core/services/monoiofs/README.md +58 -0
  491. data/core/services/monoiofs/src/docs.md +7 -4
  492. data/core/services/monoiofs/src/lib.rs +9 -4
  493. data/core/services/mysql/Cargo.toml +3 -2
  494. data/core/services/mysql/LICENSE +201 -0
  495. data/core/services/mysql/NOTICE +5 -0
  496. data/core/services/mysql/README.md +56 -0
  497. data/core/services/mysql/src/backend.rs +1 -1
  498. data/core/services/mysql/src/core.rs +1 -1
  499. data/core/services/mysql/src/docs.md +7 -6
  500. data/core/services/mysql/src/lib.rs +12 -2
  501. data/core/services/obs/Cargo.toml +5 -4
  502. data/core/services/obs/LICENSE +201 -0
  503. data/core/services/obs/NOTICE +5 -0
  504. data/core/services/obs/README.md +56 -0
  505. data/core/services/obs/src/backend.rs +4 -4
  506. data/core/services/obs/src/core.rs +1 -1
  507. data/core/services/obs/src/docs.md +7 -9
  508. data/core/services/obs/src/lib.rs +12 -2
  509. data/core/services/onedrive/Cargo.toml +3 -2
  510. data/core/services/onedrive/LICENSE +201 -0
  511. data/core/services/onedrive/NOTICE +5 -0
  512. data/core/services/onedrive/README.md +56 -0
  513. data/core/services/onedrive/src/backend.rs +13 -16
  514. data/core/services/onedrive/src/config.rs +2 -2
  515. data/core/services/onedrive/src/core.rs +31 -38
  516. data/core/services/onedrive/src/docs.md +10 -10
  517. data/core/services/onedrive/src/graph_model.rs +10 -51
  518. data/core/services/onedrive/src/lib.rs +9 -3
  519. data/core/services/onedrive/src/lister.rs +47 -17
  520. data/core/services/onedrive/src/reader.rs +11 -0
  521. data/core/services/opfs/Cargo.toml +4 -1
  522. data/core/services/opfs/LICENSE +201 -0
  523. data/core/services/opfs/NOTICE +5 -0
  524. data/core/services/opfs/README.md +63 -0
  525. data/core/services/opfs/src/core.rs +2 -0
  526. data/core/services/opfs/src/docs.md +7 -1
  527. data/core/services/opfs/src/lib.rs +11 -2
  528. data/core/services/oss/Cargo.toml +5 -4
  529. data/core/services/oss/LICENSE +201 -0
  530. data/core/services/oss/NOTICE +5 -0
  531. data/core/services/oss/README.md +56 -0
  532. data/core/services/oss/src/backend.rs +4 -4
  533. data/core/services/oss/src/core.rs +24 -12
  534. data/core/services/oss/src/docs.md +10 -22
  535. data/core/services/oss/src/lib.rs +9 -3
  536. data/core/services/oss/src/writer.rs +4 -10
  537. data/core/services/pcloud/Cargo.toml +2 -1
  538. data/core/services/pcloud/LICENSE +201 -0
  539. data/core/services/pcloud/NOTICE +5 -0
  540. data/core/services/pcloud/README.md +56 -0
  541. data/core/services/pcloud/src/backend.rs +3 -3
  542. data/core/services/pcloud/src/core.rs +2 -0
  543. data/core/services/pcloud/src/docs.md +7 -7
  544. data/core/services/pcloud/src/lib.rs +9 -3
  545. data/core/services/persy/Cargo.toml +2 -1
  546. data/core/services/persy/LICENSE +201 -0
  547. data/core/services/persy/NOTICE +5 -0
  548. data/core/services/persy/README.md +56 -0
  549. data/core/services/persy/src/backend.rs +0 -1
  550. data/core/services/persy/src/docs.md +7 -6
  551. data/core/services/persy/src/lib.rs +9 -3
  552. data/core/services/postgresql/Cargo.toml +3 -2
  553. data/core/services/postgresql/LICENSE +201 -0
  554. data/core/services/postgresql/NOTICE +5 -0
  555. data/core/services/postgresql/README.md +56 -0
  556. data/core/services/postgresql/src/backend.rs +1 -1
  557. data/core/services/postgresql/src/core.rs +1 -1
  558. data/core/services/postgresql/src/docs.md +7 -6
  559. data/core/services/postgresql/src/lib.rs +12 -2
  560. data/core/services/redb/Cargo.toml +2 -1
  561. data/core/services/redb/LICENSE +201 -0
  562. data/core/services/redb/NOTICE +5 -0
  563. data/core/services/redb/README.md +56 -0
  564. data/core/services/redb/src/backend.rs +0 -1
  565. data/core/services/redb/src/docs.md +7 -5
  566. data/core/services/redb/src/lib.rs +9 -3
  567. data/core/services/redis/Cargo.toml +2 -1
  568. data/core/services/redis/LICENSE +201 -0
  569. data/core/services/redis/NOTICE +5 -0
  570. data/core/services/redis/README.md +56 -0
  571. data/core/services/redis/src/docs.md +7 -9
  572. data/core/services/redis/src/lib.rs +9 -4
  573. data/core/services/rocksdb/Cargo.toml +2 -1
  574. data/core/services/rocksdb/LICENSE +201 -0
  575. data/core/services/rocksdb/NOTICE +5 -0
  576. data/core/services/rocksdb/README.md +56 -0
  577. data/core/services/rocksdb/src/backend.rs +0 -1
  578. data/core/services/rocksdb/src/docs.md +7 -5
  579. data/core/services/rocksdb/src/lib.rs +12 -2
  580. data/core/services/s3/Cargo.toml +5 -4
  581. data/core/services/s3/LICENSE +201 -0
  582. data/core/services/s3/NOTICE +5 -0
  583. data/core/services/s3/README.md +56 -0
  584. data/core/services/s3/src/backend.rs +89 -24
  585. data/core/services/s3/src/compatible_services.md +67 -2
  586. data/core/services/s3/src/config.rs +16 -0
  587. data/core/services/s3/src/core.rs +16 -8
  588. data/core/services/s3/src/docs.md +7 -28
  589. data/core/services/s3/src/lib.rs +9 -3
  590. data/core/services/s3/src/reader.rs +18 -1
  591. data/core/services/seafile/Cargo.toml +3 -2
  592. data/core/services/seafile/LICENSE +201 -0
  593. data/core/services/seafile/NOTICE +5 -0
  594. data/core/services/seafile/README.md +56 -0
  595. data/core/services/seafile/src/backend.rs +4 -4
  596. data/core/services/seafile/src/core.rs +1 -1
  597. data/core/services/seafile/src/docs.md +7 -8
  598. data/core/services/seafile/src/lib.rs +12 -2
  599. data/core/services/sftp/Cargo.toml +2 -1
  600. data/core/services/sftp/LICENSE +201 -0
  601. data/core/services/sftp/NOTICE +5 -0
  602. data/core/services/sftp/README.md +56 -0
  603. data/core/services/sftp/src/backend.rs +2 -2
  604. data/core/services/sftp/src/docs.md +7 -9
  605. data/core/services/sftp/src/lib.rs +9 -4
  606. data/core/services/sled/Cargo.toml +2 -1
  607. data/core/services/sled/LICENSE +201 -0
  608. data/core/services/sled/NOTICE +5 -0
  609. data/core/services/sled/README.md +56 -0
  610. data/core/services/sled/src/backend.rs +0 -1
  611. data/core/services/sled/src/docs.md +7 -4
  612. data/core/services/sled/src/lib.rs +12 -2
  613. data/core/services/sqlite/Cargo.toml +3 -2
  614. data/core/services/sqlite/LICENSE +201 -0
  615. data/core/services/sqlite/NOTICE +5 -0
  616. data/core/services/sqlite/README.md +56 -0
  617. data/core/services/sqlite/src/backend.rs +1 -2
  618. data/core/services/sqlite/src/core.rs +3 -3
  619. data/core/services/sqlite/src/docs.md +7 -6
  620. data/core/services/sqlite/src/lib.rs +12 -2
  621. data/core/services/surrealdb/Cargo.toml +3 -2
  622. data/core/services/surrealdb/LICENSE +201 -0
  623. data/core/services/surrealdb/NOTICE +5 -0
  624. data/core/services/surrealdb/README.md +56 -0
  625. data/core/services/surrealdb/src/backend.rs +1 -1
  626. data/core/services/surrealdb/src/core.rs +1 -1
  627. data/core/services/surrealdb/src/docs.md +8 -10
  628. data/core/services/surrealdb/src/lib.rs +9 -3
  629. data/core/services/swift/Cargo.toml +2 -1
  630. data/core/services/swift/LICENSE +201 -0
  631. data/core/services/swift/NOTICE +5 -0
  632. data/core/services/swift/README.md +56 -0
  633. data/core/services/swift/src/backend.rs +2 -2
  634. data/core/services/swift/src/core.rs +25 -25
  635. data/core/services/swift/src/deleter.rs +1 -1
  636. data/core/services/swift/src/docs.md +7 -6
  637. data/core/services/swift/src/lib.rs +9 -4
  638. data/core/services/swift/src/writer.rs +1 -1
  639. data/core/services/tikv/Cargo.toml +3 -2
  640. data/core/services/tikv/LICENSE +201 -0
  641. data/core/services/tikv/NOTICE +5 -0
  642. data/core/services/tikv/README.md +56 -0
  643. data/core/services/tikv/src/backend.rs +2 -2
  644. data/core/services/tikv/src/core.rs +1 -1
  645. data/core/services/tikv/src/docs.md +7 -8
  646. data/core/services/tikv/src/lib.rs +12 -2
  647. data/core/services/tos/Cargo.toml +5 -4
  648. data/core/services/tos/LICENSE +201 -0
  649. data/core/services/tos/NOTICE +5 -0
  650. data/core/services/tos/README.md +56 -0
  651. data/core/services/tos/src/backend.rs +32 -8
  652. data/core/services/tos/src/core.rs +35 -6
  653. data/core/services/tos/src/docs.md +8 -11
  654. data/core/services/tos/src/lib.rs +9 -3
  655. data/core/services/upyun/Cargo.toml +2 -1
  656. data/core/services/upyun/LICENSE +201 -0
  657. data/core/services/upyun/NOTICE +5 -0
  658. data/core/services/upyun/README.md +56 -0
  659. data/core/services/upyun/src/backend.rs +3 -3
  660. data/core/services/upyun/src/core.rs +28 -2
  661. data/core/services/upyun/src/docs.md +7 -7
  662. data/core/services/upyun/src/lib.rs +9 -4
  663. data/core/services/vercel-artifacts/Cargo.toml +2 -1
  664. data/core/services/vercel-artifacts/LICENSE +201 -0
  665. data/core/services/vercel-artifacts/NOTICE +5 -0
  666. data/core/services/vercel-artifacts/README.md +56 -0
  667. data/core/services/vercel-artifacts/src/docs.md +7 -7
  668. data/core/services/vercel-artifacts/src/lib.rs +11 -3
  669. data/core/services/vercel-blob/Cargo.toml +2 -1
  670. data/core/services/vercel-blob/LICENSE +201 -0
  671. data/core/services/vercel-blob/NOTICE +5 -0
  672. data/core/services/vercel-blob/README.md +56 -0
  673. data/core/services/vercel-blob/src/backend.rs +2 -2
  674. data/core/services/vercel-blob/src/core.rs +9 -4
  675. data/core/services/vercel-blob/src/docs.md +7 -5
  676. data/core/services/vercel-blob/src/lib.rs +12 -2
  677. data/core/services/vercel-blob/src/lister.rs +12 -3
  678. data/core/services/webdav/Cargo.toml +3 -2
  679. data/core/services/webdav/LICENSE +201 -0
  680. data/core/services/webdav/NOTICE +5 -0
  681. data/core/services/webdav/README.md +56 -0
  682. data/core/services/webdav/src/backend.rs +1 -1
  683. data/core/services/webdav/src/docs.md +7 -7
  684. data/core/services/webdav/src/lib.rs +12 -2
  685. data/core/services/webhdfs/Cargo.toml +3 -2
  686. data/core/services/webhdfs/LICENSE +201 -0
  687. data/core/services/webhdfs/NOTICE +5 -0
  688. data/core/services/webhdfs/README.md +56 -0
  689. data/core/services/webhdfs/src/backend.rs +1 -1
  690. data/core/services/webhdfs/src/core.rs +2 -2
  691. data/core/services/webhdfs/src/docs.md +11 -9
  692. data/core/services/webhdfs/src/lib.rs +12 -2
  693. data/core/services/webhdfs/src/writer.rs +7 -1
  694. data/core/services/yandex-disk/Cargo.toml +2 -1
  695. data/core/services/yandex-disk/LICENSE +201 -0
  696. data/core/services/yandex-disk/NOTICE +5 -0
  697. data/core/services/yandex-disk/README.md +56 -0
  698. data/core/services/yandex-disk/src/backend.rs +2 -2
  699. data/core/services/yandex-disk/src/docs.md +7 -5
  700. data/core/services/yandex-disk/src/lib.rs +9 -3
  701. data/core/services/yandex-disk/src/lister.rs +21 -8
  702. data/core/src/lib.rs +30 -4
  703. data/core/testkit/Cargo.toml +5 -4
  704. data/core/testkit/LICENSE +201 -0
  705. data/core/testkit/NOTICE +5 -0
  706. data/core/testkit/README.md +25 -0
  707. data/core/testkit/src/lib.rs +4 -2
  708. data/core/testkit/src/read.rs +12 -13
  709. data/core/testkit/src/utils.rs +53 -8
  710. data/core/testkit/src/write.rs +12 -13
  711. data/core/tests/behavior/async_list.rs +2 -2
  712. data/core/tests/behavior/async_presign.rs +4 -4
  713. data/core/tests/behavior/async_stat.rs +1 -1
  714. data/core/tests/behavior/async_write.rs +121 -2
  715. data/core/users.md +2 -0
  716. data/opendal.gemspec +5 -1
  717. metadata +287 -2
@@ -57,7 +57,10 @@ pub fn tests(op: &Operator, tests: &mut Vec<Trial>) {
57
57
  test_writer_futures_copy,
58
58
  test_writer_futures_copy_with_concurrent,
59
59
  test_writer_return_metadata,
60
- test_writer_write_non_contiguous_data
60
+ test_writer_write_non_contiguous_data,
61
+ test_writer_write_with_if_not_exists,
62
+ test_writer_write_with_if_none_match,
63
+ test_writer_write_with_if_match
61
64
  ))
62
65
  }
63
66
 
@@ -119,7 +122,7 @@ pub async fn test_write_with_special_chars(op: Operator) -> Result<()> {
119
122
  return Ok(());
120
123
  }
121
124
 
122
- let path = format!("{} !@#$%^&()_+-=;',.txt", uuid::Uuid::new_v4());
125
+ let path = format!("nested/{} !@#$%^&()_+-=;',.txt", uuid::Uuid::new_v4());
123
126
  let (path, content, size) = TEST_FIXTURE.new_file_with_path(op.clone(), &path);
124
127
 
125
128
  op.write(&path, content).await?;
@@ -810,6 +813,122 @@ pub async fn test_write_with_if_match(op: Operator) -> Result<()> {
810
813
  Ok(())
811
814
  }
812
815
 
816
+ /// Write an existing file through a chunked writer with if_not_exists should get a
817
+ /// ConditionNotMatch error.
818
+ pub async fn test_writer_write_with_if_not_exists(op: Operator) -> Result<()> {
819
+ let cap = op.info().capability();
820
+ if !cap.write_with_if_not_exists || !cap.write_can_multi {
821
+ return Ok(());
822
+ }
823
+
824
+ // GCS XML API multipart uploads do not support preconditions, so the multipart
825
+ // writer path cannot honor if_not_exists. Tracked in
826
+ // https://github.com/apache/opendal/issues/8040
827
+ #[cfg(feature = "services-gcs")]
828
+ if op.info().scheme() == services::GCS_SCHEME {
829
+ return Ok(());
830
+ }
831
+
832
+ let path = TEST_FIXTURE.new_file_path();
833
+ let content = gen_fixed_bytes(cap.write_multi_min_size.unwrap_or(1));
834
+
835
+ op.write(&path, content.clone())
836
+ .await
837
+ .expect("write must succeed");
838
+
839
+ // Some services reject the precondition when the writer is created or on an early
840
+ // write rather than at commit time
841
+ let res: opendal::Result<()> = async {
842
+ let mut w = op.writer_with(&path).if_not_exists(true).await?;
843
+ w.write(content.clone()).await?;
844
+ w.write(content.clone()).await?;
845
+ w.close().await?;
846
+ Ok(())
847
+ }
848
+ .await;
849
+ assert_eq!(res.unwrap_err().kind(), ErrorKind::ConditionNotMatch);
850
+
851
+ Ok(())
852
+ }
853
+
854
+ /// Write an existing file through a chunked writer with its own etag as if_none_match
855
+ /// should get a ConditionNotMatch error.
856
+ pub async fn test_writer_write_with_if_none_match(op: Operator) -> Result<()> {
857
+ let cap = op.info().capability();
858
+ if !cap.write_with_if_none_match || !cap.write_can_multi {
859
+ return Ok(());
860
+ }
861
+
862
+ let path = TEST_FIXTURE.new_file_path();
863
+ let content = gen_fixed_bytes(cap.write_multi_min_size.unwrap_or(1));
864
+
865
+ op.write(&path, content.clone())
866
+ .await
867
+ .expect("write must succeed");
868
+
869
+ let meta = op.stat(&path).await?;
870
+ let etag = meta.etag().expect("etag must exist");
871
+
872
+ let res: opendal::Result<()> = async {
873
+ let mut w = op.writer_with(&path).if_none_match(etag).await?;
874
+ w.write(content.clone()).await?;
875
+ w.write(content.clone()).await?;
876
+ w.close().await?;
877
+ Ok(())
878
+ }
879
+ .await;
880
+ assert_eq!(res.unwrap_err().kind(), ErrorKind::ConditionNotMatch);
881
+
882
+ Ok(())
883
+ }
884
+
885
+ /// Write a file through a chunked writer with if_match should succeed with the file's own
886
+ /// etag and get a ConditionNotMatch error with a stale one.
887
+ pub async fn test_writer_write_with_if_match(op: Operator) -> Result<()> {
888
+ let cap = op.info().capability();
889
+ if !cap.write_with_if_match || !cap.write_can_multi {
890
+ return Ok(());
891
+ }
892
+
893
+ let path_a = TEST_FIXTURE.new_file_path();
894
+ let content_a = gen_fixed_bytes(cap.write_multi_min_size.unwrap_or(1));
895
+ let (path_b, content_b, _) = TEST_FIXTURE.new_file(op.clone());
896
+
897
+ op.write(&path_a, content_a.clone()).await?;
898
+ op.write(&path_b, content_b.clone()).await?;
899
+
900
+ let etag_a = op
901
+ .stat(&path_a)
902
+ .await?
903
+ .etag()
904
+ .expect("etag must exist")
905
+ .to_string();
906
+ let etag_b = op
907
+ .stat(&path_b)
908
+ .await?
909
+ .etag()
910
+ .expect("etag must exist")
911
+ .to_string();
912
+
913
+ let mut w = op.writer_with(&path_a).if_match(&etag_a).await?;
914
+ w.write(content_a.clone()).await?;
915
+ w.write(content_a.clone()).await?;
916
+ w.close().await.expect("close with own etag must succeed");
917
+
918
+ // Should fail: writing to path_a with path_b's etag.
919
+ let res: opendal::Result<()> = async {
920
+ let mut w = op.writer_with(&path_a).if_match(&etag_b).await?;
921
+ w.write(content_a.clone()).await?;
922
+ w.write(content_a.clone()).await?;
923
+ w.close().await?;
924
+ Ok(())
925
+ }
926
+ .await;
927
+ assert_eq!(res.unwrap_err().kind(), ErrorKind::ConditionNotMatch);
928
+
929
+ Ok(())
930
+ }
931
+
813
932
  pub async fn test_writer_write_non_contiguous_data(op: Operator) -> Result<()> {
814
933
  let path = TEST_FIXTURE.new_file_path();
815
934
  let size = 1024 * 1024; // write file with 1 MiB
data/core/users.md CHANGED
@@ -5,6 +5,8 @@
5
5
  - [Databend](https://github.com/datafuselabs/databend/): A modern Elasticity and Performance cloud data warehouse.
6
6
  - [deepeth/mars](https://github.com/deepeth/mars): The powerful analysis platform to explore and visualize data from blockchain.
7
7
  - [GreptimeDB](https://github.com/GreptimeTeam/greptimedb): An open-source, cloud-native, distributed time-series database.
8
+ - [kunobi-kache](https://github.com/kunobi-ninja/kache): Zero-copy, content-addressed Rust build cache for Rust, C/C++ and more.
9
+ - [kvcache-ai/AgentENV](https://github.com/kvcache-ai/AgentENV): A distributed platform for running agent environments at scale.
8
10
  - [mozilla/sccache](https://github.com/mozilla/sccache/): `sccache` is [`ccache`](https://github.com/ccache/ccache) with cloud storage
9
11
  - [Noorle](https://noorle.com/): A managed runtime for AI agents; OpenDAL backs agents' files and memories on different storage providers.
10
12
  - [OctoBase](https://github.com/toeverything/OctoBase): the open-source database behind [AFFiNE](https://github.com/toeverything/affine), local-first, yet collaborative.
data/opendal.gemspec CHANGED
@@ -65,8 +65,12 @@ Gem::Specification.new do |spec|
65
65
  # the unpacked files when Bundler loads this gemspec from an installed gem.
66
66
  spec.files = Dir.chdir(__dir__) do
67
67
  git_files = tracked_files_or_glob.call(__dir__).reject do |f|
68
- f.start_with?(*%w[.bundle/ gems/ pkg/ target/ tmp/ .git/ vendor/]) || f.end_with?(*%w[.log .lock .tmp .bak]) || f == "."
68
+ f.start_with?(*%w[.bundle/ gems/ pkg/ target/ tmp/ .git/ vendor/]) ||
69
+ f.end_with?(*%w[.log .tmp .bak]) ||
70
+ (f.end_with?(".lock") && f != "Cargo.lock") ||
71
+ f == "."
69
72
  end
73
+ git_files |= ["Cargo.lock"] if File.file?("Cargo.lock")
70
74
 
71
75
  # When building release package, include core directory files for rake build
72
76
  distributed_core_dir = "core"