Skip to content

Commit 7892720

Browse files
Merge pull request rancher#35518 from ibuildthecloud/fixes3-26
[Forward Port] Performance fixes rancher#35401
2 parents 9740d7a + e177366 commit 7892720

File tree

8 files changed

+61
-18
lines changed

8 files changed

+61
-18
lines changed

pkg/auth/providerrefresh/refresher.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,10 @@ func (r *refresher) refreshAttributes(attribs *v3.UserAttribute) (*v3.UserAttrib
206206
secret := ""
207207
if providers.ProvidersWithSecrets[providerName] {
208208
secret, err = r.tokenMGR.GetSecret(user.Name, providerName, loginTokens[providerName])
209+
if apierrors.IsNotFound(err) {
210+
// There is no secret so we can't refresh, just continue to the next attribute
211+
return attribs, nil
212+
}
209213
if err != nil {
210214
return nil, err
211215
}

pkg/controllers/management/auth/manager.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/rancher/norman/objectclient"
1111
"github.com/rancher/norman/types/slice"
1212
"github.com/rancher/rancher/pkg/clustermanager"
13+
"github.com/rancher/rancher/pkg/controllers/managementuser/rbac"
1314
v13 "github.com/rancher/rancher/pkg/generated/norman/core/v1"
1415
v3 "github.com/rancher/rancher/pkg/generated/norman/management.cattle.io/v3"
1516
typesrbacv1 "github.com/rancher/rancher/pkg/generated/norman/rbac.authorization.k8s.io/v1"
@@ -668,6 +669,9 @@ func (m *manager) gatherAndDedupeRoles(roleTemplateName string) (map[string]*v3.
668669
for _, role := range allRoles {
669670
roles[role.Name] = role
670671
}
672+
673+
//toLower
674+
rbac.ToLowerRoleTemplates(roles)
671675
return roles, nil
672676
}
673677

@@ -753,10 +757,12 @@ func (m *manager) reconcileManagementPlaneRole(namespace string, resourceToVerbs
753757
for resource, newVerbs := range resourceToVerbs {
754758
currentVerbs := map[string]string{}
755759
for _, rule := range role.Rules {
756-
if slice.ContainsString(rule.Resources, resource) {
760+
if slice.ContainsString(rule.Resources, resource) || slice.ContainsString(rule.Resources, "*") {
757761
for _, v := range rule.Verbs {
758762
if rule.APIGroups[0] == newVerbs[v] {
759763
currentVerbs[v] = rule.APIGroups[0]
764+
} else if rule.APIGroups[0] == "*" || newVerbs[v] == "*" {
765+
currentVerbs[v] = newVerbs[v]
760766
}
761767
}
762768
}
@@ -767,7 +773,7 @@ func (m *manager) reconcileManagementPlaneRole(namespace string, resourceToVerbs
767773
role = role.DeepCopy()
768774
added := false
769775
for i, rule := range newRole.Rules {
770-
if slice.ContainsString(rule.Resources, resource) {
776+
if slice.ContainsString(rule.Resources, resource) || slice.ContainsString(rule.Resources, "*") {
771777
newRole.Rules[i] = buildRule(resource, newVerbs)
772778
added = true
773779
}

pkg/controllers/managementuser/rbac/handler_base.go

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -313,12 +313,7 @@ func (m *manager) compareAndUpdateNamespacedRole(role *rbacv1.Role, rt *v3.RoleT
313313
return err
314314
}
315315

316-
func (m *manager) gatherRoles(rt *v3.RoleTemplate, roleTemplates map[string]*v3.RoleTemplate) error {
317-
err := m.gatherRolesRecurse(rt, roleTemplates)
318-
if err != nil {
319-
return err
320-
}
321-
316+
func ToLowerRoleTemplates(roleTemplates map[string]*v3.RoleTemplate) {
322317
// clean the roles for kubeneretes: lowercase resources and verbs
323318
for key, rt := range roleTemplates {
324319
if rt.External {
@@ -346,7 +341,14 @@ func (m *manager) gatherRoles(rt *v3.RoleTemplate, roleTemplates map[string]*v3.
346341
rt.Rules = toLowerRules
347342
roleTemplates[key] = rt
348343
}
344+
}
349345

346+
func (m *manager) gatherRoles(rt *v3.RoleTemplate, roleTemplates map[string]*v3.RoleTemplate) error {
347+
err := m.gatherRolesRecurse(rt, roleTemplates)
348+
if err != nil {
349+
return err
350+
}
351+
ToLowerRoleTemplates(roleTemplates)
350352
return nil
351353
}
352354

@@ -476,9 +478,14 @@ func (m *manager) ensureBindings(ns string, roles map[string]*v3.RoleTemplate, b
476478
for key, rb := range desiredRBs {
477479
switch roleBinding := rb.(type) {
478480
case *rbacv1.RoleBinding:
479-
logrus.Infof("Creating roleBinding %v", key)
480-
_, err := m.workload.RBAC.RoleBindings(ns).Create(roleBinding)
481-
if err != nil && !apierrors.IsAlreadyExists(err) {
481+
_, err := m.workload.RBAC.RoleBindings("").Controller().Lister().Get(ns, roleBinding.Name)
482+
if apierrors.IsNotFound(err) {
483+
logrus.Infof("Creating roleBinding %v in %s", key, ns)
484+
_, err := m.workload.RBAC.RoleBindings(ns).Create(roleBinding)
485+
if err != nil && !apierrors.IsAlreadyExists(err) {
486+
return err
487+
}
488+
} else if err != nil {
482489
return err
483490
}
484491
case *rbacv1.ClusterRoleBinding:

pkg/controllers/managementuser/rbac/prtb_handler.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ func (p *prtbLifecycle) syncPRTB(binding *v3.ProjectRoleTemplateBinding) error {
101101

102102
for _, n := range namespaces {
103103
ns := n.(*v1.Namespace)
104+
if !ns.DeletionTimestamp.IsZero() {
105+
continue
106+
}
104107
if err := p.m.ensureProjectRoleBindings(ns.Name, roles, binding); err != nil {
105108
return errors.Wrapf(err, "couldn't ensure binding %v in %v", binding.Name, ns.Name)
106109
}

pkg/controllers/managementuser/rbac/roletemplate_handler.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,9 @@ func (c *rtSync) syncRT(template *v3.RoleTemplate, usedInProjects bool, prtbs []
114114

115115
for _, n := range namespaces {
116116
ns := n.(*v1.Namespace)
117+
if !ns.DeletionTimestamp.IsZero() {
118+
continue
119+
}
117120
if err := c.m.ensureProjectRoleBindings(ns.Name, roles, prtb); err != nil {
118121
return errors.Wrapf(err, "couldn't ensure binding %v in %v", prtb.Name, ns.Name)
119122
}

pkg/controllers/managementuser/secret/secret.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package secret
33
import (
44
"context"
55
"fmt"
6+
"reflect"
67
"strings"
78

89
"k8s.io/apimachinery/pkg/runtime"
@@ -35,6 +36,7 @@ const (
3536

3637
type Controller struct {
3738
secrets v1.SecretInterface
39+
secretLister v1.SecretLister
3840
clusterNamespaceLister v1.NamespaceLister
3941
managementNamespaceLister v1.NamespaceLister
4042
projectLister v3.ProjectLister
@@ -73,6 +75,7 @@ func registerDeferred(ctx context.Context, cluster *config.UserContext) {
7375
clusterSecretsClient := cluster.Core.Secrets("")
7476
s := &Controller{
7577
secrets: clusterSecretsClient,
78+
secretLister: clusterSecretsClient.Controller().Lister(),
7679
clusterNamespaceLister: cluster.Core.Namespaces("").Controller().Lister(),
7780
managementNamespaceLister: cluster.Management.Core.Namespaces("").Controller().Lister(),
7881
projectLister: cluster.Management.Management.Projects(cluster.ClusterName).Controller().Lister(),
@@ -81,6 +84,7 @@ func registerDeferred(ctx context.Context, cluster *config.UserContext) {
8184

8285
n := &NamespaceController{
8386
clusterSecretsClient: clusterSecretsClient,
87+
clusterSecretsLister: clusterSecretsClient.Controller().Lister(),
8488
managementSecrets: cluster.Management.Core.Secrets("").Controller().Lister(),
8589
}
8690
cluster.Core.Namespaces("").AddHandler(ctx, "secretsController", n.sync)
@@ -116,6 +120,7 @@ func registerDeferred(ctx context.Context, cluster *config.UserContext) {
116120

117121
type NamespaceController struct {
118122
clusterSecretsClient v1.SecretInterface
123+
clusterSecretsLister v1.SecretLister
119124
managementSecrets v1.SecretLister
120125
}
121126

@@ -146,6 +151,9 @@ func (n *NamespaceController) sync(key string, obj *corev1.Namespace) (runtime.O
146151
continue
147152
}
148153
namespacedSecret := getNamespacedSecret(secret, obj.Name)
154+
if _, err := n.clusterSecretsLister.Get(namespacedSecret.Namespace, namespacedSecret.Name); err == nil {
155+
continue
156+
}
149157
logrus.Infof("Creating secret [%s] into namespace [%s]", namespacedSecret.Name, obj.Name)
150158
_, err := n.clusterSecretsClient.Create(namespacedSecret)
151159
if err != nil && !errors.IsAlreadyExists(err) {
@@ -241,16 +249,26 @@ func (s *Controller) createOrUpdate(obj *corev1.Secret, action string) error {
241249
return err
242250
}
243251
for _, namespace := range clusterNamespaces {
252+
if !namespace.DeletionTimestamp.IsZero() {
253+
continue
254+
}
244255
// copy the secret into namespace
245256
namespacedSecret := getNamespacedSecret(obj, namespace.Name)
246257
switch action {
247258
case create:
259+
if _, err := s.secretLister.Get(namespacedSecret.Namespace, namespacedSecret.Name); err == nil {
260+
continue
261+
}
248262
logrus.Infof("Copying secret [%s] into namespace [%s]", namespacedSecret.Name, namespace.Name)
249263
_, err := s.secrets.Create(namespacedSecret)
250264
if err != nil && !errors.IsAlreadyExists(err) {
251265
return err
252266
}
253267
case update:
268+
if existing, err := s.secretLister.Get(namespacedSecret.Namespace, namespacedSecret.Name); err == nil &&
269+
reflect.DeepEqual(existing.Data, namespacedSecret.Data) {
270+
continue
271+
}
254272
logrus.Infof("Updating secret [%s] into namespace [%s]", namespacedSecret.Name, namespace.Name)
255273
_, err := s.secrets.Update(namespacedSecret)
256274
if err != nil && !errors.IsNotFound(err) {

pkg/controllers/managementuserlegacy/alert/deployer/upgradeimpl.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -397,12 +397,13 @@ func (l *AlertService) removeFinalizerFromLegacyAlerting() error {
397397
}
398398

399399
for _, v := range oldProjectAlert {
400+
if len(v.Finalizers) == 0 {
401+
continue
402+
}
400403
newObj := v.DeepCopy()
401404
newObj.SetFinalizers([]string{})
402-
if !reflect.DeepEqual(newObj, v) {
403-
if _, err = l.oldProjectAlerts.Update(newObj); err != nil {
404-
return errors.Wrapf(err, "remove finalizer from legacy projectAlert %s:%s failed", newObj.Namespace, newObj.Name)
405-
}
405+
if _, err = l.oldProjectAlerts.Update(newObj); err != nil {
406+
return errors.Wrapf(err, "remove finalizer from legacy projectAlert %s:%s failed", newObj.Namespace, newObj.Name)
406407
}
407408
}
408409

pkg/wrangler/context.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,13 +154,14 @@ func (w *Context) StartWithTransaction(ctx context.Context, f func(context.Conte
154154
return err
155155
}
156156

157-
if err = w.Start(ctx); err != nil {
157+
if err := w.ControllerFactory.SharedCacheFactory().Start(ctx); err != nil {
158+
transaction.Rollback()
158159
return err
159160
}
160161

161-
w.SharedControllerFactory.SharedCacheFactory().WaitForCacheSync(ctx)
162+
w.ControllerFactory.SharedCacheFactory().WaitForCacheSync(ctx)
162163
transaction.Commit()
163-
return nil
164+
return w.Start(ctx)
164165
}
165166

166167
func (w *Context) Start(ctx context.Context) error {

0 commit comments

Comments
 (0)