diff --git a/pkg/apiserver/domain/model/workflow.go b/pkg/apiserver/domain/model/workflow.go index 01c37256f..487f0afae 100644 --- a/pkg/apiserver/domain/model/workflow.go +++ b/pkg/apiserver/domain/model/workflow.go @@ -150,7 +150,7 @@ func (w *WorkflowRecord) Index() map[string]string { index["namespace"] = w.Namespace } if w.WorkflowName != "" { - index["workflowPrimaryKey"] = w.WorkflowName + index["workflowName"] = w.WorkflowName } if w.AppPrimaryKey != "" { index["appPrimaryKey"] = w.AppPrimaryKey diff --git a/pkg/apiserver/domain/service/workflow.go b/pkg/apiserver/domain/service/workflow.go index a8402eb91..9eefee601 100644 --- a/pkg/apiserver/domain/service/workflow.go +++ b/pkg/apiserver/domain/service/workflow.go @@ -122,23 +122,22 @@ func (w *workflowServiceImpl) DeleteWorkflowByApp(ctx context.Context, app *mode } for i := range workflows { workflow := workflows[i].(*model.Workflow) - var record = model.WorkflowRecord{ - AppPrimaryKey: workflow.AppPrimaryKey, - WorkflowName: workflow.Name, - } - records, err := w.Store.List(ctx, &record, &datastore.ListOptions{}) - if err != nil { - log.Logger.Errorf("list workflow %s record failure %s", workflow.PrimaryKey(), err.Error()) - } - for _, record := range records { - if err := w.Store.Delete(ctx, record); err != nil { - log.Logger.Errorf("delete workflow record %s failure %s", record.PrimaryKey(), err.Error()) - } - } if err := w.Store.Delete(ctx, workflow); err != nil { log.Logger.Errorf("delete workflow %s failure %s", workflow.PrimaryKey(), err.Error()) } } + var record = model.WorkflowRecord{ + AppPrimaryKey: workflow.AppPrimaryKey, + } + records, err := w.Store.List(ctx, &record, &datastore.ListOptions{}) + if err != nil { + log.Logger.Errorf("list workflow %s record failure %s", workflow.PrimaryKey(), err.Error()) + } + for _, record := range records { + if err := w.Store.Delete(ctx, record); err != nil { + log.Logger.Errorf("delete workflow record %s failure %s", record.PrimaryKey(), err.Error()) + } + } return nil } diff --git a/pkg/apiserver/domain/service/workflow_test.go b/pkg/apiserver/domain/service/workflow_test.go index a4bc821ce..e25ffa3cb 100644 --- a/pkg/apiserver/domain/service/workflow_test.go +++ b/pkg/apiserver/domain/service/workflow_test.go @@ -34,6 +34,7 @@ import ( "github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1" "github.com/oam-dev/kubevela/pkg/apiserver/domain/model" "github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore" + "github.com/oam-dev/kubevela/pkg/apiserver/infrastructure/datastore/mongodb" apisv1 "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1" "github.com/oam-dev/kubevela/pkg/oam" "github.com/oam-dev/kubevela/pkg/utils/apply" @@ -563,6 +564,55 @@ var _ = Describe("Test workflow service functions", func() { Expect(record.Finished).Should(Equal("true")) Expect(record.Steps[1].Phase).Should(Equal(workflowv1alpha1.WorkflowStepPhaseStopped)) }) + + It("Test deleting workflow", func() { + By("Test deleting the workflow from the mongo") + mongodbDriver, err := mongodb.New(context.TODO(), datastore.Config{ + URL: "mongodb://localhost:27017", + Database: "kubevela", + }) + Expect(err).ToNot(HaveOccurred()) + Expect(mongodbDriver).ToNot(BeNil()) + + Expect(mongodbDriver.BatchAdd(context.Background(), []datastore.Entity{ + &model.Workflow{ + Name: "workflow-default", + AppPrimaryKey: "war-app", + }, + &model.WorkflowRecord{ + Name: "workflow-default-20220809081934217", + WorkflowName: "workflow-default", + AppPrimaryKey: "war-app", + RevisionPrimaryKey: "20220809081934216", + }, + &model.WorkflowRecord{ + WorkflowName: "workflow-default", + AppPrimaryKey: "war-app", + Name: "workflow-default-20220809082525833", + RevisionPrimaryKey: "20220809082525832", + }, + })).ToNot(HaveOccurred()) + + var record = model.WorkflowRecord{ + AppPrimaryKey: "war-app", + WorkflowName: "workflow-default", + } + records, err := mongodbDriver.List(context.TODO(), &record, &datastore.ListOptions{}) + Expect(err).ToNot(HaveOccurred()) + Expect(len(records)).Should(Equal(2)) + + srv := workflowServiceImpl{ + Store: mongodbDriver, + } + Expect(srv.DeleteWorkflowByApp(context.TODO(), &model.Application{Name: "war-app"})).ToNot(HaveOccurred()) + wc, err := mongodbDriver.Count(context.TODO(), &model.Workflow{AppPrimaryKey: "war-app"}, nil) + Expect(err).ToNot(HaveOccurred()) + Expect(int(wc)).Should(Equal(0)) + + list, err := mongodbDriver.List(context.TODO(), &model.WorkflowRecord{AppPrimaryKey: "war-app"}, nil) + Expect(err).ToNot(HaveOccurred()) + Expect(len(list)).Should(Equal(0)) + }) }) var yamlStr = `apiVersion: core.oam.dev/v1beta1