Hi,

I put the same jar on the two nodes. The codes are the same. Why does lambda 
not work here? Thank you.


From: Andrey Mashenkov [mailto:[email protected]]
Sent: 2018年6月6日 9:11
To: [email protected]
Subject: Re: ClassCastException When Using CacheEntryProcessor in StreamVisitor

Hi,

Is it possible you change lambdas code between calls? Or may be classes are 
differs on nodes?
Try to replace lambdas with static classes in your code. Will it work for you?

On Tue, Jun 5, 2018 at 10:28 PM, Cong Guo 
<[email protected]<mailto:[email protected]>> wrote:
Hi,

The stacktrace is as follows. Do I use the CacheEntryProcessor in the right 
way? May I have an example about how to use CacheEntryProcessor in 
StreamVisitor, please? Thank you!

javax.cache.processor.EntryProcessorException: java.lang.ClassCastException: 
com.huawei.clusterexperiment.model.Person cannot be cast to 
org.apache.ignite.binary.BinaryObject
        at 
org.apache.ignite.internal.processors.cache.CacheInvokeResult.get(CacheInvokeResult.java:102)
        at 
org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.invoke(IgniteCacheProxyImpl.java:1361)
        at 
org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.invoke(IgniteCacheProxyImpl.java:1405)
        at 
org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.invoke(GatewayProtectedCacheProxy.java:1362)
        at 
com.huawei.clusterexperiment.Client.lambda$streamUpdate$531c8d2f$1(Client.java:337)
        at org.apache.ignite.stream.StreamVisitor$1.apply(StreamVisitor.java:50)
        at org.apache.ignite.stream.StreamVisitor$1.apply(StreamVisitor.java:48)
        at org.apache.ignite.stream.StreamVisitor.receive(StreamVisitor.java:38)
        at 
org.apache.ignite.internal.processors.datastreamer.DataStreamerUpdateJob.call(DataStreamerUpdateJob.java:137)
        at 
org.apache.ignite.internal.processors.datastreamer.DataStreamProcessor.localUpdate(DataStreamProcessor.java:397)
        at 
org.apache.ignite.internal.processors.datastreamer.DataStreamProcessor.processRequest(DataStreamProcessor.java:302)
        at 
org.apache.ignite.internal.processors.datastreamer.DataStreamProcessor.access$000(DataStreamProcessor.java:59)
        at 
org.apache.ignite.internal.processors.datastreamer.DataStreamProcessor$1.onMessage(DataStreamProcessor.java:89)
        at 
org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1555)
        at 
org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1183)
        at 
org.apache.ignite.internal.managers.communication.GridIoManager.access$4200(GridIoManager.java:126)
        at 
org.apache.ignite.internal.managers.communication.GridIoManager$9.run(GridIoManager.java:1090)
        at 
org.apache.ignite.internal.util.StripedExecutor$Stripe.run(StripedExecutor.java:505)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassCastException: 
com.huawei.clusterexperiment.model.Person cannot be cast to 
org.apache.ignite.binary.BinaryObject
        at com.huawei.clusterexperiment.Client$2.process(Client.java:340)
        at 
org.apache.ignite.internal.processors.cache.EntryProcessorResourceInjectorProxy.process(EntryProcessorResourceInjectorProxy.java:68)
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxPrepareFuture.onEntriesLocked(GridDhtTxPrepareFuture.java:421)
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxPrepareFuture.prepare0(GridDhtTxPrepareFuture.java:1231)
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxPrepareFuture.mapIfLocked(GridDhtTxPrepareFuture.java:671)
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxPrepareFuture.prepare(GridDhtTxPrepareFuture.java:1048)
        at 
org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal.prepareAsyncLocal(GridNearTxLocal.java:3452)
        at 
org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler.prepareColocatedTx(IgniteTxHandler.java:257)
        at 
org.apache.ignite.internal.processors.cache.distributed.near.GridNearOptimisticTxPrepareFuture.proceedPrepare(GridNearOptimisticTxPrepareFuture.java:578)
        at 
org.apache.ignite.internal.processors.cache.distributed.near.GridNearOptimisticTxPrepareFuture.prepareSingle(GridNearOptimisticTxPrepareFuture.java:405)
        at 
org.apache.ignite.internal.processors.cache.distributed.near.GridNearOptimisticTxPrepareFuture.prepare0(GridNearOptimisticTxPrepareFuture.java:348)
        at 
org.apache.ignite.internal.processors.cache.distributed.near.GridNearOptimisticTxPrepareFutureAdapter.prepareOnTopology(GridNearOptimisticTxPrepareFutureAdapter.java:137)
        at 
org.apache.ignite.internal.processors.cache.distributed.near.GridNearOptimisticTxPrepareFutureAdapter.prepare(GridNearOptimisticTxPrepareFutureAdapter.java:74)
        at 
org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal.prepareNearTxLocal(GridNearTxLocal.java:3161)
        at 
org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal.commitNearTxLocalAsync(GridNearTxLocal.java:3221)
        at 
org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal.optimisticPutFuture(GridNearTxLocal.java:2391)
        at 
org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal.putAsync0(GridNearTxLocal.java:622)
        at 
org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal.invokeAsync(GridNearTxLocal.java:407)
        at 
org.apache.ignite.internal.processors.cache.GridCacheAdapter$25.op(GridCacheAdapter.java:2486)
        at 
org.apache.ignite.internal.processors.cache.GridCacheAdapter$25.op(GridCacheAdapter.java:2478)
        at 
org.apache.ignite.internal.processors.cache.GridCacheAdapter.syncOp(GridCacheAdapter.java:4088)
        at 
org.apache.ignite.internal.processors.cache.GridCacheAdapter.invoke0(GridCacheAdapter.java:2478)
        at 
org.apache.ignite.internal.processors.cache.GridCacheAdapter.invoke(GridCacheAdapter.java:2456)
        at 
org.apache.ignite.internal.processors.cache.GridCacheProxyImpl.invoke(GridCacheProxyImpl.java:588)
        at 
org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.invoke(IgniteCacheProxyImpl.java:1359)
        ... 17 more




From: Alexey Goncharuk 
[mailto:[email protected]<mailto:[email protected]>]
Sent: 2018年6月5日 12:32
To: user <[email protected]<mailto:[email protected]>>
Subject: Re: ClassCastException When Using CacheEntryProcessor in StreamVisitor

Hello,

Can you please share the full stacktrace so we can see where the original 
ClassCastException is initiated? If it is not printed on a client, it should be 
printed on one of the server nodes.

Thanks!

вт, 5 июн. 2018 г. в 18:35, Cong Guo 
<[email protected]<mailto:[email protected]>>:
Hello,

Can anyone see this email?

From: Cong Guo
Sent: 2018年6月1日 13:11
To: '[email protected]<mailto:[email protected]>' 
<[email protected]<mailto:[email protected]>>
Subject: ClassCastException When Using CacheEntryProcessor in StreamVisitor

Hi,

I want to use IgniteDataStreamer to handle data updates. Is it possible to use 
CacheEntryProcessor in StreamVisitor? I write a simple program as follows. It 
works on a single node, but gets a ClassCastException on two nodes. The two 
nodes are on two physical machines. I have set  peerClassLoadingEnabled to true 
on both the nodes. How do I use CacheEntryProcessor in StreamVisitor?

The function is like:

private static void streamUpdate(Ignite ignite, IgniteCache<Long, Person> 
personCache) {
                                CacheConfiguration<Long, Double> updateCfg = 
new CacheConfiguration<>("updateCache");
                                try(IgniteCache<Long, Double> updateCache = 
ignite.getOrCreateCache(updateCfg)) {
                                                try (IgniteDataStreamer<Long, 
Double> updateStmr = ignite.dataStreamer(updateCache.getName())) {

                                                                
updateStmr.receiver(StreamVisitor.from((cache,e) -> {
                                                                                
Long id = e.getKey();
                                                                                
Double newVal = e.getValue();
                                                                                
personCache.<Long, BinaryObject>withKeepBinary().invoke(id,
                                                                                
                new CacheEntryProcessor<Long, BinaryObject, Object>() {
                                                                                
                                public Object process(MutableEntry<Long, 
BinaryObject> entry, Object...objects) throws EntryProcessorException {
                                                                                
                                                BinaryObjectBuilder bldr = 
entry.getValue().toBuilder();
                                                                                
                                                double salary = 
bldr.getField("salary");
                                                                                
                                                bldr.setField("salary", 
salary+newVal);
                                                                                
                                                entry.setValue(bldr.build());
                                                                                
                                                return null;
                                                                                
                                }
                                                                                
                });
                                                                }));

                                                                Random 
generator = new Random();
                                                                for(long 
i=1;i<=EXP_SIZE;i++) {
                                                                                
long rankey = 1+generator.nextInt(EXP_SIZE);
                                                                                
updateStmr.addData(rankey, 10.0);
                                                                }
                                                }//end second try
                                }//end first try
}

Here the Person class is from the ignite example. There is no exception on a 
single node.
The exception is like:

javax.cache.processor.EntryProcessorException: java.lang.ClassCastException: 
com.huawei.clusterexperiment.model.Person cannot be cast to 
org.apache.ignite.binary.BinaryObject
        at 
org.apache.ignite.internal.processors.cache.CacheInvokeResult.get(CacheInvokeResult.java:102)
        at 
org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.invoke(IgniteCacheProxyImpl.java:1361)
        at 
org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.invoke(IgniteCacheProxyImpl.java:1405)
        at 
org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.invoke(GatewayProtectedCacheProxy.java:1362)
        at 
com.huawei.clusterexperiment.Client.lambda$streamUpdate$a02be2b7$1(Client.java:310)
        at org.apache.ignite.stream.StreamVisitor$1.apply(StreamVisitor.java:50)
        at org.apache.ignite.stream.StreamVisitor$1.apply(StreamVisitor.java:48)
        at org.apache.ignite.stream.StreamVisitor.receive(StreamVisitor.java:38)
        at 
org.apache.ignite.internal.processors.datastreamer.DataStreamerUpdateJob.call(DataStreamerUpdateJob.java:137)
        at 
org.apache.ignite.internal.processors.datastreamer.DataStreamProcessor.localUpdate(DataStreamProcessor.java:397)
        at 
org.apache.ignite.internal.processors.datastreamer.DataStreamProcessor.processRequest(DataStreamProcessor.java:302)
        at 
org.apache.ignite.internal.processors.datastreamer.DataStreamProcessor.access$000(DataStreamProcessor.java:59)
        at 
org.apache.ignite.internal.processors.datastreamer.DataStreamProcessor$1.onMessage(DataStreamProcessor.java:89)
        at 
org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1555)
        at 
org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1183)
        at 
org.apache.ignite.internal.managers.communication.GridIoManager.access$4200(GridIoManager.java:126)
        at 
org.apache.ignite.internal.managers.communication.GridIoManager$9.run(GridIoManager.java:1090)
        at 
org.apache.ignite.internal.util.StripedExecutor$Stripe.run(StripedExecutor.java:505)
        at java.lang.Thread.run(Thread.java:745)





--
Best regards,
Andrey V. Mashenkov

Reply via email to