1. HBase
  2. HBASE-10088

SecureClient will hang when access secure-disabled cluster


    • Type: Improvement Improvement
    • Status: Patch Available
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: 0.94.14
    • Fix Version/s: None
    • Component/s: Client, security
    • Labels:


      When I misuse a secure hbase client to access a secure-disabled hbase server, I found the client will hang. The reason is that client will firstly invoke rpc method "getProtocolVersion", and the response from a secure-disabled server won't contain necessary fields processed by SecureClient. SecureClient will process the response as follows : (from SecureClient.receiveResponse()):

      if (state == Status.SUCCESS.state) {
                Writable value = ReflectionUtils.newInstance(valueClass, conf);
                value.readFields(in);                 // read value
                if (LOG.isDebugEnabled()) {
                  LOG.debug("call #"+id+", response is:\n"+value.toString());
                // it's possible that this call may have been cleaned up due to a RPC
                // timeout, so check if it still exists before setting the value.
                if (call != null) {
              } else if (state == Status.ERROR.state) {
                if (call != null) {
                  call.setException(new RemoteException(WritableUtils.readString(in), WritableUtils
              } else if (state == Status.FATAL.state) {
                RemoteException exception = new RemoteException(WritableUtils.readString(in),
                // the call will be removed from call map, we must set Exception here to notify
                // the thread waited on the call
                if (call != null) {
                // Close the connection

      As the above code, SecureClient need to read 'state' field from response. If the response is from a secure-disabled server, there will no 'state' field in response and SecureClient will get an illegal 'state', then the call will be removed from cached calls without notifying waiting thread. This will make the invoker waiting all the time. Although we should not use secure client to access secure-disabled server, users might encounter this situation because of misusing or error configuration. If the client will hang in this situation, users might not know the error quickly. Maybe, it is better to report an error in this situation so that users will know what happens quickly.

      1. HBASE-10088-0.94-v2.patch
        0.8 kB
        Jianwei Cui
      2. HBASE-10088-0.94-v2.patch
        0.8 kB
        Andrew Purtell
      3. HBASE-10088-0.94-v1.patch
        0.9 kB
        Jianwei Cui


        Jianwei Cui created issue -
        Jianwei Cui made changes -
        Field Original Value New Value
        Attachment HBASE-10088-0.94-v1.patch [ 12617157 ]
        Jianwei Cui made changes -
        Attachment HBASE-10088-0.94-v2.patch [ 12617297 ]
        Andrew Purtell made changes -
        Attachment HBASE-10088-0.94-v2.patch [ 12617318 ]
        Liang Xie made changes -
        Assignee cuijianwei [ cuijianwei ]
        Liang Xie made changes -
        Status Open [ 1 ] Patch Available [ 10002 ]


          • Assignee:
            Jianwei Cui
            Jianwei Cui
          • Votes:
            0 Vote for this issue
            6 Start watching this issue


            • Created: