Support Article

Distribution in Stream Dataset is failing following HFix-31434

SA-32799

Summary



The dataflow execution is failing and incorrect distribution is done when Dataflow is output to Stream Dataset.

This issue started occurring post installation of HFix-31434.

The Stream dataset distribution shows one records processed and failed for all the other nodes except for one.


Error Messages


2017-01-18 11:03:40,517 [APP:Administrators]] [ STANDARD] [ ] (vice.DataFlowMetricsSubscriber) ERROR - Exception:
com.pega.dsm.dnode.api.dataflow.StageException: Exception in stage: SimulationResultsStream
at com.pega.dsm.dnode.api.dataflow.DataFlowStage$StageOutputSubscriber.onError(DataFlowStage.java:435)
at com.pega.dsm.dnode.api.dataflow.DataFlowStageProcessor.onError(DataFlowStageProcessor.java:75)
at com.pega.dsm.dnode.api.dataflow.DataFlowStage$StageInputSubscriber.onError(DataFlowStage.java:312)
at com.pega.dsm.dnode.api.dataflow.DataFlowExecutor$QueueBasedDataFlowExecutor$4.process(DataFlowExecutor.java:362)
at com.pega.dsm.dnode.api.dataflow.DataFlowExecutor$QueueBasedDataFlowExecutor.runEventLoop(DataFlowExecutor.java:178)
at com.pega.dsm.dnode.api.dataflow.DataFlow$1.emit(DataFlow.java:266)
at com.pega.dsm.dnode.impl.stream.DataObservableImpl.subscribe(DataObservableImpl.java:57)
at com.pega.dsm.dnode.impl.dataflow.service.LocalRun.execute(LocalRun.java:248)
at com.pega.dsm.dnode.impl.dataflow.service.LocalRun.access$500(LocalRun.java:45)
at com.pega.dsm.dnode.impl.dataflow.service.LocalRun$2.execute(LocalRun.java:165)
at com.pega.dsm.dnode.util.OperationWithLock$1.execute(OperationWithLock.java:36)
at com.pega.dsm.dnode.util.OperationWithLock.doWithLock(OperationWithLock.java:67)
at com.pega.dsm.dnode.util.OperationWithLock.doWithLock(OperationWithLock.java:40)
at com.pega.dsm.dnode.util.OperationWithLock.doWithLock(OperationWithLock.java:25)
at com.pega.dsm.dnode.impl.prpc.service.ServiceHelper.executeWithLockInternal(ServiceHelper.java:169)
at com.pega.dsm.dnode.impl.prpc.service.ServiceHelper.executeWithLock(ServiceHelper.java:137)
at com.pega.dsm.dnode.impl.dataflow.service.DataFlowLockManager.lock(DataFlowLockManager.java:28)
at com.pega.dsm.dnode.impl.dataflow.service.DataFlowLockManager.lock(DataFlowLockManager.java:24)
at com.pega.dsm.dnode.impl.dataflow.service.LocalRun.lockAndRun(LocalRun.java:148)
at com.pega.dsm.dnode.impl.dataflow.service.LocalRun.run(LocalRun.java:78)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at com.pega.dsm.dnode.util.PrpcRunnable$1.run(PrpcRunnable.java:44)
at com.pega.dsm.dnode.util.PrpcRunnable$1.run(PrpcRunnable.java:41)
at com.pega.dsm.dnode.util.PrpcRunnable.execute(PrpcRunnable.java:52)
at com.pega.dsm.dnode.impl.prpc.PrpcThreadFactory$PrpcThread.run(PrpcThreadFactory.java:84)
Caused by: com.pega.dsm.dnode.api.ExceptionWithInputRecord: java.lang.NullPointerException
at com.pega.dsm.dnode.api.dataflow.DataFlowStage$StageInputSubscriber.onNext(DataFlowStage.java:287)
at com.pega.dsm.dnode.api.dataflow.DataFlowStage$StageInputSubscriber.onNext(DataFlowStage.java:203)
at com.pega.dsm.dnode.api.dataflow.DataFlowExecutor$QueueBasedDataFlowExecutor$2.process(DataFlowExecutor.java:328)
... 22 more
Caused by: java.lang.NullPointerException
at com.pega.dsm.dnode.impl.prpc.service.ServiceDeploymentImpl.postMessage(ServiceDeploymentImpl.java:206)
at com.pega.dsm.dnode.impl.dataset.stream.StreamSaveOperation.sendToOtherNode(StreamSaveOperation.java:124)
at com.pega.dsm.dnode.impl.dataset.stream.StreamSaveOperation.access$500(StreamSaveOperation.java:38)
at com.pega.dsm.dnode.impl.dataset.stream.StreamSaveOperation$1.saveToApropriateNode(StreamSaveOperation.java:108)
at com.pega.dsm.dnode.impl.dataset.stream.StreamSaveOperation$1.emit(StreamSaveOperation.java:90)
at com.pega.dsm.dnode.impl.stream.DataObservableImpl$SafeDataSubscriber.subscribe(DataObservableImpl.java:326)
at com.pega.dsm.dnode.impl.stream.DataObservableImpl.subscribe(DataObservableImpl.java:53)
at com.pega.dsm.dnode.impl.stream.DataObservableImpl.await(DataObservableImpl.java:99)
at com.pega.dsm.dnode.impl.stream.DataObservableImpl.await(DataObservableImpl.java:88)
at com.pega.dsm.dnode.impl.dataflow.SaveStageProcessor.onNext(SaveStageProcessor.java:107)
at com.pega.dsm.dnode.api.dataflow.DataFlowStageBatchProcessor.commitBatchInternal(DataFlowStageBatchProcessor.java:122)
at com.pega.dsm.dnode.api.dataflow.DataFlowStageBatchProcessor.onNext(DataFlowStageBatchProcessor.java:72)
at com.pega.dsm.dnode.api.dataflow.DataFlowStageBatchProcessor.onNext(DataFlowStageBatchProcessor.java:19)
at com.pega.dsm.dnode.api.dataflow.DataFlowStage$StageInputSubscriber.onNext(DataFlowStage.java:285)
... 24 more


Steps to Reproduce



Run a dataflow that outputs to a Stream Dataset.


Root Cause



A defect in Pegasystems’ code or rules.

After HFIX-30998 a stream data set uses partition keys to distribute records across all the data flow nodes in a consistent way.

If no partition keys defined, stream data set consistently routes records to a single node, which is not a backward compatible behavior.

Resolution



Apply HFix-31668

After installing this hotfix one must make sure that stream data sets do not have partition keys defined (unless user expects them to be distributed).

Published January 23, 2017 - Updated April 23, 2017

Have a question? Get answers now.

Visit the Collaboration Center to ask questions, engage in discussions, share ideas, and help others.