Merge pull request #1960 from jamesagnew/im_20200630_code_system_load
Accidentally merged pull request before pushing changes from code review
This commit is contained in:
commit
e23e222f80
|
@ -146,7 +146,12 @@ public class TermDeferredStorageSvcImpl implements ITermDeferredStorageSvc {
|
||||||
while (codeCount < count && myDeferredConcepts.size() > 0) {
|
while (codeCount < count && myDeferredConcepts.size() > 0) {
|
||||||
TermConcept next = myDeferredConcepts.remove(0);
|
TermConcept next = myDeferredConcepts.remove(0);
|
||||||
if(myCodeSystemVersionDao.findById(next.getCodeSystemVersion().getPid()).isPresent()) {
|
if(myCodeSystemVersionDao.findById(next.getCodeSystemVersion().getPid()).isPresent()) {
|
||||||
codeCount += myCodeSystemStorageSvc.saveConcept(next);
|
try {
|
||||||
|
codeCount += myCodeSystemStorageSvc.saveConcept(next);
|
||||||
|
} catch (Exception theE) {
|
||||||
|
ourLog.error("Exception thrown when attempting to save TermConcept {} in Code System {}",
|
||||||
|
next.getCode(), next.getCodeSystemVersion().getCodeSystemDisplayName(), theE);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ourLog.warn("Unable to save deferred TermConcept {} because Code System {} version PID {} is no longer valid. Code system may have since been replaced.",
|
ourLog.warn("Unable to save deferred TermConcept {} because Code System {} version PID {} is no longer valid. Code system may have since been replaced.",
|
||||||
next.getCode(), next.getCodeSystemVersion().getCodeSystemDisplayName(), next.getCodeSystemVersion().getPid());
|
next.getCode(), next.getCodeSystemVersion().getCodeSystemDisplayName(), next.getCodeSystemVersion().getPid());
|
||||||
|
|
|
@ -12,6 +12,28 @@ public class TermCodeSystemStorageSvcTest extends BaseJpaR4Test {
|
||||||
|
|
||||||
public static final String URL_MY_CODE_SYSTEM = "http://example.com/my_code_system";
|
public static final String URL_MY_CODE_SYSTEM = "http://example.com/my_code_system";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testStoreNewCodeSystemVersionForExistingCodeSystem() {
|
||||||
|
CodeSystem upload = createCodeSystemWithMoreThan100Concepts();
|
||||||
|
|
||||||
|
// Create CodeSystem resource
|
||||||
|
ResourceTable codeSystemResourceEntity = (ResourceTable)myCodeSystemDao.create(upload, mySrd).getEntity();
|
||||||
|
|
||||||
|
// Update the CodeSystem resource
|
||||||
|
runInTransaction(() -> myTermCodeSystemStorageSvc.storeNewCodeSystemVersionIfNeeded(upload, codeSystemResourceEntity));
|
||||||
|
|
||||||
|
/*
|
||||||
|
Because there are more than 100 concepts in the code system, the first 100 will be persisted immediately and
|
||||||
|
the remaining 25 concepts will be queued up for "deferred save".
|
||||||
|
|
||||||
|
As the CodeSystem was persisted twice, the extra 25 term concepts will be queued twice, each with a different
|
||||||
|
CodeSystem version PID. Only one set of the term concepts should be persisted (i.e. 125 term concepts in total).
|
||||||
|
*/
|
||||||
|
myTerminologyDeferredStorageSvc.setProcessDeferred(true);
|
||||||
|
myTerminologyDeferredStorageSvc.saveDeferred();
|
||||||
|
assertEquals(125, myTermConceptDao.count());
|
||||||
|
}
|
||||||
|
|
||||||
private CodeSystem createCodeSystemWithMoreThan100Concepts() {
|
private CodeSystem createCodeSystemWithMoreThan100Concepts() {
|
||||||
CodeSystem codeSystem = new CodeSystem();
|
CodeSystem codeSystem = new CodeSystem();
|
||||||
codeSystem.setUrl(URL_MY_CODE_SYSTEM);
|
codeSystem.setUrl(URL_MY_CODE_SYSTEM);
|
||||||
|
@ -25,20 +47,5 @@ public class TermCodeSystemStorageSvcTest extends BaseJpaR4Test {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testStoreNewCodeSystemVersionForExistingCodeSystem() {
|
|
||||||
CodeSystem upload = createCodeSystemWithMoreThan100Concepts();
|
|
||||||
|
|
||||||
ResourceTable codeSystemResourceEntity = (ResourceTable)myCodeSystemDao.create(upload, mySrd).getEntity();
|
|
||||||
|
|
||||||
runInTransaction(() -> myTermCodeSystemStorageSvc.storeNewCodeSystemVersionIfNeeded(upload, codeSystemResourceEntity));
|
|
||||||
|
|
||||||
myTerminologyDeferredStorageSvc.setProcessDeferred(true);
|
|
||||||
myTerminologyDeferredStorageSvc.saveDeferred();
|
|
||||||
myTerminologyDeferredStorageSvc.saveDeferred();
|
|
||||||
|
|
||||||
assertEquals(125, myTermConceptDao.count());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,6 @@ import static org.mockito.Mockito.*;
|
||||||
@RunWith(MockitoJUnitRunner.class)
|
@RunWith(MockitoJUnitRunner.class)
|
||||||
public class TermDeferredStorageSvcImplTest {
|
public class TermDeferredStorageSvcImplTest {
|
||||||
|
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private PlatformTransactionManager myTxManager;
|
private PlatformTransactionManager myTxManager;
|
||||||
@Mock
|
@Mock
|
||||||
|
@ -69,6 +68,7 @@ public class TermDeferredStorageSvcImplTest {
|
||||||
concept.setCode("CODE_A");
|
concept.setCode("CODE_A");
|
||||||
|
|
||||||
TermCodeSystemVersion myTermCodeSystemVersion = new TermCodeSystemVersion();
|
TermCodeSystemVersion myTermCodeSystemVersion = new TermCodeSystemVersion();
|
||||||
|
myTermCodeSystemVersion.setId(1L);
|
||||||
concept.setCodeSystemVersion(myTermCodeSystemVersion);
|
concept.setCodeSystemVersion(myTermCodeSystemVersion);
|
||||||
|
|
||||||
TermDeferredStorageSvcImpl svc = new TermDeferredStorageSvcImpl();
|
TermDeferredStorageSvcImpl svc = new TermDeferredStorageSvcImpl();
|
||||||
|
@ -76,15 +76,45 @@ public class TermDeferredStorageSvcImplTest {
|
||||||
svc.setCodeSystemStorageSvcForUnitTest(myTermConceptStorageSvc);
|
svc.setCodeSystemStorageSvcForUnitTest(myTermConceptStorageSvc);
|
||||||
svc.setDaoConfigForUnitTest(new DaoConfig());
|
svc.setDaoConfigForUnitTest(new DaoConfig());
|
||||||
|
|
||||||
|
when(myTermCodeSystemVersionDao.findById(anyLong())).thenReturn(Optional.empty());
|
||||||
svc.setCodeSystemVersionDaoForUnitTest(myTermCodeSystemVersionDao);
|
svc.setCodeSystemVersionDaoForUnitTest(myTermCodeSystemVersionDao);
|
||||||
svc.setProcessDeferred(true);
|
svc.setProcessDeferred(true);
|
||||||
svc.addConceptToStorageQueue(concept);
|
svc.addConceptToStorageQueue(concept);
|
||||||
svc.saveDeferred();
|
svc.saveDeferred();
|
||||||
|
|
||||||
verify(myTermConceptStorageSvc, times(0)).saveConcept(same(concept));
|
verify(myTermConceptStorageSvc, times(0)).saveConcept(same(concept));
|
||||||
verifyNoMoreInteractions(myTermConceptStorageSvc);
|
verifyNoMoreInteractions(myTermConceptStorageSvc);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSaveDeferred_Concept_Exception() {
|
||||||
|
// There is a small
|
||||||
|
TermConcept concept = new TermConcept();
|
||||||
|
concept.setCode("CODE_A");
|
||||||
|
|
||||||
|
TermCodeSystemVersion myTermCodeSystemVersion = new TermCodeSystemVersion();
|
||||||
|
myTermCodeSystemVersion.setId(1L);
|
||||||
|
concept.setCodeSystemVersion(myTermCodeSystemVersion);
|
||||||
|
|
||||||
|
TermDeferredStorageSvcImpl svc = new TermDeferredStorageSvcImpl();
|
||||||
|
svc.setTransactionManagerForUnitTest(myTxManager);
|
||||||
|
svc.setCodeSystemStorageSvcForUnitTest(myTermConceptStorageSvc);
|
||||||
|
svc.setDaoConfigForUnitTest(new DaoConfig());
|
||||||
|
|
||||||
|
// Simulate the case where an exception is thrown despite a valid code system version.
|
||||||
|
when(myTermCodeSystemVersionDao.findById(anyLong())).thenReturn(Optional.of(myTermCodeSystemVersion));
|
||||||
|
when(myTermConceptStorageSvc.saveConcept(concept)).thenThrow(new RuntimeException("Foreign Constraint Violation"));
|
||||||
|
svc.setCodeSystemVersionDaoForUnitTest(myTermCodeSystemVersionDao);
|
||||||
|
svc.setProcessDeferred(true);
|
||||||
|
svc.addConceptToStorageQueue(concept);
|
||||||
|
svc.saveDeferred();
|
||||||
|
|
||||||
|
verify(myTermConceptStorageSvc, times(1)).saveConcept(same(concept));
|
||||||
|
verifyNoMoreInteractions(myTermConceptStorageSvc);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSaveDeferred_ConceptParentChildLink_ConceptsMissing() {
|
public void testSaveDeferred_ConceptParentChildLink_ConceptsMissing() {
|
||||||
TermConceptParentChildLink conceptLink = new TermConceptParentChildLink();
|
TermConceptParentChildLink conceptLink = new TermConceptParentChildLink();
|
||||||
|
|
Loading…
Reference in New Issue