Skip to content

Commit

Permalink
fix:hang for serverUpdate failed (#1659)
Browse files Browse the repository at this point in the history
Co-authored-by: guozhi.li <guozhi.li@daocloud.io>
Co-authored-by: Harshavardhana <harsha@minio.io>
  • Loading branch information
3 people committed Jun 27, 2023
1 parent 9562a29 commit 5b71f04
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 44 deletions.
2 changes: 1 addition & 1 deletion examples/kustomization/tenant-certmanager-kes/vault.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ spec:
spec:
containers:
- name: vault
image: vault:latest
image: vault:1.13.3
imagePullPolicy: "IfNotPresent"
env:
- name: SECRET_SHARES
Expand Down
2 changes: 1 addition & 1 deletion examples/vault/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ spec:
spec:
containers:
- name: vault
image: vault:latest
image: vault:1.13.3
imagePullPolicy: "IfNotPresent"
env:
- name: SECRET_SHARES
Expand Down
77 changes: 35 additions & 42 deletions pkg/controller/main-controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ import (
"syscall"
"time"

"github.com/minio/madmin-go/v2"
"github.com/minio/operator/pkg/common"

xcerts "github.com/minio/pkg/certs"

"github.com/minio/minio-go/v7/pkg/set"
Expand Down Expand Up @@ -1090,20 +1090,17 @@ func (c *Controller) syncHandler(key string) error {
tenantName, images[0], tenant.Spec.Image)

latest, err := c.fetchArtifacts(tenant)
defer c.removeArtifacts()
if err != nil {
_ = c.removeArtifacts()
return err
}

updateURL, err := tenant.UpdateURL(latest, fmt.Sprintf("http://operator.%s.svc.%s:%s%s",
miniov2.GetNSFromFile(),
miniov2.GetClusterDomain(),
common.UpgradeServerPort,
common.WebhookAPIUpdate,
))
if err != nil {
_ = c.removeArtifacts()

err = fmt.Errorf("Unable to get canonical update URL for Tenant '%s', failed with %v", tenantName, err)
if _, terr := c.updateTenantStatus(ctx, tenant, err.Error(), totalAvailableReplicas); terr != nil {
return terr
Expand All @@ -1118,49 +1115,45 @@ func (c *Controller) syncHandler(key string) error {

us, err := adminClnt.ServerUpdate(ctx, updateURL)
if err != nil {
_ = c.removeArtifacts()

err = fmt.Errorf("Tenant '%s' MinIO update failed with %w", tenantName, err)
if _, terr := c.updateTenantStatus(ctx, tenant, err.Error(), totalAvailableReplicas); terr != nil {
return terr
}

// Update failed, nothing needs to be changed in the container
return err
}

if us.CurrentVersion != us.UpdatedVersion {
// In case the upgrade is from an older version to RELEASE.2021-07-27T02-40-15Z (which introduced
// MinIO server integrated with Console), we need to delete the old console deployment and service.
// We do this only when MinIO server is successfully updated.
unifiedConsoleReleaseTime, _ := miniov2.ReleaseTagToReleaseTime("RELEASE.2021-07-27T02-40-15Z")
newVer, err := miniov2.ReleaseTagToReleaseTime(us.UpdatedVersion)
if err != nil {
klog.Errorf("Unsupported release tag on new image, server updated but might leave dangling console deployment %v", err)
if madmin.ToErrorResponse(err).Code != "MethodNotAllowed" {
if _, terr := c.updateTenantStatus(ctx, tenant, err.Error(), totalAvailableReplicas); terr != nil {
return terr
}
// Update failed, nothing needs to be changed in the container
return err
}
consoleDeployment, err := c.deploymentLister.Deployments(tenant.Namespace).Get(tenant.ConsoleDeploymentName())
if unifiedConsoleReleaseTime.Before(newVer) && consoleDeployment != nil && err == nil {
if err := c.deleteOldConsoleDeployment(ctx, tenant, consoleDeployment.Name); err != nil {
c.RegisterEvent(ctx, tenant, corev1.EventTypeWarning, "Inplace update is disabled, falling back to performing only statefulset update.", fmt.Sprintf("Tenant %s", tenant.Name))
}
if err == nil {
if us.CurrentVersion != us.UpdatedVersion {
// In case the upgrade is from an older version to RELEASE.2021-07-27T02-40-15Z (which introduced
// MinIO server integrated with Console), we need to delete the old console deployment and service.
// We do this only when MinIO server is successfully updated.
unifiedConsoleReleaseTime, _ := miniov2.ReleaseTagToReleaseTime("RELEASE.2021-07-27T02-40-15Z")
newVer, err := miniov2.ReleaseTagToReleaseTime(us.UpdatedVersion)
if err != nil {
klog.Errorf("Unsupported release tag on new image, server updated but might leave dangling console deployment %v", err)
return err
}
consoleDeployment, err := c.deploymentLister.Deployments(tenant.Namespace).Get(tenant.ConsoleDeploymentName())
if unifiedConsoleReleaseTime.Before(newVer) && consoleDeployment != nil && err == nil {
if err := c.deleteOldConsoleDeployment(ctx, tenant, consoleDeployment.Name); err != nil {
return err
}
}
klog.Infof("Tenant '%s' MinIO updated successfully from: %s, to: %s successfully",
tenantName, us.CurrentVersion, us.UpdatedVersion)
} else {
msg := fmt.Sprintf("Tenant '%s' MinIO is already running the most recent version of %s",
tenantName,
us.CurrentVersion)
klog.Info(msg)
if _, terr := c.updateTenantStatus(ctx, tenant, msg, totalAvailableReplicas); terr != nil {
return err
}
return nil
}
klog.Infof("Tenant '%s' MinIO updated successfully from: %s, to: %s successfully",
tenantName, us.CurrentVersion, us.UpdatedVersion)
} else {
msg := fmt.Sprintf("Tenant '%s' MinIO is already running the most recent version of %s",
tenantName,
us.CurrentVersion)
klog.Info(msg)
if _, terr := c.updateTenantStatus(ctx, tenant, msg, totalAvailableReplicas); terr != nil {
return err
}
return nil
}

// clean the local directory
_ = c.removeArtifacts()

for i, pool := range tenant.Spec.Pools {
// Now proceed to make the yaml changes for the tenant statefulset.
ss := statefulsets.NewPool(&statefulsets.NewPoolArgs{
Expand Down

0 comments on commit 5b71f04

Please sign in to comment.