fix: 修复开启链路追踪后可能报错问题 (#407)
This commit is contained in:
parent
7d750a1e0c
commit
f84621178b
|
|
@ -72,7 +72,6 @@
|
|||
<dependency>
|
||||
<groupId>de.ruedigermoeller</groupId>
|
||||
<artifactId>fst</artifactId>
|
||||
<version>2.57</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
|
@ -90,36 +89,53 @@
|
|||
<dependency>
|
||||
<groupId>io.opentelemetry</groupId>
|
||||
<artifactId>opentelemetry-exporter-logging</artifactId>
|
||||
<version>1.14.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.opentelemetry</groupId>
|
||||
<artifactId>opentelemetry-sdk-trace</artifactId>
|
||||
<version>1.14.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.opentelemetry</groupId>
|
||||
<artifactId>opentelemetry-sdk</artifactId>
|
||||
<version>1.14.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.opentelemetry</groupId>
|
||||
<artifactId>opentelemetry-exporter-jaeger</artifactId>
|
||||
<version>1.14.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.opentelemetry</groupId>
|
||||
<artifactId>opentelemetry-exporter-common</artifactId>
|
||||
<version>${opentelemetry.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.jr</groupId>
|
||||
<artifactId>jackson-jr-objects</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.grpc</groupId>
|
||||
<artifactId>grpc-protobuf</artifactId>
|
||||
<version>1.53.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.grpc</groupId>
|
||||
<artifactId>grpc-netty</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.grpc</groupId>
|
||||
<artifactId>grpc-netty-shaded</artifactId>
|
||||
<version>1.47.0</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>*</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
|
@ -133,11 +149,22 @@
|
|||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.jetlinks.community</groupId>
|
||||
<artifactId>timeseries-component</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.h2database</groupId>
|
||||
<artifactId>h2</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.lettuce</groupId>
|
||||
<artifactId>lettuce-core</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
|
|
@ -0,0 +1,139 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package io.opentelemetry.exporter.jaeger;
|
||||
|
||||
import com.fasterxml.jackson.jr.ob.JSON;
|
||||
import io.opentelemetry.api.common.AttributeKey;
|
||||
import io.opentelemetry.api.common.Attributes;
|
||||
import io.opentelemetry.exporter.internal.marshal.MarshalerUtil;
|
||||
import io.opentelemetry.exporter.internal.marshal.MarshalerWithSize;
|
||||
import io.opentelemetry.exporter.internal.marshal.ProtoEnumInfo;
|
||||
import io.opentelemetry.exporter.internal.marshal.Serializer;
|
||||
import io.opentelemetry.exporter.jaeger.proto.api_v2.internal.KeyValue;
|
||||
import io.opentelemetry.exporter.jaeger.proto.api_v2.internal.ValueType;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
@SuppressWarnings({
|
||||
"checkstyle:LocalVariableName",
|
||||
"checkstyle:MemberName",
|
||||
"checkstyle:ParameterName",
|
||||
})
|
||||
final class KeyValueMarshaler extends MarshalerWithSize {
|
||||
|
||||
private static final byte[] EMPTY_BYTES = new byte[0];
|
||||
|
||||
private final byte[] keyUtf8;
|
||||
private final ProtoEnumInfo valueType;
|
||||
private final byte[] vStrUtf8;
|
||||
private final boolean vBool;
|
||||
private final long vInt64;
|
||||
private final double vFloat64;
|
||||
|
||||
static List<KeyValueMarshaler> createRepeated(Attributes attributes) {
|
||||
if (attributes.isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
List<KeyValueMarshaler> marshalers = new ArrayList<>(attributes.size());
|
||||
attributes.forEach((attributeKey, o) -> marshalers.add(create(attributeKey, o)));
|
||||
return marshalers;
|
||||
}
|
||||
|
||||
static KeyValueMarshaler create(AttributeKey<?> key, Object value) {
|
||||
byte[] keyUtf8 = MarshalerUtil.toBytes(key.getKey());
|
||||
|
||||
// Default is the 0 value, string in this case
|
||||
ProtoEnumInfo valueType = ValueType.STRING;
|
||||
byte[] vStrUtf8 = EMPTY_BYTES;
|
||||
boolean vBool = false;
|
||||
long vInt64 = 0;
|
||||
double vFloat64 = 0;
|
||||
|
||||
if (value instanceof Supplier) {
|
||||
value = ((Supplier<?>) value).get();
|
||||
}
|
||||
|
||||
switch (key.getType()) {
|
||||
case STRING:
|
||||
valueType = ValueType.STRING;
|
||||
|
||||
vStrUtf8 = MarshalerUtil.toBytes(String.valueOf(value));
|
||||
break;
|
||||
case BOOLEAN:
|
||||
valueType = ValueType.BOOL;
|
||||
vBool = (boolean) value;
|
||||
break;
|
||||
case LONG:
|
||||
valueType = ValueType.INT64;
|
||||
vInt64 = (long) value;
|
||||
break;
|
||||
case DOUBLE:
|
||||
valueType = ValueType.FLOAT64;
|
||||
vFloat64 = (double) value;
|
||||
break;
|
||||
case STRING_ARRAY:
|
||||
case BOOLEAN_ARRAY:
|
||||
case LONG_ARRAY:
|
||||
case DOUBLE_ARRAY:
|
||||
valueType = ValueType.STRING;
|
||||
try {
|
||||
vStrUtf8 = JSON.std.asBytes(value);
|
||||
} catch (IOException e) {
|
||||
// Can't happen, just ignore it.
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return new KeyValueMarshaler(keyUtf8, valueType, vStrUtf8, vBool, vInt64, vFloat64);
|
||||
}
|
||||
|
||||
KeyValueMarshaler(
|
||||
byte[] keyUtf8,
|
||||
ProtoEnumInfo valueType,
|
||||
byte[] vStrUtf8,
|
||||
boolean vBool,
|
||||
long vInt64,
|
||||
double vFloat64) {
|
||||
super(calculateSize(keyUtf8, valueType, vStrUtf8, vBool, vInt64, vFloat64));
|
||||
this.keyUtf8 = keyUtf8;
|
||||
this.valueType = valueType;
|
||||
this.vStrUtf8 = vStrUtf8;
|
||||
this.vBool = vBool;
|
||||
this.vInt64 = vInt64;
|
||||
this.vFloat64 = vFloat64;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeTo(Serializer output) throws IOException {
|
||||
output.serializeString(KeyValue.KEY, keyUtf8);
|
||||
output.serializeEnum(KeyValue.V_TYPE, valueType);
|
||||
output.serializeString(KeyValue.V_STR, vStrUtf8);
|
||||
output.serializeBool(KeyValue.V_BOOL, vBool);
|
||||
output.serializeInt64(KeyValue.V_INT64, vInt64);
|
||||
output.serializeDouble(KeyValue.V_FLOAT64, vFloat64);
|
||||
}
|
||||
|
||||
private static int calculateSize(
|
||||
byte[] keyUtf8,
|
||||
ProtoEnumInfo valueType,
|
||||
byte[] vStrUtf8,
|
||||
boolean vBool,
|
||||
long vInt64,
|
||||
double vFloat64) {
|
||||
int size = 0;
|
||||
size += MarshalerUtil.sizeBytes(KeyValue.KEY, keyUtf8);
|
||||
size += MarshalerUtil.sizeEnum(KeyValue.V_TYPE, valueType);
|
||||
size += MarshalerUtil.sizeBytes(KeyValue.V_STR, vStrUtf8);
|
||||
size += MarshalerUtil.sizeBool(KeyValue.V_BOOL, vBool);
|
||||
size += MarshalerUtil.sizeInt64(KeyValue.V_INT64, vInt64);
|
||||
size += MarshalerUtil.sizeDouble(KeyValue.V_FLOAT64, vFloat64);
|
||||
return size;
|
||||
}
|
||||
}
|
||||
54
pom.xml
54
pom.xml
|
|
@ -50,6 +50,8 @@
|
|||
<swagger.version>2.2.8</swagger.version>
|
||||
<jna.version>5.12.1</jna.version>
|
||||
<aliyun.sdk.core>4.5.2</aliyun.sdk.core>
|
||||
<fst.version>2.57</fst.version>
|
||||
<grpc.version>1.53.0</grpc.version>
|
||||
</properties>
|
||||
|
||||
|
||||
|
|
@ -188,6 +190,18 @@
|
|||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.asyncer</groupId>
|
||||
<artifactId>r2dbc-mysql</artifactId>
|
||||
<version>0.9.3</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>de.ruedigermoeller</groupId>
|
||||
<artifactId>fst</artifactId>
|
||||
<version>${fst.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>net.java.dev.jna</groupId>
|
||||
<artifactId>jna</artifactId>
|
||||
|
|
@ -359,6 +373,21 @@
|
|||
<version>${fastjson.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.opentelemetry</groupId>
|
||||
<artifactId>opentelemetry-bom</artifactId>
|
||||
<version>${opentelemetry.version}</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>io.opentelemetry</groupId>
|
||||
<artifactId>opentelemetry-semconv</artifactId>
|
||||
<version>${opentelemetry.version}-alpha</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.r2dbc</groupId>
|
||||
<artifactId>r2dbc-bom</artifactId>
|
||||
|
|
@ -478,6 +507,31 @@
|
|||
<version>${aliyun.sdk.core}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.grpc</groupId>
|
||||
<artifactId>grpc-protobuf</artifactId>
|
||||
<version>${grpc.version}</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>io.grpc</groupId>
|
||||
<artifactId>grpc-netty</artifactId>
|
||||
<version>${grpc.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.grpc</groupId>
|
||||
<artifactId>grpc-netty-shaded</artifactId>
|
||||
<version>${grpc.version}</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>*</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
|
|
|||
Loading…
Reference in New Issue