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)

Reply via email to