@Override public TraceBuilder getTraceBuilder() { return new TraceBuilder(1024, "test", 0L); }
public PlanContext(final Engine engine, final Executor taskExecutor, final DelayedExecutor timerExecutor, final ILoggerFactory loggerFactory, final Logger allLogger, final Logger rootLogger, final String planClass, Task<?> root, final int maxRelationshipsPerTrace, final PlanDeactivationListener planDeactivationListener, PlanCompletionListener planCompletionListener, final SerialExecutor.TaskQueue<PrioritizableRunnable> taskQueue, final boolean drainSerialExecutorQueue, ExecutionMonitor executionMonitor) { _id = IdGenerator.getNextId(); _root = root; _relationshipsBuilder = new TraceBuilder(maxRelationshipsPerTrace, planClass, _id); _engine = engine; _taskExecutor = new SerialExecutor(taskExecutor, new CancellingPlanExceptionHandler(root), () -> { try { planDeactivationListener.onPlanDeactivated(PlanContext.this); } catch (Throwable t) { LOG.error("Failed to notify deactivation listener " + planDeactivationListener, t); } }, taskQueue, drainSerialExecutorQueue, executionMonitor); _timerScheduler = timerExecutor; final Logger planLogger = loggerFactory.getLogger(Engine.LOGGER_BASE + ":planClass=" + planClass); _taskLogger = new TaskLogger(_id, root.getId(), allLogger, rootLogger, planLogger); _planClass = planClass; _planCompletionListener = planCompletionListener; _pending = new AtomicInteger(1); _root.addListener(p -> done()); }
@Test public void testAddRelationship() { final ShallowTraceBuilder trace1 = new ShallowTraceBuilder(IdGenerator.getNextId()).setName("task1").setResultType(ResultType.UNFINISHED); final ShallowTraceBuilder trace2 = new ShallowTraceBuilder(IdGenerator.getNextId()).setName("task2").setResultType(ResultType.UNFINISHED); final TraceBuilder builder = new TraceBuilder(1024, "test", 0L); builder.addRelationship(Relationship.SUCCESSOR_OF, trace1, trace2); Trace trace = builder.build(); assertEquals(trace1.build(), trace.getTraceMap().get(trace1.getId())); assertEquals(trace2.build(), trace.getTraceMap().get(trace2.getId())); assertEquals(1, trace.getRelationships().size()); assertTrue(trace.getRelationships() .contains(new TraceRelationship(trace1, trace2, Relationship.SUCCESSOR_OF))); }
@Test public void testAddRelationshipTwice() { final ShallowTraceBuilder trace1 = new ShallowTraceBuilder(IdGenerator.getNextId()).setName("task1").setResultType(ResultType.UNFINISHED); final ShallowTraceBuilder trace2 = new ShallowTraceBuilder(IdGenerator.getNextId()).setName("task2").setResultType(ResultType.UNFINISHED); final TraceBuilder builder = new TraceBuilder(1024, "test", 0L); builder.addRelationship(Relationship.SUCCESSOR_OF, trace1, trace2); builder.addRelationship(Relationship.SUCCESSOR_OF, trace1, trace2); Trace trace = builder.build(); assertEquals(trace1.build(), trace.getTraceMap().get(trace1.getId())); assertEquals(trace2.build(), trace.getTraceMap().get(trace2.getId())); assertEquals(1, trace.getRelationships().size()); assertTrue(trace.getRelationships() .contains(new TraceRelationship(trace1, trace2, Relationship.SUCCESSOR_OF))); }
@Test public void testRelationshipRetention() { final TraceBuilder builder = new TraceBuilder(4096, "test", 0L); List<TraceRelationship> rels = new ArrayList<TraceRelationship>(); for (int i = 0; i < 4096; i++) { final ShallowTraceBuilder trace1 = new ShallowTraceBuilder(IdGenerator.getNextId()).setName("task1").setResultType(ResultType.UNFINISHED); final ShallowTraceBuilder trace2 = new ShallowTraceBuilder(IdGenerator.getNextId()).setName("task2").setResultType(ResultType.UNFINISHED); builder.addRelationship(Relationship.SUCCESSOR_OF, trace1, trace2); rels.add(new TraceRelationship(trace1, trace2, Relationship.SUCCESSOR_OF)); } for (int i = 0; i < 4096 * 10; i++) { final ShallowTraceBuilder trace1 = new ShallowTraceBuilder(IdGenerator.getNextId()).setName("task1").setResultType(ResultType.UNFINISHED); final ShallowTraceBuilder trace2 = new ShallowTraceBuilder(IdGenerator.getNextId()).setName("task2").setResultType(ResultType.UNFINISHED); builder.addRelationship(Relationship.SUCCESSOR_OF, trace1, trace2); } Trace trace = builder.build(); assertEquals(rels.size(), trace.getRelationships().size()); for (TraceRelationship rel : rels) { assertTrue(trace.getRelationships().contains(rel)); } }
@Test public void testReversibleTraceWithPredecessor() throws IOException { final ShallowTraceBuilder predecessor = new ShallowTraceBuilder(IdGenerator.getNextId()).setName("predecessor").setResultType(ResultType.SUCCESS) .setValue("predecessor value").setStartNanos(0L).setPendingNanos(100L).setEndNanos(200L); final ShallowTraceBuilder successor = new ShallowTraceBuilder(IdGenerator.getNextId()).setName("successor").setResultType(ResultType.SUCCESS) .setValue("successor value").setStartNanos(50L).setPendingNanos(75L).setEndNanos(100L); final TraceBuilder builder = new TraceBuilder(1024, "test", 0L); builder.addRelationship(Relationship.SUCCESSOR_OF, successor, predecessor); Trace trace = builder.build(); assertReversible(trace); }
@Test public void testReversibleTraceWithChild() throws IOException { final ShallowTraceBuilder parent = new ShallowTraceBuilder(IdGenerator.getNextId()).setName("parent").setResultType(ResultType.SUCCESS) .setValue("parent value").setStartNanos(0L).setPendingNanos(100L).setEndNanos(200L); final ShallowTraceBuilder child = new ShallowTraceBuilder(IdGenerator.getNextId()).setName("child").setResultType(ResultType.SUCCESS) .setValue("child value").setStartNanos(50L).setPendingNanos(75L).setEndNanos(100L); final TraceBuilder builder = new TraceBuilder(1024, "test", 0L); builder.addRelationship(Relationship.PARENT_OF, parent, child); Trace trace = builder.build(); assertReversible(trace); }
@Test public void testReversibleTraceWithDiamond() throws IOException { final ShallowTraceBuilder source = new ShallowTraceBuilder(IdGenerator.getNextId()).setName("source").setResultType(ResultType.SUCCESS) .setValue("source value").setStartNanos(0L).setPendingNanos(25L).setEndNanos(50L); final ShallowTraceBuilder left = new ShallowTraceBuilder(IdGenerator.getNextId()).setName("left").setResultType(ResultType.SUCCESS) .setValue("left value").setStartNanos(50L).setPendingNanos(75L).setEndNanos(100L); final ShallowTraceBuilder right = new ShallowTraceBuilder(IdGenerator.getNextId()).setName("right").setResultType(ResultType.SUCCESS) .setValue("right value").setStartNanos(50L).setPendingNanos(75L).setEndNanos(100L); final ShallowTraceBuilder sink = new ShallowTraceBuilder(IdGenerator.getNextId()).setName("sink").setResultType(ResultType.SUCCESS) .setValue("sink value").setStartNanos(100L).setPendingNanos(125L).setEndNanos(150L); final TraceBuilder builder = new TraceBuilder(1024, "test", 0L); builder.addRelationship(Relationship.SUCCESSOR_OF, left, source); builder.addRelationship(Relationship.SUCCESSOR_OF, right, source); builder.addRelationship(Relationship.SUCCESSOR_OF, sink, left); builder.addRelationship(Relationship.SUCCESSOR_OF, sink, right); Trace trace = builder.build(); assertReversible(trace); }
for (JsonNode node : resultsArr) { Trace trace = CODEC.decode(node.toString()); TraceBuilder builder = new TraceBuilder(trace.getRelationships().size() + 1, trace.getPlanClass(), trace.getPlanId()); Map<Long, ShallowTraceBuilder> traceMap = new HashMap<>(); trace.getTraceMap().forEach((key, value) -> {
public PlanContext(final Engine engine, final Executor taskExecutor, final DelayedExecutor timerExecutor, final ILoggerFactory loggerFactory, final Logger allLogger, final Logger rootLogger, final String planClass, Task<?> root, final int maxRelationshipsPerTrace, final PlanDeactivationListener planDeactivationListener, PlanCompletionListener planCompletionListener, final SerialExecutor.TaskQueue<PrioritizableRunnable> taskQueue, final boolean drainSerialExecutorQueue, ExecutionMonitor executionMonitor) { _id = IdGenerator.getNextId(); _root = root; _relationshipsBuilder = new TraceBuilder(maxRelationshipsPerTrace, planClass, _id); _engine = engine; _taskExecutor = new SerialExecutor(taskExecutor, new CancellingPlanExceptionHandler(root), () -> { try { planDeactivationListener.onPlanDeactivated(PlanContext.this); } catch (Throwable t) { LOG.error("Failed to notify deactivation listener " + planDeactivationListener, t); } }, taskQueue, drainSerialExecutorQueue, executionMonitor); _timerScheduler = timerExecutor; final Logger planLogger = loggerFactory.getLogger(Engine.LOGGER_BASE + ":planClass=" + planClass); _taskLogger = new TaskLogger(_id, root.getId(), allLogger, rootLogger, planLogger); _planClass = planClass; _planCompletionListener = planCompletionListener; _pending = new AtomicInteger(1); _root.addListener(p -> done()); }