diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2_8_0/catalog/CalculatePedigreeGraphMigration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2_8_0/catalog/CalculatePedigreeGraphMigration.java index 418f6ed3152..6ff2cc5bff5 100644 --- a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2_8_0/catalog/CalculatePedigreeGraphMigration.java +++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2_8_0/catalog/CalculatePedigreeGraphMigration.java @@ -34,14 +34,28 @@ public class CalculatePedigreeGraphMigration extends MigrationTool { protected void run() throws Exception { MigrationRun migrationRun = getMigrationRun(); + // Map study studyFqn -> job Map jobs = new HashMap<>(); for (JobReferenceParam jobReference : migrationRun.getJobs()) { Job job = catalogManager.getJobManager().get(jobReference.getStudyId(), jobReference.getId(), new QueryOptions(), token) .first(); - logger.info("Registering job {} for study {} to migrate", job.getId(), job.getStudy().getId()); + logger.info("Reading already executed job '{}' for study '{}' with status '{}'", + job.getId(), + job.getStudy().getId(), + job.getInternal().getStatus().getId()); jobs.put(job.getStudy().getId(), job); } - for (String study : getStudies()) { + + Set studies = new LinkedHashSet<>(getStudies()); + logger.info("Study IDs (num. total = {}) to initialize pedigree graphs: {}", studies.size(), StringUtils.join(studies, ", ")); + + // Ensure that studies with already executed jobs are included in the migration run + getMigrationRun().getJobs().forEach(j -> studies.add(j.getStudyId())); + + logger.info("Study IDs (num. total = {}) after adding studies from migration jobs: {}", studies.size(), + StringUtils.join(studies, ", ")); + + for (String study : studies) { Job job = jobs.get(study); if (job != null) { String status = job.getInternal().getStatus().getId(); @@ -61,8 +75,9 @@ protected void run() throws Exception { logger.info("Adding new job to migrate/initialize pedigree graph for study {}", study); ObjectMap params = new ObjectMap() .append(ParamConstants.STUDY_PARAM, study); - getMigrationRun().addJob(catalogManager.getJobManager().submit(study, PedigreeGraphInitAnalysis.ID, Enums.Priority.MEDIUM, - params, null, null, null, new ArrayList<>(), token).first()); + Job newJob = catalogManager.getJobManager().submit(study, PedigreeGraphInitAnalysis.ID, Enums.Priority.MEDIUM, + params, null, null, null, new ArrayList<>(), token).first(); + getMigrationRun().addJob(newJob); } } @@ -73,7 +88,7 @@ public List getStudies() throws CatalogException { for (Project project : catalogManager.getProjectManager().search(new Query(), projectOptions, token).getResults()) { if (CollectionUtils.isNotEmpty(project.getStudies())) { for (Study study : project.getStudies()) { - String id = project.getId() + ":" + study.getId(); + String id = study.getFqn(); for (Family family : catalogManager.getFamilyManager().search(id, new Query(), familyOptions, token).getResults()) { if (PedigreeGraphUtils.hasMinTwoGenerations(family) && (family.getPedigreeGraph() == null || StringUtils.isEmpty(family.getPedigreeGraph().getBase64()))) {