Skip to content

Commit b6bede7

Browse files
committed
feat: add MDC to workflow execution
Signed-off-by: Attila Mészáros <a_meszaros@apple.com>
1 parent bb01a06 commit b6bede7

File tree

5 files changed

+34
-18
lines changed

5 files changed

+34
-18
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/MDCUtils.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,15 @@ public static void withMDCForEvent(
6666
}
6767
}
6868

69+
public static void withMDCForResource(HasMetadata resource, Runnable runnable) {
70+
try {
71+
MDCUtils.addResourceInfo(resource);
72+
runnable.run();
73+
} finally {
74+
MDCUtils.removeResourceInfo();
75+
}
76+
}
77+
6978
public static void addResourceIDInfo(ResourceID resourceID) {
7079
if (enabled) {
7180
MDC.put(NAME, resourceID.getName());

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/NodeExecutor.java

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,36 +19,43 @@
1919
import org.slf4j.LoggerFactory;
2020

2121
import io.fabric8.kubernetes.api.model.HasMetadata;
22+
import io.javaoperatorsdk.operator.processing.MDCUtils;
2223

2324
abstract class NodeExecutor<R, P extends HasMetadata> implements Runnable {
2425

2526
private static final Logger log = LoggerFactory.getLogger(NodeExecutor.class);
2627

2728
private final DependentResourceNode<R, P> dependentResourceNode;
2829
private final AbstractWorkflowExecutor<P> workflowExecutor;
30+
private final P primary;
2931

3032
protected NodeExecutor(
3133
DependentResourceNode<R, P> dependentResourceNode,
32-
AbstractWorkflowExecutor<P> workflowExecutor) {
34+
AbstractWorkflowExecutor<P> workflowExecutor,
35+
P primary) {
3336
this.dependentResourceNode = dependentResourceNode;
3437
this.workflowExecutor = workflowExecutor;
38+
this.primary = primary;
3539
}
3640

3741
@Override
3842
public void run() {
39-
try {
40-
doRun(dependentResourceNode);
41-
42-
} catch (Exception e) {
43-
// Exception is required because of Kotlin
44-
workflowExecutor.handleExceptionInExecutor(dependentResourceNode, e);
45-
} catch (Error e) {
46-
// without this user would see no sign about the error
47-
log.error("java.lang.Error during execution", e);
48-
throw e;
49-
} finally {
50-
workflowExecutor.handleNodeExecutionFinish(dependentResourceNode);
51-
}
43+
MDCUtils.withMDCForResource(
44+
primary,
45+
() -> {
46+
try {
47+
doRun(dependentResourceNode);
48+
} catch (Exception e) {
49+
// Exception is required because of Kotlin
50+
workflowExecutor.handleExceptionInExecutor(dependentResourceNode, e);
51+
} catch (Error e) {
52+
// without this user would see no sign about the error
53+
log.error("java.lang.Error during execution", e);
54+
throw e;
55+
} finally {
56+
workflowExecutor.handleNodeExecutionFinish(dependentResourceNode);
57+
}
58+
});
5259
}
5360

5461
protected abstract void doRun(DependentResourceNode<R, P> dependentResourceNode);

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowCleanupExecutor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ private synchronized void handleCleanup(DependentResourceNode dependentResourceN
8787
private class CleanupExecutor<R> extends NodeExecutor<R, P> {
8888

8989
private CleanupExecutor(DependentResourceNode<R, P> drn) {
90-
super(drn, WorkflowCleanupExecutor.this);
90+
super(drn, WorkflowCleanupExecutor.this, primary);
9191
}
9292

9393
@Override

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ private boolean allDependentsDeletedAlready(DependentResourceNode<?, P> dependen
150150
private class NodeReconcileExecutor<R> extends NodeExecutor<R, P> {
151151

152152
private NodeReconcileExecutor(DependentResourceNode<R, P> dependentResourceNode) {
153-
super(dependentResourceNode, WorkflowReconcileExecutor.this);
153+
super(dependentResourceNode, WorkflowReconcileExecutor.this, primary);
154154
}
155155

156156
@Override
@@ -176,7 +176,7 @@ protected void doRun(DependentResourceNode<R, P> dependentResourceNode) {
176176
private class NodeDeleteExecutor<R> extends NodeExecutor<R, P> {
177177

178178
private NodeDeleteExecutor(DependentResourceNode<R, P> dependentResourceNode) {
179-
super(dependentResourceNode, WorkflowReconcileExecutor.this);
179+
super(dependentResourceNode, WorkflowReconcileExecutor.this, primary);
180180
}
181181

182182
@Override

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/NodeExecutorTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
class NodeExecutorTest {
2727

2828
private NodeExecutor errorThrowingNodeExecutor =
29-
new NodeExecutor(null, null) {
29+
new NodeExecutor(null, null, null) {
3030
@Override
3131
protected void doRun(DependentResourceNode dependentResourceNode) {
3232
throw new NoSuchFieldError();

0 commit comments

Comments
 (0)