Skip to content

Commit

Permalink
refactor(services):support concurrent cluster ctrl
Browse files Browse the repository at this point in the history
- remove HarborCluster CR field vars from service and harbor controllers
- remove ctx filed vars from service and harbor controllers
- remove kubeclient wrapper and directly use client.Client
- refactor dynamic client wrapper to return dynamic client copy for each reconcile process
- remove actualCR&designedCR filed vars from service and harbor controllers
- read ctrl max concurrency from configStore

Signed-off-by: Steven Zou <szou@vmware.com>
  • Loading branch information
steven-zou committed Mar 12, 2021
1 parent 934235b commit b18488a
Show file tree
Hide file tree
Showing 28 changed files with 302 additions and 676 deletions.
34 changes: 17 additions & 17 deletions controllers/goharbor/harborcluster/ctrl_setup.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,52 +73,52 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager) err
r.Client = mgr.GetClient()
r.Scheme = mgr.GetScheme()

dClient, err := k8s.NewDynamicClient()
dClient, err := k8s.DynamicClient()
if err != nil {
r.Log.Error(err, "unable to create dynamic client")

return err
}

r.CacheCtrl = cache.NewRedisController(ctx,
r.CacheCtrl = cache.NewRedisController(
k8s.WithLog(r.Log.WithName("cache")),
k8s.WithScheme(mgr.GetScheme()),
k8s.WithDClient(k8s.WrapDClient(dClient)),
k8s.WithClient(k8s.WrapClient(ctx, mgr.GetClient())),
k8s.WithDClient(dClient),
k8s.WithClient(mgr.GetClient()),
k8s.WithConfigStore(r.ConfigStore),
)
r.DatabaseCtrl = database.NewDatabaseController(ctx,
r.DatabaseCtrl = database.NewDatabaseController(
k8s.WithLog(r.Log.WithName("database")),
k8s.WithScheme(mgr.GetScheme()),
k8s.WithDClient(k8s.WrapDClient(dClient)),
k8s.WithClient(k8s.WrapClient(ctx, mgr.GetClient())),
k8s.WithDClient(dClient),
k8s.WithClient(mgr.GetClient()),
k8s.WithConfigStore(r.ConfigStore),
)
r.StorageCtrl = storage.NewMinIOController(ctx,
r.StorageCtrl = storage.NewMinIOController(
k8s.WithLog(r.Log.WithName("storage")),
k8s.WithScheme(mgr.GetScheme()),
k8s.WithClient(k8s.WrapClient(ctx, mgr.GetClient())),
k8s.WithClient(mgr.GetClient()),
k8s.WithConfigStore(r.ConfigStore),
)
r.HarborCtrl = harbor.NewHarborController(ctx,
r.HarborCtrl = harbor.NewHarborController(
k8s.WithLog(r.Log.WithName("harbor")),
k8s.WithScheme(mgr.GetScheme()),
k8s.WithClient(k8s.WrapClient(ctx, mgr.GetClient())))
k8s.WithClient(mgr.GetClient()))

builder := ctrl.NewControllerManagedBy(mgr).
For(&goharborv1alpha2.HarborCluster{}).
Owns(&goharborv1alpha2.Harbor{}).
WithEventFilter(harborClusterPredicateFuncs)

if r.CRDInstalled(ctx, dClient, minioCRD) {
if r.CRDInstalled(ctx, dClient.RawClient(), minioCRD) {
builder.Owns(&minio.Tenant{})
}

if r.CRDInstalled(ctx, dClient, postgresCRD) {
if r.CRDInstalled(ctx, dClient.RawClient(), postgresCRD) {
builder.Owns(&postgresv1.Postgresql{})
}

if r.CRDInstalled(ctx, dClient, redisCRD) {
if r.CRDInstalled(ctx, dClient.RawClient(), redisCRD) {
builder.Owns(&redisOp.RedisFailover{})
}

Expand All @@ -140,17 +140,17 @@ func New(ctx context.Context, name string, configStore *configstore.Store) (comm
var harborClusterPredicateFuncs = predicate.Funcs{
// we do not care other events
UpdateFunc: func(event event.UpdateEvent) bool {
old, ok := event.ObjectOld.(*goharborv1alpha2.HarborCluster)
oldObj, ok := event.ObjectOld.(*goharborv1alpha2.HarborCluster)
if !ok {
return true
}

new, ok := event.ObjectNew.(*goharborv1alpha2.HarborCluster)
newObj, ok := event.ObjectNew.(*goharborv1alpha2.HarborCluster)
if !ok {
return true
}
// when status was not changed and spec was not changed, not need reconcile
if equality.Semantic.DeepDerivative(old.Spec, new.Spec) && old.Status.Status == new.Status.Status {
if equality.Semantic.DeepDerivative(oldObj.Spec, newObj.Spec) && oldObj.Status.Status == newObj.Status.Status {
return false
}

Expand Down
3 changes: 0 additions & 3 deletions controllers/goharbor/harborcluster/harborcluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,6 @@ func (r *Reconciler) Reconcile(req ctrl.Request) (res ctrl.Result, err error) {
mgr := NewServiceManager(v1alpha2.ComponentCache)

return mgr.WithContext(gtx).
WithConfig(cacheConfigGetter).
TrackedBy(st).
From(harborcluster).
Use(r.CacheCtrl).
Expand All @@ -96,7 +95,6 @@ func (r *Reconciler) Reconcile(req ctrl.Request) (res ctrl.Result, err error) {
mgr := NewServiceManager(v1alpha2.ComponentDatabase)

return mgr.WithContext(gtx).
WithConfig(dbConfigGetter).
TrackedBy(st).
From(harborcluster).
Use(r.DatabaseCtrl).
Expand All @@ -108,7 +106,6 @@ func (r *Reconciler) Reconcile(req ctrl.Request) (res ctrl.Result, err error) {
mgr := NewServiceManager(v1alpha2.ComponentStorage)

return mgr.WithContext(gtx).
WithConfig(storageConfigGetter).
TrackedBy(st).
From(harborcluster).
Use(r.StorageCtrl).
Expand Down
24 changes: 6 additions & 18 deletions controllers/goharbor/harborcluster/service_mgr.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,12 @@ import (

// ServiceManager is designed to maintain the dependent services of the cluster.
type ServiceManager struct {
ctx context.Context
cluster *v1alpha2.HarborCluster
component v1alpha2.Component
st *status
ctrl lcm.Controller
svcConfigGetter svcConfigGetter
harborCtrl *harbor.Controller
ctx context.Context
cluster *v1alpha2.HarborCluster
component v1alpha2.Component
st *status
ctrl lcm.Controller
harborCtrl *harbor.Controller
}

// NewServiceManager constructs a new service manager for the specified component.
Expand Down Expand Up @@ -78,13 +77,6 @@ func (s *ServiceManager) Use(ctrl lcm.Controller) *ServiceManager {
return s
}

// WithConfig bind service configuration getter func.
func (s *ServiceManager) WithConfig(svcCfgGetter svcConfigGetter) *ServiceManager {
s.svcConfigGetter = svcCfgGetter

return s
}

// Apply changes.
func (s *ServiceManager) Apply() error { // nolint:funlen
if err := s.validate(); err != nil {
Expand Down Expand Up @@ -175,10 +167,6 @@ func (s *ServiceManager) validate() error {
return errors.New("missing status")
}

if s.svcConfigGetter == nil {
return errors.New("missing svc config getter")
}

if s.harborCtrl == nil {
return errors.New("missing harbor ctrl")
}
Expand Down
217 changes: 0 additions & 217 deletions controllers/goharbor/harborcluster/svc_config.go

This file was deleted.

1 change: 0 additions & 1 deletion pkg/cluster/controllers/cache/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package cache

const (
ErrorGetRedisClient = "Get redis client error"
ErrorCheckRedisHealth = "Check redis health error"
ErrorGenerateRedisCr = "Generate redis cr error"
ErrorSetOwnerReference = "Set owner reference error"
ErrorCreateRedisSecret = "Create redis secret error" // nolint:gosec
Expand Down

0 comments on commit b18488a

Please sign in to comment.