Skip to content

Commit d1cc596

Browse files
Fixed race condition for Quartz test. (#10762)
Fixed race condition for Quartz test. Co-authored-by: alexey.kuznetsov <alexey.kuznetsov@datadoghq.com>
1 parent ae7a5c9 commit d1cc596

File tree

2 files changed

+21
-13
lines changed

2 files changed

+21
-13
lines changed

dd-java-agent/instrumentation/quartz-2.0/src/test/groovy/QuartzTest.groovy

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
1+
import static datadog.trace.agent.test.utils.TraceUtils.basicSpan
2+
import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace
3+
import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.QUARTZ_JOB_GROUP
4+
import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.QUARTZ_JOB_NAME
5+
import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.QUARTZ_TRIGGER_GROUP
6+
import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.QUARTZ_TRIGGER_NAME
7+
18
import datadog.trace.agent.test.InstrumentationSpecification
29
import datadog.trace.agent.test.asserts.TraceAssert
310
import datadog.trace.bootstrap.instrumentation.api.Tags
11+
import java.util.concurrent.CountDownLatch
12+
import java.util.concurrent.TimeUnit
413
import org.quartz.CronScheduleBuilder
514
import org.quartz.JobBuilder
615
import org.quartz.JobDetail
@@ -9,15 +18,6 @@ import org.quartz.Trigger
918
import org.quartz.TriggerBuilder
1019
import org.quartz.impl.StdSchedulerFactory
1120
import spock.lang.Shared
12-
import java.util.concurrent.CountDownLatch
13-
import java.util.concurrent.TimeUnit
14-
15-
import static datadog.trace.agent.test.utils.TraceUtils.basicSpan
16-
import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.QUARTZ_JOB_GROUP
17-
import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.QUARTZ_JOB_NAME
18-
import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.QUARTZ_TRIGGER_GROUP
19-
import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.QUARTZ_TRIGGER_NAME
20-
import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace
2121

2222
class QuartzTest extends InstrumentationSpecification {
2323
public static final String JOB_NAME = "job"
@@ -63,7 +63,7 @@ class QuartzTest extends InstrumentationSpecification {
6363
Trigger cronTrigger = TriggerBuilder.newTrigger()
6464
.withIdentity(TRIGGER_NAME, GROUP_NAME)
6565
.forJob(jobDetail)
66-
.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * ? * *")).build() // run every second
66+
.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * ? * *")).build() // run every 5 seconds
6767
scheduler.scheduleJob(jobDetail, cronTrigger)
6868

6969
when:

dd-java-agent/instrumentation/quartz-2.0/src/test/java/QuartzTestJob.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
import java.util.concurrent.CountDownLatch;
2-
import org.quartz.*;
2+
import org.quartz.DisallowConcurrentExecution;
3+
import org.quartz.Job;
4+
import org.quartz.JobExecutionContext;
5+
import org.quartz.Scheduler;
6+
import org.quartz.SchedulerException;
37

8+
@DisallowConcurrentExecution
49
public class QuartzTestJob implements Job {
510
@Override
6-
public void execute(JobExecutionContext context) throws JobExecutionException {
11+
public void execute(JobExecutionContext context) {
712
try {
8-
CountDownLatch latch = (CountDownLatch) context.getScheduler().getContext().get("latch");
13+
Scheduler scheduler = context.getScheduler();
14+
scheduler.standby(); // prevent subsequent cron fires from racing with test assertions
15+
16+
CountDownLatch latch = (CountDownLatch) scheduler.getContext().get("latch");
917
latch.countDown();
1018
} catch (SchedulerException e) {
1119
e.printStackTrace();

0 commit comments

Comments
 (0)