From 53c5a9bbebf6b633301a9e88db09dcb513d4080a Mon Sep 17 00:00:00 2001 From: jmarchionatto <60409882+jmarchionatto@users.noreply.github.com> Date: Wed, 23 Feb 2022 13:54:30 -0500 Subject: [PATCH] Add FK index to avoid timeout when deleting large ValueSet (#3416) * Add FK index to avoid timeout when deleting large ValueSet * Add exception to allow same name for index and FK Co-authored-by: juan.marchionatto --- .../6_0_0/3316-deleting-large-valueset-timeout.yml | 4 ++++ .../src/main/java/ca/uhn/fhir/jpa/util/TestUtil.java | 3 ++- .../fhir/jpa/entity/TermValueSetConceptDesignation.java | 5 ++++- .../jpa/migrate/tasks/HapiFhirJpaMigrationTasks.java | 9 +++++++++ 4 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_0_0/3316-deleting-large-valueset-timeout.yml diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_0_0/3316-deleting-large-valueset-timeout.yml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_0_0/3316-deleting-large-valueset-timeout.yml new file mode 100644 index 00000000000..5d0dd48a3a6 --- /dev/null +++ b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_0_0/3316-deleting-large-valueset-timeout.yml @@ -0,0 +1,4 @@ +--- +type: fix +issue: 3316 +title: "When deleting a large ValueSet operation was timing out. This issue has been fixed." diff --git a/hapi-fhir-jpa/src/main/java/ca/uhn/fhir/jpa/util/TestUtil.java b/hapi-fhir-jpa/src/main/java/ca/uhn/fhir/jpa/util/TestUtil.java index d2c22edd35c..985f92814c9 100644 --- a/hapi-fhir-jpa/src/main/java/ca/uhn/fhir/jpa/util/TestUtil.java +++ b/hapi-fhir-jpa/src/main/java/ca/uhn/fhir/jpa/util/TestUtil.java @@ -84,7 +84,8 @@ public class TestUtil { "FK_CONCEPTPROP_CONCEPT", "FK_CONCEPTDESIG_CONCEPT", "FK_TERM_CONCEPTPC_CHILD", - "FK_TERM_CONCEPTPC_PARENT" + "FK_TERM_CONCEPTPC_PARENT", + "FK_TRM_VALUESET_CONCEPT_PID" ); diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermValueSetConceptDesignation.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermValueSetConceptDesignation.java index 5c438202b09..cc57ee6b454 100644 --- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermValueSetConceptDesignation.java +++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermValueSetConceptDesignation.java @@ -33,7 +33,10 @@ import java.io.Serializable; import static org.apache.commons.lang3.StringUtils.left; import static org.apache.commons.lang3.StringUtils.length; -@Table(name = "TRM_VALUESET_C_DESIGNATION") +@Table(name = "TRM_VALUESET_C_DESIGNATION", indexes = { + // must have same name that indexed FK or SchemaMigrationTest complains because H2 sets this index automatically + @Index(name = "FK_TRM_VALUESET_CONCEPT_PID", columnList = "VALUESET_CONCEPT_PID", unique = false) +}) @Entity() public class TermValueSetConceptDesignation implements Serializable { private static final long serialVersionUID = 1L; 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 1827ec3124d..87e8e43c773 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 @@ -153,6 +153,15 @@ public class HapiFhirJpaMigrationTasks extends BaseMigrationTasks { // drop obsolete dateTable.dropIndexOnline("20220207.16", "IDX_SP_DATE_UPDATED"); + // fix for https://github.com/hapifhir/hapi-fhir/issues/3316 + // index must have same name that indexed FK or SchemaMigrationTest complains because H2 sets this index automatically + + version.onTable("TRM_VALUESET_C_DESIGNATION") + .addIndex("20220223.1", "FK_TRM_VALUESET_CONCEPT_PID") + .unique(false) + .withColumns("VALUESET_CONCEPT_PID") + .onlyAppliesToPlatforms(NON_AUTOMATIC_FK_INDEX_PLATFORMS); + } /**