Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/anowell/netfuse

The fastest way to POC a network-backed filesystem
https://github.com/anowell/netfuse

Last synced: about 1 month ago
JSON representation

The fastest way to POC a network-backed filesystem

Awesome Lists containing this project

README

        

# netfuse
Experimental: FUSE-based abstraction for networked filesystems

This library provides a wrapper around the pure [rust rewrite of libfuse](https://github.com/zargony/rust-fuse).
It provides an internally managed inode cache that allows abstracting FS operations into operations on paths.
It is designed with the assumption that the backing store is over a network,
so the implementation relies heavily on caching and lazy writing to improve perceived performance.

[Documentation](https://anowell.github.io/netfuse/netfuse/)

[![Build Status](https://travis-ci.org/anowell/netfuse.svg)](https://travis-ci.org/anowell/netfuse)
[![Crates.io](https://img.shields.io/crates/v/netfuse.svg?maxAge=2592000)](https://crates.io/crates/netfuse)

## Implementations

This was originally ripped out of the implementation of algorithmia-fuse mentioned below.

- [algorithmia-fuse](https://github.com/anowell/algorithmia-fuse) - filesystem for managing data through the Algorithmia platform

If you build something with it, open a PR or file an issue to get it added here. :-)

## Current caveats

I wouldn't recommend this for any production-quality filesystem today. These are some known caveats:

- Writes persist when closing the last open handle to a file. If the close fails, it's likely the data isn't persisted.
- The entire inode and file cache lives in RAM, so if you download a 4GB file, it will occupy 4GB of RAM until it is closed.
- Directory listing is permanently cached, so if you change a directory's contents outside of the FS, you have to unmount and remount before those changes appear.
- Testing while mounted has been limited to a handful of common I/O scenarios
- General network filesystem caveats apply, e.g. some file operations may appear slow
- Implementing `readdir` will hopefully be much nicer after [impl Trait](https://github.com/rust-lang/rust/issues/34511) lands

Please [file an issue](https://github.com/anowell/netfuse/issues/new) or create a pull request
if you run into any issue or limitation using this library.

## Build, Test

To build and test:
```
$ cargo build
$ cargo test
```