Skip to content

Commit

Permalink
Fix: set gvk for created cm to fix patch (#96)
Browse files Browse the repository at this point in the history
Signed-off-by: FogDong <dongtianxin.tx@alibaba-inc.com>

Signed-off-by: FogDong <dongtianxin.tx@alibaba-inc.com>
  • Loading branch information
FogDong committed Dec 8, 2022
1 parent 3948633 commit d272277
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 28 deletions.
40 changes: 23 additions & 17 deletions pkg/context/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ func (wf *WorkflowContext) sync() error {
}
return err
}
return wf.cli.Patch(ctx, wf.store, client.MergeFrom(store))
return wf.cli.Patch(ctx, wf.store, client.MergeFrom(store.DeepCopy()))
}

// LoadFromConfigMap recover workflow context from configMap.
Expand Down Expand Up @@ -334,8 +334,8 @@ func (comp *ComponentManifest) unmarshal(v string) error {
}

// NewContext new workflow context without initialize data.
func NewContext(cli client.Client, ns, name string, owner []metav1.OwnerReference) (Context, error) {
wfCtx, err := newContext(cli, ns, name, owner)
func NewContext(ctx context.Context, cli client.Client, ns, name string, owner []metav1.OwnerReference) (Context, error) {
wfCtx, err := newContext(ctx, cli, ns, name, owner)
if err != nil {
return nil, err
}
Expand All @@ -348,43 +348,49 @@ func CleanupMemoryStore(name, ns string) {
workflowMemoryCache.Delete(fmt.Sprintf("%s-%s", name, ns))
}

func newContext(cli client.Client, ns, name string, owner []metav1.OwnerReference) (*WorkflowContext, error) {
var (
ctx = context.Background()
store corev1.ConfigMap
)
store.Name = generateStoreName(name)
store.Namespace = ns
store.SetOwnerReferences(owner)
func newContext(ctx context.Context, cli client.Client, ns, name string, owner []metav1.OwnerReference) (*WorkflowContext, error) {
store := &corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: generateStoreName(name),
Namespace: ns,
OwnerReferences: owner,
},
Data: map[string]string{},
}

kindConfigMap := reflect.TypeOf(corev1.ConfigMap{}).Name()
if EnableInMemoryContext {
MemStore.GetOrCreateInMemoryContext(&store)
} else if err := cli.Get(ctx, client.ObjectKey{Name: store.Name, Namespace: store.Namespace}, &store); err != nil {
MemStore.GetOrCreateInMemoryContext(store)
} else if err := cli.Get(ctx, client.ObjectKey{Name: store.Name, Namespace: store.Namespace}, store); err != nil {
if kerrors.IsNotFound(err) {
if err := cli.Create(ctx, &store); err != nil {
if err := cli.Create(ctx, store); err != nil {
return nil, err
}
store.SetGroupVersionKind(corev1.SchemeGroupVersion.WithKind(kindConfigMap))
} else {
return nil, err
}
} else if !reflect.DeepEqual(store.OwnerReferences, owner) {
store = corev1.ConfigMap{
store = &corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: fmt.Sprintf("%s-%s", generateStoreName(name), rand.RandomString(5)),
Namespace: ns,
OwnerReferences: owner,
},
Data: make(map[string]string),
}
if err := cli.Create(ctx, &store); err != nil {
if err := cli.Create(ctx, store); err != nil {
return nil, err
}
store.SetGroupVersionKind(corev1.SchemeGroupVersion.WithKind(kindConfigMap))
}
store.Annotations = map[string]string{
AnnotationStartTimestamp: time.Now().String(),
}
memCache := getMemoryStore(fmt.Sprintf("%s-%s", name, ns))
wfCtx := &WorkflowContext{
cli: cli,
store: &store,
store: store,
memoryStore: memCache,
components: map[string]*ComponentManifest{},
modified: true,
Expand Down
12 changes: 6 additions & 6 deletions pkg/context/context_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -230,12 +230,12 @@ func TestContext(t *testing.T) {
cli := newCliForTest(t, nil)
r := require.New(t)

wfCtx, err := NewContext(cli, "default", "app-v1", []metav1.OwnerReference{{Name: "test1"}})
wfCtx, err := NewContext(context.Background(), cli, "default", "app-v1", []metav1.OwnerReference{{Name: "test1"}})
r.NoError(err)
err = wfCtx.Commit()
r.NoError(err)

_, err = NewContext(cli, "default", "app-v1", []metav1.OwnerReference{{Name: "test2"}})
_, err = NewContext(context.Background(), cli, "default", "app-v1", []metav1.OwnerReference{{Name: "test2"}})
r.NoError(err)

wfCtx, err = LoadContext(cli, "default", "app-v1", "workflow-app-v1-context")
Expand All @@ -247,7 +247,7 @@ func TestContext(t *testing.T) {
_, err = LoadContext(cli, "default", "app-v1", "workflow-app-v1-context")
r.Equal(err.Error(), `configMap "workflow-app-v1-context" not found`)

wfCtx, err = NewContext(cli, "default", "app-v1", nil)
wfCtx, err = NewContext(context.Background(), cli, "default", "app-v1", nil)
r.NoError(err)
r.Equal(len(wfCtx.GetComponents()), 0)
_, err = wfCtx.GetComponent("server")
Expand All @@ -258,7 +258,7 @@ func TestGetStore(t *testing.T) {
cli := newCliForTest(t, nil)
r := require.New(t)

wfCtx, err := NewContext(cli, "default", "app-v1", nil)
wfCtx, err := NewContext(context.Background(), cli, "default", "app-v1", nil)
r.NoError(err)
err = wfCtx.Commit()
r.NoError(err)
Expand All @@ -271,7 +271,7 @@ func TestMutableValue(t *testing.T) {
cli := newCliForTest(t, nil)
r := require.New(t)

wfCtx, err := NewContext(cli, "default", "app-v1", nil)
wfCtx, err := NewContext(context.Background(), cli, "default", "app-v1", nil)
r.NoError(err)
err = wfCtx.Commit()
r.NoError(err)
Expand All @@ -289,7 +289,7 @@ func TestMemoryValue(t *testing.T) {
cli := newCliForTest(t, nil)
r := require.New(t)

wfCtx, err := NewContext(cli, "default", "app-v1", nil)
wfCtx, err := NewContext(context.Background(), cli, "default", "app-v1", nil)
r.NoError(err)
err = wfCtx.Commit()
r.NoError(err)
Expand Down
6 changes: 3 additions & 3 deletions pkg/executor/workflow.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ func (w *workflowExecutor) ExecuteRunners(ctx monitorContext.Context, taskRunner
}
}

wfCtx, err := w.makeContext(w.instance.Name)
wfCtx, err := w.makeContext(ctx, w.instance.Name)
if err != nil {
ctx.Error(err, "make context")
return v1alpha1.WorkflowStateExecuting, err
Expand Down Expand Up @@ -320,7 +320,7 @@ func checkRunners(taskRunners []types.TaskRunner, status v1alpha1.WorkflowRunSta
return true, success
}

func (w *workflowExecutor) makeContext(name string) (wfContext.Context, error) {
func (w *workflowExecutor) makeContext(ctx context.Context, name string) (wfContext.Context, error) {
status := &w.instance.Status
if status.ContextBackend != nil {
wfCtx, err := wfContext.LoadContext(w.cli, w.instance.Namespace, w.instance.Name, w.instance.Status.ContextBackend.Name)
Expand All @@ -330,7 +330,7 @@ func (w *workflowExecutor) makeContext(name string) (wfContext.Context, error) {
return wfCtx, nil
}

wfCtx, err := wfContext.NewContext(w.cli, w.instance.Namespace, name, w.instance.ChildOwnerReferences)
wfCtx, err := wfContext.NewContext(ctx, w.cli, w.instance.Namespace, name, w.instance.ChildOwnerReferences)
if err != nil {
return nil, errors.WithMessage(err, "new context")
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/hooks/data_passing_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ func mockContext(t *testing.T) wfContext.Context {
return nil
},
}
wfCtx, err := wfContext.NewContext(cli, "default", "v1", nil)
wfCtx, err := wfContext.NewContext(context.Background(), cli, "default", "v1", nil)
require.NoError(t, err)
return wfCtx
}
2 changes: 1 addition & 1 deletion pkg/tasks/custom/task_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -788,7 +788,7 @@ func newWorkflowContextForTest(t *testing.T) wfContext.Context {
return nil
},
}
wfCtx, err := wfContext.NewContext(cli, "default", "app-v1", nil)
wfCtx, err := wfContext.NewContext(context.Background(), cli, "default", "app-v1", nil)
r.NoError(err)
v, err := value.NewValue(`name: "app"`, nil, "")
r.NoError(err)
Expand Down

0 comments on commit d272277

Please sign in to comment.