0
Fork 0
mirror of https://github.com/project-zot/zot.git synced 2024-12-16 21:56:37 -05:00

fix(parse): lock storage while reading using image store (#1719)

Signed-off-by: Laurentiu Niculae <niculae.laurentiu1@gmail.com>
This commit is contained in:
LaurentiuNiculae 2023-08-23 19:29:23 +03:00 committed by GitHub
parent ca2904762a
commit 94429a82df
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -4,6 +4,7 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"time"
godigest "github.com/opencontainers/go-digest" godigest "github.com/opencontainers/go-digest"
ispec "github.com/opencontainers/image-spec/specs-go/v1" ispec "github.com/opencontainers/image-spec/specs-go/v1"
@ -44,6 +45,11 @@ func ParseStorage(metaDB mTypes.MetaDB, storeController storage.StoreController,
func ParseRepo(repo string, metaDB mTypes.MetaDB, storeController storage.StoreController, log log.Logger) error { func ParseRepo(repo string, metaDB mTypes.MetaDB, storeController storage.StoreController, log log.Logger) error {
imageStore := storeController.GetImageStore(repo) imageStore := storeController.GetImageStore(repo)
var lockLatency time.Time
imageStore.RLock(&lockLatency)
defer imageStore.RUnlock(&lockLatency)
indexBlob, err := imageStore.GetIndexContent(repo) indexBlob, err := imageStore.GetIndexContent(repo)
if err != nil { if err != nil {
log.Error().Err(err).Str("repository", repo).Msg("load-repo: failed to read index.json for repo") log.Error().Err(err).Str("repository", repo).Msg("load-repo: failed to read index.json for repo")
@ -246,6 +252,11 @@ func getCosignSignatureLayersInfo(
return layers, err return layers, err
} }
var lockLatency time.Time
imageStore.RLock(&lockLatency)
defer imageStore.RUnlock(&lockLatency)
for _, layer := range manifestContent.Layers { for _, layer := range manifestContent.Layers {
layerContent, err := imageStore.GetBlobContent(repo, layer.Digest) layerContent, err := imageStore.GetBlobContent(repo, layer.Digest)
if err != nil { if err != nil {
@ -293,6 +304,11 @@ func getNotationSignatureLayersInfo(
layer := manifestContent.Layers[0].Digest layer := manifestContent.Layers[0].Digest
var lockLatency time.Time
imageStore.RLock(&lockLatency)
defer imageStore.RUnlock(&lockLatency)
layerContent, err := imageStore.GetBlobContent(repo, layer) layerContent, err := imageStore.GetBlobContent(repo, layer)
if err != nil { if err != nil {
log.Error().Err(err).Str("repository", repo).Str("reference", manifestDigest).Str("layerDigest", layer.String()).Msg( log.Error().Err(err).Str("repository", repo).Str("reference", manifestDigest).Str("layerDigest", layer.String()).Msg(
@ -326,6 +342,11 @@ func NewManifestData(repoName string, manifestBlob []byte, imageStore storageTyp
return mTypes.ManifestData{}, err return mTypes.ManifestData{}, err
} }
var lockLatency time.Time
imageStore.RLock(&lockLatency)
defer imageStore.RUnlock(&lockLatency)
configBlob, err := imageStore.GetBlobContent(repoName, manifestContent.Config.Digest) configBlob, err := imageStore.GetBlobContent(repoName, manifestContent.Config.Digest)
if err != nil { if err != nil {
return mTypes.ManifestData{}, err return mTypes.ManifestData{}, err