| 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>User-Visible Changes in Tahoe-LAFS</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" id="user-visible-changes-in-tahoe-lafs"> |
|---|
| 314 | <h1 class="title">User-Visible Changes in Tahoe-LAFS</h1> |
|---|
| 315 | |
|---|
| 316 | <!-- -*- coding: utf-8 -*- --> |
|---|
| 317 | <div class="section" id="release-1-8-2-2011-01-30"> |
|---|
| 318 | <h1>Release 1.8.2 (2011-01-30)</h1> |
|---|
| 319 | <div class="section" id="compatibility-and-dependencies"> |
|---|
| 320 | <h2>Compatibility and Dependencies</h2> |
|---|
| 321 | <ul class="simple"> |
|---|
| 322 | <li>Tahoe is now compatible with Twisted-10.2 (released last month), as |
|---|
| 323 | well as with earlier versions. The previous Tahoe-1.8.1 release |
|---|
| 324 | failed to run against Twisted-10.2, raising an AttributeError on |
|---|
| 325 | StreamServerEndpointService (#1286)</li> |
|---|
| 326 | <li>Tahoe now depends upon the "mock" testing library, and the foolscap |
|---|
| 327 | dependency was raised to 0.6.1 . It no longer requires pywin32 |
|---|
| 328 | (which was used only on windows). Future developers should note that |
|---|
| 329 | reactor.spawnProcess and derivatives may no longer be used inside |
|---|
| 330 | Tahoe code.</li> |
|---|
| 331 | </ul> |
|---|
| 332 | </div> |
|---|
| 333 | <div class="section" id="other-changes"> |
|---|
| 334 | <h2>Other Changes</h2> |
|---|
| 335 | <ul class="simple"> |
|---|
| 336 | <li>the default reserved_space value for new storage nodes is 1 GB (#1208)</li> |
|---|
| 337 | <li>documentation is now in reStructuredText (.rst) format</li> |
|---|
| 338 | <li>"tahoe cp" should now handle non-ASCII filenames</li> |
|---|
| 339 | <li>the unmaintained Mac/Windows GUI applications have been removed (#1282)</li> |
|---|
| 340 | <li>tahoe processes should appear in top and ps as "tahoe", not |
|---|
| 341 | "python", on some unix platforms. (#174)</li> |
|---|
| 342 | <li>"tahoe debug trial" can be used to run the test suite (#1296)</li> |
|---|
| 343 | <li>the SFTP frontend now reports unknown sizes as "0" instead of "?", |
|---|
| 344 | to improve compatibility with clients like FileZilla (#1337)</li> |
|---|
| 345 | <li>"tahoe --version" should now report correct values in situations |
|---|
| 346 | where 1.8.1 might have been wrong (#1287)</li> |
|---|
| 347 | </ul> |
|---|
| 348 | </div> |
|---|
| 349 | </div> |
|---|
| 350 | <div class="section" id="release-1-8-1-2010-10-28"> |
|---|
| 351 | <h1>Release 1.8.1 (2010-10-28)</h1> |
|---|
| 352 | <div class="section" id="bugfixes-and-improvements"> |
|---|
| 353 | <h2>Bugfixes and Improvements</h2> |
|---|
| 354 | <ul class="simple"> |
|---|
| 355 | <li>Allow the repairer to improve the health of a file by uploading some |
|---|
| 356 | shares, even if it cannot achieve the configured happiness |
|---|
| 357 | threshold. This fixes a regression introduced between v1.7.1 and |
|---|
| 358 | v1.8.0. (#1212)</li> |
|---|
| 359 | <li>Fix a memory leak in the ResponseCache which is used during mutable |
|---|
| 360 | file/directory operations. (#1045)</li> |
|---|
| 361 | <li>Fix a regression and add a performance improvement in the |
|---|
| 362 | downloader. This issue caused repair to fail in some special |
|---|
| 363 | 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 the |
|---|
| 367 | 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 to |
|---|
| 371 | 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 has |
|---|
| 378 | started. (#71)</li> |
|---|
| 379 | <li>The arguments seen by 'ps' or other tools for node processes are now |
|---|
| 380 | more useful (in particular, they include the path of the 'tahoe' |
|---|
| 381 | script, rather than an obscure tool named 'twistd'). (#174)</li> |
|---|
| 382 | </ul> |
|---|
| 383 | </div> |
|---|
| 384 | <div class="section" id="removed-features"> |
|---|
| 385 | <h2>Removed Features</h2> |
|---|
| 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 |
|---|
| 389 | platforms. (#1262)</li> |
|---|
| 390 | </ul> |
|---|
| 391 | </div> |
|---|
| 392 | <div class="section" id="packaging"> |
|---|
| 393 | <h2>Packaging</h2> |
|---|
| 394 | <ul class="simple"> |
|---|
| 395 | <li>We now host binary packages so that users on certain operating |
|---|
| 396 | systems 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 | </div> |
|---|
| 407 | <div class="section" id="documentation"> |
|---|
| 408 | <h2>Documentation</h2> |
|---|
| 409 | <ul class="simple"> |
|---|
| 410 | <li>All current documentation in .txt format has been converted to .rst |
|---|
| 411 | 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 | </div> |
|---|
| 417 | </div> |
|---|
| 418 | <div class="section" id="release-1-8-0-2010-09-23"> |
|---|
| 419 | <h1>Release 1.8.0 (2010-09-23)</h1> |
|---|
| 420 | <div class="section" id="new-features"> |
|---|
| 421 | <h2>New Features</h2> |
|---|
| 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 | </div> |
|---|
| 439 | <div class="section" id="id1"> |
|---|
| 440 | <h2>Bugfixes and Improvements</h2> |
|---|
| 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 system |
|---|
| 449 | 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 | </div> |
|---|
| 455 | <div class="section" id="dependency-updates"> |
|---|
| 456 | <h2>Dependency Updates</h2> |
|---|
| 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 | </div> |
|---|
| 462 | </div> |
|---|
| 463 | <div class="section" id="release-1-7-1-2010-07-18"> |
|---|
| 464 | <h1>Release 1.7.1 (2010-07-18)</h1> |
|---|
| 465 | <div class="section" id="id2"> |
|---|
| 466 | <h2>Bugfixes and Improvements</h2> |
|---|
| 467 | <ul class="simple"> |
|---|
| 468 | <li>Fix bug in which uploader could fail with AssertionFailure or report |
|---|
| 469 | that it had achieved servers-of-happiness when it hadn't. (#1118)</li> |
|---|
| 470 | <li>Fix bug in which servers could get into a state where they would |
|---|
| 471 | refuse to accept shares of a certain file (#1117)</li> |
|---|
| 472 | <li>Add init scripts for managing the gateway server on Debian/Ubuntu |
|---|
| 473 | (#961)</li> |
|---|
| 474 | <li>Fix bug where server version number was always 0 on the welcome page |
|---|
| 475 | (#1067)</li> |
|---|
| 476 | <li>Add new command-line command "tahoe unlink" as a synonym for "tahoe |
|---|
| 477 | rm" (#776)</li> |
|---|
| 478 | <li>The FTP frontend now encrypts its temporary files, protecting their |
|---|
| 479 | contents from an attacker who is able to read the disk. (#1083)</li> |
|---|
| 480 | <li>Fix IP address detection on FreeBSD 7, 8, and 9 (#1098)</li> |
|---|
| 481 | <li>Fix minor layout issue in the Web User Interface with Internet |
|---|
| 482 | Explorer (#1097)</li> |
|---|
| 483 | <li>Fix rarely-encountered incompatibility between Twisted logging |
|---|
| 484 | utility and the new unicode support added in v1.7.0 (#1099)</li> |
|---|
| 485 | <li>Forward-compatibility improvements for non-ASCII caps (#1051)</li> |
|---|
| 486 | </ul> |
|---|
| 487 | </div> |
|---|
| 488 | <div class="section" id="code-improvements"> |
|---|
| 489 | <h2>Code improvements</h2> |
|---|
| 490 | <ul class="simple"> |
|---|
| 491 | <li>Simplify and tidy-up directories, unicode support, test code (#923, |
|---|
| 492 | #967, #1072)</li> |
|---|
| 493 | </ul> |
|---|
| 494 | </div> |
|---|
| 495 | </div> |
|---|
| 496 | <div class="section" id="release-1-7-0-2010-06-18"> |
|---|
| 497 | <h1>Release 1.7.0 (2010-06-18)</h1> |
|---|
| 498 | <div class="section" id="id3"> |
|---|
| 499 | <h2>New Features</h2> |
|---|
| 500 | <ul class="simple"> |
|---|
| 501 | <li>SFTP support |
|---|
| 502 | Your Tahoe-LAFS gateway now acts like a full-fledged SFTP server. It |
|---|
| 503 | has been tested with sshfs to provide a virtual filesystem in Linux. |
|---|
| 504 | Many users have asked for this feature. We hope that it serves them |
|---|
| 505 | well! See the docs/frontends/FTP-and-SFTP.txt document to get |
|---|
| 506 | started.</li> |
|---|
| 507 | <li>support for non-ASCII character encodings |
|---|
| 508 | Tahoe-LAFS now correctly handles filenames containing non-ASCII |
|---|
| 509 | characters on all supported platforms:</li> |
|---|
| 510 | </ul> |
|---|
| 511 | <blockquote> |
|---|
| 512 | <ul class="simple"> |
|---|
| 513 | <li>when reading files in from the local filesystem (such as when you |
|---|
| 514 | run "tahoe backup" to back up your local files to a Tahoe-LAFS |
|---|
| 515 | grid);</li> |
|---|
| 516 | <li>when writing files out to the local filesystem (such as when you |
|---|
| 517 | run "tahoe cp -r" to recursively copy files out of a Tahoe-LAFS |
|---|
| 518 | grid);</li> |
|---|
| 519 | <li>when displaying filenames to the terminal (such as when you run |
|---|
| 520 | "tahoe ls"), subject to limitations of the terminal and locale;</li> |
|---|
| 521 | <li>when parsing command-line arguments, except on Windows.</li> |
|---|
| 522 | </ul> |
|---|
| 523 | </blockquote> |
|---|
| 524 | <ul class="simple"> |
|---|
| 525 | <li>Servers of Happiness |
|---|
| 526 | Tahoe-LAFS now measures during immutable file upload to see how well |
|---|
| 527 | distributed it is across multiple servers. It aborts the upload if |
|---|
| 528 | the pieces of the file are not sufficiently well-distributed. |
|---|
| 529 | This behavior is controlled by a configuration parameter called |
|---|
| 530 | "servers of happiness". With the default settings for its erasure |
|---|
| 531 | coding, Tahoe-LAFS generates 10 shares for each file, such that any |
|---|
| 532 | 3 of those shares are sufficient to recover the file. The default |
|---|
| 533 | value of "servers of happiness" is 7, which means that Tahoe-LAFS |
|---|
| 534 | will guarantee that there are at least 7 servers holding some of the |
|---|
| 535 | shares, such that any 3 of those servers can completely recover your |
|---|
| 536 | file. |
|---|
| 537 | The new upload code also distributes the shares better than the |
|---|
| 538 | previous version in some cases and takes better advantage of |
|---|
| 539 | pre-existing shares (when a file has already been previously |
|---|
| 540 | uploaded). See the architecture.txt document [3] for details.</li> |
|---|
| 541 | </ul> |
|---|
| 542 | </div> |
|---|
| 543 | <div class="section" id="id4"> |
|---|
| 544 | <h2>Bugfixes and Improvements</h2> |
|---|
| 545 | <ul> |
|---|
| 546 | <li><p class="first">Premature abort of upload if some shares were already present and |
|---|
| 547 | some servers fail. (#608)</p> |
|---|
| 548 | </li> |
|---|
| 549 | <li><p class="first">python ./setup.py install -- can't create or remove files in install |
|---|
| 550 | directory. (#803)</p> |
|---|
| 551 | </li> |
|---|
| 552 | <li><p class="first">Network failure => internal TypeError. (#902)</p> |
|---|
| 553 | </li> |
|---|
| 554 | <li><p class="first">Install of Tahoe on CentOS 5.4. (#933)</p> |
|---|
| 555 | </li> |
|---|
| 556 | <li><p class="first">CLI option --node-url now supports https url. (#1028)</p> |
|---|
| 557 | </li> |
|---|
| 558 | <li><p class="first">HTML/CSS template files were not correctly installed under |
|---|
| 559 | Windows. (#1033)</p> |
|---|
| 560 | </li> |
|---|
| 561 | <li><p class="first">MetadataSetter does not enforce restriction on setting "tahoe" |
|---|
| 562 | subkeys. (#1034)</p> |
|---|
| 563 | </li> |
|---|
| 564 | <li><p class="first">ImportError: No module named |
|---|
| 565 | setuptools_darcs.setuptools_darcs. (#1054)</p> |
|---|
| 566 | </li> |
|---|
| 567 | <li><p class="first">Renamed Title in xhtml files. (#1062)</p> |
|---|
| 568 | </li> |
|---|
| 569 | <li><p class="first">Increase Python version dependency to 2.4.4, to avoid a critical |
|---|
| 570 | CPython security bug. (#1066)</p> |
|---|
| 571 | </li> |
|---|
| 572 | <li><p class="first">Typo correction for the munin plugin tahoe_storagespace. (#968)</p> |
|---|
| 573 | </li> |
|---|
| 574 | <li><p class="first">Fix warnings found by pylint. (#973)</p> |
|---|
| 575 | </li> |
|---|
| 576 | <li><p class="first">Changing format of some documentation files. (#1027)</p> |
|---|
| 577 | </li> |
|---|
| 578 | <li><p class="first">the misc/ directory was tied up. (#1068)</p> |
|---|
| 579 | </li> |
|---|
| 580 | <li><dl class="first docutils"> |
|---|
| 581 | <dt>The 'ctime' and 'mtime' metadata fields are no longer written except</dt> |
|---|
| 582 | <dd><p class="first last">by "tahoe backup". (#924)</p> |
|---|
| 583 | </dd> |
|---|
| 584 | </dl> |
|---|
| 585 | </li> |
|---|
| 586 | <li><p class="first">Unicode filenames in Tahoe-LAFS directories are normalized so that |
|---|
| 587 | names that differ only in how accents are encoded are treated as the |
|---|
| 588 | same. (#1076)</p> |
|---|
| 589 | </li> |
|---|
| 590 | <li><p class="first">Various small improvements to documentation. (#937, #911, #1024, |
|---|
| 591 | #1082)</p> |
|---|
| 592 | </li> |
|---|
| 593 | </ul> |
|---|
| 594 | </div> |
|---|
| 595 | <div class="section" id="removals"> |
|---|
| 596 | <h2>Removals</h2> |
|---|
| 597 | <ul class="simple"> |
|---|
| 598 | <li>The 'tahoe debug consolidate' subcommand (for converting old |
|---|
| 599 | allmydata Windows client backups to a newer format) has been |
|---|
| 600 | removed.</li> |
|---|
| 601 | </ul> |
|---|
| 602 | </div> |
|---|
| 603 | <div class="section" id="id5"> |
|---|
| 604 | <h2>Dependency Updates</h2> |
|---|
| 605 | <ul class="simple"> |
|---|
| 606 | <li>the Python version dependency is raised to 2.4.4 in some cases |
|---|
| 607 | (2.4.3 for Redhat-based Linux distributions, 2.4.2 for UCS-2 builds) |
|---|
| 608 | (#1066)</li> |
|---|
| 609 | <li>pycrypto >= 2.0.1</li> |
|---|
| 610 | <li>pyasn1 >= 0.0.8a</li> |
|---|
| 611 | <li>mock (only required by unit tests)</li> |
|---|
| 612 | </ul> |
|---|
| 613 | </div> |
|---|
| 614 | </div> |
|---|
| 615 | <div class="section" id="release-1-6-1-2010-02-27"> |
|---|
| 616 | <h1>Release 1.6.1 (2010-02-27)</h1> |
|---|
| 617 | <div class="section" id="bugfixes"> |
|---|
| 618 | <h2>Bugfixes</h2> |
|---|
| 619 | <ul> |
|---|
| 620 | <li><p class="first">Correct handling of Small Immutable Directories</p> |
|---|
| 621 | <p>Immutable directories can now be deep-checked and listed in the web |
|---|
| 622 | UI in all cases. (In v1.6.0, some operations, such as deep-check, on |
|---|
| 623 | a directory graph that included very small immutable directories, |
|---|
| 624 | would result in an exception causing the whole operation to abort.) |
|---|
| 625 | (#948)</p> |
|---|
| 626 | </li> |
|---|
| 627 | </ul> |
|---|
| 628 | </div> |
|---|
| 629 | <div class="section" id="usability-improvements"> |
|---|
| 630 | <h2>Usability Improvements</h2> |
|---|
| 631 | <ul class="simple"> |
|---|
| 632 | <li>Improved user interface messages and error reporting. (#681, #837, |
|---|
| 633 | #939)</li> |
|---|
| 634 | <li>The timeouts for operation handles have been greatly increased, so |
|---|
| 635 | that you can view the results of an operation up to 4 days after it |
|---|
| 636 | has completed. After viewing them for the first time, the results |
|---|
| 637 | are retained for a further day. (#577)</li> |
|---|
| 638 | </ul> |
|---|
| 639 | </div> |
|---|
| 640 | </div> |
|---|
| 641 | <div class="section" id="release-1-6-0-2010-02-01"> |
|---|
| 642 | <h1>Release 1.6.0 (2010-02-01)</h1> |
|---|
| 643 | <div class="section" id="id6"> |
|---|
| 644 | <h2>New Features</h2> |
|---|
| 645 | <ul> |
|---|
| 646 | <li><p class="first">Immutable Directories</p> |
|---|
| 647 | <p>Tahoe-LAFS can now create and handle immutable directories. (#607, |
|---|
| 648 | #833, #931) These are read just like normal directories, but are |
|---|
| 649 | "deep-immutable", meaning that all their children (and everything |
|---|
| 650 | reachable from those children) must be immutable objects |
|---|
| 651 | (i.e. immutable or literal files, and other immutable directories).</p> |
|---|
| 652 | <p>These directories must be created in a single webapi call that |
|---|
| 653 | provides all of the children at once. (Since they cannot be changed |
|---|
| 654 | after creation, the usual create/add/add sequence cannot be used.) |
|---|
| 655 | They have URIs that start with "URI:DIR2-CHK:" or "URI:DIR2-LIT:", |
|---|
| 656 | and are described on the human-facing web interface (aka the "WUI") |
|---|
| 657 | with a "DIR-IMM" abbreviation (as opposed to "DIR" for the usual |
|---|
| 658 | read-write directories and "DIR-RO" for read-only directories).</p> |
|---|
| 659 | <p>Tahoe-LAFS releases before 1.6.0 cannot read the contents of an |
|---|
| 660 | immutable directory. 1.5.0 will tolerate their presence in a |
|---|
| 661 | directory listing (and display it as "unknown"). 1.4.1 and earlier |
|---|
| 662 | cannot tolerate them: a DIR-IMM child in any directory will prevent |
|---|
| 663 | the listing of that directory.</p> |
|---|
| 664 | <p>Immutable directories are repairable, just like normal immutable |
|---|
| 665 | files.</p> |
|---|
| 666 | <p>The webapi "POST t=mkdir-immutable" call is used to create immutable |
|---|
| 667 | directories. See docs/frontends/webapi.txt for details.</p> |
|---|
| 668 | </li> |
|---|
| 669 | <li><p class="first">"tahoe backup" now creates immutable directories, backupdb has |
|---|
| 670 | dircache</p> |
|---|
| 671 | <p>The "tahoe backup" command has been enhanced to create immutable |
|---|
| 672 | directories (in previous releases, it created read-only mutable |
|---|
| 673 | directories) (#828). This is significantly faster, since it does not |
|---|
| 674 | need to create an RSA keypair for each new directory. Also "DIR-IMM" |
|---|
| 675 | immutable directories are repairable, unlike "DIR-RO" read-only |
|---|
| 676 | mutable directories at present. (A future Tahoe-LAFS release should |
|---|
| 677 | also be able to repair DIR-RO.)</p> |
|---|
| 678 | <p>In addition, the backupdb (used by "tahoe backup" to remember what |
|---|
| 679 | it has already copied) has been enhanced to store information about |
|---|
| 680 | existing immutable directories. This allows it to re-use directories |
|---|
| 681 | that have moved but still contain identical contents, or that have |
|---|
| 682 | been deleted and later replaced. (The 1.5.0 "tahoe backup" command |
|---|
| 683 | could only re-use directories that were in the same place as they |
|---|
| 684 | were in the immediately previous backup.) With this change, the |
|---|
| 685 | backup process no longer needs to read the previous snapshot out of |
|---|
| 686 | the Tahoe-LAFS grid, reducing the network load considerably. (#606)</p> |
|---|
| 687 | <p>A "null backup" (in which nothing has changed since the previous |
|---|
| 688 | backup) will require only two Tahoe-side operations: one to add an |
|---|
| 689 | Archives/$TIMESTAMP entry, and a second to update the Latest/ |
|---|
| 690 | link. On the local disk side, it will readdir() all your local |
|---|
| 691 | directories and stat() all your local files.</p> |
|---|
| 692 | <p>If you've been using "tahoe backup" for a while, you will notice |
|---|
| 693 | that your first use of it after upgrading to 1.6.0 may take a long |
|---|
| 694 | time: it must create proper immutable versions of all the old |
|---|
| 695 | read-only mutable directories. This process won't take as long as |
|---|
| 696 | the initial backup (where all the file contents had to be uploaded |
|---|
| 697 | too): it will require time proportional to the number and size of |
|---|
| 698 | your directories. After this initial pass, all subsequent passes |
|---|
| 699 | should take a tiny fraction of the time.</p> |
|---|
| 700 | <p>As noted above, Tahoe-LAFS versions earlier than 1.5.0 cannot list a |
|---|
| 701 | directory containing an immutable subdirectory. Tahoe-LAFS versions |
|---|
| 702 | earlier than 1.6.0 cannot read the contents of an immutable |
|---|
| 703 | directory.</p> |
|---|
| 704 | <p>The "tahoe backup" command has been improved to skip over unreadable |
|---|
| 705 | objects (like device files, named pipes, and files with permissions |
|---|
| 706 | that prevent the command from reading their contents), instead of |
|---|
| 707 | throwing an exception and terminating the backup process. It also |
|---|
| 708 | skips over symlinks, because these cannot be represented faithfully |
|---|
| 709 | in the Tahoe-side filesystem. A warning message will be emitted each |
|---|
| 710 | time something is skipped. (#729, #850, #641)</p> |
|---|
| 711 | </li> |
|---|
| 712 | <li><p class="first">"create-node" command added, "create-client" now implies |
|---|
| 713 | --no-storage</p> |
|---|
| 714 | <p>The basic idea behind Tahoe-LAFS's client+server and client-only |
|---|
| 715 | processes is that you are creating a general-purpose Tahoe-LAFS |
|---|
| 716 | "node" process, which has several components that can be |
|---|
| 717 | activated. Storage service is one of these optional components, as |
|---|
| 718 | is the Helper, FTP server, and SFTP server. Web gateway |
|---|
| 719 | functionality is nominally on this list, but it is always active; a |
|---|
| 720 | future release will make it optional. There are three special |
|---|
| 721 | purpose servers that can't currently be run as a component in a |
|---|
| 722 | node: introducer, key-generator, and stats-gatherer.</p> |
|---|
| 723 | <p>So now "tahoe create-node" will create a Tahoe-LAFS node process, |
|---|
| 724 | and after creation you can edit its tahoe.cfg to enable or disable |
|---|
| 725 | the desired services. It is a more general-purpose replacement for |
|---|
| 726 | "tahoe create-client". The default configuration has storage |
|---|
| 727 | service enabled. For convenience, the "--no-storage" argument makes |
|---|
| 728 | a tahoe.cfg file that disables storage service. (#760)</p> |
|---|
| 729 | <p>"tahoe create-client" has been changed to create a Tahoe-LAFS node |
|---|
| 730 | without a storage service. It is equivalent to "tahoe create-node |
|---|
| 731 | --no-storage". This helps to reduce the confusion surrounding the |
|---|
| 732 | use of a command with "client" in its name to create a storage |
|---|
| 733 | <em>server</em>. Use "tahoe create-client" to create a purely client-side |
|---|
| 734 | node. If you want to offer storage to the grid, use "tahoe |
|---|
| 735 | create-node" instead.</p> |
|---|
| 736 | <p>In the future, other services will be added to the node, and they |
|---|
| 737 | will be controlled through options in tahoe.cfg . The most important |
|---|
| 738 | of these services may get additional --enable-XYZ or --disable-XYZ |
|---|
| 739 | arguments to "tahoe create-node".</p> |
|---|
| 740 | </li> |
|---|
| 741 | <li><p class="first">Performance Improvements</p> |
|---|
| 742 | <p>Download of immutable files begins as soon as the downloader has |
|---|
| 743 | located the K necessary shares (#928, #287). In both the previous |
|---|
| 744 | and current releases, a downloader will first issue queries to all |
|---|
| 745 | storage servers on the grid to locate shares before it begins |
|---|
| 746 | downloading the shares. In previous releases of Tahoe-LAFS, download |
|---|
| 747 | would not begin until all storage servers on the grid had replied to |
|---|
| 748 | the query, at which point K shares would be chosen for download from |
|---|
| 749 | among the shares that were located. In this release, download begins |
|---|
| 750 | as soon as any K shares are located. This means that downloads start |
|---|
| 751 | sooner, which is particularly important if there is a server on the |
|---|
| 752 | grid that is extremely slow or even hung in such a way that it will |
|---|
| 753 | never respond. In previous releases such a server would have a |
|---|
| 754 | negative impact on all downloads from that grid. In this release, |
|---|
| 755 | such a server will have no impact on downloads, as long as K shares |
|---|
| 756 | can be found on other, quicker, servers. This also means that |
|---|
| 757 | downloads now use the "best-alacrity" servers that they talk to, as |
|---|
| 758 | measured by how quickly the servers reply to the initial query. This |
|---|
| 759 | might cause downloads to go faster, especially on grids with |
|---|
| 760 | heterogeneous servers or geographical dispersion.</p> |
|---|
| 761 | </li> |
|---|
| 762 | </ul> |
|---|
| 763 | </div> |
|---|
| 764 | <div class="section" id="minor-changes"> |
|---|
| 765 | <h2>Minor Changes</h2> |
|---|
| 766 | <ul class="simple"> |
|---|
| 767 | <li>The webapi acquired a new "t=mkdir-with-children" command, to create |
|---|
| 768 | and populate a directory in a single call. This is significantly |
|---|
| 769 | faster than using separate "t=mkdir" and "t=set-children" operations |
|---|
| 770 | (it uses one gateway-to-grid roundtrip, instead of three or |
|---|
| 771 | four). (#533)</li> |
|---|
| 772 | <li>The t=set-children (note the hyphen) operation is now documented in |
|---|
| 773 | docs/frontends/webapi.txt, and is the new preferred spelling of the |
|---|
| 774 | old t=set_children (with an underscore). The underscore version |
|---|
| 775 | remains for backwards compatibility. (#381, #927)</li> |
|---|
| 776 | <li>The tracebacks produced by errors in CLI tools should now be in |
|---|
| 777 | plain text, instead of HTML (which is unreadable outside of a |
|---|
| 778 | browser). (#646)</li> |
|---|
| 779 | <li>The [storage]reserved_space configuration knob (which causes the |
|---|
| 780 | storage server to refuse shares when available disk space drops |
|---|
| 781 | below a threshold) should work on Windows now, not just UNIX. (#637)</li> |
|---|
| 782 | <li>"tahoe cp" should now exit with status "1" if it cannot figure out a |
|---|
| 783 | suitable target filename, such as when you copy from a bare |
|---|
| 784 | filecap. (#761)</li> |
|---|
| 785 | <li>"tahoe get" no longer creates a zero-length file upon error. (#121)</li> |
|---|
| 786 | <li>"tahoe ls" can now list single files. (#457)</li> |
|---|
| 787 | <li>"tahoe deep-check --repair" should tolerate repair failures now, |
|---|
| 788 | instead of halting traversal. (#874, #786)</li> |
|---|
| 789 | <li>"tahoe create-alias" no longer corrupts the aliases file if it had |
|---|
| 790 | previously been edited to have no trailing newline. (#741)</li> |
|---|
| 791 | <li>Many small packaging improvements were made to facilitate the |
|---|
| 792 | "tahoe-lafs" package being included in Ubuntu. Several mac/win32 |
|---|
| 793 | binary libraries were removed, some figleaf code-coverage files were |
|---|
| 794 | removed, a bundled copy of darcsver-1.2.1 was removed, and |
|---|
| 795 | additional licensing text was added.</li> |
|---|
| 796 | <li>Several DeprecationWarnings for python2.6 were silenced. (#859)</li> |
|---|
| 797 | <li>The checker --add-lease option would sometimes fail for shares |
|---|
| 798 | stored on old (Tahoe v1.2.0) servers. (#875)</li> |
|---|
| 799 | <li>The documentation for installing on Windows (docs/quickstart.rst) |
|---|
| 800 | has been improved. (#773)</li> |
|---|
| 801 | </ul> |
|---|
| 802 | <p>For other changes not mentioned here, see |
|---|
| 803 | <<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>>. |
|---|
| 804 | To include the tickets mentioned above, go to |
|---|
| 805 | <<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> |
|---|
| 806 | </div> |
|---|
| 807 | </div> |
|---|
| 808 | <div class="section" id="release-1-5-0-2009-08-01"> |
|---|
| 809 | <h1>Release 1.5.0 (2009-08-01)</h1> |
|---|
| 810 | <div class="section" id="improvements"> |
|---|
| 811 | <h2>Improvements</h2> |
|---|
| 812 | <ul class="simple"> |
|---|
| 813 | <li>Uploads of immutable files now use pipelined writes, improving |
|---|
| 814 | upload speed slightly (10%) over high-latency connections. (#392)</li> |
|---|
| 815 | <li>Processing large directories has been sped up, by removing a O(N^2) |
|---|
| 816 | algorithm from the dirnode decoding path and retaining unmodified |
|---|
| 817 | encrypted entries. (#750, #752)</li> |
|---|
| 818 | <li>The human-facing web interface (aka the "WUI") received a |
|---|
| 819 | significant CSS makeover by Kevin Reid, making it much prettier and |
|---|
| 820 | easier to read. The WUI "check" and "deep-check" forms now include a |
|---|
| 821 | "Renew Lease" checkbox, mirroring the CLI --add-lease option, so |
|---|
| 822 | leases can be added or renewed from the web interface.</li> |
|---|
| 823 | <li>The CLI "tahoe mv" command now refuses to overwrite |
|---|
| 824 | directories. (#705)</li> |
|---|
| 825 | <li>The CLI "tahoe webopen" command, when run without arguments, will |
|---|
| 826 | now bring up the "Welcome Page" (node status and mkdir/upload |
|---|
| 827 | forms).</li> |
|---|
| 828 | <li>The 3.5MB limit on mutable files was removed, so it should be |
|---|
| 829 | possible to upload arbitrarily-sized mutable files. Note, however, |
|---|
| 830 | that the data format and algorithm remains the same, so using |
|---|
| 831 | mutable files still requires bandwidth, computation, and RAM in |
|---|
| 832 | proportion to the size of the mutable file. (#694)</li> |
|---|
| 833 | <li>This version of Tahoe-LAFS will tolerate directory entries that |
|---|
| 834 | contain filecap formats which it does not recognize: files and |
|---|
| 835 | directories from the future. This should improve the user |
|---|
| 836 | experience (for 1.5.0 users) when we add new cap formats in the |
|---|
| 837 | future. Previous versions would fail badly, preventing the user from |
|---|
| 838 | seeing or editing anything else in those directories. These |
|---|
| 839 | unrecognized objects can be renamed and deleted, but obviously not |
|---|
| 840 | read or written. Also they cannot generally be copied. (#683)</li> |
|---|
| 841 | </ul> |
|---|
| 842 | </div> |
|---|
| 843 | <div class="section" id="id7"> |
|---|
| 844 | <h2>Bugfixes</h2> |
|---|
| 845 | <ul class="simple"> |
|---|
| 846 | <li>deep-check-and-repair now tolerates read-only directories, such as |
|---|
| 847 | the ones produced by the "tahoe backup" CLI command. Read-only |
|---|
| 848 | directories and mutable files are checked, but not |
|---|
| 849 | repaired. Previous versions threw an exception when attempting the |
|---|
| 850 | repair and failed to process the remaining contents. We cannot yet |
|---|
| 851 | repair these read-only objects, but at least this version allows the |
|---|
| 852 | rest of the check+repair to proceed. (#625)</li> |
|---|
| 853 | <li>A bug in 1.4.1 which caused a server to be listed multiple times |
|---|
| 854 | (and frequently broke all connections to that server) was |
|---|
| 855 | fixed. (#653)</li> |
|---|
| 856 | <li>The plaintext-hashing code was removed from the Helper interface, |
|---|
| 857 | removing the Helper's ability to mount a |
|---|
| 858 | partial-information-guessing attack. (#722)</li> |
|---|
| 859 | </ul> |
|---|
| 860 | </div> |
|---|
| 861 | <div class="section" id="platform-packaging-changes"> |
|---|
| 862 | <h2>Platform/packaging changes</h2> |
|---|
| 863 | <ul class="simple"> |
|---|
| 864 | <li>Tahoe-LAFS now runs on NetBSD, OpenBSD, ArchLinux, and NixOS, and on |
|---|
| 865 | an embedded system based on an ARM CPU running at 266 MHz.</li> |
|---|
| 866 | <li>Unit test timeouts have been raised to allow the tests to complete |
|---|
| 867 | on extremely slow platforms like embedded ARM-based NAS boxes, which |
|---|
| 868 | may take several hours to run the test suite. An ARM-specific |
|---|
| 869 | data-corrupting bug in an older version of Crypto++ (5.5.2) was |
|---|
| 870 | identified: ARM-users are encouraged to use recent |
|---|
| 871 | Crypto++/pycryptopp which avoids this problem.</li> |
|---|
| 872 | <li>Tahoe-LAFS now requires a SQLite library, either the sqlite3 that |
|---|
| 873 | comes built-in with python2.5/2.6, or the add-on pysqlite2 if you're |
|---|
| 874 | using python2.4. In the previous release, this was only needed for |
|---|
| 875 | the "tahoe backup" command: now it is mandatory.</li> |
|---|
| 876 | <li>Several minor documentation updates were made.</li> |
|---|
| 877 | <li>To help get Tahoe-LAFS into Linux distributions like Fedora and |
|---|
| 878 | Debian, packaging improvements are being made in both Tahoe-LAFS and |
|---|
| 879 | related libraries like pycryptopp and zfec.</li> |
|---|
| 880 | <li>The Crypto++ library included in the pycryptopp package has been |
|---|
| 881 | upgraded to version 5.6.0 of Crypto++, which includes a more |
|---|
| 882 | efficient implementation of SHA-256 in assembly for x86 or amd64 |
|---|
| 883 | architectures.</li> |
|---|
| 884 | </ul> |
|---|
| 885 | </div> |
|---|
| 886 | <div class="section" id="id8"> |
|---|
| 887 | <h2>dependency updates</h2> |
|---|
| 888 | <ul class="simple"> |
|---|
| 889 | <li>foolscap-0.4.1</li> |
|---|
| 890 | <li>no python-2.4.0 or 2.4.1 (2.4.2 is good) (they contained a bug in base64.b32decode)</li> |
|---|
| 891 | <li>avoid python-2.6 on windows with mingw: compiler issues</li> |
|---|
| 892 | <li>python2.4 requires pysqlite2 (2.5,2.6 does not)</li> |
|---|
| 893 | <li>no python-3.x</li> |
|---|
| 894 | <li>pycryptopp-0.5.15</li> |
|---|
| 895 | </ul> |
|---|
| 896 | </div> |
|---|
| 897 | </div> |
|---|
| 898 | <div class="section" id="release-1-4-1-2009-04-13"> |
|---|
| 899 | <h1>Release 1.4.1 (2009-04-13)</h1> |
|---|
| 900 | <div class="section" id="garbage-collection"> |
|---|
| 901 | <h2>Garbage Collection</h2> |
|---|
| 902 | <ul> |
|---|
| 903 | <li><p class="first">The big feature for this release is the implementation of garbage |
|---|
| 904 | collection, allowing Tahoe storage servers to delete shares for old |
|---|
| 905 | deleted files. When enabled, this uses a "mark and sweep" process: |
|---|
| 906 | clients are responsible for updating the leases on their shares |
|---|
| 907 | (generally by running "tahoe deep-check --add-lease"), and servers |
|---|
| 908 | are allowed to delete any share which does not have an up-to-date |
|---|
| 909 | lease. The process is described in detail in |
|---|
| 910 | docs/garbage-collection.txt .</p> |
|---|
| 911 | <p>The server must be configured to enable garbage-collection, by |
|---|
| 912 | adding directives to the [storage] section that define an age limit |
|---|
| 913 | for shares. The default configuration will not delete any shares.</p> |
|---|
| 914 | <p>Both servers and clients should be upgraded to this release to make |
|---|
| 915 | the garbage-collection as pleasant as possible. 1.2.0 servers have |
|---|
| 916 | code to perform the update-lease operation but it suffers from a |
|---|
| 917 | fatal bug, while 1.3.0 servers have update-lease but will return an |
|---|
| 918 | exception for unknown storage indices, causing clients to emit an |
|---|
| 919 | Incident for each exception, slowing the add-lease process down to a |
|---|
| 920 | crawl. 1.1.0 servers did not have the add-lease operation at all.</p> |
|---|
| 921 | </li> |
|---|
| 922 | </ul> |
|---|
| 923 | </div> |
|---|
| 924 | <div class="section" id="security-usability-problems-fixed"> |
|---|
| 925 | <h2>Security/Usability Problems Fixed</h2> |
|---|
| 926 | <ul class="simple"> |
|---|
| 927 | <li>A super-linear algorithm in the Merkle Tree code was fixed, which |
|---|
| 928 | previously caused e.g. download of a 10GB file to take several hours |
|---|
| 929 | before the first byte of plaintext could be produced. The new |
|---|
| 930 | "alacrity" is about 2 minutes. A future release should reduce this |
|---|
| 931 | to a few seconds by fixing ticket #442.</li> |
|---|
| 932 | <li>The previous version permitted a small timing attack (due to our use |
|---|
| 933 | of strcmp) against the write-enabler and lease-renewal/cancel |
|---|
| 934 | secrets. An attacker who could measure response-time variations of |
|---|
| 935 | approximatly 3ns against a very noisy background time of about 15ms |
|---|
| 936 | might be able to guess these secrets. We do not believe this attack |
|---|
| 937 | was actually feasible. This release closes the attack by first |
|---|
| 938 | hashing the two strings to be compared with a random secret.</li> |
|---|
| 939 | </ul> |
|---|
| 940 | </div> |
|---|
| 941 | <div class="section" id="webapi-changes"> |
|---|
| 942 | <h2>webapi changes</h2> |
|---|
| 943 | <ul class="simple"> |
|---|
| 944 | <li>In most cases, HTML tracebacks will only be sent if an "Accept: |
|---|
| 945 | text/html" header was provided with the HTTP request. This will |
|---|
| 946 | generally cause browsers to get an HTMLized traceback but send |
|---|
| 947 | regular text/plain tracebacks to non-browsers (like the CLI |
|---|
| 948 | clients). More errors have been mapped to useful HTTP error codes.</li> |
|---|
| 949 | <li>The streaming webapi operations (deep-check and manifest) now have a |
|---|
| 950 | way to indicate errors (an output line that starts with "ERROR" |
|---|
| 951 | instead of being legal JSON). See docs/frontends/webapi.txt for |
|---|
| 952 | details.</li> |
|---|
| 953 | <li>The storage server now has its own status page (at /storage), linked |
|---|
| 954 | from the Welcome page. This page shows progress and results of the |
|---|
| 955 | two new share-crawlers: one which merely counts shares (to give an |
|---|
| 956 | estimate of how many files/directories are being stored in the |
|---|
| 957 | grid), the other examines leases and reports how much space would be |
|---|
| 958 | freed if GC were enabled. The page also shows how much disk space is |
|---|
| 959 | present, used, reserved, and available for the Tahoe server, and |
|---|
| 960 | whether the server is currently running in "read-write" mode or |
|---|
| 961 | "read-only" mode.</li> |
|---|
| 962 | <li>When a directory node cannot be read (perhaps because of insufficent |
|---|
| 963 | shares), a minimal webapi page is created so that the "more-info" |
|---|
| 964 | links (including a Check/Repair operation) will still be accessible.</li> |
|---|
| 965 | <li>A new "reliability" page was added, with the beginnings of work on a |
|---|
| 966 | statistical loss model. You can tell this page how many servers you |
|---|
| 967 | are using and their independent failure probabilities, and it will |
|---|
| 968 | tell you the likelihood that an arbitrary file will survive each |
|---|
| 969 | repair period. The "numpy" package must be installed to access this |
|---|
| 970 | page. A partial paper, written by Shawn Willden, has been added to |
|---|
| 971 | docs/proposed/lossmodel.lyx .</li> |
|---|
| 972 | </ul> |
|---|
| 973 | </div> |
|---|
| 974 | <div class="section" id="cli-changes"> |
|---|
| 975 | <h2>CLI changes</h2> |
|---|
| 976 | <ul class="simple"> |
|---|
| 977 | <li>"tahoe check" and "tahoe deep-check" now accept an "--add-lease" |
|---|
| 978 | argument, to update a lease on all shares. This is the "mark" side |
|---|
| 979 | of garbage collection.</li> |
|---|
| 980 | <li>In many cases, CLI error messages have been improved: the ugly |
|---|
| 981 | HTMLized traceback has been replaced by a normal python traceback.</li> |
|---|
| 982 | <li>"tahoe deep-check" and "tahoe manifest" now have better error |
|---|
| 983 | reporting. "tahoe cp" is now non-verbose by default.</li> |
|---|
| 984 | <li>"tahoe backup" now accepts several "--exclude" arguments, to ignore |
|---|
| 985 | certain files (like editor temporary files and version-control |
|---|
| 986 | metadata) during backup.</li> |
|---|
| 987 | <li>On windows, the CLI now accepts local paths like "c:dirfile.txt", |
|---|
| 988 | which previously was interpreted as a Tahoe path using a "c:" alias.</li> |
|---|
| 989 | <li>The "tahoe restart" command now uses "--force" by default (meaning |
|---|
| 990 | it will start a node even if it didn't look like there was one |
|---|
| 991 | already running).</li> |
|---|
| 992 | <li>The "tahoe debug consolidate" command was added. This takes a series |
|---|
| 993 | of independent timestamped snapshot directories (such as those |
|---|
| 994 | created by the allmydata.com windows backup program, or a series of |
|---|
| 995 | "tahoe cp -r" commands) and creates new snapshots that used shared |
|---|
| 996 | read-only directories whenever possible (like the output of "tahoe |
|---|
| 997 | backup"). In the most common case (when the snapshots are fairly |
|---|
| 998 | similar), the result will use significantly fewer directories than |
|---|
| 999 | the original, allowing "deep-check" and similar tools to run much |
|---|
| 1000 | faster. In some cases, the speedup can be an order of magnitude or |
|---|
| 1001 | more. This tool is still somewhat experimental, and only needs to |
|---|
| 1002 | be run on large backups produced by something other than "tahoe |
|---|
| 1003 | backup", so it was placed under the "debug" category.</li> |
|---|
| 1004 | <li>"tahoe cp -r --caps-only tahoe:dir localdir" is a diagnostic tool |
|---|
| 1005 | which, instead of copying the full contents of files into the local |
|---|
| 1006 | directory, merely copies their filecaps. This can be used to verify |
|---|
| 1007 | the results of a "consolidation" operation.</li> |
|---|
| 1008 | </ul> |
|---|
| 1009 | </div> |
|---|
| 1010 | <div class="section" id="other-fixes"> |
|---|
| 1011 | <h2>other fixes</h2> |
|---|
| 1012 | <ul class="simple"> |
|---|
| 1013 | <li>The codebase no longer rauses RuntimeError as a kind of |
|---|
| 1014 | assert(). Specific exception classes were created for each previous |
|---|
| 1015 | instance of RuntimeError.</li> |
|---|
| 1016 | </ul> |
|---|
| 1017 | <blockquote> |
|---|
| 1018 | <dl class="docutils"> |
|---|
| 1019 | <dt>-Many unit tests were changed to use a non-network test harness,</dt> |
|---|
| 1020 | <dd>speeding them up considerably.</dd> |
|---|
| 1021 | </dl> |
|---|
| 1022 | </blockquote> |
|---|
| 1023 | <ul class="simple"> |
|---|
| 1024 | <li>Deep-traversal operations (manifest and deep-check) now walk |
|---|
| 1025 | individual directories in alphabetical order. Occasional turn breaks |
|---|
| 1026 | are inserted to prevent a stack overflow when traversing directories |
|---|
| 1027 | with hundreds of entries.</li> |
|---|
| 1028 | <li>The experimental SFTP server had its path-handling logic changed |
|---|
| 1029 | slightly, to accomodate more SFTP clients, although there are still |
|---|
| 1030 | issues (#645).</li> |
|---|
| 1031 | </ul> |
|---|
| 1032 | </div> |
|---|
| 1033 | </div> |
|---|
| 1034 | <div class="section" id="release-1-3-0-2009-02-13"> |
|---|
| 1035 | <h1>Release 1.3.0 (2009-02-13)</h1> |
|---|
| 1036 | <div class="section" id="checker-verifier-repairer"> |
|---|
| 1037 | <h2>Checker/Verifier/Repairer</h2> |
|---|
| 1038 | <ul class="simple"> |
|---|
| 1039 | <li>The primary focus of this release has been writing a checker / |
|---|
| 1040 | verifier / repairer for files and directories. "Checking" is the |
|---|
| 1041 | act of asking storage servers whether they have a share for the |
|---|
| 1042 | given file or directory: if there are not enough shares available, |
|---|
| 1043 | the file or directory will be unrecoverable. "Verifying" is the act |
|---|
| 1044 | of downloading and cryptographically asserting that the server's |
|---|
| 1045 | share is undamaged: it requires more work (bandwidth and CPU) than |
|---|
| 1046 | checking, but can catch problems that simple checking |
|---|
| 1047 | cannot. "Repair" is the act of replacing missing or damaged shares |
|---|
| 1048 | with new ones.</li> |
|---|
| 1049 | <li>This release includes a full checker, a partial verifier, and a |
|---|
| 1050 | partial repairer. The repairer is able to handle missing shares: new |
|---|
| 1051 | shares are generated and uploaded to make up for the missing |
|---|
| 1052 | ones. This is currently the best application of the repairer: to |
|---|
| 1053 | replace shares that were lost because of server departure or |
|---|
| 1054 | permanent drive failure.</li> |
|---|
| 1055 | <li>The repairer in this release is somewhat able to handle corrupted |
|---|
| 1056 | shares. The limitations are:</li> |
|---|
| 1057 | </ul> |
|---|
| 1058 | <blockquote> |
|---|
| 1059 | <ul class="simple"> |
|---|
| 1060 | <li>Immutable verifier is incomplete: not all shares are used, and not |
|---|
| 1061 | all fields of those shares are verified. Therefore the immutable |
|---|
| 1062 | verifier has only a moderate chance of detecting corrupted shares.</li> |
|---|
| 1063 | <li>The mutable verifier is mostly complete: all shares are examined, |
|---|
| 1064 | and most fields of the shares are validated.</li> |
|---|
| 1065 | <li>The storage server protocol offers no way for the repairer to |
|---|
| 1066 | replace or delete immutable shares. If corruption is detected, the |
|---|
| 1067 | repairer will upload replacement shares to other servers, but the |
|---|
| 1068 | corrupted shares will be left in place.</li> |
|---|
| 1069 | <li>read-only directories and read-only mutable files must be repaired |
|---|
| 1070 | by someone who holds the write-cap: the read-cap is |
|---|
| 1071 | insufficient. Moreover, the deep-check-and-repair operation will |
|---|
| 1072 | halt with an error if it attempts to repair one of these read-only |
|---|
| 1073 | objects.</li> |
|---|
| 1074 | <li>Some forms of corruption can cause both download and repair |
|---|
| 1075 | operations to fail. A future release will fix this, since download |
|---|
| 1076 | should be tolerant of any corruption as long as there are at least |
|---|
| 1077 | 'k' valid shares, and repair should be able to fix any file that is |
|---|
| 1078 | downloadable.</li> |
|---|
| 1079 | </ul> |
|---|
| 1080 | </blockquote> |
|---|
| 1081 | <ul class="simple"> |
|---|
| 1082 | <li>If the downloader, verifier, or repairer detects share corruption, |
|---|
| 1083 | the servers which provided the bad shares will be notified (via a |
|---|
| 1084 | file placed in the BASEDIR/storage/corruption-advisories directory) |
|---|
| 1085 | so their operators can manually delete the corrupted shares and |
|---|
| 1086 | investigate the problem. In addition, the "incident gatherer" |
|---|
| 1087 | mechanism will automatically report share corruption to an incident |
|---|
| 1088 | gatherer service, if one is configured. Note that corrupted shares |
|---|
| 1089 | indicate hardware failures, serious software bugs, or malice on the |
|---|
| 1090 | part of the storage server operator, so a corrupted share should be |
|---|
| 1091 | considered highly unusual.</li> |
|---|
| 1092 | <li>By periodically checking/repairing all files and directories, |
|---|
| 1093 | objects in the Tahoe filesystem remain resistant to recoverability |
|---|
| 1094 | failures due to missing and/or broken servers.</li> |
|---|
| 1095 | <li>This release includes a wapi mechanism to initiate checks on |
|---|
| 1096 | individual files and directories (with or without verification, and |
|---|
| 1097 | with or without automatic repair). A related mechanism is used to |
|---|
| 1098 | initiate a "deep-check" on a directory: recursively traversing the |
|---|
| 1099 | directory and its children, checking (and/or verifying/repairing) |
|---|
| 1100 | everything underneath. Both mechanisms can be run with an |
|---|
| 1101 | "output=JSON" argument, to obtain machine-readable check/repair |
|---|
| 1102 | status results. These results include a copy of the filesystem |
|---|
| 1103 | statistics from the "deep-stats" operation (including total number |
|---|
| 1104 | of files, size histogram, etc). If repair is possible, a "Repair" |
|---|
| 1105 | button will appear on the results page.</li> |
|---|
| 1106 | <li>The client web interface now features some extra buttons to initiate |
|---|
| 1107 | check and deep-check operations. When these operations finish, they |
|---|
| 1108 | display a results page that summarizes any problems that were |
|---|
| 1109 | encountered. All long-running deep-traversal operations, including |
|---|
| 1110 | deep-check, use a start-and-poll mechanism, to avoid depending upon |
|---|
| 1111 | a single long-lived HTTP connection. docs/frontends/webapi.txt has |
|---|
| 1112 | details.</li> |
|---|
| 1113 | </ul> |
|---|
| 1114 | </div> |
|---|
| 1115 | <div class="section" id="efficient-backup"> |
|---|
| 1116 | <h2>Efficient Backup</h2> |
|---|
| 1117 | <ul> |
|---|
| 1118 | <li><p class="first">The "tahoe backup" command is new in this release, which creates |
|---|
| 1119 | efficient versioned backups of a local directory. Given a local |
|---|
| 1120 | pathname and a target Tahoe directory, this will create a read-only |
|---|
| 1121 | snapshot of the local directory in $target/Archives/$timestamp. It |
|---|
| 1122 | will also create $target/Latest, which is a reference to the latest |
|---|
| 1123 | such snapshot. Each time you run "tahoe backup" with the same source |
|---|
| 1124 | and target, a new $timestamp snapshot will be added. These snapshots |
|---|
| 1125 | will share directories that have not changed since the last backup, |
|---|
| 1126 | to speed up the process and minimize storage requirements. In |
|---|
| 1127 | addition, a small database is used to keep track of which local |
|---|
| 1128 | files have been uploaded already, to avoid uploading them a second |
|---|
| 1129 | time. This drastically reduces the work needed to do a "null backup" |
|---|
| 1130 | (when nothing has changed locally), making "tahoe backup' suitable |
|---|
| 1131 | to run from a daily cronjob.</p> |
|---|
| 1132 | <p>Note that the "tahoe backup" CLI command must be used in conjunction |
|---|
| 1133 | with a 1.3.0-or-newer Tahoe client node; there was a bug in the |
|---|
| 1134 | 1.2.0 webapi implementation that would prevent the last step (create |
|---|
| 1135 | $target/Latest) from working.</p> |
|---|
| 1136 | </li> |
|---|
| 1137 | </ul> |
|---|
| 1138 | </div> |
|---|
| 1139 | <div class="section" id="large-files"> |
|---|
| 1140 | <h2>Large Files</h2> |
|---|
| 1141 | <ul class="simple"> |
|---|
| 1142 | <li>The 12GiB (approximate) immutable-file-size limitation is |
|---|
| 1143 | lifted. This release knows how to handle so-called "v2 immutable |
|---|
| 1144 | shares", which permit immutable files of up to about 18 EiB (about |
|---|
| 1145 | 3*10^14). These v2 shares are created if the file to be uploaded is |
|---|
| 1146 | too large to fit into v1 shares. v1 shares are created if the file |
|---|
| 1147 | is small enough to fit into them, so that files created with |
|---|
| 1148 | tahoe-1.3.0 can still be read by earlier versions if they are not |
|---|
| 1149 | too large. Note that storage servers also had to be changed to |
|---|
| 1150 | support larger files, and this release is the first release in which |
|---|
| 1151 | they are able to do that. Clients will detect which servers are |
|---|
| 1152 | capable of supporting large files on upload and will not attempt to |
|---|
| 1153 | upload shares of a large file to a server which doesn't support it.</li> |
|---|
| 1154 | </ul> |
|---|
| 1155 | </div> |
|---|
| 1156 | <div class="section" id="ftp-sftp-server"> |
|---|
| 1157 | <h2>FTP/SFTP Server</h2> |
|---|
| 1158 | <ul class="simple"> |
|---|
| 1159 | <li>Tahoe now includes experimental FTP and SFTP servers. When |
|---|
| 1160 | configured with a suitable method to translate username+password |
|---|
| 1161 | into a root directory cap, it provides simple access to the virtual |
|---|
| 1162 | filesystem. Remember that FTP is completely unencrypted: passwords, |
|---|
| 1163 | filenames, and file contents are all sent over the wire in |
|---|
| 1164 | cleartext, so FTP should only be used on a local (127.0.0.1) |
|---|
| 1165 | connection. This feature is still in development: there are no unit |
|---|
| 1166 | tests yet, and behavior with respect to Unicode filenames is |
|---|
| 1167 | uncertain. Please see docs/frontends/FTP-and-SFTP.txt for |
|---|
| 1168 | configuration details. (#512, #531)</li> |
|---|
| 1169 | </ul> |
|---|
| 1170 | </div> |
|---|
| 1171 | <div class="section" id="id9"> |
|---|
| 1172 | <h2>CLI Changes</h2> |
|---|
| 1173 | <ul class="simple"> |
|---|
| 1174 | <li>This release adds the 'tahoe create-alias' command, which is a |
|---|
| 1175 | combination of 'tahoe mkdir' and 'tahoe add-alias'. This also allows |
|---|
| 1176 | you to start using a new tahoe directory without exposing its URI in |
|---|
| 1177 | the argv list, which is publicly visible (through the process table) |
|---|
| 1178 | on most unix systems. Thanks to Kevin Reid for bringing this issue |
|---|
| 1179 | to our attention.</li> |
|---|
| 1180 | <li>The single-argument form of "tahoe put" was changed to create an |
|---|
| 1181 | unlinked file. I.e. "tahoe put bar.txt" will take the contents of a |
|---|
| 1182 | local "bar.txt" file, upload them to the grid, and print the |
|---|
| 1183 | resulting read-cap; the file will not be attached to any |
|---|
| 1184 | directories. This seemed a bit more useful than the previous |
|---|
| 1185 | behavior (copy stdin, upload to the grid, attach the resulting file |
|---|
| 1186 | into your default tahoe: alias in a child named 'bar.txt').</li> |
|---|
| 1187 | <li>"tahoe put" was also fixed to handle mutable files correctly: "tahoe |
|---|
| 1188 | put bar.txt URI:SSK:..." will read the contents of the local bar.txt |
|---|
| 1189 | and use them to replace the contents of the given mutable file.</li> |
|---|
| 1190 | <li>The "tahoe webopen" command was modified to accept aliases. This |
|---|
| 1191 | means "tahoe webopen tahoe:" will cause your web browser to open to |
|---|
| 1192 | a "wui" page that gives access to the directory associated with the |
|---|
| 1193 | default "tahoe:" alias. It should also accept leading slashes, like |
|---|
| 1194 | "tahoe webopen tahoe:/stuff".</li> |
|---|
| 1195 | <li>Many esoteric debugging commands were moved down into a "debug" |
|---|
| 1196 | subcommand:</li> |
|---|
| 1197 | </ul> |
|---|
| 1198 | <blockquote> |
|---|
| 1199 | <ul> |
|---|
| 1200 | <li><p class="first">tahoe debug dump-cap</p> |
|---|
| 1201 | </li> |
|---|
| 1202 | <li><p class="first">tahoe debug dump-share</p> |
|---|
| 1203 | </li> |
|---|
| 1204 | <li><p class="first">tahoe debug find-shares</p> |
|---|
| 1205 | </li> |
|---|
| 1206 | <li><p class="first">tahoe debug catalog-shares</p> |
|---|
| 1207 | </li> |
|---|
| 1208 | <li><p class="first">tahoe debug corrupt-share</p> |
|---|
| 1209 | <p>The last command ("tahoe debug corrupt-share") flips a random bit |
|---|
| 1210 | of the given local sharefile. This is used to test the file |
|---|
| 1211 | verifying/repairing code, and obviously should not be used on user |
|---|
| 1212 | data.</p> |
|---|
| 1213 | </li> |
|---|
| 1214 | </ul> |
|---|
| 1215 | </blockquote> |
|---|
| 1216 | <p>The cli might not correctly handle arguments which contain non-ascii |
|---|
| 1217 | characters in Tahoe v1.3 (although depending on your platform it |
|---|
| 1218 | might, especially if your platform can be configured to pass such |
|---|
| 1219 | characters on the command-line in utf-8 encoding). See |
|---|
| 1220 | <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> |
|---|
| 1221 | </div> |
|---|
| 1222 | <div class="section" id="web-changes"> |
|---|
| 1223 | <h2>Web changes</h2> |
|---|
| 1224 | <ul class="simple"> |
|---|
| 1225 | <li>The "default webapi port", used when creating a new client node (and |
|---|
| 1226 | in the getting-started documentation), was changed from 8123 to |
|---|
| 1227 | 3456, to reduce confusion when Tahoe accessed through a Firefox |
|---|
| 1228 | browser on which the "Torbutton" extension has been installed. Port |
|---|
| 1229 | 8123 is occasionally used as a Tor control port, so Torbutton adds |
|---|
| 1230 | 8123 to Firefox's list of "banned ports" to avoid CSRF attacks |
|---|
| 1231 | against Tor. Once 8123 is banned, it is difficult to diagnose why |
|---|
| 1232 | you can no longer reach a Tahoe node, so the Tahoe default was |
|---|
| 1233 | changed. Note that 3456 is reserved by IANA for the "vat" protocol, |
|---|
| 1234 | but there are argueably more Torbutton+Tahoe users than vat users |
|---|
| 1235 | these days. Note that this will only affect newly-created client |
|---|
| 1236 | nodes. Pre-existing client nodes, created by earlier versions of |
|---|
| 1237 | tahoe, may still be listening on 8123.</li> |
|---|
| 1238 | <li>All deep-traversal operations (start-manifest, start-deep-size, |
|---|
| 1239 | start-deep-stats, start-deep-check) now use a start-and-poll |
|---|
| 1240 | approach, instead of using a single (fragile) long-running |
|---|
| 1241 | synchronous HTTP connection. All these "start-" operations use POST |
|---|
| 1242 | instead of GET. The old "GET manifest", "GET deep-size", and "POST |
|---|
| 1243 | deep-check" operations have been removed.</li> |
|---|
| 1244 | <li>The new "POST start-manifest" operation, when it finally completes, |
|---|
| 1245 | results in a table of (path,cap), instead of the list of verifycaps |
|---|
| 1246 | produced by the old "GET manifest". The table is available in |
|---|
| 1247 | several formats: use output=html, output=text, or output=json to |
|---|
| 1248 | choose one. The JSON output also includes stats, and a list of |
|---|
| 1249 | verifycaps and storage-index strings. The "return_to=" and |
|---|
| 1250 | "when_done=" arguments have been removed from the t=check and |
|---|
| 1251 | deep-check operations.</li> |
|---|
| 1252 | <li>The top-level status page (/status) now has a machine-readable form, |
|---|
| 1253 | via "/status/?t=json". This includes information about the |
|---|
| 1254 | currently-active uploads and downloads, which may be useful for |
|---|
| 1255 | frontends that wish to display progress information. There is no |
|---|
| 1256 | easy way to correlate the activities displayed here with recent wapi |
|---|
| 1257 | requests, however.</li> |
|---|
| 1258 | <li>Any files in BASEDIR/public_html/ (configurable) will be served in |
|---|
| 1259 | response to requests in the /static/ portion of the URL space. This |
|---|
| 1260 | will simplify the deployment of javascript-based frontends that can |
|---|
| 1261 | still access wapi calls by conforming to the (regrettable) |
|---|
| 1262 | "same-origin policy".</li> |
|---|
| 1263 | <li>The welcome page now has a "Report Incident" button, which is tied |
|---|
| 1264 | into the "Incident Gatherer" machinery. If the node is attached to |
|---|
| 1265 | an incident gatherer (via log_gatherer.furl), then pushing this |
|---|
| 1266 | button will cause an Incident to be signalled: this means recent log |
|---|
| 1267 | events are aggregated and sent in a bundle to the gatherer. The user |
|---|
| 1268 | can push this button after something strange takes place (and they |
|---|
| 1269 | can provide a short message to go along with it), and the relevant |
|---|
| 1270 | data will be delivered to a centralized incident-gatherer for later |
|---|
| 1271 | processing by operations staff.</li> |
|---|
| 1272 | <li>The "HEAD" method should now work correctly, in addition to the |
|---|
| 1273 | usual "GET", "PUT", and "POST" methods. "HEAD" is supposed to return |
|---|
| 1274 | exactly the same headers as "GET" would, but without any of the |
|---|
| 1275 | actual response body data. For mutable files, this now does a brief |
|---|
| 1276 | mapupdate (to figure out the size of the file that would be |
|---|
| 1277 | returned), without actually retrieving the file's contents.</li> |
|---|
| 1278 | <li>The "GET" operation on files can now support the HTTP "Range:" |
|---|
| 1279 | header, allowing requests for partial content. This allows certain |
|---|
| 1280 | media players to correctly stream audio and movies out of a Tahoe |
|---|
| 1281 | grid. The current implementation uses a disk-based cache in |
|---|
| 1282 | BASEDIR/private/cache/download , which holds the plaintext of the |
|---|
| 1283 | files being downloaded. Future implementations might not use this |
|---|
| 1284 | cache. GET for immutable files now returns an ETag header.</li> |
|---|
| 1285 | <li>Each file and directory now has a "Show More Info" web page, which |
|---|
| 1286 | contains much of the information that was crammed into the directory |
|---|
| 1287 | page before. This includes readonly URIs, storage index strings, |
|---|
| 1288 | object type, buttons to control checking/verifying/repairing, and |
|---|
| 1289 | deep-check/deep-stats buttons (for directories). For mutable files, |
|---|
| 1290 | the "replace contents" upload form has been moved here too. As a |
|---|
| 1291 | result, the directory page is now much simpler and cleaner, and |
|---|
| 1292 | several potentially-misleading links (like t=uri) are now gone.</li> |
|---|
| 1293 | <li>Slashes are discouraged in Tahoe file/directory names, since they |
|---|
| 1294 | cause problems when accessing the filesystem through the |
|---|
| 1295 | wapi. However, there are a couple of accidental ways to generate |
|---|
| 1296 | such names. This release tries to make it easier to correct such |
|---|
| 1297 | mistakes by escaping slashes in several places, allowing slashes in |
|---|
| 1298 | the t=info and t=delete commands, and in the source (but not the |
|---|
| 1299 | target) of a t=rename command.</li> |
|---|
| 1300 | </ul> |
|---|
| 1301 | </div> |
|---|
| 1302 | <div class="section" id="id10"> |
|---|
| 1303 | <h2>Packaging</h2> |
|---|
| 1304 | <ul class="simple"> |
|---|
| 1305 | <li>Tahoe's dependencies have been extended to require the |
|---|
| 1306 | "[secure_connections]" feature from Foolscap, which will cause |
|---|
| 1307 | pyOpenSSL to be required and/or installed. If OpenSSL and its |
|---|
| 1308 | development headers are already installed on your system, this can |
|---|
| 1309 | occur automatically. Tahoe now uses pollreactor (instead of the |
|---|
| 1310 | default selectreactor) to work around a bug between pyOpenSSL and |
|---|
| 1311 | the most recent release of Twisted (8.1.0). This bug only affects |
|---|
| 1312 | unit tests (hang during shutdown), and should not impact regular |
|---|
| 1313 | use.</li> |
|---|
| 1314 | <li>The Tahoe source code tarballs now come in two different forms: |
|---|
| 1315 | regular and "sumo". The regular tarball contains just Tahoe, nothing |
|---|
| 1316 | else. When building from the regular tarball, the build process will |
|---|
| 1317 | download any unmet dependencies from the internet (starting with the |
|---|
| 1318 | index at PyPI) so it can build and install them. The "sumo" tarball |
|---|
| 1319 | contains copies of all the libraries that Tahoe requires (foolscap, |
|---|
| 1320 | twisted, zfec, etc), so using the "sumo" tarball should not require |
|---|
| 1321 | any internet access during the build process. This can be useful if |
|---|
| 1322 | you want to build Tahoe while on an airplane, a desert island, or |
|---|
| 1323 | other bandwidth-limited environments.</li> |
|---|
| 1324 | <li>Similarly, tahoe-lafs.org now hosts a "tahoe-deps" tarball which |
|---|
| 1325 | contains the latest versions of all these dependencies. This |
|---|
| 1326 | tarball, located at |
|---|
| 1327 | <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 |
|---|
| 1328 | unpacked in the tahoe source tree (or in its parent directory), and |
|---|
| 1329 | the build process should satisfy its downloading needs from it |
|---|
| 1330 | instead of reaching out to PyPI. This can be useful if you want to |
|---|
| 1331 | build Tahoe from a darcs checkout while on that airplane or desert |
|---|
| 1332 | island.</li> |
|---|
| 1333 | <li>Because of the previous two changes ("sumo" tarballs and the |
|---|
| 1334 | "tahoe-deps" bundle), most of the files have been removed from |
|---|
| 1335 | misc/dependencies/ . This brings the regular Tahoe tarball down to |
|---|
| 1336 | 2MB (compressed), and the darcs checkout (without history) to about |
|---|
| 1337 | 7.6MB. A full darcs checkout will still be fairly large (because of |
|---|
| 1338 | the historical patches which included the dependent libraries), but |
|---|
| 1339 | a 'lazy' one should now be small.</li> |
|---|
| 1340 | <li>The default "make" target is now an alias for "setup.py build", |
|---|
| 1341 | which itself is an alias for "setup.py develop --prefix support", |
|---|
| 1342 | with some extra work before and after (see setup.cfg). Most of the |
|---|
| 1343 | complicated platform-dependent code in the Makefile was rewritten in |
|---|
| 1344 | Python and moved into setup.py, simplifying things considerably.</li> |
|---|
| 1345 | <li>Likewise, the "make test" target now delegates most of its work to |
|---|
| 1346 | "setup.py test", which takes care of getting PYTHONPATH configured |
|---|
| 1347 | to access the tahoe code (and dependencies) that gets put in |
|---|
| 1348 | support/lib/ by the build_tahoe step. This should allow unit tests |
|---|
| 1349 | to be run even when trial (which is part of Twisted) wasn't already |
|---|
| 1350 | installed (in this case, trial gets installed to support/bin because |
|---|
| 1351 | Twisted is a dependency of Tahoe).</li> |
|---|
| 1352 | <li>Tahoe is now compatible with the recently-released Python 2.6 , |
|---|
| 1353 | although it is recommended to use Tahoe on Python 2.5, on which it |
|---|
| 1354 | has received more thorough testing and deployment.</li> |
|---|
| 1355 | <li>Tahoe is now compatible with simplejson-2.0.x . The previous release |
|---|
| 1356 | assumed that simplejson.loads always returned unicode strings, which |
|---|
| 1357 | is no longer the case in 2.0.x .</li> |
|---|
| 1358 | </ul> |
|---|
| 1359 | </div> |
|---|
| 1360 | <div class="section" id="grid-management-tools"> |
|---|
| 1361 | <h2>Grid Management Tools</h2> |
|---|
| 1362 | <ul class="simple"> |
|---|
| 1363 | <li>Several tools have been added or updated in the misc/ directory, |
|---|
| 1364 | mostly munin plugins that can be used to monitor a storage grid.</li> |
|---|
| 1365 | </ul> |
|---|
| 1366 | <blockquote> |
|---|
| 1367 | <ul class="simple"> |
|---|
| 1368 | <li>The misc/spacetime/ directory contains a "disk watcher" daemon |
|---|
| 1369 | (startable with 'tahoe start'), which can be configured with a set |
|---|
| 1370 | of HTTP URLs (pointing at the wapi '/statistics' page of a bunch of |
|---|
| 1371 | storage servers), and will periodically fetch |
|---|
| 1372 | disk-used/disk-available information from all the servers. It keeps |
|---|
| 1373 | this information in an Axiom database (a sqlite-based library |
|---|
| 1374 | available from divmod.org). The daemon computes time-averaged rates |
|---|
| 1375 | of disk usage, as well as a prediction of how much time is left |
|---|
| 1376 | before the grid is completely full.</li> |
|---|
| 1377 | <li>The misc/munin/ directory contains a new set of munin plugins |
|---|
| 1378 | (tahoe_diskleft, tahoe_diskusage, tahoe_doomsday) which talk to the |
|---|
| 1379 | disk-watcher and provide graphs of its calculations.</li> |
|---|
| 1380 | <li>To support the disk-watcher, the Tahoe statistics component |
|---|
| 1381 | (visible through the wapi at the /statistics/ URL) now includes |
|---|
| 1382 | disk-used and disk-available information. Both are derived through |
|---|
| 1383 | an equivalent of the unix 'df' command (i.e. they ask the kernel |
|---|
| 1384 | for the number of free blocks on the partition that encloses the |
|---|
| 1385 | BASEDIR/storage directory). In the future, the disk-available |
|---|
| 1386 | number will be further influenced by the local storage policy: if |
|---|
| 1387 | that policy says that the server should refuse new shares when less |
|---|
| 1388 | than 5GB is left on the partition, then "disk-available" will |
|---|
| 1389 | report zero even though the kernel sees 5GB remaining.</li> |
|---|
| 1390 | <li>The 'tahoe_overhead' munin plugin interacts with an |
|---|
| 1391 | allmydata.com-specific server which reports the total of the |
|---|
| 1392 | 'deep-size' reports for all active user accounts, compares this |
|---|
| 1393 | with the disk-watcher data, to report on overhead percentages. This |
|---|
| 1394 | provides information on how much space could be recovered once |
|---|
| 1395 | Tahoe implements some form of garbage collection.</li> |
|---|
| 1396 | </ul> |
|---|
| 1397 | </blockquote> |
|---|
| 1398 | </div> |
|---|
| 1399 | <div class="section" id="configuration-changes-single-ini-format-tahoe-cfg-file"> |
|---|
| 1400 | <h2>Configuration Changes: single INI-format tahoe.cfg file</h2> |
|---|
| 1401 | <ul class="simple"> |
|---|
| 1402 | <li>The Tahoe node is now configured with a single INI-format file, |
|---|
| 1403 | named "tahoe.cfg", in the node's base directory. Most of the |
|---|
| 1404 | previous multiple-separate-files are still read for backwards |
|---|
| 1405 | compatibility (the embedded SSH debug server and the |
|---|
| 1406 | advertised_ip_addresses files are the exceptions), but new |
|---|
| 1407 | directives will only be added to tahoe.cfg . The "tahoe |
|---|
| 1408 | create-client" command will create a tahoe.cfg for you, with sample |
|---|
| 1409 | values commented out. (ticket #518)</li> |
|---|
| 1410 | <li>tahoe.cfg now has controls for the foolscap "keepalive" and |
|---|
| 1411 | "disconnect" timeouts (#521).</li> |
|---|
| 1412 | <li>tahoe.cfg now has controls for the encoding parameters: |
|---|
| 1413 | "shares.needed" and "shares.total" in the "[client]" section. The |
|---|
| 1414 | default parameters are still 3-of-10.</li> |
|---|
| 1415 | <li>The inefficient storage 'sizelimit' control (which established an |
|---|
| 1416 | upper bound on the amount of space that a storage server is allowed |
|---|
| 1417 | to consume) has been replaced by a lightweight 'reserved_space' |
|---|
| 1418 | control (which establishes a lower bound on the amount of remaining |
|---|
| 1419 | space). The storage server will reject all writes that would cause |
|---|
| 1420 | the remaining disk space (as measured by a '/bin/df' equivalent) to |
|---|
| 1421 | drop below this value. The "[storage]reserved_space=" tahoe.cfg |
|---|
| 1422 | parameter controls this setting. (note that this only affects |
|---|
| 1423 | immutable shares: it is an outstanding bug that reserved_space does |
|---|
| 1424 | not prevent the allocation of new mutable shares, nor does it |
|---|
| 1425 | prevent the growth of existing mutable shares).</li> |
|---|
| 1426 | </ul> |
|---|
| 1427 | </div> |
|---|
| 1428 | <div class="section" id="id11"> |
|---|
| 1429 | <h2>Other Changes</h2> |
|---|
| 1430 | <ul class="simple"> |
|---|
| 1431 | <li>Clients now declare which versions of the protocols they |
|---|
| 1432 | support. This is part of a new backwards-compatibility system: |
|---|
| 1433 | <a class="reference external" href="http://tahoe-lafs.org/trac/tahoe/wiki/Versioning">http://tahoe-lafs.org/trac/tahoe/wiki/Versioning</a> .</li> |
|---|
| 1434 | <li>The version strings for human inspection (as displayed on the |
|---|
| 1435 | Welcome web page, and included in logs) now includes a platform |
|---|
| 1436 | identifer (frequently including a linux distribution name, processor |
|---|
| 1437 | architecture, etc).</li> |
|---|
| 1438 | <li>Several bugs have been fixed, including one that would cause an |
|---|
| 1439 | exception (in the logs) if a wapi download operation was cancelled |
|---|
| 1440 | (by closing the TCP connection, or pushing the "stop" button in a |
|---|
| 1441 | web browser).</li> |
|---|
| 1442 | <li>Tahoe now uses Foolscap "Incidents", writing an "incident report" |
|---|
| 1443 | file to logs/incidents/ each time something weird occurs. These |
|---|
| 1444 | reports are available to an "incident gatherer" through the flogtool |
|---|
| 1445 | command. For more details, please see the Foolscap logging |
|---|
| 1446 | documentation. An incident-classifying plugin function is provided |
|---|
| 1447 | in misc/incident-gatherer/classify_tahoe.py .</li> |
|---|
| 1448 | <li>If clients detect corruption in shares, they now automatically |
|---|
| 1449 | report it to the server holding that share, if it is new enough to |
|---|
| 1450 | accept the report. These reports are written to files in |
|---|
| 1451 | BASEDIR/storage/corruption-advisories .</li> |
|---|
| 1452 | <li>The 'nickname' setting is now defined to be a UTF-8 -encoded string, |
|---|
| 1453 | allowing non-ascii nicknames.</li> |
|---|
| 1454 | <li>The 'tahoe start' command will now accept a --syslog argument and |
|---|
| 1455 | pass it through to twistd, making it easier to launch non-Tahoe |
|---|
| 1456 | nodes (like the cpu-watcher) and have them log to syslogd instead of |
|---|
| 1457 | a local file. This is useful when running a Tahoe node out of a USB |
|---|
| 1458 | flash drive.</li> |
|---|
| 1459 | <li>The Mac GUI in src/allmydata/gui/ has been improved.</li> |
|---|
| 1460 | </ul> |
|---|
| 1461 | </div> |
|---|
| 1462 | </div> |
|---|
| 1463 | <div class="section" id="release-1-2-0-2008-07-21"> |
|---|
| 1464 | <h1>Release 1.2.0 (2008-07-21)</h1> |
|---|
| 1465 | <div class="section" id="security"> |
|---|
| 1466 | <h2>Security</h2> |
|---|
| 1467 | <ul> |
|---|
| 1468 | <li><p class="first">This release makes the immutable-file "ciphertext hash tree" |
|---|
| 1469 | mandatory. Previous releases allowed the uploader to decide whether |
|---|
| 1470 | their file would have an integrity check on the ciphertext or not. A |
|---|
| 1471 | malicious uploader could use this to create a readcap that would |
|---|
| 1472 | download as one file or a different one, depending upon which shares |
|---|
| 1473 | the client fetched first, with no errors raised. There are other |
|---|
| 1474 | integrity checks on the shares themselves, preventing a storage |
|---|
| 1475 | server or other party from violating the integrity properties of the |
|---|
| 1476 | read-cap: this failure was only exploitable by the uploader who |
|---|
| 1477 | gives you a carefully constructed read-cap. If you download the file |
|---|
| 1478 | with Tahoe 1.2.0 or later, you will not be vulnerable to this |
|---|
| 1479 | problem. #491</p> |
|---|
| 1480 | <p>This change does not introduce a compatibility issue, because all |
|---|
| 1481 | existing versions of Tahoe will emit the ciphertext hash tree in |
|---|
| 1482 | their shares.</p> |
|---|
| 1483 | </li> |
|---|
| 1484 | </ul> |
|---|
| 1485 | </div> |
|---|
| 1486 | <div class="section" id="dependencies"> |
|---|
| 1487 | <h2>Dependencies</h2> |
|---|
| 1488 | <ul class="simple"> |
|---|
| 1489 | <li>Tahoe now requires Foolscap-0.2.9 . It also requires pycryptopp 0.5 |
|---|
| 1490 | or newer, since earlier versions had a bug that interacted with |
|---|
| 1491 | specific compiler versions that could sometimes result in incorrect |
|---|
| 1492 | encryption behavior. Both packages are included in the Tahoe source |
|---|
| 1493 | tarball in misc/dependencies/ , and should be built automatically |
|---|
| 1494 | when necessary.</li> |
|---|
| 1495 | </ul> |
|---|
| 1496 | </div> |
|---|
| 1497 | <div class="section" id="web-api"> |
|---|
| 1498 | <h2>Web API</h2> |
|---|
| 1499 | <ul class="simple"> |
|---|
| 1500 | <li>Web API directory pages should now contain properly-slash-terminated |
|---|
| 1501 | links to other directories. They have also stopped using absolute |
|---|
| 1502 | links in forms and pages (which interfered with the use of a |
|---|
| 1503 | front-end load-balancing proxy).</li> |
|---|
| 1504 | <li>The behavior of the "Check This File" button changed, in conjunction |
|---|
| 1505 | with larger internal changes to file checking/verification. The |
|---|
| 1506 | button triggers an immediate check as before, but the outcome is |
|---|
| 1507 | shown on its own page, and does not get stored anywhere. As a |
|---|
| 1508 | result, the web directory page no longer shows historical checker |
|---|
| 1509 | results.</li> |
|---|
| 1510 | <li>A new "Deep-Check" button has been added, which allows a user to |
|---|
| 1511 | initiate a recursive check of the given directory and all files and |
|---|
| 1512 | directories reachable from it. This can cause quite a bit of work, |
|---|
| 1513 | and has no intermediate progress information or feedback about the |
|---|
| 1514 | process. In addition, the results of the deep-check are extremely |
|---|
| 1515 | limited. A later release will improve this behavior.</li> |
|---|
| 1516 | <li>The web server's behavior with respect to non-ASCII (unicode) |
|---|
| 1517 | filenames in the "GET save=true" operation has been improved. To |
|---|
| 1518 | achieve maximum compatibility with variously buggy web browsers, the |
|---|
| 1519 | server does not try to figure out the character set of the inbound |
|---|
| 1520 | filename. It just echoes the same bytes back to the browser in the |
|---|
| 1521 | Content-Disposition header. This seems to make both IE7 and Firefox |
|---|
| 1522 | work correctly.</li> |
|---|
| 1523 | </ul> |
|---|
| 1524 | </div> |
|---|
| 1525 | <div class="section" id="id12"> |
|---|
| 1526 | <h2>Checker/Verifier/Repairer</h2> |
|---|
| 1527 | <ul> |
|---|
| 1528 | <li><p class="first">Tahoe is slowly acquiring convenient tools to check up on file |
|---|
| 1529 | health, examine existing shares for errors, and repair files that |
|---|
| 1530 | are not fully healthy. This release adds a mutable |
|---|
| 1531 | checker/verifier/repairer, although testing is very limited, and |
|---|
| 1532 | there are no web interfaces to trigger repair yet. The "Check" |
|---|
| 1533 | button next to each file or directory on the wapi page will perform |
|---|
| 1534 | a file check, and the "deep check" button on each directory will |
|---|
| 1535 | recursively check all files and directories reachable from there |
|---|
| 1536 | (which may take a very long time).</p> |
|---|
| 1537 | <p>Future releases will improve access to this functionality.</p> |
|---|
| 1538 | </li> |
|---|
| 1539 | </ul> |
|---|
| 1540 | </div> |
|---|
| 1541 | <div class="section" id="operations-packaging"> |
|---|
| 1542 | <h2>Operations/Packaging</h2> |
|---|
| 1543 | <ul class="simple"> |
|---|
| 1544 | <li>A "check-grid" script has been added, along with a Makefile |
|---|
| 1545 | target. This is intended (with the help of a pre-configured node |
|---|
| 1546 | directory) to check upon the health of a Tahoe grid, uploading and |
|---|
| 1547 | downloading a few files. This can be used as a monitoring tool for a |
|---|
| 1548 | deployed grid, to be run periodically and to signal an error if it |
|---|
| 1549 | ever fails. It also helps with compatibility testing, to verify that |
|---|
| 1550 | the latest Tahoe code is still able to handle files created by an |
|---|
| 1551 | older version.</li> |
|---|
| 1552 | <li>The munin plugins from misc/munin/ are now copied into any generated |
|---|
| 1553 | debian packages, and are made executable (and uncompressed) so they |
|---|
| 1554 | can be symlinked directly from /etc/munin/plugins/ .</li> |
|---|
| 1555 | <li>Ubuntu "Hardy" was added as a supported debian platform, with a |
|---|
| 1556 | Makefile target to produce hardy .deb packages. Some notes have been |
|---|
| 1557 | added to docs/debian.txt about building Tahoe on a debian/ubuntu |
|---|
| 1558 | system.</li> |
|---|
| 1559 | <li>Storage servers now measure operation rates and |
|---|
| 1560 | latency-per-operation, and provides results through the /statistics |
|---|
| 1561 | web page as well as the stats gatherer. Munin plugins have been |
|---|
| 1562 | added to match.</li> |
|---|
| 1563 | </ul> |
|---|
| 1564 | </div> |
|---|
| 1565 | <div class="section" id="other"> |
|---|
| 1566 | <h2>Other</h2> |
|---|
| 1567 | <ul class="simple"> |
|---|
| 1568 | <li>Tahoe nodes now use Foolscap "incident logging" to record unusual |
|---|
| 1569 | events to their NODEDIR/logs/incidents/ directory. These incident |
|---|
| 1570 | files can be examined by Foolscap logging tools, or delivered to an |
|---|
| 1571 | external log-gatherer for further analysis. Note that Tahoe now |
|---|
| 1572 | requires Foolscap-0.2.9, since 0.2.8 had a bug that complained about |
|---|
| 1573 | "OSError: File exists" when trying to create the incidents/ |
|---|
| 1574 | directory for a second time.</li> |
|---|
| 1575 | <li>If no servers are available when retrieving a mutable file (like a |
|---|
| 1576 | directory), the node now reports an error instead of hanging |
|---|
| 1577 | forever. Earlier releases would not only hang (causing the wapi |
|---|
| 1578 | directory listing to get stuck half-way through), but the internal |
|---|
| 1579 | dirnode serialization would cause all subsequent attempts to |
|---|
| 1580 | retrieve or modify the same directory to hang as well. #463</li> |
|---|
| 1581 | <li>A minor internal exception (reported in logs/twistd.log, in the |
|---|
| 1582 | "stopProducing" method) was fixed, which complained about |
|---|
| 1583 | "self._paused_at not defined" whenever a file download was stopped |
|---|
| 1584 | from the web browser end.</li> |
|---|
| 1585 | </ul> |
|---|
| 1586 | </div> |
|---|
| 1587 | </div> |
|---|
| 1588 | <div class="section" id="release-1-1-0-2008-06-11"> |
|---|
| 1589 | <h1>Release 1.1.0 (2008-06-11)</h1> |
|---|
| 1590 | <div class="section" id="cli-new-alias-model"> |
|---|
| 1591 | <h2>CLI: new "alias" model</h2> |
|---|
| 1592 | <ul class="simple"> |
|---|
| 1593 | <li>The new CLI code uses an scp/rsync -like interface, in which |
|---|
| 1594 | directories in the Tahoe storage grid are referenced by a |
|---|
| 1595 | colon-suffixed alias. The new commands look like:</li> |
|---|
| 1596 | </ul> |
|---|
| 1597 | <blockquote> |
|---|
| 1598 | <ul class="simple"> |
|---|
| 1599 | <li>tahoe cp local.txt tahoe:virtual.txt</li> |
|---|
| 1600 | <li>tahoe ls work:subdir</li> |
|---|
| 1601 | </ul> |
|---|
| 1602 | </blockquote> |
|---|
| 1603 | <ul class="simple"> |
|---|
| 1604 | <li>More functionality is available through the CLI: creating unlinked |
|---|
| 1605 | files and directories, recursive copy in or out of the storage grid, |
|---|
| 1606 | hardlinks, and retrieving the raw read- or write- caps through the |
|---|
| 1607 | 'ls' command. Please read docs/CLI.txt for complete details.</li> |
|---|
| 1608 | </ul> |
|---|
| 1609 | </div> |
|---|
| 1610 | <div class="section" id="wapi-new-pages-new-commands"> |
|---|
| 1611 | <h2>wapi: new pages, new commands</h2> |
|---|
| 1612 | <ul class="simple"> |
|---|
| 1613 | <li>Several new pages were added to the web API:</li> |
|---|
| 1614 | </ul> |
|---|
| 1615 | <blockquote> |
|---|
| 1616 | <ul class="simple"> |
|---|
| 1617 | <li>/helper_status : to describe what a Helper is doing</li> |
|---|
| 1618 | <li>/statistics : reports node uptime, CPU usage, other stats</li> |
|---|
| 1619 | <li>/file : for easy file-download URLs, see #221</li> |
|---|
| 1620 | <li>/cap == /uri : future compatibility</li> |
|---|
| 1621 | </ul> |
|---|
| 1622 | </blockquote> |
|---|
| 1623 | <ul class="simple"> |
|---|
| 1624 | <li>The localdir=/localfile= and t=download operations were |
|---|
| 1625 | removed. These required special configuration to enable anyways, but |
|---|
| 1626 | this feature was a security problem, and was mostly obviated by the |
|---|
| 1627 | new "cp -r" command.</li> |
|---|
| 1628 | <li>Several new options to the GET command were added:</li> |
|---|
| 1629 | </ul> |
|---|
| 1630 | <blockquote> |
|---|
| 1631 | <ul> |
|---|
| 1632 | <li><p class="first">t=deep-size : add up the size of all immutable files reachable from the directory</p> |
|---|
| 1633 | </li> |
|---|
| 1634 | <li><dl class="first docutils"> |
|---|
| 1635 | <dt>t=deep-stats <span class="classifier-delimiter">:</span> <span class="classifier">return a JSON-encoded description of number of files, size</span></dt> |
|---|
| 1636 | <dd><p class="first last">distribution, total size, etc</p> |
|---|
| 1637 | </dd> |
|---|
| 1638 | </dl> |
|---|
| 1639 | </li> |
|---|
| 1640 | </ul> |
|---|
| 1641 | </blockquote> |
|---|
| 1642 | <ul class="simple"> |
|---|
| 1643 | <li>POST is now preferred over PUT for most operations which cause |
|---|
| 1644 | side-effects.</li> |
|---|
| 1645 | <li>Most wapi calls now accept overwrite=, and default to overwrite=true</li> |
|---|
| 1646 | <li>"POST /uri/DIRCAP/parent/child?t=mkdir" is now the preferred API to |
|---|
| 1647 | create multiple directories at once, rather than ...?t=mkdir-p .</li> |
|---|
| 1648 | <li>PUT to a mutable file ("PUT /uri/MUTABLEFILECAP", "PUT |
|---|
| 1649 | /uri/DIRCAP/child") will modify the file in-place.</li> |
|---|
| 1650 | <li>more munin graphs in misc/munin/</li> |
|---|
| 1651 | </ul> |
|---|
| 1652 | <blockquote> |
|---|
| 1653 | <ul class="simple"> |
|---|
| 1654 | <li>tahoe-introstats</li> |
|---|
| 1655 | <li>tahoe-rootdir-space</li> |
|---|
| 1656 | <li>tahoe_estimate_files</li> |
|---|
| 1657 | <li>mutable files published/retrieved</li> |
|---|
| 1658 | <li>tahoe_cpu_watcher</li> |
|---|
| 1659 | <li>tahoe_spacetime</li> |
|---|
| 1660 | </ul> |
|---|
| 1661 | </blockquote> |
|---|
| 1662 | </div> |
|---|
| 1663 | <div class="section" id="new-dependencies"> |
|---|
| 1664 | <h2>New Dependencies</h2> |
|---|
| 1665 | <ul class="simple"> |
|---|
| 1666 | <li>zfec 1.1.0</li> |
|---|
| 1667 | <li>foolscap 0.2.8</li> |
|---|
| 1668 | <li>pycryptopp 0.5</li> |
|---|
| 1669 | <li>setuptools (now required at runtime)</li> |
|---|
| 1670 | </ul> |
|---|
| 1671 | </div> |
|---|
| 1672 | <div class="section" id="new-mutable-file-code"> |
|---|
| 1673 | <h2>New Mutable-File Code</h2> |
|---|
| 1674 | <ul class="simple"> |
|---|
| 1675 | <li>The mutable-file handling code (mostly used for directories) has |
|---|
| 1676 | been completely rewritten. The new scheme has a better API (with a |
|---|
| 1677 | modify() method) and is less likely to lose data when several |
|---|
| 1678 | uncoordinated writers change a file at the same time.</li> |
|---|
| 1679 | <li>In addition, a single Tahoe process will coordinate its own |
|---|
| 1680 | writes. If you make two concurrent directory-modifying wapi calls to |
|---|
| 1681 | a single tahoe node, it will internally make one of them wait for |
|---|
| 1682 | the other to complete. This prevents auto-collision (#391).</li> |
|---|
| 1683 | <li>The new mutable-file code also detects errors during publish |
|---|
| 1684 | better. Earlier releases might believe that a mutable file was |
|---|
| 1685 | published when in fact it failed.</li> |
|---|
| 1686 | </ul> |
|---|
| 1687 | </div> |
|---|
| 1688 | <div class="section" id="other-features"> |
|---|
| 1689 | <h2>other features</h2> |
|---|
| 1690 | <ul class="simple"> |
|---|
| 1691 | <li>The node now monitors its own CPU usage, as a percentage, measured |
|---|
| 1692 | every 60 seconds. 1/5/15 minute moving averages are available on the |
|---|
| 1693 | /statistics web page and via the stats-gathering interface.</li> |
|---|
| 1694 | <li>Clients now accelerate reconnection to all servers after being |
|---|
| 1695 | offline (#374). When a client is offline for a long time, it scales |
|---|
| 1696 | back reconnection attempts to approximately once per hour, so it may |
|---|
| 1697 | take a while to make the first attempt, but once any attempt |
|---|
| 1698 | succeeds, the other server connections will be retried immediately.</li> |
|---|
| 1699 | <li>A new "offloaded KeyGenerator" facility can be configured, to move |
|---|
| 1700 | RSA key generation out from, say, a wapi node, into a separate |
|---|
| 1701 | process. RSA keys can take several seconds to create, and so a wapi |
|---|
| 1702 | node which is being used for directory creation will be unavailable |
|---|
| 1703 | for anything else during this time. The Key Generator process will |
|---|
| 1704 | pre-compute a small pool of keys, to speed things up further. This |
|---|
| 1705 | also takes better advantage of multi-core CPUs, or SMP hosts.</li> |
|---|
| 1706 | <li>The node will only use a potentially-slow "du -s" command at startup |
|---|
| 1707 | (to measure how much space has been used) if the "sizelimit" |
|---|
| 1708 | parameter has been configured (to limit how much space is |
|---|
| 1709 | used). Large storage servers should turn off sizelimit until a later |
|---|
| 1710 | release improves the space-management code, since "du -s" on a |
|---|
| 1711 | terabyte filesystem can take hours.</li> |
|---|
| 1712 | <li>The Introducer now allows new announcements to replace old ones, to |
|---|
| 1713 | avoid buildups of obsolete announcements.</li> |
|---|
| 1714 | <li>Immutable files are limited to about 12GiB (when using the default |
|---|
| 1715 | 3-of-10 encoding), because larger files would be corrupted by the |
|---|
| 1716 | four-byte share-size field on the storage servers (#439). A later |
|---|
| 1717 | release will remove this limit. Earlier releases would allow >12GiB |
|---|
| 1718 | uploads, but the resulting file would be unretrievable.</li> |
|---|
| 1719 | <li>The docs/ directory has been rearranged, with old docs put in |
|---|
| 1720 | docs/historical/ and not-yet-implemented ones in docs/proposed/ .</li> |
|---|
| 1721 | <li>The Mac OS-X FUSE plugin has a significant bug fix: earlier versions |
|---|
| 1722 | would corrupt writes that used seek() instead of writing the file in |
|---|
| 1723 | linear order. The rsync tool is known to perform writes in this |
|---|
| 1724 | order. This has been fixed.</li> |
|---|
| 1725 | </ul> |
|---|
| 1726 | </div> |
|---|
| 1727 | </div> |
|---|
| 1728 | </div> |
|---|
| 1729 | </body> |
|---|
| 1730 | </html> |
|---|