Torch V1.0.0-alpha.7: Redact Resource Without Meta Error

by Viktoria Ivanova 57 views

Hey everyone,

I'm running into a bit of a snag with Torch v1.0.0-alpha.7 and hoping someone can lend a hand. I've got Torch deployed using feasibility-deploy, and I'm using the execute-crtdl.sh script from the repo (link here). If this isn't the right place for this question, please let me know!

The Issue

So, when I run:

./execute-crtdl.sh -f queries/example-crtdl.json

with this example-crtdl.json, a link is generated just fine. But, here's the kicker: when I try to resolve that link, I get hit with this RuntimeException:

[reactor-http-epoll-1] ERROR d.m.torch.rest.FhirController - Job 0fa19252-89bc-44c1-acb2-ec7036914ad0 failed: java.lang.RuntimeException: Trying to redact Resource without Meta
java.lang.RuntimeException: java.lang.RuntimeException: Trying to redact Resource without Meta
 at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(Unknown Source)
 at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Unknown Source)
 at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
 at java.base/java.util.concurrent.ForkJoinTask.getThrowableException(Unknown Source)
 at java.base/java.util.concurrent.ForkJoinTask.reportException(Unknown Source)
 at java.base/java.util.concurrent.ForkJoinTask.invoke(Unknown Source)
 at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateParallel(Unknown Source)
 at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(Unknown Source)
 at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
 at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
 at java.base/java.util.stream.ReferencePipeline$Head.forEach(Unknown Source)
 at de.medizininformatikinitiative.torch.service.BatchCopierRedacter.transformBatch(BatchCopierRedacter.java:50)
 at de.medizininformatikinitiative.torch.service.CrtdlProcessingService.lambda$processBatch$12(CrtdlProcessingService.java:142)
 at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:113)
 at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:129)
 at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:245)
 at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:305)
 at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:129)
 at reactor.core.publisher.Operators$BaseFluxToMonoOperator.completePossiblyEmpty(Operators.java:2096)
 at reactor.core.publisher.MonoCollect$CollectSubscriber.onComplete(MonoCollect.java:145)
 at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.onComplete(FluxConcatMapNoPrefetch.java:241)
 at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:357)
 at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:294)
 at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.innerComplete(FluxConcatMapNoPrefetch.java:275)
 at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onComplete(FluxConcatMap.java:889)
 at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144)
 at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.request(MonoIgnoreThen.java:165)
 at reactor.core.publisher.FluxMap$MapSubscriber.request(FluxMap.java:164)
 at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.request(Operators.java:2330)
 at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.request(FluxConcatMapNoPrefetch.java:339)
 at reactor.core.publisher.Operators$BaseFluxToMonoOperator.request(Operators.java:2066)
 at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:171)
 at reactor.core.publisher.MonoFlatMap$FlatMapInner.onSubscribe(MonoFlatMap.java:291)
 at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:96)
 at reactor.core.publisher.Operators$BaseFluxToMonoOperator.onSubscribe(Operators.java:2050)
 at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.onSubscribe(FluxConcatMapNoPrefetch.java:164)
 at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:201)
 at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:83)
 at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:76)
 at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:165)
 at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122)
 at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.complete(MonoIgnoreThen.java:294)
 at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onNext(MonoIgnoreThen.java:188)
 at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:237)
 at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:204)
 at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.innerComplete(FluxConcatMapNoPrefetch.java:287)
 at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onComplete(FluxConcatMap.java:889)
 at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.complete(MonoIgnoreThen.java:295)
 at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onNext(MonoIgnoreThen.java:188)
 at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:237)
 at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:204)
 at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onComplete(FluxPeekFuseable.java:277)
 at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onComplete(FluxPeekFuseable.java:277)
 at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onComplete(FluxContextWrite.java:126)
 at reactor.core.publisher.FluxFilter$FilterConditionalSubscriber.onComplete(FluxFilter.java:300)
 at reactor.core.publisher.FluxHandle$HandleConditionalSubscriber.onComplete(FluxHandle.java:440)
 at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.onComplete(FluxConcatMapNoPrefetch.java:241)
 at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.innerComplete(FluxConcatMapNoPrefetch.java:287)
 at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onComplete(FluxConcatMap.java:889)
 at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260)
 at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260)
 at reactor.core.publisher.FluxFlatMap$FlatMapMain.checkTerminated(FluxFlatMap.java:850)
 at reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:612)
 at reactor.core.publisher.FluxFlatMap$FlatMapMain.drain(FluxFlatMap.java:592)
 at reactor.core.publisher.FluxFlatMap$FlatMapMain.onComplete(FluxFlatMap.java:469)
 at reactor.core.publisher.FluxFlatMap$FlatMapMain.checkTerminated(FluxFlatMap.java:850)
 at reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:612)
 at reactor.core.publisher.FluxFlatMap$FlatMapMain.drain(FluxFlatMap.java:592)
 at reactor.core.publisher.FluxFlatMap$FlatMapMain.onComplete(FluxFlatMap.java:469)
 at reactor.core.publisher.SerializedSubscriber.onComplete(SerializedSubscriber.java:146)
 at reactor.core.publisher.FluxRetryWhen$RetryWhenMainSubscriber.onComplete(FluxRetryWhen.java:204)
 at reactor.core.publisher.FluxExpand$ExpandBreathSubscriber.drainQueue(FluxExpand.java:168)
 at reactor.core.publisher.FluxExpand$ExpandBreathSubscriber.onComplete(FluxExpand.java:147)
 at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onComplete(FluxMapFuseable.java:152)
 at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:246)
 at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:305)
 at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79)
 at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:539)
 at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:129)
 at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107)
 at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:299)
 at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onNext(FluxFilterFuseable.java:337)
 at reactor.core.publisher.Operators$BaseFluxToMonoOperator.completePossiblyEmpty(Operators.java:2096)
 at reactor.core.publisher.MonoCollect$CollectSubscriber.onComplete(MonoCollect.java:145)
 at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144)
 at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260)
 at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144)
 at reactor.netty.channel.FluxReceive.onInboundComplete(FluxReceive.java:413)
 at reactor.netty.channel.ChannelOperations.onInboundComplete(ChannelOperations.java:455)
 at reactor.netty.channel.ChannelOperations.terminate(ChannelOperations.java:509)
 at reactor.netty.http.client.HttpClientOperations.onInboundNext(HttpClientOperations.java:821)
 at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:115)
 at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
 at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
 at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
 at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436)
 at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)
 at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318)
 at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
 at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
 at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
 at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
 at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1519)
 at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1377)
 at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1428)
 at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:530)
 at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:469)
 at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290)
 at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
 at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
 at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
 at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357)
 at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
 at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
 at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868)
 at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:799)
 at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:501)
 at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:399)
 at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)
 at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
 at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
 at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.RuntimeException: Trying to redact Resource without Meta
 at de.medizininformatikinitiative.torch.util.Redaction.redact(Redaction.java:120)
 at de.medizininformatikinitiative.torch.service.BatchCopierRedacter.transform(BatchCopierRedacter.java:162)
 at de.medizininformatikinitiative.torch.service.BatchCopierRedacter.lambda$transform$7(BatchCopierRedacter.java:129)
 at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
 at java.base/java.util.HashMap$EntrySpliterator.forEachRemaining(Unknown Source)
 at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
 at java.base/java.util.stream.ForEachOps$ForEachTask.compute(Unknown Source)
 at java.base/java.util.concurrent.CountedCompleter.exec(Unknown Source)
 at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
 at java.base/java.util.concurrent.ForkJoinTask.invoke(Unknown Source)
 at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateParallel(Unknown Source)
 at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(Unknown Source)
 at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
 at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
 at java.base/java.util.stream.ReferencePipeline$Head.forEach(Unknown Source)
 at de.medizininformatikinitiative.torch.service.BatchCopierRedacter.transform(BatchCopierRedacter.java:112)
 at de.medizininformatikinitiative.torch.service.BatchCopierRedacter.lambda$transformBatch$0(BatchCopierRedacter.java:51)
 at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
 at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Unknown Source)
 at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
 at java.base/java.util.stream.ForEachOps$ForEachTask.compute(Unknown Source)
 at java.base/java.util.concurrent.CountedCompleter.exec(Unknown Source)
 at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
 at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)
 at java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source)
 at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
 at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)

Diving Deeper into the Error

The core of the error message, ***