This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new 6a7e344  fix zipkin provider can not receive full spans data (#1420)
6a7e344 is described below

commit 6a7e344dea75627c9d6011738c5a3e71e9fc4173
Author: 歪脖大肚子Q <[email protected]>
AuthorDate: Wed Jul 4 12:03:02 2018 +0800

    fix zipkin provider can not receive full spans data (#1420)
---
 .../receiver/zipkin/provider/ZipkinReceiverProvider.java |  2 ++
 .../receiver/zipkin/provider/handler/SpanProcessor.java  | 16 +++++++++++++++-
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git 
a/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-provider/src/main/java/org/apache/skywalking/apm/collector/receiver/zipkin/provider/ZipkinReceiverProvider.java
 
b/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-provider/src/main/java/org/apache/skywalking/apm/collector/receiver/zipkin/provider/ZipkinReceiverProvider.java
index fd364f4..0ef45e4 100644
--- 
a/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-provider/src/main/java/org/apache/skywalking/apm/collector/receiver/zipkin/provider/ZipkinReceiverProvider.java
+++ 
b/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-provider/src/main/java/org/apache/skywalking/apm/collector/receiver/zipkin/provider/ZipkinReceiverProvider.java
@@ -31,6 +31,7 @@ import org.apache.skywalking.apm.collector.core.module.*;
 import org.apache.skywalking.apm.collector.jetty.manager.JettyManagerModule;
 import 
org.apache.skywalking.apm.collector.jetty.manager.service.JettyManagerService;
 import 
org.apache.skywalking.apm.collector.receiver.zipkin.define.ZipkinReceiverModule;
+import 
org.apache.skywalking.apm.collector.receiver.zipkin.provider.handler.SpanV1JettyHandler;
 import 
org.apache.skywalking.apm.collector.receiver.zipkin.provider.handler.SpanV2JettyHandler;
 import 
org.apache.skywalking.apm.collector.receiver.zipkin.provider.transform.Zipkin2SkyWalkingTransfer;
 import org.apache.skywalking.apm.collector.server.jetty.JettyServer;
@@ -74,6 +75,7 @@ public class ZipkinReceiverProvider extends ModuleProvider {
 
         JettyManagerService managerService = 
getManager().find(JettyManagerModule.NAME).getService(JettyManagerService.class);
         JettyServer jettyServer = 
managerService.createIfAbsent(config.getHost(), config.getPort(), 
config.getContextPath());
+        jettyServer.addHandler(new SpanV1JettyHandler(config, 
registerServices));
         jettyServer.addHandler(new SpanV2JettyHandler(config, 
registerServices));
 
         ISegmentParseService segmentParseService = 
getManager().find(AnalysisSegmentParserModule.NAME).getService(ISegmentParseService.class);
diff --git 
a/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-provider/src/main/java/org/apache/skywalking/apm/collector/receiver/zipkin/provider/handler/SpanProcessor.java
 
b/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-provider/src/main/java/org/apache/skywalking/apm/collector/receiver/zipkin/provider/handler/SpanProcessor.java
index f791846..0e9fa61 100644
--- 
a/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-provider/src/main/java/org/apache/skywalking/apm/collector/receiver/zipkin/provider/handler/SpanProcessor.java
+++ 
b/apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-provider/src/main/java/org/apache/skywalking/apm/collector/receiver/zipkin/provider/handler/SpanProcessor.java
@@ -21,6 +21,8 @@ package 
org.apache.skywalking.apm.collector.receiver.zipkin.provider.handler;
 import 
org.apache.skywalking.apm.collector.receiver.zipkin.provider.RegisterServices;
 import 
org.apache.skywalking.apm.collector.receiver.zipkin.provider.ZipkinReceiverConfig;
 import 
org.apache.skywalking.apm.collector.receiver.zipkin.provider.cache.CacheFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import zipkin2.Span;
 import zipkin2.codec.SpanBytesDecoder;
 
@@ -30,11 +32,23 @@ import java.io.IOException;
 import java.util.List;
 
 public class SpanProcessor {
+    private final Logger logger = LoggerFactory.getLogger(SpanProcessor.class);
+
     void convert(ZipkinReceiverConfig config, SpanBytesDecoder decoder, 
HttpServletRequest request, RegisterServices registerServices) throws 
IOException {
         int len = request.getContentLength();
         ServletInputStream iii = request.getInputStream();
         byte[] buffer = new byte[len];
-        iii.read(buffer, 0, len);
+
+        int readCntTotal = 0;
+        int readCntOnce;
+        while (readCntTotal < len) {
+            readCntOnce = iii.read(buffer, readCntTotal, len - readCntTotal);
+            if (readCntOnce <= 0) {
+                logger.error("Receive spans data failed.");
+                throw new IOException();
+            }
+            readCntTotal += readCntOnce;
+        }
 
         List<Span> spanList = decoder.decodeList(buffer);
 

Reply via email to