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/