[
https://issues.apache.org/jira/browse/STORM-439?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14087774#comment-14087774
]
Derek Dagit commented on STORM-439:
-----------------------------------
1) For me, the string "destination%5Fbackfill" breaks on master now because the
back-end is looking for the decoded '_'.
2) Interestingly, the string "destination%F5backfill" breaks on master, but not
because the encoding did not happen; it breaks on the client side because %F5
(not %5F as perhaps you meant) does not actually decode. The error comes from
purl.js, where it tries to parse the URI to get the topology ID, but the string
is not able to parse the %F5.
You can see it happen when you call decodeURI('%F5'). When you
decodeURI('%5F'), you just get the underscore.
It seems we 1) are decoding when we shouldn't and 2) neglecting to encode when
we should.
I agree that using either string in a topology name are valid use cases.
> UI unable to view topologies with percent encoded values in id
> --------------------------------------------------------------
>
> Key: STORM-439
> URL: https://issues.apache.org/jira/browse/STORM-439
> Project: Apache Storm (Incubating)
> Issue Type: Bug
> Affects Versions: 0.9.2-incubating
> Reporter: Bryan Baugher
>
> We recently upgraded to 0.9.2 from 0.8.2 or so. One of our topologies had a
> percent encoded value in the id 'destination%F5backfill' (or interpreted
> 'destination_backfill'). The UI is unable to view this topology giving us the
> error,
> {code}
> NotAliveException(msg:destination_backfill-2-1407261676)
> at
> backtype.storm.generated.Nimbus$getTopologyInfo_result.read(Nimbus.java:11347)
> at org.apache.thrift7.TServiceClient.receiveBase(TServiceClient.java:78)
> at
> backtype.storm.generated.Nimbus$Client.recv_getTopologyInfo(Nimbus.java:491)
> at
> backtype.storm.generated.Nimbus$Client.getTopologyInfo(Nimbus.java:478)
> at backtype.storm.ui.core$topology_page.invoke(core.clj:587)
> at backtype.storm.ui.core$fn__8229.invoke(core.clj:796)
> at compojure.core$make_route$fn__3365.invoke(core.clj:93)
> at compojure.core$if_route$fn__3353.invoke(core.clj:39)
> at compojure.core$if_method$fn__3346.invoke(core.clj:24)
> at compojure.core$routing$fn__3371.invoke(core.clj:106)
> at clojure.core$some.invoke(core.clj:2443)
> at compojure.core$routing.doInvoke(core.clj:106)
> at clojure.lang.RestFn.applyTo(RestFn.java:139)
> at clojure.core$apply.invoke(core.clj:619)
> at compojure.core$routes$fn__3375.invoke(core.clj:111)
> at ring.middleware.reload$wrap_reload$fn__7540.invoke(reload.clj:14)
> at backtype.storm.ui.core$catch_errors$fn__8268.invoke(core.clj:858)
> at
> ring.middleware.keyword_params$wrap_keyword_params$fn__4029.invoke(keyword_params.clj:27)
> at
> ring.middleware.nested_params$wrap_nested_params$fn__4068.invoke(nested_params.clj:65)
> at ring.middleware.params$wrap_params$fn__4001.invoke(params.clj:55)
> at
> ring.middleware.multipart_params$wrap_multipart_params$fn__4096.invoke(multipart_params.clj:103)
> at ring.middleware.flash$wrap_flash$fn__4277.invoke(flash.clj:14)
> at ring.middleware.session$wrap_session$fn__4266.invoke(session.clj:43)
> at ring.middleware.cookies$wrap_cookies$fn__4197.invoke(cookies.clj:160)
> at ring.adapter.jetty$proxy_handler$fn__7179.invoke(jetty.clj:16)
> at
> ring.adapter.jetty.proxy$org.mortbay.jetty.handler.AbstractHandler$0.handle(Unknown
> Source)
> at
> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
> at org.mortbay.jetty.Server.handle(Server.java:326)
> at
> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
> at
> org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:928)
> at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
> at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
> at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
> at
> org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
> at
> org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
> {code}
> So it seems the UI is translating the percent encoded value which causes this
> issue. We shouldn't be putting these values in our topologies id in the first
> place but thought I would log this to see if you wanted to try to limit what
> characters are allowed in a topology id.
--
This message was sent by Atlassian JIRA
(v6.2#6252)