1 | <?xml version="1.0" encoding="utf-8" ?> |
---|
2 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
---|
3 | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
---|
4 | <head> |
---|
5 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
---|
6 | <meta name="generator" content="Docutils 0.7: http://docutils.sourceforge.net/" /> |
---|
7 | <title></title> |
---|
8 | <style type="text/css"> |
---|
9 | |
---|
10 | /* |
---|
11 | :Author: David Goodger (goodger@python.org) |
---|
12 | :Id: $Id: html4css1.css 6253 2010-03-02 00:24:53Z milde $ |
---|
13 | :Copyright: This stylesheet has been placed in the public domain. |
---|
14 | |
---|
15 | Default cascading style sheet for the HTML output of Docutils. |
---|
16 | |
---|
17 | See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to |
---|
18 | customize this style sheet. |
---|
19 | */ |
---|
20 | |
---|
21 | /* used to remove borders from tables and images */ |
---|
22 | .borderless, table.borderless td, table.borderless th { |
---|
23 | border: 0 } |
---|
24 | |
---|
25 | table.borderless td, table.borderless th { |
---|
26 | /* Override padding for "table.docutils td" with "! important". |
---|
27 | The right padding separates the table cells. */ |
---|
28 | padding: 0 0.5em 0 0 ! important } |
---|
29 | |
---|
30 | .first { |
---|
31 | /* Override more specific margin styles with "! important". */ |
---|
32 | margin-top: 0 ! important } |
---|
33 | |
---|
34 | .last, .with-subtitle { |
---|
35 | margin-bottom: 0 ! important } |
---|
36 | |
---|
37 | .hidden { |
---|
38 | display: none } |
---|
39 | |
---|
40 | a.toc-backref { |
---|
41 | text-decoration: none ; |
---|
42 | color: black } |
---|
43 | |
---|
44 | blockquote.epigraph { |
---|
45 | margin: 2em 5em ; } |
---|
46 | |
---|
47 | dl.docutils dd { |
---|
48 | margin-bottom: 0.5em } |
---|
49 | |
---|
50 | /* Uncomment (and remove this text!) to get bold-faced definition list terms |
---|
51 | dl.docutils dt { |
---|
52 | font-weight: bold } |
---|
53 | */ |
---|
54 | |
---|
55 | div.abstract { |
---|
56 | margin: 2em 5em } |
---|
57 | |
---|
58 | div.abstract p.topic-title { |
---|
59 | font-weight: bold ; |
---|
60 | text-align: center } |
---|
61 | |
---|
62 | div.admonition, div.attention, div.caution, div.danger, div.error, |
---|
63 | div.hint, div.important, div.note, div.tip, div.warning { |
---|
64 | margin: 2em ; |
---|
65 | border: medium outset ; |
---|
66 | padding: 1em } |
---|
67 | |
---|
68 | div.admonition p.admonition-title, div.hint p.admonition-title, |
---|
69 | div.important p.admonition-title, div.note p.admonition-title, |
---|
70 | div.tip p.admonition-title { |
---|
71 | font-weight: bold ; |
---|
72 | font-family: sans-serif } |
---|
73 | |
---|
74 | div.attention p.admonition-title, div.caution p.admonition-title, |
---|
75 | div.danger p.admonition-title, div.error p.admonition-title, |
---|
76 | div.warning p.admonition-title { |
---|
77 | color: red ; |
---|
78 | font-weight: bold ; |
---|
79 | font-family: sans-serif } |
---|
80 | |
---|
81 | /* Uncomment (and remove this text!) to get reduced vertical space in |
---|
82 | compound paragraphs. |
---|
83 | div.compound .compound-first, div.compound .compound-middle { |
---|
84 | margin-bottom: 0.5em } |
---|
85 | |
---|
86 | div.compound .compound-last, div.compound .compound-middle { |
---|
87 | margin-top: 0.5em } |
---|
88 | */ |
---|
89 | |
---|
90 | div.dedication { |
---|
91 | margin: 2em 5em ; |
---|
92 | text-align: center ; |
---|
93 | font-style: italic } |
---|
94 | |
---|
95 | div.dedication p.topic-title { |
---|
96 | font-weight: bold ; |
---|
97 | font-style: normal } |
---|
98 | |
---|
99 | div.figure { |
---|
100 | margin-left: 2em ; |
---|
101 | margin-right: 2em } |
---|
102 | |
---|
103 | div.footer, div.header { |
---|
104 | clear: both; |
---|
105 | font-size: smaller } |
---|
106 | |
---|
107 | div.line-block { |
---|
108 | display: block ; |
---|
109 | margin-top: 1em ; |
---|
110 | margin-bottom: 1em } |
---|
111 | |
---|
112 | div.line-block div.line-block { |
---|
113 | margin-top: 0 ; |
---|
114 | margin-bottom: 0 ; |
---|
115 | margin-left: 1.5em } |
---|
116 | |
---|
117 | div.sidebar { |
---|
118 | margin: 0 0 0.5em 1em ; |
---|
119 | border: medium outset ; |
---|
120 | padding: 1em ; |
---|
121 | background-color: #ffffee ; |
---|
122 | width: 40% ; |
---|
123 | float: right ; |
---|
124 | clear: right } |
---|
125 | |
---|
126 | div.sidebar p.rubric { |
---|
127 | font-family: sans-serif ; |
---|
128 | font-size: medium } |
---|
129 | |
---|
130 | div.system-messages { |
---|
131 | margin: 5em } |
---|
132 | |
---|
133 | div.system-messages h1 { |
---|
134 | color: red } |
---|
135 | |
---|
136 | div.system-message { |
---|
137 | border: medium outset ; |
---|
138 | padding: 1em } |
---|
139 | |
---|
140 | div.system-message p.system-message-title { |
---|
141 | color: red ; |
---|
142 | font-weight: bold } |
---|
143 | |
---|
144 | div.topic { |
---|
145 | margin: 2em } |
---|
146 | |
---|
147 | h1.section-subtitle, h2.section-subtitle, h3.section-subtitle, |
---|
148 | h4.section-subtitle, h5.section-subtitle, h6.section-subtitle { |
---|
149 | margin-top: 0.4em } |
---|
150 | |
---|
151 | h1.title { |
---|
152 | text-align: center } |
---|
153 | |
---|
154 | h2.subtitle { |
---|
155 | text-align: center } |
---|
156 | |
---|
157 | hr.docutils { |
---|
158 | width: 75% } |
---|
159 | |
---|
160 | img.align-left, .figure.align-left, object.align-left { |
---|
161 | clear: left ; |
---|
162 | float: left ; |
---|
163 | margin-right: 1em } |
---|
164 | |
---|
165 | img.align-right, .figure.align-right, object.align-right { |
---|
166 | clear: right ; |
---|
167 | float: right ; |
---|
168 | margin-left: 1em } |
---|
169 | |
---|
170 | img.align-center, .figure.align-center, object.align-center { |
---|
171 | display: block; |
---|
172 | margin-left: auto; |
---|
173 | margin-right: auto; |
---|
174 | } |
---|
175 | |
---|
176 | .align-left { |
---|
177 | text-align: left } |
---|
178 | |
---|
179 | .align-center { |
---|
180 | clear: both ; |
---|
181 | text-align: center } |
---|
182 | |
---|
183 | .align-right { |
---|
184 | text-align: right } |
---|
185 | |
---|
186 | /* reset inner alignment in figures */ |
---|
187 | div.align-right { |
---|
188 | text-align: left } |
---|
189 | |
---|
190 | /* div.align-center * { */ |
---|
191 | /* text-align: left } */ |
---|
192 | |
---|
193 | ol.simple, ul.simple { |
---|
194 | margin-bottom: 1em } |
---|
195 | |
---|
196 | ol.arabic { |
---|
197 | list-style: decimal } |
---|
198 | |
---|
199 | ol.loweralpha { |
---|
200 | list-style: lower-alpha } |
---|
201 | |
---|
202 | ol.upperalpha { |
---|
203 | list-style: upper-alpha } |
---|
204 | |
---|
205 | ol.lowerroman { |
---|
206 | list-style: lower-roman } |
---|
207 | |
---|
208 | ol.upperroman { |
---|
209 | list-style: upper-roman } |
---|
210 | |
---|
211 | p.attribution { |
---|
212 | text-align: right ; |
---|
213 | margin-left: 50% } |
---|
214 | |
---|
215 | p.caption { |
---|
216 | font-style: italic } |
---|
217 | |
---|
218 | p.credits { |
---|
219 | font-style: italic ; |
---|
220 | font-size: smaller } |
---|
221 | |
---|
222 | p.label { |
---|
223 | white-space: nowrap } |
---|
224 | |
---|
225 | p.rubric { |
---|
226 | font-weight: bold ; |
---|
227 | font-size: larger ; |
---|
228 | color: maroon ; |
---|
229 | text-align: center } |
---|
230 | |
---|
231 | p.sidebar-title { |
---|
232 | font-family: sans-serif ; |
---|
233 | font-weight: bold ; |
---|
234 | font-size: larger } |
---|
235 | |
---|
236 | p.sidebar-subtitle { |
---|
237 | font-family: sans-serif ; |
---|
238 | font-weight: bold } |
---|
239 | |
---|
240 | p.topic-title { |
---|
241 | font-weight: bold } |
---|
242 | |
---|
243 | pre.address { |
---|
244 | margin-bottom: 0 ; |
---|
245 | margin-top: 0 ; |
---|
246 | font: inherit } |
---|
247 | |
---|
248 | pre.literal-block, pre.doctest-block { |
---|
249 | margin-left: 2em ; |
---|
250 | margin-right: 2em } |
---|
251 | |
---|
252 | span.classifier { |
---|
253 | font-family: sans-serif ; |
---|
254 | font-style: oblique } |
---|
255 | |
---|
256 | span.classifier-delimiter { |
---|
257 | font-family: sans-serif ; |
---|
258 | font-weight: bold } |
---|
259 | |
---|
260 | span.interpreted { |
---|
261 | font-family: sans-serif } |
---|
262 | |
---|
263 | span.option { |
---|
264 | white-space: nowrap } |
---|
265 | |
---|
266 | span.pre { |
---|
267 | white-space: pre } |
---|
268 | |
---|
269 | span.problematic { |
---|
270 | color: red } |
---|
271 | |
---|
272 | span.section-subtitle { |
---|
273 | /* font-size relative to parent (h1..h6 element) */ |
---|
274 | font-size: 80% } |
---|
275 | |
---|
276 | table.citation { |
---|
277 | border-left: solid 1px gray; |
---|
278 | margin-left: 1px } |
---|
279 | |
---|
280 | table.docinfo { |
---|
281 | margin: 2em 4em } |
---|
282 | |
---|
283 | table.docutils { |
---|
284 | margin-top: 0.5em ; |
---|
285 | margin-bottom: 0.5em } |
---|
286 | |
---|
287 | table.footnote { |
---|
288 | border-left: solid 1px black; |
---|
289 | margin-left: 1px } |
---|
290 | |
---|
291 | table.docutils td, table.docutils th, |
---|
292 | table.docinfo td, table.docinfo th { |
---|
293 | padding-left: 0.5em ; |
---|
294 | padding-right: 0.5em ; |
---|
295 | vertical-align: top } |
---|
296 | |
---|
297 | table.docutils th.field-name, table.docinfo th.docinfo-name { |
---|
298 | font-weight: bold ; |
---|
299 | text-align: left ; |
---|
300 | white-space: nowrap ; |
---|
301 | padding-left: 0 } |
---|
302 | |
---|
303 | h1 tt.docutils, h2 tt.docutils, h3 tt.docutils, |
---|
304 | h4 tt.docutils, h5 tt.docutils, h6 tt.docutils { |
---|
305 | font-size: 100% } |
---|
306 | |
---|
307 | ul.auto-toc { |
---|
308 | list-style-type: none } |
---|
309 | |
---|
310 | </style> |
---|
311 | </head> |
---|
312 | <body> |
---|
313 | <div class="document"> |
---|
314 | |
---|
315 | |
---|
316 | <p>User visible changes in Tahoe-LAFS. -<em>- outline; coding: utf-8 -</em>-</p> |
---|
317 | <ul class="simple"> |
---|
318 | <li>Release 1.8.2 (2011-01-30)</li> |
---|
319 | </ul> |
---|
320 | <p>** Compatibility and Dependencies</p> |
---|
321 | <blockquote> |
---|
322 | <ul class="simple"> |
---|
323 | <li>Tahoe is now compatible with Twisted-10.2 (released last month), as well |
---|
324 | as with earlier versions. The previous Tahoe-1.8.1 release failed to run |
---|
325 | against Twisted-10.2, raising an AttributeError on |
---|
326 | StreamServerEndpointService (#1286)</li> |
---|
327 | <li>Tahoe now depends upon the "mock" testing library, and the foolscap |
---|
328 | dependency was raised to 0.6.1 . It no longer requires pywin32 (which |
---|
329 | was used only on windows). Future developers should note that |
---|
330 | reactor.spawnProcess and derivatives may no longer be used inside |
---|
331 | Tahoe code.</li> |
---|
332 | </ul> |
---|
333 | </blockquote> |
---|
334 | <p>** Other Changes</p> |
---|
335 | <blockquote> |
---|
336 | <ul class="simple"> |
---|
337 | <li>the default reserved_space value for new storage nodes is 1 GB (#1208)</li> |
---|
338 | <li>documentation is now in reStructuredText (.rst) format</li> |
---|
339 | <li>"tahoe cp" should now handle non-ASCII filenames</li> |
---|
340 | <li>the unmaintained Mac/Windows GUI applications have been removed (#1282)</li> |
---|
341 | <li>tahoe processes should appear in top and ps as "tahoe", not "python", |
---|
342 | on some unix platforms. (#174)</li> |
---|
343 | <li>"tahoe debug trial" can be used to run the test suite (#1296)</li> |
---|
344 | <li>the SFTP frontend now reports unknown sizes as "0" instead of "?", |
---|
345 | to improve compatibility with clients like FileZilla (#1337)</li> |
---|
346 | <li>"tahoe --version" should now report correct values in situations where |
---|
347 | 1.8.1 might have been wrong (#1287)</li> |
---|
348 | </ul> |
---|
349 | </blockquote> |
---|
350 | <ul class="simple"> |
---|
351 | <li>Release 1.8.1 (2010-10-28)</li> |
---|
352 | </ul> |
---|
353 | <p>** Bugfixes and Improvements</p> |
---|
354 | <blockquote> |
---|
355 | <ul class="simple"> |
---|
356 | <li>Allow the repairer to improve the health of a file by uploading |
---|
357 | some shares, even if it cannot achieve the configured happiness |
---|
358 | threshold. This fixes a regression introduced between v1.7.1 and |
---|
359 | v1.8.0. (#1212)</li> |
---|
360 | <li>Fix a memory leak in the ResponseCache which is used during mutable |
---|
361 | file/directory operations. (#1045)</li> |
---|
362 | <li>Fix a regression and add a performance improvement in the downloader. |
---|
363 | This issue caused repair to fail in some special cases. (#1223)</li> |
---|
364 | <li>Fix a bug that caused 'tahoe cp' to fail for a grid-to-grid copy |
---|
365 | involving a non-ASCII filename. (#1224)</li> |
---|
366 | <li>Fix a rarely-encountered bug involving printing large strings to |
---|
367 | the console on Windows. (#1232)</li> |
---|
368 | <li>Perform ~ expansion in the --exclude-from filename argument to |
---|
369 | 'tahoe backup'. (#1241)</li> |
---|
370 | <li>The CLI's 'tahoe mv' and 'tahoe ln' commands previously would try |
---|
371 | to use an HTTP proxy if the HTTP_PROXY environment variable was set. |
---|
372 | These now always connect directly to the WAPI, thus avoiding giving |
---|
373 | caps to the HTTP proxy (and also avoiding failures in the case that |
---|
374 | the proxy is failing or requires authentication). (#1253)</li> |
---|
375 | <li>The CLI now correctly reports failure in the case that 'tahoe mv' |
---|
376 | fails to unlink the file from its old location. (#1255)</li> |
---|
377 | <li>'tahoe start' now gives a more positive indication that the node |
---|
378 | has started. (#71)</li> |
---|
379 | <li>The arguments seen by 'ps' or other tools for node processes are |
---|
380 | now more useful (in particular, they include the path of the |
---|
381 | 'tahoe' script, rather than an obscure tool named 'twistd'). (#174)</li> |
---|
382 | </ul> |
---|
383 | </blockquote> |
---|
384 | <p>** Removed Features</p> |
---|
385 | <blockquote> |
---|
386 | <ul class="simple"> |
---|
387 | <li>The tahoe start/stop/restart and node creation commands no longer |
---|
388 | accept the -m or --multiple option, for consistency between platforms. |
---|
389 | (#1262)</li> |
---|
390 | </ul> |
---|
391 | </blockquote> |
---|
392 | <p>** Packaging</p> |
---|
393 | <blockquote> |
---|
394 | <ul class="simple"> |
---|
395 | <li>We now host binary packages so that users on certain operating systems |
---|
396 | can install without having a compiler. |
---|
397 | <<a class="reference external" href="http://tahoe-lafs.org/source/tahoe-lafs/deps/tahoe-lafs-dep-eggs/README.html">http://tahoe-lafs.org/source/tahoe-lafs/deps/tahoe-lafs-dep-eggs/README.html</a>></li> |
---|
398 | <li>Use a newer version of a dependency if needed, even if an older |
---|
399 | version is installed. This would previously cause a VersionConflict |
---|
400 | error. (#1190)</li> |
---|
401 | <li>Use a precompiled binary of a dependency if one with a sufficiently |
---|
402 | high version number is available, instead of attempting to compile |
---|
403 | the dependency from source, even if the source version has a higher |
---|
404 | version number. (#1233)</li> |
---|
405 | </ul> |
---|
406 | </blockquote> |
---|
407 | <p>** Documentation</p> |
---|
408 | <blockquote> |
---|
409 | <ul class="simple"> |
---|
410 | <li>All current documentation in .txt format has been converted to |
---|
411 | .rst format. (#1225)</li> |
---|
412 | <li>Added docs/backdoors.rst declaring that we won't add backdoors to |
---|
413 | Tahoe-LAFS, or add anything to facilitate government access to data. |
---|
414 | (#1216)</li> |
---|
415 | </ul> |
---|
416 | </blockquote> |
---|
417 | <ul class="simple"> |
---|
418 | <li>Release 1.8.0 (2010-09-23)</li> |
---|
419 | </ul> |
---|
420 | <p>** New Features</p> |
---|
421 | <blockquote> |
---|
422 | <ul class="simple"> |
---|
423 | <li>A completely new downloader which improves performance and |
---|
424 | robustness of immutable-file downloads. It uses the fastest K |
---|
425 | servers to download the data in K-way parallel. It automatically |
---|
426 | fails over to alternate servers if servers fail in mid-download. It |
---|
427 | allows seeking to arbitrary locations in the file (the previous |
---|
428 | downloader which would only read the entire file sequentially from |
---|
429 | beginning to end). It minimizes unnecessary round trips and |
---|
430 | unnecessary bytes transferred to improve performance. It sends |
---|
431 | requests to fewer servers to reduce the load on servers (the |
---|
432 | previous one would send a small request to every server for every |
---|
433 | download) (#287, #288, #448, #798, #800, #990, #1170, #1191)</li> |
---|
434 | <li>Non-ASCII command-line arguments and non-ASCII outputs now work on |
---|
435 | Windows. In addition, the command-line tool now works on 64-bit |
---|
436 | Windows. (#1074)</li> |
---|
437 | </ul> |
---|
438 | </blockquote> |
---|
439 | <p>** Bugfixes and Improvements</p> |
---|
440 | <blockquote> |
---|
441 | <ul class="simple"> |
---|
442 | <li>Document and clean up the command-line options for specifying the |
---|
443 | node's base directory. (#188, #706, #715, #772, #1108)</li> |
---|
444 | <li>The default node directory for Windows is ".tahoe" in the user's |
---|
445 | home directory, the same as on other platforms. (#890)</li> |
---|
446 | <li>Fix a case in which full cap URIs could be logged. (#685, #1155)</li> |
---|
447 | <li>Fix bug in WUI in Python 2.5 when the system clock is set back to |
---|
448 | 1969. Now you can use Tahoe-LAFS with Python 2.5 and set your |
---|
449 | system clock to 1969 and still use the WUI. (#1055)</li> |
---|
450 | <li>Many improvements in code organization, tests, logging, |
---|
451 | documentation, and packaging. (#983, #1074, #1108, #1127, #1129, |
---|
452 | #1131, #1166, #1175)</li> |
---|
453 | </ul> |
---|
454 | </blockquote> |
---|
455 | <p>** Dependency Updates</p> |
---|
456 | <blockquote> |
---|
457 | <ul class="simple"> |
---|
458 | <li>on x86 and x86-64 platforms, pycryptopp >= 0.5.20</li> |
---|
459 | <li>pycrypto 2.2 is excluded due to a bug</li> |
---|
460 | </ul> |
---|
461 | </blockquote> |
---|
462 | <ul class="simple"> |
---|
463 | <li>Release 1.7.1 (2010-07-18)</li> |
---|
464 | </ul> |
---|
465 | <p>** Bugfixes and Improvements</p> |
---|
466 | <blockquote> |
---|
467 | <ul class="simple"> |
---|
468 | <li>Fix bug in which uploader could fail with AssertionFailure or |
---|
469 | report that it had achieved servers-of-happiness when it |
---|
470 | hadn't. (#1118)</li> |
---|
471 | <li>Fix bug in which servers could get into a state where they would |
---|
472 | refuse to accept shares of a certain file (#1117)</li> |
---|
473 | <li>Add init scripts for managing the gateway server on Debian/Ubuntu |
---|
474 | (#961)</li> |
---|
475 | <li>Fix bug where server version number was always 0 on the welcome |
---|
476 | page (#1067)</li> |
---|
477 | <li>Add new command-line command "tahoe unlink" as a synonym for "tahoe |
---|
478 | rm" (#776)</li> |
---|
479 | <li>The FTP frontend now encrypts its temporary files, protecting their |
---|
480 | contents from an attacker who is able to read the disk. (#1083)</li> |
---|
481 | <li>Fix IP address detection on FreeBSD 7, 8, and 9 (#1098)</li> |
---|
482 | <li>Fix minor layout issue in the Web User Interface with Internet |
---|
483 | Explorer (#1097)</li> |
---|
484 | <li>Fix rarely-encountered incompatibility between Twisted logging |
---|
485 | utility and the new unicode support added in v1.7.0 (#1099)</li> |
---|
486 | <li>Forward-compatibility improvements for non-ASCII caps (#1051)</li> |
---|
487 | </ul> |
---|
488 | </blockquote> |
---|
489 | <p>** Code improvements</p> |
---|
490 | <blockquote> |
---|
491 | <ul class="simple"> |
---|
492 | <li>Simplify and tidy-up directories, unicode support, test code (#923, #967, |
---|
493 | #1072)</li> |
---|
494 | </ul> |
---|
495 | </blockquote> |
---|
496 | <ul class="simple"> |
---|
497 | <li>Release 1.7.0 (2010-06-18)</li> |
---|
498 | </ul> |
---|
499 | <p>** New Features</p> |
---|
500 | <p><a href="#id1"><span class="problematic" id="id2">**</span></a>* SFTP support</p> |
---|
501 | <div class="system-message" id="id1"> |
---|
502 | <p class="system-message-title">System Message: WARNING/2 (<tt class="docutils">NEWS</tt>, line 165); <em><a href="#id2">backlink</a></em></p> |
---|
503 | Inline strong start-string without end-string.</div> |
---|
504 | <p>Your Tahoe-LAFS gateway now acts like a full-fledged SFTP server. It has been |
---|
505 | tested with sshfs to provide a virtual filesystem in Linux. Many users have |
---|
506 | asked for this feature. We hope that it serves them well! See the |
---|
507 | docs/frontends/FTP-and-SFTP.txt document to get started.</p> |
---|
508 | <p><a href="#id3"><span class="problematic" id="id4">**</span></a>* support for non-ASCII character encodings</p> |
---|
509 | <div class="system-message" id="id3"> |
---|
510 | <p class="system-message-title">System Message: WARNING/2 (<tt class="docutils">NEWS</tt>, line 172); <em><a href="#id4">backlink</a></em></p> |
---|
511 | Inline strong start-string without end-string.</div> |
---|
512 | <p>Tahoe-LAFS now correctly handles filenames containing non-ASCII characters on |
---|
513 | all supported platforms:</p> |
---|
514 | <blockquote> |
---|
515 | <ul class="simple"> |
---|
516 | <li>when reading files in from the local filesystem (such as when you run "tahoe |
---|
517 | backup" to back up your local files to a Tahoe-LAFS grid);</li> |
---|
518 | <li>when writing files out to the local filesystem (such as when you run "tahoe |
---|
519 | cp -r" to recursively copy files out of a Tahoe-LAFS grid);</li> |
---|
520 | <li>when displaying filenames to the terminal (such as when you run "tahoe ls"), |
---|
521 | subject to limitations of the terminal and locale;</li> |
---|
522 | <li>when parsing command-line arguments, except on Windows.</li> |
---|
523 | </ul> |
---|
524 | </blockquote> |
---|
525 | <p><a href="#id5"><span class="problematic" id="id6">**</span></a>* Servers of Happiness</p> |
---|
526 | <div class="system-message" id="id5"> |
---|
527 | <p class="system-message-title">System Message: WARNING/2 (<tt class="docutils">NEWS</tt>, line 188); <em><a href="#id6">backlink</a></em></p> |
---|
528 | Inline strong start-string without end-string.</div> |
---|
529 | <p>Tahoe-LAFS now measures during immutable file upload to see how well |
---|
530 | distributed it is across multiple servers. It aborts the upload if the pieces |
---|
531 | of the file are not sufficiently well-distributed.</p> |
---|
532 | <p>This behavior is controlled by a configuration parameter called "servers of |
---|
533 | happiness". With the default settings for its erasure coding, Tahoe-LAFS |
---|
534 | generates 10 shares for each file, such that any 3 of those shares are |
---|
535 | sufficient to recover the file. The default value of "servers of happiness" is |
---|
536 | 7, which means that Tahoe-LAFS will guarantee that there are at least 7 servers |
---|
537 | holding some of the shares, such that any 3 of those servers can completely |
---|
538 | recover your file.</p> |
---|
539 | <p>The new upload code also distributes the shares better than the previous |
---|
540 | version in some cases and takes better advantage of pre-existing shares (when a |
---|
541 | file has already been previously uploaded). See the architecture.txt document |
---|
542 | [3] for details.</p> |
---|
543 | <p>** Bugfixes and Improvements</p> |
---|
544 | <blockquote> |
---|
545 | <ul class="simple"> |
---|
546 | <li>Premature abort of upload if some shares were already present and some |
---|
547 | servers fail. (#608)</li> |
---|
548 | <li>python ./setup.py install -- can't create or remove files in install |
---|
549 | directory. (#803)</li> |
---|
550 | <li>Network failure => internal TypeError. (#902)</li> |
---|
551 | <li>Install of Tahoe on CentOS 5.4. (#933)</li> |
---|
552 | <li>CLI option --node-url now supports https url. (#1028)</li> |
---|
553 | <li>HTML/CSS template files were not correctly installed under Windows. (#1033)</li> |
---|
554 | <li>MetadataSetter does not enforce restriction on setting "tahoe" subkeys. |
---|
555 | (#1034)</li> |
---|
556 | <li>ImportError: No module named setuptools_darcs.setuptools_darcs. (#1054)</li> |
---|
557 | <li>Renamed Title in xhtml files. (#1062)</li> |
---|
558 | <li>Increase Python version dependency to 2.4.4, to avoid a critical CPython |
---|
559 | security bug. (#1066)</li> |
---|
560 | <li>Typo correction for the munin plugin tahoe_storagespace. (#968)</li> |
---|
561 | <li>Fix warnings found by pylint. (#973)</li> |
---|
562 | <li>Changing format of some documentation files. (#1027)</li> |
---|
563 | <li>the misc/ directory was tied up. (#1068)</li> |
---|
564 | <li>The 'ctime' and 'mtime' metadata fields are no longer written except by |
---|
565 | "tahoe backup". (#924)</li> |
---|
566 | <li>Unicode filenames in Tahoe-LAFS directories are normalized so that names |
---|
567 | that differ only in how accents are encoded are treated as the same. (#1076)</li> |
---|
568 | <li>Various small improvements to documentation. (#937, #911, #1024, #1082)</li> |
---|
569 | </ul> |
---|
570 | </blockquote> |
---|
571 | <p>** Removals</p> |
---|
572 | <p>The 'tahoe debug consolidate' subcommand (for converting old allmydata Windows |
---|
573 | client backups to a newer format) has been removed.</p> |
---|
574 | <p>** Dependency Updates</p> |
---|
575 | <dl class="docutils"> |
---|
576 | <dt>the Python version dependency is raised to 2.4.4 in some cases (2.4.3 for</dt> |
---|
577 | <dd>Redhat-based Linux distributions, 2.4.2 for UCS-2 builds) (#1066)</dd> |
---|
578 | </dl> |
---|
579 | <div class="system-message"> |
---|
580 | <p class="system-message-title">System Message: WARNING/2 (<tt class="docutils">NEWS</tt>, line 242)</p> |
---|
581 | Definition list ends without a blank line; unexpected unindent.</div> |
---|
582 | <p>pycrypto >= 2.0.1 |
---|
583 | pyasn1 >= 0.0.8a |
---|
584 | mock (only required by unit tests)</p> |
---|
585 | <ul class="simple"> |
---|
586 | <li>Release 1.6.1 (2010-02-27)</li> |
---|
587 | </ul> |
---|
588 | <p>** Bugfixes</p> |
---|
589 | <p><a href="#id7"><span class="problematic" id="id8">**</span></a>* Correct handling of Small Immutable Directories</p> |
---|
590 | <div class="system-message" id="id7"> |
---|
591 | <p class="system-message-title">System Message: WARNING/2 (<tt class="docutils">NEWS</tt>, line 251); <em><a href="#id8">backlink</a></em></p> |
---|
592 | Inline strong start-string without end-string.</div> |
---|
593 | <p>Immutable directories can now be deep-checked and listed in the web UI in |
---|
594 | all cases. (In v1.6.0, some operations, such as deep-check, on a directory |
---|
595 | graph that included very small immutable directories, would result in an |
---|
596 | exception causing the whole operation to abort.) (#948)</p> |
---|
597 | <p>** Usability Improvements</p> |
---|
598 | <p>Improved user interface messages and error reporting. (#681, #837, #939)</p> |
---|
599 | <p>The timeouts for operation handles have been greatly increased, so that |
---|
600 | you can view the results of an operation up to 4 days after it has |
---|
601 | completed. After viewing them for the first time, the results are |
---|
602 | retained for a further day. (#577)</p> |
---|
603 | <ul class="simple"> |
---|
604 | <li>Release 1.6.0 (2010-02-01)</li> |
---|
605 | </ul> |
---|
606 | <p>** New Features</p> |
---|
607 | <p><a href="#id9"><span class="problematic" id="id10">**</span></a>* Immutable Directories</p> |
---|
608 | <div class="system-message" id="id9"> |
---|
609 | <p class="system-message-title">System Message: WARNING/2 (<tt class="docutils">NEWS</tt>, line 272); <em><a href="#id10">backlink</a></em></p> |
---|
610 | Inline strong start-string without end-string.</div> |
---|
611 | <p>Tahoe-LAFS can now create and handle immutable directories. (#607, #833, #931) |
---|
612 | These are read just like normal directories, but are "deep-immutable", meaning |
---|
613 | that all their children (and everything reachable from those children) must be |
---|
614 | immutable objects (i.e. immutable or literal files, and other immutable |
---|
615 | directories).</p> |
---|
616 | <p>These directories must be created in a single webapi call that provides all |
---|
617 | of the children at once. (Since they cannot be changed after creation, the |
---|
618 | usual create/add/add sequence cannot be used.) They have URIs that start with |
---|
619 | "URI:DIR2-CHK:" or "URI:DIR2-LIT:", and are described on the human-facing web |
---|
620 | interface (aka the "WUI") with a "DIR-IMM" abbreviation (as opposed to "DIR" |
---|
621 | for the usual read-write directories and "DIR-RO" for read-only directories).</p> |
---|
622 | <p>Tahoe-LAFS releases before 1.6.0 cannot read the contents of an immutable |
---|
623 | directory. 1.5.0 will tolerate their presence in a directory listing (and |
---|
624 | display it as "unknown"). 1.4.1 and earlier cannot tolerate them: a DIR-IMM |
---|
625 | child in any directory will prevent the listing of that directory.</p> |
---|
626 | <p>Immutable directories are repairable, just like normal immutable files.</p> |
---|
627 | <p>The webapi "POST t=mkdir-immutable" call is used to create immutable |
---|
628 | directories. See docs/frontends/webapi.txt for details.</p> |
---|
629 | <p><a href="#id11"><span class="problematic" id="id12">**</span></a>* "tahoe backup" now creates immutable directories, backupdb has dircache</p> |
---|
630 | <div class="system-message" id="id11"> |
---|
631 | <p class="system-message-title">System Message: WARNING/2 (<tt class="docutils">NEWS</tt>, line 297); <em><a href="#id12">backlink</a></em></p> |
---|
632 | Inline strong start-string without end-string.</div> |
---|
633 | <p>The "tahoe backup" command has been enhanced to create immutable directories |
---|
634 | (in previous releases, it created read-only mutable directories) (#828). This |
---|
635 | is significantly faster, since it does not need to create an RSA keypair for |
---|
636 | each new directory. Also "DIR-IMM" immutable directories are repairable, unlike |
---|
637 | "DIR-RO" read-only mutable directories at present. (A future Tahoe-LAFS release |
---|
638 | should also be able to repair DIR-RO.)</p> |
---|
639 | <p>In addition, the backupdb (used by "tahoe backup" to remember what it has |
---|
640 | already copied) has been enhanced to store information about existing immutable |
---|
641 | directories. This allows it to re-use directories that have moved but still |
---|
642 | contain identical contents, or that have been deleted and later replaced. (The |
---|
643 | 1.5.0 "tahoe backup" command could only re-use directories that were in the |
---|
644 | same place as they were in the immediately previous backup.) With this change, |
---|
645 | the backup process no longer needs to read the previous snapshot out of the |
---|
646 | Tahoe-LAFS grid, reducing the network load considerably. (#606)</p> |
---|
647 | <p>A "null backup" (in which nothing has changed since the previous backup) will |
---|
648 | require only two Tahoe-side operations: one to add an Archives/$TIMESTAMP |
---|
649 | entry, and a second to update the Latest/ link. On the local disk side, it |
---|
650 | will readdir() all your local directories and stat() all your local files.</p> |
---|
651 | <p>If you've been using "tahoe backup" for a while, you will notice that your |
---|
652 | first use of it after upgrading to 1.6.0 may take a long time: it must create |
---|
653 | proper immutable versions of all the old read-only mutable directories. This |
---|
654 | process won't take as long as the initial backup (where all the file contents |
---|
655 | had to be uploaded too): it will require time proportional to the number and |
---|
656 | size of your directories. After this initial pass, all subsequent passes |
---|
657 | should take a tiny fraction of the time.</p> |
---|
658 | <p>As noted above, Tahoe-LAFS versions earlier than 1.5.0 cannot list a directory |
---|
659 | containing an immutable subdirectory. Tahoe-LAFS versions earlier than 1.6.0 |
---|
660 | cannot read the contents of an immutable directory.</p> |
---|
661 | <p>The "tahoe backup" command has been improved to skip over unreadable objects |
---|
662 | (like device files, named pipes, and files with permissions that prevent the |
---|
663 | command from reading their contents), instead of throwing an exception and |
---|
664 | terminating the backup process. It also skips over symlinks, because these |
---|
665 | cannot be represented faithfully in the Tahoe-side filesystem. A warning |
---|
666 | message will be emitted each time something is skipped. (#729, #850, #641)</p> |
---|
667 | <p><a href="#id13"><span class="problematic" id="id14">**</span></a>* "create-node" command added, "create-client" now implies --no-storage</p> |
---|
668 | <div class="system-message" id="id13"> |
---|
669 | <p class="system-message-title">System Message: WARNING/2 (<tt class="docutils">NEWS</tt>, line 339); <em><a href="#id14">backlink</a></em></p> |
---|
670 | Inline strong start-string without end-string.</div> |
---|
671 | <p>The basic idea behind Tahoe-LAFS's client+server and client-only processes is |
---|
672 | that you are creating a general-purpose Tahoe-LAFS "node" process, which has |
---|
673 | several components that can be activated. Storage service is one of these |
---|
674 | optional components, as is the Helper, FTP server, and SFTP server. Web gateway |
---|
675 | functionality is nominally on this list, but it is always active; a future |
---|
676 | release will make it optional. There are three special purpose servers that |
---|
677 | can't currently be run as a component in a node: introducer, key-generator, |
---|
678 | and stats-gatherer.</p> |
---|
679 | <p>So now "tahoe create-node" will create a Tahoe-LAFS node process, and after |
---|
680 | creation you can edit its tahoe.cfg to enable or disable the desired |
---|
681 | services. It is a more general-purpose replacement for "tahoe create-client". |
---|
682 | The default configuration has storage service enabled. For convenience, the |
---|
683 | "--no-storage" argument makes a tahoe.cfg file that disables storage |
---|
684 | service. (#760)</p> |
---|
685 | <p>"tahoe create-client" has been changed to create a Tahoe-LAFS node without a |
---|
686 | storage service. It is equivalent to "tahoe create-node --no-storage". This |
---|
687 | helps to reduce the confusion surrounding the use of a command with "client" in |
---|
688 | its name to create a storage <em>server</em>. Use "tahoe create-client" to create a |
---|
689 | purely client-side node. If you want to offer storage to the grid, use |
---|
690 | "tahoe create-node" instead.</p> |
---|
691 | <p>In the future, other services will be added to the node, and they will be |
---|
692 | controlled through options in tahoe.cfg . The most important of these |
---|
693 | services may get additional --enable-XYZ or --disable-XYZ arguments to |
---|
694 | "tahoe create-node".</p> |
---|
695 | <p>** Performance Improvements</p> |
---|
696 | <p>Download of immutable files begins as soon as the downloader has located the K |
---|
697 | necessary shares (#928, #287). In both the previous and current releases, a |
---|
698 | downloader will first issue queries to all storage servers on the grid to |
---|
699 | locate shares before it begins downloading the shares. In previous releases of |
---|
700 | Tahoe-LAFS, download would not begin until all storage servers on the grid had |
---|
701 | replied to the query, at which point K shares would be chosen for download from |
---|
702 | among the shares that were located. In this release, download begins as soon as |
---|
703 | any K shares are located. This means that downloads start sooner, which is |
---|
704 | particularly important if there is a server on the grid that is extremely slow |
---|
705 | or even hung in such a way that it will never respond. In previous releases |
---|
706 | such a server would have a negative impact on all downloads from that grid. In |
---|
707 | this release, such a server will have no impact on downloads, as long as K |
---|
708 | shares can be found on other, quicker, servers. This also means that |
---|
709 | downloads now use the "best-alacrity" servers that they talk to, as measured by |
---|
710 | how quickly the servers reply to the initial query. This might cause downloads |
---|
711 | to go faster, especially on grids with heterogeneous servers or geographical |
---|
712 | dispersion.</p> |
---|
713 | <p>** Minor Changes</p> |
---|
714 | <p>The webapi acquired a new "t=mkdir-with-children" command, to create and |
---|
715 | populate a directory in a single call. This is significantly faster than |
---|
716 | using separate "t=mkdir" and "t=set-children" operations (it uses one |
---|
717 | gateway-to-grid roundtrip, instead of three or four). (#533)</p> |
---|
718 | <p>The t=set-children (note the hyphen) operation is now documented in |
---|
719 | docs/frontends/webapi.txt, and is the new preferred spelling of the old |
---|
720 | t=set_children (with an underscore). The underscore version remains for |
---|
721 | backwards compatibility. (#381, #927)</p> |
---|
722 | <p>The tracebacks produced by errors in CLI tools should now be in plain text, |
---|
723 | instead of HTML (which is unreadable outside of a browser). (#646)</p> |
---|
724 | <p>The [storage]reserved_space configuration knob (which causes the storage |
---|
725 | server to refuse shares when available disk space drops below a threshold) |
---|
726 | should work on Windows now, not just UNIX. (#637)</p> |
---|
727 | <p>"tahoe cp" should now exit with status "1" if it cannot figure out a suitable |
---|
728 | target filename, such as when you copy from a bare filecap. (#761)</p> |
---|
729 | <p>"tahoe get" no longer creates a zero-length file upon error. (#121)</p> |
---|
730 | <p>"tahoe ls" can now list single files. (#457)</p> |
---|
731 | <p>"tahoe deep-check --repair" should tolerate repair failures now, instead of |
---|
732 | halting traversal. (#874, #786)</p> |
---|
733 | <p>"tahoe create-alias" no longer corrupts the aliases file if it had |
---|
734 | previously been edited to have no trailing newline. (#741)</p> |
---|
735 | <p>Many small packaging improvements were made to facilitate the "tahoe-lafs" |
---|
736 | package being included in Ubuntu. Several mac/win32 binary libraries were |
---|
737 | removed, some figleaf code-coverage files were removed, a bundled copy of |
---|
738 | darcsver-1.2.1 was removed, and additional licensing text was added.</p> |
---|
739 | <p>Several DeprecationWarnings for python2.6 were silenced. (#859)</p> |
---|
740 | <p>The checker --add-lease option would sometimes fail for shares stored |
---|
741 | on old (Tahoe v1.2.0) servers. (#875)</p> |
---|
742 | <p>The documentation for installing on Windows (docs/quickstart.rst) has been |
---|
743 | improved. (#773)</p> |
---|
744 | <p>For other changes not mentioned here, see |
---|
745 | <<a class="reference external" href="http://tahoe-lafs.org/trac/tahoe/query?milestone=1.6.0&keywords=!~news-done">http://tahoe-lafs.org/trac/tahoe/query?milestone=1.6.0&keywords=!~news-done</a>>. |
---|
746 | To include the tickets mentioned above, go to |
---|
747 | <<a class="reference external" href="http://tahoe-lafs.org/trac/tahoe/query?milestone=1.6.0">http://tahoe-lafs.org/trac/tahoe/query?milestone=1.6.0</a>>.</p> |
---|
748 | <ul class="simple"> |
---|
749 | <li>Release 1.5.0 (2009-08-01)</li> |
---|
750 | </ul> |
---|
751 | <p>** Improvements</p> |
---|
752 | <p>Uploads of immutable files now use pipelined writes, improving upload speed |
---|
753 | slightly (10%) over high-latency connections. (#392)</p> |
---|
754 | <p>Processing large directories has been sped up, by removing a O(N^2) algorithm |
---|
755 | from the dirnode decoding path and retaining unmodified encrypted entries. |
---|
756 | (#750, #752)</p> |
---|
757 | <p>The human-facing web interface (aka the "WUI") received a significant CSS |
---|
758 | makeover by Kevin Reid, making it much prettier and easier to read. The WUI |
---|
759 | "check" and "deep-check" forms now include a "Renew Lease" checkbox, |
---|
760 | mirroring the CLI --add-lease option, so leases can be added or renewed from |
---|
761 | the web interface.</p> |
---|
762 | <p>The CLI "tahoe mv" command now refuses to overwrite directories. (#705)</p> |
---|
763 | <p>The CLI "tahoe webopen" command, when run without arguments, will now bring |
---|
764 | up the "Welcome Page" (node status and mkdir/upload forms).</p> |
---|
765 | <p>The 3.5MB limit on mutable files was removed, so it should be possible to |
---|
766 | upload arbitrarily-sized mutable files. Note, however, that the data format |
---|
767 | and algorithm remains the same, so using mutable files still requires |
---|
768 | bandwidth, computation, and RAM in proportion to the size of the mutable file. |
---|
769 | (#694)</p> |
---|
770 | <p>This version of Tahoe-LAFS will tolerate directory entries that contain filecap |
---|
771 | formats which it does not recognize: files and directories from the future. |
---|
772 | This should improve the user experience (for 1.5.0 users) when we add new cap |
---|
773 | formats in the future. Previous versions would fail badly, preventing the user |
---|
774 | from seeing or editing anything else in those directories. These unrecognized |
---|
775 | objects can be renamed and deleted, but obviously not read or written. Also |
---|
776 | they cannot generally be copied. (#683)</p> |
---|
777 | <p>** Bugfixes</p> |
---|
778 | <p>deep-check-and-repair now tolerates read-only directories, such as the ones |
---|
779 | produced by the "tahoe backup" CLI command. Read-only directories and mutable |
---|
780 | files are checked, but not repaired. Previous versions threw an exception |
---|
781 | when attempting the repair and failed to process the remaining contents. We |
---|
782 | cannot yet repair these read-only objects, but at least this version allows |
---|
783 | the rest of the check+repair to proceed. (#625)</p> |
---|
784 | <p>A bug in 1.4.1 which caused a server to be listed multiple times (and |
---|
785 | frequently broke all connections to that server) was fixed. (#653)</p> |
---|
786 | <p>The plaintext-hashing code was removed from the Helper interface, removing |
---|
787 | the Helper's ability to mount a partial-information-guessing attack. (#722)</p> |
---|
788 | <p>** Platform/packaging changes</p> |
---|
789 | <p>Tahoe-LAFS now runs on NetBSD, OpenBSD, ArchLinux, and NixOS, and on an |
---|
790 | embedded system based on an ARM CPU running at 266 MHz.</p> |
---|
791 | <p>Unit test timeouts have been raised to allow the tests to complete on |
---|
792 | extremely slow platforms like embedded ARM-based NAS boxes, which may take |
---|
793 | several hours to run the test suite. An ARM-specific data-corrupting bug in |
---|
794 | an older version of Crypto++ (5.5.2) was identified: ARM-users are encouraged |
---|
795 | to use recent Crypto++/pycryptopp which avoids this problem.</p> |
---|
796 | <p>Tahoe-LAFS now requires a SQLite library, either the sqlite3 that comes |
---|
797 | built-in with python2.5/2.6, or the add-on pysqlite2 if you're using |
---|
798 | python2.4. In the previous release, this was only needed for the "tahoe backup" |
---|
799 | command: now it is mandatory.</p> |
---|
800 | <p>Several minor documentation updates were made.</p> |
---|
801 | <p>To help get Tahoe-LAFS into Linux distributions like Fedora and Debian, |
---|
802 | packaging improvements are being made in both Tahoe-LAFS and related libraries |
---|
803 | like pycryptopp and zfec.</p> |
---|
804 | <p>The Crypto++ library included in the pycryptopp package has been upgraded to |
---|
805 | version 5.6.0 of Crypto++, which includes a more efficient implementation of |
---|
806 | SHA-256 in assembly for x86 or amd64 architectures.</p> |
---|
807 | <p>** dependency updates</p> |
---|
808 | <blockquote> |
---|
809 | <p>foolscap-0.4.1 |
---|
810 | no python-2.4.0 or 2.4.1 (2.4.2 is good)</p> |
---|
811 | <div class="system-message"> |
---|
812 | <p class="system-message-title">System Message: ERROR/3 (<tt class="docutils">NEWS</tt>, line 521)</p> |
---|
813 | Unexpected indentation.</div> |
---|
814 | <blockquote> |
---|
815 | (they contained a bug in base64.b32decode)</blockquote> |
---|
816 | <div class="system-message"> |
---|
817 | <p class="system-message-title">System Message: WARNING/2 (<tt class="docutils">NEWS</tt>, line 522)</p> |
---|
818 | Block quote ends without a blank line; unexpected unindent.</div> |
---|
819 | <p>avoid python-2.6 on windows with mingw: compiler issues |
---|
820 | python2.4 requires pysqlite2 (2.5,2.6 does not) |
---|
821 | no python-3.x |
---|
822 | pycryptopp-0.5.15</p> |
---|
823 | </blockquote> |
---|
824 | <ul class="simple"> |
---|
825 | <li>Release 1.4.1 (2009-04-13)</li> |
---|
826 | </ul> |
---|
827 | <p>** Garbage Collection</p> |
---|
828 | <p>The big feature for this release is the implementation of garbage collection, |
---|
829 | allowing Tahoe storage servers to delete shares for old deleted files. When |
---|
830 | enabled, this uses a "mark and sweep" process: clients are responsible for |
---|
831 | updating the leases on their shares (generally by running "tahoe deep-check |
---|
832 | --add-lease"), and servers are allowed to delete any share which does not |
---|
833 | have an up-to-date lease. The process is described in detail in |
---|
834 | docs/garbage-collection.txt .</p> |
---|
835 | <p>The server must be configured to enable garbage-collection, by adding |
---|
836 | directives to the [storage] section that define an age limit for shares. The |
---|
837 | default configuration will not delete any shares.</p> |
---|
838 | <p>Both servers and clients should be upgraded to this release to make the |
---|
839 | garbage-collection as pleasant as possible. 1.2.0 servers have code to |
---|
840 | perform the update-lease operation but it suffers from a fatal bug, while |
---|
841 | 1.3.0 servers have update-lease but will return an exception for unknown |
---|
842 | storage indices, causing clients to emit an Incident for each exception, |
---|
843 | slowing the add-lease process down to a crawl. 1.1.0 servers did not have the |
---|
844 | add-lease operation at all.</p> |
---|
845 | <p>** Security/Usability Problems Fixed</p> |
---|
846 | <p>A super-linear algorithm in the Merkle Tree code was fixed, which previously |
---|
847 | caused e.g. download of a 10GB file to take several hours before the first |
---|
848 | byte of plaintext could be produced. The new "alacrity" is about 2 minutes. A |
---|
849 | future release should reduce this to a few seconds by fixing ticket #442.</p> |
---|
850 | <p>The previous version permitted a small timing attack (due to our use of |
---|
851 | strcmp) against the write-enabler and lease-renewal/cancel secrets. An |
---|
852 | attacker who could measure response-time variations of approximatly 3ns |
---|
853 | against a very noisy background time of about 15ms might be able to guess |
---|
854 | these secrets. We do not believe this attack was actually feasible. This |
---|
855 | release closes the attack by first hashing the two strings to be compared |
---|
856 | with a random secret.</p> |
---|
857 | <p>** webapi changes</p> |
---|
858 | <p>In most cases, HTML tracebacks will only be sent if an "Accept: text/html" |
---|
859 | header was provided with the HTTP request. This will generally cause browsers |
---|
860 | to get an HTMLized traceback but send regular text/plain tracebacks to |
---|
861 | non-browsers (like the CLI clients). More errors have been mapped to useful |
---|
862 | HTTP error codes.</p> |
---|
863 | <p>The streaming webapi operations (deep-check and manifest) now have a way to |
---|
864 | indicate errors (an output line that starts with "ERROR" instead of being |
---|
865 | legal JSON). See docs/frontends/webapi.txt for details.</p> |
---|
866 | <p>The storage server now has its own status page (at /storage), linked from the |
---|
867 | Welcome page. This page shows progress and results of the two new |
---|
868 | share-crawlers: one which merely counts shares (to give an estimate of how |
---|
869 | many files/directories are being stored in the grid), the other examines |
---|
870 | leases and reports how much space would be freed if GC were enabled. The page |
---|
871 | also shows how much disk space is present, used, reserved, and available for |
---|
872 | the Tahoe server, and whether the server is currently running in "read-write" |
---|
873 | mode or "read-only" mode.</p> |
---|
874 | <p>When a directory node cannot be read (perhaps because of insufficent shares), |
---|
875 | a minimal webapi page is created so that the "more-info" links (including a |
---|
876 | Check/Repair operation) will still be accessible.</p> |
---|
877 | <p>A new "reliability" page was added, with the beginnings of work on a |
---|
878 | statistical loss model. You can tell this page how many servers you are using |
---|
879 | and their independent failure probabilities, and it will tell you the |
---|
880 | likelihood that an arbitrary file will survive each repair period. The |
---|
881 | "numpy" package must be installed to access this page. A partial paper, |
---|
882 | written by Shawn Willden, has been added to docs/proposed/lossmodel.lyx .</p> |
---|
883 | <p>** CLI changes</p> |
---|
884 | <p>"tahoe check" and "tahoe deep-check" now accept an "--add-lease" argument, to |
---|
885 | update a lease on all shares. This is the "mark" side of garbage collection.</p> |
---|
886 | <p>In many cases, CLI error messages have been improved: the ugly HTMLized |
---|
887 | traceback has been replaced by a normal python traceback.</p> |
---|
888 | <p>"tahoe deep-check" and "tahoe manifest" now have better error reporting. |
---|
889 | "tahoe cp" is now non-verbose by default.</p> |
---|
890 | <p>"tahoe backup" now accepts several "--exclude" arguments, to ignore certain |
---|
891 | files (like editor temporary files and version-control metadata) during |
---|
892 | backup.</p> |
---|
893 | <p>On windows, the CLI now accepts local paths like "c:dirfile.txt", which |
---|
894 | previously was interpreted as a Tahoe path using a "c:" alias.</p> |
---|
895 | <p>The "tahoe restart" command now uses "--force" by default (meaning it will |
---|
896 | start a node even if it didn't look like there was one already running).</p> |
---|
897 | <p>The "tahoe debug consolidate" command was added. This takes a series of |
---|
898 | independent timestamped snapshot directories (such as those created by the |
---|
899 | allmydata.com windows backup program, or a series of "tahoe cp -r" commands) |
---|
900 | and creates new snapshots that used shared read-only directories whenever |
---|
901 | possible (like the output of "tahoe backup"). In the most common case (when |
---|
902 | the snapshots are fairly similar), the result will use significantly fewer |
---|
903 | directories than the original, allowing "deep-check" and similar tools to run |
---|
904 | much faster. In some cases, the speedup can be an order of magnitude or more. |
---|
905 | This tool is still somewhat experimental, and only needs to be run on large |
---|
906 | backups produced by something other than "tahoe backup", so it was placed |
---|
907 | under the "debug" category.</p> |
---|
908 | <p>"tahoe cp -r --caps-only tahoe:dir localdir" is a diagnostic tool which, |
---|
909 | instead of copying the full contents of files into the local directory, |
---|
910 | merely copies their filecaps. This can be used to verify the results of a |
---|
911 | "consolidation" operation.</p> |
---|
912 | <p>** other fixes</p> |
---|
913 | <p>The codebase no longer rauses RuntimeError as a kind of assert(). Specific |
---|
914 | exception classes were created for each previous instance of RuntimeError.</p> |
---|
915 | <p>Many unit tests were changed to use a non-network test harness, speeding them |
---|
916 | up considerably.</p> |
---|
917 | <p>Deep-traversal operations (manifest and deep-check) now walk individual |
---|
918 | directories in alphabetical order. Occasional turn breaks are inserted to |
---|
919 | prevent a stack overflow when traversing directories with hundreds of |
---|
920 | entries.</p> |
---|
921 | <p>The experimental SFTP server had its path-handling logic changed slightly, to |
---|
922 | accomodate more SFTP clients, although there are still issues (#645).</p> |
---|
923 | <ul class="simple"> |
---|
924 | <li>Release 1.3.0 (2009-02-13)</li> |
---|
925 | </ul> |
---|
926 | <p>** Checker/Verifier/Repairer</p> |
---|
927 | <p>The primary focus of this release has been writing a checker / verifier / |
---|
928 | repairer for files and directories. "Checking" is the act of asking storage |
---|
929 | servers whether they have a share for the given file or directory: if there |
---|
930 | are not enough shares available, the file or directory will be |
---|
931 | unrecoverable. "Verifying" is the act of downloading and cryptographically |
---|
932 | asserting that the server's share is undamaged: it requires more work |
---|
933 | (bandwidth and CPU) than checking, but can catch problems that simple |
---|
934 | checking cannot. "Repair" is the act of replacing missing or damaged shares |
---|
935 | with new ones.</p> |
---|
936 | <p>This release includes a full checker, a partial verifier, and a partial |
---|
937 | repairer. The repairer is able to handle missing shares: new shares are |
---|
938 | generated and uploaded to make up for the missing ones. This is currently the |
---|
939 | best application of the repairer: to replace shares that were lost because of |
---|
940 | server departure or permanent drive failure.</p> |
---|
941 | <p>The repairer in this release is somewhat able to handle corrupted shares. The |
---|
942 | limitations are:</p> |
---|
943 | <blockquote> |
---|
944 | <ul class="simple"> |
---|
945 | <li>Immutable verifier is incomplete: not all shares are used, and not all |
---|
946 | fields of those shares are verified. Therefore the immutable verifier has |
---|
947 | only a moderate chance of detecting corrupted shares.</li> |
---|
948 | <li>The mutable verifier is mostly complete: all shares are examined, and most |
---|
949 | fields of the shares are validated.</li> |
---|
950 | <li>The storage server protocol offers no way for the repairer to replace or |
---|
951 | delete immutable shares. If corruption is detected, the repairer will |
---|
952 | upload replacement shares to other servers, but the corrupted shares will |
---|
953 | be left in place.</li> |
---|
954 | <li>read-only directories and read-only mutable files must be repaired by |
---|
955 | someone who holds the write-cap: the read-cap is insufficient. Moreover, |
---|
956 | the deep-check-and-repair operation will halt with an error if it attempts |
---|
957 | to repair one of these read-only objects.</li> |
---|
958 | <li>Some forms of corruption can cause both download and repair operations to |
---|
959 | fail. A future release will fix this, since download should be tolerant of |
---|
960 | any corruption as long as there are at least 'k' valid shares, and repair |
---|
961 | should be able to fix any file that is downloadable.</li> |
---|
962 | </ul> |
---|
963 | </blockquote> |
---|
964 | <p>If the downloader, verifier, or repairer detects share corruption, the |
---|
965 | servers which provided the bad shares will be notified (via a file placed in |
---|
966 | the BASEDIR/storage/corruption-advisories directory) so their operators can |
---|
967 | manually delete the corrupted shares and investigate the problem. In |
---|
968 | addition, the "incident gatherer" mechanism will automatically report share |
---|
969 | corruption to an incident gatherer service, if one is configured. Note that |
---|
970 | corrupted shares indicate hardware failures, serious software bugs, or malice |
---|
971 | on the part of the storage server operator, so a corrupted share should be |
---|
972 | considered highly unusual.</p> |
---|
973 | <p>By periodically checking/repairing all files and directories, objects in the |
---|
974 | Tahoe filesystem remain resistant to recoverability failures due to missing |
---|
975 | and/or broken servers.</p> |
---|
976 | <p>This release includes a wapi mechanism to initiate checks on individual |
---|
977 | files and directories (with or without verification, and with or without |
---|
978 | automatic repair). A related mechanism is used to initiate a "deep-check" on |
---|
979 | a directory: recursively traversing the directory and its children, checking |
---|
980 | (and/or verifying/repairing) everything underneath. Both mechanisms can be |
---|
981 | run with an "output=JSON" argument, to obtain machine-readable check/repair |
---|
982 | status results. These results include a copy of the filesystem statistics |
---|
983 | from the "deep-stats" operation (including total number of files, size |
---|
984 | histogram, etc). If repair is possible, a "Repair" button will appear on the |
---|
985 | results page.</p> |
---|
986 | <p>The client web interface now features some extra buttons to initiate check |
---|
987 | and deep-check operations. When these operations finish, they display a |
---|
988 | results page that summarizes any problems that were encountered. All |
---|
989 | long-running deep-traversal operations, including deep-check, use a |
---|
990 | start-and-poll mechanism, to avoid depending upon a single long-lived HTTP |
---|
991 | connection. docs/frontends/webapi.txt has details.</p> |
---|
992 | <p>** Efficient Backup</p> |
---|
993 | <p>The "tahoe backup" command is new in this release, which creates efficient |
---|
994 | versioned backups of a local directory. Given a local pathname and a target |
---|
995 | Tahoe directory, this will create a read-only snapshot of the local directory |
---|
996 | in $target/Archives/$timestamp. It will also create $target/Latest, which is |
---|
997 | a reference to the latest such snapshot. Each time you run "tahoe backup" |
---|
998 | with the same source and target, a new $timestamp snapshot will be added. |
---|
999 | These snapshots will share directories that have not changed since the last |
---|
1000 | backup, to speed up the process and minimize storage requirements. In |
---|
1001 | addition, a small database is used to keep track of which local files have |
---|
1002 | been uploaded already, to avoid uploading them a second time. This |
---|
1003 | drastically reduces the work needed to do a "null backup" (when nothing has |
---|
1004 | changed locally), making "tahoe backup' suitable to run from a daily cronjob.</p> |
---|
1005 | <p>Note that the "tahoe backup" CLI command must be used in conjunction with a |
---|
1006 | 1.3.0-or-newer Tahoe client node; there was a bug in the 1.2.0 webapi |
---|
1007 | implementation that would prevent the last step (create $target/Latest) from |
---|
1008 | working.</p> |
---|
1009 | <p>** Large Files</p> |
---|
1010 | <p>The 12GiB (approximate) immutable-file-size limitation is lifted. This |
---|
1011 | release knows how to handle so-called "v2 immutable shares", which permit |
---|
1012 | immutable files of up to about 18 EiB (about 3*10^14). These v2 shares are |
---|
1013 | created if the file to be uploaded is too large to fit into v1 shares. v1 |
---|
1014 | shares are created if the file is small enough to fit into them, so that |
---|
1015 | files created with tahoe-1.3.0 can still be read by earlier versions if they |
---|
1016 | are not too large. Note that storage servers also had to be changed to |
---|
1017 | support larger files, and this release is the first release in which they are |
---|
1018 | able to do that. Clients will detect which servers are capable of supporting |
---|
1019 | large files on upload and will not attempt to upload shares of a large file |
---|
1020 | to a server which doesn't support it.</p> |
---|
1021 | <p>** FTP/SFTP Server</p> |
---|
1022 | <p>Tahoe now includes experimental FTP and SFTP servers. When configured with a |
---|
1023 | suitable method to translate username+password into a root directory cap, it |
---|
1024 | provides simple access to the virtual filesystem. Remember that FTP is |
---|
1025 | completely unencrypted: passwords, filenames, and file contents are all sent |
---|
1026 | over the wire in cleartext, so FTP should only be used on a local (127.0.0.1) |
---|
1027 | connection. This feature is still in development: there are no unit tests |
---|
1028 | yet, and behavior with respect to Unicode filenames is uncertain. Please see |
---|
1029 | docs/frontends/FTP-and-SFTP.txt for configuration details. (#512, #531)</p> |
---|
1030 | <p>** CLI Changes</p> |
---|
1031 | <p>This release adds the 'tahoe create-alias' command, which is a combination of |
---|
1032 | 'tahoe mkdir' and 'tahoe add-alias'. This also allows you to start using a |
---|
1033 | new tahoe directory without exposing its URI in the argv list, which is |
---|
1034 | publicly visible (through the process table) on most unix systems. Thanks to |
---|
1035 | Kevin Reid for bringing this issue to our attention.</p> |
---|
1036 | <p>The single-argument form of "tahoe put" was changed to create an unlinked |
---|
1037 | file. I.e. "tahoe put bar.txt" will take the contents of a local "bar.txt" |
---|
1038 | file, upload them to the grid, and print the resulting read-cap; the file |
---|
1039 | will not be attached to any directories. This seemed a bit more useful than |
---|
1040 | the previous behavior (copy stdin, upload to the grid, attach the resulting |
---|
1041 | file into your default tahoe: alias in a child named 'bar.txt').</p> |
---|
1042 | <p>"tahoe put" was also fixed to handle mutable files correctly: "tahoe put |
---|
1043 | bar.txt URI:SSK:..." will read the contents of the local bar.txt and use them |
---|
1044 | to replace the contents of the given mutable file.</p> |
---|
1045 | <p>The "tahoe webopen" command was modified to accept aliases. This means "tahoe |
---|
1046 | webopen tahoe:" will cause your web browser to open to a "wui" page that |
---|
1047 | gives access to the directory associated with the default "tahoe:" alias. It |
---|
1048 | should also accept leading slashes, like "tahoe webopen tahoe:/stuff".</p> |
---|
1049 | <p>Many esoteric debugging commands were moved down into a "debug" subcommand:</p> |
---|
1050 | <blockquote> |
---|
1051 | tahoe debug dump-cap |
---|
1052 | tahoe debug dump-share |
---|
1053 | tahoe debug find-shares |
---|
1054 | tahoe debug catalog-shares |
---|
1055 | tahoe debug corrupt-share</blockquote> |
---|
1056 | <p>The last command ("tahoe debug corrupt-share") flips a random bit of the |
---|
1057 | given local sharefile. This is used to test the file verifying/repairing |
---|
1058 | code, and obviously should not be used on user data.</p> |
---|
1059 | <p>The cli might not correctly handle arguments which contain non-ascii |
---|
1060 | characters in Tahoe v1.3 (although depending on your platform it |
---|
1061 | might, especially if your platform can be configured to pass such |
---|
1062 | characters on the command-line in utf-8 encoding). See |
---|
1063 | <a class="reference external" href="http://tahoe-lafs.org/trac/tahoe/ticket/565">http://tahoe-lafs.org/trac/tahoe/ticket/565</a> for details.</p> |
---|
1064 | <p>** Web changes</p> |
---|
1065 | <p>The "default webapi port", used when creating a new client node (and in the |
---|
1066 | getting-started documentation), was changed from 8123 to 3456, to reduce |
---|
1067 | confusion when Tahoe accessed through a Firefox browser on which the |
---|
1068 | "Torbutton" extension has been installed. Port 8123 is occasionally used as a |
---|
1069 | Tor control port, so Torbutton adds 8123 to Firefox's list of "banned ports" |
---|
1070 | to avoid CSRF attacks against Tor. Once 8123 is banned, it is difficult to |
---|
1071 | diagnose why you can no longer reach a Tahoe node, so the Tahoe default was |
---|
1072 | changed. Note that 3456 is reserved by IANA for the "vat" protocol, but there |
---|
1073 | are argueably more Torbutton+Tahoe users than vat users these days. Note that |
---|
1074 | this will only affect newly-created client nodes. Pre-existing client nodes, |
---|
1075 | created by earlier versions of tahoe, may still be listening on 8123.</p> |
---|
1076 | <p>All deep-traversal operations (start-manifest, start-deep-size, |
---|
1077 | start-deep-stats, start-deep-check) now use a start-and-poll approach, |
---|
1078 | instead of using a single (fragile) long-running synchronous HTTP connection. |
---|
1079 | All these "start-" operations use POST instead of GET. The old "GET |
---|
1080 | manifest", "GET deep-size", and "POST deep-check" operations have been |
---|
1081 | removed.</p> |
---|
1082 | <p>The new "POST start-manifest" operation, when it finally completes, results |
---|
1083 | in a table of (path,cap), instead of the list of verifycaps produced by the |
---|
1084 | old "GET manifest". The table is available in several formats: use |
---|
1085 | output=html, output=text, or output=json to choose one. The JSON output also |
---|
1086 | includes stats, and a list of verifycaps and storage-index strings.</p> |
---|
1087 | <p>The "return_to=" and "when_done=" arguments have been removed from the |
---|
1088 | t=check and deep-check operations.</p> |
---|
1089 | <p>The top-level status page (/status) now has a machine-readable form, via |
---|
1090 | "/status/?t=json". This includes information about the currently-active |
---|
1091 | uploads and downloads, which may be useful for frontends that wish to display |
---|
1092 | progress information. There is no easy way to correlate the activities |
---|
1093 | displayed here with recent wapi requests, however.</p> |
---|
1094 | <p>Any files in BASEDIR/public_html/ (configurable) will be served in response |
---|
1095 | to requests in the /static/ portion of the URL space. This will simplify the |
---|
1096 | deployment of javascript-based frontends that can still access wapi calls |
---|
1097 | by conforming to the (regrettable) "same-origin policy".</p> |
---|
1098 | <p>The welcome page now has a "Report Incident" button, which is tied into the |
---|
1099 | "Incident Gatherer" machinery. If the node is attached to an incident |
---|
1100 | gatherer (via log_gatherer.furl), then pushing this button will cause an |
---|
1101 | Incident to be signalled: this means recent log events are aggregated and |
---|
1102 | sent in a bundle to the gatherer. The user can push this button after |
---|
1103 | something strange takes place (and they can provide a short message to go |
---|
1104 | along with it), and the relevant data will be delivered to a centralized |
---|
1105 | incident-gatherer for later processing by operations staff.</p> |
---|
1106 | <p>The "HEAD" method should now work correctly, in addition to the usual "GET", |
---|
1107 | "PUT", and "POST" methods. "HEAD" is supposed to return exactly the same |
---|
1108 | headers as "GET" would, but without any of the actual response body data. For |
---|
1109 | mutable files, this now does a brief mapupdate (to figure out the size of the |
---|
1110 | file that would be returned), without actually retrieving the file's |
---|
1111 | contents.</p> |
---|
1112 | <p>The "GET" operation on files can now support the HTTP "Range:" header, |
---|
1113 | allowing requests for partial content. This allows certain media players to |
---|
1114 | correctly stream audio and movies out of a Tahoe grid. The current |
---|
1115 | implementation uses a disk-based cache in BASEDIR/private/cache/download , |
---|
1116 | which holds the plaintext of the files being downloaded. Future |
---|
1117 | implementations might not use this cache. GET for immutable files now returns |
---|
1118 | an ETag header.</p> |
---|
1119 | <p>Each file and directory now has a "Show More Info" web page, which contains |
---|
1120 | much of the information that was crammed into the directory page before. This |
---|
1121 | includes readonly URIs, storage index strings, object type, buttons to |
---|
1122 | control checking/verifying/repairing, and deep-check/deep-stats buttons (for |
---|
1123 | directories). For mutable files, the "replace contents" upload form has been |
---|
1124 | moved here too. As a result, the directory page is now much simpler and |
---|
1125 | cleaner, and several potentially-misleading links (like t=uri) are now gone.</p> |
---|
1126 | <p>Slashes are discouraged in Tahoe file/directory names, since they cause |
---|
1127 | problems when accessing the filesystem through the wapi. However, there are |
---|
1128 | a couple of accidental ways to generate such names. This release tries to |
---|
1129 | make it easier to correct such mistakes by escaping slashes in several |
---|
1130 | places, allowing slashes in the t=info and t=delete commands, and in the |
---|
1131 | source (but not the target) of a t=rename command.</p> |
---|
1132 | <p>** Packaging</p> |
---|
1133 | <p>Tahoe's dependencies have been extended to require the "[secure_connections]" |
---|
1134 | feature from Foolscap, which will cause pyOpenSSL to be required and/or |
---|
1135 | installed. If OpenSSL and its development headers are already installed on |
---|
1136 | your system, this can occur automatically. Tahoe now uses pollreactor |
---|
1137 | (instead of the default selectreactor) to work around a bug between pyOpenSSL |
---|
1138 | and the most recent release of Twisted (8.1.0). This bug only affects unit |
---|
1139 | tests (hang during shutdown), and should not impact regular use.</p> |
---|
1140 | <p>The Tahoe source code tarballs now come in two different forms: regular and |
---|
1141 | "sumo". The regular tarball contains just Tahoe, nothing else. When building |
---|
1142 | from the regular tarball, the build process will download any unmet |
---|
1143 | dependencies from the internet (starting with the index at PyPI) so it can |
---|
1144 | build and install them. The "sumo" tarball contains copies of all the |
---|
1145 | libraries that Tahoe requires (foolscap, twisted, zfec, etc), so using the |
---|
1146 | "sumo" tarball should not require any internet access during the build |
---|
1147 | process. This can be useful if you want to build Tahoe while on an airplane, |
---|
1148 | a desert island, or other bandwidth-limited environments.</p> |
---|
1149 | <p>Similarly, tahoe-lafs.org now hosts a "tahoe-deps" tarball which contains the |
---|
1150 | latest versions of all these dependencies. This tarball, located at |
---|
1151 | <a class="reference external" href="http://tahoe-lafs.org/source/tahoe/deps/tahoe-deps.tar.gz">http://tahoe-lafs.org/source/tahoe/deps/tahoe-deps.tar.gz</a>, can be unpacked in |
---|
1152 | the tahoe source tree (or in its parent directory), and the build process |
---|
1153 | should satisfy its downloading needs from it instead of reaching out to PyPI. |
---|
1154 | This can be useful if you want to build Tahoe from a darcs checkout while on |
---|
1155 | that airplane or desert island.</p> |
---|
1156 | <p>Because of the previous two changes ("sumo" tarballs and the "tahoe-deps" |
---|
1157 | bundle), most of the files have been removed from misc/dependencies/ . This |
---|
1158 | brings the regular Tahoe tarball down to 2MB (compressed), and the darcs |
---|
1159 | checkout (without history) to about 7.6MB. A full darcs checkout will still |
---|
1160 | be fairly large (because of the historical patches which included the |
---|
1161 | dependent libraries), but a 'lazy' one should now be small.</p> |
---|
1162 | <p>The default "make" target is now an alias for "setup.py build", which itself |
---|
1163 | is an alias for "setup.py develop --prefix support", with some extra work |
---|
1164 | before and after (see setup.cfg). Most of the complicated platform-dependent |
---|
1165 | code in the Makefile was rewritten in Python and moved into setup.py, |
---|
1166 | simplifying things considerably.</p> |
---|
1167 | <p>Likewise, the "make test" target now delegates most of its work to "setup.py |
---|
1168 | test", which takes care of getting PYTHONPATH configured to access the tahoe |
---|
1169 | code (and dependencies) that gets put in support/lib/ by the build_tahoe |
---|
1170 | step. This should allow unit tests to be run even when trial (which is part |
---|
1171 | of Twisted) wasn't already installed (in this case, trial gets installed to |
---|
1172 | support/bin because Twisted is a dependency of Tahoe).</p> |
---|
1173 | <p>Tahoe is now compatible with the recently-released Python 2.6 , although it |
---|
1174 | is recommended to use Tahoe on Python 2.5, on which it has received more |
---|
1175 | thorough testing and deployment.</p> |
---|
1176 | <p>Tahoe is now compatible with simplejson-2.0.x . The previous release assumed |
---|
1177 | that simplejson.loads always returned unicode strings, which is no longer the |
---|
1178 | case in 2.0.x .</p> |
---|
1179 | <p>** Grid Management Tools</p> |
---|
1180 | <p>Several tools have been added or updated in the misc/ directory, mostly munin |
---|
1181 | plugins that can be used to monitor a storage grid.</p> |
---|
1182 | <p>The misc/spacetime/ directory contains a "disk watcher" daemon (startable |
---|
1183 | with 'tahoe start'), which can be configured with a set of HTTP URLs |
---|
1184 | (pointing at the wapi '/statistics' page of a bunch of storage servers), |
---|
1185 | and will periodically fetch disk-used/disk-available information from all the |
---|
1186 | servers. It keeps this information in an Axiom database (a sqlite-based |
---|
1187 | library available from divmod.org). The daemon computes time-averaged rates |
---|
1188 | of disk usage, as well as a prediction of how much time is left before the |
---|
1189 | grid is completely full.</p> |
---|
1190 | <p>The misc/munin/ directory contains a new set of munin plugins |
---|
1191 | (tahoe_diskleft, tahoe_diskusage, tahoe_doomsday) which talk to the |
---|
1192 | disk-watcher and provide graphs of its calculations.</p> |
---|
1193 | <p>To support the disk-watcher, the Tahoe statistics component (visible through |
---|
1194 | the wapi at the /statistics/ URL) now includes disk-used and disk-available |
---|
1195 | information. Both are derived through an equivalent of the unix 'df' command |
---|
1196 | (i.e. they ask the kernel for the number of free blocks on the partition that |
---|
1197 | encloses the BASEDIR/storage directory). In the future, the disk-available |
---|
1198 | number will be further influenced by the local storage policy: if that policy |
---|
1199 | says that the server should refuse new shares when less than 5GB is left on |
---|
1200 | the partition, then "disk-available" will report zero even though the kernel |
---|
1201 | sees 5GB remaining.</p> |
---|
1202 | <p>The 'tahoe_overhead' munin plugin interacts with an allmydata.com-specific |
---|
1203 | server which reports the total of the 'deep-size' reports for all active user |
---|
1204 | accounts, compares this with the disk-watcher data, to report on overhead |
---|
1205 | percentages. This provides information on how much space could be recovered |
---|
1206 | once Tahoe implements some form of garbage collection.</p> |
---|
1207 | <p>** Configuration Changes: single INI-format tahoe.cfg file</p> |
---|
1208 | <p>The Tahoe node is now configured with a single INI-format file, named |
---|
1209 | "tahoe.cfg", in the node's base directory. Most of the previous |
---|
1210 | multiple-separate-files are still read for backwards compatibility (the |
---|
1211 | embedded SSH debug server and the advertised_ip_addresses files are the |
---|
1212 | exceptions), but new directives will only be added to tahoe.cfg . The "tahoe |
---|
1213 | create-client" command will create a tahoe.cfg for you, with sample values |
---|
1214 | commented out. (ticket #518)</p> |
---|
1215 | <p>tahoe.cfg now has controls for the foolscap "keepalive" and "disconnect" |
---|
1216 | timeouts (#521).</p> |
---|
1217 | <p>tahoe.cfg now has controls for the encoding parameters: "shares.needed" and |
---|
1218 | "shares.total" in the "[client]" section. The default parameters are still |
---|
1219 | 3-of-10.</p> |
---|
1220 | <p>The inefficient storage 'sizelimit' control (which established an upper bound |
---|
1221 | on the amount of space that a storage server is allowed to consume) has been |
---|
1222 | replaced by a lightweight 'reserved_space' control (which establishes a lower |
---|
1223 | bound on the amount of remaining space). The storage server will reject all |
---|
1224 | writes that would cause the remaining disk space (as measured by a '/bin/df' |
---|
1225 | equivalent) to drop below this value. The "[storage]reserved_space=" |
---|
1226 | tahoe.cfg parameter controls this setting. (note that this only affects |
---|
1227 | immutable shares: it is an outstanding bug that reserved_space does not |
---|
1228 | prevent the allocation of new mutable shares, nor does it prevent the growth |
---|
1229 | of existing mutable shares).</p> |
---|
1230 | <p>** Other Changes</p> |
---|
1231 | <p>Clients now declare which versions of the protocols they support. This is |
---|
1232 | part of a new backwards-compatibility system: |
---|
1233 | <a class="reference external" href="http://tahoe-lafs.org/trac/tahoe/wiki/Versioning">http://tahoe-lafs.org/trac/tahoe/wiki/Versioning</a> .</p> |
---|
1234 | <p>The version strings for human inspection (as displayed on the Welcome web |
---|
1235 | page, and included in logs) now includes a platform identifer (frequently |
---|
1236 | including a linux distribution name, processor architecture, etc).</p> |
---|
1237 | <p>Several bugs have been fixed, including one that would cause an exception (in |
---|
1238 | the logs) if a wapi download operation was cancelled (by closing the TCP |
---|
1239 | connection, or pushing the "stop" button in a web browser).</p> |
---|
1240 | <p>Tahoe now uses Foolscap "Incidents", writing an "incident report" file to |
---|
1241 | logs/incidents/ each time something weird occurs. These reports are available |
---|
1242 | to an "incident gatherer" through the flogtool command. For more details, |
---|
1243 | please see the Foolscap logging documentation. An incident-classifying plugin |
---|
1244 | function is provided in misc/incident-gatherer/classify_tahoe.py .</p> |
---|
1245 | <p>If clients detect corruption in shares, they now automatically report it to |
---|
1246 | the server holding that share, if it is new enough to accept the report. |
---|
1247 | These reports are written to files in BASEDIR/storage/corruption-advisories .</p> |
---|
1248 | <p>The 'nickname' setting is now defined to be a UTF-8 -encoded string, allowing |
---|
1249 | non-ascii nicknames.</p> |
---|
1250 | <p>The 'tahoe start' command will now accept a --syslog argument and pass it |
---|
1251 | through to twistd, making it easier to launch non-Tahoe nodes (like the |
---|
1252 | cpu-watcher) and have them log to syslogd instead of a local file. This is |
---|
1253 | useful when running a Tahoe node out of a USB flash drive.</p> |
---|
1254 | <p>The Mac GUI in src/allmydata/gui/ has been improved.</p> |
---|
1255 | <ul class="simple"> |
---|
1256 | <li>Release 1.2.0 (2008-07-21)</li> |
---|
1257 | </ul> |
---|
1258 | <p>** Security</p> |
---|
1259 | <p>This release makes the immutable-file "ciphertext hash tree" mandatory. |
---|
1260 | Previous releases allowed the uploader to decide whether their file would |
---|
1261 | have an integrity check on the ciphertext or not. A malicious uploader could |
---|
1262 | use this to create a readcap that would download as one file or a different |
---|
1263 | one, depending upon which shares the client fetched first, with no errors |
---|
1264 | raised. There are other integrity checks on the shares themselves, preventing |
---|
1265 | a storage server or other party from violating the integrity properties of |
---|
1266 | the read-cap: this failure was only exploitable by the uploader who gives you |
---|
1267 | a carefully constructed read-cap. If you download the file with Tahoe 1.2.0 |
---|
1268 | or later, you will not be vulnerable to this problem. #491</p> |
---|
1269 | <p>This change does not introduce a compatibility issue, because all existing |
---|
1270 | versions of Tahoe will emit the ciphertext hash tree in their shares.</p> |
---|
1271 | <p>** Dependencies</p> |
---|
1272 | <p>Tahoe now requires Foolscap-0.2.9 . It also requires pycryptopp 0.5 or newer, |
---|
1273 | since earlier versions had a bug that interacted with specific compiler |
---|
1274 | versions that could sometimes result in incorrect encryption behavior. Both |
---|
1275 | packages are included in the Tahoe source tarball in misc/dependencies/ , and |
---|
1276 | should be built automatically when necessary.</p> |
---|
1277 | <p>** Web API</p> |
---|
1278 | <p>Web API directory pages should now contain properly-slash-terminated links to |
---|
1279 | other directories. They have also stopped using absolute links in forms and |
---|
1280 | pages (which interfered with the use of a front-end load-balancing proxy).</p> |
---|
1281 | <p>The behavior of the "Check This File" button changed, in conjunction with |
---|
1282 | larger internal changes to file checking/verification. The button triggers an |
---|
1283 | immediate check as before, but the outcome is shown on its own page, and does |
---|
1284 | not get stored anywhere. As a result, the web directory page no longer shows |
---|
1285 | historical checker results.</p> |
---|
1286 | <p>A new "Deep-Check" button has been added, which allows a user to initiate a |
---|
1287 | recursive check of the given directory and all files and directories |
---|
1288 | reachable from it. This can cause quite a bit of work, and has no |
---|
1289 | intermediate progress information or feedback about the process. In addition, |
---|
1290 | the results of the deep-check are extremely limited. A later release will |
---|
1291 | improve this behavior.</p> |
---|
1292 | <p>The web server's behavior with respect to non-ASCII (unicode) filenames in |
---|
1293 | the "GET save=true" operation has been improved. To achieve maximum |
---|
1294 | compatibility with variously buggy web browsers, the server does not try to |
---|
1295 | figure out the character set of the inbound filename. It just echoes the same |
---|
1296 | bytes back to the browser in the Content-Disposition header. This seems to |
---|
1297 | make both IE7 and Firefox work correctly.</p> |
---|
1298 | <p>** Checker/Verifier/Repairer</p> |
---|
1299 | <p>Tahoe is slowly acquiring convenient tools to check up on file health, |
---|
1300 | examine existing shares for errors, and repair files that are not fully |
---|
1301 | healthy. This release adds a mutable checker/verifier/repairer, although |
---|
1302 | testing is very limited, and there are no web interfaces to trigger repair |
---|
1303 | yet. The "Check" button next to each file or directory on the wapi page |
---|
1304 | will perform a file check, and the "deep check" button on each directory will |
---|
1305 | recursively check all files and directories reachable from there (which may |
---|
1306 | take a very long time).</p> |
---|
1307 | <p>Future releases will improve access to this functionality.</p> |
---|
1308 | <p>** Operations/Packaging</p> |
---|
1309 | <p>A "check-grid" script has been added, along with a Makefile target. This is |
---|
1310 | intended (with the help of a pre-configured node directory) to check upon the |
---|
1311 | health of a Tahoe grid, uploading and downloading a few files. This can be |
---|
1312 | used as a monitoring tool for a deployed grid, to be run periodically and to |
---|
1313 | signal an error if it ever fails. It also helps with compatibility testing, |
---|
1314 | to verify that the latest Tahoe code is still able to handle files created by |
---|
1315 | an older version.</p> |
---|
1316 | <p>The munin plugins from misc/munin/ are now copied into any generated debian |
---|
1317 | packages, and are made executable (and uncompressed) so they can be symlinked |
---|
1318 | directly from /etc/munin/plugins/ .</p> |
---|
1319 | <p>Ubuntu "Hardy" was added as a supported debian platform, with a Makefile |
---|
1320 | target to produce hardy .deb packages. Some notes have been added to |
---|
1321 | docs/debian.txt about building Tahoe on a debian/ubuntu system.</p> |
---|
1322 | <p>Storage servers now measure operation rates and latency-per-operation, and |
---|
1323 | provides results through the /statistics web page as well as the stats |
---|
1324 | gatherer. Munin plugins have been added to match.</p> |
---|
1325 | <p>** Other</p> |
---|
1326 | <p>Tahoe nodes now use Foolscap "incident logging" to record unusual events to |
---|
1327 | their NODEDIR/logs/incidents/ directory. These incident files can be examined |
---|
1328 | by Foolscap logging tools, or delivered to an external log-gatherer for |
---|
1329 | further analysis. Note that Tahoe now requires Foolscap-0.2.9, since 0.2.8 |
---|
1330 | had a bug that complained about "OSError: File exists" when trying to create |
---|
1331 | the incidents/ directory for a second time.</p> |
---|
1332 | <p>If no servers are available when retrieving a mutable file (like a |
---|
1333 | directory), the node now reports an error instead of hanging forever. Earlier |
---|
1334 | releases would not only hang (causing the wapi directory listing to get |
---|
1335 | stuck half-way through), but the internal dirnode serialization would cause |
---|
1336 | all subsequent attempts to retrieve or modify the same directory to hang as |
---|
1337 | well. #463</p> |
---|
1338 | <p>A minor internal exception (reported in logs/twistd.log, in the |
---|
1339 | "stopProducing" method) was fixed, which complained about "self._paused_at |
---|
1340 | not defined" whenever a file download was stopped from the web browser end.</p> |
---|
1341 | <ul class="simple"> |
---|
1342 | <li>Release 1.1.0 (2008-06-11)</li> |
---|
1343 | </ul> |
---|
1344 | <p>** CLI: new "alias" model</p> |
---|
1345 | <p>The new CLI code uses an scp/rsync -like interface, in which directories in |
---|
1346 | the Tahoe storage grid are referenced by a colon-suffixed alias. The new |
---|
1347 | commands look like:</p> |
---|
1348 | <div class="system-message"> |
---|
1349 | <p class="system-message-title">System Message: ERROR/3 (<tt class="docutils">NEWS</tt>, line 1162)</p> |
---|
1350 | Unexpected indentation.</div> |
---|
1351 | <blockquote> |
---|
1352 | tahoe cp local.txt tahoe:virtual.txt |
---|
1353 | tahoe ls work:subdir</blockquote> |
---|
1354 | <p>More functionality is available through the CLI: creating unlinked files and |
---|
1355 | directories, recursive copy in or out of the storage grid, hardlinks, and |
---|
1356 | retrieving the raw read- or write- caps through the 'ls' command. Please read |
---|
1357 | docs/CLI.txt for complete details.</p> |
---|
1358 | <p>** wapi: new pages, new commands</p> |
---|
1359 | <p>Several new pages were added to the web API:</p> |
---|
1360 | <blockquote> |
---|
1361 | /helper_status : to describe what a Helper is doing |
---|
1362 | /statistics : reports node uptime, CPU usage, other stats |
---|
1363 | /file : for easy file-download URLs, see #221 |
---|
1364 | /cap == /uri : future compatibility</blockquote> |
---|
1365 | <p>The localdir=/localfile= and t=download operations were removed. These |
---|
1366 | required special configuration to enable anyways, but this feature was a |
---|
1367 | security problem, and was mostly obviated by the new "cp -r" command.</p> |
---|
1368 | <p>Several new options to the GET command were added:</p> |
---|
1369 | <blockquote> |
---|
1370 | <p>t=deep-size : add up the size of all immutable files reachable from the directory |
---|
1371 | t=deep-stats : return a JSON-encoded description of number of files, size</p> |
---|
1372 | <div class="system-message"> |
---|
1373 | <p class="system-message-title">System Message: ERROR/3 (<tt class="docutils">NEWS</tt>, line 1187)</p> |
---|
1374 | Unexpected indentation.</div> |
---|
1375 | <blockquote> |
---|
1376 | distribution, total size, etc</blockquote> |
---|
1377 | </blockquote> |
---|
1378 | <p>POST is now preferred over PUT for most operations which cause side-effects.</p> |
---|
1379 | <p>Most wapi calls now accept overwrite=, and default to overwrite=true .</p> |
---|
1380 | <p>"POST /uri/DIRCAP/parent/child?t=mkdir" is now the preferred API to create |
---|
1381 | multiple directories at once, rather than ...?t=mkdir-p .</p> |
---|
1382 | <p>PUT to a mutable file ("PUT /uri/MUTABLEFILECAP", "PUT /uri/DIRCAP/child") |
---|
1383 | will modify the file in-place.</p> |
---|
1384 | <p>** more munin graphs in misc/munin/</p> |
---|
1385 | <blockquote> |
---|
1386 | tahoe-introstats |
---|
1387 | tahoe-rootdir-space |
---|
1388 | tahoe_estimate_files |
---|
1389 | mutable files published/retrieved |
---|
1390 | tahoe_cpu_watcher |
---|
1391 | tahoe_spacetime</blockquote> |
---|
1392 | <p>** New Dependencies</p> |
---|
1393 | <blockquote> |
---|
1394 | zfec 1.1.0 |
---|
1395 | foolscap 0.2.8 |
---|
1396 | pycryptopp 0.5 |
---|
1397 | setuptools (now required at runtime)</blockquote> |
---|
1398 | <p>** New Mutable-File Code</p> |
---|
1399 | <p>The mutable-file handling code (mostly used for directories) has been |
---|
1400 | completely rewritten. The new scheme has a better API (with a modify() |
---|
1401 | method) and is less likely to lose data when several uncoordinated writers |
---|
1402 | change a file at the same time.</p> |
---|
1403 | <p>In addition, a single Tahoe process will coordinate its own writes. If you |
---|
1404 | make two concurrent directory-modifying wapi calls to a single tahoe node, |
---|
1405 | it will internally make one of them wait for the other to complete. This |
---|
1406 | prevents auto-collision (#391).</p> |
---|
1407 | <p>The new mutable-file code also detects errors during publish better. Earlier |
---|
1408 | releases might believe that a mutable file was published when in fact it |
---|
1409 | failed.</p> |
---|
1410 | <p>** other features</p> |
---|
1411 | <p>The node now monitors its own CPU usage, as a percentage, measured every 60 |
---|
1412 | seconds. 1/5/15 minute moving averages are available on the /statistics web |
---|
1413 | page and via the stats-gathering interface.</p> |
---|
1414 | <p>Clients now accelerate reconnection to all servers after being offline |
---|
1415 | (#374). When a client is offline for a long time, it scales back reconnection |
---|
1416 | attempts to approximately once per hour, so it may take a while to make the |
---|
1417 | first attempt, but once any attempt succeeds, the other server connections |
---|
1418 | will be retried immediately.</p> |
---|
1419 | <p>A new "offloaded KeyGenerator" facility can be configured, to move RSA key |
---|
1420 | generation out from, say, a wapi node, into a separate process. RSA keys |
---|
1421 | can take several seconds to create, and so a wapi node which is being used |
---|
1422 | for directory creation will be unavailable for anything else during this |
---|
1423 | time. The Key Generator process will pre-compute a small pool of keys, to |
---|
1424 | speed things up further. This also takes better advantage of multi-core CPUs, |
---|
1425 | or SMP hosts.</p> |
---|
1426 | <p>The node will only use a potentially-slow "du -s" command at startup (to |
---|
1427 | measure how much space has been used) if the "sizelimit" parameter has been |
---|
1428 | configured (to limit how much space is used). Large storage servers should |
---|
1429 | turn off sizelimit until a later release improves the space-management code, |
---|
1430 | since "du -s" on a terabyte filesystem can take hours.</p> |
---|
1431 | <p>The Introducer now allows new announcements to replace old ones, to avoid |
---|
1432 | buildups of obsolete announcements.</p> |
---|
1433 | <p>Immutable files are limited to about 12GiB (when using the default 3-of-10 |
---|
1434 | encoding), because larger files would be corrupted by the four-byte |
---|
1435 | share-size field on the storage servers (#439). A later release will remove |
---|
1436 | this limit. Earlier releases would allow >12GiB uploads, but the resulting |
---|
1437 | file would be unretrievable.</p> |
---|
1438 | <p>The docs/ directory has been rearranged, with old docs put in |
---|
1439 | docs/historical/ and not-yet-implemented ones in docs/proposed/ .</p> |
---|
1440 | <p>The Mac OS-X FUSE plugin has a significant bug fix: earlier versions would |
---|
1441 | corrupt writes that used seek() instead of writing the file in linear order. |
---|
1442 | The rsync tool is known to perform writes in this order. This has been fixed.</p> |
---|
1443 | </div> |
---|
1444 | </body> |
---|
1445 | </html> |
---|