diff --git a/hapi-deployable-pom/pom.xml b/hapi-deployable-pom/pom.xml index 6be19192e0c..8cb99220fea 100644 --- a/hapi-deployable-pom/pom.xml +++ b/hapi-deployable-pom/pom.xml @@ -4,7 +4,7 @@ ca.uhn.hapi.fhir hapi-fhir - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../pom.xml diff --git a/hapi-fhir-android/pom.xml b/hapi-fhir-android/pom.xml index b426255dc0c..6526e2d844f 100644 --- a/hapi-fhir-android/pom.xml +++ b/hapi-fhir-android/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-base/pom.xml b/hapi-fhir-base/pom.xml index 77391678ee0..269d7037bce 100644 --- a/hapi-fhir-base/pom.xml +++ b/hapi-fhir-base/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-bom/pom.xml b/hapi-fhir-bom/pom.xml index 6ee77e7c3af..80f0465f630 100644 --- a/hapi-fhir-bom/pom.xml +++ b/hapi-fhir-bom/pom.xml @@ -4,14 +4,14 @@ 4.0.0 ca.uhn.hapi.fhir hapi-fhir-bom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT pom HAPI FHIR BOM ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-checkstyle/pom.xml b/hapi-fhir-checkstyle/pom.xml index b85d38797be..12b5e688a7b 100644 --- a/hapi-fhir-checkstyle/pom.xml +++ b/hapi-fhir-checkstyle/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-fhir - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../pom.xml diff --git a/hapi-fhir-cli/hapi-fhir-cli-api/pom.xml b/hapi-fhir-cli/hapi-fhir-cli-api/pom.xml index 945799435ba..0df7eabbc6c 100644 --- a/hapi-fhir-cli/hapi-fhir-cli-api/pom.xml +++ b/hapi-fhir-cli/hapi-fhir-cli-api/pom.xml @@ -4,7 +4,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-cli/hapi-fhir-cli-app/pom.xml b/hapi-fhir-cli/hapi-fhir-cli-app/pom.xml index 15fd8f03efe..2fcf899b565 100644 --- a/hapi-fhir-cli/hapi-fhir-cli-app/pom.xml +++ b/hapi-fhir-cli/hapi-fhir-cli-app/pom.xml @@ -6,7 +6,7 @@ ca.uhn.hapi.fhir hapi-fhir-cli - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../pom.xml diff --git a/hapi-fhir-cli/hapi-fhir-cli-jpaserver/pom.xml b/hapi-fhir-cli/hapi-fhir-cli-jpaserver/pom.xml index af41b578c7e..36923a20b4f 100644 --- a/hapi-fhir-cli/hapi-fhir-cli-jpaserver/pom.xml +++ b/hapi-fhir-cli/hapi-fhir-cli-jpaserver/pom.xml @@ -6,7 +6,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../../hapi-deployable-pom diff --git a/hapi-fhir-cli/pom.xml b/hapi-fhir-cli/pom.xml index 520224f7cd4..50f4c55da96 100644 --- a/hapi-fhir-cli/pom.xml +++ b/hapi-fhir-cli/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-fhir - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../pom.xml diff --git a/hapi-fhir-client-okhttp/pom.xml b/hapi-fhir-client-okhttp/pom.xml index 8befbdd4228..120dd6f69a0 100644 --- a/hapi-fhir-client-okhttp/pom.xml +++ b/hapi-fhir-client-okhttp/pom.xml @@ -4,7 +4,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-client/pom.xml b/hapi-fhir-client/pom.xml index a80ba2c725d..65e6d79aa63 100644 --- a/hapi-fhir-client/pom.xml +++ b/hapi-fhir-client/pom.xml @@ -4,7 +4,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-converter/pom.xml b/hapi-fhir-converter/pom.xml index 988f1031258..7f2f73fc80e 100644 --- a/hapi-fhir-converter/pom.xml +++ b/hapi-fhir-converter/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-dist/pom.xml b/hapi-fhir-dist/pom.xml index 3a31155caa9..f8f10fafeb0 100644 --- a/hapi-fhir-dist/pom.xml +++ b/hapi-fhir-dist/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-fhir - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../pom.xml diff --git a/hapi-fhir-docs/pom.xml b/hapi-fhir-docs/pom.xml index 90acbc2a826..f90af5cb5fc 100644 --- a/hapi-fhir-docs/pom.xml +++ b/hapi-fhir-docs/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_2_5/upgrade.md b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_2_5/upgrade.md new file mode 100644 index 00000000000..324b0eace0f --- /dev/null +++ b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_2_5/upgrade.md @@ -0,0 +1,2 @@ + +This release fixes a problem with the batch framework which could cause jobs to hang indefinitely if multiple processes attempted to run a maintenance pass simultaneously. diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_2_5/version.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_2_5/version.yaml new file mode 100644 index 00000000000..e7dc13ec7e4 --- /dev/null +++ b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_2_5/version.yaml @@ -0,0 +1,3 @@ +--- +release-date: "2023-01-09" +codename: "Vishwa" diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_4_0/4065-batch2-fasttracking-configurable.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_4_0/4065-batch2-fasttracking-configurable.yaml index 51de9aaa93f..fec574a19b4 100644 --- a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_4_0/4065-batch2-fasttracking-configurable.yaml +++ b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_4_0/4065-batch2-fasttracking-configurable.yaml @@ -1,6 +1,7 @@ --- type: change issue: 4065 +backport: 6.2.5 title: "A new DaoConfig configuration setting has been added called JobFastTrackingEnabled, default false. If this setting is enabled, then gated batch jobs that produce only one chunk will immediately trigger a batch maintenance job. This may be useful for testing, but is not recommended for production use. Prior to this change, diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_4_0/4400-dont_fail_on_batch2_double_delivery.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_4_0/4400-dont_fail_on_batch2_double_delivery.yaml index 29e5a7410aa..5d01063ce9a 100644 --- a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_4_0/4400-dont_fail_on_batch2_double_delivery.yaml +++ b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_4_0/4400-dont_fail_on_batch2_double_delivery.yaml @@ -1,5 +1,6 @@ --- type: fix issue: 4400 +backport: 6.2.5 title: "When Batch2 work notifications are received twice (e.g. because the notification engine double delivered) an unrecoverable failure could occur. This has been corrected." diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_4_0/4417-double-delivery-in-progress.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_4_0/4417-double-delivery-in-progress.yaml index f30ab6c0634..d7aefef577e 100644 --- a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_4_0/4417-double-delivery-in-progress.yaml +++ b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_4_0/4417-double-delivery-in-progress.yaml @@ -2,5 +2,6 @@ type: fix issue: 4417 jira: SMILE-5405 +backport: 6.2.5 title: "Fixed a bug with batch2 which could cause previously completed chunks to be set back to in-progress. This could cause a batch job to never complete. Now, a safeguard to ensure a job can never return to in-progress once it has completed or failed." diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_4_0/4422-reduction-step-multiple-call-quickfix.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_4_0/4422-reduction-step-multiple-call-quickfix.yaml new file mode 100644 index 00000000000..5b829ea3b4a --- /dev/null +++ b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_4_0/4422-reduction-step-multiple-call-quickfix.yaml @@ -0,0 +1,11 @@ +--- +type: fix +issue: 4422 +jira: SMILE-5701 +backport: 6.2.5 +title: "When a Bulk Export job runs with a large amount of data, + there is a chance the reduction step can be kicked off multiple + times, resulting in data loss in the final report. + Jobs will now be set to in-progress before processing to + prevent multiple reduction steps from being started. + " diff --git a/hapi-fhir-jacoco/pom.xml b/hapi-fhir-jacoco/pom.xml index 9fd26de5ce9..9494c835c31 100644 --- a/hapi-fhir-jacoco/pom.xml +++ b/hapi-fhir-jacoco/pom.xml @@ -11,7 +11,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-jaxrsserver-base/pom.xml b/hapi-fhir-jaxrsserver-base/pom.xml index d5ded8302c0..8ed093981c4 100644 --- a/hapi-fhir-jaxrsserver-base/pom.xml +++ b/hapi-fhir-jaxrsserver-base/pom.xml @@ -4,7 +4,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-jpa/pom.xml b/hapi-fhir-jpa/pom.xml index aace7e6de97..d5630cd4363 100644 --- a/hapi-fhir-jpa/pom.xml +++ b/hapi-fhir-jpa/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml 4.0.0 diff --git a/hapi-fhir-jpaserver-base/pom.xml b/hapi-fhir-jpaserver-base/pom.xml index 58f104cd3ed..44c5e67b405 100644 --- a/hapi-fhir-jpaserver-base/pom.xml +++ b/hapi-fhir-jpaserver-base/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/batch2/JpaJobPersistenceImpl.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/batch2/JpaJobPersistenceImpl.java index f6ecea647be..25daacba02f 100644 --- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/batch2/JpaJobPersistenceImpl.java +++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/batch2/JpaJobPersistenceImpl.java @@ -276,7 +276,7 @@ public class JpaJobPersistenceImpl implements IJobPersistence { } @Override - @Transactional(propagation = Propagation.REQUIRED) + @Transactional(propagation = Propagation.REQUIRES_NEW) public boolean canAdvanceInstanceToNextStep(String theInstanceId, String theCurrentStepId) { List statusesForStep = myWorkChunkRepository.getDistinctStatusesForStep(theInstanceId, theCurrentStepId); ourLog.debug("Checking whether gated job can advanced to next step. [instanceId={}, currentStepId={}, statusesForStep={}]", theInstanceId, theCurrentStepId, statusesForStep); @@ -390,6 +390,12 @@ public class JpaJobPersistenceImpl implements IJobPersistence { return recordsChanged > 0; } + @Override + public boolean markInstanceAsStatus(String theInstance, StatusEnum theStatusEnum) { + int recordsChanged = myJobInstanceRepository.updateInstanceStatus(theInstance, theStatusEnum); + return recordsChanged > 0; + } + @Override @Transactional(propagation = Propagation.REQUIRES_NEW) public JobOperationResultJson cancelInstance(String theInstanceId) { diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/IBatch2JobInstanceRepository.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/IBatch2JobInstanceRepository.java index 8396be1b71c..f770aa633a1 100644 --- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/IBatch2JobInstanceRepository.java +++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/IBatch2JobInstanceRepository.java @@ -20,10 +20,8 @@ package ca.uhn.fhir.jpa.dao.data; * #L% */ -import ca.uhn.fhir.batch2.model.JobInstance; import ca.uhn.fhir.batch2.model.StatusEnum; import ca.uhn.fhir.jpa.entity.Batch2JobInstanceEntity; -import org.hibernate.engine.jdbc.batch.spi.Batch; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/Batch2JobInstanceEntity.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/Batch2JobInstanceEntity.java index 0debd189d19..789a4267ef1 100644 --- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/Batch2JobInstanceEntity.java +++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/Batch2JobInstanceEntity.java @@ -37,6 +37,7 @@ import javax.persistence.Lob; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import javax.persistence.Version; import java.io.Serializable; import java.util.Date; @@ -71,6 +72,11 @@ public class Batch2JobInstanceEntity implements Serializable { @Temporal(TemporalType.TIMESTAMP) private Date myEndTime; + @Version + @Column(name = "UPDATE_TIME", nullable = true) + @Temporal(TemporalType.TIMESTAMP) + private Date myUpdateTime; + @Column(name = "DEFINITION_ID", length = JobDefinition.ID_MAX_LENGTH, nullable = false) private String myDefinitionId; @@ -190,6 +196,10 @@ public class Batch2JobInstanceEntity implements Serializable { myEndTime = theEndTime; } + public Date getUpdateTime() { + return myUpdateTime; + } + public String getId() { return myId; } @@ -289,6 +299,7 @@ public class Batch2JobInstanceEntity implements Serializable { .append("createTime", myCreateTime) .append("startTime", myStartTime) .append("endTime", myEndTime) + .append("updateTime", myUpdateTime) .append("status", myStatus) .append("cancelled", myCancelled) .append("combinedRecordsProcessed", myCombinedRecordsProcessed) diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/Batch2WorkChunkEntity.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/Batch2WorkChunkEntity.java index 37d3e05ecf7..a0598b87893 100644 --- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/Batch2WorkChunkEntity.java +++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/Batch2WorkChunkEntity.java @@ -39,6 +39,7 @@ import javax.persistence.ManyToOne; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import javax.persistence.Version; import java.io.Serializable; import java.util.Date; @@ -68,6 +69,10 @@ public class Batch2WorkChunkEntity implements Serializable { @Column(name = "END_TIME", nullable = true) @Temporal(TemporalType.TIMESTAMP) private Date myEndTime; + @Version + @Column(name = "UPDATE_TIME", nullable = true) + @Temporal(TemporalType.TIMESTAMP) + private Date myUpdateTime; @Column(name = "RECORDS_PROCESSED", nullable = true) private Integer myRecordsProcessed; @Column(name = "DEFINITION_ID", length = ID_MAX_LENGTH, nullable = false) @@ -141,6 +146,10 @@ public class Batch2WorkChunkEntity implements Serializable { myEndTime = theEndTime; } + public Date getUpdateTime() { + return myUpdateTime; + } + public Integer getRecordsProcessed() { return myRecordsProcessed; } @@ -225,6 +234,7 @@ public class Batch2WorkChunkEntity implements Serializable { .append("createTime", myCreateTime) .append("startTime", myStartTime) .append("endTime", myEndTime) + .append("updateTime", myUpdateTime) .append("recordsProcessed", myRecordsProcessed) .append("targetStepId", myTargetStepId) .append("serializedData", mySerializedData) diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/migrate/tasks/HapiFhirJpaMigrationTasks.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/migrate/tasks/HapiFhirJpaMigrationTasks.java index ce6d8b2800b..c6335beccc0 100644 --- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/migrate/tasks/HapiFhirJpaMigrationTasks.java +++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/migrate/tasks/HapiFhirJpaMigrationTasks.java @@ -130,6 +130,18 @@ public class HapiFhirJpaMigrationTasks extends BaseMigrationTasks { .modifyColumn("20221103.1", "SP_URI") .nullable() .withType(ColumnTypeEnum.STRING, 500); + + version.onTable("BT2_JOB_INSTANCE") + .addColumn("20230110.1", "UPDATE_TIME") + .nullable() + .type(ColumnTypeEnum.DATE_TIMESTAMP); + + version.onTable("BT2_WORK_CHUNK") + .addColumn("20230110.2", "UPDATE_TIME") + .nullable() + .type(ColumnTypeEnum.DATE_TIMESTAMP); + + } private void init610() { diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/util/JobInstanceUtil.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/util/JobInstanceUtil.java index 4f0dc0bef3b..29fdc05800a 100644 --- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/util/JobInstanceUtil.java +++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/util/JobInstanceUtil.java @@ -48,6 +48,7 @@ public class JobInstanceUtil { retVal.setStartTime(theEntity.getStartTime()); retVal.setCreateTime(theEntity.getCreateTime()); retVal.setEndTime(theEntity.getEndTime()); + retVal.setUpdateTime(theEntity.getUpdateTime()); retVal.setCombinedRecordsProcessed(theEntity.getCombinedRecordsProcessed()); retVal.setCombinedRecordsProcessedPerSecond(theEntity.getCombinedRecordsProcessedPerSecond()); retVal.setTotalElapsedMillis(theEntity.getTotalElapsedMillis()); @@ -81,6 +82,7 @@ public class JobInstanceUtil { retVal.setStatus(theEntity.getStatus()); retVal.setCreateTime(theEntity.getCreateTime()); retVal.setStartTime(theEntity.getStartTime()); + retVal.setUpdateTime(theEntity.getUpdateTime()); retVal.setEndTime(theEntity.getEndTime()); retVal.setErrorMessage(theEntity.getErrorMessage()); retVal.setErrorCount(theEntity.getErrorCount()); diff --git a/hapi-fhir-jpaserver-elastic-test-utilities/pom.xml b/hapi-fhir-jpaserver-elastic-test-utilities/pom.xml index 2d2952de95e..6c6b3e6c5f6 100644 --- a/hapi-fhir-jpaserver-elastic-test-utilities/pom.xml +++ b/hapi-fhir-jpaserver-elastic-test-utilities/pom.xml @@ -6,7 +6,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-jpaserver-ips/pom.xml b/hapi-fhir-jpaserver-ips/pom.xml index 3283bee3887..e52aea6b752 100644 --- a/hapi-fhir-jpaserver-ips/pom.xml +++ b/hapi-fhir-jpaserver-ips/pom.xml @@ -3,7 +3,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-jpaserver-mdm/pom.xml b/hapi-fhir-jpaserver-mdm/pom.xml index 63415f75f11..15aa9542fa4 100644 --- a/hapi-fhir-jpaserver-mdm/pom.xml +++ b/hapi-fhir-jpaserver-mdm/pom.xml @@ -6,7 +6,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-jpaserver-mdm/src/test/java/ca/uhn/fhir/jpa/mdm/svc/MdmControllerSvcImplTest.java b/hapi-fhir-jpaserver-mdm/src/test/java/ca/uhn/fhir/jpa/mdm/svc/MdmControllerSvcImplTest.java index 52f5a216fe6..bf6b348b92a 100644 --- a/hapi-fhir-jpaserver-mdm/src/test/java/ca/uhn/fhir/jpa/mdm/svc/MdmControllerSvcImplTest.java +++ b/hapi-fhir-jpaserver-mdm/src/test/java/ca/uhn/fhir/jpa/mdm/svc/MdmControllerSvcImplTest.java @@ -164,7 +164,8 @@ public class MdmControllerSvcImplTest extends BaseLinkR4Test { ServletRequestDetails details = new ServletRequestDetails(); details.setTenantId(PARTITION_2); IBaseParameters clearJob = myMdmControllerSvc.submitMdmClearJob(urls, batchSize, details); - String jobId = ((StringType) ((Parameters) clearJob).getParameterValue("jobId")).getValueAsString(); + Parameters.ParametersParameterComponent parameter = ((Parameters) clearJob).getParameter("jobId"); + String jobId = ((StringType) parameter.getValue()).getValueAsString(); myBatch2JobHelper.awaitJobCompletion(jobId); assertLinkCount(2); diff --git a/hapi-fhir-jpaserver-model/pom.xml b/hapi-fhir-jpaserver-model/pom.xml index 00c77a788cc..a105674e4fa 100644 --- a/hapi-fhir-jpaserver-model/pom.xml +++ b/hapi-fhir-jpaserver-model/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-jpaserver-searchparam/pom.xml b/hapi-fhir-jpaserver-searchparam/pom.xml index 4fe982a4c2b..119880cd395 100755 --- a/hapi-fhir-jpaserver-searchparam/pom.xml +++ b/hapi-fhir-jpaserver-searchparam/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-jpaserver-subscription/pom.xml b/hapi-fhir-jpaserver-subscription/pom.xml index 5ae8f625fc2..8dd6082afeb 100644 --- a/hapi-fhir-jpaserver-subscription/pom.xml +++ b/hapi-fhir-jpaserver-subscription/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-jpaserver-test-dstu2/pom.xml b/hapi-fhir-jpaserver-test-dstu2/pom.xml index 1f436a775f9..1bdf83b72ee 100644 --- a/hapi-fhir-jpaserver-test-dstu2/pom.xml +++ b/hapi-fhir-jpaserver-test-dstu2/pom.xml @@ -6,7 +6,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-jpaserver-test-dstu3/pom.xml b/hapi-fhir-jpaserver-test-dstu3/pom.xml index bfdca6c9adf..f5797e922c1 100644 --- a/hapi-fhir-jpaserver-test-dstu3/pom.xml +++ b/hapi-fhir-jpaserver-test-dstu3/pom.xml @@ -6,7 +6,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-jpaserver-test-r4/pom.xml b/hapi-fhir-jpaserver-test-r4/pom.xml index 5005faf7634..28e74fa348d 100644 --- a/hapi-fhir-jpaserver-test-r4/pom.xml +++ b/hapi-fhir-jpaserver-test-r4/pom.xml @@ -6,7 +6,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-jpaserver-test-r4/src/test/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirResourceDaoTest.java b/hapi-fhir-jpaserver-test-r4/src/test/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirResourceDaoTest.java index 1ad3d5f77f3..3230cd75d38 100644 --- a/hapi-fhir-jpaserver-test-r4/src/test/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirResourceDaoTest.java +++ b/hapi-fhir-jpaserver-test-r4/src/test/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirResourceDaoTest.java @@ -43,6 +43,8 @@ import java.util.List; import java.util.List; +import java.util.List; + import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.fail; diff --git a/hapi-fhir-jpaserver-test-r4/src/test/java/ca/uhn/fhir/jpa/provider/r4/ConsentInterceptorResourceProviderR4Test.java b/hapi-fhir-jpaserver-test-r4/src/test/java/ca/uhn/fhir/jpa/provider/r4/ConsentInterceptorResourceProviderR4Test.java index 4b7b7381f5a..8662518842d 100644 --- a/hapi-fhir-jpaserver-test-r4/src/test/java/ca/uhn/fhir/jpa/provider/r4/ConsentInterceptorResourceProviderR4Test.java +++ b/hapi-fhir-jpaserver-test-r4/src/test/java/ca/uhn/fhir/jpa/provider/r4/ConsentInterceptorResourceProviderR4Test.java @@ -63,6 +63,10 @@ import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.support.TransactionSynchronizationManager; import org.springframework.transaction.support.TransactionTemplate; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.TransactionDefinition; +import org.springframework.transaction.support.TransactionSynchronizationManager; +import org.springframework.transaction.support.TransactionTemplate; import java.io.IOException; import java.util.ArrayList; diff --git a/hapi-fhir-jpaserver-test-r4b/pom.xml b/hapi-fhir-jpaserver-test-r4b/pom.xml index 73089187c1d..c11ae5a2df8 100644 --- a/hapi-fhir-jpaserver-test-r4b/pom.xml +++ b/hapi-fhir-jpaserver-test-r4b/pom.xml @@ -6,7 +6,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-jpaserver-test-r5/pom.xml b/hapi-fhir-jpaserver-test-r5/pom.xml index 1ab431e5507..7060c408d81 100644 --- a/hapi-fhir-jpaserver-test-r5/pom.xml +++ b/hapi-fhir-jpaserver-test-r5/pom.xml @@ -6,7 +6,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-jpaserver-test-utilities/pom.xml b/hapi-fhir-jpaserver-test-utilities/pom.xml index 71ff3bbabb0..fc01acda8a3 100644 --- a/hapi-fhir-jpaserver-test-utilities/pom.xml +++ b/hapi-fhir-jpaserver-test-utilities/pom.xml @@ -6,7 +6,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-jpaserver-uhnfhirtest/pom.xml b/hapi-fhir-jpaserver-uhnfhirtest/pom.xml index 05570a1ed4e..35754d1c594 100644 --- a/hapi-fhir-jpaserver-uhnfhirtest/pom.xml +++ b/hapi-fhir-jpaserver-uhnfhirtest/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-fhir - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../pom.xml diff --git a/hapi-fhir-server-mdm/pom.xml b/hapi-fhir-server-mdm/pom.xml index c657810ada3..244a4e150be 100644 --- a/hapi-fhir-server-mdm/pom.xml +++ b/hapi-fhir-server-mdm/pom.xml @@ -7,7 +7,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-server-openapi/pom.xml b/hapi-fhir-server-openapi/pom.xml index f06e5ce7771..09d5cfc1f09 100644 --- a/hapi-fhir-server-openapi/pom.xml +++ b/hapi-fhir-server-openapi/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-server/pom.xml b/hapi-fhir-server/pom.xml index 851c17947d6..d4b4abe54dd 100644 --- a/hapi-fhir-server/pom.xml +++ b/hapi-fhir-server/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-serviceloaders/hapi-fhir-caching-api/pom.xml b/hapi-fhir-serviceloaders/hapi-fhir-caching-api/pom.xml index 02300bcde89..3a198fe53b6 100644 --- a/hapi-fhir-serviceloaders/hapi-fhir-caching-api/pom.xml +++ b/hapi-fhir-serviceloaders/hapi-fhir-caching-api/pom.xml @@ -7,7 +7,7 @@ hapi-fhir-serviceloaders ca.uhn.hapi.fhir - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../pom.xml diff --git a/hapi-fhir-serviceloaders/hapi-fhir-caching-caffeine/pom.xml b/hapi-fhir-serviceloaders/hapi-fhir-caching-caffeine/pom.xml index e72f40f4dd3..3db8187c54d 100644 --- a/hapi-fhir-serviceloaders/hapi-fhir-caching-caffeine/pom.xml +++ b/hapi-fhir-serviceloaders/hapi-fhir-caching-caffeine/pom.xml @@ -7,7 +7,7 @@ hapi-fhir-serviceloaders ca.uhn.hapi.fhir - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../pom.xml @@ -20,7 +20,7 @@ ca.uhn.hapi.fhir hapi-fhir-caching-api - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT com.github.ben-manes.caffeine diff --git a/hapi-fhir-serviceloaders/hapi-fhir-caching-guava/pom.xml b/hapi-fhir-serviceloaders/hapi-fhir-caching-guava/pom.xml index 3b1e81ac5f7..e58f3afc9ff 100644 --- a/hapi-fhir-serviceloaders/hapi-fhir-caching-guava/pom.xml +++ b/hapi-fhir-serviceloaders/hapi-fhir-caching-guava/pom.xml @@ -7,7 +7,7 @@ hapi-fhir-serviceloaders ca.uhn.hapi.fhir - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../pom.xml diff --git a/hapi-fhir-serviceloaders/hapi-fhir-caching-testing/pom.xml b/hapi-fhir-serviceloaders/hapi-fhir-caching-testing/pom.xml index c7d92c42801..8a320dedd4b 100644 --- a/hapi-fhir-serviceloaders/hapi-fhir-caching-testing/pom.xml +++ b/hapi-fhir-serviceloaders/hapi-fhir-caching-testing/pom.xml @@ -7,7 +7,7 @@ hapi-fhir ca.uhn.hapi.fhir - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../../pom.xml diff --git a/hapi-fhir-serviceloaders/pom.xml b/hapi-fhir-serviceloaders/pom.xml index 9c9cae70ed0..bc7ea7deba4 100644 --- a/hapi-fhir-serviceloaders/pom.xml +++ b/hapi-fhir-serviceloaders/pom.xml @@ -5,7 +5,7 @@ hapi-fhir ca.uhn.hapi.fhir - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../pom.xml diff --git a/hapi-fhir-spring-boot/hapi-fhir-spring-boot-autoconfigure/pom.xml b/hapi-fhir-spring-boot/hapi-fhir-spring-boot-autoconfigure/pom.xml index 2396b7ac555..8b6fdd97fec 100644 --- a/hapi-fhir-spring-boot/hapi-fhir-spring-boot-autoconfigure/pom.xml +++ b/hapi-fhir-spring-boot/hapi-fhir-spring-boot-autoconfigure/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-spring-boot/hapi-fhir-spring-boot-samples/hapi-fhir-spring-boot-sample-client-apache/pom.xml b/hapi-fhir-spring-boot/hapi-fhir-spring-boot-samples/hapi-fhir-spring-boot-sample-client-apache/pom.xml index 6f34a0c26b9..ea7b07a4ccc 100644 --- a/hapi-fhir-spring-boot/hapi-fhir-spring-boot-samples/hapi-fhir-spring-boot-sample-client-apache/pom.xml +++ b/hapi-fhir-spring-boot/hapi-fhir-spring-boot-samples/hapi-fhir-spring-boot-sample-client-apache/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-fhir-spring-boot-samples - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT hapi-fhir-spring-boot-sample-client-apache diff --git a/hapi-fhir-spring-boot/hapi-fhir-spring-boot-samples/hapi-fhir-spring-boot-sample-client-okhttp/pom.xml b/hapi-fhir-spring-boot/hapi-fhir-spring-boot-samples/hapi-fhir-spring-boot-sample-client-okhttp/pom.xml index ca9dfd726ae..4f6393f7c0b 100644 --- a/hapi-fhir-spring-boot/hapi-fhir-spring-boot-samples/hapi-fhir-spring-boot-sample-client-okhttp/pom.xml +++ b/hapi-fhir-spring-boot/hapi-fhir-spring-boot-samples/hapi-fhir-spring-boot-sample-client-okhttp/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-fhir-spring-boot-samples - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT hapi-fhir-spring-boot-sample-client-okhttp diff --git a/hapi-fhir-spring-boot/hapi-fhir-spring-boot-samples/hapi-fhir-spring-boot-sample-server-jersey/pom.xml b/hapi-fhir-spring-boot/hapi-fhir-spring-boot-samples/hapi-fhir-spring-boot-sample-server-jersey/pom.xml index afa13074307..3ec1440cb18 100644 --- a/hapi-fhir-spring-boot/hapi-fhir-spring-boot-samples/hapi-fhir-spring-boot-sample-server-jersey/pom.xml +++ b/hapi-fhir-spring-boot/hapi-fhir-spring-boot-samples/hapi-fhir-spring-boot-sample-server-jersey/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-fhir-spring-boot-samples - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT hapi-fhir-spring-boot-sample-server-jersey diff --git a/hapi-fhir-spring-boot/hapi-fhir-spring-boot-samples/pom.xml b/hapi-fhir-spring-boot/hapi-fhir-spring-boot-samples/pom.xml index a403a414a33..92e14112893 100644 --- a/hapi-fhir-spring-boot/hapi-fhir-spring-boot-samples/pom.xml +++ b/hapi-fhir-spring-boot/hapi-fhir-spring-boot-samples/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-fhir-spring-boot - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT hapi-fhir-spring-boot-samples diff --git a/hapi-fhir-spring-boot/hapi-fhir-spring-boot-starter/pom.xml b/hapi-fhir-spring-boot/hapi-fhir-spring-boot-starter/pom.xml index d3a8ef9d189..d3a530ce6a0 100644 --- a/hapi-fhir-spring-boot/hapi-fhir-spring-boot-starter/pom.xml +++ b/hapi-fhir-spring-boot/hapi-fhir-spring-boot-starter/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-spring-boot/pom.xml b/hapi-fhir-spring-boot/pom.xml index e1183efa6ff..aafd16791fe 100644 --- a/hapi-fhir-spring-boot/pom.xml +++ b/hapi-fhir-spring-boot/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-fhir - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../pom.xml diff --git a/hapi-fhir-sql-migrate/pom.xml b/hapi-fhir-sql-migrate/pom.xml index 2cca18a9e71..7f465bd3e06 100644 --- a/hapi-fhir-sql-migrate/pom.xml +++ b/hapi-fhir-sql-migrate/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-storage-batch2-jobs/pom.xml b/hapi-fhir-storage-batch2-jobs/pom.xml index be9bcd61988..e2e613dfadf 100644 --- a/hapi-fhir-storage-batch2-jobs/pom.xml +++ b/hapi-fhir-storage-batch2-jobs/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml 4.0.0 diff --git a/hapi-fhir-storage-batch2/pom.xml b/hapi-fhir-storage-batch2/pom.xml index 4548753fd31..dd334e97348 100644 --- a/hapi-fhir-storage-batch2/pom.xml +++ b/hapi-fhir-storage-batch2/pom.xml @@ -6,7 +6,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/api/IJobPersistence.java b/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/api/IJobPersistence.java index a98bb53c960..1956d3b1199 100644 --- a/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/api/IJobPersistence.java +++ b/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/api/IJobPersistence.java @@ -228,6 +228,9 @@ public interface IJobPersistence { */ boolean markInstanceAsCompleted(String theInstanceId); + @Transactional(propagation = Propagation.REQUIRES_NEW) + boolean markInstanceAsStatus(String theInstance, StatusEnum theStatusEnum); + /** * Marks an instance as cancelled * diff --git a/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/coordinator/ReductionStepExecutor.java b/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/coordinator/ReductionStepExecutor.java index 05f24de1449..94ce7eb89c6 100644 --- a/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/coordinator/ReductionStepExecutor.java +++ b/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/coordinator/ReductionStepExecutor.java @@ -55,6 +55,14 @@ public class ReductionStepExecutor { ) { IReductionStepWorker reductionStepWorker = (IReductionStepWorker) theStep.getJobStepWorker(); + // we mark it first so that no other maintenance passes will pick this job up! + // if we shut down mid process, though, it will be stuck in FINALIZE forever :( + if (!myJobPersistence.markInstanceAsStatus(theInstance.getInstanceId(), StatusEnum.FINALIZE)) { + ourLog.warn("JobInstance[{}] is already in FINALIZE state, no reducer action performed.", theInstance.getInstanceId()); + return false; + } + theInstance.setStatus(StatusEnum.FINALIZE); + // We fetch all chunks first... Iterator chunkIterator = myJobPersistence.fetchAllWorkChunksForStepIterator(theInstance.getInstanceId(), theStep.getStepId()); @@ -63,75 +71,80 @@ public class ReductionStepExecutor { boolean retval = true; - while (chunkIterator.hasNext()) { - WorkChunk chunk = chunkIterator.next(); - if (!chunk.getStatus().isIncomplete()) { - // This should never happen since jobs with reduction are required to be gated - ourLog.error("Unexpected chunk {} with status {} found while reducing {}. No chunks feeding into a reduction step should be complete.", chunk.getId(), chunk.getStatus(), theInstance); - continue; + try { + while (chunkIterator.hasNext()) { + WorkChunk chunk = chunkIterator.next(); + if (!chunk.getStatus().isIncomplete()) { + // This should never happen since jobs with reduction are required to be gated + ourLog.error("Unexpected chunk {} with status {} found while reducing {}. No chunks feeding into a reduction step should be complete.", chunk.getId(), chunk.getStatus(), theInstance); + continue; + } + + if (!failedChunks.isEmpty()) { + // we are going to fail all future chunks now + failedChunks.add(chunk.getId()); + } else { + try { + // feed them into our reduction worker + // this is the most likely area to throw, + // as this is where db actions and processing is likely to happen + ChunkExecutionDetails chunkDetails = new ChunkExecutionDetails<>(chunk.getData(theInputType), theParameters, theInstance.getInstanceId(), chunk.getId()); + + ChunkOutcome outcome = reductionStepWorker.consume(chunkDetails); + + switch (outcome.getStatuss()) { + case SUCCESS: + successfulChunkIds.add(chunk.getId()); + break; + + case ABORT: + ourLog.error("Processing of work chunk {} resulted in aborting job.", chunk.getId()); + + // fail entire job - including all future workchunks + failedChunks.add(chunk.getId()); + retval = false; + break; + + case FAIL: + myJobPersistence.markWorkChunkAsFailed(chunk.getId(), + "Step worker failed to process work chunk " + chunk.getId()); + retval = false; + break; + } + } catch (Exception e) { + String msg = String.format( + "Reduction step failed to execute chunk reduction for chunk %s with exception: %s.", + chunk.getId(), + e.getMessage() + ); + // we got a failure in a reduction + ourLog.error(msg, e); + retval = false; + + myJobPersistence.markWorkChunkAsFailed(chunk.getId(), msg); + } + } + } + + } finally { + + if (!successfulChunkIds.isEmpty()) { + // complete the steps without making a new work chunk + myJobPersistence.markWorkChunksWithStatusAndWipeData(theInstance.getInstanceId(), + successfulChunkIds, + StatusEnum.COMPLETED, + null // error message - none + ); } if (!failedChunks.isEmpty()) { - // we are going to fail all future chunks now - failedChunks.add(chunk.getId()); - } else { - try { - // feed them into our reduction worker - // this is the most likely area to throw, - // as this is where db actions and processing is likely to happen - ChunkExecutionDetails chunkDetails = new ChunkExecutionDetails<>(chunk.getData(theInputType), theParameters, theInstance.getInstanceId(), chunk.getId()); - - ChunkOutcome outcome = reductionStepWorker.consume(chunkDetails); - - switch (outcome.getStatuss()) { - case SUCCESS: - successfulChunkIds.add(chunk.getId()); - break; - - case ABORT: - ourLog.error("Processing of work chunk {} resulted in aborting job.", chunk.getId()); - - // fail entire job - including all future workchunks - failedChunks.add(chunk.getId()); - retval = false; - break; - - case FAIL: - myJobPersistence.markWorkChunkAsFailed(chunk.getId(), - "Step worker failed to process work chunk " + chunk.getId()); - retval = false; - break; - } - } catch (Exception e) { - String msg = String.format( - "Reduction step failed to execute chunk reduction for chunk %s with exception: %s.", - chunk.getId(), - e.getMessage() - ); - // we got a failure in a reduction - ourLog.error(msg, e); - retval = false; - - myJobPersistence.markWorkChunkAsFailed(chunk.getId(), msg); - } + // mark any failed chunks as failed for aborting + myJobPersistence.markWorkChunksWithStatusAndWipeData(theInstance.getInstanceId(), + failedChunks, + StatusEnum.FAILED, + "JOB ABORTED"); } - } - if (!successfulChunkIds.isEmpty()) { - // complete the steps without making a new work chunk - myJobPersistence.markWorkChunksWithStatusAndWipeData(theInstance.getInstanceId(), - successfulChunkIds, - StatusEnum.COMPLETED, - null // error message - none - ); - } - - if (!failedChunks.isEmpty()) { - // mark any failed chunks as failed for aborting - myJobPersistence.markWorkChunksWithStatusAndWipeData(theInstance.getInstanceId(), - failedChunks, - StatusEnum.FAILED, - "JOB ABORTED"); } // if no successful chunks, return false diff --git a/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/coordinator/SynchronizedJobPersistenceWrapper.java b/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/coordinator/SynchronizedJobPersistenceWrapper.java index bbb2c7be99d..ef5ac4e10f4 100644 --- a/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/coordinator/SynchronizedJobPersistenceWrapper.java +++ b/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/coordinator/SynchronizedJobPersistenceWrapper.java @@ -166,6 +166,11 @@ public class SynchronizedJobPersistenceWrapper implements IJobPersistence { return myWrap.markInstanceAsCompleted(theInstanceId); } + @Override + public boolean markInstanceAsStatus(String theInstance, StatusEnum theStatusEnum) { + return myWrap.markInstanceAsStatus(theInstance, theStatusEnum); + } + @Override public JobOperationResultJson cancelInstance(String theInstanceId) { return myWrap.cancelInstance(theInstanceId); diff --git a/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/maintenance/JobInstanceProcessor.java b/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/maintenance/JobInstanceProcessor.java index e6a2cd3e186..c253927b0d0 100644 --- a/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/maintenance/JobInstanceProcessor.java +++ b/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/maintenance/JobInstanceProcessor.java @@ -92,6 +92,7 @@ public class JobInstanceProcessor { break; case IN_PROGRESS: case ERRORED: + case FINALIZE: myJobInstanceProgressCalculator.calculateAndStoreInstanceProgress(); break; case COMPLETED: @@ -138,6 +139,11 @@ public class JobInstanceProcessor { return; } + if (jobWorkCursor.isReductionStep() && myInstance.getStatus() == StatusEnum.FINALIZE) { + ourLog.warn("Job instance {} is still finalizing - a second reduction job will not be started.", myInstance.getInstanceId()); + return; + } + String instanceId = myInstance.getInstanceId(); String currentStepId = jobWorkCursor.getCurrentStepId(); boolean shouldAdvance = myJobPersistence.canAdvanceInstanceToNextStep(instanceId, currentStepId); diff --git a/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/model/JobInstance.java b/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/model/JobInstance.java index 519faf74221..903d80052ef 100644 --- a/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/model/JobInstance.java +++ b/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/model/JobInstance.java @@ -73,6 +73,11 @@ public class JobInstance extends JobInstanceStartRequest implements IModelJson, @JsonDeserialize(using = JsonDateDeserializer.class) private Date myEndTime; + @JsonProperty(value = "updateTime") + @JsonSerialize(using = JsonDateSerializer.class) + @JsonDeserialize(using = JsonDateDeserializer.class) + private Date myUpdateTime; + @JsonProperty(value = "combinedRecordsProcessed") private Integer myCombinedRecordsProcessed; @@ -120,6 +125,7 @@ public class JobInstance extends JobInstanceStartRequest implements IModelJson, setCombinedRecordsProcessedPerSecond(theJobInstance.getCombinedRecordsProcessedPerSecond()); setCreateTime(theJobInstance.getCreateTime()); setEndTime(theJobInstance.getEndTime()); + setUpdateTime(theJobInstance.getUpdateTime()); setErrorCount(theJobInstance.getErrorCount()); setErrorMessage(theJobInstance.getErrorMessage()); setEstimatedTimeRemaining(theJobInstance.getEstimatedTimeRemaining()); @@ -135,6 +141,14 @@ public class JobInstance extends JobInstanceStartRequest implements IModelJson, myJobDefinition = theJobInstance.getJobDefinition(); } + public void setUpdateTime(Date theUpdateTime) { + myUpdateTime = theUpdateTime; + } + + public Date getUpdateTime() { + return myUpdateTime; + } + public static JobInstance fromJobDefinition(JobDefinition theJobDefinition) { JobInstance instance = new JobInstance(); instance.setJobDefinition(theJobDefinition); @@ -331,6 +345,7 @@ public class JobInstance extends JobInstanceStartRequest implements IModelJson, .append("createTime", myCreateTime) .append("startTime", myStartTime) .append("endTime", myEndTime) + .append("updateTime", myUpdateTime) .append("combinedRecordsProcessed", myCombinedRecordsProcessed) .append("combinedRecordsProcessedPerSecond", myCombinedRecordsProcessedPerSecond) .append("totalElapsedMillis", myTotalElapsedMillis) diff --git a/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/model/StatusEnum.java b/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/model/StatusEnum.java index 27708c6da07..69b37341829 100644 --- a/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/model/StatusEnum.java +++ b/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/model/StatusEnum.java @@ -41,6 +41,11 @@ public enum StatusEnum { */ IN_PROGRESS(true, false), + /** + * For reduction steps + */ + FINALIZE(true, false), + /** * Task completed successfully */ @@ -160,6 +165,9 @@ public enum StatusEnum { // terminal state cannot transition canTransition = false; break; + case FINALIZE: + canTransition = theNewStatus != QUEUED && theNewStatus != IN_PROGRESS; + break; default: canTransition = null; break; diff --git a/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/model/WorkChunk.java b/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/model/WorkChunk.java index 602d87dd533..cded53a7241 100644 --- a/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/model/WorkChunk.java +++ b/hapi-fhir-storage-batch2/src/main/java/ca/uhn/fhir/batch2/model/WorkChunk.java @@ -72,6 +72,10 @@ public class WorkChunk implements IModelJson { @JsonDeserialize(using = JsonDateDeserializer.class) private Date myEndTime; + @JsonProperty("updateTime") + @JsonSerialize(using = JsonDateSerializer.class) + @JsonDeserialize(using = JsonDateDeserializer.class) + private Date myUpdateTime; @JsonProperty(value = "recordsProcessed", access = JsonProperty.Access.READ_ONLY) private Integer myRecordsProcessed; @@ -224,4 +228,12 @@ public class WorkChunk implements IModelJson { myErrorMessage = theErrorMessage; return this; } + + public void setUpdateTime(Date theUpdateTime) { + myUpdateTime = theUpdateTime; + } + + public Date getUpdateTime() { + return myUpdateTime; + } } diff --git a/hapi-fhir-storage-batch2/src/test/java/ca/uhn/fhir/batch2/coordinator/WorkChunkProcessorTest.java b/hapi-fhir-storage-batch2/src/test/java/ca/uhn/fhir/batch2/coordinator/WorkChunkProcessorTest.java index 9199d6a1ee3..2c6a59e4d64 100644 --- a/hapi-fhir-storage-batch2/src/test/java/ca/uhn/fhir/batch2/coordinator/WorkChunkProcessorTest.java +++ b/hapi-fhir-storage-batch2/src/test/java/ca/uhn/fhir/batch2/coordinator/WorkChunkProcessorTest.java @@ -199,6 +199,7 @@ public class WorkChunkProcessorTest { .thenReturn(true); when(myJobPersistence.fetchAllWorkChunksForStepIterator(eq(INSTANCE_ID), eq(REDUCTION_STEP_ID))) .thenReturn(chunks.iterator()); + when(myJobPersistence.markInstanceAsStatus(eq(INSTANCE_ID), eq(StatusEnum.FINALIZE))).thenReturn(true); when(myReductionStep.consume(any(ChunkExecutionDetails.class))) .thenReturn(ChunkOutcome.SUCCESS()); when(myReductionStep.run( @@ -260,6 +261,7 @@ public class WorkChunkProcessorTest { .thenReturn(true); when(myJobPersistence.fetchAllWorkChunksForStepIterator(eq(INSTANCE_ID), eq(REDUCTION_STEP_ID))) .thenReturn(chunks.iterator()); + when(myJobPersistence.markInstanceAsStatus(eq(INSTANCE_ID), eq(StatusEnum.FINALIZE))).thenReturn(true); doThrow(new RuntimeException(errorMsg)) .when(myReductionStep).consume(any(ChunkExecutionDetails.class)); @@ -308,6 +310,7 @@ public class WorkChunkProcessorTest { .thenReturn(true); when(myJobPersistence.fetchAllWorkChunksForStepIterator(eq(INSTANCE_ID), eq(REDUCTION_STEP_ID))) .thenReturn(chunks.iterator()); + when(myJobPersistence.markInstanceAsStatus(eq(INSTANCE_ID), eq(StatusEnum.FINALIZE))).thenReturn(true); when(myReductionStep.consume(any(ChunkExecutionDetails.class))) .thenReturn(ChunkOutcome.SUCCESS()) .thenReturn(new ChunkOutcome(ChunkOutcome.Status.FAIL)); @@ -351,6 +354,7 @@ public class WorkChunkProcessorTest { // when when(workCursor.isReductionStep()) .thenReturn(true); + when(myJobPersistence.markInstanceAsStatus(eq(INSTANCE_ID), eq(StatusEnum.FINALIZE))).thenReturn(true); when(myJobPersistence.fetchAllWorkChunksForStepIterator(eq(INSTANCE_ID), eq(REDUCTION_STEP_ID))) .thenReturn(chunks.iterator()); when(myReductionStep.consume(any(ChunkExecutionDetails.class))) diff --git a/hapi-fhir-storage-batch2/src/test/java/ca/uhn/fhir/batch2/model/StatusEnumTest.java b/hapi-fhir-storage-batch2/src/test/java/ca/uhn/fhir/batch2/model/StatusEnumTest.java index 2faabc05431..c89f7ed1c2c 100644 --- a/hapi-fhir-storage-batch2/src/test/java/ca/uhn/fhir/batch2/model/StatusEnumTest.java +++ b/hapi-fhir-storage-batch2/src/test/java/ca/uhn/fhir/batch2/model/StatusEnumTest.java @@ -15,7 +15,7 @@ class StatusEnumTest { } @Test public void testNotEndedStatuses() { - assertThat(StatusEnum.getNotEndedStatuses(), containsInAnyOrder(StatusEnum.QUEUED, StatusEnum.IN_PROGRESS)); + assertThat(StatusEnum.getNotEndedStatuses(), containsInAnyOrder(StatusEnum.QUEUED, StatusEnum.IN_PROGRESS, StatusEnum.FINALIZE)); } @ParameterizedTest @@ -61,6 +61,11 @@ class StatusEnumTest { "FAILED, CANCELLED, false", "FAILED, ERRORED, false", "FAILED, FAILED, true", + "FINALIZE, COMPLETED, true", + "FINALIZE, IN_PROGRESS, false", + "FINALIZE, QUEUED, false", + "FINALIZE, FAILED, true", + "FINALIZE, ERRORED, true", }) public void testStateTransition(StatusEnum origStatus, StatusEnum newStatus, boolean expected) { assertEquals(expected, StatusEnum.isLegalStateTransition(origStatus, newStatus)); @@ -68,6 +73,6 @@ class StatusEnumTest { @Test public void testEnumSize() { - assertEquals(6, StatusEnum.values().length, "Update testStateTransition() with new cases"); + assertEquals(7, StatusEnum.values().length, "Update testStateTransition() with new cases"); } } diff --git a/hapi-fhir-storage-cr/pom.xml b/hapi-fhir-storage-cr/pom.xml index a68941b6eae..d526868807a 100644 --- a/hapi-fhir-storage-cr/pom.xml +++ b/hapi-fhir-storage-cr/pom.xml @@ -7,7 +7,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-storage-mdm/pom.xml b/hapi-fhir-storage-mdm/pom.xml index 2f5ab051b8c..a6398f0e0bf 100644 --- a/hapi-fhir-storage-mdm/pom.xml +++ b/hapi-fhir-storage-mdm/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml 4.0.0 diff --git a/hapi-fhir-storage-test-utilities/pom.xml b/hapi-fhir-storage-test-utilities/pom.xml index d0d0f6064e0..0418ffd4544 100644 --- a/hapi-fhir-storage-test-utilities/pom.xml +++ b/hapi-fhir-storage-test-utilities/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml 4.0.0 diff --git a/hapi-fhir-storage/pom.xml b/hapi-fhir-storage/pom.xml index 9fe6c7ba224..eb487e974c3 100644 --- a/hapi-fhir-storage/pom.xml +++ b/hapi-fhir-storage/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-structures-dstu2.1/pom.xml b/hapi-fhir-structures-dstu2.1/pom.xml index f499cd35522..104266a8abe 100644 --- a/hapi-fhir-structures-dstu2.1/pom.xml +++ b/hapi-fhir-structures-dstu2.1/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-structures-dstu2/pom.xml b/hapi-fhir-structures-dstu2/pom.xml index 93c10d1600e..c80e11b4ab5 100644 --- a/hapi-fhir-structures-dstu2/pom.xml +++ b/hapi-fhir-structures-dstu2/pom.xml @@ -4,7 +4,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-structures-dstu3/pom.xml b/hapi-fhir-structures-dstu3/pom.xml index 1fddc0d00ef..1a28e61dcfd 100644 --- a/hapi-fhir-structures-dstu3/pom.xml +++ b/hapi-fhir-structures-dstu3/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-structures-hl7org-dstu2/pom.xml b/hapi-fhir-structures-hl7org-dstu2/pom.xml index fde9cdccbcc..c486671fc7c 100644 --- a/hapi-fhir-structures-hl7org-dstu2/pom.xml +++ b/hapi-fhir-structures-hl7org-dstu2/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-structures-r4/pom.xml b/hapi-fhir-structures-r4/pom.xml index b4772cf0fe5..01f7b6163e8 100644 --- a/hapi-fhir-structures-r4/pom.xml +++ b/hapi-fhir-structures-r4/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-structures-r4b/pom.xml b/hapi-fhir-structures-r4b/pom.xml index a1581f1624a..477572bda4a 100644 --- a/hapi-fhir-structures-r4b/pom.xml +++ b/hapi-fhir-structures-r4b/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-structures-r5/pom.xml b/hapi-fhir-structures-r5/pom.xml index 8a9aab02bdb..b88b92ffb83 100644 --- a/hapi-fhir-structures-r5/pom.xml +++ b/hapi-fhir-structures-r5/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-test-utilities/pom.xml b/hapi-fhir-test-utilities/pom.xml index bcc95a17687..de8a86a686e 100644 --- a/hapi-fhir-test-utilities/pom.xml +++ b/hapi-fhir-test-utilities/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-testpage-overlay/pom.xml b/hapi-fhir-testpage-overlay/pom.xml index 2f799e30114..42f45d0f2b4 100644 --- a/hapi-fhir-testpage-overlay/pom.xml +++ b/hapi-fhir-testpage-overlay/pom.xml @@ -4,7 +4,7 @@ ca.uhn.hapi.fhir hapi-fhir - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../pom.xml diff --git a/hapi-fhir-validation-resources-dstu2.1/pom.xml b/hapi-fhir-validation-resources-dstu2.1/pom.xml index 4002e0aa0c2..149494e2c09 100644 --- a/hapi-fhir-validation-resources-dstu2.1/pom.xml +++ b/hapi-fhir-validation-resources-dstu2.1/pom.xml @@ -4,7 +4,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-validation-resources-dstu2/pom.xml b/hapi-fhir-validation-resources-dstu2/pom.xml index 6638efd4da4..9317ff0611d 100644 --- a/hapi-fhir-validation-resources-dstu2/pom.xml +++ b/hapi-fhir-validation-resources-dstu2/pom.xml @@ -4,7 +4,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-validation-resources-dstu3/pom.xml b/hapi-fhir-validation-resources-dstu3/pom.xml index bd5c035c785..3ae7b8be7c5 100644 --- a/hapi-fhir-validation-resources-dstu3/pom.xml +++ b/hapi-fhir-validation-resources-dstu3/pom.xml @@ -4,7 +4,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-validation-resources-r4/pom.xml b/hapi-fhir-validation-resources-r4/pom.xml index c944be1eeab..e372901ae19 100644 --- a/hapi-fhir-validation-resources-r4/pom.xml +++ b/hapi-fhir-validation-resources-r4/pom.xml @@ -4,7 +4,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-validation-resources-r5/pom.xml b/hapi-fhir-validation-resources-r5/pom.xml index d754c6cbb1a..5fa0d7acaf3 100644 --- a/hapi-fhir-validation-resources-r5/pom.xml +++ b/hapi-fhir-validation-resources-r5/pom.xml @@ -4,7 +4,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-validation/pom.xml b/hapi-fhir-validation/pom.xml index 719e6b0bf6d..0012fe578e5 100644 --- a/hapi-fhir-validation/pom.xml +++ b/hapi-fhir-validation/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-tinder-plugin/pom.xml b/hapi-tinder-plugin/pom.xml index 034d54b7be1..259e7c43bbd 100644 --- a/hapi-tinder-plugin/pom.xml +++ b/hapi-tinder-plugin/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-fhir - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../pom.xml diff --git a/hapi-tinder-test/pom.xml b/hapi-tinder-test/pom.xml index ace9225d9fc..bd99b33ed39 100644 --- a/hapi-tinder-test/pom.xml +++ b/hapi-tinder-test/pom.xml @@ -4,7 +4,7 @@ ca.uhn.hapi.fhir hapi-fhir - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../pom.xml diff --git a/pom.xml b/pom.xml index 584cfb3f017..05346abf08e 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ ca.uhn.hapi.fhir hapi-fhir pom - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT HAPI-FHIR An open-source implementation of the FHIR specification in Java. https://hapifhir.io @@ -2132,7 +2132,7 @@ ca.uhn.hapi.fhir hapi-fhir-checkstyle - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT diff --git a/tests/hapi-fhir-base-test-jaxrsserver-kotlin/pom.xml b/tests/hapi-fhir-base-test-jaxrsserver-kotlin/pom.xml index bfd09431ee1..9c449d93b38 100644 --- a/tests/hapi-fhir-base-test-jaxrsserver-kotlin/pom.xml +++ b/tests/hapi-fhir-base-test-jaxrsserver-kotlin/pom.xml @@ -6,7 +6,7 @@ ca.uhn.hapi.fhir hapi-fhir - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../../pom.xml diff --git a/tests/hapi-fhir-base-test-mindeps-client/pom.xml b/tests/hapi-fhir-base-test-mindeps-client/pom.xml index 037ed097a34..0dd0d834c18 100644 --- a/tests/hapi-fhir-base-test-mindeps-client/pom.xml +++ b/tests/hapi-fhir-base-test-mindeps-client/pom.xml @@ -4,7 +4,7 @@ ca.uhn.hapi.fhir hapi-fhir - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../../pom.xml diff --git a/tests/hapi-fhir-base-test-mindeps-server/pom.xml b/tests/hapi-fhir-base-test-mindeps-server/pom.xml index 275585c438c..74ea4e9adb0 100644 --- a/tests/hapi-fhir-base-test-mindeps-server/pom.xml +++ b/tests/hapi-fhir-base-test-mindeps-server/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir hapi-fhir - 6.3.13-SNAPSHOT + 6.3.14-SNAPSHOT ../../pom.xml