Skip to content

Commit 4a3518b

Browse files
authored
Some corrections and performance improvements in CorrelationIdFilter (#183)
* Directly extract correlation-id from traceparent without creating a string array and two not necessary substrings. * Remove not(<>) predicate since it leads (very likely) to allocation. By using ?: it could be formulated without negation. * traceparent parsing without String[] and not required substring creation.
1 parent 437073e commit 4a3518b

File tree

1 file changed

+15
-14
lines changed

1 file changed

+15
-14
lines changed

cf-java-logging-support-servlet/src/main/java/com/sap/hcp/cf/logging/servlet/filter/CorrelationIdFilter.java

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@
22

33
import static com.sap.hcp.cf.logging.common.customfields.CustomField.customField;
44
import static com.sap.hcp.cf.logging.common.request.HttpHeaders.W3C_TRACEPARENT;
5-
import static java.util.Optional.ofNullable;
65

76
import java.util.UUID;
8-
import java.util.function.Predicate;
97

108
import javax.servlet.http.HttpServletRequest;
119
import javax.servlet.http.HttpServletResponse;
@@ -27,8 +25,8 @@
2725
public class CorrelationIdFilter extends AbstractLoggingFilter {
2826

2927
private static final Logger LOG = LoggerFactory.getLogger(CorrelationIdFilter.class);
30-
private HttpHeader correlationHeader;
31-
private HttpHeader traceparentHeader;
28+
private final HttpHeader correlationHeader;
29+
private final HttpHeader traceparentHeader;
3230

3331
public CorrelationIdFilter() {
3432
this(HttpHeaders.CORRELATION_ID);
@@ -65,23 +63,26 @@ private String determineCorrelationId(HttpServletRequest request) {
6563
return correlationId;
6664
}
6765

68-
private boolean isBlankOrDefault(String value) {
66+
private static boolean isBlankOrDefault(String value) {
6967
return value == null || value.isEmpty() || value.equals(Defaults.UNKNOWN);
7068
}
7169

7270
private String getCorrelationIdFromTraceparent(HttpServletRequest request) {
7371
String traceparent = HttpHeaderUtilities.getHeaderValue(request, traceparentHeader);
74-
return ofNullable(traceparent).filter(not(this::isBlankOrDefault)).map(this::parseTraceparent).orElse(
75-
null);
72+
return isBlankOrDefault(traceparent) ? null : parseTraceparent(traceparent);
7673
}
7774

78-
private <T> Predicate<T> not(Predicate<T> p) {
79-
return p.negate();
80-
}
81-
82-
private String parseTraceparent(String value) {
83-
String[] tokens = value.split("-");
84-
return tokens.length >= 2 ? tokens[1] : null;
75+
private static String parseTraceparent(String value) {
76+
int idx1 = value.indexOf('-');
77+
if (idx1 != -1) {
78+
++idx1;
79+
int idx2 = value.indexOf('-', idx1);
80+
if (idx2 != -1) {
81+
// return string between first and second '-'.
82+
return value.substring(idx1, idx2);
83+
}
84+
}
85+
return null;
8586
}
8687

8788
private void addCorrelationIdHeader(HttpServletResponse response, String correlationId) {

0 commit comments

Comments
 (0)