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/06/17 23:07:50 UTC

svn commit: r668830 - in /hadoop/hbase/trunk: CHANGES.txt src/java/org/apache/hadoop/hbase/HTableDescriptor.java src/java/org/apache/hadoop/hbase/regionserver/HRegion.java src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java

Author: stack
Date: Tue Jun 17 14:07:50 2008
New Revision: 668830

URL: http://svn.apache.org/viewvc?rev=668830&view=rev
Log:
HBASE-691 get* and getScanner are different in how they treat column parameter

Modified:
    hadoop/hbase/trunk/CHANGES.txt
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HTableDescriptor.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java

Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=668830&r1=668829&r2=668830&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Tue Jun 17 14:07:50 2008
@@ -54,6 +54,7 @@
                reading performance after break it (LN via Stack)
    HBASE-686   MemcacheScanner didn't return the first row(if it exists),
                because HScannerInterface's output incorrect (LN via Jim Kellerman)
+   HBASE-691   get* and getScanner are different in how they treat column parameter
    
   IMPROVEMENTS
    HBASE-559   MR example job to count table rows

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HTableDescriptor.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HTableDescriptor.java?rev=668830&r1=668829&r2=668830&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HTableDescriptor.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HTableDescriptor.java Tue Jun 17 14:07:50 2008
@@ -178,7 +178,16 @@
    * @return true if the table contains the specified family name
    */
   public boolean hasFamily(final byte [] c) {
-    int index = HStoreKey.getFamilyDelimiterIndex(c);
+    return hasFamily(c, HStoreKey.getFamilyDelimiterIndex(c));
+  }
+
+  /**
+   * Checks to see if this table contains the given column family
+   * @param c Family name or column name.
+   * @param index Index to column family delimiter
+   * @return true if the table contains the specified family name
+   */
+  public boolean hasFamily(final byte [] c, final int index) {
     // If index is -1, then presume we were passed a column family name minus
     // the colon delimiter.
     return families.containsKey(Bytes.mapKey(c, index == -1? c.length: index));
@@ -191,7 +200,7 @@
    */
   @Override
   public String toString() {
-    return HColumnDescriptor.NAME + " => '" + Bytes.toString(this.name) +
+    return HConstants.NAME + " => '" + Bytes.toString(this.name) +
       "', " + FAMILIES + " => " + this.families.values();
   }
   

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=668830&r1=668829&r2=668830&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 Tue Jun 17 14:07:50 2008
@@ -43,6 +43,7 @@
 import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hbase.ColumnNameParseException;
 import org.apache.hadoop.hbase.DroppedSnapshotException;
 import org.apache.hadoop.hbase.HBaseConfiguration;
 import org.apache.hadoop.hbase.HColumnDescriptor;
@@ -1141,6 +1142,12 @@
   public Map<byte [], Cell> getFull(final byte [] row,
       final Set<byte []> columns, final long ts) 
   throws IOException {
+    // Check columns passed
+    if (columns != null) {
+      for (byte [] column: columns) {
+        checkColumn(column);
+      }
+    }
     HStoreKey key = new HStoreKey(row, ts);
     Integer lid = obtainRowLock(row);
     try {
@@ -1603,11 +1610,18 @@
    * @throws NoSuchColumnFamilyException
    */
   private void checkColumn(final byte [] columnName)
-  throws NoSuchColumnFamilyException {
+  throws NoSuchColumnFamilyException, ColumnNameParseException {
     if (columnName == null) {
       return;
     }
-    if (!regionInfo.getTableDesc().hasFamily(columnName)) {
+
+    int index = HStoreKey.getFamilyDelimiterIndex(columnName);
+    if (index <= 0) {
+      throw new ColumnNameParseException(Bytes.toString(columnName) +
+        " is missing column family delimiter '" +
+        HStoreKey.COLUMN_FAMILY_DELIMITER + "'");
+    }
+    if (!regionInfo.getTableDesc().hasFamily(columnName, index)) {
       throw new NoSuchColumnFamilyException("Column family on " +
         Bytes.toString(columnName) + " does not exist in region " + this
           + " in table " + regionInfo.getTableDesc());

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java?rev=668830&r1=668829&r2=668830&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java Tue Jun 17 14:07:50 2008
@@ -993,8 +993,7 @@
 
   /** {@inheritDoc} */
   public HRegionInfo getRegionInfo(final byte [] regionName)
-    throws NotServingRegionException {
-    
+  throws NotServingRegionException {
     requestCount.incrementAndGet();
     return getRegion(regionName).getRegionInfo();
   }
@@ -1006,7 +1005,7 @@
     checkOpen();
     requestCount.incrementAndGet();
     try {
-      return getRegion(regionName).get(row, column);      
+      return getRegion(regionName).get(row, column);
     } catch (IOException e) {
       checkFileSystem();
       throw e;