You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wicket.apache.org by Joachim Rohde <ma...@joachimrohde.com> on 2014/10/17 00:44:26 UTC

Failure of Kyro serializer due to latest changes in Wicket snapshot?

Hi,
I realized today that the unit tests of the Kryo serializers (and the 
fast serializer) in the Wickestuff project were failing since (at least) 
yesterday (16th october). The last successful build according to 
https://travis-ci.org/wicketstuff/core/builds was on the 13th.
For example 
https://github.com/wicketstuff/core/blob/master/jdk-1.7-parent/serializer-kryo/src/test/java/org/wicketstuff/pageserializer/kryo/KryoSerializerTest.java 
fails with

Running org.wicketstuff.pageserializer.kryo.KryoSerializerTest
DEBUG - KryoSerializer             - Buffer size: '500 bytes'
DEBUG - KryoSerializer             - Going to serialize: '[Page class = 
org.wicketstuff.pageserializer.kryo.HomePage, id = 0, render count = 1]'
ERROR - DebuggingKryo              - Wrote '146' bytes for object: 
'class org.apache.wicket.markup.html.basic.Label'
ERROR - DebuggingKryo              - Wrote '269' bytes for object: 
'class org.apache.wicket.ajax.markup.html.AjaxLink$1'
ERROR - DebuggingKryo              - Wrote '320' bytes for object: 
'class org.apache.wicket.ajax.markup.html.AjaxLink$1'
ERROR - DebuggingKryo              - Wrote '320' bytes for object: 
'class org.apache.wicket.Behaviors$BehaviorIdList'
ERROR - DebuggingKryo              - Wrote '340' bytes for object: 
'class org.wicketstuff.pageserializer.kryo.HomePage$1'
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.724 
sec <<< FAILURE! - in org.wicketstuff.pageserializer.kryo.KryoSerializerTest
homepageRendersSuccessfully(org.wicketstuff.pageserializer.kryo.KryoSerializerTest) 
  Time elapsed: 0.678 sec  <<< ERROR!
com.esotericsoftware.kryo.SerializationException: Buffer limit exceeded 
writing object of type: org.wicketstuff.pageserializer.kryo.HomePage
	at java.nio.Buffer.nextPutIndex(Buffer.java:521)
	at java.nio.HeapByteBuffer.put(HeapByteBuffer.java:169)
	at 
com.esotericsoftware.kryo.serialize.StringSerializer.put(StringSerializer.java:35)
	at 
com.esotericsoftware.kryo.serialize.StringSerializer.writeObjectData(StringSerializer.java:24)
	at com.esotericsoftware.kryo.Serializer.writeObject(Serializer.java:43)
	at 
com.esotericsoftware.kryo.serialize.FieldSerializer.writeObjectData(FieldSerializer.java:182)
	at 
com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.writeObjectData(ReferenceFieldSerializer.java:52)
	at 
com.esotericsoftware.kryo.serialize.FieldSerializer.writeObjectData(FieldSerializer.java:175)
	at 
com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.writeObjectData(ReferenceFieldSerializer.java:52)
	at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:489)
	at 
org.wicketstuff.pageserializer.kryo.DebuggingKryo.writeClassAndObject(DebuggingKryo.java:57)
	at 
com.esotericsoftware.kryo.serialize.ArraySerializer.writeArray(ArraySerializer.java:123)
	at 
com.esotericsoftware.kryo.serialize.ArraySerializer.writeObjectData(ArraySerializer.java:88)
	at 
com.esotericsoftware.kryo.serialize.FieldSerializer.writeObjectData(FieldSerializer.java:175)
	at 
com.esotericsoftware.kryo.serialize.FieldSerializer.writeObjectData(FieldSerializer.java:175)
	at 
com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.writeObjectData(ReferenceFieldSerializer.java:52)
	at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:489)
	at 
org.wicketstuff.pageserializer.kryo.DebuggingKryo.writeClassAndObject(DebuggingKryo.java:57)
	at 
org.wicketstuff.pageserializer.kryo.KryoSerializer.serialize(KryoSerializer.java:87)
	at 
org.wicketstuff.pageserializer.kryo.KryoSerializerTest.homepageRendersSuccessfully(KryoSerializerTest.java:43)

I suspect that some changes in Wicket core might be responsible for the 
failure. The Kryo projects were not modified in the last days and if I 
use Wicket version 7.0.0-M3 everything works as expected. Since I 
neither know Kyro nor the internals of Wicket I'm not sure where this 
has to be fixed. I just wanted to point this out in case there might be 
a subtle issue introduced lately into Wicket.

Joachim

Re: Failure of Kyro serializer due to latest changes in Wicket snapshot?

Posted by Martin Grigorov <mg...@apache.org>.
Hi,

Thanks for notifying us!

The old bufferSize was 500 bytes.

Since recently auto components are not removed at the end of the request
cycle and they contribute to the page size at the end:

ERROR - DebuggingKryo              - Wrote '340' bytes for object: 'class
org.wicketstuff.pageserializer.kryo.HomePage$1'
ERROR - DebuggingKryo              - Wrote '540' bytes for object: 'class
org.apache.wicket.markup.html.internal.HtmlHeaderContainer'  // auto
ERROR - DebuggingKryo              - Wrote '591' bytes for object: 'class
org.apache.wicket.markup.html.TransparentWebMarkupContainer'  // auto
ERROR - DebuggingKryo              - Wrote '673' bytes for object: 'class
org.wicketstuff.pageserializer.kryo.HomePage'

