mirror of
https://github.com/wahyd4/pinpoint.git
synced 2026-08-18 01:06:03 +10:00
[#27] error log enhancement
This commit is contained in:
@@ -61,32 +61,37 @@ public final class TransactionIdUtils {
|
||||
throw new NullPointerException("transactionId must not be null");
|
||||
}
|
||||
|
||||
final int agentIdIndex = transactionId.indexOf(TRANSACTION_ID_DELIMITER);
|
||||
final int agentIdIndex = nextIndex(transactionId, 0);
|
||||
if (agentIdIndex == -1) {
|
||||
throw new IllegalArgumentException("agentIndex not found:" + transactionId);
|
||||
}
|
||||
final String agentId = transactionId.substring(0, agentIdIndex);
|
||||
|
||||
final int agentStartTimeIndex = transactionId.indexOf(TRANSACTION_ID_DELIMITER, agentIdIndex + 1);
|
||||
final int agentStartTimeIndex = nextIndex(transactionId, agentIdIndex + 1);
|
||||
if (agentStartTimeIndex == -1) {
|
||||
throw new IllegalArgumentException("agentStartTimeIndex not found:" + transactionId);
|
||||
}
|
||||
final long agentStartTime = parseLong(transactionId.substring(agentIdIndex + 1, agentStartTimeIndex));
|
||||
final long agentStartTime = parseLong(transactionId, agentIdIndex + 1, agentStartTimeIndex);
|
||||
|
||||
int transactionSequenceIndex = transactionId.indexOf(TRANSACTION_ID_DELIMITER, agentStartTimeIndex + 1);
|
||||
int transactionSequenceIndex = nextIndex(transactionId, agentStartTimeIndex + 1);
|
||||
if (transactionSequenceIndex == -1) {
|
||||
// 이거는 없을수 있음. transactionSequence 다음에 델리미터가 일단 없는게 기본값임. 향후 추가 아이디 스펙이 확장가능하므로 보완한다.
|
||||
transactionSequenceIndex = transactionId.length();
|
||||
}
|
||||
final long transactionSequence = parseLong(transactionId.substring(agentStartTimeIndex + 1, transactionSequenceIndex));
|
||||
final long transactionSequence = parseLong(transactionId, agentStartTimeIndex + 1, transactionSequenceIndex);
|
||||
return new TransactionId(agentId, agentStartTime, transactionSequence);
|
||||
}
|
||||
|
||||
private static long parseLong(String longString) {
|
||||
private static int nextIndex(String transactionId, int fromIndex) {
|
||||
return transactionId.indexOf(TRANSACTION_ID_DELIMITER, fromIndex);
|
||||
}
|
||||
|
||||
private static long parseLong(String transactionId, int beginIndex, int endIndex) {
|
||||
final String longString = transactionId.substring(beginIndex, endIndex);
|
||||
try {
|
||||
return Long.parseLong(longString);
|
||||
return Long.parseLong(longString);
|
||||
} catch (NumberFormatException e) {
|
||||
throw new IllegalArgumentException("parseError. " + longString);
|
||||
throw new IllegalArgumentException("parseLong Error. " + longString + " transactionId:" + transactionId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,17 @@ public class TransactionIdUtilsTest {
|
||||
Assert.assertEquals(transactionId.getTransactionSequence(), 2L);
|
||||
}
|
||||
|
||||
@Test(expected = Exception.class)
|
||||
public void testParseTransactionId_RpcHeaderDuplicateAdd_BugReproduce() {
|
||||
// #27 http://yobi.navercorp.com/pinpoint/pinpoint/issue/27
|
||||
String id1 = "test" + TransactionIdUtils.TRANSACTION_ID_DELIMITER + "1" + TransactionIdUtils.TRANSACTION_ID_DELIMITER + "2";
|
||||
String id2 = "test" + TransactionIdUtils.TRANSACTION_ID_DELIMITER + "1" + TransactionIdUtils.TRANSACTION_ID_DELIMITER + "3";
|
||||
TransactionId transactionId = TransactionIdUtils.parseTransactionId(id1 + ", " + id2);
|
||||
Assert.assertEquals(transactionId.getAgentId(), "test");
|
||||
Assert.assertEquals(transactionId.getAgentStartTime(), 1L);
|
||||
Assert.assertEquals(transactionId.getTransactionSequence(), 2L);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testParseTransactionIdByte() {
|
||||
|
||||
Reference in New Issue
Block a user