James Xu created STORM-91:
-----------------------------
Summary: Registering already registered serializations causes
strange runtime errors
Key: STORM-91
URL: https://issues.apache.org/jira/browse/STORM-91
Project: Apache Storm (Incubating)
Issue Type: Bug
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.1.4#6159)