This is an automated email from the ASF dual-hosted git repository.
ghenzler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/felix-dev.git
The following commit(s) were added to refs/heads/master by this push:
new 5b9162d13f FELIX-6663 add logging when the HC executions exceeds the
timeout
new fc6f4c171d Merge pull request #239 from joerghoh/FELIX-6663-log-timing
5b9162d13f is described below
commit 5b9162d13ffa750d86a240d4c9b41645d511c72c
Author: Joerg Hoh <[email protected]>
AuthorDate: Tue Oct 24 10:38:28 2023 +0200
FELIX-6663 add logging when the HC executions exceeds the timeout
---
.../impl/executor/HealthCheckExecutorImpl.java | 39 +++++++++++++++++-----
1 file changed, 30 insertions(+), 9 deletions(-)
diff --git
a/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/HealthCheckExecutorImpl.java
b/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/HealthCheckExecutorImpl.java
index 9702626742..0f7508af13 100644
---
a/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/HealthCheckExecutorImpl.java
+++
b/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/HealthCheckExecutorImpl.java
@@ -203,16 +203,17 @@ public class HealthCheckExecutorImpl implements
ExtendedHealthCheckExecutor, Ser
@Override
public List<HealthCheckExecutionResult> execute(final
ServiceReference<HealthCheck>[] healthCheckReferences,
HealthCheckExecutionOptions options) {
+
+ long effectiveTimeout = getEffectiveTimeout(options);
final long startTime = System.currentTimeMillis();
- final List<HealthCheckExecutionResult> results = new
ArrayList<HealthCheckExecutionResult>();
+ final List<HealthCheckExecutionResult> results = new ArrayList<>();
final List<HealthCheckMetadata> healthCheckDescriptors =
getHealthCheckMetadata(healthCheckReferences);
+ final long intermediateTiming = System.currentTimeMillis();
+
createResultsForDescriptors(healthCheckDescriptors, results, options);
-
- if (logger.isDebugEnabled()) {
- logger.debug("Time consumed for all checks: {}",
msHumanReadable(System.currentTimeMillis() - startTime));
- }
+
// sort result
Collections.sort(results, new Comparator<HealthCheckExecutionResult>()
{
@@ -224,6 +225,20 @@ public class HealthCheckExecutorImpl implements
ExtendedHealthCheckExecutor, Ser
}
});
+
+ final long completionTime = System.currentTimeMillis();
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("Time consumed for all checks: {}",
msHumanReadable(completionTime - startTime));
+ }
+
+ // the completion of this request exceeds the provided timeout
configuration, we should warn about it
+ if (completionTime - startTime > effectiveTimeout) {
+ logger.warn("execution of healthchecks exceeded the timeout value
of {}ms. "
+ + "(Creation of descriptors={}ms, execution of the
checks={}ms, total={}ms)", effectiveTimeout,
+ intermediateTiming-startTime, completionTime -
intermediateTiming, completionTime - startTime);
+ }
+
return results;
}
@@ -368,10 +383,7 @@ public class HealthCheckExecutorImpl implements
ExtendedHealthCheckExecutor, Ser
final long callExcutionStartTime = System.currentTimeMillis();
boolean allFuturesDone;
- long effectiveTimeout = this.timeoutInMs;
- if (options != null && options.getOverrideGlobalTimeout() > 0) {
- effectiveTimeout = options.getOverrideGlobalTimeout();
- }
+ long effectiveTimeout = getEffectiveTimeout(options);
if (futuresForResultOfThisCall.isEmpty()) {
return; // nothing to wait for (usually because of cached results)
@@ -480,4 +492,13 @@ public class HealthCheckExecutorImpl implements
ExtendedHealthCheckExecutor, Ser
this.longRunningFutureThresholdForRedMs =
longRunningFutureThresholdForRedMs;
}
+ // Calculates the effective timeout based on global configuration and the
provided options
+ private long getEffectiveTimeout(HealthCheckExecutionOptions options) {
+ long effectiveTimeout = this.timeoutInMs;
+ if (options != null && options.getOverrideGlobalTimeout() > 0) {
+ effectiveTimeout = options.getOverrideGlobalTimeout();
+ }
+ return effectiveTimeout;
+ }
+
}