4 | | * the set of storage servers that are considered for peer-selection should |
5 | | come from a config file, with one server per line, of various types |
6 | | * one entry type means "ask the introducer", perhaps with some parameters |
7 | | like "only accept servers that are blessed by the following key" |
8 | | * if this file doesn't exist, it defaults to asking the introducer |
9 | | * one entry type (or introducer tag) is used to point at a storage server's |
10 | | "login FURL" instead of a fully-powered reference. (we need a better |
11 | | name for this object). This is the object to which the client will pass |
12 | | credentials and/or signed certificate chains. |
| 6 | I'd like to have a section in the client's tahoe.cfg which lets it |
| 7 | specify the servers available for storage. In contrast to #573 (which is |
| 8 | about runtime/per-upload specification of which servers to use, out of |
| 9 | the set provided by the introducer), this ticket is about boot-time |
| 10 | configuration of the available set, potentially replacing the |
| 11 | Introducer-provided list. |
14 | | When the peer-selection process needs server references, the client should |
15 | | ask the login FURLs for server references, performing credential negotiation |
16 | | if necessary. The client should cache the results for later use, so ideally |
17 | | the negotiation only needs to take place once. |
| 13 | My thought is that the tahoe.cfg should have a section that specifies a |
| 14 | list of servers to use. Then another tahoe.cfg setting should have a |
| 15 | flag which says "use the Introducer to populate this list", and the |
| 16 | default configuration would use the Introducer. This latter section |
| 17 | would also have a place to configure the #466-style "blesser" (a pubkey |
| 18 | which tells the client to only accept server announcements which have |
| 19 | been signed by the matching privkey). |
| 21 | This would also make it possible to configure alternative server types. |
| 22 | The first such server type I'd like to add is an S3-based server. |
| 23 | Regular servers would be defined with a FURL; S3 servers would be |
| 24 | defined with a service URL and a set of authorization secrets. |
| 25 | |
| 26 | The syntax I'm thinking of would look like this: |
| 27 | |
| 28 | {{{ |
| 29 | [client-server-selection] |
| 30 | server.X.type = tahoe-foolscap |
| 31 | server.X.nickname = alice |
| 32 | server.X.furl = pb://... |
| 33 | server.Y.type = tahoe-foolscap |
| 34 | server.Y.nickname = bob |
| 35 | server.Y.furl = pb:// |
| 36 | server.Z.type = s3 |
| 37 | server.Z.nickname = aws |
| 38 | server.Z.url = http://... |
| 39 | server.Z.creds = ... |
| 40 | server.Z.num_shares = 3 |
| 41 | use_introducer = False |
| 42 | permute_serverids = False |
| 43 | }}} |
| 44 | |
| 45 | The {{{server.*}}} lines would basically define a list of dictionaries |
| 46 | (the "X" and "Y" strings would be discarded after tahoe.cfg is parsed). |
| 47 | |
| 48 | The "use_introducer=False" line means that the client shouldn't bother |
| 49 | talking to the Introducer. If it were True, the client would connect to |
| 50 | the introducer and add whatever servers it knew about to the list. |
| 51 | |
| 52 | The "permute_serverids=False" line means that the client shouldn't |
| 53 | permute the serverlist on each upload. Instead, it should assign 1 (or |
| 54 | num_shares=) shares to each server in the order they appear in this |
| 55 | list. The total-shares "N" value ought to equal the number of servers |
| 56 | (or rather the sum of the num_shares= values). |
| 57 | |
| 58 | Having permute_serverids=False in the tahoe.cfg, rather than provided on |
| 59 | a per-upload basis (as in #573) might prove more usable. It might be |
| 60 | more appropriate for a fairly stable grid though: one in which new |
| 61 | servers are not being added very frequently. |