From 57bcfd22bba3791dcba5fc1708274df6a89b7f91 Mon Sep 17 00:00:00 2001 From: Woonduk Kang Date: Fri, 30 Nov 2012 07:06:56 +0000 Subject: [PATCH] =?UTF-8?q?[=EA=B0=95=EC=9A=B4=EB=8D=95]=20[LUCYSUS-1744]?= =?UTF-8?q?=20span=20bo=EC=9D=98=20buffer=EC=A1=B0=EC=9E=91=20=EB=B6=80?= =?UTF-8?q?=EB=B6=84=20=EC=88=98=EC=A0=95.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://svn.bds.nhncorp.com/pe/hippo-commons/trunk@951 84d0f5b1-2673-498c-a247-62c4ff18d310 --- .../java/com/profiler/common/bo/SpanBo.java | 18 +++++++--- .../profiler/common/timeslot/TimeSlot.java | 10 ++++++ .../java/com/profiler/common/util/Buffer.java | 33 +++++++++++++++++++ .../com/profiler/common/util/BufferTest.java | 12 +++++++ 4 files changed, 68 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/profiler/common/timeslot/TimeSlot.java diff --git a/src/main/java/com/profiler/common/bo/SpanBo.java b/src/main/java/com/profiler/common/bo/SpanBo.java index 0eda0e5f4..3efe96e33 100644 --- a/src/main/java/com/profiler/common/bo/SpanBo.java +++ b/src/main/java/com/profiler/common/bo/SpanBo.java @@ -229,8 +229,10 @@ public class SpanBo { size += 1 + 1 + 1 + 1 + VERSION_SIZE; // chunk size chunk // size = size + TIMESTAMP + MOSTTRACEID + LEASTTRACEID + SPANID + // PARENTSPANID + FLAG + TERMINAL; - size += PARENTSPANID + FLAG + SERVICETYPE; - + size += PARENTSPANID + SERVICETYPE; + if (flag != 0) { + size += FLAG; + } // startTime 8, elapsed 4; size += 12; return size; @@ -264,7 +266,11 @@ public class SpanBo { buffer.put(serviceType.getCode()); buffer.put1PrefixedBytes(endPointBytes); - buffer.put(flag); + // 공간 절약을 위해서 flag는 무조껀 마지막에 넣어야 한다. + if (flag != 0) { + buffer.put(flag); + } + return buffer.getBuffer(); } @@ -288,8 +294,10 @@ public class SpanBo { this.serviceName = buffer.read1UnsignedPrefixedString(); this.serviceType = ServiceType.parse(buffer.readShort()); this.endPoint = buffer.read1UnsignedPrefixedString(); - - this.flag = buffer.readShort(); + // flag는 무조껀 마지막에 넣어야 한다. + if (buffer.limit() == 2) { + this.flag = buffer.readShort(); + } return buffer.getOffset(); } diff --git a/src/main/java/com/profiler/common/timeslot/TimeSlot.java b/src/main/java/com/profiler/common/timeslot/TimeSlot.java new file mode 100644 index 000000000..f1c5470ed --- /dev/null +++ b/src/main/java/com/profiler/common/timeslot/TimeSlot.java @@ -0,0 +1,10 @@ +package com.profiler.common.timeslot; + +/** + * + */ +public class TimeSlot { + private long slotTime; + + +} diff --git a/src/main/java/com/profiler/common/util/Buffer.java b/src/main/java/com/profiler/common/util/Buffer.java index 576bbcff5..4369617d7 100644 --- a/src/main/java/com/profiler/common/util/Buffer.java +++ b/src/main/java/com/profiler/common/util/Buffer.java @@ -73,6 +73,15 @@ public class Buffer { } } + public void putNullTerminatedBytes(byte[] bytes) { + if (bytes == null) { + put(0); + } else { + put(bytes); + put((byte) 0); + } + } + public byte readByte() { return this.buffer[offset++]; } @@ -171,6 +180,26 @@ public class Buffer { return readString(size); } + public String readNullTerminatedString() { + int size = findNull(); + if (size == 0) { + return ""; + } else if (size == -1) { + throw new IllegalArgumentException("null not found"); + } + return readString(size); + } + + private int findNull() { + for (int i = offset; i < buffer.length; i++) { + byte b = this.buffer[i]; + if (b == 0) { + return i - offset; + } + } + return -1; + } + private String readString(int size) { String s = new String(buffer, offset, size, UTF8); @@ -220,4 +249,8 @@ public class Buffer { public int getOffset() { return offset; } + + public int limit() { + return buffer.length - offset; + } } diff --git a/src/test/java/com/profiler/common/util/BufferTest.java b/src/test/java/com/profiler/common/util/BufferTest.java index ad6544443..8351778d8 100644 --- a/src/test/java/com/profiler/common/util/BufferTest.java +++ b/src/test/java/com/profiler/common/util/BufferTest.java @@ -64,6 +64,18 @@ public class BufferTest { logger.info(s); } + @Test + public void testNullTerminatedBytes() throws Exception { + Buffer buffer = new Buffer(1024); + buffer.putNullTerminatedBytes("string".getBytes("UTF-8")); + byte[] buffer1 = buffer.getBuffer(); + + Buffer read = new Buffer(buffer1); + String readString = read.readNullTerminatedString(); + + logger.info(readString); + } + @Test public void testReadPrefixedString() throws Exception {