[#27] error log enhancement

This commit is contained in:
Woonduk Kang
2014-10-15 11:21:31 +09:00
parent 4eb9e502b6
commit 0f8a575e10
2 changed files with 24 additions and 8 deletions
@@ -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() {