Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
type: fix
issue: 7375
title: "PackageInstallerSvcImpl now consistently applies the default partition when running in STORE_AND_INSTALL mode. Terminology resources imported from NPM packages no longer fail in partitioned JPA servers with the error about writing a non-partitionable resource into a partition."
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
import ca.uhn.fhir.context.support.IValidationSupport;
import ca.uhn.fhir.context.support.ValidationSupportContext;
import ca.uhn.fhir.i18n.Msg;
import ca.uhn.fhir.interceptor.model.RequestPartitionId;
import ca.uhn.fhir.jpa.api.config.JpaStorageSettings;
import ca.uhn.fhir.jpa.api.dao.DaoRegistry;
import ca.uhn.fhir.jpa.api.dao.IFhirResourceDao;
Expand Down Expand Up @@ -188,7 +187,7 @@ public PackageInstallOutcomeJson install(PackageInstallationSpec theInstallation

boolean exists = myTxService
.withSystemRequest()
.withRequestPartitionId(RequestPartitionId.defaultPartition())
.withRequestPartitionId(myPartitionSettings.getDefaultRequestPartitionId())
.execute(() -> {
Optional<NpmPackageVersionEntity> existing = myPackageVersionDao.findByPackageIdAndVersion(
theInstallationSpec.getName(), theInstallationSpec.getVersion());
Expand Down Expand Up @@ -550,10 +549,11 @@ private DaoMethodOutcome updateResource(IFhirResourceDao theDao, IBaseResource t
return outcome;
}

private RequestDetails createRequestDetails() {
@VisibleForTesting
RequestDetails createRequestDetails() {
SystemRequestDetails requestDetails = new SystemRequestDetails();
if (myPartitionSettings.isPartitioningEnabled()) {
requestDetails.setRequestPartitionId(RequestPartitionId.defaultPartition());
requestDetails.setRequestPartitionId(myPartitionSettings.getDefaultRequestPartitionId());
}
return requestDetails;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.FhirVersionEnum;
import ca.uhn.fhir.context.support.IValidationSupport;
import ca.uhn.fhir.interceptor.model.RequestPartitionId;
import ca.uhn.fhir.jpa.api.config.JpaStorageSettings;
import ca.uhn.fhir.jpa.api.dao.DaoRegistry;
import ca.uhn.fhir.jpa.api.dao.IFhirResourceDao;
Expand All @@ -17,6 +18,7 @@
import ca.uhn.fhir.jpa.searchparam.util.SearchParameterHelper;
import ca.uhn.fhir.mdm.log.Logs;
import ca.uhn.fhir.rest.api.server.RequestDetails;
import ca.uhn.fhir.rest.api.server.SystemRequestDetails;
import ca.uhn.fhir.rest.server.SimpleBundleProvider;
import ca.uhn.fhir.rest.server.exceptions.UnprocessableEntityException;
import ca.uhn.hapi.converters.canonical.VersionCanonicalizer;
Expand Down Expand Up @@ -230,6 +232,40 @@ public void testValidForUpload_WhenSearchParameterValidatorThrowsAnExceptionOthe



@Test
public void testCreateRequestDetailsUsesDefaultPartition() {
myPartitionSettings.setPartitioningEnabled(true);
myPartitionSettings.setDefaultPartitionId(42);

RequestDetails requestDetails = mySvc.createRequestDetails();
assertTrue(requestDetails instanceof SystemRequestDetails);
SystemRequestDetails systemRequestDetails = (SystemRequestDetails) requestDetails;

assertEquals(RequestPartitionId.fromPartitionId(42), systemRequestDetails.getRequestPartitionId());
}

@Test
public void testInstallPackageUsesDefaultPartition() throws IOException {
myPartitionSettings.setPartitioningEnabled(true);
myPartitionSettings.setDefaultPartitionId(7);

CodeSystem newCodeSystem = new CodeSystem();
newCodeSystem.setId("CodeSystem/newcs");
newCodeSystem.setUrl("http://partitioned-code-system");
newCodeSystem.setContent(CodeSystem.CodeSystemContentMode.COMPLETE);

PackageInstallationSpec spec = setupResourceInPackage(null, newCodeSystem, myCodeSystemDao);

mySvc.install(spec);

verify(myCodeSystemDao).create(any(CodeSystem.class), myRequestDetailsCaptor.capture());
RequestDetails requestDetails = myRequestDetailsCaptor.getValue();

assertTrue(requestDetails instanceof SystemRequestDetails);
SystemRequestDetails systemRequestDetails = (SystemRequestDetails) requestDetails;
assertEquals(RequestPartitionId.fromPartitionId(7), systemRequestDetails.getRequestPartitionId());
}

@Test
public void testDontTryToInstallDuplicateCodeSystem_CodeSystemAlreadyExistsWithDifferentId() throws IOException {
// Setup
Expand Down
Loading