mirror of
https://github.com/project-zot/zot.git
synced 2026-06-17 04:48:26 +08:00
feat(refator): refactoring repodb into meta (#1626)
Signed-off-by: Laurentiu Niculae <niculae.laurentiu1@gmail.com>
This commit is contained in:
@@ -20,7 +20,8 @@ import (
|
||||
"zotregistry.io/zot/pkg/common"
|
||||
"zotregistry.io/zot/pkg/extensions/monitoring"
|
||||
"zotregistry.io/zot/pkg/log"
|
||||
"zotregistry.io/zot/pkg/meta/repodb"
|
||||
"zotregistry.io/zot/pkg/meta"
|
||||
mTypes "zotregistry.io/zot/pkg/meta/types"
|
||||
"zotregistry.io/zot/pkg/storage"
|
||||
storageCommon "zotregistry.io/zot/pkg/storage/common"
|
||||
storageConstants "zotregistry.io/zot/pkg/storage/constants"
|
||||
@@ -31,14 +32,14 @@ import (
|
||||
type LocalRegistry struct {
|
||||
storeController storage.StoreController
|
||||
tempStorage OciLayoutStorage
|
||||
repoDB repodb.RepoDB
|
||||
metaDB mTypes.MetaDB
|
||||
log log.Logger
|
||||
}
|
||||
|
||||
func NewLocalRegistry(storeController storage.StoreController, repoDB repodb.RepoDB, log log.Logger) Local {
|
||||
func NewLocalRegistry(storeController storage.StoreController, metaDB mTypes.MetaDB, log log.Logger) Local {
|
||||
return &LocalRegistry{
|
||||
storeController: storeController,
|
||||
repoDB: repoDB,
|
||||
metaDB: metaDB,
|
||||
// first we sync from remote (using containers/image copy from docker:// to oci:) to a temp imageStore
|
||||
// then we copy the image from tempStorage to zot's storage using ImageStore APIs
|
||||
tempStorage: NewOciLayoutStorage(storeController),
|
||||
@@ -163,14 +164,14 @@ func (registry *LocalRegistry) CommitImage(imageReference types.ImageReference,
|
||||
return err
|
||||
}
|
||||
|
||||
if registry.repoDB != nil {
|
||||
err = repodb.SetImageMetaFromInput(repo, reference, mediaType,
|
||||
manifestDigest, manifestBlob, imageStore, registry.repoDB, registry.log)
|
||||
if registry.metaDB != nil {
|
||||
err = meta.SetImageMetaFromInput(repo, reference, mediaType,
|
||||
manifestDigest, manifestBlob, imageStore, registry.metaDB, registry.log)
|
||||
if err != nil {
|
||||
return fmt.Errorf("repoDB: failed to set metadata for image '%s %s': %w", repo, reference, err)
|
||||
return fmt.Errorf("metaDB: failed to set metadata for image '%s %s': %w", repo, reference, err)
|
||||
}
|
||||
|
||||
registry.log.Debug().Str("repo", repo).Str("reference", reference).Msg("repoDB: successfully set metadata for image")
|
||||
registry.log.Debug().Str("repo", repo).Str("reference", reference).Msg("metaDB: successfully set metadata for image")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -221,9 +222,9 @@ func (registry *LocalRegistry) copyManifest(repo string, manifestContent []byte,
|
||||
return err
|
||||
}
|
||||
|
||||
if registry.repoDB != nil {
|
||||
err = repodb.SetImageMetaFromInput(repo, reference, ispec.MediaTypeImageManifest,
|
||||
digest, manifestContent, imageStore, registry.repoDB, registry.log)
|
||||
if registry.metaDB != nil {
|
||||
err = meta.SetImageMetaFromInput(repo, reference, ispec.MediaTypeImageManifest,
|
||||
digest, manifestContent, imageStore, registry.metaDB, registry.log)
|
||||
if err != nil {
|
||||
registry.log.Error().Str("errorType", common.TypeOf(err)).
|
||||
Err(err).Msg("couldn't set metadata from input")
|
||||
|
||||
@@ -18,24 +18,25 @@ import (
|
||||
"zotregistry.io/zot/pkg/extensions/sync/constants"
|
||||
client "zotregistry.io/zot/pkg/extensions/sync/httpclient"
|
||||
"zotregistry.io/zot/pkg/log"
|
||||
"zotregistry.io/zot/pkg/meta/repodb"
|
||||
"zotregistry.io/zot/pkg/meta"
|
||||
mTypes "zotregistry.io/zot/pkg/meta/types"
|
||||
"zotregistry.io/zot/pkg/storage"
|
||||
)
|
||||
|
||||
type CosignReference struct {
|
||||
client *client.Client
|
||||
storeController storage.StoreController
|
||||
repoDB repodb.RepoDB
|
||||
metaDB mTypes.MetaDB
|
||||
log log.Logger
|
||||
}
|
||||
|
||||
func NewCosignReference(httpClient *client.Client, storeController storage.StoreController,
|
||||
repoDB repodb.RepoDB, log log.Logger,
|
||||
metaDB mTypes.MetaDB, log log.Logger,
|
||||
) CosignReference {
|
||||
return CosignReference{
|
||||
client: httpClient,
|
||||
storeController: storeController,
|
||||
repoDB: repoDB,
|
||||
metaDB: metaDB,
|
||||
log: log,
|
||||
}
|
||||
}
|
||||
@@ -145,9 +146,9 @@ func (ref CosignReference) SyncReferences(localRepo, remoteRepo, subjectDigestSt
|
||||
ref.log.Info().Str("repository", localRepo).Str("subject", subjectDigestStr).
|
||||
Msg("successfully synced cosign reference for image")
|
||||
|
||||
if ref.repoDB != nil {
|
||||
if ref.metaDB != nil {
|
||||
ref.log.Debug().Str("repository", localRepo).Str("subject", subjectDigestStr).
|
||||
Msg("repoDB: trying to sync cosign reference for image")
|
||||
Msg("metaDB: trying to sync cosign reference for image")
|
||||
|
||||
isSig, sigType, signedManifestDig, err := storage.CheckIsImageSignature(localRepo, manifestBuf,
|
||||
cosignTag)
|
||||
@@ -157,14 +158,14 @@ func (ref CosignReference) SyncReferences(localRepo, remoteRepo, subjectDigestSt
|
||||
}
|
||||
|
||||
if isSig {
|
||||
err = ref.repoDB.AddManifestSignature(localRepo, signedManifestDig, repodb.SignatureMetadata{
|
||||
err = ref.metaDB.AddManifestSignature(localRepo, signedManifestDig, mTypes.SignatureMetadata{
|
||||
SignatureType: sigType,
|
||||
SignatureDigest: referenceDigest.String(),
|
||||
})
|
||||
} else {
|
||||
err = repodb.SetImageMetaFromInput(localRepo, cosignTag, ispec.MediaTypeImageManifest,
|
||||
err = meta.SetImageMetaFromInput(localRepo, cosignTag, ispec.MediaTypeImageManifest,
|
||||
referenceDigest, manifestBuf, ref.storeController.GetImageStore(localRepo),
|
||||
ref.repoDB, ref.log)
|
||||
ref.metaDB, ref.log)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
@@ -173,7 +174,7 @@ func (ref CosignReference) SyncReferences(localRepo, remoteRepo, subjectDigestSt
|
||||
}
|
||||
|
||||
ref.log.Info().Str("repository", localRepo).Str("subject", subjectDigestStr).
|
||||
Msg("repoDB: successfully added cosign reference for image")
|
||||
Msg("metaDB: successfully added cosign reference for image")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,8 @@ import (
|
||||
"zotregistry.io/zot/pkg/extensions/sync/constants"
|
||||
client "zotregistry.io/zot/pkg/extensions/sync/httpclient"
|
||||
"zotregistry.io/zot/pkg/log"
|
||||
"zotregistry.io/zot/pkg/meta/repodb"
|
||||
"zotregistry.io/zot/pkg/meta"
|
||||
mTypes "zotregistry.io/zot/pkg/meta/types"
|
||||
"zotregistry.io/zot/pkg/storage"
|
||||
storageTypes "zotregistry.io/zot/pkg/storage/types"
|
||||
)
|
||||
@@ -25,17 +26,17 @@ import (
|
||||
type OciReferences struct {
|
||||
client *client.Client
|
||||
storeController storage.StoreController
|
||||
repoDB repodb.RepoDB
|
||||
metaDB mTypes.MetaDB
|
||||
log log.Logger
|
||||
}
|
||||
|
||||
func NewOciReferences(httpClient *client.Client, storeController storage.StoreController,
|
||||
repoDB repodb.RepoDB, log log.Logger,
|
||||
metaDB mTypes.MetaDB, log log.Logger,
|
||||
) OciReferences {
|
||||
return OciReferences{
|
||||
client: httpClient,
|
||||
storeController: storeController,
|
||||
repoDB: repoDB,
|
||||
metaDB: metaDB,
|
||||
log: log,
|
||||
}
|
||||
}
|
||||
@@ -129,9 +130,9 @@ func (ref OciReferences) SyncReferences(localRepo, remoteRepo, subjectDigestStr
|
||||
|
||||
refsDigests = append(refsDigests, referenceDigest)
|
||||
|
||||
if ref.repoDB != nil {
|
||||
if ref.metaDB != nil {
|
||||
ref.log.Debug().Str("repository", localRepo).Str("subject", subjectDigestStr).
|
||||
Msg("repoDB: trying to add oci references for image")
|
||||
Msg("metaDB: trying to add oci references for image")
|
||||
|
||||
isSig, sigType, signedManifestDig, err := storage.CheckIsImageSignature(localRepo, referenceBuf,
|
||||
referrer.Digest.String())
|
||||
@@ -141,14 +142,14 @@ func (ref OciReferences) SyncReferences(localRepo, remoteRepo, subjectDigestStr
|
||||
}
|
||||
|
||||
if isSig {
|
||||
err = ref.repoDB.AddManifestSignature(localRepo, signedManifestDig, repodb.SignatureMetadata{
|
||||
err = ref.metaDB.AddManifestSignature(localRepo, signedManifestDig, mTypes.SignatureMetadata{
|
||||
SignatureType: sigType,
|
||||
SignatureDigest: referenceDigest.String(),
|
||||
})
|
||||
} else {
|
||||
err = repodb.SetImageMetaFromInput(localRepo, referenceDigest.String(), referrer.MediaType,
|
||||
err = meta.SetImageMetaFromInput(localRepo, referenceDigest.String(), referrer.MediaType,
|
||||
referenceDigest, referenceBuf, ref.storeController.GetImageStore(localRepo),
|
||||
ref.repoDB, ref.log)
|
||||
ref.metaDB, ref.log)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
@@ -157,7 +158,7 @@ func (ref OciReferences) SyncReferences(localRepo, remoteRepo, subjectDigestStr
|
||||
}
|
||||
|
||||
ref.log.Info().Str("repository", localRepo).Str("subject", subjectDigestStr).
|
||||
Msg("repoDB: successfully added oci references to RepoDB for image")
|
||||
Msg("metaDB: successfully added oci references to MetaDB for image")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,8 @@ import (
|
||||
"zotregistry.io/zot/pkg/extensions/sync/constants"
|
||||
client "zotregistry.io/zot/pkg/extensions/sync/httpclient"
|
||||
"zotregistry.io/zot/pkg/log"
|
||||
"zotregistry.io/zot/pkg/meta/repodb"
|
||||
"zotregistry.io/zot/pkg/meta"
|
||||
mTypes "zotregistry.io/zot/pkg/meta/types"
|
||||
"zotregistry.io/zot/pkg/storage"
|
||||
)
|
||||
|
||||
@@ -28,17 +29,17 @@ type ReferenceList struct {
|
||||
type ORASReferences struct {
|
||||
client *client.Client
|
||||
storeController storage.StoreController
|
||||
repoDB repodb.RepoDB
|
||||
metaDB mTypes.MetaDB
|
||||
log log.Logger
|
||||
}
|
||||
|
||||
func NewORASReferences(httpClient *client.Client, storeController storage.StoreController,
|
||||
repoDB repodb.RepoDB, log log.Logger,
|
||||
metaDB mTypes.MetaDB, log log.Logger,
|
||||
) ORASReferences {
|
||||
return ORASReferences{
|
||||
client: httpClient,
|
||||
storeController: storeController,
|
||||
repoDB: repoDB,
|
||||
metaDB: metaDB,
|
||||
log: log,
|
||||
}
|
||||
}
|
||||
@@ -146,20 +147,20 @@ func (ref ORASReferences) SyncReferences(localRepo, remoteRepo, subjectDigestStr
|
||||
|
||||
refsDigests = append(refsDigests, referenceDigest)
|
||||
|
||||
if ref.repoDB != nil {
|
||||
if ref.metaDB != nil {
|
||||
ref.log.Debug().Str("repository", localRepo).Str("subject", subjectDigestStr).
|
||||
Msg("repoDB: trying to sync oras artifact for image")
|
||||
Msg("metaDB: trying to sync oras artifact for image")
|
||||
|
||||
err := repodb.SetImageMetaFromInput(localRepo, referenceDigest.String(), referrer.MediaType,
|
||||
err := meta.SetImageMetaFromInput(localRepo, referenceDigest.String(), referrer.MediaType,
|
||||
referenceDigest, orasBuf, ref.storeController.GetImageStore(localRepo),
|
||||
ref.repoDB, ref.log)
|
||||
ref.metaDB, ref.log)
|
||||
if err != nil {
|
||||
return refsDigests, fmt.Errorf("repoDB: failed to set metadata for oras artifact '%s@%s': %w",
|
||||
return refsDigests, fmt.Errorf("metaDB: failed to set metadata for oras artifact '%s@%s': %w",
|
||||
localRepo, subjectDigestStr, err)
|
||||
}
|
||||
|
||||
ref.log.Info().Str("repository", localRepo).Str("subject", subjectDigestStr).
|
||||
Msg("repoDB: successfully added oras artifacts to RepoDB for image")
|
||||
Msg("metaDB: successfully added oras artifacts to MetaDB for image")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ import (
|
||||
"zotregistry.io/zot/pkg/common"
|
||||
client "zotregistry.io/zot/pkg/extensions/sync/httpclient"
|
||||
"zotregistry.io/zot/pkg/log"
|
||||
"zotregistry.io/zot/pkg/meta/repodb"
|
||||
mTypes "zotregistry.io/zot/pkg/meta/types"
|
||||
"zotregistry.io/zot/pkg/storage"
|
||||
storageTypes "zotregistry.io/zot/pkg/storage/types"
|
||||
)
|
||||
@@ -37,13 +37,13 @@ type References struct {
|
||||
}
|
||||
|
||||
func NewReferences(httpClient *client.Client, storeController storage.StoreController,
|
||||
repoDB repodb.RepoDB, log log.Logger,
|
||||
metaDB mTypes.MetaDB, log log.Logger,
|
||||
) References {
|
||||
refs := References{log: log}
|
||||
|
||||
refs.referenceList = append(refs.referenceList, NewCosignReference(httpClient, storeController, repoDB, log))
|
||||
refs.referenceList = append(refs.referenceList, NewOciReferences(httpClient, storeController, repoDB, log))
|
||||
refs.referenceList = append(refs.referenceList, NewORASReferences(httpClient, storeController, repoDB, log))
|
||||
refs.referenceList = append(refs.referenceList, NewCosignReference(httpClient, storeController, metaDB, log))
|
||||
refs.referenceList = append(refs.referenceList, NewOciReferences(httpClient, storeController, metaDB, log))
|
||||
refs.referenceList = append(refs.referenceList, NewORASReferences(httpClient, storeController, metaDB, log))
|
||||
|
||||
return refs
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ import (
|
||||
client "zotregistry.io/zot/pkg/extensions/sync/httpclient"
|
||||
"zotregistry.io/zot/pkg/extensions/sync/references"
|
||||
"zotregistry.io/zot/pkg/log"
|
||||
"zotregistry.io/zot/pkg/meta/repodb"
|
||||
mTypes "zotregistry.io/zot/pkg/meta/types"
|
||||
"zotregistry.io/zot/pkg/storage"
|
||||
)
|
||||
|
||||
@@ -30,7 +30,7 @@ type BaseService struct {
|
||||
retryOptions *retry.RetryOptions
|
||||
contentManager ContentManager
|
||||
storeController storage.StoreController
|
||||
repoDB repodb.RepoDB
|
||||
metaDB mTypes.MetaDB
|
||||
repositories []string
|
||||
references references.References
|
||||
client *client.Client
|
||||
@@ -38,13 +38,13 @@ type BaseService struct {
|
||||
}
|
||||
|
||||
func New(opts syncconf.RegistryConfig, credentialsFilepath string,
|
||||
storeController storage.StoreController, repodb repodb.RepoDB, log log.Logger,
|
||||
storeController storage.StoreController, metadb mTypes.MetaDB, log log.Logger,
|
||||
) (Service, error) {
|
||||
service := &BaseService{}
|
||||
|
||||
service.config = opts
|
||||
service.log = log
|
||||
service.repoDB = repodb
|
||||
service.metaDB = metadb
|
||||
|
||||
var err error
|
||||
|
||||
@@ -60,7 +60,7 @@ func New(opts syncconf.RegistryConfig, credentialsFilepath string,
|
||||
service.credentials = credentialsFile
|
||||
|
||||
service.contentManager = NewContentManager(opts.Content, log)
|
||||
service.local = NewLocalRegistry(storeController, repodb, log)
|
||||
service.local = NewLocalRegistry(storeController, metadb, log)
|
||||
|
||||
retryOptions := &retry.RetryOptions{}
|
||||
|
||||
@@ -82,7 +82,7 @@ func New(opts syncconf.RegistryConfig, credentialsFilepath string,
|
||||
service.references = references.NewReferences(
|
||||
service.client,
|
||||
service.storeController,
|
||||
service.repoDB,
|
||||
service.metaDB,
|
||||
service.log,
|
||||
)
|
||||
|
||||
|
||||
@@ -162,7 +162,7 @@ func TestService(t *testing.T) {
|
||||
URLs: []string{"http://localhost"},
|
||||
}
|
||||
|
||||
service, err := New(conf, "", storage.StoreController{}, mocks.RepoDBMock{}, log.Logger{})
|
||||
service, err := New(conf, "", storage.StoreController{}, mocks.MetaDBMock{}, log.Logger{})
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
err = service.SyncRepo("repo")
|
||||
@@ -337,8 +337,8 @@ func TestLocalRegistry(t *testing.T) {
|
||||
So(err, ShouldNotBeNil)
|
||||
})
|
||||
|
||||
Convey("trigger repoDB error on index manifest in CommitImage()", func() {
|
||||
registry := NewLocalRegistry(storage.StoreController{DefaultStore: syncImgStore}, mocks.RepoDBMock{
|
||||
Convey("trigger metaDB error on index manifest in CommitImage()", func() {
|
||||
registry := NewLocalRegistry(storage.StoreController{DefaultStore: syncImgStore}, mocks.MetaDBMock{
|
||||
SetRepoReferenceFn: func(repo, Reference string, manifestDigest godigest.Digest, mediaType string) error {
|
||||
if Reference == "1.0" {
|
||||
return errors.ErrRepoMetaNotFound
|
||||
@@ -352,8 +352,8 @@ func TestLocalRegistry(t *testing.T) {
|
||||
So(err, ShouldNotBeNil)
|
||||
})
|
||||
|
||||
Convey("trigger repoDB error on image manifest in CommitImage()", func() {
|
||||
registry := NewLocalRegistry(storage.StoreController{DefaultStore: syncImgStore}, mocks.RepoDBMock{
|
||||
Convey("trigger metaDB error on image manifest in CommitImage()", func() {
|
||||
registry := NewLocalRegistry(storage.StoreController{DefaultStore: syncImgStore}, mocks.MetaDBMock{
|
||||
SetRepoReferenceFn: func(repo, Reference string, manifestDigest godigest.Digest, mediaType string) error {
|
||||
return errors.ErrRepoMetaNotFound
|
||||
},
|
||||
|
||||
@@ -42,8 +42,8 @@ import (
|
||||
extconf "zotregistry.io/zot/pkg/extensions/config"
|
||||
syncconf "zotregistry.io/zot/pkg/extensions/config/sync"
|
||||
"zotregistry.io/zot/pkg/extensions/sync"
|
||||
"zotregistry.io/zot/pkg/meta/repodb"
|
||||
"zotregistry.io/zot/pkg/meta/signatures"
|
||||
mTypes "zotregistry.io/zot/pkg/meta/types"
|
||||
storageConstants "zotregistry.io/zot/pkg/storage/constants"
|
||||
"zotregistry.io/zot/pkg/test"
|
||||
"zotregistry.io/zot/pkg/test/mocks"
|
||||
@@ -857,10 +857,10 @@ func TestOnDemand(t *testing.T) {
|
||||
|
||||
dctlr := api.NewController(destConfig)
|
||||
|
||||
// repodb fails for syncCosignSignature"
|
||||
dctlr.RepoDB = mocks.RepoDBMock{
|
||||
// metadb fails for syncCosignSignature"
|
||||
dctlr.MetaDB = mocks.MetaDBMock{
|
||||
AddManifestSignatureFn: func(repo string, signedManifestDigest godigest.Digest,
|
||||
sm repodb.SignatureMetadata,
|
||||
sm mTypes.SignatureMetadata,
|
||||
) error {
|
||||
if sm.SignatureType == signatures.CosignSignature || sm.SignatureType == signatures.NotationSignature {
|
||||
return sync.ErrTestError
|
||||
@@ -4422,8 +4422,8 @@ func getPortFromBaseURL(baseURL string) string {
|
||||
return slice[len(slice)-1]
|
||||
}
|
||||
|
||||
func TestSyncedSignaturesRepoDB(t *testing.T) {
|
||||
Convey("Verify that repodb update correctly when syncing a signature", t, func() {
|
||||
func TestSyncedSignaturesMetaDB(t *testing.T) {
|
||||
Convey("Verify that metadb update correctly when syncing a signature", t, func() {
|
||||
repoName := "signed-repo"
|
||||
tag := "random-signed-image"
|
||||
updateDuration := 30 * time.Minute
|
||||
@@ -4493,7 +4493,7 @@ func TestSyncedSignaturesRepoDB(t *testing.T) {
|
||||
So(err, ShouldBeNil)
|
||||
So(resp.StatusCode(), ShouldEqual, http.StatusOK)
|
||||
|
||||
repoMeta, err := dctlr.RepoDB.GetRepoMeta(repoName)
|
||||
repoMeta, err := dctlr.MetaDB.GetRepoMeta(repoName)
|
||||
So(err, ShouldBeNil)
|
||||
So(repoMeta.Tags, ShouldContainKey, tag)
|
||||
So(len(repoMeta.Tags), ShouldEqual, 1)
|
||||
|
||||
Reference in New Issue
Block a user