Changeset 2cad199 in trunk
- Timestamp:
- 2017-06-06T17:01:52Z (8 years ago)
- Branches:
- master
- Children:
- 0977e52, b8010ad
- Parents:
- 958f79d4 (diff), 705dc85 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified docs/about.rst ¶
r958f79d4 r2cad199 68 68 has direct attached storage (typically one or more hard disks). A "gateway" 69 69 communicates with storage nodes, and uses them to provide access to the 70 file storeover protocols such as HTTP(S), SFTP or FTP.70 grid over protocols such as HTTP(S), SFTP or FTP. 71 71 72 72 Note that you can find "client" used to refer to gateway nodes (which act as … … 95 95 the gateway can view and modify the user's data (the user *relies on* the 96 96 gateway for confidentiality and integrity), but the advantage is that the 97 user can access the file store with a client that doesn't have the gateway98 software installed, such as an Internet kiosk or cell phone.97 user can access the Tahoe-LAFS grid with a client that doesn't have the 98 gateway software installed, such as an Internet kiosk or cell phone. 99 99 100 100 Access Control -
TabularUnified docs/architecture.rst ¶
r958f79d4 r2cad199 11 11 5. `Server Selection`_ 12 12 6. `Swarming Download, Trickling Upload`_ 13 7. `The File systemLayer`_13 7. `The File Store Layer`_ 14 14 8. `Leases, Refreshing, Garbage Collection`_ 15 15 9. `File Repairer`_ … … 23 23 (See the `docs/specifications directory`_ for more details.) 24 24 25 There are three layers: the key-value store, the file system, and the25 There are three layers: the key-value store, the file store, and the 26 26 application. 27 27 … … 34 34 a few bytes and as large as tens of gigabytes are in common use. 35 35 36 The middle layer is the decentralized file system: a directed graph in which36 The middle layer is the decentralized file store: a directed graph in which 37 37 the intermediate nodes are directories and the leaf nodes are files. The leaf 38 38 nodes contain only the data -- they contain no metadata other than the length … … 41 41 different metadata if it is referred to through different edges. 42 42 43 The top layer consists of the applications using the file system.43 The top layer consists of the applications using the file store. 44 44 Allmydata.com used it for a backup service: the application periodically 45 copies files from the local disk onto the decentralized file system. We later45 copies files from the local disk onto the decentralized file store. We later 46 46 provide read-only access to those files, allowing users to recover them. 47 47 There are several other applications built on top of the Tahoe-LAFS 48 file system(see the RelatedProjects_ page of the wiki for a list).48 file store (see the RelatedProjects_ page of the wiki for a list). 49 49 50 50 .. _docs/specifications directory: https://github.com/tahoe-lafs/tahoe-lafs/tree/master/docs/specifications … … 158 158 self-authenticating, meaning that nobody can trick you into accepting a file 159 159 that doesn't match the capability you used to refer to that file. The 160 file systemlayer (described below) adds human-meaningful names atop the160 file store layer (described below) adds human-meaningful names atop the 161 161 key-value layer. 162 162 … … 320 320 321 321 322 The File systemLayer322 The File Store Layer 323 323 ==================== 324 324 325 The "file system" layer is responsible for mapping human-meaningful pathnames325 The "file store" layer is responsible for mapping human-meaningful pathnames 326 326 (directories and filenames) to pieces of data. The actual bytes inside these 327 files are referenced by capability, but the file systemlayer is where the327 files are referenced by capability, but the file store layer is where the 328 328 directory names, file names, and metadata are kept. 329 329 330 The file systemlayer is a graph of directories. Each directory contains a330 The file store layer is a graph of directories. Each directory contains a 331 331 table of named children. These children are either other directories or 332 332 files. All children are referenced by their capability. … … 354 354 ====================================== 355 355 356 When a file or directory in the virtual filesystem is no longer referenced,357 th e space that its shares occupied on each storage server can be freed,358 making room for other shares. Tahoe-LAFS uses a garbage collection ("GC") 359 mechanism to implement this space-reclamation process. Each share has one or 360 more"leases", which are managed by clients who want the file/directory to be356 When a file or directory in the file store is no longer referenced, the space 357 that its shares occupied on each storage server can be freed, making room for 358 other shares. Tahoe-LAFS uses a garbage collection ("GC") mechanism to 359 implement this space-reclamation process. Each share has one or more 360 "leases", which are managed by clients who want the file/directory to be 361 361 retained. The storage server accepts each share for a pre-defined period of 362 362 time, and is allowed to delete the share if all of the leases are cancelled … … 379 379 permanent data loss (affecting the preservation of the file). Hard drives 380 380 crash, power supplies explode, coffee spills, and asteroids strike. The goal 381 of a robust distributed file systemis to survive these setbacks.381 of a robust distributed file store is to survive these setbacks. 382 382 383 383 To work against this slow, continual loss of shares, a File Checker is used … … 487 487 488 488 The application layer can provide whatever access model is desired, built on 489 top of this capability access model. The first big user of this system so far 490 is allmydata.com. The allmydata.com access model currently works like a 491 normal web site, using username and password to give a user access to her 492 "virtual drive". In addition, allmydata.com users can share individual files 493 (using a file sharing interface built on top of the immutable file read 494 capabilities). 489 top of this capability access model. 495 490 496 491 -
TabularUnified docs/configuration.rst ¶
r958f79d4 r2cad199 677 677 ====================== 678 678 679 The Tahoe client process can run a variety of frontend file-access protocols.680 You will use these to create and retrieve files from the virtual filesystem. 681 Configuration details for each are documented in the following 682 protocol-specific guides:679 The Tahoe-LAFS client process can run a variety of frontend file access 680 protocols. You will use these to create and retrieve files from the 681 Tahoe-LAFS file store. Configuration details for each are documented in 682 the following protocol-specific guides: 683 683 684 684 HTTP … … 696 696 697 697 The main ``tahoe`` executable includes subcommands for manipulating the 698 file system, uploading/downloading files, and creating/running Tahoe698 file store, uploading/downloading files, and creating/running Tahoe 699 699 nodes. See :doc:`frontends/CLI` for details. 700 700 -
TabularUnified docs/frontends/CLI.rst ¶
r958f79d4 r2cad199 11 11 12 12 3. `Node Management`_ 13 4. `File systemManipulation`_13 4. `File Store Manipulation`_ 14 14 15 15 1. `Starting Directories`_ … … 25 25 26 26 Tahoe-LAFS provides a single executable named "``tahoe``", which can be used 27 to create and manage client/server nodes, manipulate the file system, and27 to create and manage client/server nodes, manipulate the file store, and 28 28 perform several debugging/maintenance tasks. This executable is installed 29 29 into your virtualenv when you run ``pip install tahoe-lafs``. … … 36 36 37 37 * node management: create a client/server node, start/stop/restart it 38 * file systemmanipulation: list files, upload, download, unlink, rename38 * file store manipulation: list files, upload, download, unlink, rename 39 39 * debugging: unpack cap-strings, examine share files 40 40 … … 121 121 122 122 123 File systemManipulation123 File Store Manipulation 124 124 ======================= 125 125 126 These commands let you exmaine a Tahoe-LAFS file system, providing basic126 These commands let you exmaine a Tahoe-LAFS file store, providing basic 127 127 list/upload/download/unlink/rename/mkdir functionality. They can be used as 128 128 primitives by other scripts. Most of these commands are fairly thin wrappers 129 129 around web-API calls, which are described in :doc:`webapi`. 130 130 131 By default, all file system-manipulation commands look in ``~/.tahoe/`` to131 By default, all file store manipulation commands look in ``~/.tahoe/`` to 132 132 figure out which Tahoe-LAFS node they should use. When the CLI command makes 133 133 web-API calls, it will use ``~/.tahoe/node.url`` for this purpose: a running … … 143 143 -------------------- 144 144 145 As described in :doc:`../architecture`, the Tahoe-LAFS distributed file system145 As described in :doc:`../architecture`, the Tahoe-LAFS distributed file store 146 146 consists of a collection of directories and files, each of which has a 147 147 "read-cap" or a "write-cap" (also known as a URI). Each directory is simply a … … 180 180 ``root_dir.cap`` file. 181 181 182 The Tahoe-LAFS CLI commands use the same path syntax as``scp`` and182 The Tahoe-LAFS CLI commands use a similar path syntax to ``scp`` and 183 183 ``rsync`` -- an optional ``ALIAS:`` prefix, followed by the pathname or 184 184 filename. Some commands (like "``tahoe cp``") use the lack of an alias to 185 185 mean that you want to refer to a local file, instead of something from the 186 Tahoe-LAFS filesystem. Another way to indicate this is to start the 187 pathname with "./", "~/", "~username/", or "/". 186 Tahoe-LAFS file store. Another way to indicate this is to start the 187 pathname with "./", "~/", "~username/", or "/". On Windows, aliases 188 cannot be a single character, so that it is possible to distinguish a 189 path relative to an alias from a path starting with a local drive specifier. 188 190 189 191 When you're dealing a single starting directory, the ``tahoe:`` alias is … … 334 336 ``tahoe ls subdir`` 335 337 336 This lists a subdirectory of your file system.338 This lists a subdirectory of your file store. 337 339 338 340 ``tahoe webopen`` -
TabularUnified docs/frontends/FTP-and-SFTP.rst ¶
r958f79d4 r2cad199 43 43 All Tahoe-LAFS client nodes can run a frontend SFTP server, allowing regular 44 44 SFTP clients (like ``/usr/bin/sftp``, the ``sshfs`` FUSE plugin, and many 45 others) to access the virtual filesystem. They can also run an FTP server,46 so FTPclients (like ``/usr/bin/ftp``, ``ncftp``, and others) can too. These45 others) to access the file store. They can also run an FTP server, so FTP 46 clients (like ``/usr/bin/ftp``, ``ncftp``, and others) can too. These 47 47 frontends sit at the same level as the web-API interface. 48 48 -
TabularUnified docs/frontends/webapi.rst ¶
r958f79d4 r2cad199 72 72 ====================================== 73 73 74 As described in :doc:`../architecture`, each file and directory in a Tahoe75 virtual filesystemis referenced by an identifier that combines the74 As described in :doc:`../architecture`, each file and directory in a 75 Tahoe-LAFS file store is referenced by an identifier that combines the 76 76 designation of the object with the authority to do something with it (such as 77 77 read or modify the contents). This identifier is called a "read-cap" or … … 94 94 operations are required to have no side-effects. 95 95 96 PUT is used to upload new objects into the file system, or to replace an96 PUT is used to upload new objects into the file store, or to replace an 97 97 existing link or the contents of a mutable file. DELETE is used to unlink 98 98 objects from directories. Both PUT and DELETE are required to be idempotent: … … 108 108 also be done with a POST. 109 109 110 Tahoe 's web API is designed for two different kinds of consumer. The first is111 a program that needs to manipulate the virtual file system. Such programs are110 Tahoe-LAFS' web API is designed for two different kinds of consumer. The 111 first is a program that needs to manipulate the file store. Such programs are 112 112 expected to use the RESTful interface described above. The second is a human 113 using a standard web browser to work with the file system. This user is given114 a series of HTML pages with links to download files, and forms that use POST 115 actions to upload, rename, and unlink files.113 using a standard web browser to work with the file store. This user is 114 presented with a series of HTML pages with links to download files, and forms 115 that use POST actions to upload, rename, and unlink files. 116 116 117 117 When an error occurs, the HTTP response code will be set to an appropriate … … 333 333 334 334 Now that we know how to build URLs that refer to files and directories in a 335 Tahoe virtual filesystem, what sorts of operations can we do with those URLs?335 Tahoe-LAFS file store, what sorts of operations can we do with those URLs? 336 336 This section contains a catalog of GET, PUT, DELETE, and POST operations that 337 337 can be performed on these URLs. This set of operations are aimed at programs … … 420 420 421 421 This uploads a file, and produces a file-cap for the contents, but does not 422 attach the file into the file system. No directories will be modified by422 attach the file into the file store. No directories will be modified by 423 423 this operation. The file-cap is returned as the body of the HTTP response. 424 424 … … 436 436 Create a new empty directory and return its write-cap as the HTTP response 437 437 body. This does not make the newly created directory visible from the 438 file system. The "PUT" operation is provided for backwards compatibility:438 file store. The "PUT" operation is provided for backwards compatibility: 439 439 new code should use POST. 440 440 … … 808 808 under that name. 809 809 810 Note however, that if the edge in the Tahoe filesystem points to a mutable811 file and the contents of that mutable file is changed, then the810 Note however, that if the edge in the Tahoe-LAFS file store points to a 811 mutable file and the contents of that mutable file is changed, then the 812 812 'tahoe':'linkmotime' value on that edge will *not* be updated, since the 813 813 edge itself wasn't updated -- only the mutable file was. … … 836 836 "tahoe backup" command (in Tahoe v1.3.0 and later) to set the 'mtime' and 837 837 'ctime' values when backing up files from a local filesystem into the 838 Tahoe filesystem. As of Tahoe v1.4.0, the set_children API cannot be used839 to set anything under the 'tahoe' key of the metadata dict -- if you838 Tahoe-LAFS file store. As of Tahoe v1.4.0, the set_children API cannot be 839 used to set anything under the 'tahoe' key of the metadata dict -- if you 840 840 include 'tahoe' keys in your 'metadata' arguments then it will silently 841 841 ignore those keys. … … 865 865 866 866 1. You might be confused about whether it reflects the time of the creation 867 of a link in the Tahoe filesystem (by a version of Tahoe < v1.7.0) or a868 timestamp copied in by "tahoe backup" from a local filesystem.867 of a link in the Tahoe-LAFS file store (by a version of Tahoe < v1.7.0) 868 or a timestamp copied in by "tahoe backup" from a local filesystem. 869 869 870 870 2. You might be confused about whether it is a copy of the file creation … … 896 896 897 897 This attaches a child object (either a file or directory) to a specified 898 location in the virtual filesystem. The child object is referenced by its898 location in the Tahoe-LAFS file store. The child object is referenced by its 899 899 read- or write- cap, as provided in the HTTP request body. This will create 900 900 intermediate directories as necessary. … … 1009 1009 This section describes the HTTP operations that provide support for humans 1010 1010 running a web browser. Most of these operations use HTML forms that use POST 1011 to drive the Tahoe node. This section is intended for HTML authors who want1012 to write web pages that contain forms and buttons which manipulate the Tahoe1013 filesystem.1011 to drive the Tahoe-LAFS node. This section is intended for HTML authors who 1012 want to write web pages containing user interfaces for manipulating the 1013 Tahoe-LAFS file store. 1014 1014 1015 1015 Note that for all POST operations, the arguments listed can be provided … … 1108 1108 ``POST /uri?t=mkdir`` 1109 1109 1110 This creates a new empty directory, but does not attach it to the virtual1111 filesystem.1110 This creates a new empty directory, but does not attach it to any other 1111 directory in the Tahoe-LAFS file store. 1112 1112 1113 1113 If a "redirect_to_result=true" argument is provided, then the HTTP response … … 1151 1151 1152 1152 This uploads a file, and produces a file-cap for the contents, but does not 1153 attach the file into the filesystem. No directories will be modified by1154 this operation.1153 attach the file to any directory in the Tahoe-LAFS file store. That is, no 1154 directories will be modified by this operation. 1155 1155 1156 1156 The file must be provided as the "file" field of an HTML encoded form body, … … 1700 1700 reachable from the starting directory. The path will be slash-joined, and 1701 1701 the filecap/dircap will contain a link to the object in question. This page 1702 gives immediate access to every object in the virtual filesystemsubtree.1702 gives immediate access to every object in the file store subtree. 1703 1703 1704 1704 This operation uses the same ophandle= mechanism as deep-check. The … … 1834 1834 1835 1835 The portion of the web namespace that begins with "/uri" (and "/named") is 1836 dedicated to giving users (both humans and programs) access to the Tahoe 1837 virtual filesystem. The rest of the namespace provides status information 1838 about the state of the Tahoenode.1836 dedicated to giving users (both humans and programs) access to the Tahoe-LAFS 1837 file store. The rest of the namespace provides status information about the 1838 state of the Tahoe-LAFS node. 1839 1839 1840 1840 ``GET /`` (the root page) … … 1844 1844 Node information: library versions, local nodeid, services being provided. 1845 1845 1846 File system Access Forms: create a new directory, view a file/directory by1846 File store access forms: create a new directory, view a file/directory by 1847 1847 URI, upload a file (unlinked), download a file by 1848 1848 URI. 1849 1849 1850 Grid Status: introducer information, helper information, connected storage1850 Grid status: introducer information, helper information, connected storage 1851 1851 servers. 1852 1852 … … 1995 1995 1996 1996 Summary: use explicit file- and dir- caps whenever possible, to reduce the 1997 potential for surprises when the filesystem structure is changed. 1998 1999 Tahoe provides a mutable filesystem, but the ways that the filesystem can 2000 change are limited. The only thing that can change is that the mapping from 2001 child names to child objects that each directory contains can be changed by 2002 adding a new child name pointing to an object, removing an existing child name, 2003 or changing an existing child name to point to a different object. 2004 2005 Obviously if you query Tahoe for information about the filesystem and then act 2006 to change the filesystem (such as by getting a listing of the contents of a 2007 directory and then adding a file to the directory), then the filesystem might 2008 have been changed after you queried it and before you acted upon it. However, 2009 if you use the URI instead of the pathname of an object when you act upon the 2010 object, then the only change that can happen is if the object is a directory 2011 then the set of child names it has might be different. If, on the other hand, 2012 you act upon the object using its pathname, then a different object might be in 2013 that place, which can result in more kinds of surprises. 1997 potential for surprises when the file store structure is changed. 1998 1999 Tahoe-LAFS provides a mutable file store, but the ways that the store can 2000 change are limited. The only things that can change are: 2001 * the mapping from child names to child objects inside mutable directories 2002 (by adding a new child, removing an existing child, or changing an 2003 existing child to point to a different object) 2004 * the contents of mutable files 2005 2006 Obviously if you query for information about the file store and then act 2007 to change it (such as by getting a listing of the contents of a mutable 2008 directory and then adding a file to the directory), then the store might 2009 have been changed after you queried it and before you acted upon it. 2010 However, if you use the URI instead of the pathname of an object when you 2011 act upon the object, then it will be the same object; only its contents 2012 can change (if it is mutable). If, on the other hand, you act upon the 2013 object using its pathname, then a different object might be in that place, 2014 which can result in more kinds of surprises. 2014 2015 2015 2016 For example, suppose you are writing code which recursively downloads the … … 2019 2020 then it recurses into that directory. Now, if the download and the recurse 2020 2021 actions are performed using the child's name, then the results might be 2021 wrong, because for example a child name that pointed to a sub -directory when2022 wrong, because for example a child name that pointed to a subdirectory when 2022 2023 you listed the directory might have been changed to point to a file (in which 2023 case your attempt to recurse into it would result in an error and the file 2024 would be skipped), or a child name that pointed to a file when you listed the 2025 directory might now point to a sub-directory (in which case your attempt to 2026 download the child would result in a file containing HTML text describing the 2027 sub-directory!). 2028 2029 If your recursive algorithm uses the uri of the child instead of the name of 2024 case your attempt to recurse into it would result in an error), or a child 2025 name that pointed to a file when you listed the directory might now point to 2026 a subdirectory (in which case your attempt to download the child would result 2027 in a file containing HTML text describing the subdirectory!). 2028 2029 If your recursive algorithm uses the URI of the child instead of the name of 2030 2030 the child, then those kinds of mistakes just can't happen. Note that both the 2031 2031 child's name and the child's URI are included in the results of listing the -
TabularUnified docs/garbage-collection.rst ¶
r958f79d4 r2cad199 14 14 ======== 15 15 16 When a file or directory in the virtual filesystemis no longer referenced,16 When a file or directory in a Tahoe-LAFS file store is no longer referenced, 17 17 the space that its shares occupied on each storage server can be freed, 18 18 making room for other shares. Tahoe currently uses a garbage collection -
TabularUnified docs/man/man1/tahoe.1 ¶
r958f79d4 r2cad199 2 2 .SH NAME 3 3 .PP 4 tahoe - Secure distributed file system.4 tahoe - Secure distributed file store. 5 5 .SH SYNOPSIS 6 6 .PP … … 131 131 .RS 132 132 .RE 133 .SS USING THE FILE SYSTEM133 .SS USING THE FILE STORE 134 134 .TP 135 135 .B \f[B]mkdir\f[] -
TabularUnified docs/proposed/README.lossmodel ¶
r958f79d4 r2cad199 1 1 The lossmodel.lyx file is the source document for an in-progress paper 2 that analyzes the probability of losing files stored in a Tahoe 3 Least-acces File Systemunder various scenarios. It describes:2 that analyzes the probability of losing files stored in a Tahoe-LAFS 3 file store under various scenarios. It describes: 4 4 5 5 1. How to estimate peer reliabilities, based on peer MTBF failure -
TabularUnified docs/running.rst ¶
r958f79d4 r2cad199 117 117 Prefer the command-line? Run “``tahoe --help``” (the same command-line 118 118 tool that is used to start and stop nodes serves to navigate and use the 119 decentralized file system). To get started, create a new directory and119 decentralized file store). To get started, create a new directory and 120 120 mark it as the 'tahoe:' alias by running “``tahoe create-alias tahoe``”. 121 121 Once you've done that, you can do “``tahoe ls tahoe:``” and “``tahoe cp 122 LOCALFILE tahoe:foo.txt``” to work with your file system. The Tahoe-LAFS122 LOCALFILE tahoe:foo.txt``” to work with your file store. The Tahoe-LAFS 123 123 CLI uses similar syntax to the well-known scp and rsync tools. See 124 124 :doc:`frontends/CLI` for more details. -
TabularUnified docs/specifications/dirnodes.rst ¶
r958f79d4 r2cad199 9 9 provides operations that accept files and upload them to the grid, creating 10 10 a URI in the process which securely references the file's contents. 11 The middle layer is the file system, creating a structure of directories and12 filenames resembling the traditional unix/windows filesystems. The top layer13 is the application layer, which uses the lower layers to provide useful11 The middle layer is the file store, creating a structure of directories and 12 filenames resembling the traditional Unix or Windows filesystems. The top 13 layer is the application layer, which uses the lower layers to provide useful 14 14 services to users, like a backup application, or a way to share files with 15 15 friends. 16 16 17 This document examines the middle layer, the "file system".17 This document examines the middle layer, the "file store". 18 18 19 19 1. `Key-value Store Primitives`_ 20 2. `File system goals`_21 3. `Dirnode goals`_20 2. `File Store Goals`_ 21 3. `Dirnode Goals`_ 22 22 4. `Dirnode secret values`_ 23 23 5. `Dirnode storage format`_ … … 54 54 data = get(mutable_uri) 55 55 56 File systemGoals56 File Store Goals 57 57 ================ 58 58 59 The main goal for the middle (file system) layer is to give users a way to59 The main goal for the middle (file store) layer is to give users a way to 60 60 organize the data that they have uploaded into the grid. The traditional way 61 61 to do this in computer filesystems is to put this data into files, give those … … 114 114 (and *not* read-write access) to its children. 115 115 116 Relative to the previous "vdrive -server"based scheme, the current116 Relative to the previous "vdrive server"-based scheme, the current 117 117 distributed dirnode approach gives better availability, but cannot guarantee 118 118 updateness quite as well, and requires far more network traffic for each … … 290 290 guess the length of the child names (or at least their sum). From this, the 291 291 attacker may be able to build up a graph with the same shape as the plaintext 292 file system, but with unlabeled edges and unknown file contents.292 file store, but with unlabeled edges and unknown file contents. 293 293 294 294 … … 340 340 341 341 When a backup program is run for the first time, it needs to copy a large 342 amount of data from a pre-existing filesystem into reliable storage. This343 means that a large and complex directory structure needs to be duplicated in 344 the dirnode layer. With the one-object-per-dirnode approach described here, 345 this requires as many operations as there are edges in the imported 346 filesystem graph.342 amount of data from a pre-existing local filesystem into reliable storage. 343 This means that a large and complex directory structure needs to be 344 duplicated in the dirnode layer. With the one-object-per-dirnode approach 345 described here, this requires as many operations as there are edges in the 346 imported filesystem graph. 347 347 348 348 Another approach would be to aggregate multiple directories into a single … … 405 405 keep alive. 406 406 407 After each change to the user's vdrive, the client creates a manifest and407 After each change to the user's file store, the client creates a manifest and 408 408 looks for differences from their previous version. Anything which was removed 409 409 prompts the client to send out lease-cancellation messages, allowing the data … … 423 423 424 424 The biggest benefit of this dirnode approach is that sharing individual 425 directories is almost trivial. Alice creates a subdirectory that she wants to 426 use to share files with Bob. This subdirectory is attached to Alice's 427 filesystem at "~alice/share-with-bob". She asks her filesystem for the 428 read-write directory URI for that new directory, and emails it to Bob. When 429 Bob receives the URI, he asks his own local vdrive to attach the given URI, 430 perhaps at a place named "~bob/shared-with-alice". Every time either party 431 writes a file into this directory, the other will be able to read it. If 432 Alice prefers, she can give a read-only URI to Bob instead, and then Bob will 433 be able to read files but not change the contents of the directory. Neither 434 Alice nor Bob will get access to any files above the mounted directory: there 435 are no 'parent directory' pointers. If Alice creates a nested set of 436 directories, "~alice/share-with-bob/subdir2", and gives a read-only URI to 437 share-with-bob to Bob, then Bob will be unable to write to either 438 share-with-bob/ or subdir2/. 425 directories is almost trivial. Alice creates a subdirectory that she wants 426 to use to share files with Bob. This subdirectory is attached to Alice's 427 file store at "alice:shared-with-bob". She asks her file store for the 428 read-only directory URI for that new directory, and emails it to Bob. When 429 Bob receives the URI, he attaches the given URI into one of his own 430 directories, perhaps at a place named "bob:shared-with-alice". Every time 431 Alice writes a file into this directory, Bob will be able to read it. 432 (It is also possible to share read-write URIs between users, but that makes 433 it difficult to follow the `Prime Coordination Directive`_ .) Neither 434 Alice nor Bob will get access to any files above the mounted directory: 435 there are no 'parent directory' pointers. If Alice creates a nested set of 436 directories, "alice:shared-with-bob/subdir2", and gives a read-only URI to 437 shared-with-bob to Bob, then Bob will be unable to write to either 438 shared-with-bob/ or subdir2/. 439 440 .. _`Prime Coordination Directive`: ../write_coordination.rst 439 441 440 442 A suitable UI needs to be created to allow users to easily perform this 441 sharing action: dragging a folder their vdrive to an IM or email user icon,442 for example. The UI will need to give the sending user an opportunity to 443 indicate whether they want to grant read-write or read-only access to the 444 recipient. The recipient then needs an interface to drag the new folder into 445 their vdrive and give it a home.443 sharing action: dragging a folder from their file store to an IM or email 444 user icon, for example. The UI will need to give the sending user an 445 opportunity to indicate whether they want to grant read-write or read-only 446 access to the recipient. The recipient then needs an interface to drag the 447 new folder into their file store and give it a home. 446 448 447 449 Revocation -
TabularUnified docs/specifications/uri.rst ¶
r958f79d4 r2cad199 14 14 3. `Internal Usage of URIs`_ 15 15 16 Each file and directory in a Tahoe filesystem is described by a "URI". There17 are different kinds of URIs for different kinds of objects, and there are18 different kinds of URIs to provide different kinds of access to those16 Each file and directory in a Tahoe-LAFS file store is described by a "URI". 17 There are different kinds of URIs for different kinds of objects, and there 18 are different kinds of URIs to provide different kinds of access to those 19 19 objects. Each URI is a string representation of a "capability" or "cap", and 20 20 there are read-caps, write-caps, verify-caps, and others. … … 42 42 ========= 43 43 44 The lowest layer of the Tahoe architecture (the "grid") is reponsible for 45 mapping URIs to data. This is basically a distributed hash table, in which 46 the URI is the key, and some sequence of bytes is the value. 44 The lowest layer of the Tahoe architecture (the "key-value store") is 45 reponsible for mapping URIs to data. This is basically a distributed 46 hash table, in which the URI is the key, and some sequence of bytes is 47 the value. 47 48 48 49 There are two kinds of entries in this table: immutable and mutable. For … … 54 55 filled with different pieces of data at different times. 55 56 56 It is important to note that the "files" described by these URIs are just a57 bunchof bytes, and that **no** filenames or other metadata is retained at58 this layer. The vdrive layer (which sits above the grid layer) is entirely59 responsible for directories and filenames and the like.57 It is important to note that the values referenced by these URIs are just 58 sequences of bytes, and that **no** filenames or other metadata is retained at 59 this layer. The file store layer (which sits above the key-value store layer) 60 is entirely responsible for directories and filenames and the like. 60 61 61 62 CHK URIs … … 165 166 ============== 166 167 167 The grid layer provides a mapping from URI to data. To turn this into a graph168 of directories and files, the "vdrive" layer (which sits on top of the grid 169 layer) needs to keep track of "directory nodes", or "dirnodes" for short. 170 :doc:`dirnodes` describes how these work.168 The key-value store layer provides a mapping from URI to data. To turn this 169 into a graph of directories and files, the "file store" layer (which sits on 170 top of the key-value store layer) needs to keep track of "directory nodes", 171 or "dirnodes" for short. :doc:`dirnodes` describes how these work. 171 172 172 173 Dirnodes are contained inside mutable files, and are thus simply a particular -
TabularUnified docs/write_coordination.rst ¶
r958f79d4 r2cad199 15 15 write. 16 16 17 If mutable parts of a file systemare accessed via sshfs, only a single17 If mutable parts of a file store are accessed via sshfs, only a single 18 18 sshfs mount should be used. There may be data loss if mutable files or 19 19 directories are accessed via two sshfs mounts, or written both via sshfs -
TabularUnified src/allmydata/scripts/cli.py ¶
r958f79d4 r2cad199 10 10 _default_nodedir = get_default_nodedir() 11 11 12 class File systemOptions(BaseOptions):12 class FileStoreOptions(BaseOptions): 13 13 optParameters = [ 14 14 ["node-url", "u", None, … … 47 47 48 48 49 class MakeDirectoryOptions(File systemOptions):49 class MakeDirectoryOptions(FileStoreOptions): 50 50 optParameters = [ 51 51 ("format", None, None, "Create a directory with the given format: SDMF or MDMF (case-insensitive)"), … … 62 62 description = """Create a new directory, either unlinked or as a subdirectory.""" 63 63 64 class AddAliasOptions(File systemOptions):64 class AddAliasOptions(FileStoreOptions): 65 65 def parseArgs(self, alias, cap): 66 66 self.alias = argv_to_unicode(alias) … … 72 72 description = """Add a new alias for an existing directory.""" 73 73 74 class CreateAliasOptions(File systemOptions):74 class CreateAliasOptions(FileStoreOptions): 75 75 def parseArgs(self, alias): 76 76 self.alias = argv_to_unicode(alias) … … 81 81 description = """Create a new directory and add an alias for it.""" 82 82 83 class ListAliasesOptions(File systemOptions):83 class ListAliasesOptions(FileStoreOptions): 84 84 synopsis = "[options]" 85 85 description = """Display a table of all configured aliases.""" … … 88 88 ] 89 89 90 class ListOptions(File systemOptions):90 class ListOptions(FileStoreOptions): 91 91 optFlags = [ 92 92 ("long", "l", "Use long format: show file sizes, and timestamps."), … … 125 125 The size of mutable files or unknown objects is shown as '?'. 126 126 127 The date/time shows when this link in the Tahoe filesystem was128 lastmodified.127 The date/time shows when this link in the Tahoe grid was last 128 modified. 129 129 """ 130 130 131 class GetOptions(File systemOptions):131 class GetOptions(FileStoreOptions): 132 132 def parseArgs(self, arg1, arg2=None): 133 133 # tahoe get FOO |less # write to stdout … … 157 157 """ 158 158 159 class PutOptions(File systemOptions):159 class PutOptions(FileStoreOptions): 160 160 optFlags = [ 161 161 ("mutable", "m", "Create a mutable file instead of an immutable one (like --format=SDMF)"), … … 203 203 """ 204 204 205 class CpOptions(File systemOptions):205 class CpOptions(FileStoreOptions): 206 206 optFlags = [ 207 207 ("recursive", "r", "Copy source directory recursively."), … … 250 250 """ 251 251 252 class UnlinkOptions(File systemOptions):252 class UnlinkOptions(FileStoreOptions): 253 253 def parseArgs(self, where): 254 254 self.where = argv_to_unicode(where) … … 261 261 description = "Remove a named file from its parent directory." 262 262 263 class MvOptions(File systemOptions):263 class MvOptions(FileStoreOptions): 264 264 def parseArgs(self, frompath, topath): 265 265 self.from_file = argv_to_unicode(frompath) … … 280 280 """ 281 281 282 class LnOptions(File systemOptions):282 class LnOptions(FileStoreOptions): 283 283 def parseArgs(self, frompath, topath): 284 284 self.from_file = argv_to_unicode(frompath) … … 312 312 pass 313 313 314 class BackupOptions(File systemOptions):314 class BackupOptions(FileStoreOptions): 315 315 optFlags = [ 316 316 ("verbose", "v", "Be noisy about what is happening."), … … 381 381 TO/Archives/(new) TO/Latest'.""" 382 382 383 class WebopenOptions(File systemOptions):383 class WebopenOptions(FileStoreOptions): 384 384 optFlags = [ 385 385 ("info", "i", "Open the t=info page for the file"), … … 395 395 page.""" 396 396 397 class ManifestOptions(File systemOptions):397 class ManifestOptions(FileStoreOptions): 398 398 optFlags = [ 399 399 ("storage-index", "s", "Only print storage index strings, not pathname+cap."), … … 410 410 starting point.""" 411 411 412 class StatsOptions(File systemOptions):412 class StatsOptions(FileStoreOptions): 413 413 optFlags = [ 414 414 ("raw", "r", "Display raw JSON data instead of parsed"), … … 422 422 given starting point.""" 423 423 424 class CheckOptions(File systemOptions):424 class CheckOptions(FileStoreOptions): 425 425 optFlags = [ 426 426 ("raw", None, "Display raw JSON data instead of parsed."), … … 438 438 found.""" 439 439 440 class DeepCheckOptions(File systemOptions):440 class DeepCheckOptions(FileStoreOptions): 441 441 optFlags = [ 442 442 ("raw", None, "Display raw JSON data instead of parsed."), -
TabularUnified src/allmydata/scripts/runner.py ¶
r958f79d4 r2cad199 45 45 + GROUP("Debugging") 46 46 + debug.subCommands 47 + GROUP("Using the file system")47 + GROUP("Using the file store") 48 48 + cli.subCommands 49 49 + magic_folder_cli.subCommands
Note: See TracChangeset
for help on using the changeset viewer.