Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fuse #2

Open
frank-dspeed opened this issue Nov 23, 2017 · 0 comments
Open

fuse #2

frank-dspeed opened this issue Nov 23, 2017 · 0 comments

Comments

@frank-dspeed
Copy link
Member

BUILDING A FILESYSTEM IN NODE.JS • Use the fuse-bindings github project • https://github.com/mafintosh/fuse-bindings • Implement required filesystem operations • Run your node.js code and mount on an existing directory. • Success?!?!
9. BUILDING A FILESYSTEM IN NODE.JS read(filePath, fd, buf, len, pos, cb) { } write(filePath, fd, buf, len, pos, cb) { } create(filePath, mode, cb) { } open(filePath, flags, cb) { } readdir(filePath, cb) { } Good list for reference: https://www.cs.hmc.edu/~geoff/classes/hmc.cs135.201001/homework/fuse/fuse_doc.html#function-­‐ purposes getattr(filePath, cb) { }
10. BUILDING A FILESYSTEM IN NODE.JS getattr(/) getattr(/cat.jpg) create(/cat.jpg, 33188) getattr(/cat.jpg) write(/cat.jpg, 0, len: 65536, buf.length: 65536, pos: 0 write(/cat.jpg, 0, len: 65536, buf.length: 65536, pos: 65536) // ... getattr(/cat.jpg) release(/cat.jpg, 0) Example: What does a file copy look like?
11. BUILDING A FILESYSTEM IN NODE.JS In-memory virtual filesystem backed by JS array (yikes)
12. BUILDING A FILESYSTEM IN NODE.JS var files = [ { name: 'readme.md', data: new Buffer('# test filen'), } ]; A 'file' is just an item in this array: Buffer()-backed
13. BUILDING A FILESYSTEM IN NODE.JS readdir() { // ... for (var i = 0; i < files.length; i++) { var buffer = files[i].data; var hash = hasha(buffer).substring(0, 12); files[i].name = ${hash}-${files[i].name}; files[i].hasFingerprint = true; } } Let's rename the filename to be a hash!
14. BUILDING A FILESYSTEM IN NODE.JS releaseFile(filePath, fd) { // Buffer is a WritableStream() var buffer = this.files[fileIndex].data.getContents(); zlib.gzip(buffer, function(error, result) { // create file if compression succeeded. }); } Like gzip?
15. BUILDING A FILESYSTEM IN NODE.JS Performance profiling CC A SA www.flickr.com/photos/libertinus/9231731038
16. Benchmarking disk or file system IO performance can be tricky at best. BUILDING A FILESYSTEM IN NODE.JS James Coyle
17. BUILDING A FILESYSTEM IN NODE.JS dd: "The Easy Route" •time sh -c "dd if=/dev/zero of=./in- memory/tst.tmp bs=4k count=1000 && sync" •409600 bytes written 1000 times... •Result: 3 mb/s (node, FuSE fs)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant