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 2010/08/20 08:25:42 UTC

svn commit: r987385 - in /hbase/branches/0.90_master_rewrite/src: main/java/org/apache/hadoop/hbase/client/ main/java/org/apache/hadoop/hbase/master/ main/java/org/apache/hadoop/hbase/master/handler/ test/java/org/apache/hadoop/hbase/client/

Author: stack
Date: Fri Aug 20 06:25:41 2010
New Revision: 987385

URL: http://svn.apache.org/viewvc?rev=987385&view=rev
Log:
Hooking up table alter methods in HBaseAdmin.  Some exists on server-side.
Some to be written.  In below added mod of table schema with test to
prove it works (we didn't have one previous!).

M src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java
  Mod to table schema test added.  Need to add column family mod next.
M src/main/java/org/apache/hadoop/hbase/master/MasterServices.java
  New interface of Master services.  Easier passing this than the
  individual services as args to handler constructors, etc.
M src/main/java/org/apache/hadoop/hbase/master/HMaster.java
  Implement new MasterServices
M src/main/java/org/apache/hadoop/hbase/master/handler/TableModifyFamilyHandler.java
M src/main/java/org/apache/hadoop/hbase/master/handler/TableAddFamilyHandler.java
M src/main/java/org/apache/hadoop/hbase/master/handler/DeleteTableHandler.java
M src/main/java/org/apache/hadoop/hbase/master/handler/TableDeleteFamilyHandler.java
  Changed parent class constructor params; adjust.
M src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java
  Changed it so we don't check each region is offline figuring if
  table is disable; rather  see if its disabled in zk.
  Changed constructor to take a MasterServices rather than individual
  services.
M src/main/java/org/apache/hadoop/hbase/master/handler/ModifyTableHandler.java
  Added implementation of modify table.
M src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
  Redo modifyTable to suit new master interface.  Cleanup of old means
  of passing splits, etc., still to do.

Added:
    hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java
Modified:
    hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
    hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
    hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/DeleteTableHandler.java
    hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/ModifyTableHandler.java
    hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/TableAddFamilyHandler.java
    hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/TableDeleteFamilyHandler.java
    hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java
    hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/TableModifyFamilyHandler.java
    hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java

Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java?rev=987385&r1=987384&r2=987385&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java Fri Aug 20 06:25:41 2010
@@ -39,6 +39,7 @@ import org.apache.hadoop.hbase.MasterNot
 import org.apache.hadoop.hbase.RegionException;
 import org.apache.hadoop.hbase.RemoteExceptionHandler;
 import org.apache.hadoop.hbase.TableExistsException;
+import org.apache.hadoop.hbase.TableNotDisabledException;
 import org.apache.hadoop.hbase.ZooKeeperConnectionException;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.hadoop.hbase.ipc.HMasterInterface;
@@ -613,8 +614,7 @@ public class HBaseAdmin {
   public void modifyColumn(final String tableName, final String columnName,
       HColumnDescriptor descriptor)
   throws IOException {
-    modifyColumn(Bytes.toBytes(tableName), Bytes.toBytes(columnName),
-      descriptor);
+    modifyColumn(Bytes.toBytes(tableName), Bytes.toBytes(columnName), descriptor);
   }
 
   /**
@@ -800,6 +800,21 @@ public class HBaseAdmin {
     modifyTable(tableNameOrRegionName, HConstants.Modify.TABLE_SPLIT);
   }
 
+  /**
+   * Modify an existing table, more IRB friendly version.
+   * Asynchronous operation.
+   *
+   * @param tableName name of table.
+   * @param htd modified description of the table
+   * @throws IOException if a remote or network exception occurs
+   */
+  public void modifyTable(final byte [] tableName, HTableDescriptor htd)
+  throws IOException {
+    if (isTableEnabled(tableName)) throw new TableNotDisabledException(tableName);
+    getMaster().modifyTable(tableName, htd);
+  }
+
+
   /*
    * Call modifyTable using passed tableName or region name String.  If no
    * such table, presume we have been passed a region name.
@@ -821,19 +836,6 @@ public class HBaseAdmin {
   }
 
   /**
-   * Modify an existing table, more IRB friendly version.
-   * Asynchronous operation.
-   *
-   * @param tableName name of table.
-   * @param htd modified description of the table
-   * @throws IOException if a remote or network exception occurs
-   */
-  public void modifyTable(final byte [] tableName, HTableDescriptor htd)
-  throws IOException {
-    modifyTable(tableName, HConstants.Modify.TABLE_SET_HTD, htd);
-  }
-
-  /**
    * Modify an existing table.
    * Asynchronous operation.
    *
@@ -861,7 +863,7 @@ public class HBaseAdmin {
         }
         arr = new Writable[1];
         arr[0] = (HTableDescriptor)args[0];
-//        getMaster().modifyTable(tableName, op, arr);
+        // getMaster().modifyTable(tableName, htd);
         break;
 
       case TABLE_COMPACT:

Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/HMaster.java?rev=987385&r1=987384&r2=987385&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/HMaster.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/HMaster.java Fri Aug 20 06:25:41 2010
@@ -108,7 +108,7 @@ import org.apache.zookeeper.Watcher;
  * @see Watcher
  */
 public class HMaster extends Thread
-implements HMasterInterface, HMasterRegionInterface, Server {
+implements HMasterInterface, HMasterRegionInterface, MasterServices, Server {
   private static final Log LOG = LogFactory.getLog(HMaster.class.getName());
 
   // MASTER is name of the webapp and the attribute name used stuffing this
@@ -376,10 +376,21 @@ implements HMasterInterface, HMasterRegi
     return this.conf;
   }
 
+  @Override
   public ServerManager getServerManager() {
     return this.serverManager;
   }
 
+  @Override
+  public ExecutorService getExecutorService() {
+    return this.executorService;
+  }
+
+  @Override
+  public MasterFileSystem getMasterFileSystem() {
+    return this.fileSystemManager;
+  }
+
   /**
    * Get the ZK wrapper object - needed by master_jsp.java
    * @return the zookeeper wrapper
@@ -583,7 +594,7 @@ implements HMasterInterface, HMasterRegi
       throw new IOException("Can't delete catalog tables");
     }
     //
-    new DeleteTableHandler(tableName, this, catalogTracker, fileSystemManager)
+    new DeleteTableHandler(tableName, this, this)
     .execute();
     LOG.info("deleted table: " + Bytes.toString(tableName));
   }
@@ -593,8 +604,7 @@ implements HMasterInterface, HMasterRegi
     if (isCatalogTable(tableName)) {
       throw new IOException("Can't modify catalog tables");
     }
-    new TableAddFamilyHandler(tableName, column, this, catalogTracker,
-        fileSystemManager).execute();
+    new TableAddFamilyHandler(tableName, column, this, this).execute();
   }
 
   public void modifyColumn(byte [] tableName, byte [] columnName,
@@ -603,8 +613,7 @@ implements HMasterInterface, HMasterRegi
     if (isCatalogTable(tableName)) {
       throw new IOException("Can't modify catalog tables");
     }
-    new TableModifyFamilyHandler(tableName, descriptor, this, catalogTracker,
-        fileSystemManager).execute();
+    new TableModifyFamilyHandler(tableName, descriptor, this, this).execute();
   }
 
   public void deleteColumn(final byte [] tableName, final byte [] c)
@@ -612,8 +621,7 @@ implements HMasterInterface, HMasterRegi
     if (isCatalogTable(tableName)) {
       throw new IOException("Can't modify catalog tables");
     }
-    new TableDeleteFamilyHandler(tableName, c, this, catalogTracker,
-        fileSystemManager).execute();
+    new TableDeleteFamilyHandler(tableName, c, this, this).execute();
   }
 
   public void enableTable(final byte [] tableName) throws IOException {
@@ -672,9 +680,7 @@ implements HMasterInterface, HMasterRegi
   @Override
   public void modifyTable(final byte[] tableName, HTableDescriptor htd)
   throws IOException {
-    LOG.info("modifyTable(SET_HTD): " + htd);
-    this.executorService.submit(new ModifyTableHandler(tableName, this, catalogTracker,
-      fileSystemManager));
+    this.executorService.submit(new ModifyTableHandler(tableName, htd, this, this));
   }
 
   /**
@@ -715,11 +721,17 @@ implements HMasterInterface, HMasterRegi
     return address.toString();
   }
 
+  @Override
   public CatalogTracker getCatalogTracker() {
     return catalogTracker;
   }
 
   @Override
+  public AssignmentManager getAssignmentManager() {
+    return this.assignmentManager;
+  }
+
+  @Override
   public void shutdown() {
     this.serverManager.shutdownCluster();
     try {

Added: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java?rev=987385&view=auto
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java (added)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java Fri Aug 20 06:25:41 2010
@@ -0,0 +1,53 @@
+/**
+ * Copyright 2010 The Apache Software Foundation
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hbase.master;
+
+import org.apache.hadoop.hbase.catalog.CatalogTracker;
+import org.apache.hadoop.hbase.executor.ExecutorService;
+
+/**
+ * Services Master supplies
+ */
+public interface MasterServices {
+  /**
+   * @return Master's instance of {@link CatalogTracker}
+   */
+  public CatalogTracker getCatalogTracker();
+
+  /**
+   * @return Master's instance of the {@link AssignmentManager}
+   */
+  public AssignmentManager getAssignmentManager();
+
+  /**
+   * @return Master's filesystem {@link MasterFileSystem} utility class.
+   */
+  public MasterFileSystem getMasterFileSystem();
+
+  /**
+   * @return Master's {@link ServerManager} instance.
+   */
+  public ServerManager getServerManager();
+
+  /**
+   * @return Master's instance of {@link ExecutorService}
+   */
+  public ExecutorService getExecutorService();
+}

Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/DeleteTableHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/DeleteTableHandler.java?rev=987385&r1=987384&r2=987385&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/DeleteTableHandler.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/DeleteTableHandler.java Fri Aug 20 06:25:41 2010
@@ -26,17 +26,15 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.Server;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
 import org.apache.hadoop.hbase.catalog.MetaEditor;
-import org.apache.hadoop.hbase.master.MasterFileSystem;
+import org.apache.hadoop.hbase.master.MasterServices;
 
 public class DeleteTableHandler extends TableEventHandler {
   private static final Log LOG = LogFactory.getLog(DeleteTableHandler.class);
 
   public DeleteTableHandler(byte [] tableName, Server server,
-      CatalogTracker catalogTracker, MasterFileSystem fileManager) {
-    super(EventType.C2M_DELETE_TABLE, tableName, server, catalogTracker,
-        fileManager);
+      final MasterServices masterServices) {
+    super(EventType.C2M_DELETE_TABLE, tableName, server, masterServices);
   }
 
   @Override
@@ -45,11 +43,11 @@ public class DeleteTableHandler extends 
     for(HRegionInfo region : regions) {
       LOG.debug("Deleting region " + region + " from META and FS");
       // Remove region from META
-      MetaEditor.deleteRegion(catalogTracker, region);
+      MetaEditor.deleteRegion(this.masterServices.getCatalogTracker(), region);
       // Delete region from FS
-      fileManager.deleteRegion(region);
+      this.masterServices.getMasterFileSystem().deleteRegion(region);
     }
     // Delete table from FS
-    fileManager.deleteTable(tableName);
+    this.masterServices.getMasterFileSystem().deleteTable(tableName);
   }
 }
\ No newline at end of file

Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/ModifyTableHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/ModifyTableHandler.java?rev=987385&r1=987384&r2=987385&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/ModifyTableHandler.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/ModifyTableHandler.java Fri Aug 20 06:25:41 2010
@@ -23,16 +23,19 @@ import java.io.IOException;
 import java.util.List;
 
 import org.apache.hadoop.hbase.HRegionInfo;
+import org.apache.hadoop.hbase.HTableDescriptor;
 import org.apache.hadoop.hbase.Server;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
 import org.apache.hadoop.hbase.catalog.MetaEditor;
-import org.apache.hadoop.hbase.master.MasterFileSystem;
+import org.apache.hadoop.hbase.master.MasterServices;
 
 public class ModifyTableHandler extends TableEventHandler {
-  public ModifyTableHandler(final byte [] tableName, final Server server,
-      final CatalogTracker catalogTracker, final MasterFileSystem fileManager) {
-    super(EventType.C2M_MODIFY_TABLE, tableName, server, catalogTracker,
-        fileManager);
+  private final HTableDescriptor htd;
+
+  public ModifyTableHandler(final byte [] tableName,
+      final HTableDescriptor htd, final Server server,
+      final MasterServices masterServices) {
+    super(EventType.C2M_MODIFY_TABLE, tableName, server, masterServices);
+    this.htd = htd;
   }
 
   @Override
@@ -40,9 +43,10 @@ public class ModifyTableHandler extends 
   throws IOException {
     for (HRegionInfo region : regions) {
       // Update region info in META
-      MetaEditor.updateRegionInfo(catalogTracker, region);
+      region.setTableDesc(this.htd);
+      MetaEditor.updateRegionInfo(this.masterServices.getCatalogTracker(), region);
       // Update region info in FS
-      this.fileManager.updateRegionInfo(region);
+      this.masterServices.getMasterFileSystem().updateRegionInfo(region);
     }
   }
-}
+}
\ No newline at end of file

Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/TableAddFamilyHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/TableAddFamilyHandler.java?rev=987385&r1=987384&r2=987385&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/TableAddFamilyHandler.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/TableAddFamilyHandler.java Fri Aug 20 06:25:41 2010
@@ -27,9 +27,8 @@ import org.apache.hadoop.hbase.HRegionIn
 import org.apache.hadoop.hbase.HTableDescriptor;
 import org.apache.hadoop.hbase.InvalidFamilyOperationException;
 import org.apache.hadoop.hbase.Server;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
 import org.apache.hadoop.hbase.catalog.MetaEditor;
-import org.apache.hadoop.hbase.master.MasterFileSystem;
+import org.apache.hadoop.hbase.master.MasterServices;
 import org.apache.hadoop.hbase.util.Bytes;
 
 /**
@@ -40,10 +39,8 @@ public class TableAddFamilyHandler exten
   private final HColumnDescriptor familyDesc;
 
   public TableAddFamilyHandler(byte[] tableName, HColumnDescriptor familyDesc,
-      Server server, CatalogTracker catalogTracker,
-      MasterFileSystem fileManager) {
-    super(EventType.C2M_ADD_FAMILY, tableName, server, catalogTracker,
-        fileManager);
+      Server server, final MasterServices masterServices) {
+    super(EventType.C2M_ADD_FAMILY, tableName, server, masterServices);
     this.familyDesc = familyDesc;
   }
 
@@ -61,9 +58,9 @@ public class TableAddFamilyHandler exten
       // Update the HTD
       region.getTableDesc().addFamily(familyDesc);
       // Update region in META
-      MetaEditor.updateRegionInfo(catalogTracker, region);
+      MetaEditor.updateRegionInfo(this.masterServices.getCatalogTracker(), region);
       // Update region info in FS
-      fileManager.updateRegionInfo(region);
+      this.masterServices.getMasterFileSystem().updateRegionInfo(region);
     }
   }
 }
\ No newline at end of file

Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/TableDeleteFamilyHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/TableDeleteFamilyHandler.java?rev=987385&r1=987384&r2=987385&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/TableDeleteFamilyHandler.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/TableDeleteFamilyHandler.java Fri Aug 20 06:25:41 2010
@@ -26,9 +26,9 @@ import org.apache.hadoop.hbase.HRegionIn
 import org.apache.hadoop.hbase.HTableDescriptor;
 import org.apache.hadoop.hbase.InvalidFamilyOperationException;
 import org.apache.hadoop.hbase.Server;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
 import org.apache.hadoop.hbase.catalog.MetaEditor;
 import org.apache.hadoop.hbase.master.MasterFileSystem;
+import org.apache.hadoop.hbase.master.MasterServices;
 import org.apache.hadoop.hbase.util.Bytes;
 
 /**
@@ -39,10 +39,8 @@ public class TableDeleteFamilyHandler ex
   private final byte [] familyName;
 
   public TableDeleteFamilyHandler(byte[] tableName, byte [] familyName,
-      Server server, CatalogTracker catalogTracker,
-      MasterFileSystem fileManager) {
-    super(EventType.C2M_ADD_FAMILY, tableName, server, catalogTracker,
-        fileManager);
+      Server server, final MasterServices masterServices) {
+    super(EventType.C2M_ADD_FAMILY, tableName, server, masterServices);
     this.familyName = familyName;
   }
 
@@ -58,11 +56,12 @@ public class TableDeleteFamilyHandler ex
       // Update the HTD
       region.getTableDesc().removeFamily(familyName);
       // Update region in META
-      MetaEditor.updateRegionInfo(catalogTracker, region);
+      MetaEditor.updateRegionInfo(this.masterServices.getCatalogTracker(), region);
+      MasterFileSystem mfs = this.masterServices.getMasterFileSystem();
       // Update region info in FS
-      fileManager.updateRegionInfo(region);
+      mfs.updateRegionInfo(region);
       // Delete directory in FS
-      fileManager.deleteFamily(region, familyName);
+      mfs.deleteFamily(region, familyName);
     }
   }
 }

Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java?rev=987385&r1=987384&r2=987385&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java Fri Aug 20 06:25:41 2010
@@ -28,10 +28,9 @@ import org.apache.hadoop.hbase.HRegionIn
 import org.apache.hadoop.hbase.Server;
 import org.apache.hadoop.hbase.TableNotDisabledException;
 import org.apache.hadoop.hbase.TableNotFoundException;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
 import org.apache.hadoop.hbase.catalog.MetaReader;
 import org.apache.hadoop.hbase.executor.EventHandler;
-import org.apache.hadoop.hbase.master.MasterFileSystem;
+import org.apache.hadoop.hbase.master.MasterServices;
 import org.apache.hadoop.hbase.util.Bytes;
 
 /**
@@ -43,18 +42,16 @@ import org.apache.hadoop.hbase.util.Byte
  */
 public abstract class TableEventHandler extends EventHandler {
   private static final Log LOG = LogFactory.getLog(TableEventHandler.class);
-
+  protected final MasterServices masterServices;
   protected final byte [] tableName;
-  protected final CatalogTracker catalogTracker;
-  protected final MasterFileSystem fileManager;
+  protected final String tableNameStr;
 
-  public TableEventHandler(EventType eventType, byte [] tableName,
-      Server server, CatalogTracker catalogTracker,
-      MasterFileSystem fileManager) {
+  public TableEventHandler(EventType eventType, byte [] tableName, Server server,
+      MasterServices masterServices) {
     super(server, eventType);
+    this.masterServices = masterServices;
     this.tableName = tableName;
-    this.catalogTracker = catalogTracker;
-    this.fileManager = fileManager;
+    this.tableNameStr = Bytes.toString(this.tableName);
   }
 
   @Override
@@ -71,20 +68,19 @@ public abstract class TableEventHandler 
 
   private List<HRegionInfo> tableChecks() throws IOException {
     // Check if table exists
-    if(!MetaReader.tableExists(catalogTracker, Bytes.toString(tableName))) {
+    if (!MetaReader.tableExists(this.masterServices.getCatalogTracker(),
+        this.tableNameStr)) {
       throw new TableNotFoundException(Bytes.toString(tableName));
     }
+    // Verify table is offline
+    if (!this.masterServices.getAssignmentManager().
+        isTableDisabled(this.tableNameStr)) {
+      throw new TableNotDisabledException(tableName);
+    }
     // Get the regions of this table
     // TODO: Use in-memory state of master?
-    List<HRegionInfo> regions = MetaReader.getTableRegions(catalogTracker,
-        tableName);
-    // Verify all regions of table are disabled
-    for(HRegionInfo region : regions) {
-      if(!region.isOffline()) {
-        throw new TableNotDisabledException(tableName);
-      }
-    }
-    return regions;
+    return MetaReader.getTableRegions(this.masterServices.getCatalogTracker(),
+      tableName);
   }
 
   protected abstract void handleTableOperation(List<HRegionInfo> regions)

Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/TableModifyFamilyHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/TableModifyFamilyHandler.java?rev=987385&r1=987384&r2=987385&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/TableModifyFamilyHandler.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/TableModifyFamilyHandler.java Fri Aug 20 06:25:41 2010
@@ -27,9 +27,8 @@ import org.apache.hadoop.hbase.HRegionIn
 import org.apache.hadoop.hbase.HTableDescriptor;
 import org.apache.hadoop.hbase.InvalidFamilyOperationException;
 import org.apache.hadoop.hbase.Server;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
 import org.apache.hadoop.hbase.catalog.MetaEditor;
-import org.apache.hadoop.hbase.master.MasterFileSystem;
+import org.apache.hadoop.hbase.master.MasterServices;
 import org.apache.hadoop.hbase.util.Bytes;
 
 /**
@@ -41,9 +40,8 @@ public class TableModifyFamilyHandler ex
 
   public TableModifyFamilyHandler(byte[] tableName,
       HColumnDescriptor familyDesc, Server server,
-      CatalogTracker catalogTracker, MasterFileSystem fileManager) {
-    super(EventType.C2M_ADD_FAMILY, tableName, server,
-        catalogTracker, fileManager);
+      final MasterServices masterServices) {
+    super(EventType.C2M_ADD_FAMILY, tableName, server, masterServices);
     this.familyDesc = familyDesc;
   }
 
@@ -60,9 +58,9 @@ public class TableModifyFamilyHandler ex
       // Update the HTD
       region.getTableDesc().addFamily(familyDesc);
       // Update region in META
-      MetaEditor.updateRegionInfo(catalogTracker, region);
+      MetaEditor.updateRegionInfo(this.masterServices.getCatalogTracker(), region);
       // Update region info in FS
-      fileManager.updateRegionInfo(region);
+      this.masterServices.getMasterFileSystem().updateRegionInfo(region);
     }
   }
-}
+}
\ No newline at end of file

Modified: hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java?rev=987385&r1=987384&r2=987385&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java (original)
+++ hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java Fri Aug 20 06:25:41 2010
@@ -21,6 +21,7 @@ package org.apache.hadoop.hbase.client;
 
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
@@ -84,6 +85,45 @@ public class TestAdmin {
     assertEquals(numTables + 1, tables.length);
   }
 
+  /**
+   * Verify schema modification takes.
+   * @throws IOException
+   */
+  @Test public void changeTableSchema() throws IOException {
+    final byte [] tableName = Bytes.toBytes("changeTableSchema");
+    HTableDescriptor [] tables = admin.listTables();
+    int numTables = tables.length;
+    TEST_UTIL.createTable(tableName, HConstants.CATALOG_FAMILY);
+    tables = this.admin.listTables();
+    assertEquals(numTables + 1, tables.length);
+    HTableDescriptor htd = this.admin.getTableDescriptor(tableName);
+    // Make a copy and assert copy is good.
+    HTableDescriptor copy = new HTableDescriptor(htd);
+    assertTrue(htd.equals(copy));
+    // Now amend the copy. Introduce differences.
+    long newFlushSize = htd.getMemStoreFlushSize() / 2;
+    copy.setMemStoreFlushSize(newFlushSize);
+    final String key = "anyoldkey";
+    assertTrue(htd.getValue(key) == null);
+    copy.setValue(key, key);
+    boolean expectedException = false;
+    try {
+      this.admin.modifyTable(tableName, copy);
+    } catch (TableNotDisabledException e) {
+      expectedException = true;
+    }
+    assertTrue(expectedException);
+    this.admin.disableTable(tableName);
+    assertTrue(this.admin.isTableDisabled(tableName));
+    this.admin.modifyTable(tableName, copy);
+    HTableDescriptor modifiedhcd = this.admin.getTableDescriptor(tableName);
+    // Assert returned modifiedhcd is same as the copy.
+    assertFalse(htd.equals(modifiedhcd));
+    assertTrue(copy.equals(modifiedhcd));
+    assertEquals(newFlushSize, modifiedhcd.getMemStoreFlushSize());
+    assertEquals(key, modifiedhcd.getValue(key));
+  }
+
   @Test
   public void testCreateTableWithRegions() throws IOException {