Skip to content

Commit 2d51bf7

Browse files
committed
reduce client throttling by using the caches that are already there
1 parent 3a8f550 commit 2d51bf7

File tree

3 files changed

+54
-55
lines changed

3 files changed

+54
-55
lines changed

pkg/console/controllers/downloadsdeployment/controller.go

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ import (
1414

1515
configv1 "github.com/openshift/api/config/v1"
1616
operatorv1 "github.com/openshift/api/operator/v1"
17-
configclientv1 "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1"
1817
configinformer "github.com/openshift/client-go/config/informers/externalversions"
19-
operatorclientv1 "github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1"
18+
configlistersv1 "github.com/openshift/client-go/config/listers/config/v1"
2019
operatorinformerv1 "github.com/openshift/client-go/operator/informers/externalversions/operator/v1"
20+
operatorlistersv1 "github.com/openshift/client-go/operator/listers/operator/v1"
2121
"github.com/openshift/console-operator/pkg/api"
2222
"github.com/openshift/console-operator/pkg/console/status"
2323
"github.com/openshift/library-go/pkg/controller/factory"
@@ -33,18 +33,15 @@ import (
3333
type DownloadsDeploymentSyncController struct {
3434
operatorClient v1helpers.OperatorClient
3535
// configs
36-
operatorConfigClient operatorclientv1.ConsoleInterface
37-
infrastructureConfigClient configclientv1.InfrastructureInterface
36+
consoleOperatorLister operatorlistersv1.ConsoleLister
37+
infrastructureLister configlistersv1.InfrastructureLister
3838
// core kube
3939
deploymentClient appsclientv1.DeploymentsGetter
4040
}
4141

4242
func NewDownloadsDeploymentSyncController(
43-
// top level config
44-
configClient configclientv1.ConfigV1Interface,
4543
// clients
4644
operatorClient v1helpers.OperatorClient,
47-
operatorConfigClient operatorclientv1.ConsoleInterface,
4845
// informer
4946
configInformer configinformer.SharedInformerFactory,
5047
operatorConfigInformer operatorinformerv1.ConsoleInformer,
@@ -58,9 +55,9 @@ func NewDownloadsDeploymentSyncController(
5855

5956
ctrl := &DownloadsDeploymentSyncController{
6057
// configs
61-
operatorClient: operatorClient,
62-
operatorConfigClient: operatorConfigClient,
63-
infrastructureConfigClient: configClient.Infrastructures(),
58+
operatorClient: operatorClient,
59+
consoleOperatorLister: operatorConfigInformer.Lister(),
60+
infrastructureLister: configInformer.Config().V1().Infrastructures().Lister(),
6461
// client
6562
deploymentClient: deploymentClient,
6663
}
@@ -81,13 +78,13 @@ func NewDownloadsDeploymentSyncController(
8178
}
8279

8380
func (c *DownloadsDeploymentSyncController) Sync(ctx context.Context, controllerContext factory.SyncContext) error {
84-
operatorConfig, err := c.operatorConfigClient.Get(ctx, api.ConfigResourceName, metav1.GetOptions{})
81+
operatorConfig, err := c.consoleOperatorLister.Get(api.ConfigResourceName)
8582
if err != nil {
8683
return err
8784
}
88-
updatedOperatorConfig := operatorConfig.DeepCopy()
85+
operatorConfigCopy := operatorConfig.DeepCopy()
8986

90-
switch updatedOperatorConfig.Spec.ManagementState {
87+
switch operatorConfigCopy.Spec.ManagementState {
9188
case operatorv1.Managed:
9289
klog.V(4).Infoln("console is in a managed state: syncing downloads deployment")
9390
case operatorv1.Unmanaged:
@@ -97,17 +94,17 @@ func (c *DownloadsDeploymentSyncController) Sync(ctx context.Context, controller
9794
klog.V(4).Infoln("console is in an removed state: removing synced downloads deployment")
9895
return c.removeDownloadsDeployment(ctx)
9996
default:
100-
return fmt.Errorf("unknown state: %v", updatedOperatorConfig.Spec.ManagementState)
97+
return fmt.Errorf("unknown state: %v", operatorConfigCopy.Spec.ManagementState)
10198
}
10299
statusHandler := status.NewStatusHandler(c.operatorClient)
103100

104-
infrastructureConfig, err := c.infrastructureConfigClient.Get(ctx, api.ConfigResourceName, metav1.GetOptions{})
101+
infrastructureConfig, err := c.infrastructureLister.Get(api.ConfigResourceName)
105102
statusHandler.AddCondition(status.HandleDegraded("DownloadsDeploymentSync", "FailedInfrastructureConfigGet", err))
106103
if err != nil {
107104
return statusHandler.FlushAndReturn(err)
108105
}
109106

110-
actualDownloadsDownloadsDeployment, _, downloadsDeploymentErr := c.SyncDownloadsDeployment(ctx, updatedOperatorConfig, infrastructureConfig, controllerContext)
107+
actualDownloadsDownloadsDeployment, _, downloadsDeploymentErr := c.SyncDownloadsDeployment(ctx, operatorConfigCopy, infrastructureConfig, controllerContext)
111108
statusHandler.AddConditions(status.HandleProgressingOrDegraded("DownloadsDeploymentSync", "FailedApply", downloadsDeploymentErr))
112109
if downloadsDeploymentErr != nil {
113110
return statusHandler.FlushAndReturn(downloadsDeploymentErr)
@@ -117,16 +114,15 @@ func (c *DownloadsDeploymentSyncController) Sync(ctx context.Context, controller
117114
return statusHandler.FlushAndReturn(nil)
118115
}
119116

120-
func (c *DownloadsDeploymentSyncController) SyncDownloadsDeployment(ctx context.Context, operatorConfig *operatorv1.Console, infrastructureConfig *configv1.Infrastructure, controllerContext factory.SyncContext) (*appsv1.Deployment, bool, error) {
117+
func (c *DownloadsDeploymentSyncController) SyncDownloadsDeployment(ctx context.Context, operatorConfigCopy *operatorv1.Console, infrastructureConfig *configv1.Infrastructure, controllerContext factory.SyncContext) (*appsv1.Deployment, bool, error) {
121118

122-
updatedOperatorConfig := operatorConfig.DeepCopy()
123-
requiredDownloadsDeployment := deploymentsub.DefaultDownloadsDeployment(updatedOperatorConfig, infrastructureConfig)
119+
requiredDownloadsDeployment := deploymentsub.DefaultDownloadsDeployment(operatorConfigCopy, infrastructureConfig)
124120

125121
return resourceapply.ApplyDeployment(ctx,
126122
c.deploymentClient,
127123
controllerContext.Recorder(),
128124
requiredDownloadsDeployment,
129-
resourcemerge.ExpectedDeploymentGeneration(requiredDownloadsDeployment, updatedOperatorConfig.Status.Generations),
125+
resourcemerge.ExpectedDeploymentGeneration(requiredDownloadsDeployment, operatorConfigCopy.Status.Generations),
130126
)
131127
}
132128

pkg/console/operator/operator.go

Lines changed: 38 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,14 @@ import (
2626
operatorsv1 "github.com/openshift/api/operator/v1"
2727
configclientv1 "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1"
2828
configinformer "github.com/openshift/client-go/config/informers/externalversions"
29+
configlistersv1 "github.com/openshift/client-go/config/listers/config/v1"
2930
consoleinformersv1 "github.com/openshift/client-go/console/informers/externalversions/console/v1"
3031
listerv1 "github.com/openshift/client-go/console/listers/console/v1"
3132
oauthinformersv1 "github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1"
3233
oauthlistersv1 "github.com/openshift/client-go/oauth/listers/oauth/v1"
3334
operatorclientv1 "github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1"
3435
operatorinformerv1 "github.com/openshift/client-go/operator/informers/externalversions/operator/v1"
36+
operatorlistersv1 "github.com/openshift/client-go/operator/listers/operator/v1"
3537
routeclientv1 "github.com/openshift/client-go/route/clientset/versioned/typed/route/v1"
3638
routesinformersv1 "github.com/openshift/client-go/route/informers/externalversions/route/v1"
3739
routev1listers "github.com/openshift/client-go/route/listers/route/v1"
@@ -54,14 +56,14 @@ import (
5456

5557
type consoleOperator struct {
5658
// configs
57-
operatorClient v1helpers.OperatorClient
58-
operatorConfigClient operatorclientv1.ConsoleInterface
59-
consoleConfigClient configclientv1.ConsoleInterface
60-
infrastructureConfigClient configclientv1.InfrastructureInterface
61-
ingressConfigClient configclientv1.IngressInterface
62-
proxyConfigClient configclientv1.ProxyInterface
63-
oauthConfigClient configclientv1.OAuthInterface
64-
dynamicClient dynamic.Interface
59+
operatorClient v1helpers.OperatorClient
60+
consoleConfigClient configclientv1.ConsoleInterface
61+
consoleConfigLister configlistersv1.ConsoleLister
62+
infrastructureLister configlistersv1.InfrastructureLister
63+
ingressConfigLister configlistersv1.IngressLister
64+
proxyConfigLister configlistersv1.ProxyLister
65+
oauthConfigLister configlistersv1.OAuthLister
66+
dynamicClient dynamic.Interface
6567
// core kube
6668
secretsClient coreclientv1.SecretsGetter
6769
secretsLister corev1listers.SecretLister
@@ -70,10 +72,11 @@ type consoleOperator struct {
7072
nodeClient coreclientv1.NodesGetter
7173
deploymentClient appsclientv1.DeploymentsGetter
7274
// openshift
73-
oauthClientLister oauthlistersv1.OAuthClientLister
74-
routeClient routeclientv1.RoutesGetter
75-
routeLister routev1listers.RouteLister
76-
versionGetter status.VersionGetter
75+
oauthClientLister oauthlistersv1.OAuthClientLister
76+
consoleOperatorLister operatorlistersv1.ConsoleLister
77+
routeClient routeclientv1.RoutesGetter
78+
routeLister routev1listers.RouteLister
79+
versionGetter status.VersionGetter
7780
// lister
7881
consolePluginLister listerv1.ConsolePluginLister
7982

@@ -125,13 +128,14 @@ func NewConsoleOperator(
125128

126129
c := &consoleOperator{
127130
// configs
128-
operatorClient: operatorClient,
129-
operatorConfigClient: operatorConfigClient.Consoles(),
130-
consoleConfigClient: configClient.Consoles(),
131-
infrastructureConfigClient: configClient.Infrastructures(),
132-
ingressConfigClient: configClient.Ingresses(),
133-
proxyConfigClient: configClient.Proxies(),
134-
oauthConfigClient: configClient.OAuths(),
131+
operatorClient: operatorClient,
132+
consoleOperatorLister: operatorConfigInformer.Lister(),
133+
consoleConfigClient: configClient.Consoles(),
134+
consoleConfigLister: configInformer.Config().V1().Consoles().Lister(),
135+
infrastructureLister: configInformer.Config().V1().Infrastructures().Lister(),
136+
ingressConfigLister: configInformer.Config().V1().Ingresses().Lister(),
137+
proxyConfigLister: configInformer.Config().V1().Proxies().Lister(),
138+
oauthConfigLister: configInformer.Config().V1().OAuths().Lister(),
135139
// console resources
136140
// core kube
137141
secretsClient: corev1Client,
@@ -255,55 +259,57 @@ type configSet struct {
255259
}
256260

257261
func (c *consoleOperator) Sync(ctx context.Context, controllerContext factory.SyncContext) error {
258-
operatorConfig, err := c.operatorConfigClient.Get(ctx, api.ConfigResourceName, metav1.GetOptions{})
262+
operatorConfig, err := c.consoleOperatorLister.Get(api.ConfigResourceName)
259263
if err != nil {
260264
klog.Error("failed to retrieve operator config: %v", err)
261265
return err
262266
}
263267

264268
startTime := time.Now()
265269
klog.V(4).Infof("started syncing operator %q (%v)", operatorConfig.Name, startTime)
266-
defer klog.V(4).Infof("finished syncing operator %q (%v)", operatorConfig.Name, time.Since(startTime))
270+
defer func() {
271+
klog.V(4).Infof("finished syncing operator %q (%v)", operatorConfig.Name, time.Since(startTime))
272+
}()
267273

268274
// ensure we have top level console config
269-
consoleConfig, err := c.consoleConfigClient.Get(ctx, api.ConfigResourceName, metav1.GetOptions{})
275+
consoleConfig, err := c.consoleConfigLister.Get(api.ConfigResourceName)
270276
if err != nil {
271277
klog.Errorf("console config error: %v", err)
272278
return err
273279
}
274280

275281
// we need infrastructure config for apiServerURL
276-
infrastructureConfig, err := c.infrastructureConfigClient.Get(ctx, api.ConfigResourceName, metav1.GetOptions{})
282+
infrastructureConfig, err := c.infrastructureLister.Get(api.ConfigResourceName)
277283
if err != nil {
278284
klog.Errorf("infrastructure config error: %v", err)
279285
return err
280286
}
281287

282-
proxyConfig, err := c.proxyConfigClient.Get(ctx, api.ConfigResourceName, metav1.GetOptions{})
288+
proxyConfig, err := c.proxyConfigLister.Get(api.ConfigResourceName)
283289
if err != nil {
284290
klog.Errorf("proxy config error: %v", err)
285291
return err
286292
}
287293

288-
oauthConfig, err := c.oauthConfigClient.Get(ctx, api.ConfigResourceName, metav1.GetOptions{})
294+
oauthConfig, err := c.oauthConfigLister.Get(api.ConfigResourceName)
289295
if err != nil {
290296
klog.Errorf("oauth config error: %v", err)
291297
return err
292298
}
293299

294-
ingressConfig, err := c.ingressConfigClient.Get(ctx, api.ConfigResourceName, metav1.GetOptions{})
300+
ingressConfig, err := c.ingressConfigLister.Get(api.ConfigResourceName)
295301
if err != nil {
296302
klog.Errorf("ingress config error: %v", err)
297303
return err
298304
}
299305

300306
configs := configSet{
301-
Console: consoleConfig,
302-
Operator: operatorConfig,
303-
Infrastructure: infrastructureConfig,
304-
Proxy: proxyConfig,
305-
OAuth: oauthConfig,
306-
Ingress: ingressConfig,
307+
Console: consoleConfig.DeepCopy(),
308+
Operator: operatorConfig.DeepCopy(),
309+
Infrastructure: infrastructureConfig.DeepCopy(),
310+
Proxy: proxyConfig.DeepCopy(),
311+
OAuth: oauthConfig.DeepCopy(),
312+
Ingress: ingressConfig.DeepCopy(),
307313
}
308314

309315
if err := c.handleSync(ctx, controllerContext, configs); err != nil {

pkg/console/starter/starter.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -217,11 +217,8 @@ func RunOperator(ctx context.Context, controllerContext *controllercmd.Controlle
217217
)
218218

219219
downloadsDeploymentController := downloadsdeployment.NewDownloadsDeploymentSyncController(
220-
// top level config
221-
configClient.ConfigV1(),
222220
// clients
223221
operatorClient,
224-
operatorConfigClient.OperatorV1().Consoles(),
225222
configInformers,
226223
// operator
227224
operatorConfigInformers.Operator().V1().Consoles(),

0 commit comments

Comments
 (0)