Skip to content

Commit bac4452

Browse files
authored
Merge pull request #826 from jonjohnsonjr/data
Define the data field
2 parents 1f308fd + 0d98a6c commit bac4452

File tree

2 files changed

+29
-9
lines changed

2 files changed

+29
-9
lines changed

descriptor.md

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,20 +41,20 @@ The following fields contain the primary properties that constitute a Descriptor
4141

4242
- **`annotations`** *string-string map*
4343

44-
This OPTIONAL property contains arbitrary metadata for this descriptor.
45-
This OPTIONAL property MUST use the [annotation rules](annotations.md#rules).
44+
This OPTIONAL property contains arbitrary metadata for this descriptor.
45+
This OPTIONAL property MUST use the [annotation rules](annotations.md#rules).
4646

47-
Descriptors pointing to [`application/vnd.oci.image.manifest.v1+json`](manifest.md) SHOULD include the extended field `platform`, see [Image Index Property Descriptions](image-index.md#image-index-property-descriptions) for details.
48-
49-
### Reserved
47+
- **`data`** *string*
5048

51-
The following field keys are reserved and MUST NOT be used by other specifications.
49+
This OPTIONAL property contains an embedded representation of the referenced content.
50+
Values MUST conform to the Base 64 encoding, as defined in [RFC 4648][rfc4648-s4].
51+
The decoded data MUST be identical to the referenced content and SHOULD be verified against the [`digest`](#digests) and `size` fields by content consumers.
52+
See [Embedded Content](#embedded-content) for when this is appropriate.
5253

53-
- **`data`** *string*
54+
Descriptors pointing to [`application/vnd.oci.image.manifest.v1+json`](manifest.md) SHOULD include the extended field `platform`, see [Image Index Property Descriptions](image-index.md#image-index-property-descriptions) for details.
5455

55-
This key is RESERVED for future versions of the specification.
56+
### Reserved
5657

57-
All other fields may be included in other OCI specifications.
5858
Extended _Descriptor_ field additions proposed in other OCI specifications SHOULD first be considered for addition into this specification.
5959

6060
## Digests
@@ -151,6 +151,20 @@ Implementations MAY implement SHA-512 digest verification for use in descriptors
151151
When the _algorithm identifier_ is `sha512`, the _encoded_ portion MUST match `/[a-f0-9]{128}/`.
152152
Note that `[A-F]` MUST NOT be used here.
153153

154+
## Embedded Content
155+
156+
In many contexts, such as when downloading content over a network, resolving a descriptor to its content has a measurable fixed "roundtrip" latency cost.
157+
For large blobs, the fixed cost is usually inconsequential, as the majority of time will be spent actually fetching the content.
158+
For very small blobs, the fixed cost can be quite significant.
159+
160+
Implementations MAY choose to embed small pieces of content directly within a descriptor to avoid roundtrips.
161+
162+
Implementations MUST NOT populate the `data` field in situations where doing so would modify existing content identifiers.
163+
For example, a registry MUST NOT arbitrarily populate `data` fields within uploaded manifests, as that would modify the content identifier of those manifests.
164+
In contrast, a client MAY populate the `data` field before uploading a manifest, because the manifest would not yet have a content identifier in the registry.
165+
166+
Implementations SHOULD consider portability when deciding whether to embed data, as some providers are known to refuse to accept or parse manifests that exceed a certain size.
167+
154168
## Examples
155169

156170
The following example describes a [_Manifest_](manifest.md#image-manifest) with a content identifier of "sha256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270" and a size of 7682 bytes:
@@ -179,6 +193,7 @@ In the following example, the descriptor indicates that the referenced manifest
179193
[rfc3986]: https://tools.ietf.org/html/rfc3986
180194
[rfc4634-s4.1]: https://tools.ietf.org/html/rfc4634#section-4.1
181195
[rfc4634-s4.2]: https://tools.ietf.org/html/rfc4634#section-4.2
196+
[rfc4648-s4]: https://tools.ietf.org/html/rfc4648#section-4
182197
[rfc6838]: https://tools.ietf.org/html/rfc6838
183198
[rfc6838-s4.2]: https://tools.ietf.org/html/rfc6838#section-4.2
184199
[rfc7230-s2.7]: https://tools.ietf.org/html/rfc7230#section-2.7

specs-go/v1/descriptor.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ type Descriptor struct {
3535
// Annotations contains arbitrary metadata relating to the targeted content.
3636
Annotations map[string]string `json:"annotations,omitempty"`
3737

38+
// Data is an embedding of the targeted content. This is encoded as a base64
39+
// string when marshalled to JSON (automatically, by encoding/json). If
40+
// present, Data can be used directly to avoid fetching the targeted content.
41+
Data []byte `json:"data,omitempty"`
42+
3843
// Platform describes the platform which the image in the manifest runs on.
3944
//
4045
// This should only be used when referring to a manifest.

0 commit comments

Comments
 (0)