Skip to content

Commit 0db6312

Browse files
authored
New tag for DSM checkpoints - a bitmask representing enabled products / features (#8051)
Tag dsm checkpoints with product mask
1 parent 74967dd commit 0db6312

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

dd-trace-core/src/main/java/datadog/trace/core/datastreams/MsgPackDatastreamsPayloadWriter.java

+28-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import datadog.communication.serialization.Writable;
77
import datadog.communication.serialization.WritableFormatter;
88
import datadog.communication.serialization.msgpack.MsgPackWriter;
9+
import datadog.trace.api.Config;
910
import datadog.trace.api.WellKnownTags;
1011
import datadog.trace.common.metrics.Sink;
1112
import java.util.Collection;
@@ -31,6 +32,7 @@ public class MsgPackDatastreamsPayloadWriter implements DatastreamsPayloadWriter
3132
private static final byte[] PARENT_HASH = "ParentHash".getBytes(ISO_8859_1);
3233
private static final byte[] BACKLOG_VALUE = "Value".getBytes(ISO_8859_1);
3334
private static final byte[] BACKLOG_TAGS = "Tags".getBytes(ISO_8859_1);
35+
private static final byte[] PRODUCTS_MASK = "ProductMask".getBytes(ISO_8859_1);
3436

3537
private static final int INITIAL_CAPACITY = 512 * 1024;
3638

@@ -55,9 +57,30 @@ public void reset() {
5557
buffer.reset();
5658
}
5759

60+
// extend the list as needed
61+
private static final int APM_PRODUCT = 1; // 00000001
62+
private static final int DSM_PRODUCT = 2; // 00000010
63+
private static final int DJM_PRODUCT = 4; // 00000100
64+
private static final int PROFILING_PRODUCT = 8; // 00001000
65+
66+
public long getProductsMask() {
67+
long productsMask = APM_PRODUCT;
68+
if (Config.get().isDataStreamsEnabled()) {
69+
productsMask |= DSM_PRODUCT;
70+
}
71+
if (Config.get().isDataJobsEnabled()) {
72+
productsMask |= DJM_PRODUCT;
73+
}
74+
if (Config.get().isProfilingEnabled()) {
75+
productsMask |= PROFILING_PRODUCT;
76+
}
77+
78+
return productsMask;
79+
}
80+
5881
@Override
5982
public void writePayload(Collection<StatsBucket> data, String serviceNameOverride) {
60-
writer.startMap(7);
83+
writer.startMap(8);
6184
/* 1 */
6285
writer.writeUTF8(ENV);
6386
writer.writeUTF8(wellKnownTags.getEnv());
@@ -112,6 +135,10 @@ public void writePayload(Collection<StatsBucket> data, String serviceNameOverrid
112135
}
113136
}
114137

138+
/* 8 */
139+
writer.writeUTF8(PRODUCTS_MASK);
140+
writer.writeLong(getProductsMask());
141+
115142
buffer.mark();
116143
sink.accept(buffer.messageCount(), buffer.slice());
117144
buffer.reset();

dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DataStreamsWritingTest.groovy

+5-2
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ class DataStreamsWritingTest extends DDCoreSpecification {
9696
BufferedSource bufferedSource = Okio.buffer(gzipSource)
9797
MessageUnpacker unpacker = MessagePack.newDefaultUnpacker(bufferedSource.inputStream())
9898

99-
assert unpacker.unpackMapHeader() == 7
99+
assert unpacker.unpackMapHeader() == 8
100100
assert unpacker.unpackString() == "Env"
101101
assert unpacker.unpackString() == "test"
102102
assert unpacker.unpackString() == "Service"
@@ -161,7 +161,7 @@ class DataStreamsWritingTest extends DDCoreSpecification {
161161
BufferedSource bufferedSource = Okio.buffer(gzipSource)
162162
MessageUnpacker unpacker = MessagePack.newDefaultUnpacker(bufferedSource.inputStream())
163163

164-
assert unpacker.unpackMapHeader() == 7
164+
assert unpacker.unpackMapHeader() == 8
165165
assert unpacker.unpackString() == "Env"
166166
assert unpacker.unpackString() == "test"
167167
assert unpacker.unpackString() == "Service"
@@ -262,6 +262,9 @@ class DataStreamsWritingTest extends DDCoreSpecification {
262262
assert unpacker.unpackString() == (hash == 1 ? "topic:testTopic" : "topic:testTopic2")
263263
}
264264

265+
assert unpacker.unpackString() == "ProductMask"
266+
assert unpacker.unpackLong() == 1
267+
265268
return true
266269
}
267270
}

0 commit comments

Comments
 (0)