Skip to content

Commit

Permalink
Cache moved behind interfce
Browse files Browse the repository at this point in the history
  • Loading branch information
liamfallon committed Jan 21, 2025
1 parent 40de272 commit 66cd060
Show file tree
Hide file tree
Showing 22 changed files with 225 additions and 219 deletions.
6 changes: 1 addition & 5 deletions pkg/apiserver/apiserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ import (
"github.com/nephio-project/porch/pkg/cache"
cachetypes "github.com/nephio-project/porch/pkg/cache/types"
"github.com/nephio-project/porch/pkg/engine"
"github.com/nephio-project/porch/pkg/meta"
"github.com/nephio-project/porch/pkg/registry/porch"
repoimpltypes "github.com/nephio-project/porch/pkg/repoimpl/types"
"google.golang.org/api/option"
Expand Down Expand Up @@ -221,8 +220,6 @@ func (c completedConfig) New() (*PorchServer, error) {
porch.NewGcloudWIResolver(coreV1Client, stsClient),
}

metadataStore := meta.NewCrdMetadataStore(coreClient)

credentialResolver := porch.NewCredentialResolver(coreClient, resolverChain)
referenceResolver := porch.NewReferenceResolver(coreClient)
userInfoProvider := &porch.ApiserverUserInfoProvider{}
Expand All @@ -238,7 +235,7 @@ func (c completedConfig) New() (*PorchServer, error) {
UserInfoProvider: userInfoProvider,
},
RepoSyncFrequency: c.ExtraConfig.RepoSyncFrequency,
MetadataStore: metadataStore,
CoreClient: coreClient,
RepoPRChangeNotifier: watcherMgr,
})
if err != nil {
Expand All @@ -263,7 +260,6 @@ func (c completedConfig) New() (*PorchServer, error) {
engine.WithRunnerOptionsResolver(runnerOptionsResolver),
engine.WithReferenceResolver(referenceResolver),
engine.WithUserInfoProvider(userInfoProvider),
engine.WithMetadataStore(metadataStore),
engine.WithWatcherManager(watcherMgr),
)
if err != nil {
Expand Down
20 changes: 11 additions & 9 deletions pkg/cache/dbcache/dbpackagerevision.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,15 @@ var _ repository.PackageRevision = &dbPackageRevision{}
var _ repository.PackageRevisionDraft = &dbPackageRevision{}

type dbPackageRevision struct {
pkgRevKey repository.PackageRevisionKey
meta metav1.ObjectMeta
spec v1alpha1.PackageRevisionSpec
updated time.Time
updatedBy string
lifecycle v1alpha1.PackageRevisionLifecycle
tasks []v1alpha1.Task
resources map[string]string
definition *v1alpha1.PackageRevision
pkgRevKey repository.PackageRevisionKey
meta metav1.ObjectMeta
spec v1alpha1.PackageRevisionSpec
updated time.Time
updatedBy string
lifecycle v1alpha1.PackageRevisionLifecycle
tasks []v1alpha1.Task
resources map[string]string
}

func (pr *dbPackageRevision) KubeObjectName() string {
Expand Down Expand Up @@ -206,7 +207,8 @@ func (pr *dbPackageRevision) GetMeta() metav1.ObjectMeta {
return metav1.ObjectMeta{}
}

func (pr *dbPackageRevision) SetMeta(metav1.ObjectMeta) {
func (pr *dbPackageRevision) SetMeta(context.Context, metav1.ObjectMeta) error {
return nil
}

func (pr *dbPackageRevision) GetKptfile(context.Context) (kptfile.KptFile, error) {
Expand Down
7 changes: 4 additions & 3 deletions pkg/cache/dbcache/dbrepository.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,13 +105,14 @@ func (r *dbRepository) ListPackageRevisions(ctx context.Context, filter reposito
return genericPkgRevs, nil
}

func (r *dbRepository) CreatePackageRevision(ctx context.Context, newPR *v1alpha1.PackageRevision) (repository.PackageRevisionDraft, error) {
klog.Infof("DB Repo CreatePackageRevision: %q", r.Key().String())
func (r *dbRepository) CreatePackageRevisionDraft(ctx context.Context, newPR *v1alpha1.PackageRevision) (repository.PackageRevisionDraft, error) {
klog.Infof("DB Repo CreatePackageRevisionDraft: %q", r.Key().String())

_, span := tracer.Start(ctx, "dbRepository::CreatePackageRevision", trace.WithAttributes())
_, span := tracer.Start(ctx, "dbRepository::CreatePackageRevisionDraft", trace.WithAttributes())
defer span.End()

dbPkgRev := &dbPackageRevision{
definition: newPR,
pkgRevKey: repository.PackageRevisionKey{
Namespace: r.repoKey.Namespace,
Repository: r.repoKey.Repository,
Expand Down
10 changes: 6 additions & 4 deletions pkg/cache/memorycache/cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"sync"

configapi "github.com/nephio-project/porch/api/porchconfig/v1alpha1"
"github.com/nephio-project/porch/pkg/cache/memorycache/meta"
cachetypes "github.com/nephio-project/porch/pkg/cache/types"
"github.com/nephio-project/porch/pkg/repoimpl"
"github.com/nephio-project/porch/pkg/repository"
Expand All @@ -40,9 +41,10 @@ var tracer = otel.Tracer("memorycache")
// * We Cache flattened tar files in <cacheDir>/oci/ (so we don't need to pull to read resources)
// * We poll the repositories (every minute) and Cache the discovered images in memory.
type Cache struct {
mutex sync.Mutex
repositories map[string]*cachedRepository
options cachetypes.CacheOptions
mutex sync.Mutex
repositories map[string]*cachedRepository
metadataStore meta.MetadataStore
options cachetypes.CacheOptions
}

var _ cachetypes.Cache = &Cache{}
Expand Down Expand Up @@ -73,7 +75,7 @@ func (c *Cache) OpenRepository(ctx context.Context, repositorySpec *configapi.Re
return nil, err
}

cachedRepo := newRepository(key, repositorySpec, repoImpl, c.options)
cachedRepo := newRepository(key, repositorySpec, repoImpl, c.metadataStore, c.options)
c.repositories[key] = cachedRepo

return cachedRepo, nil
Expand Down
27 changes: 15 additions & 12 deletions pkg/cache/memorycache/cache_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ import (
"github.com/nephio-project/porch/api/porchconfig/v1alpha1"

fakecache "github.com/nephio-project/porch/pkg/cache/fake"
"github.com/nephio-project/porch/pkg/cache/memorycache/meta"
fakemeta "github.com/nephio-project/porch/pkg/cache/memorycache/meta/fake"
cachetypes "github.com/nephio-project/porch/pkg/cache/types"
"github.com/nephio-project/porch/pkg/meta"
fakemeta "github.com/nephio-project/porch/pkg/meta/fake"
"github.com/nephio-project/porch/pkg/repoimpl/git"
repoimpltypes "github.com/nephio-project/porch/pkg/repoimpl/types"
"github.com/nephio-project/porch/pkg/repository"
Expand Down Expand Up @@ -225,16 +225,19 @@ func openRepositoryFromArchive(t *testing.T, ctx context.Context, testPath, name
_, address := git.ServeGitRepository(t, tarfile, tempdir)
metadataStore := createMetadataStoreFromArchive(t, fmt.Sprintf("%s-metadata.yaml", name), name)

cache, _ := new(MemoryCacheFactory).NewCache(ctx, cachetypes.CacheOptions{
RepoImplOptions: repoimpltypes.RepoImplOptions{
LocalDirectory: t.TempDir(),
UseUserDefinedCaBundle: true,
CredentialResolver: &fakecache.CredentialResolver{},
},
RepoSyncFrequency: 60 * time.Second,
MetadataStore: metadataStore,
RepoPRChangeNotifier: &fakecache.ObjectNotifier{},
})
cache := &Cache{
repositories: make(map[string]*cachedRepository),
metadataStore: metadataStore,
options: cachetypes.CacheOptions{
RepoImplOptions: repoimpltypes.RepoImplOptions{
LocalDirectory: t.TempDir(),
UseUserDefinedCaBundle: true,
CredentialResolver: &fakecache.CredentialResolver{},
},
RepoSyncFrequency: 60 * time.Second,
RepoPRChangeNotifier: &fakecache.ObjectNotifier{},
}}

apiRepo := &v1alpha1.Repository{
TypeMeta: metav1.TypeMeta{
Kind: v1alpha1.TypeRepository.Kind,
Expand Down
6 changes: 4 additions & 2 deletions pkg/cache/memorycache/memorycachefactory.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ package memorycache
import (
"context"

"github.com/nephio-project/porch/pkg/cache/memorycache/meta"
cachetypes "github.com/nephio-project/porch/pkg/cache/types"
)

Expand All @@ -27,7 +28,8 @@ type MemoryCacheFactory struct {

func (f *MemoryCacheFactory) NewCache(_ context.Context, options cachetypes.CacheOptions) (cachetypes.Cache, error) {
return &Cache{
repositories: make(map[string]*cachedRepository),
options: options,
repositories: make(map[string]*cachedRepository),
metadataStore: meta.NewCrdMetadataStore(options.CoreClient),
options: options,
}, nil
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import (
"context"

configapi "github.com/nephio-project/porch/api/porchconfig/v1alpha1"
"github.com/nephio-project/porch/pkg/meta"
"github.com/nephio-project/porch/pkg/cache/memorycache/meta"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
Expand Down Expand Up @@ -50,12 +50,9 @@ func (m *MemoryMetadataStore) List(ctx context.Context, repo *configapi.Reposito
}

func (m *MemoryMetadataStore) Create(ctx context.Context, pkgRevMeta metav1.ObjectMeta, repoName string, pkgRevUID types.UID) (metav1.ObjectMeta, error) {
for _, m := range m.Metas {
if m.Name == pkgRevMeta.Name && m.Namespace == pkgRevMeta.Namespace {
return m, apierrors.NewAlreadyExists(
schema.GroupResource{Group: "config.kpt.dev", Resource: "packagerevisions"},
m.Name,
)
for _, metas := range m.Metas {
if metas.Name == pkgRevMeta.Name && metas.Namespace == pkgRevMeta.Namespace {
return m.Update(ctx, pkgRevMeta)
}
}
m.Metas = append(m.Metas, pkgRevMeta)
Expand Down
File renamed without changes.
12 changes: 12 additions & 0 deletions pkg/cache/memorycache/packagerevision.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ import (
"context"

api "github.com/nephio-project/porch/api/porch/v1alpha1"
"github.com/nephio-project/porch/pkg/cache/memorycache/meta"
"github.com/nephio-project/porch/pkg/repository"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// We take advantage of the cache having a global view of all the packages
Expand All @@ -31,6 +33,7 @@ var _ repository.PackageRevision = &cachedPackageRevision{}

type cachedPackageRevision struct {
repository.PackageRevision
metadataStore meta.MetadataStore
isLatestRevision bool
}

Expand Down Expand Up @@ -58,3 +61,12 @@ func (c *cachedPackageRevision) GetPackageRevision(ctx context.Context) (*api.Pa

return apiPR, nil
}

func (c *cachedPackageRevision) SetMeta(ctx context.Context, pkgRevMeta metav1.ObjectMeta) error {

if storedPkgRevMeta, err := c.metadataStore.Update(ctx, pkgRevMeta); err == nil {
return c.PackageRevision.SetMeta(ctx, storedPkgRevMeta)
} else {
return err
}
}
Loading

0 comments on commit 66cd060

Please sign in to comment.