Skip to content

Commit a2cb43a

Browse files
authored
Remove limits of 100 max probes (#9962)
to be able to create more with MCP
1 parent c93f2e7 commit a2cb43a

File tree

3 files changed

+107
-110
lines changed

3 files changed

+107
-110
lines changed

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerProductChangesListener.java

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,6 @@
2929
import org.slf4j.LoggerFactory;
3030

3131
public class DebuggerProductChangesListener implements ProductListener {
32-
public static final int MAX_ALLOWED_TRIGGER_PROBES = 100;
33-
public static final int MAX_ALLOWED_METRIC_PROBES = 100;
34-
public static final int MAX_ALLOWED_LOG_PROBES = 100;
35-
public static final int MAX_ALLOWED_SPAN_PROBES = 100;
36-
public static final int MAX_ALLOWED_SPAN_DECORATION_PROBES = 100;
3732
public static final String LOG_PROBE_PREFIX = "logProbe_";
3833
public static final String METRIC_PROBE_PREFIX = "metricProbe_";
3934
public static final String SPAN_PROBE_PREFIX = "spanProbe_";
@@ -161,55 +156,25 @@ public void commit(PollingRateHinter pollingRateHinter) {
161156

162157
static class DefinitionBuilder {
163158
private final Collection<ProbeDefinition> definitions = new ArrayList<>();
164-
private int triggerProbeCount = 0;
165-
private int metricProbeCount = 0;
166-
private int logProbeCount = 0;
167-
private int spanProbeCount = 0;
168-
private int spanDecorationProbeCount = 0;
169159

170160
void add(MetricProbe probe) {
171-
if (metricProbeCount >= MAX_ALLOWED_METRIC_PROBES) {
172-
LOGGER.debug("Max allowed metric probes reached, ignoring new probe: {}", probe);
173-
return;
174-
}
175161
definitions.add(probe);
176-
metricProbeCount++;
177162
}
178163

179164
void add(LogProbe probe) {
180-
if (logProbeCount >= MAX_ALLOWED_LOG_PROBES) {
181-
LOGGER.debug("Max allowed log probes reached, ignoring new probe: {}", probe);
182-
return;
183-
}
184165
definitions.add(probe);
185-
logProbeCount++;
186166
}
187167

188168
void add(SpanProbe probe) {
189-
if (spanProbeCount >= MAX_ALLOWED_SPAN_PROBES) {
190-
LOGGER.debug("Max allowed span probes reached, ignoring new probe: {}", probe);
191-
return;
192-
}
193169
definitions.add(probe);
194-
spanProbeCount++;
195170
}
196171

197172
void add(TriggerProbe probe) {
198-
if (triggerProbeCount >= MAX_ALLOWED_TRIGGER_PROBES) {
199-
LOGGER.debug("Max allowed trigger probes reached, ignoring new probe: {}", probe);
200-
return;
201-
}
202173
definitions.add(probe);
203-
triggerProbeCount++;
204174
}
205175

206176
void add(SpanDecorationProbe probe) {
207-
if (spanDecorationProbeCount >= MAX_ALLOWED_SPAN_DECORATION_PROBES) {
208-
LOGGER.debug("Max allowed span decoration probes reached, ignoring new probe: {}", probe);
209-
return;
210-
}
211177
definitions.add(probe);
212-
spanDecorationProbeCount++;
213178
}
214179

215180
void addAll(Collection<ProbeDefinition> newDefinitions) {

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/probe/SpanDecorationProbe.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,20 @@ public TagValue getValue() {
8484
public String toString() {
8585
return "Tag{" + "name='" + name + '\'' + ", value=" + value + '}';
8686
}
87+
88+
@Generated
89+
@Override
90+
public boolean equals(Object o) {
91+
if (o == null || getClass() != o.getClass()) return false;
92+
Tag tag = (Tag) o;
93+
return Objects.equals(name, tag.name) && Objects.equals(value, tag.value);
94+
}
95+
96+
@Generated
97+
@Override
98+
public int hashCode() {
99+
return Objects.hash(name, value);
100+
}
87101
}
88102

89103
public static class Decoration {
@@ -108,6 +122,20 @@ public List<Tag> getTags() {
108122
public String toString() {
109123
return "Decoration{" + "when=" + when + ", tags=" + tags + '}';
110124
}
125+
126+
@Generated
127+
@Override
128+
public boolean equals(Object o) {
129+
if (o == null || getClass() != o.getClass()) return false;
130+
Decoration that = (Decoration) o;
131+
return Objects.equals(when, that.when) && Objects.equals(tags, that.tags);
132+
}
133+
134+
@Generated
135+
@Override
136+
public int hashCode() {
137+
return Objects.hash(when, tags);
138+
}
111139
}
112140

113141
private final TargetSpan targetSpan;

dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/DebuggerProductChangesListenerTest.java

Lines changed: 79 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
package com.datadog.debugger.agent;
22

3-
import static com.datadog.debugger.agent.DebuggerProductChangesListener.MAX_ALLOWED_LOG_PROBES;
4-
import static com.datadog.debugger.agent.DebuggerProductChangesListener.MAX_ALLOWED_METRIC_PROBES;
5-
import static com.datadog.debugger.agent.DebuggerProductChangesListener.MAX_ALLOWED_SPAN_DECORATION_PROBES;
6-
import static com.datadog.debugger.agent.DebuggerProductChangesListener.MAX_ALLOWED_SPAN_PROBES;
73
import static com.datadog.debugger.util.LogProbeTestHelper.parseTemplate;
84
import static datadog.remoteconfig.PollingHinterNoop.NOOP;
95
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
@@ -19,8 +15,11 @@
1915
import com.datadog.debugger.probe.ProbeDefinition;
2016
import com.datadog.debugger.probe.SpanDecorationProbe;
2117
import com.datadog.debugger.probe.SpanProbe;
18+
import com.datadog.debugger.probe.TriggerProbe;
19+
import com.datadog.debugger.probe.Where;
2220
import datadog.remoteconfig.state.ParsedConfigKey;
2321
import datadog.trace.api.Config;
22+
import datadog.trace.bootstrap.debugger.ProbeId;
2423
import java.io.IOException;
2524
import java.nio.charset.StandardCharsets;
2625
import java.util.Arrays;
@@ -133,6 +132,9 @@ public void testMultipleSingleProbesConfigurations() {
133132
MetricProbe metricProbe = createMetricProbe(UUID.randomUUID().toString());
134133
LogProbe logProbe = createLogProbe(UUID.randomUUID().toString());
135134
SpanProbe spanProbe = createSpanProbe(UUID.randomUUID().toString());
135+
SpanDecorationProbe spanDecorationProbe =
136+
createSpanDecorationProbe(UUID.randomUUID().toString());
137+
TriggerProbe triggerProbe = createTriggerProbe(UUID.randomUUID().toString());
136138

137139
acceptMetricProbe(listener, metricProbe);
138140
listener.commit(NOOP);
@@ -146,16 +148,40 @@ public void testMultipleSingleProbesConfigurations() {
146148
listener.commit(NOOP);
147149
assertDefinitions(acceptor.getDefinitions(), metricProbe, logProbe, spanProbe);
148150

151+
acceptSpanDecorationProbe(listener, spanDecorationProbe);
152+
listener.commit(NOOP);
153+
assertDefinitions(
154+
acceptor.getDefinitions(), metricProbe, logProbe, spanProbe, spanDecorationProbe);
155+
156+
acceptTriggerProbe(listener, triggerProbe);
157+
listener.commit(NOOP);
158+
assertDefinitions(
159+
acceptor.getDefinitions(),
160+
metricProbe,
161+
logProbe,
162+
spanProbe,
163+
spanDecorationProbe,
164+
triggerProbe);
165+
149166
removeMetricProbe(listener, metricProbe);
150167
listener.commit(NOOP);
151-
assertDefinitions(acceptor.getDefinitions(), logProbe, spanProbe);
168+
assertDefinitions(
169+
acceptor.getDefinitions(), logProbe, spanProbe, spanDecorationProbe, triggerProbe);
152170

153171
removeLogProbe(listener, logProbe);
154172
listener.commit(NOOP);
155-
assertDefinitions(acceptor.getDefinitions(), spanProbe);
173+
assertDefinitions(acceptor.getDefinitions(), spanProbe, spanDecorationProbe, triggerProbe);
156174

157175
removeSpanProbe(listener, spanProbe);
158176
listener.commit(NOOP);
177+
assertDefinitions(acceptor.getDefinitions(), spanDecorationProbe, triggerProbe);
178+
179+
removeSpanDecorationProbe(listener, spanDecorationProbe);
180+
listener.commit(NOOP);
181+
assertDefinitions(acceptor.getDefinitions(), triggerProbe);
182+
183+
removeTriggerProbe(listener, triggerProbe);
184+
listener.commit(NOOP);
159185
assertTrue(acceptor.getDefinitions().isEmpty());
160186
}
161187

@@ -170,13 +196,17 @@ public void testMergeConfigWithSingleProbe() {
170196
MetricProbe metricProbe = createMetricProbe("345");
171197
LogProbe logProbe = createLogProbe("567");
172198
SpanProbe spanProbe = createSpanProbe("890");
199+
SpanDecorationProbe spanDecorationProbe = createSpanDecorationProbe("891");
200+
TriggerProbe triggerProbe = createTriggerProbe("892");
173201

174202
Configuration config =
175203
Configuration.builder()
176204
.setService(SERVICE_NAME)
177205
.add(metricProbe)
178206
.add(logProbe)
179207
.add(spanProbe)
208+
.add(spanDecorationProbe)
209+
.add(triggerProbe)
180210
.add(new LogProbe.Sampling(3.0))
181211
.addDenyList(createFilteredList())
182212
.build();
@@ -185,7 +215,13 @@ public void testMergeConfigWithSingleProbe() {
185215
acceptConfig(listener, config, UUID.randomUUID().toString());
186216
listener.commit(NOOP);
187217
assertDefinitions(
188-
acceptor.getDefinitions(), logProbeWithSnapshot, metricProbe, logProbe, spanProbe);
218+
acceptor.getDefinitions(),
219+
logProbeWithSnapshot,
220+
metricProbe,
221+
logProbe,
222+
spanProbe,
223+
spanDecorationProbe,
224+
triggerProbe);
189225
}
190226

191227
@Test
@@ -197,74 +233,6 @@ public void badConfigIDFailsToAccept() throws IOException {
197233
assertNull(acceptor.definitions);
198234
}
199235

200-
@Test
201-
public void maxLogProbes() {
202-
SimpleAcceptor acceptor = new SimpleAcceptor();
203-
DebuggerProductChangesListener listener =
204-
new DebuggerProductChangesListener(tracerConfig, acceptor);
205-
for (int i = 0; i < 200; i++) {
206-
LogProbe probe =
207-
LogProbe.builder()
208-
.probeId(String.valueOf(i), 0)
209-
.where("java.lang.String", "concat" + i)
210-
.build();
211-
acceptLogProbe(listener, probe);
212-
}
213-
listener.commit(NOOP);
214-
assertEquals(MAX_ALLOWED_LOG_PROBES, acceptor.getDefinitions().size());
215-
}
216-
217-
@Test
218-
public void maxMetricProbes() {
219-
SimpleAcceptor acceptor = new SimpleAcceptor();
220-
DebuggerProductChangesListener listener =
221-
new DebuggerProductChangesListener(tracerConfig, acceptor);
222-
for (int i = 0; i < 200; i++) {
223-
MetricProbe probe =
224-
MetricProbe.builder()
225-
.probeId(String.valueOf(i), 0)
226-
.where("java.lang.String", "concat" + i)
227-
.build();
228-
acceptMetricProbe(listener, probe);
229-
}
230-
listener.commit(NOOP);
231-
assertEquals(MAX_ALLOWED_METRIC_PROBES, acceptor.getDefinitions().size());
232-
}
233-
234-
@Test
235-
public void maxSpanProbes() {
236-
SimpleAcceptor acceptor = new SimpleAcceptor();
237-
DebuggerProductChangesListener listener =
238-
new DebuggerProductChangesListener(tracerConfig, acceptor);
239-
for (int i = 0; i < 200; i++) {
240-
SpanProbe probe =
241-
SpanProbe.builder()
242-
.probeId(String.valueOf(i), 0)
243-
.where("java.lang.String", "concat" + i)
244-
.build();
245-
acceptSpanProbe(listener, probe);
246-
}
247-
listener.commit(NOOP);
248-
assertEquals(MAX_ALLOWED_SPAN_PROBES, acceptor.getDefinitions().size());
249-
}
250-
251-
@Test
252-
public void maxSpanDecorationProbes() {
253-
SimpleAcceptor acceptor = new SimpleAcceptor();
254-
DebuggerProductChangesListener listener =
255-
new DebuggerProductChangesListener(tracerConfig, acceptor);
256-
for (int i = 0; i < 200; i++) {
257-
SpanDecorationProbe probe =
258-
SpanDecorationProbe.builder()
259-
.probeId(String.valueOf(i), 0)
260-
.where("java.lang.String", "concat" + i)
261-
.build();
262-
acceptSpanDecorationProbe(listener, probe);
263-
}
264-
listener.commit(NOOP);
265-
assertEquals(MAX_ALLOWED_SPAN_DECORATION_PROBES, acceptor.getDefinitions().size());
266-
}
267-
268236
@Test
269237
public void parsingException() throws IOException {
270238
SimpleAcceptor acceptor = new SimpleAcceptor();
@@ -320,6 +288,12 @@ byte[] toContent(SpanDecorationProbe probe) {
320288
.getBytes(StandardCharsets.UTF_8);
321289
}
322290

291+
byte[] toContent(TriggerProbe probe) {
292+
return DebuggerProductChangesListener.Adapter.TRIGGER_PROBE_JSON_ADAPTER
293+
.toJson(probe)
294+
.getBytes(StandardCharsets.UTF_8);
295+
}
296+
323297
void acceptConfig(
324298
DebuggerProductChangesListener listener, Configuration config, String configId) {
325299
assertDoesNotThrow(() -> listener.accept(createConfigKey(configId), toContent(config), NOOP));
@@ -361,10 +335,28 @@ void acceptSpanDecorationProbe(
361335
createConfigKey("spanDecorationProbe_" + probe.getId()), toContent(probe), NOOP));
362336
}
363337

338+
void acceptTriggerProbe(DebuggerProductChangesListener listener, TriggerProbe probe) {
339+
assertDoesNotThrow(
340+
() ->
341+
listener.accept(
342+
createConfigKey("triggerProbe_" + probe.getId()), toContent(probe), NOOP));
343+
}
344+
364345
void removeSpanProbe(DebuggerProductChangesListener listener, SpanProbe probe) {
365346
assertDoesNotThrow(() -> listener.remove(createConfigKey("spanProbe_" + probe.getId()), NOOP));
366347
}
367348

349+
void removeSpanDecorationProbe(
350+
DebuggerProductChangesListener listener, SpanDecorationProbe probe) {
351+
assertDoesNotThrow(
352+
() -> listener.remove(createConfigKey("spanDecorationProbe_" + probe.getId()), NOOP));
353+
}
354+
355+
void removeTriggerProbe(DebuggerProductChangesListener listener, TriggerProbe probe) {
356+
assertDoesNotThrow(
357+
() -> listener.remove(createConfigKey("triggerProbe_" + probe.getId()), NOOP));
358+
}
359+
368360
LogProbe createLogProbeWithSnapshot(String id) {
369361
return LogProbe.builder()
370362
.probeId(id, 0)
@@ -397,6 +389,18 @@ SpanProbe createSpanProbe(String id) {
397389
.build();
398390
}
399391

392+
SpanDecorationProbe createSpanDecorationProbe(String id) {
393+
return SpanDecorationProbe.builder()
394+
.probeId(id, 0)
395+
.where(null, null, null, 1966, "src/main/java/java/lang/String.java")
396+
.targetSpan(SpanDecorationProbe.TargetSpan.ACTIVE)
397+
.build();
398+
}
399+
400+
TriggerProbe createTriggerProbe(String id) {
401+
return new TriggerProbe(new ProbeId(id, 0), Where.of("java.lang.String", "indexOf", null));
402+
}
403+
400404
Configuration.FilterList createFilteredList() {
401405
return new Configuration.FilterList(
402406
Collections.singletonList("datadog"), Collections.singletonList("class1"));

0 commit comments

Comments
 (0)