[ 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)