[
https://issues.apache.org/jira/browse/STORM-173?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13972014#comment-13972014
]
ASF GitHub Bot commented on STORM-173:
--------------------------------------
Github user revans2 commented on the pull request:
https://github.com/apache/incubator-storm/pull/73#issuecomment-40658465
I am fine with trying to do reflection to get the types, but that does not
fit with lists and maps like you said. Why don't we just use JSON, like we do
on other parts of the config? It is not strictly backwards compatible, but it
allows for fairly arbitrary complexity, and the null check allows for things
that JSON cannot parse to still be treated as a string.
```
diff --git a/storm-core/src/jvm/backtype/storm/utils/Utils.java
b/storm-core/src/jvm/backtype/storm/utils/Utils.java
index 7979e4b..6c8d2cf 100644
--- a/storm-core/src/jvm/backtype/storm/utils/Utils.java
+++ b/storm-core/src/jvm/backtype/storm/utils/Utils.java
@@ -168,9 +168,13 @@ public class Utils {
commandOptions = commandOptions.replaceAll("%%%%", " ");
String[] configs = commandOptions.split(",");
for (String config : configs) {
- String[] options = config.split("=");
+ String[] options = config.split("=", 2);
if (options.length == 2) {
- ret.put(options[0], options[1]);
+ Object val = JSONValue.parse(options[1]);
+ if (val == null) {
+ val = options[1];
+ }
+ ret.put(options[0], val);
}
}
}
```
> use "-c " command to define Number config value will generate
> ClassCastException
> --------------------------------------------------------------------------------
>
> Key: STORM-173
> URL: https://issues.apache.org/jira/browse/STORM-173
> Project: Apache Storm (Incubating)
> Issue Type: New Feature
> Reporter: caofangkun
> Priority: Minor
>
> storm -c topology.workers=3 -c storm.zookeeper.root=/storm/cluster001 jar
> ./storm-starter-0.0.1-SNAPSHOT.jar storm.starter.WordCountTopology2
> WordCountTopology2
> Will generate SerConf like this :
> Submitting topology WordCountTopology2 in distributed mode with conf
> {"storm.zookeeper.root":"\/storm\/cluster001","topology.workers":"3","topology.debug":true}
> but "topology.workers":"3" is wrong and should be "topology.workers":3
> And can find errors in $STOMR_HOME/logs/nimbus.log as following:
> 2013-12-10 11:18:44 o.a.t.s.TNonblockingServer [ERROR] Unexpected exception
> while invoking!
> java.lang.ClassCastException: java.lang.String cannot be cast to
> java.lang.Number
> at backtype.storm.thrift$mk_plain_component_common.doInvoke(thrift.clj:93)
> ~[storm-core-0.9.0-rc2.jar:na]
> at clojure.lang.RestFn.invoke(RestFn.java:494) ~[clojure-1.4.0.jar:na]
> at backtype.storm.thrift$mk_bolt_spec_STAR_.doInvoke(thrift.clj:158)
> ~[storm-core-0.9.0-rc2.jar:na]
> at clojure.lang.RestFn.invoke(RestFn.java:573) ~[clojure-1.4.0.jar:na]
> at backtype.storm.daemon.common$add_acker_BANG_.invoke(common.clj:183)
> ~[storm-core-0.9.0-rc2.jar:na]
> at backtype.storm.daemon.common$system_topology_BANG_.invoke(common.clj:280)
> ~[storm-core-0.9.0-rc2.jar:na]
> at
> backtype.storm.daemon.nimbus$fn__5822$exec_fn__1273__auto__$reify__5835.submitTopologyWithOpts(nimbus.clj:931)
> ~[storm-core-0.9.0-rc2.jar:na]
> at
> backtype.storm.daemon.nimbus$fn__5822$exec_fn__1273__auto__$reify__5835.submitTopology(nimbus.clj:949)
> ~[storm-core-0.9.0-rc2.jar:na]
> at
> backtype.storm.generated.Nimbus$Processor$submitTopology.getResult(Nimbus.java:1223)
> ~[storm-core-0.9.0-rc2.jar:na]
> at
> backtype.storm.generated.Nimbus$Processor$submitTopology.getResult(Nimbus.java:1211)
> ~[storm-core-0.9.0-rc2.jar:na]
> at org.apache.thrift7.ProcessFunction.process(ProcessFunction.java:32)
> ~[libthrift7-0.7.0-2.jar:0.7.0-2]
> at org.apache.thrift7.TBaseProcessor.process(TBaseProcessor.java:34)
> ~[libthrift7-0.7.0-2.jar:0.7.0-2]
> at
> org.apache.thrift7.server.TNonblockingServer$FrameBuffer.invoke(TNonblockingServer.java:632)
> ~[libthrift7-0.7.0-2.jar:0.7.0-2]
> at org.apache.thrift7.server.THsHaServer$Invocation.run(THsHaServer.java:201)
> [libthrift7-0.7.0-2.jar:0.7.0-2]
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> [na:1.6.0_37]
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> [na:1.6.0_37]
> at java.lang.Thread.run(Thread.java:662) [na:1.6.0_37]
--
This message was sent by Atlassian JIRA
(v6.2#6252)