@Test public void testWithTimerTask() { Task<?> task = delayedValue("value", 1000, TimeUnit.MILLISECONDS).withTimeout(50, TimeUnit.MILLISECONDS); runAndWaitException(task, TimeoutException.class); Assert.assertTrue(_traceCaptureListener.isDone()); Trace trace = _traceCaptureListener.getTrace(); Assert.assertNotNull(trace); Optional<ShallowTrace> timerTrace = findTraceByName(trace, "withTimeout"); Assert.assertTrue(timerTrace.isPresent()); Assert.assertEquals(timerTrace.get().getResultType(), ResultType.ERROR); Optional<ShallowTrace> valueTrace = findTraceByName(trace, "value"); Assert.assertTrue(valueTrace.isPresent()); Assert.assertEquals(valueTrace.get().getResultType(), ResultType.EARLY_FINISH); }
@Test public void testWithSideEffect2() throws InterruptedException { Task<?> task = value("value1Task", "value1").withSideEffect("delayed sideEffect", v -> delayedValue("value2", 100, TimeUnit.MILLISECONDS)); runAndWaitForPlanToComplete("side-effect task", task, 30, TimeUnit.SECONDS); Trace trace = task.getTrace(); Assert.assertNotNull(trace); Optional<ShallowTrace> sideEffectTrace = findTraceByName(trace, "delayed sideEffect"); Assert.assertTrue(sideEffectTrace.isPresent()); Assert.assertEquals(sideEffectTrace.get().getResultType(), ResultType.SUCCESS); Optional<ShallowTrace> valueTrace = findTraceByName(trace, "value2 delayed"); Assert.assertTrue(valueTrace.isPresent()); Assert.assertEquals(valueTrace.get().getResultType(), ResultType.SUCCESS); }
@Test public void testTraceCompletness() throws InterruptedException { final Task<String> task = delayedValue("value", 10, TimeUnit.MILLISECONDS).map("duplicate", x -> x + x); final CountDownLatch latch = new CountDownLatch(1); final AtomicReference<Trace> trace = new AtomicReference<>(); task.addListener(s -> { trace.set(task.getTrace()); latch.countDown(); }); runAndWait("TestFusionTask.testTraceCompletness", task); assertTrue(latch.await(100, TimeUnit.MILLISECONDS), "trace was not abtained in time"); assertTrue(trace.get().getTraceMap().values().stream() .allMatch(shallowTrace -> shallowTrace.getResultType().equals(ResultType.SUCCESS)), "all tasks in the trace should have ResultType=SUCCESS"); }
@Test public void testWithSideEffect() throws InterruptedException { Task<?> task = value("value1Task", "value1").withSideEffect("delayed sideEffect", v -> delayedValue("value2", 100, TimeUnit.MILLISECONDS)); runAndWait(task); Assert.assertTrue(_traceCaptureListener.await(30, TimeUnit.SECONDS)); Trace trace = _traceCaptureListener.getTrace(); Assert.assertNotNull(trace); Optional<ShallowTrace> sideEffectTrace = findTraceByName(trace, "delayed sideEffect"); Assert.assertTrue(sideEffectTrace.isPresent()); Assert.assertEquals(sideEffectTrace.get().getResultType(), ResultType.SUCCESS); Optional<ShallowTrace> valueTrace = findTraceByName(trace, "value2 delayed"); Assert.assertTrue(valueTrace.isPresent()); Assert.assertEquals(valueTrace.get().getResultType(), ResultType.SUCCESS); }
private void verifyBatchFinished(final Task<?> task) { final ShallowTrace trace = findBatchTrace(task); assertTrue(trace != null); assertTrue(trace.getResultType() != ResultType.UNFINISHED); }
public ShallowTraceBuilder(final ShallowTrace shallowTrace) { this(shallowTrace.getId()); setResultType(shallowTrace.getResultType()); setName(shallowTrace.getName()); setValue(shallowTrace.getValue()); setStartNanos(shallowTrace.getStartNanos()); setPendingNanos(shallowTrace.getPendingNanos()); setEndNanos(shallowTrace.getEndNanos()); setHidden(shallowTrace.getHidden()); setSystemHidden(shallowTrace.getSystemHidden()); Map<String, String> attributes = shallowTrace.getAttributes(); if (!attributes.isEmpty()) { _attributes = new HashMap<String, String>(); _attributes.putAll(attributes); } setTaskType(shallowTrace.getTaskType()); }
verifyShallowTrace(task2); verifyShallowTrace(innerTask); assertEquals(ResultType.EARLY_FINISH, innerTask.getTrace().getTraceMap().get(innerTask.getId()).getResultType());
@Test public void testTraceWithEarlyFinish() throws InterruptedException { final Task<String> innerTask = value("xyz"); final Task<String> task = new BaseTask<String>() { @Override protected Promise<? extends String> run(final Context context) throws Exception { // We kick off a task that won't finish before the containing task // (this task) is finished. context.run(innerTask); return Promises.value("value"); } }; runAndWait("TestTaskToTrace.testTraceWithEarlyFinish", task); assertEquals(1, getRelationships(task.getTrace(), task.getId()).size()); assertTrue(task.getTrace().getRelationships() .contains(new TraceRelationship(task.getShallowTraceBuilder(), innerTask.getShallowTraceBuilder(), Relationship.POTENTIAL_PARENT_OF))); assertEquals(ResultType.EARLY_FINISH, task.getTrace().getTraceMap().get(innerTask.getId()).getResultType()); }
verifyShallowTrace(task3); verifyShallowTrace(innerTask); assertEquals(ResultType.EARLY_FINISH, innerTask.getTrace().getTraceMap().get(innerTask.getId()).getResultType());
generator.writeNumberField(JsonTraceCodec.TRACE_ID, trace.getId()); generator.writeStringField(JsonTraceCodec.TRACE_NAME, trace.getName()); generator.writeStringField(JsonTraceCodec.TRACE_RESULT_TYPE, trace.getResultType().toString()); generator.writeBooleanField(JsonTraceCodec.TRACE_HIDDEN, trace.getHidden()); generator.writeBooleanField(JsonTraceCodec.TRACE_SYSTEM_HIDDEN, trace.getSystemHidden());
@Test public void testCustomBuilding() throws IOException { final String json = buildJson( new String[] { traceStr(1, "parent", ResultType.UNFINISHED, false), traceStr(2, "child", ResultType.UNFINISHED, false), traceStr(3, "predecessor", ResultType.UNFINISHED, false) }, new String[] { hierStr(1, 2), orderStr(3, 1) }, "test", 0L); final Trace trace; try { trace = decodeString(json); } catch (IOException e) { fail("JSON parse failed. Document:\n" + json + "\nError: " + e.toString()); return; } assertEquals("parent", trace.getTraceMap().get(1L).getName()); assertEquals(ResultType.UNFINISHED, trace.getTraceMap().get(1L).getResultType()); assertEquals(2, trace.getRelationships().size()); String childName = null; String predecessorName = null; for (TraceRelationship rel : trace.getRelationships()) { if (rel.getRelationhsip() == Relationship.PARENT_OF) { childName = trace.getTraceMap().get(rel.getTo()).getName(); } else if (rel.getRelationhsip() == Relationship.SUCCESSOR_OF) { predecessorName = trace.getTraceMap().get(rel.getTo()).getName(); } } assertEquals("child", childName); assertEquals("predecessor", predecessorName); }
private void verifyShallowTrace(final Task<?> task) { final ShallowTrace trace = findPossiblyFusedTrace(task); assertEquals(task.getName(), trace.getName()); assertEquals(ResultType.fromTask(task), trace.getResultType()); if (trace.getResultType().equals(ResultType.UNFINISHED)) { if (trace.getStartNanos() == null) { assertNull(trace.getEndNanos());
public ShallowTraceBuilder(final ShallowTrace shallowTrace) { this(shallowTrace.getId()); setResultType(shallowTrace.getResultType()); setName(shallowTrace.getName()); setValue(shallowTrace.getValue()); setStartNanos(shallowTrace.getStartNanos()); setPendingNanos(shallowTrace.getPendingNanos()); setEndNanos(shallowTrace.getEndNanos()); setHidden(shallowTrace.getHidden()); setSystemHidden(shallowTrace.getSystemHidden()); Map<String, String> attributes = shallowTrace.getAttributes(); if (!attributes.isEmpty()) { _attributes = new HashMap<String, String>(); _attributes.putAll(attributes); } setTaskType(shallowTrace.getTaskType()); }
generator.writeNumberField(JsonTraceCodec.TRACE_ID, trace.getId()); generator.writeStringField(JsonTraceCodec.TRACE_NAME, trace.getName()); generator.writeStringField(JsonTraceCodec.TRACE_RESULT_TYPE, trace.getResultType().toString()); generator.writeBooleanField(JsonTraceCodec.TRACE_HIDDEN, trace.getHidden()); generator.writeBooleanField(JsonTraceCodec.TRACE_SYSTEM_HIDDEN, trace.getSystemHidden());