Skip to content

Commit

Permalink
fixed tracing bug.
Browse files Browse the repository at this point in the history
  • Loading branch information
ujued committed Feb 21, 2019
1 parent a2e7258 commit 811e3f0
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@ public class TracingConstants {

public static final String APP_MAP = "appMap";

public static final String THREAD_ID = "threadId";

public static final String HEADER_KEY_GROUP_ID = "X-Group-ID";

public static final String HEADER_KEY_APP_MAP = "X-App-Map";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,16 @@
import org.springframework.util.StringUtils;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;

/**
* Description:
* 1. {@code fields}为 {@code null}。发起方出现,未开始事务组
* 2. {@code fields}不为空,fields.get(TracingConstants.GROUP_ID) 是 {@code empty}。参与方出现,未开启事务组。
* 3. TBD
* Date: 19-1-28 下午4:21
*
* @author ujued
Expand Down Expand Up @@ -73,22 +74,24 @@ public static void init(Map<String, String> initFields) {
if (Objects.isNull(tracingContext.fields)) {
tracingContext.fields = new HashMap<>();
}
//APP_MAP base64 解码
if (initFields.containsKey(TracingConstants.APP_MAP)) {
String appMapVal = initFields.get(TracingConstants.APP_MAP);
if (!appMapVal.startsWith("{") || !appMapVal.contains("{")) {
initFields.put(TracingConstants.APP_MAP, tracingContext.baseString2appMap(appMapVal));
}
}
tracingContext.fields.putAll(initFields);
tracingContext.fields.put(TracingConstants.THREAD_ID, String.valueOf(Thread.currentThread().getId()));
}

/**
* 判断是否有事务组
*
* @return result
*/
public boolean hasGroup() {
return Objects.nonNull(fields) && fields.containsKey(TracingConstants.GROUP_ID) &&
StringUtils.hasText(fields.get(TracingConstants.GROUP_ID));
}

/**
* 获取事务组ID
*
* @return groupId
*/
public String groupId() {
if (hasGroup()) {
return fields.get(TracingConstants.GROUP_ID);
Expand All @@ -97,10 +100,21 @@ public String groupId() {
return "";
}

/**
* 所有的字段
*
* @return fields
*/
public Map<String, String> fields() {
return this.fields;
}

/**
* 添加App
*
* @param serviceId serviceId
* @param address address
*/
public void addApp(String serviceId, String address) {
if (hasGroup()) {
JSONObject map = JSON.parseObject(this.fields.get(TracingConstants.APP_MAP));
Expand All @@ -114,35 +128,36 @@ public void addApp(String serviceId, String address) {
raiseNonGroupException();
}

public String appMapBase64String() {
if (hasGroup()) {
return Base64Utils.encodeToString(this.fields.get(TracingConstants.APP_MAP).getBytes(Charset.forName("utf8")));
}
raiseNonGroupException();
return "";
}

private String baseString2appMap(String base64Str) {
//解码
if (!"".equals(base64Str)) {
base64Str = Base64Utils.encodeToString(base64Str.getBytes(Charset.forName("utf8")));
}
return base64Str;
/**
* JSON Type App map.
*
* @return appMap
*/
public JSONObject appMap() {
return JSON.parseObject(appMapString());
}

public JSONObject appMap() {
/**
* String Type App map.
*
* @return appMap
*/
public String appMapString() {
if (hasGroup()) {
String appMap = this.fields.get(TracingConstants.APP_MAP);
String appMap = Optional.ofNullable(this.fields.get(TracingConstants.APP_MAP)).orElse("");
log.debug("App map: {}", appMap);
return JSON.parseObject(appMap);
return appMap;
}
raiseNonGroupException();
return JSON.parseObject("{}");
return "{}";
}

/**
* 销毁当前线程Tracing信息
*/
public void destroy() {
if (Objects.nonNull(tracingContextThreadLocal.get())) {
tracingContextThreadLocal.set(null);
tracingContextThreadLocal.remove();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

import com.codingapi.txlcn.common.util.Maps;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.Base64Utils;
import org.springframework.util.StringUtils;

import java.nio.charset.StandardCharsets;
import java.util.Optional;

/**
Expand All @@ -29,7 +32,8 @@ public static void transmit(TracingSetter tracingSetter) {
if (TracingContext.tracing().hasGroup()) {
log.debug("tracing transmit group:{}", TracingContext.tracing().groupId());
tracingSetter.set(TracingConstants.HEADER_KEY_GROUP_ID, TracingContext.tracing().groupId());
tracingSetter.set(TracingConstants.HEADER_KEY_APP_MAP, TracingContext.tracing().appMapBase64String());
tracingSetter.set(TracingConstants.HEADER_KEY_APP_MAP,
Base64Utils.encodeToString(TracingContext.tracing().appMapString().getBytes(StandardCharsets.UTF_8)));
}
}

Expand All @@ -41,7 +45,8 @@ public static void transmit(TracingSetter tracingSetter) {
public static void apply(TracingGetter tracingGetter) {
String groupId = Optional.ofNullable(tracingGetter.get(TracingConstants.HEADER_KEY_GROUP_ID)).orElse("");
String appList = Optional.ofNullable(tracingGetter.get(TracingConstants.HEADER_KEY_APP_MAP)).orElse("");
TracingContext.init(Maps.newHashMap(TracingConstants.GROUP_ID, groupId, TracingConstants.APP_MAP, appList));
TracingContext.init(Maps.newHashMap(TracingConstants.GROUP_ID, groupId, TracingConstants.APP_MAP,
StringUtils.isEmpty(appList) ? appList : new String(Base64Utils.decodeFromString(appList), StandardCharsets.UTF_8)));
if (TracingContext.tracing().hasGroup()) {
log.debug("tracing apply group:{}, app map:{}", groupId, appList);
}
Expand Down

0 comments on commit 811e3f0

Please sign in to comment.