I want to revise the recent change because I am not sure it is correct.
For the time being I've increased the buffer size to 1000 bytes (
https://github.com/wicketstuff/core/commit/f1a0042d3f2cb5c2e3c1b8bc3c120b95b79389ca
)


Martin Grigorov
Wicket Training and Consulting
https://twitter.com/mtgrigorov

On Fri, Oct 17, 2014 at 1:44 AM, Joachim Rohde <mailinglist@joachimrohde.com
> wrote:

> Hi,
> I realized today that the unit tests of the Kryo serializers (and the fast
> serializer) in the Wickestuff project were failing since (at least)
> yesterday (16th october). The last successful build according to
> https://travis-ci.org/wicketstuff/core/builds was on the 13th.
> For example https://github.com/wicketstuff/core/blob/master/
> jdk-1.7-parent/serializer-kryo/src/test/java/org/
> wicketstuff/pageserializer/kryo/KryoSerializerTest.java fails with
>
> Running org.wicketstuff.pageserializer.kryo.KryoSerializerTest
> DEBUG - KryoSerializer             - Buffer size: '500 bytes'
> DEBUG - KryoSerializer             - Going to serialize: '[Page class =
> org.wicketstuff.pageserializer.kryo.HomePage, id = 0, render count = 1]'
> ERROR - DebuggingKryo              - Wrote '146' bytes for object: 'class
> org.apache.wicket.markup.html.basic.Label'
> ERROR - DebuggingKryo              - Wrote '269' bytes for object: 'class
> org.apache.wicket.ajax.markup.html.AjaxLink$1'
> ERROR - DebuggingKryo              - Wrote '320' bytes for object: 'class
> org.apache.wicket.ajax.markup.html.AjaxLink$1'
> ERROR - DebuggingKryo              - Wrote '320' bytes for object: 'class
> org.apache.wicket.Behaviors$BehaviorIdList'
> ERROR - DebuggingKryo              - Wrote '340' bytes for object: 'class
> org.wicketstuff.pageserializer.kryo.HomePage$1'
> Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.724 sec
> <<< FAILURE! - in org.wicketstuff.pageserializer.kryo.KryoSerializerTest
> homepageRendersSuccessfully(org.wicketstuff.pageserializer.kryo.KryoSerializerTest)
> Time elapsed: 0.678 sec  <<< ERROR!
> com.esotericsoftware.kryo.SerializationException: Buffer limit exceeded
> writing object of type: org.wicketstuff.pageserializer.kryo.HomePage
>         at java.nio.Buffer.nextPutIndex(Buffer.java:521)
>         at java.nio.HeapByteBuffer.put(HeapByteBuffer.java:169)
>         at com.esotericsoftware.kryo.serialize.StringSerializer.
> put(StringSerializer.java:35)
>         at com.esotericsoftware.kryo.serialize.StringSerializer.
> writeObjectData(StringSerializer.java:24)
>         at com.esotericsoftware.kryo.Serializer.writeObject(
> Serializer.java:43)
>         at com.esotericsoftware.kryo.serialize.FieldSerializer.
> writeObjectData(FieldSerializer.java:182)
>         at com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.
> writeObjectData(ReferenceFieldSerializer.java:52)
>         at com.esotericsoftware.kryo.serialize.FieldSerializer.
> writeObjectData(FieldSerializer.java:175)
>         at com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.
> writeObjectData(ReferenceFieldSerializer.java:52)
>         at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.
> java:489)
>         at org.wicketstuff.pageserializer.kryo.DebuggingKryo.
> writeClassAndObject(DebuggingKryo.java:57)
>         at com.esotericsoftware.kryo.serialize.ArraySerializer.
> writeArray(ArraySerializer.java:123)
>         at com.esotericsoftware.kryo.serialize.ArraySerializer.
> writeObjectData(ArraySerializer.java:88)
>         at com.esotericsoftware.kryo.serialize.FieldSerializer.
> writeObjectData(FieldSerializer.java:175)
>         at com.esotericsoftware.kryo.serialize.FieldSerializer.
> writeObjectData(FieldSerializer.java:175)
>         at com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.
> writeObjectData(ReferenceFieldSerializer.java:52)
>         at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.
> java:489)
>         at org.wicketstuff.pageserializer.kryo.DebuggingKryo.
> writeClassAndObject(DebuggingKryo.java:57)
>         at org.wicketstuff.pageserializer.kryo.KryoSerializer.serialize(
> KryoSerializer.java:87)
>         at org.wicketstuff.pageserializer.kryo.KryoSerializerTest.
> homepageRendersSuccessfully(KryoSerializerTest.java:43)
>
> I suspect that some changes in Wicket core might be responsible for the
> failure. The Kryo projects were not modified in the last days and if I use
> Wicket version 7.0.0-M3 everything works as expected. Since I neither know
> Kyro nor the internals of Wicket I'm not sure where this has to be fixed. I
> just wanted to point this out in case there might be a subtle issue
> introduced lately into Wicket.
>
> Joachim
>