''''''''''''''''''''''''''
New Features
------------
- Immutable Directories
Tahoe-LAFS can now create and handle immutable
directories. (`607`_, `833`_, `931`_) These are read just like
normal directories, but are "deep-immutable", meaning that all their
children (and everything reachable from those children) must be
immutable objects (i.e. immutable or literal files, and other
immutable directories).
These directories must be created in a single webapi call that
provides all of the children at once. (Since they cannot be changed
after creation, the usual create/add/add sequence cannot be used.)
They have URIs that start with "URI:DIR2-CHK:" or "URI:DIR2-LIT:",
and are described on the human-facing web interface (aka the "WUI")
with a "DIR-IMM" abbreviation (as opposed to "DIR" for the usual
read-write directories and "DIR-RO" for read-only directories).
Tahoe-LAFS releases before 1.6.0 cannot read the contents of an
immutable directory. 1.5.0 will tolerate their presence in a
directory listing (and display it as "unknown"). 1.4.1 and earlier
cannot tolerate them: a DIR-IMM child in any directory will prevent
the listing of that directory.
Immutable directories are repairable, just like normal immutable
files.
The webapi "POST t=mkdir-immutable" call is used to create immutable
directories. See `webapi.rst`_ for details.
- "tahoe backup" now creates immutable directories, backupdb has
dircache
The "tahoe backup" command has been enhanced to create immutable
directories (in previous releases, it created read-only mutable
directories) (`828`_). This is significantly faster, since it does
not need to create an RSA keypair for each new directory. Also
"DIR-IMM" immutable directories are repairable, unlike "DIR-RO"
read-only mutable directories at present. (A future Tahoe-LAFS
release should also be able to repair DIR-RO.)
In addition, the backupdb (used by "tahoe backup" to remember what
it has already copied) has been enhanced to store information about
existing immutable directories. This allows it to re-use directories
that have moved but still contain identical contents, or that have
been deleted and later replaced. (The 1.5.0 "tahoe backup" command
could only re-use directories that were in the same place as they
were in the immediately previous backup.) With this change, the
backup process no longer needs to read the previous snapshot out of
the Tahoe-LAFS grid, reducing the network load
considerably. (`606`_)
A "null backup" (in which nothing has changed since the previous
backup) will require only two Tahoe-side operations: one to add an
Archives/$TIMESTAMP entry, and a second to update the Latest/
link. On the local disk side, it will readdir() all your local
directories and stat() all your local files.
If you've been using "tahoe backup" for a while, you will notice
that your first use of it after upgrading to 1.6.0 may take a long
time: it must create proper immutable versions of all the old
read-only mutable directories. This process won't take as long as
the initial backup (where all the file contents had to be uploaded
too): it will require time proportional to the number and size of
your directories. After this initial pass, all subsequent passes
should take a tiny fraction of the time.
As noted above, Tahoe-LAFS versions earlier than 1.5.0 cannot list a
directory containing an immutable subdirectory. Tahoe-LAFS versions
earlier than 1.6.0 cannot read the contents of an immutable
directory.
The "tahoe backup" command has been improved to skip over unreadable
objects (like device files, named pipes, and files with permissions
that prevent the command from reading their contents), instead of
throwing an exception and terminating the backup process. It also
skips over symlinks, because these cannot be represented faithfully
in the Tahoe-side filesystem. A warning message will be emitted each
time something is skipped. (`729`_, `850`_, `641`_)
- "create-node" command added, "create-client" now implies
--no-storage
The basic idea behind Tahoe-LAFS's client+server and client-only
processes is that you are creating a general-purpose Tahoe-LAFS
"node" process, which has several components that can be
activated. Storage service is one of these optional components, as
is the Helper, FTP server, and SFTP server. Web gateway
functionality is nominally on this list, but it is always active; a
future release will make it optional. There are three special
purpose servers that can't currently be run as a component in a
node: introducer, key-generator, and stats-gatherer.
So now "tahoe create-node" will create a Tahoe-LAFS node process,
and after creation you can edit its tahoe.cfg to enable or disable
the desired services. It is a more general-purpose replacement for
"tahoe create-client". The default configuration has storage
service enabled. For convenience, the "--no-storage" argument makes
a tahoe.cfg file that disables storage service. (`760`_)
"tahoe create-client" has been changed to create a Tahoe-LAFS node
without a storage service. It is equivalent to "tahoe create-node
--no-storage". This helps to reduce the confusion surrounding the
use of a command with "client" in its name to create a storage
*server*. Use "tahoe create-client" to create a purely client-side
node. If you want to offer storage to the grid, use "tahoe
create-node" instead.
In the future, other services will be added to the node, and they
will be controlled through options in tahoe.cfg . The most important
of these services may get additional --enable-XYZ or --disable-XYZ
arguments to "tahoe create-node".
- Performance Improvements
Download of immutable files begins as soon as the downloader has
located the K necessary shares (`928`_, `287`_). In both the
previous and current releases, a downloader will first issue queries
to all storage servers on the grid to locate shares before it begins
downloading the shares. In previous releases of Tahoe-LAFS, download
would not begin until all storage servers on the grid had replied to
the query, at which point K shares would be chosen for download from
among the shares that were located. In this release, download begins
as soon as any K shares are located. This means that downloads start
sooner, which is particularly important if there is a server on the
grid that is extremely slow or even hung in such a way that it will
never respond. In previous releases such a server would have a
negative impact on all downloads from that grid. In this release,
such a server will have no impact on downloads, as long as K shares
can be found on other, quicker, servers. This also means that
downloads now use the "best-alacrity" servers that they talk to, as
measured by how quickly the servers reply to the initial query. This
might cause downloads to go faster, especially on grids with
heterogeneous servers or geographical dispersion.
Minor Changes
-------------
- The webapi acquired a new "t=mkdir-with-children" command, to create
and populate a directory in a single call. This is significantly
faster than using separate "t=mkdir" and "t=set-children" operations
(it uses one gateway-to-grid roundtrip, instead of three or
four). (`533`_)
- The t=set-children (note the hyphen) operation is now documented in
webapi.rst, and is the new preferred spelling of the
old t=set_children (with an underscore). The underscore version
remains for backwards compatibility. (`381`_, `927`_)
- The tracebacks produced by errors in CLI tools should now be in
plain text, instead of HTML (which is unreadable outside of a
browser). (`646`_)
- The [storage]reserved_space configuration knob (which causes the
storage server to refuse shares when available disk space drops
below a threshold) should work on Windows now, not just
UNIX. (`637`_)
- "tahoe cp" should now exit with status "1" if it cannot figure out a
suitable target filename, such as when you copy from a bare
filecap. (`761`_)
- "tahoe get" no longer creates a zero-length file upon
error. (`121`_)
- "tahoe ls" can now list single files. (`457`_)
- "tahoe deep-check --repair" should tolerate repair failures now,
instead of halting traversal. (`874`_, `786`_)
- "tahoe create-alias" no longer corrupts the aliases file if it had
previously been edited to have no trailing newline. (`741`_)
- Many small packaging improvements were made to facilitate the
"tahoe-lafs" package being included in Ubuntu. Several mac/win32
binary libraries were removed, some figleaf code-coverage files were
removed, a bundled copy of darcsver-1.2.1 was removed, and
additional licensing text was added.
- Several DeprecationWarnings for python2.6 were silenced. (`859`_)
- The checker --add-lease option would sometimes fail for shares
stored on old (Tahoe v1.2.0) servers. (`875`_)
- The documentation for installing on Windows (docs/quickstart.rst)
has been improved. (`773`_)
For other changes not mentioned here, see
<https://tahoe-lafs.org/trac/tahoe-lafs/query?milestone=1.6.0&keywords=!~news-done>.
To include the tickets mentioned above, go to
<https://tahoe-lafs.org/trac/tahoe-lafs/query?milestone=1.6.0>.
.. _`121`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/121
.. _`287`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/287
.. _`381`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/381
.. _`457`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/457
.. _`533`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/533
.. _`577`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/577
.. _`606`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/606
.. _`607`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/607
.. _`637`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/637
.. _`641`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/641
.. _`646`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/646
.. _`681`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/681
.. _`729`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/729
.. _`741`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/741
.. _`760`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/760
.. _`761`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/761
.. _`773`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/773
.. _`786`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/786
.. _`828`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/828
.. _`833`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/833
.. _`859`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/859
.. _`874`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/874
.. _`875`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/875
.. _`931`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/931
.. _`837`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/837
.. _`850`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/850
.. _`927`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/927
.. _`928`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/928
.. _`939`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/939
.. _`948`: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/948
.. _webapi.rst: docs/frontends/webapi.rst