Skip to content

Commit 8a41a66

Browse files
committed
Improving the status message when it is stuck
1 parent fd7ede7 commit 8a41a66

File tree

3 files changed

+50
-24
lines changed

3 files changed

+50
-24
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: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -89,27 +89,33 @@ const (
8989
MessageResourceExists = "Resource %q already exists and is not managed by MinIO Operator"
9090
)
9191

92+
// Standard Events for Tenant
93+
const (
94+
UsersCreatedFailedReason = "UsersCreatedFailed"
95+
)
96+
9297
// Standard Status messages for Tenant
9398
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"
99+
StatusInitialized = "Initialized"
100+
StatusProvisioningCIService = "Provisioning MinIO Cluster IP Service"
101+
StatusProvisioningHLService = "Provisioning MinIO Headless Service"
102+
StatusProvisioningStatefulSet = "Provisioning MinIO Statefulset"
103+
StatusProvisioningConsoleService = "Provisioning Console Service"
104+
StatusProvisioningKESStatefulSet = "Provisioning KES StatefulSet"
105+
StatusProvisioningInitialUsers = "Provisioning initial users"
106+
StatusProvisioningInitialUsersStuck = "Provisioning initial users probably stuck, check k8s events"
107+
StatusProvisioningDefaultBuckets = "Provisioning default buckets"
108+
StatusWaitingMinIOCert = "Waiting for MinIO TLS Certificate"
109+
StatusWaitingMinIOClientCert = "Waiting for MinIO TLS Client Certificate"
110+
StatusWaitingKESCert = "Waiting for KES TLS Certificate"
111+
StatusUpdatingMinIOVersion = "Updating MinIO Version"
112+
StatusUpdatingKES = "Updating KES"
113+
StatusNotOwned = "Statefulset not controlled by operator"
114+
StatusFailedAlreadyExists = "Another MinIO Tenant already exists in the namespace"
115+
StatusTenantCredentialsNotSet = "Tenant credentials are not set properly"
116+
StatusInconsistentMinIOVersions = "Different versions across MinIO Pools"
117+
StatusRestartingMinIO = "Restarting MinIO"
118+
StatusDecommissioningNotAllowed = "Pool Decommissioning Not Allowed"
113119
)
114120

115121
// ErrMinIONotReady is the error returned when MinIO is not Ready
@@ -1316,9 +1322,20 @@ func (c *Controller) syncHandler(key string) (Result, error) {
13161322

13171323
// Ensure we are only provisioning users one time
13181324
if !tenant.Status.ProvisionedUsers && len(tenant.Spec.Users) > 0 {
1319-
if err := c.createUsers(ctx, tenant, tenantConfiguration); err != nil {
1325+
events, _ := c.kubeClientSet.CoreV1().Events(tenant.Namespace).List(ctx, metav1.ListOptions{TypeMeta: metav1.TypeMeta{Kind: "Pod"}})
1326+
counter := int32(0)
1327+
for _, event := range events.Items {
1328+
reason := event.Reason
1329+
if reason == UsersCreatedFailedReason {
1330+
counter = counter + 1
1331+
}
1332+
if event.Count > counter {
1333+
counter = event.Count
1334+
}
1335+
}
1336+
if err := c.createUsers(ctx, tenant, tenantConfiguration, counter); err != nil {
13201337
klog.V(2).Infof("Unable to create MinIO users: %v", err)
1321-
c.recorder.Event(tenant, corev1.EventTypeWarning, "UsersCreatedFailed", fmt.Sprintf("Users creation failed: %s", err))
1338+
c.recorder.Event(tenant, corev1.EventTypeWarning, UsersCreatedFailedReason, fmt.Sprintf("Users creation failed: %s", err))
13221339
// retry after 5sec
13231340
return WrapResult(Result{RequeueAfter: time.Second * 5}, nil)
13241341
}

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)