Signed-off-by: Michal Minář <miminar@redhat.com>
| ... | ... |
@@ -13,10 +13,21 @@ import ( |
| 13 | 13 |
|
| 14 | 14 |
// V2MetadataService maps layer IDs to a set of known metadata for |
| 15 | 15 |
// the layer. |
| 16 |
-type V2MetadataService struct {
|
|
| 16 |
+type V2MetadataService interface {
|
|
| 17 |
+ GetMetadata(diffID layer.DiffID) ([]V2Metadata, error) |
|
| 18 |
+ GetDiffID(dgst digest.Digest) (layer.DiffID, error) |
|
| 19 |
+ Add(diffID layer.DiffID, metadata V2Metadata) error |
|
| 20 |
+ TagAndAdd(diffID layer.DiffID, hmacKey []byte, metadata V2Metadata) error |
|
| 21 |
+ Remove(metadata V2Metadata) error |
|
| 22 |
+} |
|
| 23 |
+ |
|
| 24 |
+// v2MetadataService implements V2MetadataService |
|
| 25 |
+type v2MetadataService struct {
|
|
| 17 | 26 |
store Store |
| 18 | 27 |
} |
| 19 | 28 |
|
| 29 |
+var _ V2MetadataService = &v2MetadataService{}
|
|
| 30 |
+ |
|
| 20 | 31 |
// V2Metadata contains the digest and source repository information for a layer. |
| 21 | 32 |
type V2Metadata struct {
|
| 22 | 33 |
Digest digest.Digest |
| ... | ... |
@@ -90,30 +101,30 @@ type authConfigKeyInput struct {
|
| 90 | 90 |
const maxMetadata = 50 |
| 91 | 91 |
|
| 92 | 92 |
// NewV2MetadataService creates a new diff ID to v2 metadata mapping service. |
| 93 |
-func NewV2MetadataService(store Store) *V2MetadataService {
|
|
| 94 |
- return &V2MetadataService{
|
|
| 93 |
+func NewV2MetadataService(store Store) V2MetadataService {
|
|
| 94 |
+ return &v2MetadataService{
|
|
| 95 | 95 |
store: store, |
| 96 | 96 |
} |
| 97 | 97 |
} |
| 98 | 98 |
|
| 99 |
-func (serv *V2MetadataService) diffIDNamespace() string {
|
|
| 99 |
+func (serv *v2MetadataService) diffIDNamespace() string {
|
|
| 100 | 100 |
return "v2metadata-by-diffid" |
| 101 | 101 |
} |
| 102 | 102 |
|
| 103 |
-func (serv *V2MetadataService) digestNamespace() string {
|
|
| 103 |
+func (serv *v2MetadataService) digestNamespace() string {
|
|
| 104 | 104 |
return "diffid-by-digest" |
| 105 | 105 |
} |
| 106 | 106 |
|
| 107 |
-func (serv *V2MetadataService) diffIDKey(diffID layer.DiffID) string {
|
|
| 107 |
+func (serv *v2MetadataService) diffIDKey(diffID layer.DiffID) string {
|
|
| 108 | 108 |
return string(digest.Digest(diffID).Algorithm()) + "/" + digest.Digest(diffID).Hex() |
| 109 | 109 |
} |
| 110 | 110 |
|
| 111 |
-func (serv *V2MetadataService) digestKey(dgst digest.Digest) string {
|
|
| 111 |
+func (serv *v2MetadataService) digestKey(dgst digest.Digest) string {
|
|
| 112 | 112 |
return string(dgst.Algorithm()) + "/" + dgst.Hex() |
| 113 | 113 |
} |
| 114 | 114 |
|
| 115 | 115 |
// GetMetadata finds the metadata associated with a layer DiffID. |
| 116 |
-func (serv *V2MetadataService) GetMetadata(diffID layer.DiffID) ([]V2Metadata, error) {
|
|
| 116 |
+func (serv *v2MetadataService) GetMetadata(diffID layer.DiffID) ([]V2Metadata, error) {
|
|
| 117 | 117 |
jsonBytes, err := serv.store.Get(serv.diffIDNamespace(), serv.diffIDKey(diffID)) |
| 118 | 118 |
if err != nil {
|
| 119 | 119 |
return nil, err |
| ... | ... |
@@ -128,7 +139,7 @@ func (serv *V2MetadataService) GetMetadata(diffID layer.DiffID) ([]V2Metadata, e |
| 128 | 128 |
} |
| 129 | 129 |
|
| 130 | 130 |
// GetDiffID finds a layer DiffID from a digest. |
| 131 |
-func (serv *V2MetadataService) GetDiffID(dgst digest.Digest) (layer.DiffID, error) {
|
|
| 131 |
+func (serv *v2MetadataService) GetDiffID(dgst digest.Digest) (layer.DiffID, error) {
|
|
| 132 | 132 |
diffIDBytes, err := serv.store.Get(serv.digestNamespace(), serv.digestKey(dgst)) |
| 133 | 133 |
if err != nil {
|
| 134 | 134 |
return layer.DiffID(""), err
|
| ... | ... |
@@ -139,7 +150,7 @@ func (serv *V2MetadataService) GetDiffID(dgst digest.Digest) (layer.DiffID, erro |
| 139 | 139 |
|
| 140 | 140 |
// Add associates metadata with a layer DiffID. If too many metadata entries are |
| 141 | 141 |
// present, the oldest one is dropped. |
| 142 |
-func (serv *V2MetadataService) Add(diffID layer.DiffID, metadata V2Metadata) error {
|
|
| 142 |
+func (serv *v2MetadataService) Add(diffID layer.DiffID, metadata V2Metadata) error {
|
|
| 143 | 143 |
oldMetadata, err := serv.GetMetadata(diffID) |
| 144 | 144 |
if err != nil {
|
| 145 | 145 |
oldMetadata = nil |
| ... | ... |
@@ -174,13 +185,13 @@ func (serv *V2MetadataService) Add(diffID layer.DiffID, metadata V2Metadata) err |
| 174 | 174 |
|
| 175 | 175 |
// TagAndAdd amends the given "meta" for hmac hashed by the given "hmacKey" and associates it with a layer |
| 176 | 176 |
// DiffID. If too many metadata entries are present, the oldest one is dropped. |
| 177 |
-func (serv *V2MetadataService) TagAndAdd(diffID layer.DiffID, hmacKey []byte, meta V2Metadata) error {
|
|
| 177 |
+func (serv *v2MetadataService) TagAndAdd(diffID layer.DiffID, hmacKey []byte, meta V2Metadata) error {
|
|
| 178 | 178 |
meta.HMAC = ComputeV2MetadataHMAC(hmacKey, &meta) |
| 179 | 179 |
return serv.Add(diffID, meta) |
| 180 | 180 |
} |
| 181 | 181 |
|
| 182 | 182 |
// Remove unassociates a metadata entry from a layer DiffID. |
| 183 |
-func (serv *V2MetadataService) Remove(metadata V2Metadata) error {
|
|
| 183 |
+func (serv *v2MetadataService) Remove(metadata V2Metadata) error {
|
|
| 184 | 184 |
diffID, err := serv.GetDiffID(metadata.Digest) |
| 185 | 185 |
if err != nil {
|
| 186 | 186 |
return err |
| ... | ... |
@@ -50,7 +50,7 @@ func (e ImageConfigPullError) Error() string {
|
| 50 | 50 |
} |
| 51 | 51 |
|
| 52 | 52 |
type v2Puller struct {
|
| 53 |
- V2MetadataService *metadata.V2MetadataService |
|
| 53 |
+ V2MetadataService metadata.V2MetadataService |
|
| 54 | 54 |
endpoint registry.APIEndpoint |
| 55 | 55 |
config *ImagePullConfig |
| 56 | 56 |
repoInfo *registry.RepositoryInfo |
| ... | ... |
@@ -134,7 +134,7 @@ type v2LayerDescriptor struct {
|
| 134 | 134 |
digest digest.Digest |
| 135 | 135 |
repoInfo *registry.RepositoryInfo |
| 136 | 136 |
repo distribution.Repository |
| 137 |
- V2MetadataService *metadata.V2MetadataService |
|
| 137 |
+ V2MetadataService metadata.V2MetadataService |
|
| 138 | 138 |
tmpFile *os.File |
| 139 | 139 |
verifier digest.Verifier |
| 140 | 140 |
src distribution.Descriptor |
| ... | ... |
@@ -41,7 +41,7 @@ type PushResult struct {
|
| 41 | 41 |
} |
| 42 | 42 |
|
| 43 | 43 |
type v2Pusher struct {
|
| 44 |
- v2MetadataService *metadata.V2MetadataService |
|
| 44 |
+ v2MetadataService metadata.V2MetadataService |
|
| 45 | 45 |
ref reference.Named |
| 46 | 46 |
endpoint registry.APIEndpoint |
| 47 | 47 |
repoInfo *registry.RepositoryInfo |
| ... | ... |
@@ -243,7 +243,7 @@ func manifestFromBuilder(ctx context.Context, builder distribution.ManifestBuild |
| 243 | 243 |
|
| 244 | 244 |
type v2PushDescriptor struct {
|
| 245 | 245 |
layer layer.Layer |
| 246 |
- v2MetadataService *metadata.V2MetadataService |
|
| 246 |
+ v2MetadataService metadata.V2MetadataService |
|
| 247 | 247 |
hmacKey []byte |
| 248 | 248 |
repoInfo reference.Named |
| 249 | 249 |
ref reference.Named |