97
// but before namespace is marked as deleted below.
98
100
>
101
>
ctx1 := workflow.WithLocalActivityOptions(ctx, localActivityOptions)
102
>
err := workflow.ExecuteLocalActivity(ctx1, la.ValidateProtectedNamespacesActivity, nsInfo.Namespace).Get(ctx, nil)
103
>
if err != nil {
104
return err
105
}
106
107
>
ctx2 := workflow.WithLocalActivityOptions(ctx, localActivityOptions)
workflow.go
108
>
err = workflow.ExecuteLocalActivity(ctx2, la.ValidateNexusEndpointsActivity, nsInfo.NamespaceID, nsInfo.Namespace).Get(ctx, nil)
109
>
if err != nil {
110
return err
111
}
112
114
}
115
116
>
func DeleteNamespaceWorkflow(ctx workflow.Context, params DeleteNamespaceWorkflowParams) (DeleteNamespaceWorkflowResult, error) {
workflow.go
117
>
logger := log.With(
118
>
workflow.GetLogger(ctx),
119
>
tag.WorkflowType(WorkflowName),
120
>
tag.WorkflowNamespace(params.Namespace.String()),
121
>
tag.WorkflowNamespaceID(params.NamespaceID.String()))
122
>
123
>
logger.Info("Workflow started.")
124
>
125
>
var result DeleteNamespaceWorkflowResult
126
>
127
>
if err := validateParams(¶ms); err != nil {
128
return result, err
129
}
130
131
>
ctx = workflow.WithTaskQueue(ctx, primitives.DeleteNamespaceActivityTQ)
workflow.go
132
>
133
>
var la *localActivities
134
>
135
>
// Step 1. Get namespace info.
136
>
ctx1 := workflow.WithLocalActivityOptions(ctx, localActivityOptions)
137
>
var namespaceInfo getNamespaceInfoResult
138
>
err := workflow.ExecuteLocalActivity(ctx1, la.GetNamespaceInfoActivity, params.NamespaceID, params.Namespace).Get(ctx, &namespaceInfo)
139
>
if err != nil {
140
return result, err
141
}
142
143
// Step 1.1. Validate namespace.
144
>
if err = validateNamespace(ctx, namespaceInfo); err != nil {
workflow.go
145
return result, err
146
}
147
148
>
params.Namespace = namespaceInfo.Namespace
workflow.go
149
>
params.NamespaceID = namespaceInfo.NamespaceID
150
>
151
>
// Step 2. Mark namespace as deleted.
152
>
ctx2 := workflow.WithLocalActivityOptions(ctx, localActivityOptions)
153
>
err = workflow.ExecuteLocalActivity(ctx2, la.MarkNamespaceDeletedActivity, params.Namespace).Get(ctx, nil)
154
>
if err != nil {
155
return result, err
156
}
157
158
>
result.DeletedNamespaceID = params.NamespaceID
workflow.go
159
>
160
>
// Step 3. Rename namespace.
161
>
ctx3 := workflow.WithLocalActivityOptions(ctx, localActivityOptions)
162
>
err = workflow.ExecuteLocalActivity(ctx3, la.GenerateDeletedNamespaceNameActivity, params.NamespaceID, params.Namespace).Get(ctx, &result.DeletedNamespace)
163
>
if err != nil {
164
return result, err
165
}
166
167
>
ctx31 := workflow.WithLocalActivityOptions(ctx, localActivityOptions)
workflow.go
168
>
err = workflow.ExecuteLocalActivity(ctx31, la.RenameNamespaceActivity, params.Namespace, result.DeletedNamespace).Get(ctx, nil)
169
>
if err != nil {
170
return result, err
171
}
172
173
// Step 4. Reclaim workflow resources asynchronously.
174
>
ctx4 := workflow.WithChildOptions(ctx, reclaimResourcesWorkflowOptions)
workflow.go
175
>
ctx4 = workflow.WithWorkflowID(ctx4, fmt.Sprintf("%s/%s", reclaimresources.WorkflowName, result.DeletedNamespace))
176
>
177
>
reclaimResourcesFuture := workflow.ExecuteChildWorkflow(ctx4, reclaimresources.ReclaimResourcesWorkflow, reclaimresources.ReclaimResourcesParams{
178
>
DeleteExecutionsParams: deleteexecutions.DeleteExecutionsParams{
179
>
Namespace: result.DeletedNamespace,
180
>
NamespaceID: params.NamespaceID,
181
>
Config: params.DeleteExecutionsConfig,
182
>
},
183
>
NamespaceDeleteDelay: params.NamespaceDeleteDelay,
184
>
})
185
>
var reclaimResourcesExecution workflow.Execution
186
>
if err = reclaimResourcesFuture.GetChildWorkflowExecution().Get(ctx, &reclaimResourcesExecution); err != nil {
187
logger.Error("Child workflow error.", tag.Error(err))
188
return result, err
189
}
190
>
logger.Info("Child workflow executed successfully.", tag.String("wf-child-type", reclaimresources.WorkflowName))
workflow.go
191
>
192
>
logger.Info("Workflow finished successfully.")
193
>
return result, nil
194
}