From dab4e0fb8c2d256548f8b126ed55af394c65e4fe Mon Sep 17 00:00:00 2001 From: nkumar2 Date: Fri, 26 Apr 2024 09:20:08 +0100 Subject: [PATCH] review comments incorporated --- .../clustering/batch/io/RSMergeWriter.java | 23 +++++++++++-------- .../batch/io/RSMergeWriterTest.java | 4 ++-- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/eva-accession-clustering/src/main/java/uk/ac/ebi/eva/accession/clustering/batch/io/RSMergeWriter.java b/eva-accession-clustering/src/main/java/uk/ac/ebi/eva/accession/clustering/batch/io/RSMergeWriter.java index 0d254f2ba..069565f06 100644 --- a/eva-accession-clustering/src/main/java/uk/ac/ebi/eva/accession/clustering/batch/io/RSMergeWriter.java +++ b/eva-accession-clustering/src/main/java/uk/ac/ebi/eva/accession/clustering/batch/io/RSMergeWriter.java @@ -192,20 +192,23 @@ public void writeRSMerge(SubmittedVariantOperationEntity currentOperation) ImmutablePair> mergeDestinationAndMergees = getMergeDestinationAndMergees(mergeCandidates); ClusteredVariantEntity mergeDestination = mergeDestinationAndMergees.getLeft(); + List mergees = mergeDestinationAndMergees.getRight(); - // check if any variant with same hash as mergeDestination already exist in DB - ClusteredVariantEntity existingClusteredVariantEntity = getClusteredVariantEntityWithHash(mergeDestination); - if (existingClusteredVariantEntity != null && existingClusteredVariantEntity.getAccession()!=mergeDestination.getAccession()) { - if (mergeDestination.getAccession() == ClusteredVariantMergingPolicy.prioritise(mergeDestination.getAccession(), - existingClusteredVariantEntity.getAccession()).accessionToKeep) { - merge(mergeDestination, existingClusteredVariantEntity, currentOperation); - } else { - merge(existingClusteredVariantEntity, mergeDestination, currentOperation); - mergeDestination = existingClusteredVariantEntity; + if (mergees.size() > 1) { + // check if any variant with same hash as mergeDestination already exist in DB + ClusteredVariantEntity existingClusteredVariantEntity = getClusteredVariantEntityWithHash(mergeDestination); + if (existingClusteredVariantEntity != null && existingClusteredVariantEntity.getAccession() != mergeDestination.getAccession()) { + if (mergeDestination.getAccession() == ClusteredVariantMergingPolicy.prioritise(mergeDestination.getAccession(), + existingClusteredVariantEntity.getAccession()).accessionToKeep) { + merge(mergeDestination, existingClusteredVariantEntity, currentOperation); + mergees = mergees.stream() + .filter(cve -> !(cve.equals(existingClusteredVariantEntity) + && cve.getAccession() == existingClusteredVariantEntity.getAccession())) + .collect(Collectors.toList()); + } } } - List mergees = mergeDestinationAndMergees.getRight(); for (ClusteredVariantEntity mergee: mergees) { logger.info("RS merge operation: Merging rs{} to rs{} due to hash collision...", mergee.getAccession(), mergeDestination.getAccession()); diff --git a/eva-accession-clustering/src/test/java/uk/ac/ebi/eva/accession/clustering/batch/io/RSMergeWriterTest.java b/eva-accession-clustering/src/test/java/uk/ac/ebi/eva/accession/clustering/batch/io/RSMergeWriterTest.java index a960db39f..7533077fe 100644 --- a/eva-accession-clustering/src/test/java/uk/ac/ebi/eva/accession/clustering/batch/io/RSMergeWriterTest.java +++ b/eva-accession-clustering/src/test/java/uk/ac/ebi/eva/accession/clustering/batch/io/RSMergeWriterTest.java @@ -483,8 +483,8 @@ public void testRSWithSameHashAsMergeDestinationAlreadyExistsInDBWithLowerAccess SubmittedVariantOperationEntity mergeOperation1 = new SubmittedVariantOperationEntity(); mergeOperation1.fill(RSMergeAndSplitCandidatesReaderConfiguration.MERGE_CANDIDATES_EVENT_TYPE, - ss2.getAccession(), null, "Different RS with matching loci", - Stream.of(ss2, ss3).map(SubmittedVariantInactiveEntity::new).collect(Collectors.toList())); + ss1.getAccession(), null, "Different RS with matching loci", + Stream.of(ss1, ss2, ss3).map(SubmittedVariantInactiveEntity::new).collect(Collectors.toList())); mergeOperation1.setId(ClusteringWriter.getMergeCandidateId(mergeOperation1)); this.mongoTemplate.insert(Arrays.asList(mergeOperation1), SUBMITTED_VARIANT_OPERATION_COLLECTION);