Add temporary guard to TraceFunctionAroundWrapper for cases which are not properly supported by it

This commit is contained in:
Oleg Zhurakousky
2021-07-28 11:20:19 +02:00
parent 1aaf0a8a26
commit 71f12e2640

View File

@@ -26,6 +26,7 @@ import org.apache.commons.logging.LogFactory;
import org.springframework.cloud.context.scope.refresh.RefreshScopeRefreshedEvent;
import org.springframework.cloud.function.context.catalog.FunctionAroundWrapper;
import org.springframework.cloud.function.context.catalog.FunctionTypeUtils;
import org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry;
import org.springframework.cloud.sleuth.Span;
import org.springframework.cloud.sleuth.Tracer;
@@ -84,6 +85,22 @@ public class TraceFunctionAroundWrapper extends FunctionAroundWrapper
@Override
protected Object doApply(Message<byte[]> message, SimpleFunctionRegistry.FunctionInvocationWrapper targetFunction) {
/*
* This code is temporary to disable conditions for which this interceptor is not ready.
* For example,
* - it does not handle properly input or output of type Publisher
* - it wraps output in Message when function returns a Collection<Message> which it should not do.
*
*/
if ( (!FunctionTypeUtils.isCollectionOfMessage(targetFunction.getOutputType()) && !targetFunction.isOutputTypePublisher())
|| (targetFunction.isSupplier() && !targetFunction.isOutputTypePublisher())
) {
return targetFunction.apply(message); // no instrumentation
}
MessageAndSpans invocationMessage = null;
Span span;
if (message == null && targetFunction.isSupplier()) { // Supplier