Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upgrade dubbo 2.7.3 #237

Closed
wants to merge 41 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
9aa096b
Merge pull request #4 from alipay/master
glmapper Oct 10, 2018
3a897b4
Merge branch 'master-alipay'
Nov 8, 2018
d50a8a2
Merge branch 'master-alipay'
Nov 21, 2018
27923f4
Merge branch 'master' of https://github.com/alipay/sofa-tracer into m…
Dec 14, 2018
c6461b8
Merge branch 'master' of https://github.com/alipay/sofa-tracer into m…
Dec 27, 2018
c4652c4
Merge branch 'master' of https://github.com/alipay/sofa-tracer into m…
Jan 4, 2019
7758538
Merge branch 'master' of https://github.com/alipay/sofa-tracer into m…
Jan 7, 2019
1c94b31
Merge branch 'master-alipay'
Jan 25, 2019
518d87f
Merge branch 'master-alipay'
Jan 30, 2019
f74b0b3
Merge branch 'master-alipay'
Jan 31, 2019
3c09b2a
Merge branch 'master-alipay'
Feb 13, 2019
7747345
Merge branch 'master' of https://github.com/alipay/sofa-tracer into m…
Feb 20, 2019
2832112
Merge branch 'master' of https://github.com/alipay/sofa-tracer into m…
Feb 22, 2019
72b0467
Merge branch 'master' of https://github.com/alipay/sofa-tracer into m…
Feb 22, 2019
ad04066
Merge branch 'master' of https://github.com/alipay/sofa-tracer into m…
Mar 4, 2019
824628f
Merge branch 'master' of https://github.com/alipay/sofa-tracer into m…
Mar 12, 2019
50d352c
Merge branch 'master' of https://github.com/alipay/sofa-tracer into m…
Mar 15, 2019
954d037
Merge branch 'master' of https://github.com/alipay/sofa-tracer into m…
Mar 22, 2019
ad9793a
Merge remote-tracking branch 'upstream/master'
Mar 26, 2019
298a782
Merge branch 'master' of https://github.com/alipay/sofa-tracer into m…
Mar 28, 2019
9160ad1
Merge branch 'master-alipay'
Mar 28, 2019
27245c0
optimize constants
Apr 3, 2019
1590434
Merge branch 'master' of https://github.com/alipay/sofa-tracer into m…
Apr 4, 2019
c6e47d4
Merge branch 'master-alipay'
Apr 7, 2019
f866abf
use english commnet
Apr 8, 2019
c43f948
Merge branch 'master' into optimize-constants
Apr 8, 2019
5b5bfe9
Merge pull request #6 from alipay/master
glmapper Apr 9, 2019
126c208
optimize-constants
Apr 9, 2019
455577e
Merge pull request #7 from glmapper/remove-chinese-annotation-and-sta…
glmapper Apr 9, 2019
ee95b73
use english commnet
Apr 9, 2019
ab7dedb
Merge branch 'master-alipay' into optimize-constants
Apr 11, 2019
3e395c9
Merge pull request #8 from alipay/master
glmapper Apr 11, 2019
7d46bf4
Merge branch 'master' into optimize-constants
Apr 11, 2019
510e1d3
Merge pull request #9 from glmapper/optimize-constants
glmapper Apr 12, 2019
e204673
Merge branch 'master' of https://github.com/alipay/sofa-tracer into m…
Apr 12, 2019
b0e6efb
Merge branch 'master-alipay'
Apr 12, 2019
bfd0cdc
Merge pull request #10 from alipay/master
glmapper May 7, 2019
f44d515
Merge branch 'master-alipay'
Jun 26, 2019
e0ecbbc
fix dubbo 2.7.3
Jul 26, 2019
d716f49
fix properties tag calculate
Jul 27, 2019
c1cfa42
remote cn comment
Jul 27, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,9 @@
<goals>
<goal>jar</goal>
</goals>
<configuration>
<additionalparam>-Xdoclint:none</additionalparam>
</configuration>
</execution>
</executions>
</plugin>
Expand Down
2 changes: 1 addition & 1 deletion sofa-tracer-plugins/sofa-tracer-dubbo-plugin/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.0</version>
<version>2.7.3</version>
<scope>provided</scope>
</dependency>
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,19 @@
import com.alipay.common.tracer.core.span.LogData;
import com.alipay.common.tracer.core.span.SofaTracerSpan;
import com.alipay.common.tracer.core.utils.StringUtils;
import com.alipay.sofa.tracer.plugins.dubbo.constants.AttachmentKeyConstants;
import com.alipay.sofa.tracer.plugins.dubbo.tracer.DubboConsumerSofaTracer;
import com.alipay.sofa.tracer.plugins.dubbo.tracer.DubboProviderSofaTracer;
import io.opentracing.tag.Tags;
import org.apache.dubbo.common.Constants;
import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.remoting.TimeoutException;
import org.apache.dubbo.rpc.*;
import org.apache.dubbo.rpc.Filter;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Result;
import org.apache.dubbo.rpc.RpcContext;
import org.apache.dubbo.rpc.RpcException;
import org.apache.dubbo.rpc.support.RpcUtils;
import java.util.HashMap;
import java.util.Map;
Expand All @@ -44,7 +50,7 @@
* @author: guolei.sgl (guolei.sgl@antfin.com) 2019/2/26 2:02 PM
* @since: 2.3.4
**/
@Activate(group = { Constants.PROVIDER, Constants.CONSUMER }, value = "dubboSofaTracerFilter", order = 1)
@Activate(group = { CommonConstants.PROVIDER, CommonConstants.CONSUMER }, value = "dubboSofaTracerFilter", order = 1)
public class DubboSofaTracerFilter implements Filter {

private String appName = StringUtils.EMPTY_STRING;
Expand Down Expand Up @@ -76,7 +82,7 @@ public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcExcept
String spanKind = spanKind(rpcContext);
Result result;
if (spanKind.equals(Tags.SPAN_KIND_SERVER)) {
result = doServerFilter(rpcContext, invoker, invocation);
result = doServerFilter(invoker, invocation);
} else {
result = doClientFilter(rpcContext, invoker, invocation);
}
Expand Down Expand Up @@ -223,12 +229,11 @@ private Result doClientFilter(RpcContext rpcContext, Invoker<?> invoker, Invocat

/**
* rpc client handler
* @param rpcContext
* @param invoker
* @param invocation
* @return
*/
private Result doServerFilter(RpcContext rpcContext, Invoker<?> invoker, Invocation invocation) {
private Result doServerFilter(Invoker<?> invoker, Invocation invocation) {
if (dubboProviderSofaTracer == null) {
this.dubboProviderSofaTracer = DubboProviderSofaTracer
.getDubboProviderSofaTracerSingleton();
Expand Down Expand Up @@ -272,7 +277,7 @@ private Result doServerFilter(RpcContext rpcContext, Invoker<?> invoker, Invocat
}

private SofaTracerSpan serverReceived(Invocation invocation) {
Map<String, String> tags = new HashMap<String, String>();
Map<String, String> tags = new HashMap<>();
tags.put(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_SERVER);
String serializeSpanContext = invocation.getAttachments()
.get(CommonSpanTags.RPC_TRACE_NAME);
Expand Down Expand Up @@ -309,29 +314,38 @@ private void appendElapsedTimeTags(Invocation invocation, SofaTracerSpan sofaTra
if (sofaTracerSpan == null) {
return;
}
String reqSize = invocation.getAttachment(Constants.INPUT_KEY);
String respSize = result.getAttachment(Constants.OUTPUT_KEY);
String reqSize;
String respSize;
String elapsed;
String deElapsed;
if (isClient) {
elapsed = invocation.getAttachment(CommonSpanTags.CLIENT_SERIALIZE_TIME);
deElapsed = invocation.getAttachment(CommonSpanTags.CLIENT_DESERIALIZE_TIME);
//The client request serialization time-consuming
sofaTracerSpan
.setTag(CommonSpanTags.CLIENT_SERIALIZE_TIME, parseAttachment(elapsed, 0));
//The client accepted response deserialization time-consuming
sofaTracerSpan.setTag(CommonSpanTags.CLIENT_DESERIALIZE_TIME,
reqSize = invocation.getAttachment(AttachmentKeyConstants.CLIENT_SERIALIZE_SIZE);
elapsed = invocation.getAttachment(AttachmentKeyConstants.CLIENT_SERIALIZE_TIME);
respSize = result.getAttachment(AttachmentKeyConstants.CLIENT_DESERIALIZE_SIZE);
deElapsed = result.getAttachment(AttachmentKeyConstants.CLIENT_DESERIALIZE_TIME);
sofaTracerSpan.setTag(AttachmentKeyConstants.CLIENT_SERIALIZE_TIME,
parseAttachment(elapsed, 0));
sofaTracerSpan.setTag(AttachmentKeyConstants.CLIENT_DESERIALIZE_TIME,
parseAttachment(deElapsed, 0));
sofaTracerSpan.setTag(AttachmentKeyConstants.CLIENT_SERIALIZE_SIZE,
parseAttachment(reqSize, 0));
sofaTracerSpan.setTag(AttachmentKeyConstants.CLIENT_DESERIALIZE_SIZE,
parseAttachment(respSize, 0));
} else {
elapsed = invocation.getAttachment(CommonSpanTags.SERVER_SERIALIZE_TIME);
deElapsed = invocation.getAttachment(CommonSpanTags.SERVER_DESERIALIZE_TIME);
sofaTracerSpan
.setTag(CommonSpanTags.SERVER_SERIALIZE_TIME, parseAttachment(elapsed, 0));
sofaTracerSpan.setTag(CommonSpanTags.SERVER_DESERIALIZE_TIME,
reqSize = invocation.getAttachment(AttachmentKeyConstants.SERVER_DESERIALIZE_SIZE);
deElapsed = invocation.getAttachment(AttachmentKeyConstants.SERVER_DESERIALIZE_TIME);
respSize = result.getAttachment(AttachmentKeyConstants.SERVER_SERIALIZE_SIZE);
elapsed = result.getAttachment(AttachmentKeyConstants.SERVER_SERIALIZE_TIME);
sofaTracerSpan.setTag(AttachmentKeyConstants.SERVER_DESERIALIZE_SIZE,
parseAttachment(reqSize, 0));
sofaTracerSpan.setTag(AttachmentKeyConstants.SERVER_DESERIALIZE_TIME,
parseAttachment(deElapsed, 0));
sofaTracerSpan.setTag(AttachmentKeyConstants.SERVER_SERIALIZE_SIZE,
parseAttachment(respSize, 0));
sofaTracerSpan.setTag(AttachmentKeyConstants.SERVER_SERIALIZE_TIME,
parseAttachment(elapsed, 0));
}
sofaTracerSpan.setTag(CommonSpanTags.REQ_SIZE, parseAttachment(reqSize, 0));
sofaTracerSpan.setTag(CommonSpanTags.RESP_SIZE, parseAttachment(respSize, 0));

}

private int parseAttachment(String value, int defaultVal) {
Expand Down Expand Up @@ -361,7 +375,7 @@ private void appendRpcServerSpanTags(Invoker<?> invoker, SofaTracerSpan sofaTrac
tagsStr.put(CommonSpanTags.SERVICE, service == null ? BLANK : service);
String methodName = rpcContext.getMethodName();
tagsStr.put(CommonSpanTags.METHOD, methodName == null ? BLANK : methodName);
String app = rpcContext.getUrl().getParameter(Constants.APPLICATION_KEY);
String app = rpcContext.getUrl().getParameter(CommonConstants.APPLICATION_KEY);
tagsStr.put(CommonSpanTags.REMOTE_HOST, rpcContext.getRemoteHost());
tagsStr.put(CommonSpanTags.LOCAL_APP, app == null ? BLANK : app);
tagsStr.put(CommonSpanTags.CURRENT_THREAD_NAME, Thread.currentThread().getName());
Expand All @@ -385,7 +399,7 @@ private void appendRpcClientSpanTags(Invoker<?> invoker, SofaTracerSpan sofaTrac
String methodName = rpcContext.getMethodName();
tagsStr.put(CommonSpanTags.METHOD, methodName == null ? BLANK : methodName);
tagsStr.put(CommonSpanTags.CURRENT_THREAD_NAME, Thread.currentThread().getName());
String app = rpcContext.getUrl().getParameter(Constants.APPLICATION_KEY);
String app = rpcContext.getUrl().getParameter(CommonConstants.APPLICATION_KEY);
tagsStr.put(CommonSpanTags.LOCAL_APP, app == null ? BLANK : app);
tagsStr.put(CommonSpanTags.REMOTE_HOST, rpcContext.getRemoteHost());
tagsStr.put(CommonSpanTags.REMOTE_PORT, String.valueOf(rpcContext.getRemotePort()));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alipay.sofa.tracer.plugins.dubbo.constants;

/**
* @author: guolei.sgl (guolei.sgl@antfin.com) 2019/7/26 5:25 PM
* @since:
**/
public class AttachmentKeyConstants {

public static final String SERVER_DESERIALIZE_SIZE = "server.deserialize.size";
public static final String SERVER_SERIALIZE_SIZE = "server.serialize.size";
public static final String CLIENT_DESERIALIZE_SIZE = "client.deserialize.size";
public static final String CLIENT_SERIALIZE_SIZE = "client.serialize.size";

public static final String SERVER_DESERIALIZE_TIME = "server.deserialize.time";
public static final String SERVER_SERIALIZE_TIME = "server.serialize.time";
public static final String CLIENT_DESERIALIZE_TIME = "client.deserialize.time";
public static final String CLIENT_SERIALIZE_TIME = "client.serialize.time";
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import com.alipay.common.tracer.core.span.CommonSpanTags;
import com.alipay.common.tracer.core.span.SofaTracerSpan;
import com.alipay.common.tracer.core.utils.StringUtils;
import com.alipay.sofa.tracer.plugins.dubbo.constants.AttachmentKeyConstants;
import io.opentracing.tag.Tags;

import java.io.IOException;
Expand Down Expand Up @@ -69,16 +70,17 @@ public String encode(SofaTracerSpan sofaTracerSpan) throws IOException {
data.append(CommonSpanTags.LOCAL_HOST, tagStr.get(CommonSpanTags.LOCAL_HOST));
//request serialize time
data.append(CommonSpanTags.CLIENT_SERIALIZE_TIME,
tagNum.get(CommonSpanTags.CLIENT_SERIALIZE_TIME));
tagNum.get(AttachmentKeyConstants.CLIENT_SERIALIZE_TIME));
//response deserialize time
data.append(CommonSpanTags.CLIENT_DESERIALIZE_TIME,
tagNum.get(CommonSpanTags.CLIENT_DESERIALIZE_TIME));
tagNum.get(AttachmentKeyConstants.CLIENT_DESERIALIZE_TIME));
//Request Body bytes length
Number reqSizeNum = tagNum.get(CommonSpanTags.REQ_SIZE);
Number reqSizeNum = tagNum.get(AttachmentKeyConstants.CLIENT_SERIALIZE_SIZE);
data.append(CommonSpanTags.REQ_SIZE, reqSizeNum == null ? 0 : reqSizeNum.longValue());
//Response Body bytes length
Number respSizeNum = tagNum.get(CommonSpanTags.REQ_SIZE);
Number respSizeNum = tagNum.get(AttachmentKeyConstants.CLIENT_DESERIALIZE_SIZE);
data.append(CommonSpanTags.RESP_SIZE, respSizeNum == null ? 0 : respSizeNum.longValue());

//Http status code
data.append(CommonSpanTags.RESULT_CODE, tagStr.get(CommonSpanTags.RESULT_CODE));
//error message
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import com.alipay.common.tracer.core.span.CommonSpanTags;
import com.alipay.common.tracer.core.span.SofaTracerSpan;
import com.alipay.common.tracer.core.utils.StringUtils;
import com.alipay.sofa.tracer.plugins.dubbo.constants.AttachmentKeyConstants;
import io.opentracing.tag.Tags;

import java.io.IOException;
Expand Down Expand Up @@ -60,10 +61,17 @@ public String encode(SofaTracerSpan sofaTracerSpan) throws IOException {
data.append(CommonSpanTags.LOCAL_PORT, tagStr.get(CommonSpanTags.LOCAL_PORT));
//protocol
data.append(CommonSpanTags.PROTOCOL, tagStr.get(CommonSpanTags.PROTOCOL));
long serializeTime = getTime(tagNum.get(CommonSpanTags.SERVER_SERIALIZE_TIME));

long serializeTime = getTime(tagNum.get(AttachmentKeyConstants.SERVER_SERIALIZE_TIME));
data.append(CommonSpanTags.SERVER_SERIALIZE_TIME, serializeTime);
long deserializeTime = getTime(tagNum.get(CommonSpanTags.SERVER_DESERIALIZE_TIME));
long deserializeTime = getTime(tagNum.get(AttachmentKeyConstants.SERVER_DESERIALIZE_TIME));
data.append(CommonSpanTags.SERVER_DESERIALIZE_TIME, deserializeTime);

Number reqSizeNum = tagNum.get(AttachmentKeyConstants.SERVER_DESERIALIZE_SIZE);
data.append(CommonSpanTags.REQ_SIZE, reqSizeNum == null ? 0 : reqSizeNum.longValue());
Number respSizeNum = tagNum.get(AttachmentKeyConstants.SERVER_SERIALIZE_SIZE);
data.append(CommonSpanTags.RESP_SIZE, respSizeNum == null ? 0 : respSizeNum.longValue());

//Http status code
data.append(CommonSpanTags.RESULT_CODE, tagStr.get(CommonSpanTags.RESULT_CODE));
//error message
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,14 @@
*/
package com.alipay.sofa.tracer.plugins.dubbo.wrapper;

import com.alipay.common.tracer.core.span.CommonSpanTags;
import org.apache.dubbo.common.Constants;
import com.alipay.sofa.tracer.plugins.dubbo.constants.AttachmentKeyConstants;
import org.apache.dubbo.remoting.Channel;
import org.apache.dubbo.remoting.Codec2;
import org.apache.dubbo.remoting.buffer.ChannelBuffer;
import org.apache.dubbo.remoting.exchange.Request;
import org.apache.dubbo.remoting.exchange.Response;
import org.apache.dubbo.rpc.AppResponse;
import org.apache.dubbo.rpc.RpcInvocation;
import org.apache.dubbo.rpc.RpcResult;
import java.io.IOException;

/**
Expand All @@ -51,10 +50,9 @@ public void encode(Channel channel, ChannelBuffer buffer, Object message) throws
return;
}
} else if (message instanceof Response) {
Object result = ((Response) message).getResult();
if (result instanceof RpcResult) {
RpcResult rpcResult = (RpcResult) result;
encodeResultWithTracer(channel, buffer, message, rpcResult);
Object response = ((Response) message).getResult();
if (response instanceof AppResponse) {
encodeResultWithTracer(channel, buffer, response);
return;
}
}
Expand All @@ -76,27 +74,32 @@ protected void encodeRequestWithTracer(Channel channel, ChannelBuffer buffer, Ob
codec.encode(channel, buffer, message);
int reqSize = buffer.writerIndex() - index;
long elapsed = System.currentTimeMillis() - startTime;
invocation.setAttachment(Constants.INPUT_KEY, String.valueOf(reqSize));
invocation.setAttachment(CommonSpanTags.CLIENT_SERIALIZE_TIME, String.valueOf(elapsed));
invocation.setAttachment(AttachmentKeyConstants.CLIENT_SERIALIZE_SIZE,
String.valueOf(reqSize));
invocation.setAttachment(AttachmentKeyConstants.CLIENT_SERIALIZE_TIME,
String.valueOf(elapsed));
}

/**
* @param channel a long connection
* @param buffer buffer
* @param result the original Request object
* @param rpcResult result of Response
* @throws IOException serialization exception
*/
protected void encodeResultWithTracer(Channel channel, ChannelBuffer buffer, Object result,
RpcResult rpcResult) throws IOException {

long startTime = System.currentTimeMillis();
int index = buffer.writerIndex();
codec.encode(channel, buffer, result);
int respSize = buffer.writerIndex() - index;
long elapsed = System.currentTimeMillis() - startTime;
rpcResult.setAttachment(Constants.OUTPUT_KEY, String.valueOf(respSize));
rpcResult.setAttachment(CommonSpanTags.SERVER_SERIALIZE_TIME, String.valueOf(elapsed));
protected void encodeResultWithTracer(Channel channel, ChannelBuffer buffer, Object result)
throws IOException {
Object response = ((Response) result).getResult();
if (response instanceof AppResponse) {
long startTime = System.currentTimeMillis();
int index = buffer.writerIndex();
codec.encode(channel, buffer, result);
int respSize = buffer.writerIndex() - index;
long elapsed = System.currentTimeMillis() - startTime;
((AppResponse) response).setAttachment(AttachmentKeyConstants.SERVER_SERIALIZE_SIZE,
String.valueOf(respSize));
((AppResponse) response).setAttachment(AttachmentKeyConstants.SERVER_SERIALIZE_TIME,
String.valueOf(elapsed));
}
}

/**
Expand All @@ -118,18 +121,19 @@ public Object decode(Channel channel, ChannelBuffer input) throws IOException {
Object data = ((Request) ret).getData();
if (data instanceof RpcInvocation) {
RpcInvocation invocation = (RpcInvocation) data;
invocation.setAttachment(Constants.INPUT_KEY, String.valueOf(size));
invocation.setAttachment(CommonSpanTags.SERVER_DESERIALIZE_TIME,
invocation.setAttachment(AttachmentKeyConstants.SERVER_DESERIALIZE_SIZE,
String.valueOf(size));
invocation.setAttachment(AttachmentKeyConstants.SERVER_DESERIALIZE_TIME,
String.valueOf(elapsed));
}

} else if (ret instanceof Response) {
// client-side deserialize the Response
Object result = ((Response) ret).getResult();
if (result instanceof RpcResult) {
RpcResult rpcResult = (RpcResult) result;
rpcResult.setAttachment(Constants.OUTPUT_KEY, String.valueOf(size));
rpcResult.setAttachment(CommonSpanTags.CLIENT_DESERIALIZE_TIME,
if (result instanceof AppResponse) {
AppResponse rpcResult = (AppResponse) result;
rpcResult.setAttachment(AttachmentKeyConstants.CLIENT_DESERIALIZE_SIZE,
String.valueOf(size));
rpcResult.setAttachment(AttachmentKeyConstants.CLIENT_DESERIALIZE_TIME,
String.valueOf(elapsed));
}
}
Expand Down