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/09/22 23:16:22 UTC

svn commit: r698001 - in /hadoop/hbase/trunk: CHANGES.txt bin/HBase.rb bin/hirb.rb src/java/org/apache/hadoop/hbase/client/HBaseAdmin.java src/java/org/apache/hadoop/hbase/rest/GenericHandler.java src/java/org/apache/hadoop/hbase/rest/TableHandler.java

Author: stack
Date: Mon Sep 22 14:16:21 2008
New Revision: 698001

URL: http://svn.apache.org/viewvc?rev=698001&view=rev
Log:
HBASE-890  alter table operation and also related changes in REST interface

Modified:
    hadoop/hbase/trunk/CHANGES.txt
    hadoop/hbase/trunk/bin/HBase.rb
    hadoop/hbase/trunk/bin/hirb.rb
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/rest/GenericHandler.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/rest/TableHandler.java

Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=698001&r1=698000&r2=698001&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Mon Sep 22 14:16:21 2008
@@ -1,4 +1,16 @@
 HBase Change Log
+Release 0.19.0 - Unreleased
+  INCOMPATIBLE CHANGES
+
+  BUG FIXES
+
+  IMPROVEMENTS
+   HBASE-890   Alter table operation and also related changes in REST interface
+               (Sishen Freecity via Stack)
+
+  NEW FEATURES
+
+  OPTIMIZATIONS
 
 Release 0.18.0 - September 21st, 2008
 

Modified: hadoop/hbase/trunk/bin/HBase.rb
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/bin/HBase.rb?rev=698001&r1=698000&r2=698001&view=diff
==============================================================================
--- hadoop/hbase/trunk/bin/HBase.rb (original)
+++ hadoop/hbase/trunk/bin/HBase.rb Mon Sep 22 14:16:21 2008
@@ -30,6 +30,7 @@
   STARTROW = "STARTROW"
   ENDROW = STOPROW
   LIMIT = "LIMIT"
+  METHOD = "METHOD"
 
   # Wrapper for org.apache.hadoop.hbase.client.HBaseAdmin
   class Admin
@@ -123,11 +124,22 @@
     end
 
     def alter(tableName, args)
-      now = Time.now 
+      now = Time.now
       raise TypeError.new("Table name must be of type String") \
         unless tableName.instance_of? String
-      descriptor = hcd(args)
-      @admin.modifyColumn(tableName, descriptor.getNameAsString(), descriptor);
+      htd = @admin.getTableDescriptor(tableName.to_java_bytes)
+      method = args.delete(METHOD)
+      if method == "delete"
+        @admin.deleteColumn(tableName, makeColumnName(args[NAME]))
+      else
+        descriptor = hcd(args) 
+        if (htd.hasFamily(descriptor.getNameAsString().to_java_bytes))
+          @admin.modifyColumn(tableName, descriptor.getNameAsString(), 
+                              descriptor);
+        else
+          @admin.addColumn(tableName, descriptor);
+        end
+      end
       @formatter.header()
       @formatter.footer(now)
     end

Modified: hadoop/hbase/trunk/bin/hirb.rb
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/bin/hirb.rb?rev=698001&r1=698000&r2=698001&view=diff
==============================================================================
--- hadoop/hbase/trunk/bin/hirb.rb (original)
+++ hadoop/hbase/trunk/bin/hirb.rb Mon Sep 22 14:16:21 2008
@@ -108,12 +108,15 @@
  alter     Alter column family schema;  pass table name and a dictionary
            specifying new column family schema. Dictionaries are described
            below in the GENERAL NOTES section.  Dictionary must include name
-           of column family to alter.  For example, to change the 'f1' column
-           family in table 't1' from defaults to instead keep a maximum of 5
-           cell VERSIONS, do:
-
+           of column family to alter.  For example, 
+           
+           To change or add the 'f1' column family in table 't1' from defaults
+           to instead keep a maximum of 5 cell VERSIONS, do:
            hbase> alter 't1', {NAME => 'f1', VERSIONS => 5}
            
+           To delete the 'f1' column family in table 't1', do:
+           hbase> alter 't1', {NAME => 'f1', METHOD => 'delete'}
+           
  count     Count the number of rows in a table. This operation may take a LONG
            time (Run '$HADOOP_HOME/bin/hadoop jar hbase.jar rowcount' to run a
            counting mapreduce job). Current count is shown every 1000 rows by

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HBaseAdmin.java?rev=698001&r1=698000&r2=698001&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HBaseAdmin.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HBaseAdmin.java Mon Sep 22 14:16:21 2008
@@ -117,6 +117,16 @@
     return this.connection.listTables();
   }
 
