Skip to content

Commit

Permalink
refactor: canary deletion handling
Browse files Browse the repository at this point in the history
  • Loading branch information
yashmehrotra committed Jul 26, 2023
1 parent 8d36093 commit 700ffaf
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 27 deletions.
4 changes: 2 additions & 2 deletions pkg/controllers/canary_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,15 +87,15 @@ func (r *CanaryReconciler) Reconcile(ctx gocontext.Context, req ctrl.Request) (c
}

if !canary.DeletionTimestamp.IsZero() {
if err := db.DeleteCanary(*canary); err != nil {
if err := db.DeleteCanary(canary.GetPersistedID(), canary.DeletionTimestamp.Time); err != nil {
logger.Error(err, "failed to delete canary")
}
canaryJobs.DeleteCanaryJob(canary.GetPersistedID())
controllerutil.RemoveFinalizer(canary, FinalizerName)
return ctrl.Result{}, r.Update(ctx, canary)
}

dbCanary, checks, changed, err := db.PersistCanary(*canary, "kubernetes/"+string(canary.ObjectMeta.UID))
dbCanary, checks, changed, err := db.PersistCanary(*canary, "kubernetes/"+canary.GetPersistedID())
if err != nil {
return ctrl.Result{Requeue: true}, err
}
Expand Down
45 changes: 23 additions & 22 deletions pkg/db/canary.go
Original file line number Diff line number Diff line change
Expand Up @@ -182,37 +182,38 @@ func RemoveTransformedChecks(ids []string) error {
Error
}

func DeleteCanary(canary v1.Canary) error {
logger.Infof("deleting canary %s/%s", canary.Namespace, canary.Name)
model, err := pkg.CanaryFromV1(canary)
if err != nil {
return err
}
deleteTime := time.Now()
persistedID := canary.GetPersistedID()
var checkIDs []string
for _, checkID := range canary.Status.Checks {
checkIDs = append(checkIDs, checkID)
}
metrics.UnregisterGauge(checkIDs)
if persistedID == "" {
logger.Errorf("Canary %s/%s has not been persisted", canary.Namespace, canary.Name)
return nil
}
if err := Gorm.Where("id = ?", persistedID).Find(&model).UpdateColumn("deleted_at", deleteTime).Error; err != nil {
func DeleteCanary(id string, deleteTime time.Time) error {
logger.Infof("Deleting canary[%s]", id)

if err := Gorm.Table("canaries").Where("id = ?", id).UpdateColumn("deleted_at", deleteTime).Error; err != nil {
return err
}
if err := DeleteChecksForCanary(persistedID, deleteTime); err != nil {
checkIDs, err := DeleteChecksForCanary(id, deleteTime)
if err != nil {
return err
}
if err := DeleteCheckComponentRelationshipsForCanary(persistedID, deleteTime); err != nil {
metrics.UnregisterGauge(checkIDs)

if err := DeleteCheckComponentRelationshipsForCanary(id, deleteTime); err != nil {
return err
}
return nil
}

func DeleteChecksForCanary(id string, deleteTime time.Time) error {
return Gorm.Table("checks").Where("canary_id = ? and deleted_at is null", id).UpdateColumn("deleted_at", deleteTime).Error
func DeleteChecksForCanary(id string, deleteTime time.Time) ([]string, error) {
var checkIDs []string
var checks []pkg.Check
err := Gorm.Model(&checks).
Table("checks").
Clauses(clause.Returning{Columns: []clause.Column{{Name: "id"}}}).
Where("canary_id = ? and deleted_at IS NULL", id).
UpdateColumn("deleted_at", deleteTime).
Error

for _, c := range checks {
checkIDs = append(checkIDs, c.ID.String())
}
return checkIDs, err
}

func DeleteCheckComponentRelationshipsForCanary(id string, deleteTime time.Time) error {
Expand Down
2 changes: 1 addition & 1 deletion pkg/db/topology.go
Original file line number Diff line number Diff line change
Expand Up @@ -377,7 +377,7 @@ func DeleteInlineCanariesForComponent(componentID string, deleteTime time.Time)
return err
}
for _, c := range canaries {
if err := DeleteChecksForCanary(c.ID.String(), deleteTime); err != nil {
if _, err := DeleteChecksForCanary(c.ID.String(), deleteTime); err != nil {
logger.Debugf("Error deleting checks for canary %v", c.ID)
continue
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/jobs/canary/canary_jobs.go
Original file line number Diff line number Diff line change
Expand Up @@ -415,7 +415,7 @@ func ReconcileDeletedCanaryChecks() {
ID string
DeletedAt time.Time
}
// Select all components whose topology ID is deleted but their deleted at is not marked
// Select all components whose canary ID is deleted but their deleted at is not marked
err := db.Gorm.Raw(`
SELECT DISTINCT(canaries.id), canaries.deleted_at
FROM canaries
Expand All @@ -432,7 +432,7 @@ func ReconcileDeletedCanaryChecks() {
}

for _, r := range rows {
if err := db.DeleteChecksForCanary(r.ID, r.DeletedAt); err != nil {
if err := db.DeleteCanary(r.ID, r.DeletedAt); err != nil {
logger.Errorf("Error deleting checks for canary[%s]: %v", r.ID, err)
jobHistory.AddError(err.Error())
}
Expand Down

0 comments on commit 700ffaf

Please sign in to comment.