[ 
https://issues.apache.org/jira/browse/STORM-91?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Rick Kellogg updated STORM-91:
------------------------------
    Component/s: storm-core

> Registering already registered serializations causes strange runtime errors
> ---------------------------------------------------------------------------
>
>                 Key: STORM-91
>                 URL: https://issues.apache.org/jira/browse/STORM-91
>             Project: Apache Storm
>          Issue Type: Bug
>          Components: storm-core
>            Reporter: James Xu
>
> https://github.com/nathanmarz/storm/issues/279
> e.g. if registering String:
> java.lang.RuntimeException: com.esotericsoftware.kryo.KryoException: 
> java.lang.IllegalArgumentException: Class is not registered: char[]
> Note: To register this class use: kryo.register(char[].class);
> Serialization trace:
> value (java.lang.String)
>     at 
> backtype.storm.utils.DisruptorQueue.consumeBatchToCursor(DisruptorQueue.java:82)
>     at 
> backtype.storm.utils.DisruptorQueue.consumeBatchWhenAvailable(DisruptorQueue.java:55)
>     at 
> backtype.storm.disruptor$consume_batch_when_available.invoke(disruptor.clj:56)
>     at 
> backtype.storm.disruptor$consume_loop_STAR_$fn__1596.invoke(disruptor.clj:67)
>     at backtype.storm.util$async_loop$fn__465.invoke(util.clj:377)
>     at clojure.lang.AFn.run(AFn.java:24)
>     at java.lang.Thread.run(Thread.java:662)
> Caused by: com.esotericsoftware.kryo.KryoException: 
> java.lang.IllegalArgumentException: Class is not registered: char[]
> Note: To register this class use: kryo.register(char[].class);
> Serialization trace:
> value (java.lang.String)
>     at 
> com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:495)
>     at 
> com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:213)
>     at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:554)
>     at 
> com.esotericsoftware.kryo.serializers.CollectionSerializer.write(CollectionSerializer.java:77)
>     at 
> com.esotericsoftware.kryo.serializers.CollectionSerializer.write(CollectionSerializer.java:18)
>     at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:472)
>     at 
> backtype.storm.serialization.KryoValuesSerializer.serializeInto(KryoValuesSerializer.java:27)
>     at 
> backtype.storm.serialization.KryoTupleSerializer.serialize(KryoTupleSerializer.java:27)
>     at 
> backtype.storm.daemon.worker$mk_transfer_fn$fn__4120$fn__4124.invoke(worker.clj:99)
>     at backtype.storm.util$fast_list_map.invoke(util.clj:770)
>     at 
> backtype.storm.daemon.worker$mk_transfer_fn$fn__4120.invoke(worker.clj:99)
>     at 
> backtype.storm.daemon.executor$start_batch_transfer__GT_worker_handler_BANG_$fn__3898.invoke(executor.clj:205)
>     at 
> backtype.storm.disruptor$clojure_handler$reify__1584.onEvent(disruptor.clj:43)
>     at 
> backtype.storm.utils.DisruptorQueue.consumeBatchToCursor(DisruptorQueue.java:79)
>     ... 6 more
> Caused by: java.lang.IllegalArgumentException: Class is not registered: char[]
> Note: To register this class use: kryo.register(char[].class);
>     at com.esotericsoftware.kryo.Kryo.getRegistration(Kryo.java:426)
>     at com.esotericsoftware.kryo.Kryo.getSerializer(Kryo.java:446)
>     at 
> com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:477)
>     ... 19 more
> This error catching should happen at registration time (ideally in Kryo 
> itself). Or, even better, Storm should allow duplicate registrations and skip 
> any duplicates when initializing Kryo. This is consistent with how 
> serialization registration works w.r.t. component configs.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to