Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Annotations.Tag bug while string value has double quotation marks #156

Closed
anthonywanted opened this issue Nov 2, 2017 · 2 comments
Closed

Comments

@anthonywanted
Copy link
Contributor

anthonywanted commented Nov 2, 2017

Version: 1.1.0 on nuget
When Annotations.Tag has a bug when string value contains double quotation marks
Code:

class Program
{
    static void Main(string[] args)
    {
        var logger = new ZipkinLogger(); //It should implement ILogger
        var sender = new HttpZipkinSender("http://192.168.230.36:9411", "application/json"); // It should implement IZipkinSender
        TraceManager.SamplingRate = 1.0f; //full tracing
        Statistics statistics = new Statistics();
        var tracer = new ZipkinTracer(sender, new JSONSpanSerializer(), statistics);
        TraceManager.RegisterTracer(tracer);
        TraceManager.Start(logger);
        var trace = Trace.Create();
        trace.Record(Annotations.ClientSend());
        trace.Record(Annotations.ServiceName("TestZipkinClient"));
        trace.Record(Annotations.Rpc("123"));
        trace.Record(Annotations.Tag("hello", "\"a\"")); // here
        trace.Record(Annotations.ClientRecv());
        //On shutdown
        TraceManager.Stop();
    }
}

It seems like some bug here:
https://github.com/openzipkin/zipkin4net/blob/master/Src/zipkin4net/Src/Tracers/Zipkin/JSONSpanSerializer.cs

    private static void SerializeBinaryAnnotation(StreamWriter writer, BinaryAnnotation binaryAnnotation, IPEndPoint endPoint, string serviceName)
    {
        writer.Write(openingBrace);
        writer.WriteField(key, binaryAnnotation.Key);
        writer.Write(comma);
        writer.WriteField(value, Encoding.UTF8.GetString(binaryAnnotation.Value)); // HERE!
        writer.Write(comma);
        writer.WriteAnchor(endpoint);
        SerializeEndPoint(writer, endPoint, serviceName);
        writer.Write(closingBrace);
    }

Zipkin (latest docker image) server throw Exception:

2017-11-02 03:36:56.847 WARN 7 --- [nio-9411-exec-6] zipkin.server.ZipkinHttpCollector : Cannot decode spans due to IllegalArgumentException(Unterminated object at line 1 column 354 path $[0].binaryAnnotations[0].value reading List from json: [{"id":"7b03e3fb6a7e604c","name":"123","annotations":[{"timestamp":"1509593478064678","value":"cs","endpoint":{"ipv4":"-1407295487","port":"0","serviceName":"TestZipkinClient"}},{"timestamp":"1509593478066500","value":"cr","endpoint":{"ipv4":"-1407295487","port":"0","serviceName":"TestZipkinClient"}}],"binaryAnnotations":[{"key":"http.url","value":""a"","endpoint":{"ipv4":"-1407295487","port":"0","serviceName":"TestZipkinClient"}}],"debug":False,"traceId":"8c049b5003363a81","timestamp":"1509593478064678","duration":"1822"}])

java.lang.IllegalArgumentException: Unterminated object at line 1 column 354 path $[0].binaryAnnotations[0].value reading List from json: [{"id":"7b03e3fb6a7e604c","name":"123","annotations":[{"timestamp":"1509593478064678","value":"cs","endpoint":{"ipv4":"-1407295487","port":"0","serviceName":"TestZipkinClient"}},{"timestamp":"1509593478066500","value":"cr","endpoint":{"ipv4":"-1407295487","port":"0","serviceName":"TestZipkinClient"}}],"binaryAnnotations":[{"key":"http.url","value":""a"","endpoint":{"ipv4":"-1407295487","port":"0","serviceName":"TestZipkinClient"}}],"debug":False,"traceId":"8c049b5003363a81","timestamp":"1509593478064678","duration":"1822"}]
at zipkin.internal.JsonCodec.exceptionReading(JsonCodec.java:716) ~[io.zipkin.java-zipkin-2.0.1.jar!/:na]
at zipkin.internal.JsonCodec.readList(JsonCodec.java:685) ~[io.zipkin.java-zipkin-2.0.1.jar!/:na]
at zipkin.internal.JsonCodec.readSpans(JsonCodec.java:501) ~[io.zipkin.java-zipkin-2.0.1.jar!/:na]
at zipkin.collector.Collector.decodeList(Collector.java:152) [io.zipkin.java-zipkin-2.0.1.jar!/:na]
at zipkin.collector.Collector.decodeList(Collector.java:41) [io.zipkin.java-zipkin-2.0.1.jar!/:na]
at zipkin.internal.Collector.acceptSpans(Collector.java:54) ~[io.zipkin.java-zipkin-2.0.1.jar!/:na]
at zipkin.collector.Collector.acceptSpans(Collector.java:114) [io.zipkin.java-zipkin-2.0.1.jar!/:na]
at zipkin.server.ZipkinHttpCollector.validateAndStoreSpans(ZipkinHttpCollector.java:98) [classes/:na]
at zipkin.server.ZipkinHttpCollector.uploadSpansJson(ZipkinHttpCollector.java:75) [classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_131]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_131]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~

@fedj
Copy link
Collaborator

fedj commented Nov 2, 2017

Hi @anthonywanted,

Thank you for reporting this bug.
You're right, it needs to be escaped when using json format.

Would you be able to come with a PR ?

In the meantime, as a temporary workaround, you can use thrift transport (it should not have this bug).

@anthonywanted
Copy link
Contributor Author

OK,I will make a PR soon

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants