Dear Folks, Anyone using REST client operations in Kerberos secure cluster.
We are facing multiple issues while preforming RemoteAdmin/RemoteHTable (REST client) operations in a Kerberos secured cluster. Issue - 1: Client received below exception, java.lang.IllegalStateException: Invalid use of BasicClientConnManager: connection still allocated. Make sure to release the connection before allocating another one. at org.apache.http.util.Asserts.check(Asserts.java:34) at org.apache.http.impl.conn.BasicClientConnectionManager.getConnection(BasicClientConnectionManager.java:163) at org.apache.http.impl.conn.BasicClientConnectionManager$1.getConnection(BasicClientConnectionManager.java:145) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:422) at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) at org.apache.hadoop.hbase.rest.client.Client.executeURI(Client.java:240) at org.apache.hadoop.hbase.rest.client.Client.executePathOnly(Client.java:204) at org.apache.hadoop.hbase.rest.client.Client.execute(Client.java:265) at org.apache.hadoop.hbase.rest.client.Client.get(Client.java:459) at org.apache.hadoop.hbase.rest.client.Client.get(Client.java:391) at org.apache.hadoop.hbase.rest.client.Client.get(Client.java:376) at org.apache.hadoop.hbase.rest.client.RemoteAdmin.isTableAvailable(RemoteAdmin.java:254) at org.apache.hadoop.hbase.rest.client.RemoteAdmin.isTableAvailable(RemoteAdmin.java:99) Soln: Need to consume the response before negotiate at Client.executeURI(..) https://github.com/apache/hbase/blob/3180a6864aa6a019fc1ec21ae78f009475bacea1/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/client/Client.java#L236 {code} EntityUtils.consumeQuietly(resp.getEntity()); {code} Issue - 2: ServerHolder is not initialized with RESTServletContainer, https://github.com/apache/hbase/blob/3180a6864aa6a019fc1ec21ae78f009475bacea1/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/RESTServer.java#L248 Soln: ServletHolder should be initialized as, {code} ServletHolder sh = new ServletHolder(new RESTServletContainer(application)); {code} Issue - 3: GET (ExistsResource, ) request is working fine but none of the PUT/POST request are working. Client is getting below exception always, {noformat} Exception in thread "main" java.security.PrivilegedActionException: org.apache.http.NoHttpResponseException: host-name:port failed to respond at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.hbase.rest.RESTDemoClient.main(RESTDemoClient.java:80) Caused by: org.apache.http.NoHttpResponseException: host-name:port failed to respond at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:141) at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56) at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259) at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:281) at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:257) at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:207) at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273) at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125) at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:684) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:486) at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) at org.apache.hadoop.hbase.rest.client.Client.executeURI(Client.java:257) at org.apache.hadoop.hbase.rest.client.Client.executePathOnly(Client.java:216) at org.apache.hadoop.hbase.rest.client.Client.execute(Client.java:282) at org.apache.hadoop.hbase.rest.client.Client.put(Client.java:574) at org.apache.hadoop.hbase.rest.client.Client.put(Client.java:521) at org.apache.hadoop.hbase.rest.client.Client.put(Client.java:491) at org.apache.hadoop.hbase.rest.client.RemoteAdmin.createTable(RemoteAdmin.java:294) However I am debugging the code, after negotiation client request never reached to REST server side. Anyone faced Issue-3, any pointer will be very much appreciated. I will raise JIRA to address Issue 1 & 2 soon. Thanks & Regards, Pankaj