public static WorkItem getWorkItemGenerateDataPlane(String containerName, String testrigName) { WorkItem wItem = new WorkItem(containerName, testrigName); wItem.addRequestParam(BfConsts.COMMAND_DUMP_DP, ""); return wItem; }
private synchronized QueuedWork getIncompleteWork( String container, String testrig, WorkType wType) { for (QueuedWork work : _queueIncompleteWork) { WorkDetails wDetails = work.getDetails(); if (container.equals(work.getWorkItem().getContainerName()) && ((testrig.equals(wDetails.baseTestrig)) || (wDetails.isDifferential && testrig.equals(wDetails.deltaTestrig))) && (wType == null || wDetails.workType == wType)) { return work; } } return null; }
private boolean execute(WorkItem wItem, @Nullable FileWriter outWriter) { _logger.infof("work-id is %s\n", wItem.getId()); ActiveSpan activeSpan = GlobalTracer.get().activeSpan(); if (activeSpan != null) { activeSpan.setTag("work-id", wItem.getId().toString()); } wItem.addRequestParam(BfConsts.ARG_LOG_LEVEL, _settings.getBatfishLogLevel()); for (String option : _additionalBatfishOptions.keySet()) { wItem.addRequestParam(option, _additionalBatfishOptions.get(option)); } boolean queueWorkResult = _workHelper.queueWork(wItem); _logger.infof("Queuing result: %s\n", queueWorkResult); if (!queueWorkResult) { return queueWorkResult; } boolean result = true; if (!_backgroundExecution) { _polledWorkItem = wItem; result = pollWorkAndGetAnswer(wItem, outWriter); _polledWorkItem = null; } return result; }
private static @Nonnull WorkDetails resolveIds( WorkItem resolvedWorkItem, WorkDetails workDetails) { return new WorkDetails( resolvedWorkItem.getTestrigName(), resolvedWorkItem.getRequestParams().get(BfConsts.ARG_DELTA_TESTRIG), workDetails.isDifferential, workDetails.workType); }
/** * Get all completed work for the specified network and snapshot. * * @param network {@link NetworkId} to get completed work for. * @param snapshot {@link SnapshotId} to get completed work for. * @return {@link List} of completed {@link QueuedWork}. */ public synchronized List<QueuedWork> getCompletedWork(NetworkId network, SnapshotId snapshot) { ImmutableList.Builder<QueuedWork> b = ImmutableList.builder(); for (QueuedWork work : _queueCompletedWork) { if (work.getWorkItem().getContainerName().equals(network.getId()) && work.getWorkItem().getTestrigName().equals(snapshot.getId())) { b.add(work); } } return b.build(); }
private boolean pollWorkAndGetAnswer(WorkItem wItem, @Nullable FileWriter outWriter) { boolean pollResult = pollWork(wItem.getId()); if (!pollResult) { return false; String ansFileName = wItem.getId() + BfConsts.SUFFIX_ANSWER_JSON_FILE; String downloadedAnsFile = _workHelper.getObject(wItem.getContainerName(), wItem.getTestrigName(), ansFileName); if (downloadedAnsFile == null) { _logger.errorf("Failed to get answer file %s. (Was work killed?)\n", ansFileName); String logFileName = wItem.getId() + BfConsts.SUFFIX_LOG_FILE; String downloadedFileStr = _workHelper.getObject(wItem.getContainerName(), wItem.getTestrigName(), logFileName);
@Before public void initWorkItem() { _workItem = new WorkItem("testContainer", "testTestrig"); }
static @Nonnull WorkItem resolveIds(WorkItem workItem) { IdManager idManager = Main.getWorkMgr().getIdManager(); Map<String, String> params = new HashMap<>(workItem.getRequestParams()); String network = workItem.getContainerName(); if (network == null) { return workItem; String snapshot = workItem.getTestrigName(); if (snapshot == null) { return workItem; return new WorkItem(workItem.getId(), networkId.getId(), snapshotId.getId(), params);
@Test public void testNullActiveSpanNoop() { _workItem.setSourceSpan(null, _noopTracer); SpanContext sourceSpanContext = _workItem.getSourceSpan(_noopTracer); try (ActiveSpan childSpan = _noopTracer .buildSpan("test dangling child") .addReference(References.FOLLOWS_FROM, sourceSpanContext) .startActive()) { assertThat(childSpan, notNullValue()); assertThat(childSpan, instanceOf(NoopActiveSpan.class)); } }
SpanContext queueWorkSpan = work.getWorkItem().getSourceSpan(); try (ActiveSpan assignWorkSpan = GlobalTracer.get() assert assignWorkSpan != null; // avoid unused warning JSONObject task = new JSONObject(work.getWorkItem().getRequestParams()); task.put(BfConsts.ARG_CONTAINER, work.getWorkItem().getContainerName()); task.put( BfConsts.ARG_STORAGE_BASE, Main.getSettings().getContainersLocation().toAbsolutePath().toString()); task.put(BfConsts.ARG_TESTRIG, work.getWorkItem().getTestrigName());
@Test public void testGetWorkStatusPresent() throws IOException { String network = "network1"; String snapshot = "snapshot1"; UUID workId = UUID.randomUUID(); Main.getWorkMgr().initNetwork(network, null); WorkMgrTestUtils.initSnapshotWithTopology(network, snapshot, ImmutableSet.of()); WorkItem workItem = new WorkItem(workId, network, snapshot, new HashMap<>()); Main.getWorkMgr().queueWork(workItem); Response response = getWorkItemTarget(network, workId.toString()).get(); // work item should exist assertThat(response.getStatus(), equalTo(OK.getStatusCode())); WorkStatus workStatus = response.readEntity(WorkStatus.class); // work ID should match assertThat(workStatus.getWorkItem().getId(), equalTo(workId)); } }
checkNetworkAccessibility(apiKey, workItem.getContainerName()); GlobalTracer.get().activeSpan().setTag("work-id", workItem.getId().toString());
Question.parseQuestion( getQuestion( workItem.getContainerName(), WorkItemBuilder.getQuestionName(workItem), WorkItemBuilder.getAnalysisName(workItem))); throw new BatfishException("Analysis name not provided for ANALYZE work"); Set<String> qNames = listAnalysisQuestions(workItem.getContainerName(), aName); Question.parseQuestion(getQuestion(workItem.getContainerName(), qName, aName)); if (question.getDataPlane()) { workType = WorkType.DATAPLANE_DEPENDENT_ANSWERING; workItem.getTestrigName(), workItem.getRequestParams().get(BfConsts.ARG_DELTA_TESTRIG), WorkItemBuilder.isDifferential(workItem), workType);
public boolean queueWork(WorkItem workItem) { NetworkId networkId = _idManager.getNetworkId(requireNonNull(workItem.getContainerName())); boolean success; try { workItem.setSourceSpan(GlobalTracer.get().activeSpan()); WorkDetails workDetails = computeWorkDetails(workItem); if (SnapshotMetadataMgr.getInitializationMetadata(
/** * Retrieves a {@link SpanContext} which was serialized earlier in the {@link WorkItem} * * @return {@link SpanContext} or null if no {@link SpanContext} was serialized in the {@link * WorkItem} */ @Nullable @JsonIgnore public SpanContext getSourceSpan() { return getSourceSpan(GlobalTracer.get()); }
public static String getQuestionName(WorkItem workItem) { return workItem.getRequestParams().get(BfConsts.ARG_QUESTION_NAME); } }
public UUID getId() { return _workItem.getId(); }
/** * Takes an {@link ActiveSpan} and attaches it to the {@link WorkItem} which can be fetched later * using {@link WorkItem#getSourceSpan()} */ public void setSourceSpan(@Nullable ActiveSpan activeSpan) { setSourceSpan(activeSpan, GlobalTracer.get()); }
private synchronized QueuedWork getMatchingWork(WorkItem workItem, WorkQueue queue) { for (QueuedWork work : queue) { if (work.getWorkItem().matches(workItem)) { return work; } } return null; }
if (!workItem.getContainerName().equals(networkName) || !workItem.getTestrigName().equals(snapshotName)) { return failureResponse( "Mismatch in parameters: WorkItem is not for the supplied network or snapshot"); String taskStr = BatfishObjectMapper.writePrettyString(work.getLastTaskCheckResult()); response .put(CoordConsts.SVC_KEY_WORKID, work.getWorkItem().getId()) .put(CoordConsts.SVC_KEY_WORKSTATUS, work.getStatus().toString()) .put(CoordConsts.SVC_KEY_TASKSTATUS, taskStr);