From d43576e7d1072eb8a81cc0ed6271ba20b55ac754 Mon Sep 17 00:00:00 2001 From: Marty Pradere Date: Thu, 9 May 2024 09:00:09 -0700 Subject: [PATCH] Move demographic recache to post commit task (#781) * Make demographic recache a post commit task * Remove delay from job as recache is now running after the transaction commits * Add some test helpers --- .../EHRDemographicsServiceImpl.java | 2 +- .../labkey/ehr/utils/TriggerScriptHelper.java | 13 +++++++++++- .../test/tests/ehr/AbstractEHRTest.java | 8 +++++++ .../labkey/test/util/ehr/EHRTestHelper.java | 21 +++++++++++++++++++ 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/ehr/src/org/labkey/ehr/demographics/EHRDemographicsServiceImpl.java b/ehr/src/org/labkey/ehr/demographics/EHRDemographicsServiceImpl.java index bea010b6d..8ca28e939 100644 --- a/ehr/src/org/labkey/ehr/demographics/EHRDemographicsServiceImpl.java +++ b/ehr/src/org/labkey/ehr/demographics/EHRDemographicsServiceImpl.java @@ -472,7 +472,7 @@ private void asyncCache(final Container c, final List ids) { _log.error("EHRDemographicsServiceImpl encountered a deadlock", e); } - }, 5000); + }); } /** diff --git a/ehr/src/org/labkey/ehr/utils/TriggerScriptHelper.java b/ehr/src/org/labkey/ehr/utils/TriggerScriptHelper.java index 66f645c07..5ac4382a1 100644 --- a/ehr/src/org/labkey/ehr/utils/TriggerScriptHelper.java +++ b/ehr/src/org/labkey/ehr/utils/TriggerScriptHelper.java @@ -31,6 +31,7 @@ import org.labkey.api.data.ContainerManager; import org.labkey.api.data.ConvertHelper; import org.labkey.api.data.DbSchema; +import org.labkey.api.data.DbScope; import org.labkey.api.data.Results; import org.labkey.api.data.ResultsImpl; import org.labkey.api.data.RuntimeSQLException; @@ -871,7 +872,17 @@ public void createDemographicsRecord(String id, Map props, // inserted a row into study.participant, which means that calculated lookup values like the animal's current // age won't resolve until AFTER the call to insertRows() has completed. Thus, refresh the cache for this new // animal an extra time. See ticket 44283. - EHRDemographicsServiceImpl.get().recacheRecords(getContainer(), Collections.singletonList(id)); + try (DbScope.Transaction transaction = StudyService.get().getDatasetSchema().getScope().ensureTransaction()) + { + // Add post commit task to run provider update in another thread once this transaction is complete. + transaction.addCommitTask(() -> + { + // Update provider in another thread + EHRDemographicsServiceImpl.get().recacheRecords(getContainer(), Collections.singletonList(id)); + }, DbScope.CommitTaskOption.POSTCOMMIT); + + transaction.commit(); + } } public void updateDemographicsRecord(List> updatedRows) throws QueryUpdateServiceException, SQLException, BatchValidationException, InvalidKeyException diff --git a/ehr/test/src/org/labkey/test/tests/ehr/AbstractEHRTest.java b/ehr/test/src/org/labkey/test/tests/ehr/AbstractEHRTest.java index bccfb3891..9ea6acb8f 100644 --- a/ehr/test/src/org/labkey/test/tests/ehr/AbstractEHRTest.java +++ b/ehr/test/src/org/labkey/test/tests/ehr/AbstractEHRTest.java @@ -298,6 +298,8 @@ protected void createTestSubjects() throws Exception insertCommand = getApiHelper().prepareInsertCommand("study", "Assignment", "lsid", fields, data); getApiHelper().deleteAllRecords("study", "Assignment", new Filter("Id", StringUtils.join(SUBJECTS, ";"), Filter.Operator.IN)); getApiHelper().doSaveRows(DATA_ADMIN.getEmail(), insertCommand, getExtraContext()); + + primeCaches(); } @Override @@ -756,6 +758,12 @@ private void setEhrUserPasswords() setInitialPassword(REQUEST_ADMIN.getEmail()); } + protected void validateDemographicsCache() + { + beginAt(WebTestHelper.buildURL("ehr", getContainerPath(), "cacheLivingAnimals", Map.of("validateOnly", "true"))); + waitAndClick(WAIT_FOR_JAVASCRIPT, Locator.lkButton("OK"), WAIT_FOR_PAGE * 4); + } + protected static final ArrayList allowedActions = new ArrayList<>() { { diff --git a/ehr/test/src/org/labkey/test/util/ehr/EHRTestHelper.java b/ehr/test/src/org/labkey/test/util/ehr/EHRTestHelper.java index dee1b5615..6d8e036a8 100644 --- a/ehr/test/src/org/labkey/test/util/ehr/EHRTestHelper.java +++ b/ehr/test/src/org/labkey/test/util/ehr/EHRTestHelper.java @@ -20,6 +20,7 @@ import org.labkey.test.BaseWebDriverTest; import org.labkey.test.Locator; import org.labkey.test.Locators; +import org.labkey.test.components.ext4.Window; import org.labkey.test.pages.ehr.ParticipantViewPage; import org.labkey.test.tests.ehr.AbstractEHRTest; import org.labkey.test.util.Ext4Helper; @@ -246,6 +247,26 @@ public void discardForm() _test.waitForElement(Locator.tagWithText("a", "Enter New Data")); } + public void submitFinalTaskForm() + { + Locator submitFinalBtn = Locator.linkWithText("Submit Final"); + _test.shortWait().until(ExpectedConditions.elementToBeClickable(submitFinalBtn)); + Window msgWindow; + try + { + submitFinalBtn.findElement(_test.getDriver()).click(); + msgWindow = new Window.WindowFinder(_test.getDriver()).withTitleContaining("Finalize").waitFor(); + } + catch (NoSuchElementException e) + { + //retry + _test.sleep(500); + submitFinalBtn.findElement(_test.getDriver()).click(); + msgWindow = new Window.WindowFinder(_test.getDriver()).withTitleContaining("Finalize").waitFor(); + } + msgWindow.clickButton("Yes"); + } + public void verifyAllReportTabs(ParticipantViewPage participantView) { verifyReportTabs(participantView, Collections.emptyMap());