Skip to content
This repository has been archived by the owner on Sep 12, 2018. It is now read-only.

Split streaming, content-addressable storage from transactional, mutable storage #704

Open
wking opened this issue Nov 8, 2014 · 0 comments
Milestone

Comments

@wking
Copy link
Contributor

wking commented Nov 8, 2014

Instead of having a single storage backend (see #616 and #643), I think it would be better to have two storage backends, one for content-addressable storage (where a given key always refers to the same content, e.g. the tarsummed layer tarballs) and one for mutable storage (e.g. the ‘latest’ tag for a given repository or registry-internal information like dependent tag tracking). For convenience, I've called the content-addressable storage “streaming storage” and the mutable storage “atomic storage”. Earlier thoughts on this issue:

For similar APIs in other systems, see:

  • Git, which has .git/objects for content-addressable data, and .git/logs and .git/refs for mutable data.
  • dat, which uses uses fs-blob-store for content-addressable data and LevelDB for mutable data. You can swap in an alternative content-addressable store, because fs-blob-store implements the abstract-blob-store API and passes its tests. This is the sort of “API and tests an an external module” approach that I've proposed before.
  • IPFS, which has a mutable IPNS layer pointing into a content-addressable IPFS layer.

I've opened this issue so we can focus discussion here without without diluting other issues. There's a lot of stuff up in the air right now, so I'm fine if this issue just sits as a placeholder until we have time to kick it around some more.

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

No branches or pull requests

2 participants