Skip to content

If resource id is string, failed bulk export resources with _includeHistory parameter #7296

@robcaruso

Description

@robcaruso

Problem Statement

if resource id is string, bulk export with _includeHistory parameter, failed step[write-to-binaries], throw InternalErrorException: HAPI-2223: For input string.

Steps to Reproduce

Test Environment: 8.5.7-SNAPSHOT

  1. enable FHIR Bulk Export Enabled setting in persistence module
  2. create a Patient, id is string, such as PUT /Patient/p1
  3. async POST /$export
{
  "resourceType": "Parameters",
  "parameter": [
    {
      "name": "_outputFormat",
      "valueString": "application/fhir+ndjson"
    },
    {
      "valueString": "Patient",
      "name": "_type"
    },
    {
        "name": "_includeHistory",
        "valueBoolean": true
    }
  ]
}

Observed Results

bulk export failed

ca.uhn.fhir.rest.server.exceptions.InternalErrorException: HAPI-2223: For input string: "p1"
	at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService.invokeCallableAndHandleAnyException(HapiTransactionService.java:675)
	at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService$ExecutionBuilder.lambda$execute$1(HapiTransactionService.java:554)
	at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
	at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService.doExecuteCallback(HapiTransactionService.java:444)
	at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService.doExecuteInTransaction(HapiTransactionService.java:351)
	at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService.doExecute(HapiTransactionService.java:288)
	at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService$ExecutionBuilder.execute(HapiTransactionService.java:560)
	at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService$ExecutionBuilder.execute(HapiTransactionService.java:555)
	at ca.uhn.fhir.jpa.search.PersistedJpaIdSearchBundleProvider.getResources(PersistedJpaIdSearchBundleProvider.java:103)
	at ca.uhn.fhir.jpa.search.PersistedJpaIdSearchBundleProvider.getResources(PersistedJpaIdSearchBundleProvider.java:89)
	at ca.uhn.fhir.batch2.jobs.export.ExpandResourceAndWriteBinaryStep.consumeHistoryInBatches(ExpandResourceAndWriteBinaryStep.java:274)
	at ca.uhn.fhir.batch2.jobs.export.ExpandResourceAndWriteBinaryStep.processHistoryResources(ExpandResourceAndWriteBinaryStep.java:227)
	at ca.uhn.fhir.batch2.jobs.export.ExpandResourceAndWriteBinaryStep.fetchResourcesByIdAndConsumeThem(ExpandResourceAndWriteBinaryStep.java:198)
	at ca.uhn.fhir.batch2.jobs.export.ExpandResourceAndWriteBinaryStep.expandResourcesFromList(ExpandResourceAndWriteBinaryStep.java:182)
	at ca.uhn.fhir.batch2.jobs.export.ExpandResourceAndWriteBinaryStep.run(ExpandResourceAndWriteBinaryStep.java:166)
	at ca.uhn.fhir.batch2.coordinator.StepExecutor.executeStep(StepExecutor.java:63)
	at ca.uhn.fhir.batch2.coordinator.WorkChunkProcessor.doExecution(WorkChunkProcessor.java:107)
	at ca.uhn.fhir.batch2.coordinator.JobStepExecutor.executeStep(JobStepExecutor.java:85)
	at ca.uhn.fhir.batch2.coordinator.WorkChannelMessageListener.lambda$handleWorkChannelMessage$1(WorkChannelMessageListener.java:274)
	at ca.uhn.fhir.interceptor.api.IBaseInterceptorBroadcaster.lambda$runWithFilterHooks$0(IBaseInterceptorBroadcaster.java:75)
	at ca.uhn.fhir.interceptor.executor.SupplierFilterHookWrapper$SupplierRunnable.run(SupplierFilterHookWrapper.java:72)
	at ca.cdr.pers.interceptors.JobInstanceInterceptor$Batch2WorkChunkProcessFilter.wrapCall(JobInstanceInterceptor.java:147)
	at ca.uhn.fhir.interceptor.executor.SupplierFilterHookWrapper.get(SupplierFilterHookWrapper.java:46)
	at ca.uhn.fhir.interceptor.api.IBaseInterceptorBroadcaster.runWithFilterHooks(IBaseInterceptorBroadcaster.java:96)
	at ca.uhn.fhir.interceptor.api.IBaseInterceptorBroadcaster.runWithFilterHooks(IBaseInterceptorBroadcaster.java:74)
	at ca.uhn.fhir.batch2.coordinator.WorkChannelMessageListener.lambda$handleWorkChannelMessage$2(WorkChannelMessageListener.java:276)
	at java.base/java.util.Optional.ifPresentOrElse(Optional.java:196)
	at ca.uhn.fhir.batch2.coordinator.WorkChannelMessageListener.handleWorkChannelMessage(WorkChannelMessageListener.java:263)
	at ca.uhn.fhir.batch2.coordinator.WorkChannelMessageListener.handleMessage(WorkChannelMessageListener.java:81)
	at ca.uhn.fhir.broker.jms.SpringMessagingMessageHandlerAdapter.handleMessage(SpringMessagingMessageHandlerAdapter.java:82)
	at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:115)
	at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:133)
	at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:106)
	at org.springframework.integration.jms.SubscribableJmsChannel$DispatchingMessageListener.onMessage(SubscribableJmsChannel.java:227)
	at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:814)
	at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:746)
	at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:721)
	at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:333)
	at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:270)
	at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1257)
	at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1247)
	at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1140)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.NumberFormatException: For input string: "p1"
	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
	at java.base/java.lang.Long.parseLong(Long.java:711)
	at java.base/java.lang.Long.parseLong(Long.java:836)
	at ca.uhn.fhir.model.primitive.IdDt.getIdPartAsLong(IdDt.java:286)
	at ca.uhn.fhir.jpa.dao.HistoryBuilder.lambda$addResourceIdsFiltering$0(HistoryBuilder.java:284)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575)
	at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
	at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616)
	at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622)
	at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627)
	at ca.uhn.fhir.jpa.dao.HistoryBuilder.addResourceIdsFiltering(HistoryBuilder.java:285)
	at ca.uhn.fhir.jpa.dao.HistoryBuilder.addPredicatesToQuery(HistoryBuilder.java:236)
	at ca.uhn.fhir.jpa.dao.HistoryBuilder.fetchEntities(HistoryBuilder.java:143)
	at ca.uhn.fhir.jpa.search.PersistedJpaIdSearchBundleProvider.lambda$getResources$0(PersistedJpaIdSearchBundleProvider.java:114)
	at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService.invokeCallableAndHandleAnyException(HapiTransactionService.java:671)

Expected Results

bulk export resources successfully when resource id is string

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions