Skip to content

Commit 4347da3

Browse files
committed
Improving the status message when it is stuck
1 parent fd7ede7 commit 4347da3

File tree

3 files changed

+44
-23
lines changed

3 files changed

+44
-23
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,4 @@ examples/**/obj/
1919
public.crt
2020
go_build_operator_
2121
operator.iml
22+
.run/

pkg/controller/main-controller.go

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -91,25 +91,26 @@ const (
9191

9292
// Standard Status messages for Tenant
9393
const (
94-
StatusInitialized = "Initialized"
95-
StatusProvisioningCIService = "Provisioning MinIO Cluster IP Service"
96-
StatusProvisioningHLService = "Provisioning MinIO Headless Service"
97-
StatusProvisioningStatefulSet = "Provisioning MinIO Statefulset"
98-
StatusProvisioningConsoleService = "Provisioning Console Service"
99-
StatusProvisioningKESStatefulSet = "Provisioning KES StatefulSet"
100-
StatusProvisioningInitialUsers = "Provisioning initial users"
101-
StatusProvisioningDefaultBuckets = "Provisioning default buckets"
102-
StatusWaitingMinIOCert = "Waiting for MinIO TLS Certificate"
103-
StatusWaitingMinIOClientCert = "Waiting for MinIO TLS Client Certificate"
104-
StatusWaitingKESCert = "Waiting for KES TLS Certificate"
105-
StatusUpdatingMinIOVersion = "Updating MinIO Version"
106-
StatusUpdatingKES = "Updating KES"
107-
StatusNotOwned = "Statefulset not controlled by operator"
108-
StatusFailedAlreadyExists = "Another MinIO Tenant already exists in the namespace"
109-
StatusTenantCredentialsNotSet = "Tenant credentials are not set properly"
110-
StatusInconsistentMinIOVersions = "Different versions across MinIO Pools"
111-
StatusRestartingMinIO = "Restarting MinIO"
112-
StatusDecommissioningNotAllowed = "Pool Decommissioning Not Allowed"
94+
StatusInitialized = "Initialized"
95+
StatusProvisioningCIService = "Provisioning MinIO Cluster IP Service"
96+
StatusProvisioningHLService = "Provisioning MinIO Headless Service"
97+
StatusProvisioningStatefulSet = "Provisioning MinIO Statefulset"
98+
StatusProvisioningConsoleService = "Provisioning Console Service"
99+
StatusProvisioningKESStatefulSet = "Provisioning KES StatefulSet"
100+
StatusProvisioningInitialUsers = "Provisioning initial users"
101+
StatusProvisioningInitialUsersStuck = "Provisioning initial users probably stuck, check k8s events"
102+
StatusProvisioningDefaultBuckets = "Provisioning default buckets"
103+
StatusWaitingMinIOCert = "Waiting for MinIO TLS Certificate"
104+
StatusWaitingMinIOClientCert = "Waiting for MinIO TLS Client Certificate"
105+
StatusWaitingKESCert = "Waiting for KES TLS Certificate"
106+
StatusUpdatingMinIOVersion = "Updating MinIO Version"
107+
StatusUpdatingKES = "Updating KES"
108+
StatusNotOwned = "Statefulset not controlled by operator"
109+
StatusFailedAlreadyExists = "Another MinIO Tenant already exists in the namespace"
110+
StatusTenantCredentialsNotSet = "Tenant credentials are not set properly"
111+
StatusInconsistentMinIOVersions = "Different versions across MinIO Pools"
112+
StatusRestartingMinIO = "Restarting MinIO"
113+
StatusDecommissioningNotAllowed = "Pool Decommissioning Not Allowed"
113114
)
114115

115116
// ErrMinIONotReady is the error returned when MinIO is not Ready
@@ -1316,7 +1317,18 @@ func (c *Controller) syncHandler(key string) (Result, error) {
13161317

13171318
// Ensure we are only provisioning users one time
13181319
if !tenant.Status.ProvisionedUsers && len(tenant.Spec.Users) > 0 {
1319-
if err := c.createUsers(ctx, tenant, tenantConfiguration); err != nil {
1320+
events, _ := c.kubeClientSet.CoreV1().Events(tenant.Namespace).List(ctx, metav1.ListOptions{TypeMeta: metav1.TypeMeta{Kind: "Pod"}})
1321+
counter := int32(0)
1322+
for _, event := range events.Items {
1323+
reason := event.Reason
1324+
if reason == "UsersCreatedFailed" {
1325+
counter = counter + 1
1326+
}
1327+
if event.Count > counter {
1328+
counter = event.Count
1329+
}
1330+
}
1331+
if err := c.createUsers(ctx, tenant, tenantConfiguration, counter); err != nil {
13201332
klog.V(2).Infof("Unable to create MinIO users: %v", err)
13211333
c.recorder.Event(tenant, corev1.EventTypeWarning, "UsersCreatedFailed", fmt.Sprintf("Users creation failed: %s", err))
13221334
// retry after 5sec

pkg/controller/operator.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ func (c *Controller) checkOpenshiftSignerCACertInOperatorNamespace(ctx context.C
407407
return nil
408408
}
409409

410-
func (c *Controller) createUsers(ctx context.Context, tenant *miniov2.Tenant, tenantConfiguration map[string][]byte) (err error) {
410+
func (c *Controller) createUsers(ctx context.Context, tenant *miniov2.Tenant, tenantConfiguration map[string][]byte, counter int32) (err error) {
411411
defer func() {
412412
if err == nil {
413413
if _, err = c.updateProvisionedUsersStatus(ctx, tenant, true); err != nil {
@@ -421,8 +421,16 @@ func (c *Controller) createUsers(ctx context.Context, tenant *miniov2.Tenant, te
421421
return nil
422422
}
423423

424-
if _, err = c.updateTenantStatus(ctx, tenant, StatusProvisioningInitialUsers, 0); err != nil {
425-
return err
424+
// Count the events where the creation of user(s) failed.
425+
// If there are many such events, dynamically change the status of the tenant for better understanding.
426+
if counter > 3 {
427+
if _, err = c.updateTenantStatus(ctx, tenant, StatusProvisioningInitialUsersStuck, 0); err != nil {
428+
return err
429+
}
430+
} else {
431+
if _, err = c.updateTenantStatus(ctx, tenant, StatusProvisioningInitialUsers, 0); err != nil {
432+
return err
433+
}
426434
}
427435

428436
// get a new admin client

0 commit comments

Comments
 (0)