private void updateMaterial(Material material) { if (skipUpdate) return; try { if (!materialUpdateService.updateMaterial(material)) { retryQueue.add(material); } } catch (Exception e) { HealthStateScope scope = HealthStateScope.forMaterialUpdate(material); serverHealthService.update(error(format("Error updating Dependency Material %s", material.getUriForDisplay()), e.getMessage(), general(scope))); retryQueue.add(material); } }
public ValueStreamMap(Material material, MaterialInstance materialInstance, Modification modification) { currentMaterial = new SCMDependencyNode(material.getFingerprint(), material.getUriForDisplay(), material.getTypeForDisplay()); currentMaterialInstance = materialInstance; nodeIdToNodeMap.put(currentMaterial.getId(), currentMaterial); ((SCMDependencyNode)currentMaterial).addMaterialRevision(new MaterialRevision(material, false, modification)); }
public boolean updateMaterial(Material material) { Date inProgressSince = inProgress.putIfAbsent(material, new Date()); if (inProgressSince == null || !material.isAutoUpdate()) { LOGGER.debug("[Material Update] Starting update of material {}", material); try { long trackingId = mduPerformanceLogger.materialSentToUpdateQueue(material); queueFor(material).post(new MaterialUpdateMessage(material, trackingId)); return true; } catch (RuntimeException e) { inProgress.remove(material); throw e; } } else { LOGGER.warn("[Material Update] Skipping update of material {} which has been in-progress since {}", material, inProgressSince); long idleTime = getProcessManager().getIdleTimeFor(material.getFingerprint()); if (idleTime > getMaterialUpdateInActiveTimeoutInMillis()) { HealthStateScope scope = HealthStateScope.forMaterialUpdate(material); serverHealthService.removeByScope(scope); serverHealthService.update(warning("Material update for " + material.getUriForDisplay() + " hung:", "Material update is currently running but has not shown any activity in the last " + idleTime / 60000 + " minute(s). This may be hung. Details - " + material.getLongDescription(), general(scope))); } return false; } }
@Test public void shouldUseACombinationOfPipelineAndStageNameAsURI() { Material material = new DependencyMaterial(new CaseInsensitiveString("pipeline-foo"), new CaseInsensitiveString("stage-bar")); assertThat(material.getUriForDisplay(), is("pipeline-foo / stage-bar")); }
private void traverseUpstream(CaseInsensitiveString pipelineName, BuildCause buildCause, ValueStreamMap graph, List<MaterialRevision> visitedNodes) { for (MaterialRevision materialRevision : buildCause.getMaterialRevisions()) { Material material = materialRevision.getMaterial(); if (material instanceof DependencyMaterial) { CaseInsensitiveString upstreamPipeline = ((DependencyMaterial) material).getPipelineName(); DependencyMaterialRevision revision = (DependencyMaterialRevision) materialRevision.getRevision(); graph.addUpstreamNode(new PipelineDependencyNode(upstreamPipeline, upstreamPipeline.toString()), new PipelineRevision(revision.getPipelineName(), revision.getPipelineCounter(), revision.getPipelineLabel()), pipelineName); if (visitedNodes.contains(materialRevision)) { continue; } visitedNodes.add(materialRevision); DependencyMaterialRevision dmrOfUpstreamPipeline = buildCause.getMaterialRevisions().findDependencyMaterialRevision(upstreamPipeline.toString()); BuildCause buildCauseForUpstreamPipeline = pipelineService.buildCauseFor(dmrOfUpstreamPipeline.getPipelineName(), dmrOfUpstreamPipeline.getPipelineCounter()); traverseUpstream(upstreamPipeline, buildCauseForUpstreamPipeline, graph, visitedNodes); } else { graph.addUpstreamMaterialNode(new SCMDependencyNode(material.getFingerprint(), material.getUriForDisplay(), materialRevision.getMaterialType()), material.getName(), pipelineName, materialRevision); } } }