{"id":15373017,"url":"https://github.com/vi/outoforderfs","last_synced_at":"2025-04-15T14:13:33.512Z","repository":{"id":57650930,"uuid":"54293066","full_name":"vi/outoforderfs","owner":"vi","description":"FUSE single-file filesystem simulating dirty block device shutdown (each write is delayed randomly)","archived":false,"fork":false,"pushed_at":"2016-03-20T23:41:21.000Z","size":21,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-15T14:13:27.585Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-03-20T00:16:27.000Z","updated_at":"2018-08-03T05:58:05.000Z","dependencies_parsed_at":"2022-09-12T05:00:43.463Z","dependency_job_id":null,"html_url":"https://github.com/vi/outoforderfs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2Foutoforderfs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2Foutoforderfs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2Foutoforderfs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2Foutoforderfs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vi","download_url":"https://codeload.github.com/vi/outoforderfs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249085429,"owners_count":21210267,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-01T13:54:06.755Z","updated_at":"2025-04-15T14:13:33.496Z","avatar_url":"https://github.com/vi.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# outoforderfs\nFUSE single-file filesystem simulating dirty block device shutdown (each write is delayed randomly)\n\n```\n$ target/debug/outoforderfs\nUsage: outoforderfs source_file mountpoint_file blocksize maxtime_ms maxdirtyblocks\n outoforderfs 'mirrors' source file to mountpoint_file,\n but writes to mountpoint_file get delivered\n to source_file after a random delay, in random order.\n The reason is to see what happens of some other FS in case of\n surprise removal (or sudden shutdown) of the storage.\nExample session (approximate):\n 1$ dd if=/dev/zero bs=4096 count=2560 of=sf.dat\n 1$ touch mp.dat\n 1$ outoforderfs sf.dat mp.dat 4096 10000 100\n 1$ (switch to a new tab)\n 2$   mkfs mp.dat\n 2$   mount mp.dat -o loop mnt\n 2$   start using mnt (filling with logs, creating sqlite, etc)\n 1$ ^C\n 1$ outoforderfs sf.dat mp.dat 4096 10000 100\n 2$   umount mnt\n 2$   mount mp.dat -o loop mnt\n 2$   inspect mnt for breakage, incomplete/zeroed files, etc\n```\n\nEye-catcher:\n\n```\n$ ./visualtest.sh \n# write 80 spaces to sf.dat\n+ target/debug/outoforderfs sf.dat mp.dat 1 5000 1000\n# write 80 dots to mp.dat\n# Contant of sf.dat against time\n                                                                                \n                                                 .                              \n                                                 .                            . \n                                                 .                            ..\n                .             .                  .           .                ..\n                .             .                  .           .                ..\n                .             .                  .           .                ..\n                .             .             .    .           .                ..\n                .             .             .    .           .                ..\n               .. .           .             .    .           . .              ..\n               .. .           .             .    .           . .              ..\n               .. .           .             .    .           . .              ..\n               .. .           .             .    .           . .              ..\n               .. .           .             .    .           . .              ..\n               .. .           .             .    .           . .              ..\n               .. .        .  .             .    .           . .              ..\n              ... .        .  .             .    .           . . .            ..\n              ... .        .  .             .    .           . . .            ..\n              ... .        .  .             .    .           . . .            ..\n              ... .        .  .             .    .           . . .            ..\n              ... .      . .  .             .    .           . . .        .   ..\n         .    ... .      . .  .             .    .           . . .        .   ..\n         .   .... .      . .  .             .    .           . . .        .   ..\n         .   .... .      . .  .             .    .           . . .        .   ..\n         .   .... .      . .  .       .     .    .           . . .        .   ..\n         .   .... .      . .  .       .     .    .           . . .        .   ..\n         .   .... .      . .  . .     .     .    .           . . .        .   ..\n         .   .... .      . .  . .     .     .   ..           . . .        .   ..\n         .   .... .      . .  . .     .     .   ..           . . .        .   ..\n         .   .... .      . .  . .     .     .   ..           . . .        .   ..\n         .  ..... .     .. .  . .     .     .   ..           . . .        .   ..\n         .  ..... .     .. .  . .     .     .   ..           . . .        .   ..\n         .  ..... .     .. .  . .     .     .   ..           . . .    .  ..   ..\n         .  ..... .     .. .  . .     .     .   ..           . . .    .  ..   ..\n         .  ..... .     .. .  . ..    .     .   ..           . . .    .  ..   ..\n         .  ..... .     .. .  . ..    .     .   ..           . . .    .  ..   ..\n         .  ..... .     .. .  . ..    .     .   ..           . . .    .  ..   ..\n         .. ..... .     .. .  . ..    .     .   ..           . . .    .  ...  ..\n         .. ..... .     .. .  . ..    .     .   ..         . . . .    .  ...  ..\n         .. ..... .     .. .  . ..    .     .   ....       . . . .    .  ...  ..\n         .. ..... .     .. .  . ..    .     .   ....       . . . .    .  ...  ..\n         .. ..... .     .. .  . ..    .     . . ....    .  . . . .    .  ...  ..\n  .      .. ..... .     .. .  . ..    .     . . ....    .  . . . .    .  ...  ..\n  .      .. ..... .     .. .  . ..    .     . . ....  ...  . . . .    .  ...  ..\n  .      .. ..... .     .. .  . ..    .     . . ....  ...  . . . .    .  ...  ..\n  .      .. ..... .     .. .  . ..    .     . . ....  ...  . . . .    .  ...  ..\n  .  .   .. ..... .     .. .  . ..    .     . . ....  ...  . . . .    .  ...  ..\n  .  .   .. ..... .     .. .  . ..    ..    . . ....  ...  . . . .    .  ...  ..\n  .  .   .. ..... .     .. .  . ..    ..    . . ....  ...  . . . .    .  ...  ..\n  .  .   .. ..... .   . .. .  . ..    ..    . . ....  ...  . . . .    .  ...  ..\n# Now write 80 asterisks to mp.dat\n  .  .   .. ..... .   . .. .. . ..    ..    . . ....  ...  . . . .    .  ...  ..\n  .  .   .. ..... .   . .. .. . ..    ..    . . ....  ...  . . . .    .  ...  ..\n  .  .   *. ..... .   . .. ..*. ..    ..    * . ....  ...  . . . .   *.  ...  ..\n  .  .   *. ..... .   . .. ..*. ..    ..    * . ....  ...  * . . .   *.  ...  ..\n  .  .   *. ..... .   . .. ..*. ..    ..    * . ....  ...  * . . .   *.  ...  ..\n  . *.   *. ..... .   . .. ..*. ..    ..    * . ....  ...  * . . .   *.  ...  ..\n  . *.   *. ...*. .   . .. ..*. ..    ..    * . ....  ...  * . . .   *.  ...  ..\n  . *.   *. ...*. .   . .. ..*. ..    ..    * . ....  ...  * . . .   *.  ...  ..\n  . *.   *. ...*. .   . .. ..*. ..    .*    * . ....  ...  * . . .   *.  ...  ..\n  . *.   *. ...*. .   . .. ..*. ..    .*    * . ....  ...  * . . .   *.  ...  ..\n  . *.   *. ...*. .   . .. ..*. ..    .*    * . ....  ...  * . . .   *.  ...  ..\n  . *.   *. ...*. .   . .. ..*. ..    .*    * . ....  ...  * .*. .   *.  ...  ..\n  . *.   *. ...*. .   . .. ..*. ..    .*    * . .*..  ...  * .*. .   **  ...  ..\n  . *.   *. ...*. .   . .. ..*. ..    .*    * . .*..  ...  * .*. .   **  ...  ..\n  . *.   *. ...*. .   . .. ..*. ..    .*    * . .*..  ...  * .*. .   **  ...  ..\n  . *.   *. ...*. .   . .. ..*. .. *  .*    * . .*..  ...  * .*. .   **  ...  ..\n  . *.   *. ...** *  *. .. ..*. .. *  .*    * . .*..  ...  * .*. .   **  ...  ..\n  . *.   *. ...** *  *. .. ..*. .. *  .*    * . .*..  ...  * .*. .   **  ...  ..\n  . *.   *. ...** *  *. .. ..*. .. *  .*    * . .*..  ...  * .*. .   **  ...  ..\n  . *.   *. ...** *  *. .. ..*. .. *  .*    * . .*..  ...  * .*. .   **  ...  ..\n  . *.   *. ...** *  *. .. ..*. .. *  .* *  * . .*..  ...  * .*. .   **  ...  ..\n  . *.   *. ...** *  *. .. ..*. .* *  .* *  * . .*..  ...  * .*. .   **  ...* ..\n  . *.   *. ...** * **. .. ..*. .* *  .* *  * . .*.. *...  * .*. .   **  ...* ..\n  . *.   *. ...** * **.*.. ..*. .* *  .* *  * . .*.. *...  * .*. .   **  ...* ..\n  . *.   *. ...** * **.*.. ..*.*.* *  .* *  * . .*..**...  * .*. .  ***  ...* ..\n  . *.   *. ...** * **.*.. ..*.*.* *  .* *  * . .*..**...  * .*. .  ***  ...* ..\n *. *.   *. ...** * **.*.. ..*.*.* *  .* *  * . .*..**...  * .*. .  ***  ...* ..\n *. *.*  *. ...** * **.*.. ..*.*.* *  .* *  * . .*..**...* * .*. .  ***  ...* ..\n *. *.*  *. ...** * **.*.. ..*.*.* *  .* *  * . .*..**...* * .*. .  ***  ...* ..\n *. *.*  *. ...** * **.*..*..*.*.* *  ** *  * **.*..**...* * .*. .  ***  ...**..\n *. *.*  *.*...** * **.*..*..*.*.* *  ** *  * **.*..**...* * .*. .  ***  ..***..\n *. *.*  *.*...** * **.*..*..*.*.***  ** *  * **.*..**.*.* * .*. .  ***  ..***..\n**.**.*  *.*...** * **.*..*..*.*.***  ** *  * **.*..**.*.* * .*. .  ***  ..***..\n**.**.*  *.*...** * **.*..*..*.*.***  ** *  * **.*..**.*.* **.*. .  ***  ..***..\n**.**.*  *.*...**** **.*..*..*.*.***  ** * ** **.*..****.* **.*. .  *****..***..\n**.**.*  *.*...**** **.*..*..*.*.*** *** * ** **.*..****.* **.*.*.  *****..***..\n**.**.* **.*...**** **.**.*..*.*.*** *** * ** **.*..****.* **.*.*.  *****..***..\n**.**.* **.*...**** **.**.*..*.*.*** *** * ** **.*..****.* **.*.*.  *****..***..\n**.**.* **.*...**** **.**.*..*.*.*** *** * ** **.*..****.* **.*.*.  *****..***..\n**.**.* **.*...**** **.**.*..*.*.*** ***** *****.*..****.* **.*.*.  *****..***..\n**.**.****.*...**** **.**.*..*.*.*** ***** *****.*..****.* **.*.*.  *****..***..\n**.**.****.*...*******.**.*..*.*.*** ***** *****.*..****.****.*.*.  *****..***..\n**.**.******..********.**.*..*.*.*** ***** *****.*..****.****.*.*. *******.***.*\n**.**.*******.********.**.*..*.*.***************.*..****.****.*.*.********.***.*\n**.**.*******.********.**.*..*.*.***************.*..****.****.*.*.********.***.*\n**.**.*******.********.**.*..*.*.***************.*..****.****.*.*.********.***.*\n**.**.*******.********.**.*..*.*.***************.*..****.****.*.*.********.***.*\n**.**.*******.********.**.*..*.*.***************.*..****.****.*.*.********.***.*\n**.*******************.**.*..*.*.***************.*..****.****.*.*.********.***.*\n**.*******************.**.*..*.*.***************.*..****.****.*.*.********.***.*\n**.*******************.**.*..*.*.***************.*..****.****.*.*.********.***.*\n^C\n16 dirty blocks lost\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvi%2Foutoforderfs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvi%2Foutoforderfs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvi%2Foutoforderfs/lists"}