You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2008/07/08 07:24:37 UTC

svn commit: r674724 - in /hadoop/hbase/trunk: CHANGES.txt src/java/org/apache/hadoop/hbase/client/HTable.java src/java/org/apache/hadoop/hbase/regionserver/HRegion.java src/test/org/apache/hadoop/hbase/client/TestHTable.java

Author: stack
Date: Mon Jul  7 22:24:36 2008
New Revision: 674724

URL: http://svn.apache.org/viewvc?rev=674724&view=rev
Log:
HBASE-631 HTable.getRow() for only a column family

Modified:
    hadoop/hbase/trunk/CHANGES.txt
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HTable.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
    hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/client/TestHTable.java

Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=674724&r1=674723&r2=674724&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Mon Jul  7 22:24:36 2008
@@ -261,6 +261,8 @@
    HBASE-536   Remove MiniDFS startup from MiniHBaseCluster
    HBASE-521   Improve client scanner interface
    HBASE-562   Move Exceptions to subpackages (Jean-Daniel Cryans via Stack)
+   HBASE-631   HTable.getRow() for only a column family
+               (Jean-Daniel Cryans via Stack)
 
   NEW FEATURES
    HBASE-47    Option to set TTL for columns in hbase

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HTable.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HTable.java?rev=674724&r1=674723&r2=674724&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HTable.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HTable.java Mon Jul  7 22:24:36 2008
@@ -544,7 +544,7 @@
    * Get selected columns for the specified row at the latest timestamp
    * 
    * @param row row key
-   * @param columns Array of column names you want to retrieve.
+   * @param columns Array of column names and families you want to retrieve.
    * @return RowResult is empty if row does not exist.
    * @throws IOException
    */
@@ -557,7 +557,7 @@
    * Get selected columns for the specified row at the latest timestamp
    * 
    * @param row row key
-   * @param columns Array of column names you want to retrieve.
+   * @param columns Array of column names and families you want to retrieve.
    * @return RowResult is empty if row does not exist.
    * @throws IOException
    */
@@ -570,7 +570,7 @@
    * Get selected columns for the specified row at the latest timestamp
    * 
    * @param row row key
-   * @param columns Array of column names you want to retrieve.
+   * @param columns Array of column names and families you want to retrieve.
    * @return RowResult is empty if row does not exist.
    * @throws IOException
    */
@@ -583,7 +583,7 @@
    * Get selected columns for the specified row at a specified timestamp
    * 
    * @param row row key
-   * @param columns Array of column names you want to retrieve.   
+   * @param columns Array of column names and families you want to retrieve.
    * @param ts timestamp
    * @return RowResult is empty if row does not exist.
    * @throws IOException
@@ -598,7 +598,7 @@
    * Get selected columns for the specified row at a specified timestamp
    * 
    * @param row row key
-   * @param columns Array of column names you want to retrieve.   
+   * @param columns Array of column names and families you want to retrieve.
    * @param ts timestamp
    * @return RowResult is empty if row does not exist.
    * @throws IOException
@@ -613,7 +613,7 @@
    * Get selected columns for the specified row at a specified timestamp
    * 
    * @param row row key
-   * @param columns Array of column names you want to retrieve.   
+   * @param columns Array of column names and families you want to retrieve.
    * @param ts timestamp
    * @return RowResult is empty if row does not exist.
    * @throws IOException

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java?rev=674724&r1=674723&r2=674724&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java Mon Jul  7 22:24:36 2008
@@ -1160,6 +1160,17 @@
       for (HStore targetStore: stores.values()) {
         targetStore.getFull(key, columns, result);
       }
+      // Previous step won't fetch whole families: HBASE-631.
+      // For each column name that is just a column family, open the store
+      // related to it and fetch everything for that row. 
+      if (columns != null) {
+        for (byte[] bs : columns) {
+          if (HStoreKey.getFamilyDelimiterIndex(bs) == (bs.length - 1)) {
+            HStore store = stores.get(Bytes.mapKey(HStoreKey.getFamily(bs)));
+            store.getFull(key, null, result);
+          }
+        }
+      }
       return result;
     } finally {
       releaseRowLock(lid);

Modified: hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/client/TestHTable.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/client/TestHTable.java?rev=674724&r1=674723&r2=674724&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/client/TestHTable.java (original)
+++ hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/client/TestHTable.java Mon Jul  7 22:24:36 2008
@@ -21,7 +21,6 @@
 
 import java.io.IOException;
 import java.util.Map;
-
 import org.apache.hadoop.hbase.HBaseClusterTestCase;
 import org.apache.hadoop.hbase.HColumnDescriptor;
 import org.apache.hadoop.hbase.HConstants;
@@ -148,8 +147,6 @@
     */
   public void testTableNotFoundExceptionWithATable() {
     try {
-      HColumnDescriptor column =
-        new HColumnDescriptor(COLUMN_FAMILY);
       HBaseAdmin admin = new HBaseAdmin(conf);
       HTableDescriptor testTableADesc =
         new HTableDescriptor("table");
@@ -169,4 +166,50 @@
     }
   }
   
+  public void testGetRow() {
+    HTable table = null;
+    try {
+      HColumnDescriptor column2 =
+        new HColumnDescriptor(Bytes.toBytes("info2:"));
+      HBaseAdmin admin = new HBaseAdmin(conf);
+      HTableDescriptor testTableADesc =
+        new HTableDescriptor(tableAname);
+      testTableADesc.addFamily(column);
+      testTableADesc.addFamily(column2);
+      admin.createTable(testTableADesc);
+      
+      table = new HTable(conf, tableAname);
+      BatchUpdate batchUpdate = new BatchUpdate(row);
+      
+      for(int i = 0; i < 5; i++)
+        batchUpdate.put(COLUMN_FAMILY_STR+i, Bytes.toBytes(i));
+      
+      table.commit(batchUpdate);
+      
+      RowResult result = null;
+      result = table.getRow(row,  new byte[][] {COLUMN_FAMILY});
+      for(int i = 0; i < 5; i++)
+        assertTrue(result.containsKey(Bytes.toBytes(COLUMN_FAMILY_STR+i)));
+      
+      result = table.getRow(row);
+      for(int i = 0; i < 5; i++)
+        assertTrue(result.containsKey(Bytes.toBytes(COLUMN_FAMILY_STR+i)));
+
+      batchUpdate = new BatchUpdate(row);
+      batchUpdate.put("info2:a", Bytes.toBytes("a"));
+      table.commit(batchUpdate);
+      
+      result = table.getRow(row, new byte[][] { COLUMN_FAMILY,
+          Bytes.toBytes("info2:a") });
+      for(int i = 0; i < 5; i++)
+        assertTrue(result.containsKey(Bytes.toBytes(COLUMN_FAMILY_STR+i)));
+      assertTrue(result.containsKey(Bytes.toBytes("info2:a")));
+   
+    } catch (IOException e) {
+      e.printStackTrace();
+      fail("Should not have any exception " +
+        e.getClass());
+    }
+  }
+  
 }