From 39e414b6807f3b68dd79054059c11c57a370ca1e Mon Sep 17 00:00:00 2001 From: xcaspar Date: Mon, 1 May 2017 21:46:22 +0800 Subject: [PATCH 1/4] chore(collector): add a check for process id in startup script --- .../bin/collector-service.sh | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/apm-collector/apm-collector-worker/bin/collector-service.sh b/apm-collector/apm-collector-worker/bin/collector-service.sh index 542bc6117..e6e1f9c37 100644 --- a/apm-collector/apm-collector-worker/bin/collector-service.sh +++ b/apm-collector/apm-collector-worker/bin/collector-service.sh @@ -24,10 +24,14 @@ echo "Starting collector...." eval exec "\"$_RUNJAVA\" ${JAVA_OPTS} -classpath $CLASSPATH CollectorBootStartUp \ 2>${COLLECTOR_LOGS_DIR}/collector.log 1> /dev/null &" -if [ $? -eq 0 ]; then - sleep 1 - echo "Collector started successfully!" -else - echo "Collector started failure!" - exit 1 +retval=$? +pid=$! +FAIL_MSG="Collector started failure!" +SUCCESS_MSG="Collector started successfully!" +[ ${retval} -eq 0 ] || (echo ${FAIL_MSG}; exit ${retval}) +sleep 1 +if ! ps -p ${pid} > /dev/null ; then + echo ${FAIL_MSG} + exit 1 fi +echo ${SUCCESS_MSG} From 951192d0b63cee71b303dee3d68a25372c5bbae4 Mon Sep 17 00:00:00 2001 From: wusheng Date: Mon, 5 Jun 2017 21:21:03 +0800 Subject: [PATCH 2/4] Provide new data protocol for segment messages. --- .../skywalking/apm/trace/SegmentsMessage.java | 59 ++++++------------- .../apm/trace/TraceSegmentTestCase.java | 17 +++--- .../agent/core/client/CollectorClient.java | 9 +-- 3 files changed, 32 insertions(+), 53 deletions(-) diff --git a/apm-commons/apm-trace/src/main/java/org/skywalking/apm/trace/SegmentsMessage.java b/apm-commons/apm-trace/src/main/java/org/skywalking/apm/trace/SegmentsMessage.java index b31e9237f..f68165a58 100644 --- a/apm-commons/apm-trace/src/main/java/org/skywalking/apm/trace/SegmentsMessage.java +++ b/apm-commons/apm-trace/src/main/java/org/skywalking/apm/trace/SegmentsMessage.java @@ -1,13 +1,6 @@ package org.skywalking.apm.trace; import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.TypeAdapter; -import com.google.gson.annotations.JsonAdapter; -import com.google.gson.stream.JsonReader; -import com.google.gson.stream.JsonWriter; - -import java.io.IOException; import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -18,7 +11,6 @@ import java.util.List; * * @author wusheng */ -@JsonAdapter(SegmentsMessage.Serializer.class) public class SegmentsMessage { private List segments; @@ -34,40 +26,23 @@ public class SegmentsMessage { return Collections.unmodifiableList(segments); } - public static class Serializer extends TypeAdapter { - - @Override - public void write(JsonWriter out, SegmentsMessage value) throws IOException { - Gson gson = new GsonBuilder() - .excludeFieldsWithoutExposeAnnotation() - .create(); - - out.beginArray(); - try { - for (TraceSegment segment : value.segments) { - out.jsonValue(gson.toJson(segment)); - } - } finally { - out.endArray(); - } - } - - @Override - public SegmentsMessage read(JsonReader in) throws IOException { - SegmentsMessage message = new SegmentsMessage(); - in.beginArray(); - Gson gson = new GsonBuilder() - .excludeFieldsWithoutExposeAnnotation() - .create(); - try { - while (in.hasNext()) { - TraceSegment traceSegment = gson.fromJson(in, TraceSegment.class); - message.append(traceSegment); - } - } finally { - in.endArray(); - } - return message; + /** + * This serialization mechanism started from 3.1, it is similar to network package. + * The data protocol is + * + * segment1.json.length + ' '(one blank space) + segment1.json + * + segment2.json.length + ' '(one blank space) + segment2.json + * + etc. + * + * @param gson the serializer for {@link TraceSegment} + * @return the string represents the SegmentMessage + */ + public String serialize(Gson gson) { + StringBuilder buffer = new StringBuilder(); + for (TraceSegment segment : segments) { + String segmentJson = gson.toJson(segment); + buffer.append(segmentJson.length()).append(' ').append(segmentJson); } + return buffer.toString(); } } diff --git a/apm-commons/apm-trace/src/test/java/org/skywalking/apm/trace/TraceSegmentTestCase.java b/apm-commons/apm-trace/src/test/java/org/skywalking/apm/trace/TraceSegmentTestCase.java index 2a9c399a9..326e74183 100644 --- a/apm-commons/apm-trace/src/test/java/org/skywalking/apm/trace/TraceSegmentTestCase.java +++ b/apm-commons/apm-trace/src/test/java/org/skywalking/apm/trace/TraceSegmentTestCase.java @@ -108,15 +108,18 @@ public class TraceSegmentTestCase { SegmentsMessage message = new SegmentsMessage(); message.append(segment); - String json = gson.toJson(message); - message = gson.fromJson(json, SegmentsMessage.class); + String jsonString = message.serialize(gson); + int length = Integer.parseInt(jsonString.substring(0, 4)); - TraceSegment newSegment = message.getSegments().get(0); + String segmentJson = jsonString.substring(5); - Assert.assertEquals(segment.getSpans().size(), newSegment.getSpans().size()); - Assert.assertEquals(segment.getRefs().get(0).getTraceSegmentId(), newSegment.getRefs().get(0).getTraceSegmentId()); - Assert.assertEquals(Tags.SPAN_LAYER.get(segment.getSpans().get(1)), Tags.SPAN_LAYER.get(newSegment.getSpans().get(1))); - Assert.assertEquals(segment.getSpans().get(1).getLogs().get(0).getTime(), newSegment.getSpans().get(1).getLogs().get(0).getTime()); + Assert.assertEquals(length, segmentJson.length()); + TraceSegment recoverySegment = gson.fromJson(segmentJson, TraceSegment.class); + + Assert.assertEquals(segment.getSpans().size(), recoverySegment.getSpans().size()); + Assert.assertEquals(segment.getRefs().get(0).getTraceSegmentId(), recoverySegment.getRefs().get(0).getTraceSegmentId()); + Assert.assertEquals(Tags.SPAN_LAYER.get(segment.getSpans().get(1)), Tags.SPAN_LAYER.get(recoverySegment.getSpans().get(1))); + Assert.assertEquals(segment.getSpans().get(1).getLogs().get(0).getTime(), recoverySegment.getSpans().get(1).getLogs().get(0).getTime()); } } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/client/CollectorClient.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/client/CollectorClient.java index 09ac7c5b6..279d95a0e 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/client/CollectorClient.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/client/CollectorClient.java @@ -32,6 +32,7 @@ public class CollectorClient implements Runnable { private static long SLEEP_TIME_MILLIS = 500; private String[] serverList; private volatile int selectedServer = -1; + private Gson serializer; public CollectorClient() { serverList = Config.Collector.SERVERS.split(","); @@ -39,6 +40,9 @@ public class CollectorClient implements Runnable { if (serverList.length > 0) { selectedServer = r.nextInt(serverList.length); } + serializer = new GsonBuilder() + .excludeFieldsWithoutExposeAnnotation() + .create(); } @Override @@ -84,10 +88,7 @@ public class CollectorClient implements Runnable { if (message == null) { return; } - Gson gson = new GsonBuilder() - .excludeFieldsWithoutExposeAnnotation() - .create(); - String messageJson = gson.toJson(message); + String messageJson = message.serialize(serializer); CloseableHttpClient httpClient = HttpClients.custom().build(); try { HttpPost httpPost = ready2Send(messageJson); From ac357e974235113aa732a73ea03c902dd0d23f59 Mon Sep 17 00:00:00 2001 From: ascrutae Date: Tue, 6 Jun 2017 09:33:27 +0800 Subject: [PATCH 3/4] Update the http port of collector server --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index fef086915..7040c2bc2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,7 +9,7 @@ services: links: - skywalking-collector environment: - - COLLECTOR_SERVERS=skywalking-collector:7001 + - COLLECTOR_SERVERS=skywalking-collector:12800 skywalking-collector: image: skywalking-collector:3.0.1-2017 From 31785b36597c27e43c8d9c46f6c3ba80d772a7f5 Mon Sep 17 00:00:00 2001 From: ascrutae Date: Tue, 6 Jun 2017 09:44:57 +0800 Subject: [PATCH 4/4] update docker image version --- docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 7040c2bc2..1dec8122c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ version: '2.1' services: skywalking-webui: - image: sky-walking-ui:3.0.1-2017 + image: sky-walking-ui:3.1-2017 expose: - "8080" ports: @@ -12,7 +12,7 @@ services: - COLLECTOR_SERVERS=skywalking-collector:12800 skywalking-collector: - image: skywalking-collector:3.0.1-2017 + image: skywalking-collector:3.1-2017 expose: - "12800" - "1000"