Ticket #1641: fix-1641.darcs.patch

File fix-1641.darcs.patch, 95.2 KB (added by kevan, at 2012-01-01T01:09:28Z)

first cut at fixing #1641

Line 
1Wed Dec 28 15:19:28 PST 2011  Kevan Carstensen <kevan@isnotajoke.com>
2  * Don't set the publisher's checkstring before its necessary
3 
4  We already set self._checkstring before we start pushing data; we don't
5  need to set it earlier in the process. Setting it earlier was necessary
6  when we had streaming upload, but it's not necessarily now and just adds
7  complexity to the publisher and write proxies.
8
9Wed Dec 28 15:20:18 PST 2011  Kevan Carstensen <kevan@isnotajoke.com>
10  * Return the correct checkstring in SDMFSlotWriteProxy.get_checkstring
11 
12  The old implementation returned the test vector sent to the remote
13  storage server when the share is written. Callers want the packed
14  (protocol version, seqnum, root hash, salt) tuple that identifies the
15  share being published.
16 
17  As a future change, we should consider a terminology change; either
18  referring to the test vector as a test vector in method names, or
19  referring to the checkstring as something else in method names.
20
21Wed Dec 28 15:21:14 PST 2011  Kevan Carstensen <kevan@isnotajoke.com>
22  * Simplify MDMFSlotWriteProxy.get_checkstring
23 
24  It's no longer necessary to handle the case in which this method is
25  called before the root hash is set.
26
27Wed Dec 28 15:22:29 PST 2011  Kevan Carstensen <kevan@isnotajoke.com>
28  * Remove get_checkstring calls from test_sdmf_write_preexisting_share
29 
30  This test relied on the inconsistent get_checkstring behavior that we've
31  now changed. These calls weren't essential for the test, so we can just
32  remove them. We'll have to write another test for the new behavior.
33
34Wed Dec 28 15:24:15 PST 2011  Kevan Carstensen <kevan@isnotajoke.com>
35  * Add test_sdmf_writer_get_checkstring
36
37Wed Dec 28 15:30:59 PST 2011  Kevan Carstensen <kevan@isnotajoke.com>
38  * Make UCWE exemptions more conservative
39 
40  The code removed by this commit assumed that any surprise shares
41  associated with concurrent writes to the same server weren't surprise
42  shares. This is a regression relative to the old publisher, which
43  checked the read vectors against the publish operation's checkstring
44  before ignoring the surprise shares. We can't do this with the new
45  publisher, since there's not a guaranteed write order. Instead, we allow
46  two checkstrings. If the readv is the same as the publish operation's
47  checkstring, then the share is there due either to a convergent
48  uncoordinated write or an earlier writer finishing before the one being
49  responded to. If the readv is the same as the checkstring we saw during
50  the servermap update, then the share hasn't been updated yet. In these
51  cases, the surprise shares aren't evidence of an uncoordinated write and
52  can be ignored.
53
54Thu Dec 29 10:42:25 PST 2011  Kevan Carstensen <kevan@isnotajoke.com>
55  * Add NoNetworkGrid.copy_mutable_share_to_server
56 
57  With immutable shares, we can copy share files between servers. We can't
58  do that with mutable shares, since the write enabler is bound to the
59  nodeid of the storage server storing the share. This method uses
60  MutableShareFiles to copy the actual mutable share and leases in a way
61  that yields a correct write enabler. A naive file copy would yield a
62  share that's not useful, since any attempt by a client to access it
63  would result in a write enabler mismatch and an error.
64
65Thu Dec 29 10:42:52 PST 2011  Kevan Carstensen <kevan@isnotajoke.com>
66  * Add test for SDMF checkstring handling regression
67
68Thu Dec 29 11:00:00 PST 2011  Kevan Carstensen <kevan@isnotajoke.com>
69  * Rename get_checkstring to get_next_checkstring
70 
71  get_next_checkstring reflects the relationship of the checkstring
72  returned by the method to what's actually on the server. In particular,
73  it draws a distinction between what's there now and what's going to be
74  there when the write takes place. No such distinction is drawn now,
75  which makes it harder to understand the code.
76
77Sat Dec 31 16:49:13 PST 2011  Kevan Carstensen <kevan@isnotajoke.com>
78  * Add get_expected_checkstring; add tests for get_expected_checkstring
79 
80  get_expected_checkstring returns the checkstring that the writer expects
81  to be present on the server for the share being written before the write
82  takes place. get_next_checkstring returns the checkstring that will be
83  present after the writer performs a write operation.
84
85New patches:
86
87[Don't set the publisher's checkstring before its necessary
88Kevan Carstensen <kevan@isnotajoke.com>**20111228231928
89 Ignore-this: 77937220ca9ca23f93af6e4c293b2b83
90 
91 We already set self._checkstring before we start pushing data; we don't
92 need to set it earlier in the process. Setting it earlier was necessary
93 when we had streaming upload, but it's not necessarily now and just adds
94 complexity to the publisher and write proxies.
95] {
96hunk ./src/allmydata/mutable/publish.py 294
97                                    old_root_hash,
98                                    old_salt)
99 
100-        # Our remote shares will not have a complete checkstring until
101-        # after we are done writing share data and have started to write
102-        # blocks. In the meantime, we need to know what to look for when
103-        # writing, so that we can detect UncoordinatedWriteErrors.
104-        self._checkstring = self.writers.values()[0][0].get_checkstring()
105-
106         # Now, we start pushing shares.
107         self._status.timings["setup"] = time.time() - self._started
108         # First, we encrypt, encode, and publish the shares that we need
109hunk ./src/allmydata/mutable/publish.py 489
110                 old_checkstring = self.bad_share_checkstrings[(server, shnum)]
111                 writer.set_checkstring(old_checkstring)
112 
113-        # Our remote shares will not have a complete checkstring until
114-        # after we are done writing share data and have started to write
115-        # blocks. In the meantime, we need to know what to look for when
116-        # writing, so that we can detect UncoordinatedWriteErrors.
117-        self._checkstring = self.writers.values()[0][0].get_checkstring()
118-
119         # Now, we start pushing shares.
120         self._status.timings["setup"] = time.time() - self._started
121         # First, we encrypt, encode, and publish the shares that we need
122}
123[Return the correct checkstring in SDMFSlotWriteProxy.get_checkstring
124Kevan Carstensen <kevan@isnotajoke.com>**20111228232018
125 Ignore-this: 615db53299ddd56cd93aa245908ab82e
126 
127 The old implementation returned the test vector sent to the remote
128 storage server when the share is written. Callers want the packed
129 (protocol version, seqnum, root hash, salt) tuple that identifies the
130 share being published.
131 
132 As a future change, we should consider a terminology change; either
133 referring to the test vector as a test vector in method names, or
134 referring to the checkstring as something else in method names.
135] hunk ./src/allmydata/mutable/layout.py 298
136 
137 
138     def get_checkstring(self):
139-        """
140-        Get the checkstring that I think currently exists on the remote
141-        server.
142-        """
143-        if self._testvs:
144-            return self._testvs[0][3]
145-        return ""
146+        assert "root_hash" in self._share_pieces
147+        assert "salt" in self._share_pieces
148+
149+        return struct.pack(PREFIX,
150+                           0,
151+                           self._seqnum,
152+                           self._share_pieces['root_hash'],
153+                           self._share_pieces['salt'])
154 
155 
156     def put_block(self, data, segnum, salt):
157[Simplify MDMFSlotWriteProxy.get_checkstring
158Kevan Carstensen <kevan@isnotajoke.com>**20111228232114
159 Ignore-this: 85aa74e7bc9beab5f4fd7f8733111c32
160 
161 It's no longer necessary to handle the case in which this method is
162 called before the root hash is set.
163] {
164hunk ./src/allmydata/mutable/layout.py 888
165 
166         I am mostly used for tests.
167         """
168-        if self._root_hash:
169-            roothash = self._root_hash
170-        else:
171-            roothash = "\x00" * 32
172         return struct.pack(MDMFCHECKSTRING,
173                            1,
174                            self._seqnum,
175hunk ./src/allmydata/mutable/layout.py 891
176-                           roothash)
177+                           self._root_hash)
178 
179 
180     def put_block(self, data, segnum, salt):
181}
182[Remove get_checkstring calls from test_sdmf_write_preexisting_share
183Kevan Carstensen <kevan@isnotajoke.com>**20111228232229
184 Ignore-this: 53e8d208114f8a20e2bebd633f747a48
185 
186 This test relied on the inconsistent get_checkstring behavior that we've
187 now changed. These calls weren't essential for the test, so we can just
188 remove them. We'll have to write another test for the new behavior.
189] {
190hunk ./src/allmydata/test/test_storage.py 2745
191         # Put the verification key
192         sdmfw.put_verification_key(self.verification_key)
193 
194-        # We shouldn't have a checkstring yet
195-        self.failUnlessEqual(sdmfw.get_checkstring(), "")
196-
197         d = sdmfw.finish_publishing()
198         def _then(results):
199             self.failIf(results[0])
200hunk ./src/allmydata/test/test_storage.py 2755
201         d.addCallback(_then)
202         d.addCallback(sdmfw.set_checkstring)
203         d.addCallback(lambda ignored:
204-            sdmfw.get_checkstring())
205-        d.addCallback(lambda checkstring:
206-            self.failUnlessEqual(checkstring, self._expected_checkstring))
207-        d.addCallback(lambda ignored:
208             sdmfw.finish_publishing())
209         def _then_again(results):
210             self.failUnless(results[0])
211}
212[Add test_sdmf_writer_get_checkstring
213Kevan Carstensen <kevan@isnotajoke.com>**20111228232415
214 Ignore-this: 7beae677aafad3894fb818d2e21ff66
215] {
216hunk ./src/allmydata/test/test_storage.py 25
217      ReadBucketProxy
218 from allmydata.mutable.layout import MDMFSlotWriteProxy, MDMFSlotReadProxy, \
219                                      LayoutInvalid, MDMFSIGNABLEHEADER, \
220-                                     SIGNED_PREFIX, MDMFHEADER, \
221+                                     SIGNED_PREFIX, MDMFHEADER, PREFIX, \
222                                      MDMFOFFSETS, SDMFSlotWriteProxy, \
223                                      PRIVATE_KEY_SIZE, \
224                                      SIGNATURE_SIZE, \
225hunk ./src/allmydata/test/test_storage.py 2767
226         return d
227 
228 
229+    def test_sdmf_writer_get_checkstring(self):
230+        self.build_test_sdmf_share()
231+        sdmfw = SDMFSlotWriteProxy(0,
232+                                   self.rref,
233+                                   "si1",
234+                                   self.secrets,
235+                                   1, 3, 10, 36, 36)
236+        sdmfw.put_block(self.blockdata, 0, self.salt)
237+
238+        # Put the encprivkey
239+        sdmfw.put_encprivkey(self.encprivkey)
240+
241+        # Put the block and share hash chains
242+        sdmfw.put_blockhashes(self.block_hash_tree)
243+        sdmfw.put_sharehashes(self.share_hash_chain)
244+
245+        # Put the root hash
246+        sdmfw.put_root_hash(self.root_hash)
247+
248+        # Put the signature
249+        sdmfw.put_signature(self.signature)
250+
251+        # Put the verification key
252+        sdmfw.put_verification_key(self.verification_key)
253+
254+        # Now get the checkstring; this should be a packed version of
255+        # (0, 1, roothash, salt)
256+        checkstring = struct.pack(PREFIX,
257+                                  0,
258+                                  1,
259+                                  self.root_hash,
260+                                  self.salt)
261+        self.failUnlessEqual(sdmfw.get_checkstring(), checkstring)
262+
263+
264 class Stats(unittest.TestCase):
265 
266     def setUp(self):
267}
268[Make UCWE exemptions more conservative
269Kevan Carstensen <kevan@isnotajoke.com>**20111228233059
270 Ignore-this: 5dc5765037077c880479196a13ffaf96
271 
272 The code removed by this commit assumed that any surprise shares
273 associated with concurrent writes to the same server weren't surprise
274 shares. This is a regression relative to the old publisher, which
275 checked the read vectors against the publish operation's checkstring
276 before ignoring the surprise shares. We can't do this with the new
277 publisher, since there's not a guaranteed write order. Instead, we allow
278 two checkstrings. If the readv is the same as the publish operation's
279 checkstring, then the share is there due either to a convergent
280 uncoordinated write or an earlier writer finishing before the one being
281 responded to. If the readv is the same as the checkstring we saw during
282 the servermap update, then the share hasn't been updated yet. In these
283 cases, the surprise shares aren't evidence of an uncoordinated write and
284 can be ignored.
285] {
286hunk ./src/allmydata/mutable/publish.py 988
287 
288         surprise_shares = set(read_data.keys()) - set([writer.shnum])
289 
290-        # We need to remove from surprise_shares any shares that we are
291-        # knowingly also writing to that server from other writers.
292-
293-        # TODO: Precompute this.
294-        shares = []
295+        known_writers = {}
296         for shnum, writers in self.writers.iteritems():
297hunk ./src/allmydata/mutable/publish.py 990
298-            shares.extend([x.shnum for x in writers if x.server == server])
299-        known_shnums = set(shares)
300-        surprise_shares -= known_shnums
301+            known_writers.update([(x.shnum, x) for x in writers
302+                                  if x.server == server])
303         self.log("found the following surprise shares: %s" %
304                  str(surprise_shares))
305 
306hunk ./src/allmydata/mutable/publish.py 1023
307                 # surprised), since I suspect there's a decent chance that
308                 # we'll hit this in normal operation.
309                 continue
310-
311+            elif shnum in known_writers and \
312+              checkstring == known_writers[shnum].get_current_checkstring():
313+                self.log("we're writing share %d and nothing appears out of the ordinary, ignoring" % shnum)
314+                continue
315             else:
316                 # the new shares are of a different version
317                 if server in self._servermap.get_reachable_servers():
318}
319[Add NoNetworkGrid.copy_mutable_share_to_server
320Kevan Carstensen <kevan@isnotajoke.com>**20111229184225
321 Ignore-this: 4abd4d537a369a3bafbc27b2529e2421
322 
323 With immutable shares, we can copy share files between servers. We can't
324 do that with mutable shares, since the write enabler is bound to the
325 nodeid of the storage server storing the share. This method uses
326 MutableShareFiles to copy the actual mutable share and leases in a way
327 that yields a correct write enabler. A naive file copy would yield a
328 share that's not useful, since any attempt by a client to access it
329 would result in a write enabler mismatch and an error.
330] {
331hunk ./src/allmydata/test/no_network.py 26
332 from allmydata import uri as tahoe_uri
333 from allmydata.client import Client
334 from allmydata.storage.server import StorageServer, storage_index_to_dir
335+from allmydata.storage.mutable import MutableShareFile
336 from allmydata.util import fileutil, idlib, hashutil
337 from allmydata.util.hashutil import sha1
338 from allmydata.test.common_web import HTTPClientGETFactory
339hunk ./src/allmydata/test/no_network.py 399
340             corruptdata = corruptor(sharedata, debug=debug)
341             open(i_sharefile, "wb").write(corruptdata)
342 
343+    def copy_mutable_share_to_server(self, filenode, shnum, size, destserver):
344+        # Copy a mutable share associated with a URI from a source server to a
345+        # destination server.
346+        uri = filenode.get_uri()
347+        shares = self.copy_shares(uri)
348+        key = filter(lambda x: int(os.path.split(x)[1]) == shnum,
349+                     shares.iterkeys())[0]
350+        sf = MutableShareFile(key)
351+        # Read the data from the share file. We can't just do a file
352+        # copy because the write enabler would be wrong.
353+        data = sf.readv([(0, size)])[0]
354+
355+        si = tahoe_uri.from_string(uri).storage_index
356+
357+        prefixdir = storage_index_to_dir(si)
358+        basedir = os.path.join(destserver.sharedir, prefixdir)
359+        fileutil.make_dirs(basedir)
360+
361+        wrapped = self.g.proxies_by_id[destserver.my_nodeid]
362+
363+        dest_sf = MutableShareFile(os.path.join(basedir, str(shnum)))
364+        dest_sf.create(destserver.my_nodeid,
365+                       filenode.get_write_enabler(wrapped))
366+        dest_sf.writev([(0, data)], len(data))
367+        for f in sf.get_leases():
368+            dest_sf.add_lease(f)
369+
370     def GET(self, urlpath, followRedirect=False, return_response=False,
371             method="GET", clientnum=0, **kwargs):
372         # if return_response=True, this fires with (data, statuscode,
373}
374[Add test for SDMF checkstring handling regression
375Kevan Carstensen <kevan@isnotajoke.com>**20111229184252
376 Ignore-this: a922e45e30ac10bb1df8cd3c4afa9911
377] hunk ./src/allmydata/test/test_mutable.py 2537
378         d.addCallback(_created)
379         return d
380 
381+    def test_sdmf_surprise_share_checkstring(self):
382+        self.basedir = "mutable/Problems/test_sdmf_surprise_share_checkstring"
383+        self.set_up_grid()
384+        nm = self.g.clients[0].nodemaker
385+        d = nm.create_mutable_file(MutableData("contents 1"))
386+        def _created(n):
387+            self._node = n
388+            self.g.remove_server(self.g.get_all_serverids()[0])
389+            return self._node.get_servermap(mode=MODE_WRITE)
390+        d.addCallback(_created)
391+        def _add_new_server(smap):
392+            sharemap = smap.make_sharemap()
393+            seen_shares = sharemap.keys()
394+            share_to_copy = seen_shares[0]
395+            ss = self.g.make_server(10)
396+            self.g.add_server(10, ss)
397+            size = 1024 * 1024
398+            self.copy_mutable_share_to_server(self._node,
399+                                              share_to_copy, size, ss)
400+            return smap
401+        d.addCallback(_add_new_server)
402+        # Now we'll overwrite the file.
403+        d.addCallback(lambda smap:
404+            self.shouldFail(UncoordinatedWriteError,
405+                            "sdmf_surprise_share_checkstring", None,
406+                            self._node.upload,
407+                            MutableData("contents 2"), smap))
408+        return d
409+
410     def test_multiply_placed_shares(self):
411         self.basedir = "mutable/Problems/test_multiply_placed_shares"
412         self.set_up_grid()
413[Rename get_checkstring to get_next_checkstring
414Kevan Carstensen <kevan@isnotajoke.com>**20111229190000
415 Ignore-this: 5920fe3d0b4d466ee01f74ee91c9ad87
416 
417 get_next_checkstring reflects the relationship of the checkstring
418 returned by the method to what's actually on the server. In particular,
419 it draws a distinction between what's there now and what's going to be
420 there when the write takes place. No such distinction is drawn now,
421 which makes it harder to understand the code.
422] {
423hunk ./src/allmydata/interfaces.py 455
424         server.
425         """
426 
427+    def get_next_checkstring():
428+        """
429+        Return the checkstring that will exist on the server after the write
430+        has completed.
431+        """
432+
433     def put_block(data, segnum, salt):
434         """
435         Add a block and salt to the share.
436hunk ./src/allmydata/mutable/layout.py 297
437         self._testvs = [(0, len(checkstring), "eq", checkstring)]
438 
439 
440-    def get_checkstring(self):
441+    def get_next_checkstring(self):
442         assert "root_hash" in self._share_pieces
443         assert "salt" in self._share_pieces
444 
445hunk ./src/allmydata/mutable/layout.py 841
446         This can be invoked in one of two ways.
447 
448         With one argument, I assume that you are giving me a literal
449-        checkstring -- e.g., the output of get_checkstring. I will then
450-        set that checkstring as it is. This form is used by unit tests.
451+        checkstring. I will then set that checkstring as it is. This
452+        form is used by unit tests.
453 
454         With two arguments, I assume that you are giving me a sequence
455         number and root hash to make a checkstring from. In that case, I
456hunk ./src/allmydata/mutable/layout.py 881
457         return "MDMFSlotWriteProxy for share %d" % self.shnum
458 
459 
460-    def get_checkstring(self):
461+    def get_next_checkstring(self):
462         """
463         Given a share number, I return a representation of what the
464         checkstring for that share on the server will look like.
465hunk ./src/allmydata/mutable/layout.py 1018
466         self._root_hash = roothash
467         # To write both of these values, we update the checkstring on
468         # the remote server, which includes them
469-        checkstring = self.get_checkstring()
470+        checkstring = self.get_next_checkstring()
471         self._writevs.append(tuple([0, checkstring]))
472         # This write, if successful, changes the checkstring, so we need
473         # to update our internal checkstring to be consistent with the
474hunk ./src/allmydata/mutable/layout.py 1146
475         if not self._written:
476             # Write a new checkstring to the share when we write it, so
477             # that we have something to check later.
478-            new_checkstring = self.get_checkstring()
479+            new_checkstring = self.get_next_checkstring()
480             datavs.append((0, new_checkstring))
481             def _first_write():
482                 self._written = True
483hunk ./src/allmydata/mutable/publish.py 827
484         uncoordinated writes. SDMF files will have the same checkstring,
485         so we need not do anything.
486         """
487-        self._checkstring = self.writers.values()[0][0].get_checkstring()
488+        self._checkstring = self.writers.values()[0][0].get_next_checkstring()
489 
490 
491     def _make_and_place_signature(self):
492hunk ./src/allmydata/test/test_storage.py 1757
493             result, readv = results
494             self.failUnless(result)
495             self.failIf(readv)
496-            self.old_checkstring = mw.get_checkstring()
497+            self.old_checkstring = mw.get_next_checkstring()
498             mw.set_checkstring("")
499         d.addCallback(_then)
500         d.addCallback(lambda ignored:
501hunk ./src/allmydata/test/test_storage.py 2303
502         d.addCallback(lambda ignored:
503             mr.get_checkstring())
504         d.addCallback(lambda checkstring:
505-            self.failUnlessEqual(checkstring, mw.get_checkstring()))
506+            self.failUnlessEqual(checkstring, mw.get_next_checkstring()))
507         return d
508 
509 
510hunk ./src/allmydata/test/test_storage.py 2799
511                                   1,
512                                   self.root_hash,
513                                   self.salt)
514-        self.failUnlessEqual(sdmfw.get_checkstring(), checkstring)
515+        self.failUnlessEqual(sdmfw.get_next_checkstring(), checkstring)
516 
517 
518 class Stats(unittest.TestCase):
519}
520[Add get_expected_checkstring; add tests for get_expected_checkstring
521Kevan Carstensen <kevan@isnotajoke.com>**20120101004913
522 Ignore-this: 57dcb62ea29fa6e76f541485365e3da2
523 
524 get_expected_checkstring returns the checkstring that the writer expects
525 to be present on the server for the share being written before the write
526 takes place. get_next_checkstring returns the checkstring that will be
527 present after the writer performs a write operation.
528] {
529hunk ./src/allmydata/interfaces.py 449
530         some other thing.
531         """
532 
533-    def get_checkstring():
534+    def get_expected_checkstring():
535         """
536hunk ./src/allmydata/interfaces.py 451
537-        Get the checkstring that I think currently exists on the remote
538+        Return the checkstring that I think currently exists on the remote
539         server.
540         """
541 
542hunk ./src/allmydata/mutable/layout.py 297
543         self._testvs = [(0, len(checkstring), "eq", checkstring)]
544 
545 
546+    def get_expected_checkstring(self):
547+        """
548+        I return the checkstring that I think should exist on the remote
549+        storage server before I'm told to write the new share to the
550+        storage server.
551+        """
552+        if not self._testvs: return None
553+
554+        return self._testvs[0][3]
555+
556+
557     def get_next_checkstring(self):
558         assert "root_hash" in self._share_pieces
559         assert "salt" in self._share_pieces
560hunk ./src/allmydata/mutable/layout.py 892
561         return "MDMFSlotWriteProxy for share %d" % self.shnum
562 
563 
564+    def get_expected_checkstring(self):
565+        """
566+        I return the checkstring that I think should exist on the remote
567+        storage server before I'm told to write the new share to the
568+        storage server.
569+        """
570+        if not self._testvs: return None
571+
572+        return self._testvs[0][3]
573+
574+
575     def get_next_checkstring(self):
576         """
577         Given a share number, I return a representation of what the
578hunk ./src/allmydata/mutable/publish.py 1024
579                 # we'll hit this in normal operation.
580                 continue
581             elif shnum in known_writers and \
582-              checkstring == known_writers[shnum].get_current_checkstring():
583+              checkstring == known_writers[shnum].get_expected_checkstring():
584                 self.log("we're writing share %d and nothing appears out of the ordinary, ignoring" % shnum)
585                 continue
586             else:
587hunk ./src/allmydata/test/test_storage.py 2775
588                                    self.secrets,
589                                    1, 3, 10, 36, 36)
590         sdmfw.put_block(self.blockdata, 0, self.salt)
591-
592+        other_checkstring = struct.pack(PREFIX,
593+                                        0,
594+                                        0,
595+                                        "b" * 32,
596+                                        "c" * 12)
597+        sdmfw.set_checkstring(other_checkstring)
598         # Put the encprivkey
599         sdmfw.put_encprivkey(self.encprivkey)
600 
601hunk ./src/allmydata/test/test_storage.py 2805
602                                   self.root_hash,
603                                   self.salt)
604         self.failUnlessEqual(sdmfw.get_next_checkstring(), checkstring)
605+        self.failUnlessEqual(sdmfw.get_expected_checkstring(),
606+                             other_checkstring)
607+
608+
609+    def test_get_checkstring_mdmf(self):
610+        mw = self._make_new_mw("si1", 0)
611+        self.build_test_mdmf_share()
612+        other_checkstring = struct.pack(">BQ32s",
613+                                        1,
614+                                        0,
615+                                        "z" * 32)
616+        mw.set_checkstring(other_checkstring)
617+        # Write a share using the mutable writer, and make sure that the
618+        # reader knows how to read everything back to us.
619+        d = defer.succeed(None)
620+        for i in xrange(6):
621+            d.addCallback(lambda ignored, i=i:
622+                mw.put_block(self.block, i, self.salt))
623+        d.addCallback(lambda ignored:
624+            mw.put_encprivkey(self.encprivkey))
625+        d.addCallback(lambda ignored:
626+            mw.put_blockhashes(self.block_hash_tree))
627+        d.addCallback(lambda ignored:
628+            mw.put_sharehashes(self.share_hash_chain))
629+        d.addCallback(lambda ignored:
630+            mw.put_root_hash(self.root_hash))
631+        d.addCallback(lambda ignored:
632+            mw.put_signature(self.signature))
633+        d.addCallback(lambda ignored:
634+            mw.put_verification_key(self.verification_key))
635+        d.addCallback(lambda ignored: mw.get_expected_checkstring())
636+        d.addCallback(lambda checkstring:
637+            self.failUnlessEqual(checkstring, other_checkstring))
638+        d.addCallback(lambda ignored: mw.get_next_checkstring())
639+        d.addCallback(lambda checkstring:
640+            self.failUnlessEqual(checkstring, self.checkstring))
641+        return d
642 
643 
644 class Stats(unittest.TestCase):
645}
646
647Context:
648
649[test_mutable: don't use 75 shares (slow), now that the bug is fixed
650Brian Warner <warner@lothar.com>**20111228223819
651 Ignore-this: 930f1a24ebe9ed2ab25e4b2a16e36352
652 
653 I missed this part of Kevan's fix-1628.darcs.2.patch .
654]
655[mutable publish: fix not-enough-shares detection. Refs #1628.
656Brian Warner <warner@lothar.com>**20111228055018
657 Ignore-this: 23db08d8d630268e208e1755509adf92
658 
659 This should match the "fix-1628.darcs.2.patch" attachment on that ticket.
660]
661[mutable publish: track multiple servers-per-share. Fixes some of #1628.
662Brian Warner <warner@lothar.com>**20111228053358
663 Ignore-this: 6e8cb92e70273b81098f73ebf23164bd
664 
665 The remaining work is to write additional tests.
666 
667 src/allmydata/test/no_network.py:
668 
669  This supports tests in which servers leave the grid only to return with
670  their shares intact at a later time.
671 
672 src/allmydata/test/test_mutable.py:
673 
674  The UCWEs in the incident reports associated with #1628 all seem to be
675  associated with shares that the servermap knows about, but which aren't
676  accounted for during the publish process for whatever reason. Specifically,
677  it looks like the publisher is only capable of keeping track of a single
678  storage server for a given share. This makes the repair process worse than
679  it was pre-MDMF at updating all of the shares of a particular file to the
680  newest version, and can also cause spurious UCWEs. This test simulates such
681  a layout and fails if an UCWE is thrown. We need to write another test to
682  ensure that all copies of a share are updated to the latest version (or
683  alter this test to do that), so that the test suite doesn't pass unless both
684  regressions are fixed.
685 
686  We want the publisher to follow the existing share placement when uploading
687  a new version of a mutable file, and we don't want this test to pass unless
688  it does.
689 
690 src/allmydata/mutable/publish.py:
691 
692  Before this commit, the publisher only kept track of a single writer for
693  each share. This is insufficient to handle updates in which a single share
694  may live on multiple servers. In the best case, an update will only update
695  one of the existing shares instead of all of them. In some cases, the update
696  will encounter the existing shares when publishing some other share,
697  interpret it as a sign of an uncoordinated update, and fail. Keeping track
698  of all of the writers helps ensure that all existing shares are updated, and
699  helps avoid spurious uncoordinated write errors.
700]
701[docs: how_to_make_a_tahoe-lafs_release.rst add Google+ page to publicity list, change to cute unicode checkboxes
702zooko@zooko.com**20111226151905
703 Ignore-this: c7c1e67761df48fa11c0dad1847c2d8
704]
705[doc: about.rst: use unicode emdash, use non-embedded URIs, add clarificaiton of when a file gets its mutable-or-immutable nature
706zooko@zooko.com**20111206171908
707 Ignore-this: 61bc3f1582c68dcc9867da964fc9bb3a
708 embedded URIs, although documented here:
709 http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#embedded-uris
710 generate messages like this from rst2html --verbose:
711 
712 quickstart.rst:3: (INFO/1) Duplicate explicit target name: "the tahoe-dev mailing list".
713 
714 Also this patch prepends a "utf-8 BOM" to the beginning of the file.
715]
716[minor cleanup: remove trailing spaces in misc/
717Brian Warner <warner@lothar.com>**20111218201841
718 Ignore-this: 69a8904c17d8fd930442d00e24b7b188
719]
720[Tests for ref #1592.
721david-sarah@jacaranda.org**20111217043130
722 Ignore-this: a6713500ebe2d686581c6743b8a88f60
723]
724[test_web.py cleanup: use failUnlessIn/failIfIn in preference to 'in' operator.
725david-sarah@jacaranda.org**20111217042710
726 Ignore-this: c351f4b1d162eca545ba657dc3c70c19
727]
728[Marcus Wanner's favicon patch. fixes #1592
729david-sarah@jacaranda.org**20111217033201
730 Ignore-this: 3528c920379fe0d157441dafe9a7c5a8
731]
732[setup.py: stop putting pyutil.version_class/etc in _version.py
733Brian Warner <warner@lothar.com>**20111205055049
734 Ignore-this: 926fa9a8a34a04f24ee6e006423e9c1
735 
736 allmydata.__version__ can just be a string, it doesn't need to be an instance
737 of some fancy NormalizedVersion class. Everything inside Tahoe uses
738 str(__version__) anyways.
739 
740 Also add .dev0 when a git tree is dirty.
741 
742 Closes #1466
743]
744[setup.py: get version from git or darcs
745Brian Warner <warner@lothar.com>**20111205044001
746 Ignore-this: 5a406b33000446d85edc722298391220
747 
748 This replaces the setup.cfg aliases that run "darcsver" before each major
749 command with the new "update_version". update_version is defined in setup.py,
750 and tries to get a version string from either darcs or git (or leaves the
751 existing _version.py alone if neither VC metadata is available).
752 
753 Also clean up a tiny typo in verlib.py that messed up syntax hilighting.
754]
755[docs/known_issues.rst: describe when the unauthorized access attack is known to be possible, and fix a link.
756david-sarah@jacaranda.org**20111118002013
757 Ignore-this: d89b1f1040a0a7ee0bde893d23612049
758]
759[more tiny buildbot-testing whitespace changes
760warner@lothar.com**20111118002041
761 Ignore-this: e816e2a5ab939e2f7a89ef12b8a157d8
762]
763[more tiny buildbot-testing whitespace changes
764warner@lothar.com**20111118001828
765 Ignore-this: 57bb52cba83ea9a19728ba0a8ffadb69
766]
767[tiny change to exercise the buildbot hook
768warner@lothar.com**20111118001511
769 Ignore-this: 7220b7790b39f19f9721d9e93b755030
770]
771[Strengthen description of unauthorized access attack in known_issues.rst.
772david-sarah@jacaranda.org**20111118000030
773 Ignore-this: e2f68f621fe666b6201542623aa4d182
774]
775[remove remaining uses of nevow's "formless" module
776Brian Warner <warner@lothar.com>**20111117225423
777 Ignore-this: a128dea91a1c63b3bbefa34729344d69
778 
779 We're slowly moving away from Nevow, and marcusw's previous patch removed
780 uses of the formless CSS file, so now we can stop testing that nevow can find
781 that file, and remove the lingering unused "import formless" call.
782]
783[1585-webui.darcs.patch
784Marcus Wanner <marcus@wanners.net>**20111117214923
785 Ignore-this: 23cf2a06c545be5f821c071d652178ee
786]
787[Remove duplicate tahoe_css links from manifest.xhtml and rename-form.xhtml
788Brian Warner <warner@lothar.com>**20111116224225
789 Ignore-this: 12024fff17964607799928928b9aadf3
790 
791 They were probably meant to be links to webform_css, but we aren't really
792 using Nevow's form-generation code anyways, so they can just be removed.
793 Thanks to 'marcusw' for the catch.
794]
795[iputil: handle openbsd5 (just like openbsd4)
796Brian Warner <warner@lothar.com>**20111115220423
797 Ignore-this: 64b28bd2fd06eb5230ea41d91540dd05
798 
799 Patch by 'sickness'. Closes #1584
800]
801[Makefile count-lines: let it work on OS-X (-l not --lines), add XXX
802Brian Warner <warner@lothar.com>**20111109184227
803 Ignore-this: 204ace1dadc9ed27543c62965b4e6757
804 
805 OS-X's simple-minded /usr/bin/wc doesn't understand --lines, but everyone
806 understands -l .
807]
808[setup.py: umask=022 for 'sdist', to avoid depending on environment
809Brian Warner <warner@lothar.com>**20111109183632
810 Ignore-this: acd5db88ba8f1972d618b14f9e5b803c
811 
812 The new tarball-building buildslave had a bogus umask set, causing the 1.9.0
813 tarballs to be non-other-user-readable (go-rwx), which is a hassle for
814 packaging. (The umask was correct on the old buildslave, but it was moved to
815 a new host shortly before the release). This should make sure tarballs are
816 correct despite the host's setting.
817 
818 Note to others: processes run under twistd get umask=077 unless you arrange
819 otherwise.
820]
821[_auto_deps.py: blacklist PyCrypto 2.4.
822david-sarah@jacaranda.org**20111105022457
823 Ignore-this: 876cb24bc71589e735f48bf449cad81e
824]
825[check-miscaptures.py: report the number of files that were not analysed due to syntax errors (and don't count them in the number of suspicious captures). refs #1555
826david-sarah@jacaranda.org**20111009050301
827 Ignore-this: 62ee03f4b8a96c292e75c097ad87d52e
828]
829[check-miscaptures.py: handle corner cases around default arguments correctly. Also make a minor optimization when there are no assigned variables to consider. refs #1555
830david-sarah@jacaranda.org**20111009045023
831 Ignore-this: f49ece515620081da1d745ae6da19d21
832]
833[check-miscaptures.py: Python doesn't really have declarations; report the topmost assignment. refs #1555
834david-sarah@jacaranda.org**20111009044800
835 Ignore-this: 4905c9dfe7726f433333e216a6760a4b
836]
837[check-miscaptures.py: handle destructuring function arguments correctly. refs #1555
838david-sarah@jacaranda.org**20111009044710
839 Ignore-this: f9de7d95e94446507a206c88d3f98a23
840]
841[check-miscaptures.py: check while loops and list comprehensions as well as for loops. Also fix a pyflakes warning. refs #1555
842david-sarah@jacaranda.org**20111009044022
843 Ignore-this: 6526e4e315ca6461b1fbc2da5568e444
844]
845[Add misc/coding_tools/check-miscaptures.py to detect incorrect captures of variables declared in a for loop, and a 'make check-miscaptures' Makefile target to run it. (It is also run by 'make code-checks'.) This is a rewritten version that reports much fewer false positives, by determining captured variables more accurately. fixes #1555
846david-sarah@jacaranda.org**20111007074121
847 Ignore-this: 51318e9678d132c374ea557ab955e79e
848]
849[Fix pyflakes warnings in misc/ directories other than misc/build_helpers. refs #1557
850david-sarah@jacaranda.org**20111007033031
851 Ignore-this: 7daf5862469732d8cabc355266622b74
852]
853[Makefile: include misc/ directories other than misc/build_helpers in SOURCES. refs #1557
854david-sarah@jacaranda.org**20111007032958
855 Ignore-this: 31376ec01401df7972e83341dc65aa05
856]
857[show-tool-versions: tolerate missing setuptools
858Brian Warner <warner@lothar.com>**20111101080010
859 Ignore-this: 72d4e440565273992beb4f010cbca699
860]
861[show-tool-versions.py: condense output, hide file-not-found exceptions
862Brian Warner <warner@lothar.com>**20111101074532
863 Ignore-this: a15381a76077ef46a74a4ac40c9ae956
864]
865[relnotes.txt: fix footnotes
866Brian Warner <warner@lothar.com>**20111101071935
867 Ignore-this: 668c1bd8618e21beed9bc6b23f048189
868]
869[Rewrite download-status-timeline visualizer ('viz') with d3.js
870Brian Warner <warner@lothar.com>**20111101061821
871 Ignore-this: 6149b027bbae52c559ef5a8167240cab
872 
873 * use d3.js v2.4.6
874 * add a "toggle misc events" button, to get hash/bitmap-checking details
875 * only draw data that's on screen, for speed
876 * add fragment-arg to fetch timeline data.json from somewhere else
877]
878[IServer refactoring: pass IServer instances around, instead of peerids
879Brian Warner <warner@lothar.com>**20111101040319
880 Ignore-this: 35e4698a0273a0311fe0ccedcc7881b5
881 
882 refs #1363
883 
884 This collapses 88 small incremental changes (each of which passes all tests)
885 into one big patch. The development process for the long path started with
886 adding some temporary scaffolding, changing one method at a time, then
887 removing the scaffolding. The individual pieces are as follows, in reverse
888 chronological order (the first patch is at the end of this comment):
889 
890  commit 9bbe4174fd0d98a6cf47a8ef96e85d9ef34b2f9a
891  Author: Brian Warner <warner@lothar.com>
892  Date:   Tue Oct 4 16:05:00 2011 -0400
893 
894      immutable/downloader/status.py: correct comment
895 
896   src/allmydata/immutable/downloader/status.py |    2 +-
897   1 files changed, 1 insertions(+), 1 deletions(-)
898 
899  commit 72146a7c7c91eac2f7c3ceb801eb7a1721376889
900  Author: Brian Warner <warner@lothar.com>
901  Date:   Tue Oct 4 15:46:20 2011 -0400
902 
903      remove temporary ServerMap._storage_broker
904 
905   src/allmydata/mutable/checker.py   |    2 +-
906   src/allmydata/mutable/filenode.py  |    2 +-
907   src/allmydata/mutable/publish.py   |    2 +-
908   src/allmydata/mutable/servermap.py |    5 ++---
909   src/allmydata/test/test_mutable.py |    8 ++++----
910   5 files changed, 9 insertions(+), 10 deletions(-)
911 
912  commit d703096b41632c47d76414b12672e076a422ff5c
913  Author: Brian Warner <warner@lothar.com>
914  Date:   Tue Oct 4 15:37:05 2011 -0400
915 
916      remove temporary storage_broker.get_server_for_id()
917 
918   src/allmydata/storage_client.py  |    3 ---
919   src/allmydata/test/no_network.py |   13 -------------
920   2 files changed, 0 insertions(+), 16 deletions(-)
921 
922  commit 620cc5d80882ef6f7decfd26af8a6c7c1ddf80d1
923  Author: Brian Warner <warner@lothar.com>
924  Date:   Tue Oct 4 12:50:06 2011 -0400
925 
926      API of Retrieve._try_to_validate_privkey(), trying to remove reader.server
927 
928   src/allmydata/mutable/retrieve.py |   10 +++++-----
929   1 files changed, 5 insertions(+), 5 deletions(-)
930 
931  commit 92f43f856f4a8b36c207d1b190ed8699b5a4ecb4
932  Author: Brian Warner <warner@lothar.com>
933  Date:   Tue Oct 4 12:48:08 2011 -0400
934 
935      API of Retrieve._validate_block(), trying to remove reader.server
936 
937   src/allmydata/mutable/retrieve.py |   14 +++++++-------
938   1 files changed, 7 insertions(+), 7 deletions(-)
939 
940  commit 572d5070761861a2190349d1ed8d85dbc25698a5
941  Author: Brian Warner <warner@lothar.com>
942  Date:   Tue Oct 4 12:36:58 2011 -0400
943 
944      API of Retrieve._mark_bad_share(), trying to remove reader.server
945 
946   src/allmydata/mutable/retrieve.py |   21 +++++++++------------
947   1 files changed, 9 insertions(+), 12 deletions(-)
948 
949  commit a793ff00c0de1e2eec7b46288fdf388c7a2bec89
950  Author: Brian Warner <warner@lothar.com>
951  Date:   Tue Oct 4 12:06:13 2011 -0400
952 
953      remove now-unused get_rref_for_serverid()
954 
955   src/allmydata/mutable/servermap.py |    3 ---
956   1 files changed, 0 insertions(+), 3 deletions(-)
957 
958  commit 1b9827cc9366bf90b93297fdd6832f2ad0480ce7
959  Author: Brian Warner <warner@lothar.com>
960  Date:   Tue Oct 4 12:03:09 2011 -0400
961 
962      Retrieve: stop adding .serverid attributes to readers
963 
964   src/allmydata/mutable/retrieve.py |    1 -
965   1 files changed, 0 insertions(+), 1 deletions(-)
966 
967  commit 5d4e9d491b19e49d2e443a1dfff2c672842c36ef
968  Author: Brian Warner <warner@lothar.com>
969  Date:   Tue Oct 4 12:03:34 2011 -0400
970 
971      return value of Retrieve(verify=True)
972 
973   src/allmydata/mutable/checker.py  |   11 ++++++-----
974   src/allmydata/mutable/retrieve.py |    3 +--
975   2 files changed, 7 insertions(+), 7 deletions(-)
976 
977  commit e9ab7978c384e1f677cb7779dc449b1044face82
978  Author: Brian Warner <warner@lothar.com>
979  Date:   Tue Oct 4 11:54:23 2011 -0400
980 
981      Retrieve._bad_shares (but not return value, used by Verifier)
982 
983   src/allmydata/mutable/retrieve.py |    7 ++++---
984   1 files changed, 4 insertions(+), 3 deletions(-)
985 
986  commit 2d91926de233ec5c881f30e36b4a30ad92ab42a9
987  Author: Brian Warner <warner@lothar.com>
988  Date:   Tue Oct 4 11:51:23 2011 -0400
989 
990      Publish: stop adding .serverid attributes to writers
991 
992   src/allmydata/mutable/publish.py |    9 ++-------
993   1 files changed, 2 insertions(+), 7 deletions(-)
994 
995  commit 47c7a0105dec7cbf4f7e0a3ce800bbb85b15df4a
996  Author: Brian Warner <warner@lothar.com>
997  Date:   Tue Oct 4 11:56:33 2011 -0400
998 
999      API of get_write_enabler()
1000 
1001   src/allmydata/mutable/filenode.py |    7 ++++---
1002   src/allmydata/mutable/publish.py  |    4 ++--
1003   src/allmydata/test/no_network.py  |    3 +++
1004   3 files changed, 9 insertions(+), 5 deletions(-)
1005 
1006  commit 9196a5c6590fdbfd660325ea8358b345887d3db0
1007  Author: Brian Warner <warner@lothar.com>
1008  Date:   Tue Oct 4 11:46:24 2011 -0400
1009 
1010      API of get_(renewal|cancel)_secret()
1011 
1012   src/allmydata/mutable/filenode.py  |   14 ++++++++------
1013   src/allmydata/mutable/publish.py   |    8 ++++----
1014   src/allmydata/mutable/servermap.py |    5 ++---
1015   3 files changed, 14 insertions(+), 13 deletions(-)
1016 
1017  commit de7c1552f8c163eff5b6d820b5fb3b21c1b47cb5
1018  Author: Brian Warner <warner@lothar.com>
1019  Date:   Tue Oct 4 11:41:52 2011 -0400
1020 
1021      API of CorruptShareError. Also comment out some related+unused test_web.py code
1022 
1023   src/allmydata/mutable/common.py    |   13 +++++--------
1024   src/allmydata/mutable/retrieve.py  |   10 +++++-----
1025   src/allmydata/mutable/servermap.py |    8 +++-----
1026   src/allmydata/test/common.py       |   13 ++++++++-----
1027   4 files changed, 21 insertions(+), 23 deletions(-)
1028 
1029  commit 2c1c314046b620c16f1e66d030c150d768b7d01e
1030  Author: Brian Warner <warner@lothar.com>
1031  Date:   Tue Oct 4 12:01:46 2011 -0400
1032 
1033      API of ServerMap.mark_bad_share()
1034 
1035   src/allmydata/mutable/publish.py   |    2 +-
1036   src/allmydata/mutable/retrieve.py  |    6 +++---
1037   src/allmydata/mutable/servermap.py |    6 ++----
1038   src/allmydata/test/test_mutable.py |    3 +--
1039   4 files changed, 7 insertions(+), 10 deletions(-)
1040 
1041  commit 1bed349030779fd0c378ae4e821384f953c6f6ff
1042  Author: Brian Warner <warner@lothar.com>
1043  Date:   Tue Oct 4 11:11:17 2011 -0400
1044 
1045      API+name of ServerMap.shares_on_server() : only for tests, so debug_ prefix
1046 
1047   src/allmydata/mutable/servermap.py |    7 ++-----
1048   src/allmydata/test/test_mutable.py |    6 +++---
1049   2 files changed, 5 insertions(+), 8 deletions(-)
1050 
1051  commit 2d32e448677d6b818692e801045d4115b29abf21
1052  Author: Brian Warner <warner@lothar.com>
1053  Date:   Tue Oct 4 11:07:10 2011 -0400
1054 
1055      API of ServerMap.all_servers_for_version()
1056 
1057   src/allmydata/mutable/servermap.py |    4 ++--
1058   1 files changed, 2 insertions(+), 2 deletions(-)
1059 
1060  commit 48f3204d1889c3e7179578125c4bdef515af3d6a
1061  Author: Brian Warner <warner@lothar.com>
1062  Date:   Tue Oct 4 11:04:50 2011 -0400
1063 
1064      internals of ServerMap methods that use make_versionmap(), remove temp copy
1065 
1066   src/allmydata/mutable/servermap.py |   28 +++++++++----------------
1067   1 files changed, 10 insertions(+), 18 deletions(-)
1068 
1069  commit 5c3da77b6c777a145bd5ddfaa4db849dc9495548
1070  Author: Brian Warner <warner@lothar.com>
1071  Date:   Tue Oct 4 11:01:28 2011 -0400
1072 
1073      API of ServerMap.make_versionmap()
1074 
1075   src/allmydata/mutable/checker.py   |    4 ++--
1076   src/allmydata/mutable/retrieve.py  |    5 ++---
1077   src/allmydata/mutable/servermap.py |    4 ++--
1078   src/allmydata/test/test_mutable.py |    7 ++++---
1079   4 files changed, 10 insertions(+), 10 deletions(-)
1080 
1081  commit b6882ece49afb4c507d118af2db346fa329209dc
1082  Author: Brian Warner <warner@lothar.com>
1083  Date:   Tue Oct 4 10:53:38 2011 -0400
1084 
1085      make a copy of ServerMap.make_versionmap() (_make_versionmap2) for internal use
1086 
1087   src/allmydata/mutable/servermap.py |   18 +++++++++++++-----
1088   1 files changed, 13 insertions(+), 5 deletions(-)
1089 
1090  commit 963f8e63faf32b950eb1b8103cd2ff16fe8f0151
1091  Author: Brian Warner <warner@lothar.com>
1092  Date:   Tue Oct 4 00:45:58 2011 -0400
1093 
1094      API of RetrieveStatus.add_problem()
1095 
1096   src/allmydata/mutable/retrieve.py |    5 +++--
1097   1 files changed, 3 insertions(+), 2 deletions(-)
1098 
1099  commit 4976d29ffae565a048851601c29013bbae2976d8
1100  Author: Brian Warner <warner@lothar.com>
1101  Date:   Tue Oct 4 00:45:05 2011 -0400
1102 
1103      API of RetrieveStatus.add_fetch_timing()
1104 
1105   src/allmydata/mutable/retrieve.py |    5 +++--
1106   1 files changed, 3 insertions(+), 2 deletions(-)
1107 
1108  commit d057d3bbba72663ee148a8b916bc2d52be2e3982
1109  Author: Brian Warner <warner@lothar.com>
1110  Date:   Tue Oct 4 00:44:04 2011 -0400
1111 
1112      API of Retrieve.notify_server_corruption()
1113 
1114   src/allmydata/mutable/retrieve.py |    6 +++---
1115   1 files changed, 3 insertions(+), 3 deletions(-)
1116 
1117  commit 8a2a81e46671c860610e0e96d6add1a57551f22d
1118  Author: Brian Warner <warner@lothar.com>
1119  Date:   Tue Oct 4 00:42:32 2011 -0400
1120 
1121      remove unused _outstanding_queries
1122 
1123   src/allmydata/mutable/retrieve.py |    1 -
1124   1 files changed, 0 insertions(+), 1 deletions(-)
1125 
1126  commit 56d12cc9968d03ccd53764455c671122c4f391d1
1127  Author: Brian Warner <warner@lothar.com>
1128  Date:   Tue Oct 4 00:40:57 2011 -0400
1129 
1130      change Retrieve.remaining_sharemap
1131 
1132   src/allmydata/mutable/retrieve.py |    4 ++--
1133   1 files changed, 2 insertions(+), 2 deletions(-)
1134 
1135  commit 4f0b7af4821f43290bfc70f2b1fc30149ad81281
1136  Author: Brian Warner <warner@lothar.com>
1137  Date:   Tue Oct 4 10:40:18 2011 -0400
1138 
1139      accessor for PublishStatus._problems
1140 
1141   src/allmydata/mutable/publish.py |    4 +++-
1142   src/allmydata/web/status.py      |    2 +-
1143   2 files changed, 4 insertions(+), 2 deletions(-)
1144 
1145  commit 627087cf66d0b8cc519f4d551a967a7bd9b6a741
1146  Author: Brian Warner <warner@lothar.com>
1147  Date:   Tue Oct 4 10:36:39 2011 -0400
1148 
1149      accessor for RetrieveStatus._problems
1150 
1151   src/allmydata/mutable/retrieve.py |    8 ++++++--
1152   src/allmydata/web/status.py       |    2 +-
1153   2 files changed, 7 insertions(+), 3 deletions(-)
1154 
1155  commit ca7dea81f03801b1c7353fc00ecba689268109cf
1156  Author: Brian Warner <warner@lothar.com>
1157  Date:   Tue Oct 4 00:35:32 2011 -0400
1158 
1159      add .server to "reader", so we can get at it later
1160 
1161   src/allmydata/mutable/retrieve.py |    5 +++--
1162   1 files changed, 3 insertions(+), 2 deletions(-)
1163 
1164  commit 6ef516e24908ec195af084a7550d1921a5e983b0
1165  Author: Brian Warner <warner@lothar.com>
1166  Date:   Tue Oct 4 00:32:32 2011 -0400
1167 
1168      temporarily give Retrieve a _storage_broker, so it can map serverids to servers
1169 
1170   src/allmydata/mutable/checker.py   |    3 ++-
1171   src/allmydata/mutable/filenode.py  |    6 ++++--
1172   src/allmydata/mutable/retrieve.py  |    5 +++--
1173   src/allmydata/test/test_mutable.py |    4 ++--
1174   4 files changed, 11 insertions(+), 7 deletions(-)
1175 
1176  commit afe08e4dd3f4ff9ff7e8a2a8d28b181e3625bcc9
1177  Author: Brian Warner <warner@lothar.com>
1178  Date:   Tue Oct 4 00:21:51 2011 -0400
1179 
1180      mutable/retrieve.py: s/peer/server/
1181 
1182   src/allmydata/mutable/retrieve.py  |   82 +++++++++++++-------------
1183   src/allmydata/test/test_mutable.py |    6 +-
1184   2 files changed, 44 insertions(+), 44 deletions(-)
1185 
1186  commit 910afcb5d7f274880f68dd6cdb5b05f2bbc29adc
1187  Author: Brian Warner <warner@lothar.com>
1188  Date:   Tue Oct 4 00:16:01 2011 -0400
1189 
1190      web.status.PublishStatusPage: add comment, I think .problems isn't exercised
1191 
1192   src/allmydata/web/status.py |    2 ++
1193   1 files changed, 2 insertions(+), 0 deletions(-)
1194 
1195  commit 311466dd8c931bbba40d590ade867704282e7f1a
1196  Author: Brian Warner <warner@lothar.com>
1197  Date:   Mon Oct 3 23:48:16 2011 -0400
1198 
1199      API of PublishStatus.add_per_server_time()
1200 
1201   src/allmydata/mutable/publish.py |    5 +++--
1202   1 files changed, 3 insertions(+), 2 deletions(-)
1203 
1204  commit 2df5faa1b6cbfbaded520d2320305a62fe961118
1205  Author: Brian Warner <warner@lothar.com>
1206  Date:   Mon Oct 3 23:46:37 2011 -0400
1207 
1208      more simplifications
1209 
1210   src/allmydata/mutable/publish.py |    4 +---
1211   1 files changed, 1 insertions(+), 3 deletions(-)
1212 
1213  commit 6ac4544a3da385f2aad9392f906b90192f4f919a
1214  Author: Brian Warner <warner@lothar.com>
1215  Date:   Mon Oct 3 23:44:08 2011 -0400
1216 
1217      API of ServerMap.version_on_server()
1218 
1219   src/allmydata/mutable/publish.py   |    2 +-
1220   src/allmydata/mutable/servermap.py |    4 ++--
1221   src/allmydata/test/test_mutable.py |    5 ++---
1222   3 files changed, 5 insertions(+), 6 deletions(-)
1223 
1224  commit 3e187e322511072e4683329df6b2c6c733a66dba
1225  Author: Brian Warner <warner@lothar.com>
1226  Date:   Tue Oct 4 00:16:32 2011 -0400
1227 
1228      API of ServerMap.make_sharemap()
1229 
1230   src/allmydata/mutable/servermap.py |    4 ++--
1231   src/allmydata/test/test_mutable.py |    7 ++++---
1232   src/allmydata/web/status.py        |    4 ++--
1233   3 files changed, 8 insertions(+), 7 deletions(-)
1234 
1235  commit 318feed8437bdd8d4943c6569d38f7b54b6313cc
1236  Author: Brian Warner <warner@lothar.com>
1237  Date:   Mon Oct 3 23:36:19 2011 -0400
1238 
1239      small cleanups
1240 
1241   src/allmydata/mutable/publish.py |    4 ++--
1242   1 files changed, 2 insertions(+), 2 deletions(-)
1243 
1244  commit bd459ed5714e1db5a7163935c54b7b0b56db8349
1245  Author: Brian Warner <warner@lothar.com>
1246  Date:   Mon Oct 3 23:33:39 2011 -0400
1247 
1248      API of ServerMap.add_new_share()
1249 
1250   src/allmydata/mutable/publish.py   |    4 ++--
1251   src/allmydata/mutable/servermap.py |    6 ++----
1252   2 files changed, 4 insertions(+), 6 deletions(-)
1253 
1254  commit f2804fb6ed11d80088e0da8ed48e6c2922f2ffef
1255  Author: Brian Warner <warner@lothar.com>
1256  Date:   Mon Oct 3 23:30:26 2011 -0400
1257 
1258      API of ServerMap.get_bad_shares()
1259 
1260   src/allmydata/mutable/publish.py   |    3 +--
1261   src/allmydata/mutable/servermap.py |    9 ++++-----
1262   2 files changed, 5 insertions(+), 7 deletions(-)
1263 
1264  commit 965074a47b3ce1431cb46d9a233840afcf9105f5
1265  Author: Brian Warner <warner@lothar.com>
1266  Date:   Mon Oct 3 23:26:58 2011 -0400
1267 
1268      more small cleanups
1269 
1270   src/allmydata/mutable/publish.py |    6 +++---
1271   1 files changed, 3 insertions(+), 3 deletions(-)
1272 
1273  commit 38020da34f034f8889947dd3dc05e087ffff7106
1274  Author: Brian Warner <warner@lothar.com>
1275  Date:   Mon Oct 3 23:18:47 2011 -0400
1276 
1277      change Publish.bad_share_checkstrings
1278 
1279   src/allmydata/mutable/publish.py |    6 +++---
1280   1 files changed, 3 insertions(+), 3 deletions(-)
1281 
1282  commit 5efebcbd2ee0c2f299ea86f7591d856c0f265304
1283  Author: Brian Warner <warner@lothar.com>
1284  Date:   Mon Oct 3 23:16:31 2011 -0400
1285 
1286      change internals of Publish.update_goal()
1287 
1288   src/allmydata/mutable/publish.py |    8 +++-----
1289   1 files changed, 3 insertions(+), 5 deletions(-)
1290 
1291  commit e91b55ff4c2a69165b71f2c7b217ac319ff4c527
1292  Author: Brian Warner <warner@lothar.com>
1293  Date:   Mon Oct 3 23:11:42 2011 -0400
1294 
1295      get rid of Publish.connections
1296 
1297   src/allmydata/mutable/publish.py |   27 +++++----------------------
1298   1 files changed, 5 insertions(+), 22 deletions(-)
1299 
1300  commit 64e9a53b3229ebe2f9ebf7ed502d539311d0e037
1301  Author: Brian Warner <warner@lothar.com>
1302  Date:   Mon Oct 3 23:05:32 2011 -0400
1303 
1304      change Publish.bad_servers
1305 
1306   src/allmydata/mutable/publish.py |   10 +++++-----
1307   1 files changed, 5 insertions(+), 5 deletions(-)
1308 
1309  commit b85a934bef315a06bcfe00c9c12a3627fed2b918
1310  Author: Brian Warner <warner@lothar.com>
1311  Date:   Mon Oct 3 23:03:07 2011 -0400
1312 
1313      Publish.bad_servers: fix bug, this should be a set of serverids, not writers
1314 
1315   src/allmydata/mutable/publish.py |    2 +-
1316   1 files changed, 1 insertions(+), 1 deletions(-)
1317 
1318  commit 605ea15ec15ed671513819003ccd211cdb9761e0
1319  Author: Brian Warner <warner@lothar.com>
1320  Date:   Mon Oct 3 23:00:21 2011 -0400
1321 
1322      change .placed
1323 
1324   src/allmydata/mutable/publish.py |    6 +++---
1325   1 files changed, 3 insertions(+), 3 deletions(-)
1326 
1327  commit f7aba37b1b345d5b6d5cb16e3b3f6f3c1afb658e
1328  Author: Brian Warner <warner@lothar.com>
1329  Date:   Mon Oct 3 22:59:22 2011 -0400
1330 
1331      temporarily stash IServer as .server on the "writer" object
1332 
1333   src/allmydata/mutable/publish.py |    2 ++
1334   1 files changed, 2 insertions(+), 0 deletions(-)
1335 
1336  commit f9b551d788e7db1f187fce5ab98ab5d5fe4e1c36
1337  Author: Brian Warner <warner@lothar.com>
1338  Date:   Mon Oct 3 22:48:18 2011 -0400
1339 
1340      change Publish.goal and API of log_goal() to use IServer, not serverid
1341 
1342   src/allmydata/mutable/publish.py |   48 ++++++++++++++--------------
1343   1 files changed, 24 insertions(+), 24 deletions(-)
1344 
1345  commit 75f20616558e4900b8b1f685dd99aa838de6d452
1346  Author: Brian Warner <warner@lothar.com>
1347  Date:   Mon Oct 3 15:27:02 2011 -0400
1348 
1349      API of ServerMap.get_known_shares()
1350 
1351   src/allmydata/mutable/publish.py   |   16 ++++++++++------
1352   src/allmydata/mutable/servermap.py |    7 ++-----
1353   2 files changed, 12 insertions(+), 11 deletions(-)
1354 
1355  commit 1c38c9d37bb08221b4418762234b1a62397b3b4b
1356  Author: Brian Warner <warner@lothar.com>
1357  Date:   Mon Oct 3 15:20:29 2011 -0400
1358 
1359      Publish.full_serverlist
1360 
1361   src/allmydata/mutable/publish.py |   10 +++++-----
1362   1 files changed, 5 insertions(+), 5 deletions(-)
1363 
1364  commit b6cbd215a04b9cde31a7d92a97a7f048622b16f1
1365  Author: Brian Warner <warner@lothar.com>
1366  Date:   Mon Oct 3 15:12:31 2011 -0400
1367 
1368      API of ServerMap.all_servers()
1369 
1370   src/allmydata/mutable/servermap.py |   19 ++++++-------------
1371   1 files changed, 6 insertions(+), 13 deletions(-)
1372 
1373  commit e63cd0315fae65357b1727ec6d5ff3c6e0d27c98
1374  Author: Brian Warner <warner@lothar.com>
1375  Date:   Mon Oct 3 15:10:18 2011 -0400
1376 
1377      remove ServerMap.connections, set_rref_for_serverid()
1378 
1379   src/allmydata/mutable/servermap.py |   11 +----------
1380   1 files changed, 1 insertions(+), 10 deletions(-)
1381 
1382  commit 4df52db2f80eb12eefa5d57103c24893cde89553
1383  Author: Brian Warner <warner@lothar.com>
1384  Date:   Mon Oct 3 15:04:06 2011 -0400
1385 
1386      API of ServerMap.mark_server_reachable()
1387 
1388   src/allmydata/mutable/servermap.py |    7 ++-----
1389   1 files changed, 2 insertions(+), 5 deletions(-)
1390 
1391  commit 69c715bde77944dc25181b3dbbeb042c816f9a1b
1392  Author: Brian Warner <warner@lothar.com>
1393  Date:   Mon Oct 3 15:03:21 2011 -0400
1394 
1395      API of ServerMap.mark_server_unreachable()
1396 
1397   src/allmydata/mutable/servermap.py |    9 +++------
1398   1 files changed, 3 insertions(+), 6 deletions(-)
1399 
1400  commit 3d784d60eec1c508858e3a617e4411ffbcc3c1fa
1401  Author: Brian Warner <warner@lothar.com>
1402  Date:   Mon Oct 3 15:02:03 2011 -0400
1403 
1404      API of status.set_privkey_from()
1405 
1406   src/allmydata/mutable/servermap.py |    7 +++----
1407   1 files changed, 3 insertions(+), 4 deletions(-)
1408 
1409  commit 544ed3ea29bed7e66da7fd29ca3f6f076f27a9e6
1410  Author: Brian Warner <warner@lothar.com>
1411  Date:   Mon Oct 3 15:01:15 2011 -0400
1412 
1413      API of status.add_per_server_time()
1414 
1415   src/allmydata/mutable/servermap.py |    7 ++++---
1416   1 files changed, 4 insertions(+), 3 deletions(-)
1417 
1418  commit fffe5008b6320bd1e04c3c68389a2bf2ee383fa8
1419  Author: Brian Warner <warner@lothar.com>
1420  Date:   Mon Oct 3 14:59:02 2011 -0400
1421 
1422      remove unused .versionmap
1423 
1424   src/allmydata/mutable/servermap.py |    7 -------
1425   1 files changed, 0 insertions(+), 7 deletions(-)
1426 
1427  commit 2816562e090d2294179db3588dafcca18de1bc2b
1428  Author: Brian Warner <warner@lothar.com>
1429  Date:   Mon Oct 3 14:57:51 2011 -0400
1430 
1431      remove serverid from all log messages. Also one unused lambda.
1432 
1433   src/allmydata/mutable/servermap.py |   30 +++++++++++++-------------
1434   1 files changed, 15 insertions(+), 15 deletions(-)
1435 
1436  commit 28fa6b1a2738fa98c1f1dbd3d0e01ae98912d11f
1437  Author: Brian Warner <warner@lothar.com>
1438  Date:   Mon Oct 3 14:54:30 2011 -0400
1439 
1440      removed unused _readers
1441 
1442   src/allmydata/mutable/servermap.py |    3 ---
1443   1 files changed, 0 insertions(+), 3 deletions(-)
1444 
1445  commit a8e4ed3d645ab592d1add6a1e69b6d1ebfb77817
1446  Author: Brian Warner <warner@lothar.com>
1447  Date:   Mon Oct 3 14:54:16 2011 -0400
1448 
1449      remove unused _sharemap
1450 
1451   src/allmydata/mutable/servermap.py |    1 -
1452   1 files changed, 0 insertions(+), 1 deletions(-)
1453 
1454  commit 3f072e55cf1d0700f9fffe23f8f3a475725df588
1455  Author: Brian Warner <warner@lothar.com>
1456  Date:   Mon Oct 3 14:49:03 2011 -0400
1457 
1458      _must_query
1459 
1460   src/allmydata/mutable/servermap.py |    8 ++++----
1461   1 files changed, 4 insertions(+), 4 deletions(-)
1462 
1463  commit c599a059b8df3f5785e4bf89fb6ecc6d8dcd708b
1464  Author: Brian Warner <warner@lothar.com>
1465  Date:   Mon Oct 3 14:48:05 2011 -0400
1466 
1467      _queries_outstanding
1468 
1469   src/allmydata/mutable/servermap.py |   16 +++++++---------
1470   1 files changed, 7 insertions(+), 9 deletions(-)
1471 
1472  commit 7743759f98ac2c07926b2fdbd80bf52dfab33085
1473  Author: Brian Warner <warner@lothar.com>
1474  Date:   Mon Oct 3 14:46:17 2011 -0400
1475 
1476      _empty_servers
1477 
1478   src/allmydata/mutable/servermap.py |    5 ++---
1479   1 files changed, 2 insertions(+), 3 deletions(-)
1480 
1481  commit 6bb1825916828a713a32cdf7f7411fa3ea2e1e5d
1482  Author: Brian Warner <warner@lothar.com>
1483  Date:   Mon Oct 3 14:45:39 2011 -0400
1484 
1485      _good_servers
1486 
1487   src/allmydata/mutable/servermap.py |    4 ++--
1488   1 files changed, 2 insertions(+), 2 deletions(-)
1489 
1490  commit 1768fab1b51d8dd93ecabbaaabfadfa20cf6c3d4
1491  Author: Brian Warner <warner@lothar.com>
1492  Date:   Mon Oct 3 14:44:59 2011 -0400
1493 
1494      _bad_servers
1495 
1496   src/allmydata/mutable/servermap.py |   14 +++++++-------
1497   1 files changed, 7 insertions(+), 7 deletions(-)
1498 
1499  commit dccbaef30f0ba714c746bf6d4a1a803c36e17b65
1500  Author: Brian Warner <warner@lothar.com>
1501  Date:   Mon Oct 3 14:41:54 2011 -0400
1502 
1503      API of _try_to_set_pubkey()
1504 
1505   src/allmydata/mutable/servermap.py |    7 ++++---
1506   1 files changed, 4 insertions(+), 3 deletions(-)
1507 
1508  commit 0481ea70042ba3575f15eac7fd0780f8ece580cc
1509  Author: Brian Warner <warner@lothar.com>
1510  Date:   Mon Oct 3 14:35:02 2011 -0400
1511 
1512      API of notify_server_corruption()
1513 
1514   src/allmydata/mutable/servermap.py |    6 +++---
1515   1 files changed, 3 insertions(+), 3 deletions(-)
1516 
1517  commit bea9cba18fb3b9c11bb22f18356a263ecec7351e
1518  Author: Brian Warner <warner@lothar.com>
1519  Date:   Mon Oct 3 14:34:09 2011 -0400
1520 
1521      API of _got_signature_one_share()
1522 
1523   src/allmydata/mutable/servermap.py |    9 +++++----
1524   1 files changed, 5 insertions(+), 4 deletions(-)
1525 
1526  commit 1520123583cf78650706e114b15bb5b0ac1f4a14
1527  Author: Brian Warner <warner@lothar.com>
1528  Date:   Mon Oct 3 14:32:33 2011 -0400
1529 
1530      API of _try_to_validate_privkey()
1531 
1532   src/allmydata/mutable/servermap.py |    9 +++++----
1533   1 files changed, 5 insertions(+), 4 deletions(-)
1534 
1535  commit 938852c9c8519c7a078f58a9b1f4dd8ec8b6715e
1536  Author: Brian Warner <warner@lothar.com>
1537  Date:   Mon Oct 3 14:31:48 2011 -0400
1538 
1539      API and internals of _add_lease_failed()
1540 
1541   src/allmydata/mutable/servermap.py |    8 ++++----
1542   1 files changed, 4 insertions(+), 4 deletions(-)
1543 
1544  commit 3843dba367e3c19e176a622ab853cb51d2472ddf
1545  Author: Brian Warner <warner@lothar.com>
1546  Date:   Mon Oct 3 14:30:37 2011 -0400
1547 
1548      API of _privkey_query_failed()
1549 
1550   src/allmydata/mutable/servermap.py |    5 +++--
1551   1 files changed, 3 insertions(+), 2 deletions(-)
1552 
1553  commit 2219a710e1633cd57d0ca0786490de87b3e19ba7
1554  Author: Brian Warner <warner@lothar.com>
1555  Date:   Mon Oct 3 14:29:43 2011 -0400
1556 
1557      fix bug in call to _privkey_query_failed, unrelated to refactoring
1558 
1559   src/allmydata/mutable/servermap.py |    2 +-
1560   1 files changed, 1 insertions(+), 1 deletions(-)
1561 
1562  commit ae615bec7d0d1b269710b6902797b12f9592ad62
1563  Author: Brian Warner <warner@lothar.com>
1564  Date:   Mon Oct 3 14:27:17 2011 -0400
1565 
1566      API of _got_corrupt_share()
1567 
1568   src/allmydata/mutable/servermap.py |   17 +++++++++--------
1569   1 files changed, 9 insertions(+), 8 deletions(-)
1570 
1571  commit cb51c95a6f4e077278157a77dab060c8c1ad7a81
1572  Author: Brian Warner <warner@lothar.com>
1573  Date:   Mon Oct 3 14:23:16 2011 -0400
1574 
1575      API of _got_results()
1576 
1577   src/allmydata/mutable/servermap.py |    9 +++++----
1578   1 files changed, 5 insertions(+), 4 deletions(-)
1579 
1580  commit bac9154fe0af18f226999a58ffc2362d8cf4b802
1581  Author: Brian Warner <warner@lothar.com>
1582  Date:   Mon Oct 3 14:19:19 2011 -0400
1583 
1584      API of _query_failed()
1585 
1586   src/allmydata/mutable/servermap.py |    5 +++--
1587   1 files changed, 3 insertions(+), 2 deletions(-)
1588 
1589  commit fdc29a8ca95d4b5c503e5382b9e5d4d02141ba12
1590  Author: Brian Warner <warner@lothar.com>
1591  Date:   Mon Oct 3 14:17:20 2011 -0400
1592 
1593      API of _do_read()
1594 
1595   src/allmydata/mutable/servermap.py |    6 ++++--
1596   1 files changed, 4 insertions(+), 2 deletions(-)
1597 
1598  commit e7e9e338f28d004aa4d423d11c65f1e271ac7322
1599  Author: Brian Warner <warner@lothar.com>
1600  Date:   Mon Oct 3 14:20:21 2011 -0400
1601 
1602      API of _do_query()
1603 
1604   src/allmydata/mutable/servermap.py |   15 +++++++--------
1605   1 files changed, 7 insertions(+), 8 deletions(-)
1606 
1607  commit 330625b9dac4cdbe72a11464a893065b9aeed453
1608  Author: Brian Warner <warner@lothar.com>
1609  Date:   Mon Oct 3 14:43:05 2011 -0400
1610 
1611      next step: first batch of updates to ServermapUpdater
1612 
1613      updates:
1614       most method-local variables in update()
1615       API of _build_initial_querylist()
1616       API of _send_initial_requests()
1617       .full_serverlist
1618       .extra_servers
1619 
1620   src/allmydata/mutable/servermap.py |   39 ++++++++++++++------------
1621   1 files changed, 21 insertions(+), 18 deletions(-)
1622 
1623  commit 4aadc584fa7dcb2daa86b048c81dee0049ba26d9
1624  Author: Brian Warner <warner@lothar.com>
1625  Date:   Mon Oct 3 15:07:00 2011 -0400
1626 
1627      internal change: index _bad_shares with IServer
1628 
1629   src/allmydata/mutable/servermap.py |   20 ++++++++++----------
1630   1 files changed, 10 insertions(+), 10 deletions(-)
1631 
1632  commit 16d4e6fa82a9907dbdc92094213387c6a4164e41
1633  Author: Brian Warner <warner@lothar.com>
1634  Date:   Mon Oct 3 18:20:47 2011 +0100
1635 
1636      internal change: index _known_shares with IServer instead of serverid
1637 
1638      callers are unchanged
1639 
1640   src/allmydata/mutable/servermap.py |   42 +++++++++++++++----------
1641   1 files changed, 25 insertions(+), 17 deletions(-)
1642 
1643  commit ceeb5f4938cc814a0c75d1b8f4018aed965c2176
1644  Author: Brian Warner <warner@lothar.com>
1645  Date:   Mon Oct 3 18:11:43 2011 +0100
1646 
1647      accessors and name cleanup for servermap.Servermap.last_update_mode/time
1648 
1649   src/allmydata/mutable/filenode.py  |    6 +++---
1650   src/allmydata/mutable/publish.py   |    4 ++--
1651   src/allmydata/mutable/servermap.py |   17 +++++++++++------
1652   3 files changed, 16 insertions(+), 11 deletions(-)
1653 
1654  commit 8d3cbda82661c0a7e5c3d3b65cf7a5d5ab7e32c0
1655  Author: Brian Warner <warner@lothar.com>
1656  Date:   Mon Oct 3 18:11:14 2011 +0100
1657 
1658      accessors and name cleanup for servermap.Servermap.problems
1659 
1660   src/allmydata/mutable/servermap.py |   21 +++++++++++++--------
1661   src/allmydata/test/test_mutable.py |    6 +++---
1662   2 files changed, 16 insertions(+), 11 deletions(-)
1663 
1664  commit 348f57988f79389db0aab7672e6eaa9a6d8e3219
1665  Author: Brian Warner <warner@lothar.com>
1666  Date:   Mon Oct 3 18:10:41 2011 +0100
1667 
1668      accessors and name cleanup for servermap.Servermap.bad_shares
1669 
1670   src/allmydata/mutable/publish.py   |    2 +-
1671   src/allmydata/mutable/servermap.py |   30 ++++++++++++++-----------
1672   2 files changed, 18 insertions(+), 14 deletions(-)
1673 
1674  commit 520c9368134673cdf76c653c5e1bb91c2ab5d51e
1675  Author: Brian Warner <warner@lothar.com>
1676  Date:   Mon Oct 3 18:10:05 2011 +0100
1677 
1678      accessors and name cleanup for servermap.Servermap.servermap .
1679 
1680   src/allmydata/mutable/publish.py   |   14 +++++----
1681   src/allmydata/mutable/servermap.py |   38 ++++++++++++++-----------
1682   2 files changed, 29 insertions(+), 23 deletions(-)
1683 
1684  commit b8b8dc38287a91dbdf494426ac801d9381ce5841
1685  Author: Brian Warner <warner@lothar.com>
1686  Date:   Mon Oct 3 18:08:02 2011 +0100
1687 
1688      fix reachable_servers
1689 
1690   src/allmydata/mutable/checker.py   |    3 ++-
1691   src/allmydata/mutable/publish.py   |    4 +++-
1692   src/allmydata/mutable/servermap.py |   12 ++++++++++--
1693   3 files changed, 15 insertions(+), 4 deletions(-)
1694 
1695  commit cb0cfd1adfefad357c187aaaf690c3df68b622bc
1696  Author: Brian Warner <warner@lothar.com>
1697  Date:   Mon Oct 3 18:06:03 2011 +0100
1698 
1699      fix Servermap.unreachable_servers
1700 
1701   src/allmydata/mutable/servermap.py |   11 ++++++++---
1702   1 files changed, 8 insertions(+), 3 deletions(-)
1703 
1704  commit 2d9ea79b94bd4db674d40386fda90825785ac495
1705  Author: Brian Warner <warner@lothar.com>
1706  Date:   Mon Oct 3 18:03:48 2011 +0100
1707 
1708      give ServerMap a StorageFarmBroker, temporary
1709 
1710      this makes it possible for the ServerMap to accept bare serverids and still
1711      build data structures with IServers
1712 
1713   src/allmydata/mutable/checker.py   |    2 +-
1714   src/allmydata/mutable/filenode.py  |    2 +-
1715   src/allmydata/mutable/publish.py   |    2 +-
1716   src/allmydata/mutable/servermap.py |    5 +++--
1717   src/allmydata/test/test_mutable.py |    8 ++++----
1718   5 files changed, 10 insertions(+), 9 deletions(-)
1719 
1720  commit 718d1aeff6fded893f65397806d22ece928b0dd4
1721  Author: Brian Warner <warner@lothar.com>
1722  Date:   Mon Oct 3 13:43:30 2011 -0400
1723 
1724      add StorageFarmBroker.get_server_for_id(), temporary helper
1725 
1726      This will go away once we're passing IServers everywhere.
1727 
1728   src/allmydata/storage_client.py  |    2 ++
1729   src/allmydata/test/no_network.py |   13 +++++++++++++
1730   2 files changed, 15 insertions(+), 0 deletions(-)
1731 
1732  commit ece20231d7fda0d503704842a4aa068dfbc2e54e
1733  Author: Brian Warner <warner@lothar.com>
1734  Date:   Sun Oct 2 01:11:50 2011 +0100
1735 
1736      add proper accessors for Servermap.connections, to make refactoring easier
1737 
1738   src/allmydata/mutable/publish.py   |    6 +++---
1739   src/allmydata/mutable/retrieve.py  |   10 +++++-----
1740   src/allmydata/mutable/servermap.py |   17 +++++++++++------
1741   3 files changed, 19 insertions(+), 14 deletions(-)
1742 
1743  commit 3b943d6bf302ff702668081a612fc4fe2604cf9c
1744  Author: Brian Warner <warner@lothar.com>
1745  Date:   Fri Sep 23 10:34:30 2011 -0700
1746 
1747      mutable/servermap.py and neighbors: s/peer/server/
1748 
1749   src/allmydata/mutable/checker.py   |   22 +-
1750   src/allmydata/mutable/publish.py   |  204 +++++++-------
1751   src/allmydata/mutable/servermap.py |  402 +++++++++++++-------------
1752   src/allmydata/test/test_mutable.py |   18 +-
1753   4 files changed, 323 insertions(+), 323 deletions(-)
1754 IServer refactoring: pass IServer instances around, instead of peerids
1755 
1756 refs #1363
1757 
1758 This collapses 88 small incremental changes (each of which passes all tests)
1759 into one big patch. The development process for the long path started with
1760 adding some temporary scaffolding, changing one method at a time, then
1761 removing the scaffolding. The individual pieces are as follows, in reverse
1762 chronological order (the first patch is at the end of this comment):
1763 
1764  commit 9bbe4174fd0d98a6cf47a8ef96e85d9ef34b2f9a
1765  Author: Brian Warner <warner@lothar.com>
1766  Date:   Tue Oct 4 16:05:00 2011 -0400
1767 
1768      immutable/downloader/status.py: correct comment
1769 
1770   src/allmydata/immutable/downloader/status.py |    2 +-
1771   1 files changed, 1 insertions(+), 1 deletions(-)
1772 
1773  commit 72146a7c7c91eac2f7c3ceb801eb7a1721376889
1774  Author: Brian Warner <warner@lothar.com>
1775  Date:   Tue Oct 4 15:46:20 2011 -0400
1776 
1777      remove temporary ServerMap._storage_broker
1778 
1779   src/allmydata/mutable/checker.py   |    2 +-
1780   src/allmydata/mutable/filenode.py  |    2 +-
1781   src/allmydata/mutable/publish.py   |    2 +-
1782   src/allmydata/mutable/servermap.py |    5 ++---
1783   src/allmydata/test/test_mutable.py |    8 ++++----
1784   5 files changed, 9 insertions(+), 10 deletions(-)
1785 
1786  commit d703096b41632c47d76414b12672e076a422ff5c
1787  Author: Brian Warner <warner@lothar.com>
1788  Date:   Tue Oct 4 15:37:05 2011 -0400
1789 
1790      remove temporary storage_broker.get_server_for_id()
1791 
1792   src/allmydata/storage_client.py  |    3 ---
1793   src/allmydata/test/no_network.py |   13 -------------
1794   2 files changed, 0 insertions(+), 16 deletions(-)
1795 
1796  commit 620cc5d80882ef6f7decfd26af8a6c7c1ddf80d1
1797  Author: Brian Warner <warner@lothar.com>
1798  Date:   Tue Oct 4 12:50:06 2011 -0400
1799 
1800      API of Retrieve._try_to_validate_privkey(), trying to remove reader.server
1801 
1802   src/allmydata/mutable/retrieve.py |   10 +++++-----
1803   1 files changed, 5 insertions(+), 5 deletions(-)
1804 
1805  commit 92f43f856f4a8b36c207d1b190ed8699b5a4ecb4
1806  Author: Brian Warner <warner@lothar.com>
1807  Date:   Tue Oct 4 12:48:08 2011 -0400
1808 
1809      API of Retrieve._validate_block(), trying to remove reader.server
1810 
1811   src/allmydata/mutable/retrieve.py |   14 +++++++-------
1812   1 files changed, 7 insertions(+), 7 deletions(-)
1813 
1814  commit 572d5070761861a2190349d1ed8d85dbc25698a5
1815  Author: Brian Warner <warner@lothar.com>
1816  Date:   Tue Oct 4 12:36:58 2011 -0400
1817 
1818      API of Retrieve._mark_bad_share(), trying to remove reader.server
1819 
1820   src/allmydata/mutable/retrieve.py |   21 +++++++++------------
1821   1 files changed, 9 insertions(+), 12 deletions(-)
1822 
1823  commit a793ff00c0de1e2eec7b46288fdf388c7a2bec89
1824  Author: Brian Warner <warner@lothar.com>
1825  Date:   Tue Oct 4 12:06:13 2011 -0400
1826 
1827      remove now-unused get_rref_for_serverid()
1828 
1829   src/allmydata/mutable/servermap.py |    3 ---
1830   1 files changed, 0 insertions(+), 3 deletions(-)
1831 
1832  commit 1b9827cc9366bf90b93297fdd6832f2ad0480ce7
1833  Author: Brian Warner <warner@lothar.com>
1834  Date:   Tue Oct 4 12:03:09 2011 -0400
1835 
1836      Retrieve: stop adding .serverid attributes to readers
1837 
1838   src/allmydata/mutable/retrieve.py |    1 -
1839   1 files changed, 0 insertions(+), 1 deletions(-)
1840 
1841  commit 5d4e9d491b19e49d2e443a1dfff2c672842c36ef
1842  Author: Brian Warner <warner@lothar.com>
1843  Date:   Tue Oct 4 12:03:34 2011 -0400
1844 
1845      return value of Retrieve(verify=True)
1846 
1847   src/allmydata/mutable/checker.py  |   11 ++++++-----
1848   src/allmydata/mutable/retrieve.py |    3 +--
1849   2 files changed, 7 insertions(+), 7 deletions(-)
1850 
1851  commit e9ab7978c384e1f677cb7779dc449b1044face82
1852  Author: Brian Warner <warner@lothar.com>
1853  Date:   Tue Oct 4 11:54:23 2011 -0400
1854 
1855      Retrieve._bad_shares (but not return value, used by Verifier)
1856 
1857   src/allmydata/mutable/retrieve.py |    7 ++++---
1858   1 files changed, 4 insertions(+), 3 deletions(-)
1859 
1860  commit 2d91926de233ec5c881f30e36b4a30ad92ab42a9
1861  Author: Brian Warner <warner@lothar.com>
1862  Date:   Tue Oct 4 11:51:23 2011 -0400
1863 
1864      Publish: stop adding .serverid attributes to writers
1865 
1866   src/allmydata/mutable/publish.py |    9 ++-------
1867   1 files changed, 2 insertions(+), 7 deletions(-)
1868 
1869  commit 47c7a0105dec7cbf4f7e0a3ce800bbb85b15df4a
1870  Author: Brian Warner <warner@lothar.com>
1871  Date:   Tue Oct 4 11:56:33 2011 -0400
1872 
1873      API of get_write_enabler()
1874 
1875   src/allmydata/mutable/filenode.py |    7 ++++---
1876   src/allmydata/mutable/publish.py  |    4 ++--
1877   src/allmydata/test/no_network.py  |    3 +++
1878   3 files changed, 9 insertions(+), 5 deletions(-)
1879 
1880  commit 9196a5c6590fdbfd660325ea8358b345887d3db0
1881  Author: Brian Warner <warner@lothar.com>
1882  Date:   Tue Oct 4 11:46:24 2011 -0400
1883 
1884      API of get_(renewal|cancel)_secret()
1885 
1886   src/allmydata/mutable/filenode.py  |   14 ++++++++------
1887   src/allmydata/mutable/publish.py   |    8 ++++----
1888   src/allmydata/mutable/servermap.py |    5 ++---
1889   3 files changed, 14 insertions(+), 13 deletions(-)
1890 
1891  commit de7c1552f8c163eff5b6d820b5fb3b21c1b47cb5
1892  Author: Brian Warner <warner@lothar.com>
1893  Date:   Tue Oct 4 11:41:52 2011 -0400
1894 
1895      API of CorruptShareError. Also comment out some related+unused test_web.py code
1896 
1897   src/allmydata/mutable/common.py    |   13 +++++--------
1898   src/allmydata/mutable/retrieve.py  |   10 +++++-----
1899   src/allmydata/mutable/servermap.py |    8 +++-----
1900   src/allmydata/test/common.py       |   13 ++++++++-----
1901   4 files changed, 21 insertions(+), 23 deletions(-)
1902 
1903  commit 2c1c314046b620c16f1e66d030c150d768b7d01e
1904  Author: Brian Warner <warner@lothar.com>
1905  Date:   Tue Oct 4 12:01:46 2011 -0400
1906 
1907      API of ServerMap.mark_bad_share()
1908 
1909   src/allmydata/mutable/publish.py   |    2 +-
1910   src/allmydata/mutable/retrieve.py  |    6 +++---
1911   src/allmydata/mutable/servermap.py |    6 ++----
1912   src/allmydata/test/test_mutable.py |    3 +--
1913   4 files changed, 7 insertions(+), 10 deletions(-)
1914 
1915  commit 1bed349030779fd0c378ae4e821384f953c6f6ff
1916  Author: Brian Warner <warner@lothar.com>
1917  Date:   Tue Oct 4 11:11:17 2011 -0400
1918 
1919      API+name of ServerMap.shares_on_server() : only for tests, so debug_ prefix
1920 
1921   src/allmydata/mutable/servermap.py |    7 ++-----
1922   src/allmydata/test/test_mutable.py |    6 +++---
1923   2 files changed, 5 insertions(+), 8 deletions(-)
1924 
1925  commit 2d32e448677d6b818692e801045d4115b29abf21
1926  Author: Brian Warner <warner@lothar.com>
1927  Date:   Tue Oct 4 11:07:10 2011 -0400
1928 
1929      API of ServerMap.all_servers_for_version()
1930 
1931   src/allmydata/mutable/servermap.py |    4 ++--
1932   1 files changed, 2 insertions(+), 2 deletions(-)
1933 
1934  commit 48f3204d1889c3e7179578125c4bdef515af3d6a
1935  Author: Brian Warner <warner@lothar.com>
1936  Date:   Tue Oct 4 11:04:50 2011 -0400
1937 
1938      internals of ServerMap methods that use make_versionmap(), remove temp copy
1939 
1940   src/allmydata/mutable/servermap.py |   28 +++++++++----------------
1941   1 files changed, 10 insertions(+), 18 deletions(-)
1942 
1943  commit 5c3da77b6c777a145bd5ddfaa4db849dc9495548
1944  Author: Brian Warner <warner@lothar.com>
1945  Date:   Tue Oct 4 11:01:28 2011 -0400
1946 
1947      API of ServerMap.make_versionmap()
1948 
1949   src/allmydata/mutable/checker.py   |    4 ++--
1950   src/allmydata/mutable/retrieve.py  |    5 ++---
1951   src/allmydata/mutable/servermap.py |    4 ++--
1952   src/allmydata/test/test_mutable.py |    7 ++++---
1953   4 files changed, 10 insertions(+), 10 deletions(-)
1954 
1955  commit b6882ece49afb4c507d118af2db346fa329209dc
1956  Author: Brian Warner <warner@lothar.com>
1957  Date:   Tue Oct 4 10:53:38 2011 -0400
1958 
1959      make a copy of ServerMap.make_versionmap() (_make_versionmap2) for internal use
1960 
1961   src/allmydata/mutable/servermap.py |   18 +++++++++++++-----
1962   1 files changed, 13 insertions(+), 5 deletions(-)
1963 
1964  commit 963f8e63faf32b950eb1b8103cd2ff16fe8f0151
1965  Author: Brian Warner <warner@lothar.com>
1966  Date:   Tue Oct 4 00:45:58 2011 -0400
1967 
1968      API of RetrieveStatus.add_problem()
1969 
1970   src/allmydata/mutable/retrieve.py |    5 +++--
1971   1 files changed, 3 insertions(+), 2 deletions(-)
1972 
1973  commit 4976d29ffae565a048851601c29013bbae2976d8
1974  Author: Brian Warner <warner@lothar.com>
1975  Date:   Tue Oct 4 00:45:05 2011 -0400
1976 
1977      API of RetrieveStatus.add_fetch_timing()
1978 
1979   src/allmydata/mutable/retrieve.py |    5 +++--
1980   1 files changed, 3 insertions(+), 2 deletions(-)
1981 
1982  commit d057d3bbba72663ee148a8b916bc2d52be2e3982
1983  Author: Brian Warner <warner@lothar.com>
1984  Date:   Tue Oct 4 00:44:04 2011 -0400
1985 
1986      API of Retrieve.notify_server_corruption()
1987 
1988   src/allmydata/mutable/retrieve.py |    6 +++---
1989   1 files changed, 3 insertions(+), 3 deletions(-)
1990 
1991  commit 8a2a81e46671c860610e0e96d6add1a57551f22d
1992  Author: Brian Warner <warner@lothar.com>
1993  Date:   Tue Oct 4 00:42:32 2011 -0400
1994 
1995      remove unused _outstanding_queries
1996 
1997   src/allmydata/mutable/retrieve.py |    1 -
1998   1 files changed, 0 insertions(+), 1 deletions(-)
1999 
2000  commit 56d12cc9968d03ccd53764455c671122c4f391d1
2001  Author: Brian Warner <warner@lothar.com>
2002  Date:   Tue Oct 4 00:40:57 2011 -0400
2003 
2004      change Retrieve.remaining_sharemap
2005 
2006   src/allmydata/mutable/retrieve.py |    4 ++--
2007   1 files changed, 2 insertions(+), 2 deletions(-)
2008 
2009  commit 4f0b7af4821f43290bfc70f2b1fc30149ad81281
2010  Author: Brian Warner <warner@lothar.com>
2011  Date:   Tue Oct 4 10:40:18 2011 -0400
2012 
2013      accessor for PublishStatus._problems
2014 
2015   src/allmydata/mutable/publish.py |    4 +++-
2016   src/allmydata/web/status.py      |    2 +-
2017   2 files changed, 4 insertions(+), 2 deletions(-)
2018 
2019  commit 627087cf66d0b8cc519f4d551a967a7bd9b6a741
2020  Author: Brian Warner <warner@lothar.com>
2021  Date:   Tue Oct 4 10:36:39 2011 -0400
2022 
2023      accessor for RetrieveStatus._problems
2024 
2025   src/allmydata/mutable/retrieve.py |    8 ++++++--
2026   src/allmydata/web/status.py       |    2 +-
2027   2 files changed, 7 insertions(+), 3 deletions(-)
2028 
2029  commit ca7dea81f03801b1c7353fc00ecba689268109cf
2030  Author: Brian Warner <warner@lothar.com>
2031  Date:   Tue Oct 4 00:35:32 2011 -0400
2032 
2033      add .server to "reader", so we can get at it later
2034 
2035   src/allmydata/mutable/retrieve.py |    5 +++--
2036   1 files changed, 3 insertions(+), 2 deletions(-)
2037 
2038  commit 6ef516e24908ec195af084a7550d1921a5e983b0
2039  Author: Brian Warner <warner@lothar.com>
2040  Date:   Tue Oct 4 00:32:32 2011 -0400
2041 
2042      temporarily give Retrieve a _storage_broker, so it can map serverids to servers
2043 
2044   src/allmydata/mutable/checker.py   |    3 ++-
2045   src/allmydata/mutable/filenode.py  |    6 ++++--
2046   src/allmydata/mutable/retrieve.py  |    5 +++--
2047   src/allmydata/test/test_mutable.py |    4 ++--
2048   4 files changed, 11 insertions(+), 7 deletions(-)
2049 
2050  commit afe08e4dd3f4ff9ff7e8a2a8d28b181e3625bcc9
2051  Author: Brian Warner <warner@lothar.com>
2052  Date:   Tue Oct 4 00:21:51 2011 -0400
2053 
2054      mutable/retrieve.py: s/peer/server/
2055 
2056   src/allmydata/mutable/retrieve.py  |   82 +++++++++++++-------------
2057   src/allmydata/test/test_mutable.py |    6 +-
2058   2 files changed, 44 insertions(+), 44 deletions(-)
2059 
2060  commit 910afcb5d7f274880f68dd6cdb5b05f2bbc29adc
2061  Author: Brian Warner <warner@lothar.com>
2062  Date:   Tue Oct 4 00:16:01 2011 -0400
2063 
2064      web.status.PublishStatusPage: add comment, I think .problems isn't exercised
2065 
2066   src/allmydata/web/status.py |    2 ++
2067   1 files changed, 2 insertions(+), 0 deletions(-)
2068 
2069  commit 311466dd8c931bbba40d590ade867704282e7f1a
2070  Author: Brian Warner <warner@lothar.com>
2071  Date:   Mon Oct 3 23:48:16 2011 -0400
2072 
2073      API of PublishStatus.add_per_server_time()
2074 
2075   src/allmydata/mutable/publish.py |    5 +++--
2076   1 files changed, 3 insertions(+), 2 deletions(-)
2077 
2078  commit 2df5faa1b6cbfbaded520d2320305a62fe961118
2079  Author: Brian Warner <warner@lothar.com>
2080  Date:   Mon Oct 3 23:46:37 2011 -0400
2081 
2082      more simplifications
2083 
2084   src/allmydata/mutable/publish.py |    4 +---
2085   1 files changed, 1 insertions(+), 3 deletions(-)
2086 
2087  commit 6ac4544a3da385f2aad9392f906b90192f4f919a
2088  Author: Brian Warner <warner@lothar.com>
2089  Date:   Mon Oct 3 23:44:08 2011 -0400
2090 
2091      API of ServerMap.version_on_server()
2092 
2093   src/allmydata/mutable/publish.py   |    2 +-
2094   src/allmydata/mutable/servermap.py |    4 ++--
2095   src/allmydata/test/test_mutable.py |    5 ++---
2096   3 files changed, 5 insertions(+), 6 deletions(-)
2097 
2098  commit 3e187e322511072e4683329df6b2c6c733a66dba
2099  Author: Brian Warner <warner@lothar.com>
2100  Date:   Tue Oct 4 00:16:32 2011 -0400
2101 
2102      API of ServerMap.make_sharemap()
2103 
2104   src/allmydata/mutable/servermap.py |    4 ++--
2105   src/allmydata/test/test_mutable.py |    7 ++++---
2106   src/allmydata/web/status.py        |    4 ++--
2107   3 files changed, 8 insertions(+), 7 deletions(-)
2108 
2109  commit 318feed8437bdd8d4943c6569d38f7b54b6313cc
2110  Author: Brian Warner <warner@lothar.com>
2111  Date:   Mon Oct 3 23:36:19 2011 -0400
2112 
2113      small cleanups
2114 
2115   src/allmydata/mutable/publish.py |    4 ++--
2116   1 files changed, 2 insertions(+), 2 deletions(-)
2117 
2118  commit bd459ed5714e1db5a7163935c54b7b0b56db8349
2119  Author: Brian Warner <warner@lothar.com>
2120  Date:   Mon Oct 3 23:33:39 2011 -0400
2121 
2122      API of ServerMap.add_new_share()
2123 
2124   src/allmydata/mutable/publish.py   |    4 ++--
2125   src/allmydata/mutable/servermap.py |    6 ++----
2126   2 files changed, 4 insertions(+), 6 deletions(-)
2127 
2128  commit f2804fb6ed11d80088e0da8ed48e6c2922f2ffef
2129  Author: Brian Warner <warner@lothar.com>
2130  Date:   Mon Oct 3 23:30:26 2011 -0400
2131 
2132      API of ServerMap.get_bad_shares()
2133 
2134   src/allmydata/mutable/publish.py   |    3 +--
2135   src/allmydata/mutable/servermap.py |    9 ++++-----
2136   2 files changed, 5 insertions(+), 7 deletions(-)
2137 
2138  commit 965074a47b3ce1431cb46d9a233840afcf9105f5
2139  Author: Brian Warner <warner@lothar.com>
2140  Date:   Mon Oct 3 23:26:58 2011 -0400
2141 
2142      more small cleanups
2143 
2144   src/allmydata/mutable/publish.py |    6 +++---
2145   1 files changed, 3 insertions(+), 3 deletions(-)
2146 
2147  commit 38020da34f034f8889947dd3dc05e087ffff7106
2148  Author: Brian Warner <warner@lothar.com>
2149  Date:   Mon Oct 3 23:18:47 2011 -0400
2150 
2151      change Publish.bad_share_checkstrings
2152 
2153   src/allmydata/mutable/publish.py |    6 +++---
2154   1 files changed, 3 insertions(+), 3 deletions(-)
2155 
2156  commit 5efebcbd2ee0c2f299ea86f7591d856c0f265304
2157  Author: Brian Warner <warner@lothar.com>
2158  Date:   Mon Oct 3 23:16:31 2011 -0400
2159 
2160      change internals of Publish.update_goal()
2161 
2162   src/allmydata/mutable/publish.py |    8 +++-----
2163   1 files changed, 3 insertions(+), 5 deletions(-)
2164 
2165  commit e91b55ff4c2a69165b71f2c7b217ac319ff4c527
2166  Author: Brian Warner <warner@lothar.com>
2167  Date:   Mon Oct 3 23:11:42 2011 -0400
2168 
2169      get rid of Publish.connections
2170 
2171   src/allmydata/mutable/publish.py |   27 +++++----------------------
2172   1 files changed, 5 insertions(+), 22 deletions(-)
2173 
2174  commit 64e9a53b3229ebe2f9ebf7ed502d539311d0e037
2175  Author: Brian Warner <warner@lothar.com>
2176  Date:   Mon Oct 3 23:05:32 2011 -0400
2177 
2178      change Publish.bad_servers
2179 
2180   src/allmydata/mutable/publish.py |   10 +++++-----
2181   1 files changed, 5 insertions(+), 5 deletions(-)
2182 
2183  commit b85a934bef315a06bcfe00c9c12a3627fed2b918
2184  Author: Brian Warner <warner@lothar.com>
2185  Date:   Mon Oct 3 23:03:07 2011 -0400
2186 
2187      Publish.bad_servers: fix bug, this should be a set of serverids, not writers
2188 
2189   src/allmydata/mutable/publish.py |    2 +-
2190   1 files changed, 1 insertions(+), 1 deletions(-)
2191 
2192  commit 605ea15ec15ed671513819003ccd211cdb9761e0
2193  Author: Brian Warner <warner@lothar.com>
2194  Date:   Mon Oct 3 23:00:21 2011 -0400
2195 
2196      change .placed
2197 
2198   src/allmydata/mutable/publish.py |    6 +++---
2199   1 files changed, 3 insertions(+), 3 deletions(-)
2200 
2201  commit f7aba37b1b345d5b6d5cb16e3b3f6f3c1afb658e
2202  Author: Brian Warner <warner@lothar.com>
2203  Date:   Mon Oct 3 22:59:22 2011 -0400
2204 
2205      temporarily stash IServer as .server on the "writer" object
2206 
2207   src/allmydata/mutable/publish.py |    2 ++
2208   1 files changed, 2 insertions(+), 0 deletions(-)
2209 
2210  commit f9b551d788e7db1f187fce5ab98ab5d5fe4e1c36
2211  Author: Brian Warner <warner@lothar.com>
2212  Date:   Mon Oct 3 22:48:18 2011 -0400
2213 
2214      change Publish.goal and API of log_goal() to use IServer, not serverid
2215 
2216   src/allmydata/mutable/publish.py |   48 ++++++++++++++--------------
2217   1 files changed, 24 insertions(+), 24 deletions(-)
2218 
2219  commit 75f20616558e4900b8b1f685dd99aa838de6d452
2220  Author: Brian Warner <warner@lothar.com>
2221  Date:   Mon Oct 3 15:27:02 2011 -0400
2222 
2223      API of ServerMap.get_known_shares()
2224 
2225   src/allmydata/mutable/publish.py   |   16 ++++++++++------
2226   src/allmydata/mutable/servermap.py |    7 ++-----
2227   2 files changed, 12 insertions(+), 11 deletions(-)
2228 
2229  commit 1c38c9d37bb08221b4418762234b1a62397b3b4b
2230  Author: Brian Warner <warner@lothar.com>
2231  Date:   Mon Oct 3 15:20:29 2011 -0400
2232 
2233      Publish.full_serverlist
2234 
2235   src/allmydata/mutable/publish.py |   10 +++++-----
2236   1 files changed, 5 insertions(+), 5 deletions(-)
2237 
2238  commit b6cbd215a04b9cde31a7d92a97a7f048622b16f1
2239  Author: Brian Warner <warner@lothar.com>
2240  Date:   Mon Oct 3 15:12:31 2011 -0400
2241 
2242      API of ServerMap.all_servers()
2243 
2244   src/allmydata/mutable/servermap.py |   19 ++++++-------------
2245   1 files changed, 6 insertions(+), 13 deletions(-)
2246 
2247  commit e63cd0315fae65357b1727ec6d5ff3c6e0d27c98
2248  Author: Brian Warner <warner@lothar.com>
2249  Date:   Mon Oct 3 15:10:18 2011 -0400
2250 
2251      remove ServerMap.connections, set_rref_for_serverid()
2252 
2253   src/allmydata/mutable/servermap.py |   11 +----------
2254   1 files changed, 1 insertions(+), 10 deletions(-)
2255 
2256  commit 4df52db2f80eb12eefa5d57103c24893cde89553
2257  Author: Brian Warner <warner@lothar.com>
2258  Date:   Mon Oct 3 15:04:06 2011 -0400
2259 
2260      API of ServerMap.mark_server_reachable()
2261 
2262   src/allmydata/mutable/servermap.py |    7 ++-----
2263   1 files changed, 2 insertions(+), 5 deletions(-)
2264 
2265  commit 69c715bde77944dc25181b3dbbeb042c816f9a1b
2266  Author: Brian Warner <warner@lothar.com>
2267  Date:   Mon Oct 3 15:03:21 2011 -0400
2268 
2269      API of ServerMap.mark_server_unreachable()
2270 
2271   src/allmydata/mutable/servermap.py |    9 +++------
2272   1 files changed, 3 insertions(+), 6 deletions(-)
2273 
2274  commit 3d784d60eec1c508858e3a617e4411ffbcc3c1fa
2275  Author: Brian Warner <warner@lothar.com>
2276  Date:   Mon Oct 3 15:02:03 2011 -0400
2277 
2278      API of status.set_privkey_from()
2279 
2280   src/allmydata/mutable/servermap.py |    7 +++----
2281   1 files changed, 3 insertions(+), 4 deletions(-)
2282 
2283  commit 544ed3ea29bed7e66da7fd29ca3f6f076f27a9e6
2284  Author: Brian Warner <warner@lothar.com>
2285  Date:   Mon Oct 3 15:01:15 2011 -0400
2286 
2287      API of status.add_per_server_time()
2288 
2289   src/allmydata/mutable/servermap.py |    7 ++++---
2290   1 files changed, 4 insertions(+), 3 deletions(-)
2291 
2292  commit fffe5008b6320bd1e04c3c68389a2bf2ee383fa8
2293  Author: Brian Warner <warner@lothar.com>
2294  Date:   Mon Oct 3 14:59:02 2011 -0400
2295 
2296      remove unused .versionmap
2297 
2298   src/allmydata/mutable/servermap.py |    7 -------
2299   1 files changed, 0 insertions(+), 7 deletions(-)
2300 
2301  commit 2816562e090d2294179db3588dafcca18de1bc2b
2302  Author: Brian Warner <warner@lothar.com>
2303  Date:   Mon Oct 3 14:57:51 2011 -0400
2304 
2305      remove serverid from all log messages. Also one unused lambda.
2306 
2307   src/allmydata/mutable/servermap.py |   30 +++++++++++++-------------
2308   1 files changed, 15 insertions(+), 15 deletions(-)
2309 
2310  commit 28fa6b1a2738fa98c1f1dbd3d0e01ae98912d11f
2311  Author: Brian Warner <warner@lothar.com>
2312  Date:   Mon Oct 3 14:54:30 2011 -0400
2313 
2314      removed unused _readers
2315 
2316   src/allmydata/mutable/servermap.py |    3 ---
2317   1 files changed, 0 insertions(+), 3 deletions(-)
2318 
2319  commit a8e4ed3d645ab592d1add6a1e69b6d1ebfb77817
2320  Author: Brian Warner <warner@lothar.com>
2321  Date:   Mon Oct 3 14:54:16 2011 -0400
2322 
2323      remove unused _sharemap
2324 
2325   src/allmydata/mutable/servermap.py |    1 -
2326   1 files changed, 0 insertions(+), 1 deletions(-)
2327 
2328  commit 3f072e55cf1d0700f9fffe23f8f3a475725df588
2329  Author: Brian Warner <warner@lothar.com>
2330  Date:   Mon Oct 3 14:49:03 2011 -0400
2331 
2332      _must_query
2333 
2334   src/allmydata/mutable/servermap.py |    8 ++++----
2335   1 files changed, 4 insertions(+), 4 deletions(-)
2336 
2337  commit c599a059b8df3f5785e4bf89fb6ecc6d8dcd708b
2338  Author: Brian Warner <warner@lothar.com>
2339  Date:   Mon Oct 3 14:48:05 2011 -0400
2340 
2341      _queries_outstanding
2342 
2343   src/allmydata/mutable/servermap.py |   16 +++++++---------
2344   1 files changed, 7 insertions(+), 9 deletions(-)
2345 
2346  commit 7743759f98ac2c07926b2fdbd80bf52dfab33085
2347  Author: Brian Warner <warner@lothar.com>
2348  Date:   Mon Oct 3 14:46:17 2011 -0400
2349 
2350      _empty_servers
2351 
2352   src/allmydata/mutable/servermap.py |    5 ++---
2353   1 files changed, 2 insertions(+), 3 deletions(-)
2354 
2355  commit 6bb1825916828a713a32cdf7f7411fa3ea2e1e5d
2356  Author: Brian Warner <warner@lothar.com>
2357  Date:   Mon Oct 3 14:45:39 2011 -0400
2358 
2359      _good_servers
2360 
2361   src/allmydata/mutable/servermap.py |    4 ++--
2362   1 files changed, 2 insertions(+), 2 deletions(-)
2363 
2364  commit 1768fab1b51d8dd93ecabbaaabfadfa20cf6c3d4
2365  Author: Brian Warner <warner@lothar.com>
2366  Date:   Mon Oct 3 14:44:59 2011 -0400
2367 
2368      _bad_servers
2369 
2370   src/allmydata/mutable/servermap.py |   14 +++++++-------
2371   1 files changed, 7 insertions(+), 7 deletions(-)
2372 
2373  commit dccbaef30f0ba714c746bf6d4a1a803c36e17b65
2374  Author: Brian Warner <warner@lothar.com>
2375  Date:   Mon Oct 3 14:41:54 2011 -0400
2376 
2377      API of _try_to_set_pubkey()
2378 
2379   src/allmydata/mutable/servermap.py |    7 ++++---
2380   1 files changed, 4 insertions(+), 3 deletions(-)
2381 
2382  commit 0481ea70042ba3575f15eac7fd0780f8ece580cc
2383  Author: Brian Warner <warner@lothar.com>
2384  Date:   Mon Oct 3 14:35:02 2011 -0400
2385 
2386      API of notify_server_corruption()
2387 
2388   src/allmydata/mutable/servermap.py |    6 +++---
2389   1 files changed, 3 insertions(+), 3 deletions(-)
2390 
2391  commit bea9cba18fb3b9c11bb22f18356a263ecec7351e
2392  Author: Brian Warner <warner@lothar.com>
2393  Date:   Mon Oct 3 14:34:09 2011 -0400
2394 
2395      API of _got_signature_one_share()
2396 
2397   src/allmydata/mutable/servermap.py |    9 +++++----
2398   1 files changed, 5 insertions(+), 4 deletions(-)
2399 
2400  commit 1520123583cf78650706e114b15bb5b0ac1f4a14
2401  Author: Brian Warner <warner@lothar.com>
2402  Date:   Mon Oct 3 14:32:33 2011 -0400
2403 
2404      API of _try_to_validate_privkey()
2405 
2406   src/allmydata/mutable/servermap.py |    9 +++++----
2407   1 files changed, 5 insertions(+), 4 deletions(-)
2408 
2409  commit 938852c9c8519c7a078f58a9b1f4dd8ec8b6715e
2410  Author: Brian Warner <warner@lothar.com>
2411  Date:   Mon Oct 3 14:31:48 2011 -0400
2412 
2413      API and internals of _add_lease_failed()
2414 
2415   src/allmydata/mutable/servermap.py |    8 ++++----
2416   1 files changed, 4 insertions(+), 4 deletions(-)
2417 
2418  commit 3843dba367e3c19e176a622ab853cb51d2472ddf
2419  Author: Brian Warner <warner@lothar.com>
2420  Date:   Mon Oct 3 14:30:37 2011 -0400
2421 
2422      API of _privkey_query_failed()
2423 
2424   src/allmydata/mutable/servermap.py |    5 +++--
2425   1 files changed, 3 insertions(+), 2 deletions(-)
2426 
2427  commit 2219a710e1633cd57d0ca0786490de87b3e19ba7
2428  Author: Brian Warner <warner@lothar.com>
2429  Date:   Mon Oct 3 14:29:43 2011 -0400
2430 
2431      fix bug in call to _privkey_query_failed, unrelated to refactoring
2432 
2433   src/allmydata/mutable/servermap.py |    2 +-
2434   1 files changed, 1 insertions(+), 1 deletions(-)
2435 
2436  commit ae615bec7d0d1b269710b6902797b12f9592ad62
2437  Author: Brian Warner <warner@lothar.com>
2438  Date:   Mon Oct 3 14:27:17 2011 -0400
2439 
2440      API of _got_corrupt_share()
2441 
2442   src/allmydata/mutable/servermap.py |   17 +++++++++--------
2443   1 files changed, 9 insertions(+), 8 deletions(-)
2444 
2445  commit cb51c95a6f4e077278157a77dab060c8c1ad7a81
2446  Author: Brian Warner <warner@lothar.com>
2447  Date:   Mon Oct 3 14:23:16 2011 -0400
2448 
2449      API of _got_results()
2450 
2451   src/allmydata/mutable/servermap.py |    9 +++++----
2452   1 files changed, 5 insertions(+), 4 deletions(-)
2453 
2454  commit bac9154fe0af18f226999a58ffc2362d8cf4b802
2455  Author: Brian Warner <warner@lothar.com>
2456  Date:   Mon Oct 3 14:19:19 2011 -0400
2457 
2458      API of _query_failed()
2459 
2460   src/allmydata/mutable/servermap.py |    5 +++--
2461   1 files changed, 3 insertions(+), 2 deletions(-)
2462 
2463  commit fdc29a8ca95d4b5c503e5382b9e5d4d02141ba12
2464  Author: Brian Warner <warner@lothar.com>
2465  Date:   Mon Oct 3 14:17:20 2011 -0400
2466 
2467      API of _do_read()
2468 
2469   src/allmydata/mutable/servermap.py |    6 ++++--
2470   1 files changed, 4 insertions(+), 2 deletions(-)
2471 
2472  commit e7e9e338f28d004aa4d423d11c65f1e271ac7322
2473  Author: Brian Warner <warner@lothar.com>
2474  Date:   Mon Oct 3 14:20:21 2011 -0400
2475 
2476      API of _do_query()
2477 
2478   src/allmydata/mutable/servermap.py |   15 +++++++--------
2479   1 files changed, 7 insertions(+), 8 deletions(-)
2480 
2481  commit 330625b9dac4cdbe72a11464a893065b9aeed453
2482  Author: Brian Warner <warner@lothar.com>
2483  Date:   Mon Oct 3 14:43:05 2011 -0400
2484 
2485      next step: first batch of updates to ServermapUpdater
2486 
2487      updates:
2488       most method-local variables in update()
2489       API of _build_initial_querylist()
2490       API of _send_initial_requests()
2491       .full_serverlist
2492       .extra_servers
2493 
2494   src/allmydata/mutable/servermap.py |   39 ++++++++++++++------------
2495   1 files changed, 21 insertions(+), 18 deletions(-)
2496 
2497  commit 4aadc584fa7dcb2daa86b048c81dee0049ba26d9
2498  Author: Brian Warner <warner@lothar.com>
2499  Date:   Mon Oct 3 15:07:00 2011 -0400
2500 
2501      internal change: index _bad_shares with IServer
2502 
2503   src/allmydata/mutable/servermap.py |   20 ++++++++++----------
2504   1 files changed, 10 insertions(+), 10 deletions(-)
2505 
2506  commit 16d4e6fa82a9907dbdc92094213387c6a4164e41
2507  Author: Brian Warner <warner@lothar.com>
2508  Date:   Mon Oct 3 18:20:47 2011 +0100
2509 
2510      internal change: index _known_shares with IServer instead of serverid
2511 
2512      callers are unchanged
2513 
2514   src/allmydata/mutable/servermap.py |   42 +++++++++++++++----------
2515   1 files changed, 25 insertions(+), 17 deletions(-)
2516 
2517  commit ceeb5f4938cc814a0c75d1b8f4018aed965c2176
2518  Author: Brian Warner <warner@lothar.com>
2519  Date:   Mon Oct 3 18:11:43 2011 +0100
2520 
2521      accessors and name cleanup for servermap.Servermap.last_update_mode/time
2522 
2523   src/allmydata/mutable/filenode.py  |    6 +++---
2524   src/allmydata/mutable/publish.py   |    4 ++--
2525   src/allmydata/mutable/servermap.py |   17 +++++++++++------
2526   3 files changed, 16 insertions(+), 11 deletions(-)
2527 
2528  commit 8d3cbda82661c0a7e5c3d3b65cf7a5d5ab7e32c0
2529  Author: Brian Warner <warner@lothar.com>
2530  Date:   Mon Oct 3 18:11:14 2011 +0100
2531 
2532      accessors and name cleanup for servermap.Servermap.problems
2533 
2534   src/allmydata/mutable/servermap.py |   21 +++++++++++++--------
2535   src/allmydata/test/test_mutable.py |    6 +++---
2536   2 files changed, 16 insertions(+), 11 deletions(-)
2537 
2538  commit 348f57988f79389db0aab7672e6eaa9a6d8e3219
2539  Author: Brian Warner <warner@lothar.com>
2540  Date:   Mon Oct 3 18:10:41 2011 +0100
2541 
2542      accessors and name cleanup for servermap.Servermap.bad_shares
2543 
2544   src/allmydata/mutable/publish.py   |    2 +-
2545   src/allmydata/mutable/servermap.py |   30 ++++++++++++++-----------
2546   2 files changed, 18 insertions(+), 14 deletions(-)
2547 
2548  commit 520c9368134673cdf76c653c5e1bb91c2ab5d51e
2549  Author: Brian Warner <warner@lothar.com>
2550  Date:   Mon Oct 3 18:10:05 2011 +0100
2551 
2552      accessors and name cleanup for servermap.Servermap.servermap .
2553 
2554   src/allmydata/mutable/publish.py   |   14 +++++----
2555   src/allmydata/mutable/servermap.py |   38 ++++++++++++++-----------
2556   2 files changed, 29 insertions(+), 23 deletions(-)
2557 
2558  commit b8b8dc38287a91dbdf494426ac801d9381ce5841
2559  Author: Brian Warner <warner@lothar.com>
2560  Date:   Mon Oct 3 18:08:02 2011 +0100
2561 
2562      fix reachable_servers
2563 
2564   src/allmydata/mutable/checker.py   |    3 ++-
2565   src/allmydata/mutable/publish.py   |    4 +++-
2566   src/allmydata/mutable/servermap.py |   12 ++++++++++--
2567   3 files changed, 15 insertions(+), 4 deletions(-)
2568 
2569  commit cb0cfd1adfefad357c187aaaf690c3df68b622bc
2570  Author: Brian Warner <warner@lothar.com>
2571  Date:   Mon Oct 3 18:06:03 2011 +0100
2572 
2573      fix Servermap.unreachable_servers
2574 
2575   src/allmydata/mutable/servermap.py |   11 ++++++++---
2576   1 files changed, 8 insertions(+), 3 deletions(-)
2577 
2578  commit 2d9ea79b94bd4db674d40386fda90825785ac495
2579  Author: Brian Warner <warner@lothar.com>
2580  Date:   Mon Oct 3 18:03:48 2011 +0100
2581 
2582      give ServerMap a StorageFarmBroker, temporary
2583 
2584      this makes it possible for the ServerMap to accept bare serverids and still
2585      build data structures with IServers
2586 
2587   src/allmydata/mutable/checker.py   |    2 +-
2588   src/allmydata/mutable/filenode.py  |    2 +-
2589   src/allmydata/mutable/publish.py   |    2 +-
2590   src/allmydata/mutable/servermap.py |    5 +++--
2591   src/allmydata/test/test_mutable.py |    8 ++++----
2592   5 files changed, 10 insertions(+), 9 deletions(-)
2593 
2594  commit 718d1aeff6fded893f65397806d22ece928b0dd4
2595  Author: Brian Warner <warner@lothar.com>
2596  Date:   Mon Oct 3 13:43:30 2011 -0400
2597 
2598      add StorageFarmBroker.get_server_for_id(), temporary helper
2599 
2600      This will go away once we're passing IServers everywhere.
2601 
2602   src/allmydata/storage_client.py  |    2 ++
2603   src/allmydata/test/no_network.py |   13 +++++++++++++
2604   2 files changed, 15 insertions(+), 0 deletions(-)
2605 
2606  commit ece20231d7fda0d503704842a4aa068dfbc2e54e
2607  Author: Brian Warner <warner@lothar.com>
2608  Date:   Sun Oct 2 01:11:50 2011 +0100
2609 
2610      add proper accessors for Servermap.connections, to make refactoring easier
2611 
2612   src/allmydata/mutable/publish.py   |    6 +++---
2613   src/allmydata/mutable/retrieve.py  |   10 +++++-----
2614   src/allmydata/mutable/servermap.py |   17 +++++++++++------
2615   3 files changed, 19 insertions(+), 14 deletions(-)
2616 
2617  commit 3b943d6bf302ff702668081a612fc4fe2604cf9c
2618  Author: Brian Warner <warner@lothar.com>
2619  Date:   Fri Sep 23 10:34:30 2011 -0700
2620 
2621      mutable/servermap.py and neighbors: s/peer/server/
2622 
2623   src/allmydata/mutable/checker.py   |   22 +-
2624   src/allmydata/mutable/publish.py   |  204 +++++++-------
2625   src/allmydata/mutable/servermap.py |  402 +++++++++++++-------------
2626   src/allmydata/test/test_mutable.py |   18 +-
2627   4 files changed, 323 insertions(+), 323 deletions(-)
2628]
2629[TAG allmydata-tahoe-1.9.0
2630warner@lothar.com**20111031052301
2631 Ignore-this: cf598210dd1f314a1a121bf29a3d5918
2632]
2633Patch bundle hash:
2634d95fa31bde4ddf0ae13d1117b73dc73f2ba34b88