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 fd364f4e0b1f168c91c51a85715b0175bb4c94ee..0ef45e4b851e05777959433efd33264b19ffbfe6 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 f7918462845a30db00fec9c719a44584a61d33f8..0e9fa61ba79b0ae1db01ebf55d9b53e7cba7814e 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 spanList = decoder.decodeList(buffer);