Kevin Minder created KNOX-709:
---------------------------------
Summary: HBase request URLs must not be URL encoded
Key: KNOX-709
URL: https://issues.apache.org/jira/browse/KNOX-709
Project: Apache Knox
Issue Type: Bug
Reporter: Kevin Minder
A recent change to deal with URL encoding seems to have caused an issue with
HBase. Ultimately this appears to be a problem with HBase improperly decoding
a URL but this needs to be accounted for in Knox. You can see from the audit
log output below that colons and commas in the URL path are being encoded and
HBase appears to be decoding them improperly.
{code}
16/04/12 13:40:24
||20f26ac5-f2ea-4b41-8050-9bbbfc08f660|audit|WEBHBASE|guest|||dispatch|uri|http://localhost:60080/test_table/*/family1%3Arow2_col1%2Cfamily2%3A/0%2C9223372036854775807?v=1&user.name=guest|success|Response
status: 500
16/04/12 13:40:24
||20f26ac5-f2ea-4b41-8050-9bbbfc08f660|audit|WEBHBASE|guest|||access|uri|/gateway/sandbox/hbase/test_table/*/family1:row2_col1,family2:/0,9223372036854775807?v=1|success|Response
status: 500
{code}
This results in failures containing this message found but enabling HTTP client
logging.
{code}
<h3>Caused by:</h3><pre>java.lang.NumberFormatException: For input string:
"0,9223372036854775807"
at
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:441)
at java.lang.Long.valueOf(Long.java:540)
at org.apache.hadoop.hbase.rest.RowSpec.parseTimestamp(RowSpec.java:167)
at org.apache.hadoop.hbase.rest.RowSpec.<init>(RowSpec.java:62)
at
org.apache.hadoop.hbase.rest.RowResource.<init>(RowResource.java:77)
at
org.apache.hadoop.hbase.rest.TableResource.getRowResourceWithSuffixGlobbing(TableResource.java:119)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at
com.sun.jersey.server.impl.uri.rules.SubLocatorRule.invokeSubLocator(SubLocatorRule.java:180)
at
com.sun.jersey.server.impl.uri.rules.SubLocatorRule.accept(SubLocatorRule.java:107)
at
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at
com.sun.jersey.server.impl.uri.rules.SubLocatorRule.accept(SubLocatorRule.java:134)
at
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at
com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
at
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at
com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
at
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)
at
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)
at
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
at
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
at
com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
at
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
at
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1221)
at
org.apache.hadoop.hbase.rest.filter.GzipFilter.doFilter(GzipFilter.java:76)
at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399)
at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:767)
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.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
at
org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)