Skip to content

Commit

Permalink
make repository sync frequency configurable
Browse files Browse the repository at this point in the history
  • Loading branch information
himanshu19w committed Oct 27, 2023
1 parent fd5a0c2 commit 9824d51
Show file tree
Hide file tree
Showing 6 changed files with 18 additions and 11 deletions.
3 changes: 2 additions & 1 deletion porch/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,8 @@ run-local: porch
--standalone-debug-mode \
--kubeconfig="$(KUBECONFIG)" \
--cache-directory="$(CACHEDIR)" \
--function-runner 192.168.8.202:9445
--function-runner 192.168.8.202:9445 \
--repo-sync-frequency=60

.PHONY: run-jaeger
run-jaeger:
Expand Down
1 change: 1 addition & 0 deletions porch/deployments/porch/3-porch-server.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ spec:
- --cache-directory=/cache
- --cert-dir=/tmp/certs
- --secure-port=4443
- --repo-sync-frequency=60

---
apiVersion: v1
Expand Down
3 changes: 2 additions & 1 deletion porch/pkg/apiserver/apiserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ type ExtraConfig struct {
CacheDirectory string
FunctionRunnerAddress string
DefaultImagePrefix string
RepoSyncFrequency int64
}

// Config defines the config for the apiserver
Expand Down Expand Up @@ -220,7 +221,7 @@ func (c completedConfig) New() (*PorchServer, error) {

watcherMgr := engine.NewWatcherManager()

cache := cache.NewCache(c.ExtraConfig.CacheDirectory, cache.CacheOptions{
cache := cache.NewCache(c.ExtraConfig.CacheDirectory, c.ExtraConfig.RepoSyncFrequency, cache.CacheOptions{
CredentialResolver: credentialResolver,
UserInfoProvider: userInfoProvider,
MetadataStore: metadataStore,
Expand Down
11 changes: 6 additions & 5 deletions porch/pkg/cache/cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ type Cache struct {
credentialResolver repository.CredentialResolver
userInfoProvider repository.UserInfoProvider
metadataStore meta.MetadataStore

objectNotifier objectNotifier
repoSyncFrequency int64
objectNotifier objectNotifier
}

type objectNotifier interface {
Expand All @@ -63,14 +63,15 @@ type CacheOptions struct {
ObjectNotifier objectNotifier
}

func NewCache(cacheDir string, opts CacheOptions) *Cache {
func NewCache(cacheDir string, repoSyncFrequency int64, opts CacheOptions) *Cache {
return &Cache{
repositories: make(map[string]*cachedRepository),
cacheDir: cacheDir,
credentialResolver: opts.CredentialResolver,
userInfoProvider: opts.UserInfoProvider,
metadataStore: opts.MetadataStore,
objectNotifier: opts.ObjectNotifier,
repoSyncFrequency: repoSyncFrequency,
}
}

Expand Down Expand Up @@ -101,7 +102,7 @@ func (c *Cache) OpenRepository(ctx context.Context, repositorySpec *configapi.Re
if err != nil {
return nil, err
}
cr = newRepository(key, repositorySpec, r, c.objectNotifier, c.metadataStore)
cr = newRepository(key, repositorySpec, r, c.objectNotifier, c.metadataStore, c.repoSyncFrequency)
c.repositories[key] = cr
}
return cr, nil
Expand Down Expand Up @@ -137,7 +138,7 @@ func (c *Cache) OpenRepository(ctx context.Context, repositorySpec *configapi.Re
}); err != nil {
return nil, err
} else {
cr = newRepository(key, repositorySpec, r, c.objectNotifier, c.metadataStore)
cr = newRepository(key, repositorySpec, r, c.objectNotifier, c.metadataStore, c.repoSyncFrequency)
c.repositories[key] = cr
}
} else {
Expand Down
8 changes: 4 additions & 4 deletions porch/pkg/cache/repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ type cachedRepository struct {
metadataStore meta.MetadataStore
}

func newRepository(id string, repoSpec *configapi.Repository, repo repository.Repository, objectNotifier objectNotifier, metadataStore meta.MetadataStore) *cachedRepository {
func newRepository(id string, repoSpec *configapi.Repository, repo repository.Repository, objectNotifier objectNotifier, metadataStore meta.MetadataStore, repoSyncFrequency int64) *cachedRepository {
ctx, cancel := context.WithCancel(context.Background())
r := &cachedRepository{
id: id,
Expand All @@ -81,7 +81,7 @@ func newRepository(id string, repoSpec *configapi.Repository, repo repository.Re

// TODO: Should we fetch the packages here?

go r.pollForever(ctx)
go r.pollForever(ctx, repoSyncFrequency)

return r
}
Expand Down Expand Up @@ -339,7 +339,7 @@ func (r *cachedRepository) Close() error {
}

// pollForever will continue polling until signal channel is closed or ctx is done.
func (r *cachedRepository) pollForever(ctx context.Context) {
func (r *cachedRepository) pollForever(ctx context.Context, repoSyncFrequency int64) {
r.pollOnce(ctx)
for {
select {
Expand All @@ -348,7 +348,7 @@ func (r *cachedRepository) pollForever(ctx context.Context) {
return
default:
r.pollOnce(ctx)
time.Sleep(60 * time.Second)
time.Sleep(time.Duration(repoSyncFrequency) * time.Second)
}
}
}
Expand Down
3 changes: 3 additions & 0 deletions porch/pkg/cmd/server/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ type PorchServerOptions struct {
CoreAPIKubeconfigPath string
FunctionRunnerAddress string
DefaultImagePrefix string
RepoSyncFrequency int64

SharedInformerFactory informers.SharedInformerFactory
StdOut io.Writer
Expand Down Expand Up @@ -182,6 +183,7 @@ func (o *PorchServerOptions) Config() (*apiserver.Config, error) {
ExtraConfig: apiserver.ExtraConfig{
CoreAPIKubeconfigPath: o.CoreAPIKubeconfigPath,
CacheDirectory: o.CacheDirectory,
RepoSyncFrequency: o.RepoSyncFrequency,
FunctionRunnerAddress: o.FunctionRunnerAddress,
DefaultImagePrefix: o.DefaultImagePrefix,
},
Expand Down Expand Up @@ -229,4 +231,5 @@ func (o *PorchServerOptions) AddFlags(fs *pflag.FlagSet) {
fs.StringVar(&o.FunctionRunnerAddress, "function-runner", "", "Address of the function runner gRPC service.")
fs.StringVar(&o.DefaultImagePrefix, "default-image-prefix", "gcr.io/kpt-fn/", "Default prefix for unqualified function names")
fs.StringVar(&o.CacheDirectory, "cache-directory", "", "Directory where Porch server stores repository and package caches.")
fs.Int64Var(&o.RepoSyncFrequency, "repo-sync-frequency", 60, "Frequency in seconds at which registered repositories will be synced.")
}

0 comments on commit 9824d51

Please sign in to comment.