wlinna
04/27/2026, 11:04 AMjc
05/11/2026, 8:47 AMjc
05/13/2026, 5:08 PMXuanwo
05/13/2026, 7:58 PMPealsen
05/19/2026, 7:45 PMerickg
06/01/2026, 12:57 PMrubygems/release-gem@f0d7faff26625599a847d40d9fa28ace24c2aacc
- rubygems/configure-rubygems-credentials@762a4b77c3300434bb57c7ce80b20e36231927aa
Also listed [here](https://github.com/apache/opendal/pull/7672).~
I found what to do. Please ignore this message.chitralverma
06/02/2026, 4:22 AMQaz
06/13/2026, 2:09 PMXuanwo
06/13/2026, 2:11 PMQaz
06/14/2026, 3:32 PMQaz
06/14/2026, 3:32 PMrs
#[tokio::test]
async fn opendal_vs_tokio_write() {
// Payload of 1024 bytes
let mut payload = String::with_capacity(1024);
for _ in 0..payload.capacity() {
payload.push('A');
}
let payload: &'static str = payload.leak();
let total_files = 1000;
let runs = 10;
let root = "/tmp/ramdisk/files";
// OpenDAL
let op = Operator::new(services::Fs::default().root(root))
.expect("Failed to create operator")
.finish();
let mut opendal_elapsed = Duration::ZERO;
let mut tokio_elapsed = Duration::ZERO;
for _ in 0..runs {
let start_opendal = tokio::time::Instant::now();
for i in 0..total_files {
op.write(&i.to_string(), payload).await.unwrap();
}
for i in 0..total_files {
op.delete(&i.to_string()).await.unwrap();
}
let end_opendal = tokio::time::Instant::now();
// Tokio
for i in 0..total_files {
fs::write(&format!("{root}/{i}"), payload).await.unwrap();
}
for i in 0..total_files {
fs::remove_file(&format!("{root}/{i}")).await.unwrap();
}
let end_tokio = tokio::time::Instant::now();
opendal_elapsed += end_opendal - start_opendal;
tokio_elapsed += end_tokio - end_opendal;
}
let opendal_throughput = (total_files * runs) as f64 / opendal_elapsed.as_secs_f64();
let tokio_throughput = (total_files * runs) as f64 / tokio_elapsed.as_secs_f64();
println!(" Total files : {}", total_files);
println!(" Throughput OpenDAL : {}", opendal_throughput); // 5505.096180388658
println!(" Duration OpenDAL : {:?}", opendal_elapsed); // 181.649869ms
println!(" Throughput Tokio : {}", tokio_throughput); // 24910.126753685377
println!(" Duration Tokio : {:?}", tokio_elapsed); // 40.144316ms
}erickg
06/17/2026, 12:20 PMQaz
06/22/2026, 5:04 PMzhb
06/23/2026, 8:54 AMzhb
06/23/2026, 8:56 AMerickg
06/24/2026, 2:02 PMQaz
06/24/2026, 2:04 PMerickg
06/24/2026, 2:09 PMQaz
06/24/2026, 2:13 PMQaz
06/24/2026, 4:44 PMwrite_with_if_matchzhb
06/30/2026, 3:17 AMerickg
06/30/2026, 9:32 AMzhb
06/30/2026, 10:33 AMFatorin
07/06/2026, 8:12 AMQaz
07/11/2026, 8:36 AMmemory/backend.rs
rs
fn copy(
&self,
_: &OperationContext,
_: &str,
_: &str,
_: OpCopy,
_: OpCopier,
) -> Result<Self::Copier> {
Err(Error::new(
ErrorKind::Unsupported,
"operation is not supported",
))
}
async fn rename(
&self,
_: &OperationContext,
_: &str,
_: &str,
_: OpRename,
) -> Result<RpRename> {
Err(Error::new(
ErrorKind::Unsupported,
"operation is not supported",
))
}
The service's native capabilities also don't include rename or copy
rs
let capability = Capability {
read: true,
read_with_suffix: true,
write: true,
write_can_empty: true,
write_with_cache_control: true,
write_with_content_type: true,
write_with_content_disposition: true,
write_with_content_encoding: true,
write_with_if_not_exists: true,
delete: true,
stat: true,
list: true,
list_with_recursive: true,
shared: false,
..Default::default()
};
https://github.com/apache/opendal/issues/2483 "feature request: support copy and rename for memory services"
https://github.com/apache/opendal/pull/2513 "feat(adapters-kv): add rename and copy support to kv adapters"erickg
07/21/2026, 4:58 PMQaz
07/21/2026, 6:37 PMtrim21
08/21/2026, 11:08 AMAl
09/05/2026, 4:48 AMinclude_str! a CHANGELOG
error: couldn't read …/opendal-core-0.59.0/src/docs/../../../CHANGELOG.md: No such file or directory
--> opendal-core-0.59.0/src/docs/mod.rs:34
| #[doc = include_str!("../../../CHANGELOG.md")]
I have to use the git dependency to use opendalXuanwo
09/05/2026, 6:43 AM