cmd/upspinfs: Demand load files rather than reading them all on open

Upspinfs used to download the full file when opened. It now downloads
only the first block on open and downloads all others on demand.

However, when a file is changed, upspinfs downloads all blocks because
a subsequent Pack and Put will create a new encryption key changing
all the blocks. While one can posit a Pack that only repacks the
changed blocks without changing the keys, this would make the file
encryption less secure since one could see what blocks are changed
and even where the change occurred.

Tests added to check demand loading and extending existing files.

fixes #575

Change-Id: If053035906b7bcb7979dc4aaaf08f3297b8fca3d
Reviewed-on: https://upspin-review.googlesource.com/18780
Reviewed-by: Andrew Gerrand <adg@golang.org>
2 files changed
tree: 297bb1e9418368d67e266d3b16b28941a4cb5143
  1. .travis.yml
  2. AUTHORS
  3. CONDUCT.md
  4. CONTRIBUTING.md
  5. CONTRIBUTORS
  6. Gopkg.lock
  7. Gopkg.toml
  8. LICENSE
  9. PATENTS
  10. README.binary
  11. README.md
  12. access/
  13. bind/
  14. cache/
  15. client/
  16. cloud/
  17. cmd/
  18. config/
  19. dir/
  20. doc/
  21. errors/
  22. factotum/
  23. flags/
  24. key/
  25. log/
  26. metric/
  27. pack/
  28. path/
  29. rpc/
  30. serverutil/
  31. shutdown/
  32. store/
  33. subcmd/
  34. test/
  35. transports/
  36. upbox/
  37. upspin/
  38. user/
  39. valid/
  40. vendor/
  41. version/
README.md

Upspin

Augie

Documentation: upspin.io

About the project

Upspin is an experimental project to build a framework for naming and sharing files and other data securely, uniformly, and globally: a global name system of sorts.

It is not a file system, but a set of protocols and reference implementations that can be used to join things like file systems and other storage services to the name space.

Performance is not a primary goal. Uniformity and security are.

Upspin is not an official Google product.

Status

Upspin has rough edges, and is not yet suitable for non-technical users.

Build Status

Contributing

The code repository lives at upspin.googlesource.com and is mirrored to GitHub.

Note that the Upspin project does not use GitHub pull requests, and that we use the issue tracker for bug reports and proposals only.

See the Contribution Guidelines for more information on contributing to the project.

Reporting issues

Please report issues through our issue tracker.

Community

All Upspin users should subscribe to the Upspin Announcements mailing list to receive critical information about the project.

Use the Upspin mailing list for discussion about Upspin use and development.

Code of Conduct

Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

The Upspin mascot is Copyright 2017 Renee French. All Rights Reserved.