Skip to content

Commit e0398a3

Browse files
authored
Add NS and domainUID to log messages in more code paths (#2330)
* add NS and domainUID to log messages in more code paths * remove unnecessary defensive code
1 parent cd37b8f commit e0398a3

File tree

7 files changed

+72
-21
lines changed

7 files changed

+72
-21
lines changed

operator/src/main/java/oracle/kubernetes/operator/DomainRecheck.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636

3737
import static oracle.kubernetes.operator.helpers.EventHelper.EventItem.NAMESPACE_WATCHING_STARTED;
3838
import static oracle.kubernetes.operator.helpers.NamespaceHelper.getOperatorNamespace;
39+
import static oracle.kubernetes.operator.logging.LoggingContext.setThreadContext;
3940

4041
class DomainRecheck {
4142
private static final LoggingFacade LOGGER = LoggingFactory.getLogger("Operator", "Operator");
@@ -93,9 +94,12 @@ public NextAction apply(Packet packet) {
9394

9495
// we don't have the domain presence information yet
9596
// we add a logging context to pass the namespace information to the LoggingFormatter
96-
packet.getComponents().put(
97-
LoggingContext.LOGGING_CONTEXT_KEY,
98-
Component.createFor(new LoggingContext().namespace(ns)));
97+
98+
if (isDomainNamespace) {
99+
packet.getComponents().put(
100+
LoggingContext.LOGGING_CONTEXT_KEY,
101+
Component.createFor(new LoggingContext().namespace(ns)));
102+
}
99103

100104
V1SubjectRulesReviewStatus status = nss.getRulesReviewStatus().updateAndGet(prev -> {
101105
if (prev != null) {
@@ -211,10 +215,13 @@ private Step createNamespaceReviewStep(Set<String> namespacesToStartNow) {
211215
}
212216

213217
private Step startNamespaceSteps(String ns) {
214-
return Step.chain(
218+
try (LoggingContext ignored =
219+
setThreadContext().namespace(ns)) {
220+
return Step.chain(
215221
createNamespaceReview(ns),
216222
new StartNamespaceBeforeStep(ns),
217223
domainNamespaces.readExistingResources(ns, domainProcessor));
224+
}
218225
}
219226

220227
// for testing

operator/src/main/java/oracle/kubernetes/operator/Main.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,7 @@ void dispatchNamespaceWatch(Watch.Response<V1Namespace> item) {
547547
}
548548
}
549549

550-
private static Packet createPacketWithLoggingContext(String ns) {
550+
static Packet createPacketWithLoggingContext(String ns) {
551551
Packet packet = new Packet();
552552
packet.getComponents().put(
553553
LoggingContext.LOGGING_CONTEXT_KEY,

operator/src/main/java/oracle/kubernetes/operator/StuckPodProcessing.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import oracle.kubernetes.operator.calls.CallResponse;
1818
import oracle.kubernetes.operator.helpers.CallBuilder;
1919
import oracle.kubernetes.operator.helpers.PodHelper;
20+
import oracle.kubernetes.operator.logging.LoggingContext;
2021
import oracle.kubernetes.operator.logging.LoggingFacade;
2122
import oracle.kubernetes.operator.logging.LoggingFactory;
2223
import oracle.kubernetes.operator.steps.DefaultResponseStep;
@@ -25,6 +26,7 @@
2526
import oracle.kubernetes.operator.work.Step;
2627
import oracle.kubernetes.utils.SystemClock;
2728

29+
import static oracle.kubernetes.operator.logging.LoggingContext.setThreadContext;
2830
import static oracle.kubernetes.operator.logging.MessageKeys.POD_FORCE_DELETED;
2931

3032
/**
@@ -44,7 +46,7 @@ void checkStuckPods(String namespace) {
4446
Step step = new CallBuilder()
4547
.withLabelSelectors(LabelConstants.getCreatedByOperatorSelector())
4648
.listPodAsync(namespace, new PodListProcessing(namespace, SystemClock.now()));
47-
mainDelegate.runSteps(step);
49+
mainDelegate.runSteps(Main.createPacketWithLoggingContext(namespace), step, null);
4850
}
4951

5052
@SuppressWarnings("unchecked")
@@ -124,7 +126,7 @@ private Step createForcedDeletePodStep(V1Pod pod) {
124126
return new CallBuilder()
125127
.withGracePeriodSeconds(0)
126128
.deletePodAsync(getName(pod), getNamespace(pod), getDomainUid(pod), null,
127-
new ForcedDeleteResponseStep(getName(pod), getNamespace(pod)));
129+
new ForcedDeleteResponseStep(getName(pod), getNamespace(pod), getDomainUid(pod)));
128130
}
129131

130132
private String getName(V1Pod pod) {
@@ -144,15 +146,20 @@ static class ForcedDeleteResponseStep extends DefaultResponseStep<Object> {
144146

145147
private final String name;
146148
private final String namespace;
149+
private final String domainUID;
147150

148-
public ForcedDeleteResponseStep(String name, String namespace) {
151+
public ForcedDeleteResponseStep(String name, String namespace, String domainUID) {
149152
this.name = name;
150153
this.namespace = namespace;
154+
this.domainUID = domainUID;
151155
}
152156

153157
@Override
154158
public NextAction onSuccess(Packet packet, CallResponse<Object> callResponse) {
155-
LOGGER.info(POD_FORCE_DELETED, name, namespace);
159+
try (LoggingContext ignored =
160+
setThreadContext().namespace(namespace).domainUid(domainUID)) {
161+
LOGGER.info(POD_FORCE_DELETED, name, namespace);
162+
}
156163
return super.onSuccess(packet, callResponse);
157164
}
158165
}

operator/src/main/java/oracle/kubernetes/operator/calls/AsyncRequestStep.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232

3333
import static oracle.kubernetes.operator.calls.CallResponse.createFailure;
3434
import static oracle.kubernetes.operator.calls.CallResponse.createSuccess;
35+
import static oracle.kubernetes.operator.helpers.NamespaceHelper.getOperatorNamespace;
3536
import static oracle.kubernetes.operator.logging.MessageKeys.ASYNC_SUCCESS;
3637

3738
/**
@@ -212,7 +213,7 @@ void onFailure(AsyncFiber fiber, ApiException ae, int statusCode, Map<String, Li
212213

213214
// If this is the first event after the fiber resumes, it indicates that we did not receive
214215
// a callback within the timeout. So cancel the call and prepare to try again.
215-
private void handleTimeout(RequestParams requestParams, AsyncFiber fiber, CancellableCall cc) {
216+
private void handleTimeout(AsyncFiber fiber, CancellableCall cc) {
216217
if (firstTimeResumed()) {
217218
try {
218219
cc.cancel();
@@ -249,7 +250,8 @@ public NextAction apply(Packet packet) {
249250
// add a logging context to pass the namespace information to the LoggingFormatter
250251
if (requestParams.namespace != null
251252
&& packet.getSpi(DomainPresenceInfo.class) == null
252-
&& packet.getSpi(LoggingContext.class) == null) {
253+
&& packet.getSpi(LoggingContext.class) == null
254+
&& !requestParams.namespace.equals(getOperatorNamespace())) {
253255
packet.getComponents().put(
254256
LoggingContext.LOGGING_CONTEXT_KEY,
255257
Component.createFor(new LoggingContext()
@@ -284,7 +286,7 @@ public NextAction apply(Packet packet) {
284286
(fiber) -> {
285287
try {
286288
CancellableCall cc = processing.createCall(fiber);
287-
scheduleTimeoutCheck(fiber, timeoutSeconds, () -> processing.handleTimeout(requestParams, fiber, cc));
289+
scheduleTimeoutCheck(fiber, timeoutSeconds, () -> processing.handleTimeout(fiber, cc));
288290
} catch (ApiException t) {
289291
logAsyncFailure(t, t.getResponseBody());
290292
processing.resumeAfterThrowable(fiber);
@@ -336,7 +338,7 @@ private void logAsyncFailure(Throwable t, String responseBody) {
336338
private void logTimeout() {
337339
// called from a code path where we don't have the necessary information for logging context
338340
// so we need to use the thread context to pass in the logging context
339-
try (LoggingContext stack =
341+
try (LoggingContext ignored =
340342
LoggingContext.setThreadContext()
341343
.namespace(requestParams.namespace)
342344
.domainUid(requestParams.domainUid)) {
@@ -358,7 +360,7 @@ private void logTimeout() {
358360
private void logSuccess(T result, int statusCode, Map<String, List<String>> responseHeaders) {
359361
// called from a code path where we don't have the necessary information for logging context
360362
// so we need to use the thread context to pass in the logging context
361-
try (LoggingContext stack =
363+
try (LoggingContext ignored =
362364
LoggingContext.setThreadContext()
363365
.namespace(requestParams.namespace)
364366
.domainUid(requestParams.domainUid)) {
@@ -375,7 +377,7 @@ private void logSuccess(T result, int statusCode, Map<String, List<String>> resp
375377
private void logFailure(ApiException ae, int statusCode, Map<String, List<String>> responseHeaders) {
376378
// called from a code path where we don't have the necessary information for logging context
377379
// so we need to use the thread context to pass in the logging context
378-
try (LoggingContext stack =
380+
try (LoggingContext ignored =
379381
LoggingContext.setThreadContext()
380382
.namespace(requestParams.namespace)
381383
.domainUid(requestParams.domainUid)) {

operator/src/main/java/oracle/kubernetes/operator/http/HttpAsyncRequestStep.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,12 @@
88
import java.net.http.HttpClient;
99
import java.net.http.HttpRequest;
1010
import java.net.http.HttpResponse;
11+
import java.util.Optional;
1112
import java.util.concurrent.CompletableFuture;
1213
import java.util.concurrent.TimeUnit;
1314

15+
import oracle.kubernetes.operator.helpers.DomainPresenceInfo;
16+
import oracle.kubernetes.operator.logging.LoggingContext;
1417
import oracle.kubernetes.operator.logging.LoggingFacade;
1518
import oracle.kubernetes.operator.logging.LoggingFactory;
1619
import oracle.kubernetes.operator.logging.MessageKeys;
@@ -20,6 +23,7 @@
2023
import oracle.kubernetes.operator.work.Step;
2124

2225
import static oracle.kubernetes.operator.http.TrustAllX509ExtendedTrustManager.getTrustingSSLContext;
26+
import static oracle.kubernetes.operator.logging.LoggingContext.setThreadContext;
2327

2428
/**
2529
* An asynchronous step to handle http requests.
@@ -110,12 +114,16 @@ private void checkTimeout(AsyncFiber fiber) {
110114
}
111115

112116
private void resume(AsyncFiber fiber, HttpResponse<String> response, Throwable throwable) {
113-
if (throwable instanceof HttpTimeoutException) {
114-
LOGGER.fine(MessageKeys.HTTP_REQUEST_TIMED_OUT, throwable.getMessage());
115-
} else if (response != null) {
116-
recordResponse(response);
117-
} else if (throwable != null) {
118-
recordThrowableResponse(throwable);
117+
DomainPresenceInfo info = packet.getSpi(DomainPresenceInfo.class);
118+
try (LoggingContext ignored =
119+
setThreadContext().namespace(getNamespaceFromInfo(info)).domainUid(getDomainUIDFromInfo(info))) {
120+
if (throwable instanceof HttpTimeoutException) {
121+
LOGGER.fine(MessageKeys.HTTP_REQUEST_TIMED_OUT, throwable.getMessage());
122+
} else if (response != null) {
123+
recordResponse(response);
124+
} else if (throwable != null) {
125+
recordThrowableResponse(throwable);
126+
}
119127
}
120128

121129
fiber.resume(packet);
@@ -134,6 +142,14 @@ private void recordThrowableResponse(Throwable throwable) {
134142
}
135143
}
136144

145+
private String getDomainUIDFromInfo(DomainPresenceInfo info) {
146+
return Optional.ofNullable(info).map(DomainPresenceInfo::getDomainUid).orElse(null);
147+
}
148+
149+
private String getNamespaceFromInfo(DomainPresenceInfo info) {
150+
return Optional.ofNullable(info).map(DomainPresenceInfo::getNamespace).orElse(null);
151+
}
152+
137153
private static CompletableFuture<HttpResponse<String>> createFuture(HttpRequest request) {
138154
return httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString());
139155
}

operator/src/test/java/oracle/kubernetes/operator/StuckPodTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import oracle.kubernetes.operator.helpers.DomainPresenceInfo;
1919
import oracle.kubernetes.operator.helpers.KubernetesTestSupport;
2020
import oracle.kubernetes.operator.helpers.TuningParametersStub;
21+
import oracle.kubernetes.operator.work.Packet;
2122
import oracle.kubernetes.operator.work.Step;
2223
import oracle.kubernetes.utils.SystemClock;
2324
import oracle.kubernetes.utils.SystemClockTestSupport;
@@ -202,6 +203,11 @@ public void runSteps(Step firstStep) {
202203
testSupport.runSteps(firstStep);
203204
}
204205

206+
@Override
207+
public void runSteps(Packet packet, Step firstStep, Runnable completionAction) {
208+
testSupport.runSteps(packet, firstStep);
209+
}
210+
205211
@Override
206212
public DomainProcessor getDomainProcessor() {
207213
return domainProcessor;

operator/src/test/java/oracle/kubernetes/operator/work/FiberTestSupport.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,19 @@ public Packet runSteps(Step step) {
196196
return packet;
197197
}
198198

199+
/**
200+
* Starts a unit-test fiber with the specified packet and step.
201+
*
202+
* @param packet the packet to use
203+
* @param step the first step to run
204+
*/
205+
public Packet runSteps(Packet packet, Step step) {
206+
fiber = engine.createFiber();
207+
fiber.start(step, packet, completionCallback);
208+
209+
return packet;
210+
}
211+
199212
/**
200213
* Starts a unit-test fiber with the specified step.
201214
*

0 commit comments

Comments
 (0)