FIX: NPE when thrift field is nested (#6909)

* FIX: NPE when field is nested

* ADD: change.md

Co-authored-by: Yang Xin <yangxinbj@fenbi.com>
This commit is contained in:
Leon Yang 2021-05-07 13:59:06 +08:00 committed by GitHub
parent 004eef65ec
commit 0036ea674f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 17 deletions

View File

@ -23,6 +23,7 @@ Release Notes.
* Add an optional agent plugin to support mybatis. * Add an optional agent plugin to support mybatis.
* Add `spring-cloud-gateway-3.x` optional plugin. * Add `spring-cloud-gateway-3.x` optional plugin.
* Add `okhttp-4.x` plugin. * Add `okhttp-4.x` plugin.
* Fix NPE when thrift field is nested in plugin `thrift`
#### OAP-Backend #### OAP-Backend
* BugFix: filter invalid Envoy access logs whose socket address is empty. * BugFix: filter invalid Envoy access logs whose socket address is empty.

View File

@ -85,25 +85,29 @@ public class ServerInProtocolWrapper extends AbstractProtocolWrapper {
} }
return readFieldBegin(); return readFieldBegin();
} }
if (field.type == TType.STOP) {
Boolean haveCreatedSpan = return field;
(Boolean) ContextManager.getRuntimeContext().get(HAVE_CREATED_SPAN); }
if (haveCreatedSpan != null && !haveCreatedSpan) {
try { @Override
AbstractSpan span = ContextManager.createEntrySpan( public void readMessageEnd() throws TException {
context.getOperatorName(), createContextCarrier(null)); super.readMessageEnd();
span.start(context.startTime); Boolean haveCreatedSpan =
span.tag(TAG_ARGS, context.getArguments()); (Boolean) ContextManager.getRuntimeContext().get(HAVE_CREATED_SPAN);
span.setComponent(ComponentsDefine.THRIFT_SERVER); if (haveCreatedSpan != null && !haveCreatedSpan) {
SpanLayer.asRPCFramework(span); try {
} catch (Throwable throwable) { AbstractSpan span = ContextManager.createEntrySpan(
LOGGER.error("Failed to create EntrySpan.", throwable); context.getOperatorName(), createContextCarrier(null));
} finally { span.start(context.startTime);
context = null; span.tag(TAG_ARGS, context.getArguments());
} span.setComponent(ComponentsDefine.THRIFT_SERVER);
SpanLayer.asRPCFramework(span);
} catch (Throwable throwable) {
LOGGER.error("Failed to create EntrySpan.", throwable);
} finally {
context = null;
} }
} }
return field;
} }
private ContextCarrier createContextCarrier(Map<String, String> header) { private ContextCarrier createContextCarrier(Map<String, String> header) {