Ticket #1540: fix-unpack-checkstring.darcs.patch

File fix-unpack-checkstring.darcs.patch, 25.2 KB (added by kevan, at 2011-09-25T00:45:20Z)

break unpack_checkstring into unpack_sdmf_checkstring and unpack_mdmf_checkstring, misc. other cleanups

Line 
1Sat Sep 24 16:51:37 PDT 2011  kevan@isnotajoke.com
2  * mutable/publish: use unpack_mdmf_checkstring and unpack_sdmf_checkstring instead of unpack_checkstring. fixes #1540
3
4Sat Sep 24 16:54:15 PDT 2011  kevan@isnotajoke.com
5  * test/test_mutable: reenable mdmf publish surprise test
6
7Sat Sep 24 17:41:34 PDT 2011  kevan@isnotajoke.com
8  * mutable/layout: break unpack_checkstring into unpack_mdmf_checkstring and unpack_sdmf_checkstring, add distinguisher function for checkstrings
9
10Sat Sep 24 17:43:05 PDT 2011  kevan@isnotajoke.com
11  * mutable/publish: handle unknown mutable share formats when handling errors
12
13New patches:
14
15[mutable/publish: use unpack_mdmf_checkstring and unpack_sdmf_checkstring instead of unpack_checkstring. fixes #1540
16kevan@isnotajoke.com**20110924235137
17 Ignore-this: 52ca3d9627b8b0ba758367b2bd6c7085
18] {
19hunk ./src/allmydata/mutable/publish.py 21
20 from allmydata.mutable.common import MODE_WRITE, MODE_CHECK, \
21      UncoordinatedWriteError, NotEnoughServersError
22 from allmydata.mutable.servermap import ServerMap
23-from allmydata.mutable.layout import unpack_checkstring, MDMFSlotWriteProxy, \
24-                                     SDMFSlotWriteProxy
25+from allmydata.mutable.layout import get_version_from_checkstring,\
26+                                     unpack_mdmf_checkstring, \
27+                                     unpack_sdmf_checkstring, \
28+                                     MDMFSlotWriteProxy, \
29+                                     SDMFSlotWriteProxy, MDMFCHECKSTRING
30 
31 KiB = 1024
32 DEFAULT_MAX_SEGMENT_SIZE = 128 * KiB
33hunk ./src/allmydata/mutable/publish.py 1108
34             # use the checkstring to add information to the log message
35             for (shnum,readv) in read_data.items():
36                 checkstring = readv[0]
37-                (other_seqnum,
38-                 other_roothash,
39-                 other_salt) = unpack_checkstring(checkstring)
40+                version = get_version_from_checkstring(checkstring)
41+                if version == MDMF_VERSION:
42+                    (other_seqnum,
43+                     other_roothash) = unpack_mdmf_checkstring(checkstring)
44+                else:
45+                    (other_seqnum,
46+                     other_roothash,
47+                     other_salt) = unpack_sdmf_checkstring(checkstring)
48                 expected_version = self._servermap.version_on_peer(peerid,
49                                                                    shnum)
50                 if expected_version:
51}
52[test/test_mutable: reenable mdmf publish surprise test
53kevan@isnotajoke.com**20110924235415
54 Ignore-this: f752e47a703684491305cc83d16248fb
55] hunk ./src/allmydata/test/test_mutable.py 2536
56         return self.do_publish_surprise(SDMF_VERSION)
57 
58     def test_publish_surprise_mdmf(self):
59-        raise unittest.SkipTest("this currently triggers a decoding error in unpack_checkstring (see #1540)")
60         return self.do_publish_surprise(MDMF_VERSION)
61 
62     def test_retrieve_surprise(self):
63[mutable/layout: break unpack_checkstring into unpack_mdmf_checkstring and unpack_sdmf_checkstring, add distinguisher function for checkstrings
64kevan@isnotajoke.com**20110925004134
65 Ignore-this: 57f49ed5a72e418a69c7286a225cc8fb
66] {
67hunk ./src/allmydata/mutable/layout.py 139
68             pubkey, signature, share_hash_chain, block_hash_tree,
69             share_data, enc_privkey)
70 
71-def unpack_checkstring(checkstring):
72+def get_version_from_checkstring(checkstring):
73+    (t, ) = struct.unpack(">B", checkstring[:1])
74+    return t
75+
76+def unpack_sdmf_checkstring(checkstring):
77     cs_len = struct.calcsize(PREFIX)
78     version, seqnum, root_hash, IV = struct.unpack(PREFIX, checkstring[:cs_len])
79     if version != 0: # TODO: just ignore the share
80hunk ./src/allmydata/mutable/layout.py 150
81         raise UnknownVersionError("got mutable share version %d, but I only understand version 0" % version)
82     return (seqnum, root_hash, IV)
83 
84+def unpack_mdmf_checkstring(checkstring):
85+    cs_len = struct.calcsize(MDMFCHECKSTRING)
86+    checkstring = checkstring[:cs_len]
87+    version, seqnum, root_hash = struct.unpack(MDMFCHECKSTRING, checkstring)
88+
89+    assert version == 1
90+    return (seqnum, root_hash)
91 
92 def pack_offsets(verification_key_length, signature_length,
93                  share_hash_chain_length, block_hash_tree_length,
94}
95[mutable/publish: handle unknown mutable share formats when handling errors
96kevan@isnotajoke.com**20110925004305
97 Ignore-this: 4d5fa44ef7d777c432eb10c9584ad51f
98] {
99hunk ./src/allmydata/mutable/publish.py 1106
100             self.surprised = True
101             self.bad_peers.add(writer) # don't ask them again
102             # use the checkstring to add information to the log message
103+            unknown_format = False
104             for (shnum,readv) in read_data.items():
105                 checkstring = readv[0]
106                 version = get_version_from_checkstring(checkstring)
107hunk ./src/allmydata/mutable/publish.py 1113
108                 if version == MDMF_VERSION:
109                     (other_seqnum,
110                      other_roothash) = unpack_mdmf_checkstring(checkstring)
111-                else:
112+                elif version == SDMF_VERSION:
113                     (other_seqnum,
114                      other_roothash,
115                      other_salt) = unpack_sdmf_checkstring(checkstring)
116hunk ./src/allmydata/mutable/publish.py 1117
117+                else:
118+                    unknown_format = True
119                 expected_version = self._servermap.version_on_peer(peerid,
120                                                                    shnum)
121                 if expected_version:
122hunk ./src/allmydata/mutable/publish.py 1124
123                     (seqnum, root_hash, IV, segsize, datalength, k, N, prefix,
124                      offsets_tuple) = expected_version
125-                    self.log("somebody modified the share on us:"
126-                             " shnum=%d: I thought they had #%d:R=%s,"
127-                             " but testv reported #%d:R=%s" %
128-                             (shnum,
129-                              seqnum, base32.b2a(root_hash)[:4],
130-                              other_seqnum, base32.b2a(other_roothash)[:4]),
131-                             parent=lp, level=log.NOISY)
132+                    msg = ("somebody modified the share on us:"
133+                           " shnum=%d: I thought they had #%d:R=%s," %
134+                           (shnum,
135+                            seqnum, base32.b2a(root_hash)[:4]))
136+                    if unknown_format:
137+                        msg += (" but I don't know how to read share"
138+                                " format %d" % version)
139+                    else:
140+                        msg += " but testv reported #%d:R=%s" % \
141+                               (other_seqnum, other_roothash)
142+                    self.log(msg, parent=lp, level=log.NOISY)
143                 # if expected_version==None, then we didn't expect to see a
144                 # share on that peer, and the 'surprise_shares' clause above
145                 # will have logged it.
146}
147
148Context:
149
150[test_mutable.py: update SkipTest message for test_publish_surprise_mdmf to reference the right ticket number. refs #1540.
151david-sarah@jacaranda.org**20110923211622
152 Ignore-this: 44f16a6817a6b75930bbba18b0a516be
153]
154[control.py: unbreak speed-test: overwrite() wants a MutableData, not str
155Brian Warner <warner@lothar.com>**20110923073748
156 Ignore-this: 7dad7aff3d66165868a64ae22d225fa3
157 
158 Really, all the upload/modify APIs should take a string or a filehandle, and
159 internally wrap it as needed. Callers should not need to be aware of
160 Uploadable() or MutableData() classes.
161]
162[test_mutable.py: skip test_publish_surprise_mdmf, which is causing an error. refs #1534, #393
163david-sarah@jacaranda.org**20110920183319
164 Ignore-this: 6fb020e09e8de437cbcc2c9f57835b31
165]
166[.darcs-boringfile: minor cleanups.
167david-sarah@jacaranda.org**20110920154918
168 Ignore-this: cab78e30d293da7e2832207dbee2ffeb
169]
170[uri.py: fix two interface violations in verifier URI classes. refs #1474
171david-sarah@jacaranda.org**20110920030156
172 Ignore-this: 454ddd1419556cb1d7576d914cb19598
173]
174[test/test_mutable: write publish surprise test for MDMF, rename existing test_publish_surprise to clarify that it is for SDMF
175kevan@isnotajoke.com**20110918003657
176 Ignore-this: 722c507e8f5b537ff920e0555951059a
177]
178[test/test_mutable: refactor publish surprise test into common test fixture, rewrite test_publish_surprise to use test fixture
179kevan@isnotajoke.com**20110918003533
180 Ignore-this: 6f135888d400a99a09b5f9a4be443b6e
181]
182[mutable/publish: add errback immediately after write, don't consume errors from other parts of the publisher
183kevan@isnotajoke.com**20110917234708
184 Ignore-this: 12bf6b0918a5dc5ffc30ece669fad51d
185]
186[Make platform-detection code tolerate linux-3.0, patch by zooko.
187Brian Warner <warner@lothar.com>**20110915202620
188 Ignore-this: af63cf9177ae531984dea7a1cad03762
189 
190 Otherwise address-autodetection can't find ifconfig. refs #1536
191]
192[test_web.py: fix a bug in _count_leases that was causing us to check only the lease count of one share file, not of all share files as intended.
193david-sarah@jacaranda.org**20110915185126
194 Ignore-this: d96632bc48d770b9b577cda1bbd8ff94
195]
196[docs: insert a newline at the beginning of known_issues.rst to see if this makes it render more nicely in trac
197zooko@zooko.com**20110914064728
198 Ignore-this: aca15190fa22083c5d4114d3965f5d65
199]
200[docs: remove the coding: utf-8 declaration at the to of known_issues.rst, since the trac rendering doesn't hide it
201zooko@zooko.com**20110914055713
202 Ignore-this: 941ed32f83ead377171aa7a6bd198fcf
203]
204[docs: more cleanup of known_issues.rst -- now it passes "rst2html --verbose" without comment
205zooko@zooko.com**20110914055419
206 Ignore-this: 5505b3d76934bd97d0312cc59ed53879
207]
208[docs: more formatting improvements to known_issues.rst
209zooko@zooko.com**20110914051639
210 Ignore-this: 9ae9230ec9a38a312cbacaf370826691
211]
212[docs: reformatting of known_issues.rst
213zooko@zooko.com**20110914050240
214 Ignore-this: b8be0375079fb478be9d07500f9aaa87
215]
216[docs: fix formatting error in docs/known_issues.rst
217zooko@zooko.com**20110914045909
218 Ignore-this: f73fe74ad2b9e655aa0c6075acced15a
219]
220[merge Tahoe-LAFS v1.8.3 release announcement with trunk
221zooko@zooko.com**20110913210544
222 Ignore-this: 163f2c3ddacca387d7308e4b9332516e
223]
224[docs: release notes for Tahoe-LAFS v1.8.3
225zooko@zooko.com**20110913165826
226 Ignore-this: 84223604985b14733a956d2fbaeb4e9f
227]
228[tests: bump up the timeout in this test that fails on FreeStorm's CentOS in order to see if it is just very slow
229zooko@zooko.com**20110913024255
230 Ignore-this: 6a86d691e878cec583722faad06fb8e4
231]
232[interfaces: document that the 'fills-holes-with-zero-bytes' key should be used to detect whether a storage server has that behavior. refs #1528
233david-sarah@jacaranda.org**20110913002843
234 Ignore-this: 1a00a6029d40f6792af48c5578c1fd69
235]
236[CREDITS: more CREDITS for Kevan and David-Sarah
237zooko@zooko.com**20110912223357
238 Ignore-this: 4ea8f0d6f2918171d2f5359c25ad1ada
239]
240[merge NEWS about the mutable file bounds fixes with NEWS about work-in-progress
241zooko@zooko.com**20110913205521
242 Ignore-this: 4289a4225f848d6ae6860dd39bc92fa8
243]
244[doc: add NEWS item about fixes to potential palimpsest issues in mutable files
245zooko@zooko.com**20110912223329
246 Ignore-this: 9d63c95ddf95c7d5453c94a1ba4d406a
247 ref. #1528
248]
249[merge the NEWS about the security fix (#1528) with the work-in-progress NEWS
250zooko@zooko.com**20110913205153
251 Ignore-this: 88e88a2ad140238c62010cf7c66953fc
252]
253[doc: add NEWS entry about the issue which allows unauthorized deletion of shares
254zooko@zooko.com**20110912223246
255 Ignore-this: 77e06d09103d2ef6bb51ea3e5d6e80b0
256 ref. #1528
257]
258[doc: add entry in known_issues.rst about the issue which allows unauthorized deletion of shares
259zooko@zooko.com**20110912223135
260 Ignore-this: b26c6ea96b6c8740b93da1f602b5a4cd
261 ref. #1528
262]
263[storage: more paranoid handling of bounds and palimpsests in mutable share files
264zooko@zooko.com**20110912222655
265 Ignore-this: a20782fa423779ee851ea086901e1507
266 * storage server ignores requests to extend shares by sending a new_length
267 * storage server fills exposed holes (created by sending a write vector whose offset begins after the end of the current data) with 0 to avoid "palimpsest" exposure of previous contents
268 * storage server zeroes out lease info at the old location when moving it to a new location
269 ref. #1528
270]
271[storage: test that the storage server ignores requests to extend shares by sending a new_length, and that the storage server fills exposed holes with 0 to avoid "palimpsest" exposure of previous contents
272zooko@zooko.com**20110912222554
273 Ignore-this: 61ebd7b11250963efdf5b1734a35271
274 ref. #1528
275]
276[immutable: prevent clients from reading past the end of share data, which would allow them to learn the cancellation secret
277zooko@zooko.com**20110912222458
278 Ignore-this: da1ebd31433ea052087b75b2e3480c25
279 Declare explicitly that we prevent this problem in the server's version dict.
280 fixes #1528 (there are two patches that are each a sufficient fix to #1528 and this is one of them)
281]
282[storage: remove the storage server's "remote_cancel_lease" function
283zooko@zooko.com**20110912222331
284 Ignore-this: 1c32dee50e0981408576daffad648c50
285 We're removing this function because it is currently unused, because it is dangerous, and because the bug described in #1528 leaks the cancellation secret, which allows anyone who knows a file's storage index to abuse this function to delete shares of that file.
286 fixes #1528 (there are two patches that are each a sufficient fix to #1528 and this is one of them)
287]
288[storage: test that the storage server does *not* have a "remote_cancel_lease" function
289zooko@zooko.com**20110912222324
290 Ignore-this: 21c652009704652d35f34651f98dd403
291 We're removing this function because it is currently unused, because it is dangerous, and because the bug described in #1528 leaks the cancellation secret, which allows anyone who knows a file's storage index to abuse this function to delete shares of that file.
292 ref. #1528
293]
294[immutable: test whether the server allows clients to read past the end of share data, which would allow them to learn the cancellation secret
295zooko@zooko.com**20110912221201
296 Ignore-this: 376e47b346c713d37096531491176349
297 Also test whether the server explicitly declares that it prevents this problem.
298 ref #1528
299]
300[Retrieve._activate_enough_peers: rewrite Verify logic
301Brian Warner <warner@lothar.com>**20110909181150
302 Ignore-this: 9367c11e1eacbf025f75ce034030d717
303]
304[Retrieve: implement/test stopProducing
305Brian Warner <warner@lothar.com>**20110909181150
306 Ignore-this: 47b2c3df7dc69835e0a066ca12e3c178
307]
308[move DownloadStopped from download.common to interfaces
309Brian Warner <warner@lothar.com>**20110909181150
310 Ignore-this: 8572acd3bb16e50341dbed8eb1d90a50
311]
312[retrieve.py: remove vestigal self._validated_readers
313Brian Warner <warner@lothar.com>**20110909181150
314 Ignore-this: faab2ec14e314a53a2ffb714de626e2d
315]
316[Retrieve: rewrite flow-control: use a top-level loop() to catch all errors
317Brian Warner <warner@lothar.com>**20110909181150
318 Ignore-this: e162d2cd53b3d3144fc6bc757e2c7714
319 
320 This ought to close the potential for dropped errors and hanging downloads.
321 Verify needs to be examined, I may have broken it, although all tests pass.
322]
323[Retrieve: merge _validate_active_prefixes into _add_active_peers
324Brian Warner <warner@lothar.com>**20110909181150
325 Ignore-this: d3ead31e17e69394ae7058eeb5beaf4c
326]
327[Retrieve: remove the initial prefix-is-still-good check
328Brian Warner <warner@lothar.com>**20110909181150
329 Ignore-this: da66ee51c894eaa4e862e2dffb458acc
330 
331 This check needs to be done with each fetch from the storage server, to
332 detect when someone has changed the share (i.e. our servermap goes stale).
333 Doing it just once at the beginning of retrieve isn't enough: a write might
334 occur after the first segment but before the second, etc.
335 
336 _try_to_validate_prefix() was not removed: it will be used by the future
337 check-with-each-fetch code.
338 
339 test_mutable.Roundtrip.test_corrupt_all_seqnum_late was disabled, since it
340 fails until this check is brought back. (the corruption it applies only
341 touches the prefix, not the block data, so the check-less retrieve actually
342 tolerates it). Don't forget to re-enable it once the check is brought back.
343]
344[MDMFSlotReadProxy: remove the queue
345Brian Warner <warner@lothar.com>**20110909181150
346 Ignore-this: 96673cb8dda7a87a423de2f4897d66d2
347 
348 This is a neat trick to reduce Foolscap overhead, but the need for an
349 explicit flush() complicates the Retrieve path and makes it prone to
350 lost-progress bugs.
351 
352 Also change test_mutable.FakeStorageServer to tolerate multiple reads of the
353 same share in a row, a limitation exposed by turning off the queue.
354]
355[rearrange Retrieve: first step, shouldn't change order of execution
356Brian Warner <warner@lothar.com>**20110909181149
357 Ignore-this: e3006368bfd2802b82ea45c52409e8d6
358]
359[CLI: test_cli.py -- remove an unnecessary call in test_mkdir_mutable_type. refs #1527
360david-sarah@jacaranda.org**20110906183730
361 Ignore-this: 122e2ffbee84861c32eda766a57759cf
362]
363[CLI: improve test for 'tahoe mkdir --mutable-type='. refs #1527
364david-sarah@jacaranda.org**20110906183020
365 Ignore-this: f1d4598e6c536f0a2b15050b3bc0ef9d
366]
367[CLI: make the --mutable-type option value for 'tahoe put' and 'tahoe mkdir' case-insensitive, and change --help for these commands accordingly. fixes #1527
368david-sarah@jacaranda.org**20110905020922
369 Ignore-this: 75a6df0a2df9c467d8c010579e9a024e
370]
371[cli: make --mutable-type imply --mutable in 'tahoe put'
372Kevan Carstensen <kevan@isnotajoke.com>**20110903190920
373 Ignore-this: 23336d3c43b2a9554e40c2a11c675e93
374]
375[SFTP: add a comment about a subtle interaction between OverwriteableFileConsumer and GeneralSFTPFile, and test the case it is commenting on.
376david-sarah@jacaranda.org**20110903222304
377 Ignore-this: 980c61d4dd0119337f1463a69aeebaf0
378]
379[improve the storage/mutable.py asserts even more
380warner@lothar.com**20110901160543
381 Ignore-this: 5b2b13c49bc4034f96e6e3aaaa9a9946
382]
383[storage/mutable.py: special characters in struct.foo arguments indicate standard as opposed to native sizes, we should be using these characters in these asserts
384wilcoxjg@gmail.com**20110901084144
385 Ignore-this: 28ace2b2678642e4d7269ddab8c67f30
386]
387[docs/write_coordination.rst: fix formatting and add more specific warning about access via sshfs.
388david-sarah@jacaranda.org**20110831232148
389 Ignore-this: cd9c851d3eb4e0a1e088f337c291586c
390]
391[test_mutable.Version: consolidate some tests, reduce runtime from 19s to 15s
392warner@lothar.com**20110831050451
393 Ignore-this: 64815284d9e536f8f3798b5f44cf580c
394]
395[mutable/retrieve: handle the case where self._read_length is 0.
396Kevan Carstensen <kevan@isnotajoke.com>**20110830210141
397 Ignore-this: fceafbe485851ca53f2774e5a4fd8d30
398 
399 Note that the downloader will still fetch a segment for a zero-length
400 read, which is wasteful. Fixing that isn't specifically required to fix
401 #1512, but it should probably be fixed before 1.9.
402]
403[NEWS: added summary of all changes since 1.8.2. Needs editing.
404Brian Warner <warner@lothar.com>**20110830163205
405 Ignore-this: 273899b37a899fc6919b74572454b8b2
406]
407[test_mutable.Update: only upload the files needed for each test. refs #1500
408Brian Warner <warner@lothar.com>**20110829072717
409 Ignore-this: 4d2ab4c7523af9054af7ecca9c3d9dc7
410 
411 This first step shaves 15% off the runtime: from 139s to 119s on my laptop.
412 It also fixes a couple of places where a Deferred was being dropped, which
413 would cause two tests to run in parallel and also confuse error reporting.
414]
415[Let Uploader retain History instead of passing it into upload(). Fixes #1079.
416Brian Warner <warner@lothar.com>**20110829063246
417 Ignore-this: 3902c58ec12bd4b2d876806248e19f17
418 
419 This consistently records all immutable uploads in the Recent Uploads And
420 Downloads page, regardless of code path. Previously, certain webapi upload
421 operations (like PUT /uri/$DIRCAP/newchildname) failed to pass the History
422 object and were left out.
423]
424[Fix mutable publish/retrieve timing status displays. Fixes #1505.
425Brian Warner <warner@lothar.com>**20110828232221
426 Ignore-this: 4080ce065cf481b2180fd711c9772dd6
427 
428 publish:
429 * encrypt and encode times are cumulative, not just current-segment
430 
431 retrieve:
432 * same for decrypt and decode times
433 * update "current status" to include segment number
434 * set status to Finished/Failed when download is complete
435 * set progress to 1.0 when complete
436 
437 More improvements to consider:
438 * progress is currently 0% or 100%: should calculate how many segments are
439   involved (remembering retrieve can be less than the whole file) and set it
440   to a fraction
441 * "fetch" time is fuzzy: what we want is to know how much of the delay is not
442   our own fault, but since we do decode/decrypt work while waiting for more
443   shares, it's not straightforward
444]
445[Teach 'tahoe debug catalog-shares about MDMF. Closes #1507.
446Brian Warner <warner@lothar.com>**20110828080931
447 Ignore-this: 56ef2951db1a648353d7daac6a04c7d1
448]
449[debug.py: remove some dead comments
450Brian Warner <warner@lothar.com>**20110828074556
451 Ignore-this: 40e74040dd4d14fd2f4e4baaae506b31
452]
453[hush pyflakes
454Brian Warner <warner@lothar.com>**20110828074254
455 Ignore-this: bef9d537a969fa82fe4decc4ba2acb09
456]
457[MutableFileNode.set_downloader_hints: never depend upon order of dict.values()
458Brian Warner <warner@lothar.com>**20110828074103
459 Ignore-this: caaf1aa518dbdde4d797b7f335230faa
460 
461 The old code was calculating the "extension parameters" (a list) from the
462 downloader hints (a dictionary) with hints.values(), which is not stable, and
463 would result in corrupted filecaps (with the 'k' and 'segsize' hints
464 occasionally swapped). The new code always uses [k,segsize].
465]
466[layout.py: fix MDMF share layout documentation
467Brian Warner <warner@lothar.com>**20110828073921
468 Ignore-this: 3f13366fed75b5e31b51ae895450a225
469]
470[teach 'tahoe debug dump-share' about MDMF and offsets. refs #1507
471Brian Warner <warner@lothar.com>**20110828073834
472 Ignore-this: 3a9d2ef9c47a72bf1506ba41199a1dea
473]
474[test_mutable.Version.test_debug: use splitlines() to fix buildslaves
475Brian Warner <warner@lothar.com>**20110828064728
476 Ignore-this: c7f6245426fc80b9d1ae901d5218246a
477 
478 Any slave running in a directory with spaces in the name was miscounting
479 shares, causing the test to fail.
480]
481[test_mutable.Version: exercise 'tahoe debug find-shares' on MDMF. refs #1507
482Brian Warner <warner@lothar.com>**20110828005542
483 Ignore-this: cb20bea1c28bfa50a72317d70e109672
484 
485 Also changes NoNetworkGrid to put shares in storage/shares/ .
486]
487[test_mutable.py: oops, missed a .todo
488Brian Warner <warner@lothar.com>**20110828002118
489 Ignore-this: fda09ae86481352b7a627c278d2a3940
490]
491[test_mutable: merge davidsarah's patch with my Version refactorings
492warner@lothar.com**20110827235707
493 Ignore-this: b5aaf481c90d99e33827273b5d118fd0
494]
495[Make the immutable/read-only constraint checking for MDMF URIs identical to that for SSK URIs. refs #393
496david-sarah@jacaranda.org**20110823012720
497 Ignore-this: e1f59d7ff2007c81dbef2aeb14abd721
498]
499[Additional tests for MDMF URIs and for zero-length files. refs #393
500david-sarah@jacaranda.org**20110823011532
501 Ignore-this: a7cc0c09d1d2d72413f9cd227c47a9d5
502]
503[Additional tests for zero-length partial reads and updates to mutable versions. refs #393
504david-sarah@jacaranda.org**20110822014111
505 Ignore-this: 5fc6f4d06e11910124e4a277ec8a43ea
506]
507[test_mutable.Version: factor out some expensive uploads, save 25% runtime
508Brian Warner <warner@lothar.com>**20110827232737
509 Ignore-this: ea37383eb85ea0894b254fe4dfb45544
510]
511[SDMF: update filenode with correct k/N after Retrieve. Fixes #1510.
512Brian Warner <warner@lothar.com>**20110827225031
513 Ignore-this: b50ae6e1045818c400079f118b4ef48
514 
515 Without this, we get a regression when modifying a mutable file that was
516 created with more shares (larger N) than our current tahoe.cfg . The
517 modification attempt creates new versions of the (0,1,..,newN-1) shares, but
518 leaves the old versions of the (newN,..,oldN-1) shares alone (and throws a
519 assertion error in SDMFSlotWriteProxy.finish_publishing in the process).
520 
521 The mixed versions that result (some shares with e.g. N=10, some with N=20,
522 such that both versions are recoverable) cause problems for the Publish code,
523 even before MDMF landed. Might be related to refs #1390 and refs #1042.
524]
525[layout.py: annotate assertion to figure out 'tahoe backup' failure
526Brian Warner <warner@lothar.com>**20110827195253
527 Ignore-this: 9b92b954e3ed0d0f80154fff1ff674e5
528]
529[Add 'tahoe debug dump-cap' support for MDMF, DIR2-CHK, DIR2-MDMF. refs #1507.
530Brian Warner <warner@lothar.com>**20110827195048
531 Ignore-this: 61c6af5e33fc88e0251e697a50addb2c
532 
533 This also adds tests for all those cases, and fixes an omission in uri.py
534 that broke parsing of DIR2-MDMF-Verifier and DIR2-CHK-Verifier.
535]
536[MDMF: more writable/writeable consistentifications
537warner@lothar.com**20110827190602
538 Ignore-this: 22492a9e20c1819ddb12091062888b55
539]
540[MDMF: s/Writable/Writeable/g, for consistency with existing SDMF code
541warner@lothar.com**20110827183357
542 Ignore-this: 9dd312acedbdb2fc2f7bef0d0fb17c0b
543]
544[setup.cfg: remove no-longer-supported test_mac_diskimage alias. refs #1479
545david-sarah@jacaranda.org**20110826230345
546 Ignore-this: 40e908b8937322a290fb8012bfcad02a
547]
548[test_mutable.Update: increase timeout from 120s to 400s, slaves are failing
549Brian Warner <warner@lothar.com>**20110825230140
550 Ignore-this: 101b1924a30cdbda9b2e419e95ca15ec
551]
552[tests: fix check_memory test
553zooko@zooko.com**20110825201116
554 Ignore-this: 4d66299fa8cb61d2ca04b3f45344d835
555 fixes #1503
556]
557[TAG allmydata-tahoe-1.9.0a1
558warner@lothar.com**20110825161122
559 Ignore-this: 3cbf49f00dbda58189f893c427f65605
560]
561Patch bundle hash:
5624764f825aac75281dc27749516c1cce68456482f