You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hbase.apache.org by "sishen.freecity (JIRA)" <ji...@apache.org> on 2008/07/23 08:16:31 UTC

[jira] Updated: (HBASE-764) The name of column request has padding zero using REST interface

     [ https://issues.apache.org/jira/browse/HBASE-764?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

sishen.freecity updated HBASE-764:
----------------------------------

    Status: Patch Available  (was: Open)

> The name of column request has padding zero using REST interface
> ----------------------------------------------------------------
>
>                 Key: HBASE-764
>                 URL: https://issues.apache.org/jira/browse/HBASE-764
>             Project: Hadoop HBase
>          Issue Type: Bug
>          Components: rest
>    Affects Versions: 0.2.0
>         Environment: Debian GNU/Linux,  Java5
>            Reporter: sishen.freecity
>   Original Estimate: 0.5h
>  Remaining Estimate: 0.5h
>
> Today when i play with the REST interface and found the column POST/PUT/GET has a problem.
> When i use the hbase shell to check the data, i found the row name has the padding zero.
> The cause is that TableHandler use Text class to encode the string to the UTF-8. But CharSetEncoder
> will pre-allocate more spaces then the length of String for performance. So we get the padding zero
> when inserting the value to the table.  The fix is to get the String instead of the byte[] for the BatchUpdate.
> Below is the patch.  Also, the patch includes fixing the wrong use of (bytes[]).toString() using Bytes.toString(byte[])
> Index: src/java/org/apache/hadoop/hbase/rest/TableHandler.java
> ===================================================================
> --- src/java/org/apache/hadoop/hbase/rest/TableHandler.java    (revision 678664)
> +++ src/java/org/apache/hadoop/hbase/rest/TableHandler.java    (working copy)
> @@ -174,7 +174,7 @@
>  
>          // copy over those cells with requested column names
>          for(byte [] current_column: columns_retrieved) {
> -          if(requested_columns_set.contains(current_column.toString())){
> +          if(requested_columns_set.contains(Bytes.toString(current_column))){
>              m.put(current_column, prefiltered_result.get(current_column));           
>            }
>          }
> @@ -295,7 +295,7 @@
>     
>      try{
>        // start an update
> -      Text key = new Text(row);
> +      String key = new Text(row).toString();
>        batchUpdate = timestamp == null ?
>          new BatchUpdate(key) : new BatchUpdate(key, Long.parseLong(timestamp));
>  
> @@ -308,7 +308,7 @@
>  
>          // extract the name and value children
>          Node name_node = column.getElementsByTagName("name").item(0);
> -        Text name = new Text(name_node.getFirstChild().getNodeValue());
> +        String name = new Text(name_node.getFirstChild().getNodeValue()).toString();
>  
>          Node value_node = column.getElementsByTagName("value").item(0);
>  
> @@ -356,7 +356,7 @@
>            XMLOutputter outputter = getXMLOutputter(response.getWriter());
>            outputter.startTag("regions");
>            for (int i = 0; i < startKeys.length; i++) {
> -            doElement(outputter, "region", startKeys[i].toString());
> +            doElement(outputter, "region", Bytes.toString(startKeys[i]));
>            }
>            outputter.endTag();
>            outputter.endDocument();
> @@ -368,7 +368,7 @@
>            PrintWriter out = response.getWriter();
>            for (int i = 0; i < startKeys.length; i++) {
>              // TODO: Add in the server location.  Is it needed?
> -            out.print(startKeys[i].toString());
> +            out.print(Bytes.toString(startKeys[i]));
>            }
>            out.close();
>          break;
> @@ -454,7 +454,7 @@
>      // pull the row key out of the path
>      String row = URLDecoder.decode(pathSegments[2], HConstants.UTF8_ENCODING);
>     
> -    Text key = new Text(row);
> +    String key = new Text(row).toString();
>  
>      String[] columns = request.getParameterValues(COLUMN);
>         
> @@ -472,7 +472,7 @@
>        } else{
>          // delete each column in turn     
>          for(int i = 0; i < columns.length; i++){
> -          table.deleteAll(key, new Text(columns[i]));
> +          table.deleteAll(key, new Text(columns[i]).toString());
>          }
>        }
>        response.setStatus(202);

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.