Skip to content

The FsBackend only writes partial bytes and doesn't raise any errors #3052

@WenyXu

Description

@WenyXu

We designed some chaos tests, which simulate what problems will occur when the disk is full.

Prepares

fallocate -l 512K disk.img 
mkfs disk.img 
mkdir ./td
sudo mount -o loop td.img ./td
chmod a+wr ./td

Codes

#[tokio::test(flavor = "multi_thread")]
async fn object_store_write() {
    let mut builder = object_store::services::Fs::default();
    let root_dir = "/tmp/chaos/td/";

    let _ = builder.root(root_dir);
    let store = ObjectStore::new(builder).unwrap().finish();

    // XKB
    let data = [96u8; 1024 * 512]; // The writable was smaller than 512KB
    store.write("/test", data.to_vec()).await.unwrap();
}

The test was expected to raise no space errors, but it didn't.

test tests::standalone_read_write::object_store_write ... ok

However, if we check the written file, it only contains partial bytes.

➜  td ls -lh  
total 448K
drwx------ 2 root root  16K Sep 13 08:28 lost+found
-rw-rw-r-- 1 weny weny 428K Sep 13 09:10 test

See also: tokio-rs/tokio#6005

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions