Remove some Optional usages (#8190)

I applied [this
comment](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/8131#discussion_r1151076724)
to the whole codebase and removed some `Optional`s that were used in the
hot path
This commit is contained in:
Mateusz Rzeszutek 2023-04-03 09:13:59 +02:00 committed by GitHub
parent d6271cccc7
commit 46e5219f19
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 51 additions and 39 deletions

View File

@ -5,12 +5,12 @@
package io.opentelemetry.javaagent.instrumentation.rabbitmq;
import static java.util.Collections.emptySet;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.GetResponse;
import io.opentelemetry.context.propagation.TextMapGetter;
import java.util.Collections;
import java.util.Map;
import java.util.Optional;
import javax.annotation.Nullable;
enum ReceiveRequestTextMapGetter implements TextMapGetter<ReceiveRequest> {
@ -18,23 +18,34 @@ enum ReceiveRequestTextMapGetter implements TextMapGetter<ReceiveRequest> {
@Override
public Iterable<String> keys(ReceiveRequest carrier) {
return Optional.of(carrier)
.map(ReceiveRequest::getResponse)
.map(GetResponse::getProps)
.map(AMQP.BasicProperties::getHeaders)
.map(Map::keySet)
.orElse(Collections.emptySet());
Map<String, Object> headers = getHeaders(carrier);
return headers == null ? emptySet() : headers.keySet();
}
@Nullable
@Override
public String get(@Nullable ReceiveRequest carrier, String key) {
return Optional.ofNullable(carrier)
.map(ReceiveRequest::getResponse)
.map(GetResponse::getProps)
.map(AMQP.BasicProperties::getHeaders)
.map(headers -> headers.get(key))
.map(Object::toString)
.orElse(null);
Map<String, Object> headers = getHeaders(carrier);
if (headers == null) {
return null;
}
Object value = headers.get(key);
return value == null ? null : value.toString();
}
@Nullable
private static Map<String, Object> getHeaders(@Nullable ReceiveRequest carrier) {
if (carrier == null) {
return null;
}
GetResponse response = carrier.getResponse();
if (response == null) {
return null;
}
AMQP.BasicProperties props = response.getProps();
if (props == null) {
return null;
}
return props.getHeaders();
}
}

View File

@ -30,12 +30,9 @@ public abstract class AbstractThreadDispatchingHandler implements RecordedEventH
@Override
public void accept(RecordedEvent ev) {
grouper
.groupedName(ev)
.ifPresent(
groupedThreadName ->
perThread
.computeIfAbsent(groupedThreadName, this::createPerThreadSummarizer)
.accept(ev));
String groupedName = grouper.groupedName(ev);
if (groupedName != null) {
perThread.computeIfAbsent(groupedName, this::createPerThreadSummarizer).accept(ev);
}
}
}

View File

@ -5,7 +5,7 @@
package io.opentelemetry.instrumentation.runtimetelemetryjfr.internal;
import java.util.Optional;
import javax.annotation.Nullable;
import jdk.jfr.consumer.RecordedEvent;
import jdk.jfr.consumer.RecordedThread;
@ -14,13 +14,15 @@ import jdk.jfr.consumer.RecordedThread;
* any time.
*/
public final class ThreadGrouper {
// FIXME doesn't actually do any grouping, but should be safe for now
public Optional<String> groupedName(RecordedEvent ev) {
@Nullable
public String groupedName(RecordedEvent ev) {
Object thisField = ev.getValue("eventThread");
if (thisField instanceof RecordedThread) {
RecordedThread thread = (RecordedThread) thisField;
return Optional.of(thread.getJavaName());
return thread.getJavaName();
}
return Optional.empty();
return null;
}
}

View File

@ -8,7 +8,6 @@ package io.opentelemetry.instrumentation.spring.webflux.v5_3;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesGetter;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import javax.annotation.Nullable;
import org.springframework.web.reactive.HandlerMapping;
import org.springframework.web.server.ServerWebExchange;
@ -55,10 +54,7 @@ enum WebfluxServerHttpAttributesGetter
if (path == null && query == null) {
return null;
}
if (query != null) {
query = "?" + query;
}
return Optional.ofNullable(path).orElse("") + Optional.ofNullable(query).orElse("");
return (path == null ? "" : path) + (query == null ? "" : "?" + query);
}
@Nullable

View File

@ -11,7 +11,6 @@ import static org.springframework.web.util.ServletRequestPathUtils.PATH_ATTRIBUT
import io.opentelemetry.context.Context;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean;
import javax.annotation.Nullable;
import javax.servlet.FilterConfig;
@ -65,9 +64,13 @@ final class HttpRouteSupport {
boolean hasMappings() {
if (contextRefreshTriggered.compareAndSet(true, false)) {
// reload the handler mappings only if the web app context was recently refreshed
Optional.ofNullable(dispatcherServlet)
.map(DispatcherServlet::getHandlerMappings)
.ifPresent(this::setHandlerMappings);
DispatcherServlet dispatcherServlet = this.dispatcherServlet;
if (dispatcherServlet != null) {
List<HandlerMapping> mappings = dispatcherServlet.getHandlerMappings();
if (mappings != null) {
setHandlerMappings(mappings);
}
}
}
return handlerMappings != null;
}

View File

@ -13,7 +13,6 @@ import jakarta.servlet.FilterConfig;
import jakarta.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean;
import javax.annotation.Nullable;
import org.springframework.context.ApplicationListener;
@ -65,9 +64,13 @@ final class HttpRouteSupport {
boolean hasMappings() {
if (contextRefreshTriggered.compareAndSet(true, false)) {
// reload the handler mappings only if the web app context was recently refreshed
Optional.ofNullable(dispatcherServlet)
.map(DispatcherServlet::getHandlerMappings)
.ifPresent(this::setHandlerMappings);
DispatcherServlet dispatcherServlet = this.dispatcherServlet;
if (dispatcherServlet != null) {
List<HandlerMapping> mappings = dispatcherServlet.getHandlerMappings();
if (mappings != null) {
setHandlerMappings(mappings);
}
}
}
return handlerMappings != null;
}