#403 new enhancement

grid identifier

Reported by: zooko Owned by:
Priority: major Milestone:
Component: code-peerselection Version: 1.0.0
Keywords: newcaps newurls gridid Cc: jeremy@…
Launchpad Bug:

Description (last modified by nejucomo)

If you give someone a Tahoe URL containing a Tahoe capability, and they are using a different grid (i.e., they are using a different introducer to meet storage servers), then they will get a graceless failure suggesting that the file they asked for doesn't exist.

It might be good to include a "grid ID" in the URL.

Change History (13)

comment:1 Changed at 2008-05-07T22:57:11Z by warner

indeed. First we must solve the rather thorny problem of what a "grid ID" would consist of. The obvious answer (a copy of the introducer.furl, or a copy) is unsatisfying, because we plan to move to a more distributed introduction system that does not depend upon a single introducer.

comment:2 Changed at 2008-06-01T20:49:43Z by warner

  • Milestone changed from eventually to undecided

I wrote up a proposal for the grid id, and send it to the tahoe-dev mailing list.

comment:4 Changed at 2009-02-26T19:03:28Z by zooko

I have the vague idea that the domain name can serve as the the grid-id for some use cases. For example, currently http://webapi.allmydata.com:8123/cap/$CAP always means the prod grid. {{http://testgrid.allmydata.org:3567/cap/$CAP}}} always means the test grid. It isn't clear if we can hack DNS to provide privacy in the sense of not accidentally revealing the cap to a DNS server, but at least I would like to consider the advantages of using a separate, widely-understood tool like DNS instead of inventing our own grid ids.

comment:5 Changed at 2009-02-26T19:06:38Z by zooko

Perhaps this paper is relevant:

Miguel Castro, et al.: "One Ring to Rule them All: Service Discovery and Binding in Structured Peer-to-Peer Overlay Networks"

http://research.microsoft.com/users/mcastro/publications/ring.pdf

(By the way, I think I might have inspired Miguel Castro to write this paper by talking about the "grid id" problem at the first P2P Workshop in 2002.)

comment:6 Changed at 2009-10-28T03:33:24Z by davidsarah

  • Keywords newcaps added

Tagging issues relevant to new cap protocol design.

comment:7 Changed at 2009-10-28T07:26:01Z by davidsarah

  • Keywords newurls added

comment:8 Changed at 2010-02-23T03:07:42Z by zooko

  • Milestone changed from undecided to 2.0.0

comment:9 Changed at 2010-03-06T01:13:41Z by jsgf

  • Cc jeremy@… added

comment:10 Changed at 2012-11-20T00:31:33Z by davidsarah

Here are the design criteria I'd like to see satisfied:

  • A grid specification (grid-spec) is a file specifying a set of servers, and optional parameters such as a recommended share placement policy or recommended encoding parameters.
  • A grid-cap is a global, securely unique reference to a grid-spec. It can be an immutable or mutable reference (e.g. a hash of the grid-spec or a public key of an authority that can publish updates).
  • There is an IANA-registered URI scheme (say, lafs:) that has a grid-cap in the authority field, and a file-cap in the path field. Like most authority-based URI schemes, the authority can be omitted and implied by the context.
  • Local aliases can map to URIs that include a grid-cap.
  • It is possible to use different grids in different arguments to a CLI command, say to copy ciphertext shares (preferably without decryption) between grids.

Note that it may seem as though we have a bootstrapping issue in that the problem of looking up grid-specs is essentially the same as the problem of looking up files -- and so if we can solve the former, why can't we solve the latter without the former?

The answer is that there are far fewer grids than there are files, and even fewer grids that are used by a given client. So,

  • It is practical to persistently cache information on every grid that a client normally uses, whereas it wouldn't practical to persistently cache information on every file.
  • The mechanism to look up grid information only needs to be available to a given client when it actually adds a new grid.
  • Adding a grid is infrequent enough that the lookup could be manual, i.e. downloading a file describing the grid and adding that to the local cache.

However, it would also be convenient to allow looking up a grid-spec automatically, so that the resulting caps are truly global names. Here is a proposed implementation of that, which takes advantage of the similarity between grid-caps and file-caps by having them be the same thing:

  • Each client is configured with the grid-spec of a bootstrap grid, that can be used to look up the grid-specs of other grids.
  • There is a public bootstrap grid which is the initial bootstrap grid for newly created clients.
  • Accounting mechanisms are used to mitigate denial of service on the public bootstrap grid.
  • Each client has a local cache mapping grid-caps to grid-specs.
  • There is a command (and possibly a WUI admin page, if we can figure out how to do that securely) to add a grid-spec to the cache and mark it as persistent.
  • A grid-cap is exactly a file-cap that is interpreted as being on the client's bootstrap grid. It may be to a mutable or immutable file containing the grid-spec.
  • If a client sees an URI with an authority that is not a cached grid-cap, it looks up that grid-cap on its bootstrap grid. It does not cache this persistently (but should cache it temporarily).

Note that we wouldn't implement this in one go; stage 1 could be to leave out the automatic lookup of grid-caps on the bootstrap grid, and instead just have the persistent cache to which grid-specs have to be added manually.

Last edited at 2012-11-20T06:56:18Z by davidsarah (previous) (diff)

comment:11 Changed at 2013-06-28T04:19:33Z by nejucomo

  • Description modified (diff)

This feature may be useful for implementing the "universal cap" use case: #2009

comment:12 Changed at 2013-07-14T15:39:09Z by daira

  • Keywords gridid added

comment:13 Changed at 2021-03-30T18:40:46Z by meejah

  • Milestone 2.0.0 deleted

Ticket retargeted after milestone closed (editing milestones)

Note: See TracTickets for help on using tickets.