+  public HTableDescriptor getTableDescriptor(final String tableName)
+  throws IOException {
+    return getTableDescriptor(Bytes.toBytes(tableName));
+  }
+  
+  public HTableDescriptor getTableDescriptor(final byte [] tableName)
+  throws IOException {
+    return this.connection.getHTableDescriptor(tableName);
+  }
+  
   private long getPauseTime(int tries) {
     if (tries >= HConstants.RETRY_BACKOFF.length)
       tries = HConstants.RETRY_BACKOFF.length - 1;

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/rest/GenericHandler.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/rest/GenericHandler.java?rev=698001&r1=698000&r2=698001&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/rest/GenericHandler.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/rest/GenericHandler.java Mon Sep 22 14:16:21 2008
@@ -279,4 +279,10 @@
   protected HTable getTable(final String tableName) throws IOException {
     return new HTable(this.conf, Bytes.toBytes(tableName));
   }
+  
+  protected String makeColumnName(String column) {
+   if (column.indexOf(':') == -1)
+     column += ':';
+   return column;
+  }
 }

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/rest/TableHandler.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/rest/TableHandler.java?rev=698001&r1=698000&r2=698001&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/rest/TableHandler.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/rest/TableHandler.java Mon Sep 22 14:16:21 2008
@@ -239,10 +239,22 @@
   }
   
   private void deleteTable(HttpServletRequest request,
-      HttpServletResponse response, String[] pathSegments) throws IOException {
-    String tableName = pathSegments[0];
-    admin.deleteTable(tableName);
-    response.setStatus(202);
+      HttpServletResponse response, String[] pathSegments)
+  throws ServletException {
+    try {
+      String tableName = pathSegments[0];
+      String[] column_params = request.getParameterValues(COLUMN);
+      if (column_params != null && column_params.length > 0) {
+        for (String column : column_params) {
+          admin.deleteColumn(tableName, makeColumnName(column));
+        }
+      } else {
+        admin.deleteTable(tableName);
+      }
+      response.setStatus(202);
+    } catch (Exception e) {
+      throw new ServletException(e);
+    }
   }  
   
   private void putTableXml(HttpServletRequest 
@@ -303,12 +315,18 @@
 
     try {
       String tableName = pathSegments[0];
-
+      HTableDescriptor htd = admin.getTableDescriptor(tableName);
+      
       NodeList columnfamily_nodes = doc.getElementsByTagName("columnfamily");
+
       for (int i = 0; i < columnfamily_nodes.getLength(); i++) {
         Element columnfamily = (Element) columnfamily_nodes.item(i);
         HColumnDescriptor hcd = putColumnFamilyXml(columnfamily);
-        admin.modifyColumn(tableName, hcd.getNameAsString(), hcd);
+        if (htd.hasFamily(Bytes.toBytes(hcd.getNameAsString()))) {
+          admin.modifyColumn(tableName, hcd.getNameAsString(), hcd);
+        } else {
+          admin.addColumn(tableName, hcd);
+        }
       }
     } catch (Exception e) {
       throw new ServletException(e);
@@ -317,11 +335,7 @@
   
   private HColumnDescriptor putColumnFamilyXml(Element columnfamily) {
     Node name_node = columnfamily.getElementsByTagName("name").item(0);
-    String colname = name_node.getFirstChild().getNodeValue();
-    
-    if (colname.indexOf(":") == -1) {
-      colname += ":";
-    }
+    String colname = makeColumnName(name_node.getFirstChild().getNodeValue());
     
     int max_versions = HColumnDescriptor.DEFAULT_VERSIONS;
     NodeList max_versions_list = columnfamily.getElementsByTagName("max-versions");
@@ -358,6 +372,7 @@
     if (bloomfilter_list.getLength() > 0) {
       bloomfilter = Boolean.valueOf(bloomfilter_list.item(0).getFirstChild().getNodeValue());
     }
-    return new HColumnDescriptor(Bytes.toBytes(colname), max_versions, compression, in_memory, block_cache, max_cell_size, ttl, bloomfilter);
+    return new HColumnDescriptor(Bytes.toBytes(colname), max_versions,
+        compression, in_memory, block_cache, max_cell_size, ttl, bloomfilter);
   }
 }