Fix ClassCastException from CallbackAdapterInterceptor (#6462)
This commit is contained in:
parent
aacaade596
commit
3ce4dc0da8
|
|
@ -16,6 +16,7 @@ Release Notes.
|
||||||
* Enhance gRPC log appender to allow layout pattern.
|
* Enhance gRPC log appender to allow layout pattern.
|
||||||
* Fix apm-dubbo-2.7.x-plugin memory leak due to some Dubbo RpcExceptions.
|
* Fix apm-dubbo-2.7.x-plugin memory leak due to some Dubbo RpcExceptions.
|
||||||
* Fix lettuce-5.x-plugin get null host in redis sentinel mode.
|
* Fix lettuce-5.x-plugin get null host in redis sentinel mode.
|
||||||
|
* Fix ClassCastException by making CallbackAdapterInterceptor to implement EnhancedInstance interface in the spring-kafka plugin.
|
||||||
|
|
||||||
#### OAP-Backend
|
#### OAP-Backend
|
||||||
* Allow user-defined `JAVA_OPTS` in the startup script.
|
* Allow user-defined `JAVA_OPTS` in the startup script.
|
||||||
|
|
|
||||||
|
|
@ -25,12 +25,13 @@ import org.apache.skywalking.apm.agent.core.context.ContextSnapshot;
|
||||||
import org.apache.skywalking.apm.agent.core.context.tag.Tags;
|
import org.apache.skywalking.apm.agent.core.context.tag.Tags;
|
||||||
import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan;
|
import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan;
|
||||||
import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
|
import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
|
||||||
|
import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
|
||||||
import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
|
import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* implements Callback and EnhancedInstance, for kafka callback in lambda expression
|
* implements Callback and EnhancedInstance, for kafka callback in lambda expression
|
||||||
*/
|
*/
|
||||||
public class CallbackAdapterInterceptor implements Callback {
|
public class CallbackAdapterInterceptor implements Callback, EnhancedInstance {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* user Callback object
|
* user Callback object
|
||||||
|
|
@ -64,4 +65,13 @@ public class CallbackAdapterInterceptor implements Callback {
|
||||||
ContextManager.stopSpan();
|
ContextManager.stopSpan();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getSkyWalkingDynamicField() {
|
||||||
|
return callbackCache;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setSkyWalkingDynamicField(final Object value) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -65,24 +65,33 @@ public class CallbackInterceptorTest {
|
||||||
private Object[] argumentsWithException;
|
private Object[] argumentsWithException;
|
||||||
private Class[] argumentTypes;
|
private Class[] argumentTypes;
|
||||||
|
|
||||||
private EnhancedInstance callBackInstance = new EnhancedInstance() {
|
private EnhancedInstance callBackInstance;
|
||||||
|
|
||||||
|
private static class CallbackInstance implements EnhancedInstance {
|
||||||
|
private CallbackCache cache;
|
||||||
|
|
||||||
|
public CallbackInstance(CallbackCache cache) {
|
||||||
|
this.cache = cache;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getSkyWalkingDynamicField() {
|
public Object getSkyWalkingDynamicField() {
|
||||||
CallbackCache cache = new CallbackCache();
|
|
||||||
cache.setSnapshot(MockContextSnapshot.INSTANCE.mockContextSnapshot());
|
|
||||||
return cache;
|
return cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setSkyWalkingDynamicField(Object value) {
|
public void setSkyWalkingDynamicField(Object value) {
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
callbackInterceptor = new CallbackInterceptor();
|
callbackInterceptor = new CallbackInterceptor();
|
||||||
|
|
||||||
|
CallbackCache cache = new CallbackCache();
|
||||||
|
cache.setSnapshot(MockContextSnapshot.INSTANCE.mockContextSnapshot());
|
||||||
|
callBackInstance = new CallbackInstance(cache);
|
||||||
|
|
||||||
arguments = new Object[] {
|
arguments = new Object[] {
|
||||||
recordMetadata,
|
recordMetadata,
|
||||||
null
|
null
|
||||||
|
|
@ -133,6 +142,18 @@ public class CallbackInterceptorTest {
|
||||||
assertCallbackSegmentRef(traceSegment.getRefs());
|
assertCallbackSegmentRef(traceSegment.getRefs());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCallbackWithCallbackAdapterInterceptor() throws Throwable {
|
||||||
|
CallbackCache cacheForAdapter = new CallbackCache();
|
||||||
|
cacheForAdapter.setSnapshot(MockContextSnapshot.INSTANCE.mockContextSnapshot());
|
||||||
|
CallbackAdapterInterceptor callbackAdapterInterceptor = new CallbackAdapterInterceptor(cacheForAdapter);
|
||||||
|
|
||||||
|
CallbackCache cache = new CallbackCache();
|
||||||
|
cache.setCallback(callbackAdapterInterceptor);
|
||||||
|
EnhancedInstance instance = new CallbackInstance(cache);
|
||||||
|
callbackInterceptor.beforeMethod(instance, null, arguments, argumentTypes, null);
|
||||||
|
}
|
||||||
|
|
||||||
private void assertCallbackSpanWithException(AbstractTracingSpan span) {
|
private void assertCallbackSpanWithException(AbstractTracingSpan span) {
|
||||||
assertCallbackSpan(span);
|
assertCallbackSpan(span);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue