You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ignite.apache.org by "aaron@tophold.com" <aa...@tophold.com> on 2017/09/18 12:58:04 UTC

Cache#invokeAsync cause StackOverflowError

Hi All, 

We have a very simple bean, and while use the cashe's replace it will work, but #invokeAsync or #invoke will report error.   am i using it wrong? 

#This can work

AccountEntry ae = accountCache.get(accountId.getIdentifier());
if(ae!=null){
    if (ae.getSequence() < sequence) {
        ae.setCash(totalLeft)
                .setUpdateTime(instant.toEpochMilli())
                .setReserved(totalReserved)
                .setSequence(sequence);
        accountCache.replace(accountId.getIdentifier(), ae);
    }
}


this can not:

accountCache.invokeAsync(accountId.getIdentifier(), (entry, arguments) -> {

    if(entry.exists()) {
        final AccountEntry ae = entry.getValue();
        if (ae.getSequence() < sequence) {
            ae.setCash(totalLeft)
                    .setUpdateTime(instant.toEpochMilli())
                    .setReserved(totalReserved)
                    .setSequence(sequence);
            entry.setValue(ae);
        }
    }
    return null;
});

Exception:

at org.apache.ignite.internal.binary.BinaryFieldAccessor$DefaultFinalClassAccessor.write(BinaryFieldAccessor.java:478) ~[ignite-core-2.1.0.jar!/:2.1.0]
        at org.apache.ignite.internal.binary.BinaryClassDescriptor.write(BinaryClassDescriptor.java:793) ~[ignite-core-2.1.0.jar!/:2.1.0]
        at org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal0(BinaryWriterExImpl.java:206) ~[ignite-core-2.1.0.jar!/:2.1.0]
        at org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal(BinaryWriterExImpl.java:147) ~[ignite-core-2.1.0.jar!/:2.1.0]
        at org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal0(BinaryWriterExImpl.java:201) ~[ignite-core-2.1.0.jar!/:2.1.0]
        at org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal(BinaryWriterExImpl.java:147) ~[ignite-core-2.1.0.jar!/:2.1.0]
        at org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal(BinaryWriterExImpl.java:134) ~[ignite-core-2.1.0.jar!/:2.1.0]
        at org.apache.ignite.internal.binary.BinaryWriterExImpl.doWriteObject(BinaryWriterExImpl.java:496) ~[ignite-core-2.1.0.jar!/:2.1.0]
        at org.apache.ignite.internal.binary.BinaryWriterExImpl.writeObjectField(BinaryWriterExImpl.java:1160) ~[ignite-core-2.1.0.jar!/:2.1.0]
        at org.apache.ignite.internal.binary.BinaryFieldAccessor$DefaultFinalClassAccessor.write(BinaryFieldAccessor.java:663) ~[ignite-core-2.1.0.jar!/:2.1.0]
        at org.apache.ignite.internal.binary.BinaryClassDescriptor.write(BinaryClassDescriptor.java:793) ~[ignite-core-2.1.0.jar!/:2.1.0]
        at org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal0(BinaryWriterExImpl.java:206) ~[ignite-core-2.1.0.jar!/:2.1.0]
        at org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal(BinaryWriterExImpl.java:147) ~[ignite-core-2.1.0.jar!/:2.1.0]
        at org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal0(BinaryWriterExImpl.java:201) ~[ignite-core-2.1.0.jar!/:2.1.0]
        at org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal(BinaryWriterExImpl.java:147) ~[ignite-core-2.1.0.jar!/:2.1.0]
        at org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal(BinaryWriterExImpl.java:134) ~[ignite-core-2.1.0.jar!/:2.1.0]
        at org.apache.ignite.internal.binary.BinaryWriterExImpl.doWriteObject(BinaryWriterExImpl.java:496) ~[ignite-core-2.1.0.jar!/:2.1.0]
        at org.apache.ignite.internal.binary.BinaryWriterExImpl.writeObjectField(BinaryWriterExImpl.java:1160) ~[ignite-core-2.1.0.jar!/:2.1.0]




aaron@tophold.com

Re: Cache#invokeAsync cause StackOverflowError

Posted by ezhuravlev <e....@gmail.com>.
Hi,

Create static inner class for EntryProcessor instead of lambda, it looks
like when lambda contains objects from outer class it could lead to
stackoverflow at the serialization.

Evgenii



--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/