Uploaded image for project: 'HBase'
  1. HBase
  2. HBASE-757

REST mangles table names

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 0.2.0
    • None
    • None

    Description

      From Sishen:

      Hi, guys. I think i have met the problem of table query.
      
      When playing with the REST interface, the result is all the table name are un-readable format and i can't get the table metadata.
      
      After some debug, i found that if use table.getName().toString() to construct the table name string. However, getName() return a byte array. So toString() method
      jsut return the string representation of the array object.  The correct way should be new String(table.getName()). I have tested it and all work well now.
      
      Below are patches:
      
      Index: org/apache/hadoop/hbase/rest/MetaHandler.java
      ===================================================================
      --- org/apache/hadoop/hbase/rest/MetaHandler.java    (revision 678344)
      +++ org/apache/hadoop/hbase/rest/MetaHandler.java    (working copy)
      @@ -85,7 +85,7 @@
                 XMLOutputter outputter = getXMLOutputter(response.getWriter());
                 outputter.startTag("tables");
                 for (int i = 0; i < tables.length; i++) {
      -            doElement(outputter, "table", tables[i].getName().toString());
      +            doElement(outputter, "table", new String(tables[i].getName()));
                 }
                 outputter.endTag();
                 outputter.endDocument();
      @@ -96,7 +96,7 @@
                   ContentType.PLAIN.toString());
                 PrintWriter out = response.getWriter();
                 for (int i = 0; i < tables.length; i++) {
      -            out.println(tables[i].getName().toString());
      +            out.println(new String(tables[i].getName()));
                 }
                 out.close();
               break;
      Index: org/apache/hadoop/hbase/rest/TableHandler.java
      ===================================================================
      --- org/apache/hadoop/hbase/rest/TableHandler.java    (revision 678344)
      +++ org/apache/hadoop/hbase/rest/TableHandler.java    (working copy)
      @@ -391,7 +391,7 @@
           HTableDescriptor [] tables = this.admin.listTables();
           HTableDescriptor descriptor = null;
           for (int i = 0; i < tables.length; i++) {
      -      if (tables[i].getName().toString().equals(tableName)) {
      +      if (new String(tables[i].getName()).equals(tableName)) {
               descriptor = tables[i];
               break;
             }
      @@ -406,7 +406,7 @@
               setResponseHeader(response, 200, ContentType.XML.toString());
               XMLOutputter outputter = getXMLOutputter(response.getWriter());
               outputter.startTag("table");
      -        doElement(outputter, "name", descriptor.getName().toString());
      +        doElement(outputter, "name", new String(descriptor.getName()));
               outputter.startTag("columnfamilies");
               for (HColumnDescriptor e: descriptor.getFamilies()) {
                 outputter.startTag("columnfamily");
      
      
      Best regards.
      
      sishen
      
      
      
      Index: org/apache/hadoop/hbase/rest/MetaHandler.java
      ===================================================================
      --- org/apache/hadoop/hbase/rest/MetaHandler.java	(revision 678344)
      +++ org/apache/hadoop/hbase/rest/MetaHandler.java	(working copy)
      @@ -85,7 +85,7 @@
                 XMLOutputter outputter = getXMLOutputter(response.getWriter());
                 outputter.startTag("tables");
                 for (int i = 0; i < tables.length; i++) {
      -            doElement(outputter, "table", tables[i].getName().toString());
      +            doElement(outputter, "table", new String(tables[i].getName()));
                 }
                 outputter.endTag();
                 outputter.endDocument();
      @@ -96,7 +96,7 @@
                   ContentType.PLAIN.toString());
                 PrintWriter out = response.getWriter();
                 for (int i = 0; i < tables.length; i++) {
      -            out.println(tables[i].getName().toString());
      +            out.println(new String(tables[i].getName()));
                 }
                 out.close();
               break;
      Index: org/apache/hadoop/hbase/rest/TableHandler.java
      ===================================================================
      --- org/apache/hadoop/hbase/rest/TableHandler.java	(revision 678344)
      +++ org/apache/hadoop/hbase/rest/TableHandler.java	(working copy)
      @@ -391,7 +391,7 @@
           HTableDescriptor [] tables = this.admin.listTables();
           HTableDescriptor descriptor = null;
           for (int i = 0; i < tables.length; i++) {
      -      if (tables[i].getName().toString().equals(tableName)) {
      +      if (new String(tables[i].getName()).equals(tableName)) {
               descriptor = tables[i];
               break;
             }
      @@ -406,7 +406,7 @@
               setResponseHeader(response, 200, ContentType.XML.toString());
               XMLOutputter outputter = getXMLOutputter(response.getWriter());
               outputter.startTag("table");
      -        doElement(outputter, "name", descriptor.getName().toString());
      +        doElement(outputter, "name", new String(descriptor.getName()));
               outputter.startTag("columnfamilies");
               for (HColumnDescriptor e: descriptor.getFamilies()) {
                 outputter.startTag("columnfamily");
      
      

      Attachments

        Activity

          People

            stack Michael Stack
            stack Michael Stack
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: