public boolean hasModfication(long id) { for (Modification modification : this) { if (modification.getId() == id) { return true; } } return false; }
private Long getLastBuiltModificationId(final Pipeline pipeline, final MaterialInstance materialInstance, Modification from) { if (materialInstance instanceof DependencyMaterialInstance) { Long id = findLastBuiltModificationId(pipeline, materialInstance); if (id == null) { return from.getId(); } else { return modificationAfter(id, materialInstance); } } return from.getId(); }
public List<Modification> findModificationsSinceAndUptil(Material material, MaterialRevision materialRevision, PipelineTimelineEntry.Revision scmRevision) { List<Modification> modificationsSince = findModificationsSince(material, materialRevision); if (scmRevision == null) { return modificationsSince; } ArrayList<Modification> modificationsUptil = new ArrayList<>(); for (Modification modification : modificationsSince) { if (modification.getId() <= scmRevision.id) { modificationsUptil.add(modification); } } return modificationsUptil; }
public Modifications since(long sinceId) { Modifications laterRevisions = new Modifications(); for (Modification modification : this) { if (modification.getId() == sinceId) { return laterRevisions; } laterRevisions.add(modification); } throw new RuntimeException(String.format("Could not find modification %s in %s", sinceId, this)); }
private List<String> pmrModificationsKey(Modification modification, List<PipelineMaterialRevision> pmrs) { final long id = modification.getId(); final MaterialInstance materialInstance = modification.getMaterialInstance(); Collection<PipelineMaterialRevision> matchedPmrs = CollectionUtils.select(pmrs, pmr -> { long from = pmr.getFromModification().getId(); long to = pmr.getToModification().getId(); MaterialInstance pmi = findMaterialInstance(pmr.getMaterial()); return from <= id && id <= to && materialInstance.equals(pmi); }); List<String> keys = new ArrayList<>(matchedPmrs.size()); for (PipelineMaterialRevision matchedPmr : matchedPmrs) { keys.add(pmrModificationsKey(matchedPmr)); } return keys; }
private void loadModificationsForPMR(List<PipelineMaterialRevision> pmrs) { List<Criterion> criterions = new ArrayList<>(); for (PipelineMaterialRevision pmr : pmrs) { if (goCache.get(pmrModificationsKey(pmr)) != null) { continue; } final Criterion modificationClause = Restrictions.between("id", pmr.getFromModification().getId(), pmr.getToModification().getId()); final SimpleExpression idClause = Restrictions.eq("materialInstance", pmr.getMaterialInstance()); criterions.add(Restrictions.and(idClause, modificationClause)); } List<Modification> modifications = (List<Modification>) getHibernateTemplate().findByCriteria(buildModificationDetachedQuery(criterions)); sortPersistentObjectsById(modifications, false); for (Modification modification : modifications) { List<String> cacheKeys = pmrModificationsKey(modification, pmrs); for (String cacheKey : cacheKeys) { List<Modification> modificationList = (List<Modification>) goCache.get(cacheKey); if (modificationList == null) { modificationList = new ArrayList<>(); goCache.put(cacheKey, modificationList); } modificationList.add(modification); } } }
@SuppressWarnings("unchecked") List<Modification> findModificationsFor(PipelineMaterialRevision pmr) { String cacheKey = pmrModificationsKey(pmr); List<Modification> modifications = (List<Modification>) goCache.get(cacheKey); if (modifications == null) { synchronized (cacheKey) { modifications = (List<Modification>) goCache.get(cacheKey); if (modifications == null) { modifications = (List<Modification>) getHibernateTemplate().find( "FROM Modification WHERE materialId = ? AND id BETWEEN ? AND ? ORDER BY id DESC", new Object[]{findMaterialInstance(pmr.getMaterial()).getId(), pmr.getFromModification().getId(), pmr.getToModification().getId()}); goCache.put(cacheKey, modifications); } } } return modifications; }
@SuppressWarnings("unchecked") public List<Modification> findModificationsSince(Material material, MaterialRevision revision) { MaterialInstance materialInstance = findOrCreateFrom(material); String cacheKey = latestMaterialModificationsKey(materialInstance); synchronized (cacheKey) { long sinceModificationId = revision.getLatestModification().getId(); Modifications modifications = cachedModifications(materialInstance); if (!modificationExists(sinceModificationId, modifications)) { LOGGER.debug("CACHE-MISS for findModificationsSince - {}: {}", materialInstance, revision.getLatestModification()); modifications = _findModificationsSince(materialInstance, sinceModificationId); if (shouldCache(modifications)) { goCache.put(cacheKey, modifications); } else { goCache.remove(cacheKey); } } return modifications.since(sinceModificationId); } }
public void updateChangedRevisions(CaseInsensitiveString pipelineName, BuildCause buildCause) { for (MaterialRevision materialRevision : buildCause.getMaterialRevisions()) { Long latestModificationRunByPipeline = materialRepository.latestModificationRunByPipeline(pipelineName, materialRevision.getMaterial()); Modifications revised = new Modifications(); for (Modification modification : materialRevision.getModifications()) { if(modification.getId() > latestModificationRunByPipeline) revised.add(modification); } if(!revised.isEmpty()) { materialRevision.replaceModifications(revised); materialRevision.markAsChanged(); } else{ materialRevision.markAsNotChanged(); } } } }
for (MaterialRevision revision : revisions) { long materialId = findOrCreateFrom(revision.getMaterial()).getId(); long modificationId = revision.getLatestModification().getId(); String key = cacheKeyForHasPipelineEverRunWithModification(pipelineName, materialId, modificationId); if (goCache.get(key) != null) {