[ 
https://issues.apache.org/jira/browse/S4-131?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13615412#comment-13615412
 ] 

Matthieu Morel commented on S4-131:
-----------------------------------

Brilliant feedback, thanks!

I'm glad you found the issue, and the solution!


1. We need to update the documentation: we already indicate that requirements 
for a PE to be checkpointed is to have serializable non-transient fields and 
empty no-args constructor, but we should emphasize this, in particular the 
classical. Will do that as soon as possible.
 
2. In my opinion it is better to leave the default serializer as it is. Quoting 
Nathan Sweet (Kryo's author) , "Objenesis isn't enabled by default. It should 
only be used for classes designed to be used without calling a constructor or 
known to work when created that way, so it should be a conscious decision to 
enable."  https://groups.google.com/d/msg/kryo-users/qAW435GGw-I/Nwi08R1p2s8J

Nevertheless, if you find it more convenient to use your proposed change, you 
might write your own serializer that uses objenesis, write a module that 
injects this serializer in place of the default one, and use it in the 
configuration of the app.


Since the problem is solved, the ticket should be closed in my opinion (marked 
as resolved, unless I'm missing something).

Thanks!

                
> checkpoint error "CancellationException" 
> -----------------------------------------
>
>                 Key: S4-131
>                 URL: https://issues.apache.org/jira/browse/S4-131
>             Project: Apache S4
>          Issue Type: Bug
>    Affects Versions: 0.6
>         Environment: The configure like this:
> App program:
> ...
>  wordSumPE.setCheckpointingConfig(new 
> CheckpointingConfig.Builder(CheckpointingMode.TIME).frequency(20).timeUnit(TimeUnit.SECONDS).build());
> ...
> delpoy:
> ./s4 deploy -a=example.wordcountApp -c=testCluster1 -appName=wordApp 
> -p=s4.checkpointing.filesystem.storageRootPath=/home/tmp/s4checkpoint 
> -emc=org.apache.s4.core.ft.FileSystemBackendCheckpointingModule
>            Reporter: Dingyu Yang 
>            Priority: Minor
>             Fix For: 0.7
>
>
> Then I get this error:
> 14:21:50.251 [Checkpointing-storage-0] WARN  
> org.apache.s4.core.ft.SaveStateTask - Cannot save checkpoint : 
> [PROTO_ID];[KEY] --> [example.WordSumPE];[word]
> java.util.concurrent.ExecutionException: 
> com.esotericsoftware.kryo.KryoException: 
> java.util.ConcurrentModificationException
> Serialization trace:
> classes (sun.misc.Launcher$AppClassLoader)
> contextClassLoader (java.lang.Thread)
> thread (java.util.concurrent.ThreadPoolExecutor$Worker)
> workers (java.util.concurrent.ThreadPoolExecutor)
> fetchingThreadPool (org.apache.s4.core.ft.SafeKeeper)
> checkpointingFramework (example.wordcountApp)
> app (org.apache.s4.core.Stream)
> downStream (example.WordSumPE)
>     at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:232) 
> ~[na:1.6.0_22]
>     at java.util.concurrent.FutureTask.get(FutureTask.java:91) ~[na:1.6.0_22]
>     at org.apache.s4.core.ft.SaveStateTask.run(SaveStateTask.java:66) 
> ~[bin/:na]
>     at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>  [na:1.6.0_22]
>     at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>  [na:1.6.0_22]
>     at java.lang.Thread.run(Thread.java:662) [na:1.6.0_22]
> Caused by: com.esotericsoftware.kryo.KryoException: 
> java.util.ConcurrentModificationException
> Serialization trace:
> classes (sun.misc.Launcher$AppClassLoader)
> contextClassLoader (java.lang.Thread)
> thread (java.util.concurrent.ThreadPoolExecutor$Worker)
> workers (java.util.concurrent.ThreadPoolExecutor)
> fetchingThreadPool (org.apache.s4.core.ft.SafeKeeper)
> checkpointingFramework (example.wordcountApp)
> app (org.apache.s4.core.Stream)
> downStream (example.WordSumPE)
>     at 
> com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:585)
>  ~[kryo-2.20.jar:na]
>     at 
> com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:213)
>  ~[kryo-2.20.jar:na]
>     at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:504) 
> ~[kryo-2.20.jar:na]
>     at 
> com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:564)
>  ~[kryo-2.20.jar:na]
>     at 
> com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:213)
>  ~[kryo-2.20.jar:na]
>     at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:504) 
> ~[kryo-2.20.jar:na]
>     at 
> com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:564)
>  ~[kryo-2.20.jar:na]
>     at 
> com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:213)
>  ~[kryo-2.20.jar:na]
>     at com.esotericsoftware.kryo.Kryo.writeObjectOrNull(Kryo.java:552) 
> ~[kryo-2.20.jar:na]
>     at 
> com.esotericsoftware.kryo.serializers.CollectionSerializer.write(CollectionSerializer.java:68)
>  ~[kryo-2.20.jar:na]
>     at 
> com.esotericsoftware.kryo.serializers.CollectionSerializer.write(CollectionSerializer.java:18)
>  ~[kryo-2.20.jar:na]
>     at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:504) 
> ~[kryo-2.20.jar:na]
>     at 
> com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:564)
>  ~[kryo-2.20.jar:na]
>     at 
> com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:213)
>  ~[kryo-2.20.jar:na]
>     at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:504) 
> ~[kryo-2.20.jar:na]
>     at 
> com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:564)
>  ~[kryo-2.20.jar:na]
>     at 
> com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:213)
>  ~[kryo-2.20.jar:na]
>     at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:504) 
> ~[kryo-2.20.jar:na]
>     at 
> com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:564)
>  ~[kryo-2.20.jar:na]
>     at 
> com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:213)
>  ~[kryo-2.20.jar:na]
>     at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:504) 
> ~[kryo-2.20.jar:na]
>     at 
> com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:564)
>  ~[kryo-2.20.jar:na]
>     at 
> com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:213)
>  ~[kryo-2.20.jar:na]
>     at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:504) 
> ~[kryo-2.20.jar:na]
>     at 
> com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:564)
>  ~[kryo-2.20.jar:na]
>     at 
> com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:213)
>  ~[kryo-2.20.jar:na]
>     at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:571) 
> ~[kryo-2.20.jar:na]
>     at 
> org.apache.s4.comm.serialize.KryoSerDeser.serialize(KryoSerDeser.java:91) 
> ~[bin/:na]
>     at 
> org.apache.s4.core.ProcessingElement.serializeState(ProcessingElement.java:802)
>  ~[bin/:na]
>     at org.apache.s4.core.ft.SerializeTask.call(SerializeTask.java:42) 
> ~[bin/:na]
>     at org.apache.s4.core.ft.SerializeTask.call(SerializeTask.java:1) 
> ~[bin/:na]
>     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
> ~[na:1.6.0_22]
>     at java.util.concurrent.FutureTask.run(FutureTask.java:138) ~[na:1.6.0_22]
>     ... 3 common frames omitted
> Caused by: java.util.ConcurrentModificationException: null
>     at 
> java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372) 
> ~[na:1.6.0_22]
>     at java.util.AbstractList$Itr.next(AbstractList.java:343) ~[na:1.6.0_22]
>     at 
> com.esotericsoftware.kryo.serializers.CollectionSerializer.write(CollectionSerializer.java:74)
>  ~[kryo-2.20.jar:na]
>     at 
> com.esotericsoftware.kryo.serializers.CollectionSerializer.write(CollectionSerializer.java:18)
>  ~[kryo-2.20.jar:na]
>     at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:504) 
> ~[kryo-2.20.jar:na]
>     at 
> com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:564)
>  ~[kryo-2.20.jar:na]
>     ... 35 common frames omitted
> I debug the program and at the position : SaveStateTask.run  
> "futureSerializedState.get(1000, TimeUnit.MILLISECONDS)." The futureTask get 
> "CancellationException" displayed above error. 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to