X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/96fefe6c6fc2e3bd7e4efbb0b6a7dedb9221aff7..831fac7cc24323bd48cdfd645d31153876516e55:/doc/api/methods/collections.html.textile.liquid diff --git a/doc/api/methods/collections.html.textile.liquid b/doc/api/methods/collections.html.textile.liquid index d611c5b161..bea19bb75a 100644 --- a/doc/api/methods/collections.html.textile.liquid +++ b/doc/api/methods/collections.html.textile.liquid @@ -19,7 +19,7 @@ Example UUID: @zzzzz-4zz18-0123456789abcde@ h2. Resource -Collections describe sets of files in terms of data blocks stored in Keep. See "storage in Keep":{{site.baseurl}}/api/storage.html for details. +Collections describe sets of files in terms of data blocks stored in Keep. See "Keep - Content-Addressable Storage":{{site.baseurl}}/architecture/storage.html for details. Each collection has, in addition to the "Common resource fields":{{site.baseurl}}/api/resources.html: @@ -32,19 +32,22 @@ table(table table-bordered table-condensed). |manifest_text|text||| |replication_desired|number|Minimum storage replication level desired for each data block referenced by this collection. A value of @null@ signifies that the site default replication level (typically 2) is desired.|@2@| |replication_confirmed|number|Replication level most recently confirmed by the storage system. This field is null when a collection is first created, and is reset to null when the manifest_text changes in a way that introduces a new data block. An integer value indicates the replication level of the _least replicated_ data block in the collection.|@2@, null| -|replication_confirmed_at|datetime|When replication_confirmed was confirmed. If replication_confirmed is null, this field is also null.|| +|replication_confirmed_at|datetime|When @replication_confirmed@ was confirmed. If @replication_confirmed@ is null, this field is also null.|| +|storage_classes_desired|list|An optional list of storage class names where the blocks should be saved. If not provided, the cluster's default storage class(es) will be set.|@['archival']@| +|storage_classes_confirmed|list|Storage classes most recently confirmed by the storage system. This field is an empty list when a collection is first created.|@'archival']@, @[]@| +|storage_classes_confirmed_at|datetime|When @storage_classes_confirmed@ was confirmed. If @storage_classes_confirmed@ is @[]@, this field is null.|| |trash_at|datetime|If @trash_at@ is non-null and in the past, this collection will be hidden from API calls. May be untrashed.|| |delete_at|datetime|If @delete_at@ is non-null and in the past, the collection may be permanently deleted.|| |is_trashed|boolean|True if @trash_at@ is in the past, false if not.|| |current_version_uuid|string|UUID of the collection's current version. On new collections, it'll be equal to the @uuid@ attribute.|| |version|number|Version number, starting at 1 on new collections. This attribute is read-only.|| -|preserve_version|boolean|When set to true on a current version, it will be saved on the next versionable update.|| +|preserve_version|boolean|When set to true on a current version, it will be persisted. When passing @true@ as part of a bigger update call, both current and newly created versions are persisted.|| |file_count|number|The total number of files in the collection. This attribute is read-only.|| |file_size_total|number|The sum of the file sizes in the collection. This attribute is read-only.|| h3. Conditions of creating a Collection -The @portable_data_hash@ and @manifest_text@ attributes must be provided when creating a Collection. The cryptographic digest of the supplied @manifest_text@ must match the supplied @portable_data_hash@. +If a new @portable_data_hash@ is specified when creating or updating a Collection, it must match the cryptographic digest of the supplied @manifest_text@. h3. Side effects of creating a Collection @@ -70,6 +73,8 @@ table(table table-bordered table-condensed). |_. Argument |_. Type |_. Description |_. Location |_. Example | |collection|object||query|| +The new collection's content can be initialized by providing a @manifest_text@ or @splices@ key in the provided @collection@ object (see "splices":#splices below). + h3. delete Put a Collection in the trash. This sets the @trash_at@ field to @now@ and @delete_at@ field to @now@ + token TTL. A trashed collection is invisible to most API calls unless the @include_trash@ parameter is true. @@ -82,13 +87,13 @@ table(table table-bordered table-condensed). h3. get -Gets a Collection's metadata by UUID or portable data hash. When making a request by portable data hash, the returned record will only have the @portable_data_hash@ and @manifest_text@. +Gets a Collection's metadata by UUID or portable data hash. When making a request by portable data hash, attributes other than @portable_data_hash@ and @manifest_text@ are not returned, even when requested explicitly using the @select@ parameter. Arguments: table(table table-bordered table-condensed). |_. Argument |_. Type |_. Description |_. Location |_. Example | -{background:#ccffcc}.|uuid|string|The UUID of the Collection in question.|path|| +{background:#ccffcc}.|uuid|string|The UUID or portable data hash of the Collection in question.|path|| h3. list @@ -114,6 +119,8 @@ table(table table-bordered table-condensed). {background:#ccffcc}.|uuid|string|The UUID of the Collection in question.|path|| |collection|object||query|| +The collection's content can be updated by providing a @manifest_text@ or @splices@ key in the provided @collection@ object (see "splices":#splices below). + h3. untrash Remove a Collection from the trash. This sets the @trash_at@ and @delete_at@ fields to @null@. @@ -124,3 +131,99 @@ table(table table-bordered table-condensed). |_. Argument |_. Type |_. Description |_. Location |_. Example | {background:#ccffcc}.|uuid|string|The UUID of the Collection to untrash.|path|| |ensure_unique_name|boolean (default false)|Rename collection uniquely if untrashing it would fail with a unique name conflict.|query|| + + +h3. provenance + +Returns a list of objects in the database that directly or indirectly contributed to producing this collection, such as the container request that produced this collection as output. + +The general algorithm is: + +# Visit the container request that produced this collection (via @output_uuid@ or @log_uuid@ attributes of the container request) +# Visit the input collections to that container request (via @mounts@ and @container_image@ of the container request) +# Iterate until there are no more objects to visit + +Arguments: + +table(table table-bordered table-condensed). +|_. Argument |_. Type |_. Description |_. Location |_. Example | +{background:#ccffcc}.|uuid|string|The UUID of the Collection to get provenance.|path|| + +h3. used_by + +Returns a list of objects in the database this collection directly or indirectly contributed to, such as containers that takes this collection as input. + +The general algorithm is: + +# Visit containers that take this collection as input (via @mounts@ or @container_image@ of the container) +# Visit collections produced by those containers (via @output@ or @log@ of the container) +# Iterate until there are no more objects to visit + +Arguments: + +table(table table-bordered table-condensed). +|_. Argument |_. Type |_. Description |_. Location |_. Example | +{background:#ccffcc}.|uuid|string|The UUID of the Collection to get usage.|path|| + +h2(#splices). Using "splices" to create/update collections + +The @splices@ attribute can be used with the @create@ and @update@ APIs to efficiently copy individual files and directory trees from other collections, and copy/rename/delete items within an existing collection, without transferring any file data. + +@splices@ keys indicate target paths in the new collection, and values specify sources that should be copied to the target paths. +* Each target path must be an absolute canonical path beginning with @/@. It must not contain @.@ or @..@ components, consecutive @/@ characters, or a trailing @/@ after the final component. +* Each source must be either an empty string (signifying that the target path is to be deleted), or @PDH/path@ where @PDH@ is the portable data hash of a collection on the cluster and @/path@ is a file or directory in that collection. +* In an @update@ request, sources may reference the current portable data hash of the collection being updated. + +Example: delete @foo.txt@ from a collection + +
+"collection": {
+  "splices": {
+    "/foo.txt": ""
+  }
+}
+
+ +Example: rename @foo.txt@ to @bar.txt@ in a collection with portable data hash @fa7aeb5140e2848d39b416daeef4ffc5+45@ + +
+"collection": {
+  "splices": {
+    "/foo.txt": "",
+    "/bar.txt": "fa7aeb5140e2848d39b416daeef4ffc5+45/foo.txt"
+  }
+}
+
+ +Example: delete current contents, then add content from multiple collections + +
+"collection": {
+  "splices": {
+    "/": "",
+    "/copy of collection 1": "1f4b0bc7583c2a7f9102c395f4ffc5e3+45/",
+    "/copy of collection 2": "ea10d51bcf88862dbcc36eb292017dfd+45/"
+  }
+}
+
+ +Example: replace entire collection with a copy of a subdirectory from another collection + +
+"collection": {
+  "splices": {
+    "/": "1f4b0bc7583c2a7f9102c395f4ffc5e3+45/subdir"
+  }
+}
+
+ +A target path with a non-empty source cannot be the ancestor of another target path in the same request. For example, the following request is invalid: + +
+"collection": {
+  "splices": {
+    "/foo": "fa7aeb5140e2848d39b416daeef4ffc5+45/",
+    "/foo/this_will_return_an_error": ""
+  }
+}
+