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/21 07:25:02 UTC
svn commit: r987697 - in /hbase/branches/0.90_master_rewrite/src:
main/java/org/apache/hadoop/hbase/client/
main/java/org/apache/hadoop/hbase/io/ main/java/org/apache/hadoop/hbase/ipc/
main/java/org/apache/hadoop/hbase/master/ main/java/org/apache/hado...
Author: stack
Date: Sat Aug 21 05:25:01 2010
New Revision: 987697
URL: http://svn.apache.org/viewvc?rev=987697&view=rev
Log:
Small changes to do w/ making the modify of table and column work again.
M src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRolling.java
M src/test/java/org/apache/hadoop/hbase/regionserver/DisabledTestRegionServerExit.java
M src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java
Method named changed from getOnlineRegions to getOnlineRegionsLocalContext.
M src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java
getOnlineRegions returns HRIs not HRs now.
M src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java
Tests for modify table/column to ensure they work. Finding little copy/paste
bugs here so these tests are proving their worth.
D src/main/java/org/apache/hadoop/hbase/regionserver/RegionServer.java
Removed. Made regionserver follow the model introduced yesterday
where you have Server and then RegionServerServices and over in
master package its Server and MasterServices where Server has
what both servers have in common and then the *Services are the
facility other local classes would make use of.
M src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
Implement new RegionServerServices interface.
M src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java
M src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRootHandler.java
M src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenMetaHandler.java
M src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseRegionHandler.java
M src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseRootHandler.java
M src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseMetaHandler.java
Take RegionServerServices.
A src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java
Interface of services the regionserver package needs.
M src/main/java/org/apache/hadoop/hbase/master/HMaster.java
Remove redundant columnname arg.
M src/main/java/org/apache/hadoop/hbase/master/handler/TableModifyFamilyHandler.java
Fix its type and fix copy paste errors.
M src/main/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java
Added navigableset.
M src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java
Changed interface to drop unnecessary param on modifyColumn.
M src/main/java/org/apache/hadoop/hbase/ipc/HRegionInterface.java
(getOnlineRegionsAsArray): Removed. Not used.
Renamed getRegionsAssignment as getOnlineRegions
M src/main/java/org/apache/hadoop/hbase/client/HBaseFsck.java
Removed unused imports and changed it to use getOnlineRegions.
M src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
Deprecated modifyColumn methods that take extra unnecessary arg.
Added:
hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java
Removed:
hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServer.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/client/HBaseFsck.java
hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java
hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java
hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/ipc/HRegionInterface.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/TableModifyFamilyHandler.java
hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseMetaHandler.java
hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseRegionHandler.java
hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseRootHandler.java
hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenMetaHandler.java
hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java
hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRootHandler.java
hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java
hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java
hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java
hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/regionserver/DisabledTestRegionServerExit.java
hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRolling.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=987697&r1=987696&r2=987697&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 Sat Aug 21 05:25:01 2010
@@ -610,11 +610,25 @@ public class HBaseAdmin {
* @param columnName name of column to be modified
* @param descriptor new column descriptor to use
* @throws IOException if a remote or network exception occurs
+ * @deprecated The <code>columnName</code> is redundant. Use {@link #addColumn(String, HColumnDescriptor)}
*/
public void modifyColumn(final String tableName, final String columnName,
HColumnDescriptor descriptor)
throws IOException {
- modifyColumn(Bytes.toBytes(tableName), Bytes.toBytes(columnName), descriptor);
+ modifyColumn(tableName, descriptor);
+ }
+
+ /**
+ * Modify an existing column family on a table.
+ * Asynchronous operation.
+ *
+ * @param tableName name of table
+ * @param descriptor new column descriptor to use
+ * @throws IOException if a remote or network exception occurs
+ */
+ public void modifyColumn(final String tableName, HColumnDescriptor descriptor)
+ throws IOException {
+ modifyColumn(Bytes.toBytes(tableName), descriptor);
}
/**
@@ -625,16 +639,27 @@ public class HBaseAdmin {
* @param columnName name of column to be modified
* @param descriptor new column descriptor to use
* @throws IOException if a remote or network exception occurs
+ * @deprecated The <code>columnName</code> is redundant. Use {@link #modifyColumn(byte[], HColumnDescriptor)}
*/
public void modifyColumn(final byte [] tableName, final byte [] columnName,
HColumnDescriptor descriptor)
throws IOException {
+ modifyColumn(tableName, descriptor);
+ }
+
+ /**
+ * Modify an existing column family on a table.
+ * Asynchronous operation.
+ *
+ * @param tableName name of table
+ * @param descriptor new column descriptor to use
+ * @throws IOException if a remote or network exception occurs
+ */
+ public void modifyColumn(final byte [] tableName, HColumnDescriptor descriptor)
+ throws IOException {
HTableDescriptor.isLegalTableName(tableName);
- try {
- getMaster().modifyColumn(tableName, columnName, descriptor);
- } catch (RemoteException e) {
- throw RemoteExceptionHandler.decodeRemoteException(e);
- }
+ if (isTableEnabled(tableName)) throw new TableNotDisabledException(tableName);
+ getMaster().modifyColumn(tableName, descriptor);
}
/**
@@ -802,7 +827,8 @@ public class HBaseAdmin {
/**
* Modify an existing table, more IRB friendly version.
- * Asynchronous operation.
+ * Asynchronous operation. This means that it may be a while before your
+ * schema change is updated across all of the table.
*
* @param tableName name of table.
* @param htd modified description of the table
@@ -810,6 +836,7 @@ public class HBaseAdmin {
*/
public void modifyTable(final byte [] tableName, HTableDescriptor htd)
throws IOException {
+ HTableDescriptor.isLegalTableName(tableName);
if (isTableEnabled(tableName)) throw new TableNotDisabledException(tableName);
getMaster().modifyTable(tableName, htd);
}
Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/client/HBaseFsck.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/client/HBaseFsck.java?rev=987697&r1=987696&r2=987697&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/client/HBaseFsck.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/client/HBaseFsck.java Sat Aug 21 05:25:01 2010
@@ -19,50 +19,35 @@
*/
package org.apache.hadoop.hbase.client;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.NavigableSet;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.concurrent.atomic.AtomicInteger;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FileStatus;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.ClusterStatus;
import org.apache.hadoop.hbase.HBaseConfiguration;
-import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.HRegionInfo;
-import org.apache.hadoop.hbase.HRegionLocation;
+import org.apache.hadoop.hbase.HServerAddress;
+import org.apache.hadoop.hbase.HServerInfo;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.MasterNotRunningException;
-import org.apache.hadoop.hbase.HServerInfo;
-import org.apache.hadoop.hbase.HServerAddress;
-import org.apache.hadoop.hbase.RegionException;
-import org.apache.hadoop.hbase.RemoteExceptionHandler;
-import org.apache.hadoop.hbase.TableExistsException;
import org.apache.hadoop.hbase.client.MetaScanner.MetaScannerVisitor;
-import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.ipc.HMasterInterface;
import org.apache.hadoop.hbase.ipc.HRegionInterface;
-import org.apache.hadoop.hbase.regionserver.HRegion;
import org.apache.hadoop.hbase.util.Bytes;
-import org.apache.hadoop.hbase.util.MetaUtils;
import org.apache.hadoop.hbase.util.Writables;
-import org.apache.hadoop.io.BooleanWritable;
-import org.apache.hadoop.io.Writable;
-import org.apache.hadoop.ipc.RemoteException;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.FileStatus;
-import org.apache.hadoop.fs.Path;
-
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Map;
-import java.util.List;
-import java.util.TreeSet;
-import java.util.TreeMap;
-import java.util.NavigableMap;
-import java.util.Random;
-import java.util.concurrent.atomic.AtomicInteger;
/**
* Check consistency among the in-memory states of the master and the
@@ -276,10 +261,10 @@ public class HBaseFsck extends HBaseAdmi
rsinfo.getServerAddress());
// list all online regions from this region server
- HRegionInfo[] regions = server.getRegionsAssignment();
+ NavigableSet<HRegionInfo> regions = server.getOnlineRegions();
if (details) {
System.out.print("\nRegionServer:" + rsinfo.getServerName() +
- " number of regions:" + regions.length);
+ " number of regions:" + regions.size());
for (HRegionInfo rinfo: regions) {
System.out.print("\n\t name:" + rinfo.getRegionNameAsString() +
" id:" + rinfo.getRegionId() +
Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java?rev=987697&r1=987696&r2=987697&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java Sat Aug 21 05:25:01 2010
@@ -26,6 +26,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.NavigableSet;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -183,6 +184,8 @@ public class HbaseObjectWritable impleme
// List
addToMap(List.class, code++);
+ //
+ addToMap(NavigableSet.class, code++);
}
private Class<?> declaredClass;
Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java?rev=987697&r1=987696&r2=987697&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java Sat Aug 21 05:25:01 2010
@@ -71,12 +71,10 @@ public interface HMasterInterface extend
/**
* Modifies an existing column on the specified table
* @param tableName table name
- * @param columnName name of the column to edit
* @param descriptor new column descriptor
* @throws IOException e
*/
- public void modifyColumn(final byte [] tableName, final byte [] columnName,
- HColumnDescriptor descriptor)
+ public void modifyColumn(final byte [] tableName, HColumnDescriptor descriptor)
throws IOException;
Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/ipc/HRegionInterface.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/ipc/HRegionInterface.java?rev=987697&r1=987696&r2=987697&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/ipc/HRegionInterface.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/ipc/HRegionInterface.java Sat Aug 21 05:25:01 2010
@@ -20,7 +20,9 @@
package org.apache.hadoop.hbase.ipc;
import java.io.IOException;
+import java.util.Collection;
import java.util.List;
+import java.util.NavigableSet;
import org.apache.hadoop.hbase.Abortable;
import org.apache.hadoop.hbase.HRegionInfo;
@@ -69,12 +71,6 @@ public interface HRegionInterface extend
throws IOException;
/**
- *
- * @return the regions served by this regionserver
- */
- public HRegion [] getOnlineRegionsAsArray();
-
- /**
* Perform Get operation.
* @param regionName name of region to get from
* @param get Get operation
@@ -259,11 +255,10 @@ public interface HRegionInterface extend
/**
- * Method used when a master is taking the place of another failed one.
- * @return All regions assigned on this region server
+ * @return All regions online on this region server
* @throws IOException e
*/
- public HRegionInfo[] getRegionsAssignment() throws IOException;
+ public NavigableSet<HRegionInfo> getOnlineRegions();
/**
* Method used when a master is taking the place of another failed one.
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=987697&r1=987696&r2=987697&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 Sat Aug 21 05:25:01 2010
@@ -607,8 +607,7 @@ implements HMasterInterface, HMasterRegi
new TableAddFamilyHandler(tableName, column, this, this).execute();
}
- public void modifyColumn(byte [] tableName, byte [] columnName,
- HColumnDescriptor descriptor)
+ public void modifyColumn(byte [] tableName, HColumnDescriptor descriptor)
throws IOException {
if (isCatalogTable(tableName)) {
throw new IOException("Can't modify catalog tables");
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=987697&r1=987696&r2=987697&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 Sat Aug 21 05:25:01 2010
@@ -41,7 +41,7 @@ public class TableModifyFamilyHandler ex
public TableModifyFamilyHandler(byte[] tableName,
HColumnDescriptor familyDesc, Server server,
final MasterServices masterServices) {
- super(EventType.C2M_ADD_FAMILY, tableName, server, masterServices);
+ super(EventType.C2M_MODIFY_FAMILY, tableName, server, masterServices);
this.familyDesc = familyDesc;
}
@@ -49,10 +49,9 @@ public class TableModifyFamilyHandler ex
protected void handleTableOperation(List<HRegionInfo> regions) throws IOException {
HTableDescriptor htd = regions.get(0).getTableDesc();
byte [] familyName = familyDesc.getName();
- if(htd.hasFamily(familyName)) {
- throw new InvalidFamilyOperationException(
- "Family '" + Bytes.toString(familyName) + "' already exists so " +
- "cannot be modified");
+ if(!htd.hasFamily(familyName)) {
+ throw new InvalidFamilyOperationException("Family '" +
+ Bytes.toString(familyName) + "' doesn't exists so cannot be modified");
}
for(HRegionInfo region : regions) {
// Update the HTD
Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java?rev=987697&r1=987696&r2=987697&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java Sat Aug 21 05:25:01 2010
@@ -36,10 +36,10 @@ import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.NavigableSet;
import java.util.Random;
import java.util.Set;
import java.util.SortedMap;
-import java.util.SortedSet;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.concurrent.BlockingQueue;
@@ -69,6 +69,7 @@ import org.apache.hadoop.hbase.LocalHBas
import org.apache.hadoop.hbase.MasterAddressTracker;
import org.apache.hadoop.hbase.NotServingRegionException;
import org.apache.hadoop.hbase.RemoteExceptionHandler;
+import org.apache.hadoop.hbase.Server;
import org.apache.hadoop.hbase.Stoppable;
import org.apache.hadoop.hbase.UnknownRowLockException;
import org.apache.hadoop.hbase.UnknownScannerException;
@@ -123,7 +124,7 @@ import org.apache.zookeeper.KeeperExcept
* the HMaster. There are many HRegionServers in a single HBase deployment.
*/
public class HRegionServer implements HRegionInterface, HBaseRPCErrorHandler,
- Runnable, RegionServer {
+ Runnable, RegionServerServices, Server {
public static final Log LOG = LogFactory.getLog(HRegionServer.class);
// Set when a report to the master comes back with a message asking us to
@@ -1869,11 +1870,11 @@ public class HRegionServer implements HR
LOG.info("Received request to open region: " +
region.getRegionNameAsString());
if(region.isRootRegion()) {
- this.service.submit(new OpenRootHandler(this, catalogTracker, region));
+ this.service.submit(new OpenRootHandler(this, this, catalogTracker, region));
} else if(region.isMetaRegion()) {
- this.service.submit(new OpenMetaHandler(this, catalogTracker, region));
+ this.service.submit(new OpenMetaHandler(this, this, catalogTracker, region));
} else {
- this.service.submit(new OpenRegionHandler(this, catalogTracker, region));
+ this.service.submit(new OpenRegionHandler(this, this, catalogTracker, region));
}
}
@@ -1903,11 +1904,11 @@ public class HRegionServer implements HR
final boolean zk) {
CloseRegionHandler crh = null;
if (region.isRootRegion()) {
- crh = new CloseRootHandler(this, region, abort, zk);
+ crh = new CloseRootHandler(this, this, region, abort, zk);
} else if (region.isMetaRegion()) {
- crh = new CloseMetaHandler(this, region, abort, zk);
+ crh = new CloseMetaHandler(this, this, region, abort, zk);
} else {
- crh = new CloseRegionHandler(this, region, abort, zk);
+ crh = new CloseRegionHandler(this, this, region, abort, zk);
}
this.service.submit(crh);
return true;
@@ -1969,28 +1970,25 @@ public class HRegionServer implements HR
return lock.writeLock();
}
- /**
- * @return Immutable list of this servers regions.
- */
- public Collection<HRegion> getOnlineRegions() {
- return Collections.unmodifiableCollection(onlineRegions.values());
- }
-
- public HRegion[] getOnlineRegionsAsArray() {
- return getOnlineRegions().toArray(new HRegion[0]);
+ @Override
+ public NavigableSet<HRegionInfo> getOnlineRegions() {
+ NavigableSet<HRegionInfo> sortedset = new TreeSet<HRegionInfo>();
+ synchronized(this.onlineRegions) {
+ for (Map.Entry<String,HRegion> e: this.onlineRegions.entrySet()) {
+ sortedset.add(e.getValue().getRegionInfo());
+ }
+ }
+ return sortedset;
}
/**
- * @return The HRegionInfos from online regions sorted
+ * For tests and web ui.
+ * This method will only work if HRegionServer is in the same JVM as client;
+ * HRegion cannot be serialized to cross an rpc.
+ * @see #getOnlineRegions()
*/
- public SortedSet<HRegionInfo> getSortedOnlineRegionInfos() {
- SortedSet<HRegionInfo> result = new TreeSet<HRegionInfo>();
- synchronized (this.onlineRegions) {
- for (HRegion r : this.onlineRegions.values()) {
- result.add(r.getRegionInfo());
- }
- }
- return result;
+ public Collection<HRegion> getOnlineRegionsLocalContext() {
+ return Collections.unmodifiableCollection(this.onlineRegions.values());
}
@Override
Added: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java?rev=987697&view=auto
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java (added)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java Sat Aug 21 05:25:01 2010
@@ -0,0 +1,46 @@
+/**
+ * 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.regionserver;
+
+import org.apache.hadoop.hbase.HServerInfo;
+import org.apache.hadoop.hbase.regionserver.wal.HLog;
+
+/**
+ * Services provided by {@link HRegionServer}
+ */
+public interface RegionServerServices extends OnlineRegions {
+ public HLog getWAL();
+
+ /**
+ * @return Implementation of {@link CompactionRequestor} or null.
+ */
+ public CompactionRequestor getCompactionRequester();
+
+ /**
+ * @return Implementation of {@link FlushRequester} or null.
+ */
+ public FlushRequester getFlushRequester();
+
+ /**
+ * Return data structure that has Server address and startcode.
+ * @return The HServerInfo for this RegionServer.
+ */
+ public HServerInfo getServerInfo();
+}
\ No newline at end of file
Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseMetaHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseMetaHandler.java?rev=987697&r1=987696&r2=987697&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseMetaHandler.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseMetaHandler.java Sat Aug 21 05:25:01 2010
@@ -20,20 +20,24 @@
package org.apache.hadoop.hbase.regionserver.handler;
import org.apache.hadoop.hbase.HRegionInfo;
-import org.apache.hadoop.hbase.regionserver.RegionServer;
+import org.apache.hadoop.hbase.Server;
+import org.apache.hadoop.hbase.regionserver.RegionServerServices;
/**
* Handles closing of the root region on a region server.
*/
public class CloseMetaHandler extends CloseRegionHandler {
// Called when master tells us shutdown a region via close rpc
- public CloseMetaHandler(RegionServer server, HRegionInfo regionInfo) {
- this(server, regionInfo, false, true);
+ public CloseMetaHandler(final Server server,
+ final RegionServerServices rsServices, final HRegionInfo regionInfo) {
+ this(server, rsServices, regionInfo, false, true);
}
// Called when regionserver determines its to go down; not master orchestrated
- public CloseMetaHandler(RegionServer server, HRegionInfo regionInfo,
+ public CloseMetaHandler(final Server server,
+ final RegionServerServices rsServices,
+ final HRegionInfo regionInfo,
final boolean abort, final boolean zk) {
- super(server, regionInfo, abort, zk, EventType.M2RS_CLOSE_META);
+ super(server, rsServices, regionInfo, abort, zk, EventType.M2RS_CLOSE_META);
}
}
\ No newline at end of file
Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseRegionHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseRegionHandler.java?rev=987697&r1=987696&r2=987697&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseRegionHandler.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseRegionHandler.java Sat Aug 21 05:25:01 2010
@@ -24,9 +24,10 @@ import java.io.IOException;
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.executor.EventHandler;
import org.apache.hadoop.hbase.regionserver.HRegion;
-import org.apache.hadoop.hbase.regionserver.RegionServer;
+import org.apache.hadoop.hbase.regionserver.RegionServerServices;
import org.apache.hadoop.hbase.zookeeper.ZKAssign;
import org.apache.zookeeper.KeeperException;
@@ -43,7 +44,7 @@ public class CloseRegionHandler extends
private final int FAILED = -1;
- private final RegionServer server;
+ private final RegionServerServices rsServices;
private final HRegionInfo regionInfo;
@@ -58,26 +59,31 @@ public class CloseRegionHandler extends
private final boolean zk;
// This is executed after receiving an CLOSE RPC from the master.
- public CloseRegionHandler(RegionServer server, HRegionInfo regionInfo) {
- this(server, regionInfo, false, true);
+ public CloseRegionHandler(final Server server,
+ final RegionServerServices rsServices, HRegionInfo regionInfo) {
+ this(server, rsServices, regionInfo, false, true);
}
/**
* This method used internally by the RegionServer to close out regions.
* @param server
+ * @param rsServices
* @param regionInfo
* @param abort If the regionserver is aborting.
* @param zk If the close should be noted out in zookeeper.
*/
- public CloseRegionHandler(final RegionServer server,
+ public CloseRegionHandler(final Server server,
+ final RegionServerServices rsServices,
final HRegionInfo regionInfo, final boolean abort, final boolean zk) {
- this(server, regionInfo, abort, zk, EventType.M2RS_CLOSE_REGION);
+ this(server, rsServices, regionInfo, abort, zk, EventType.M2RS_CLOSE_REGION);
}
- protected CloseRegionHandler(RegionServer server, HRegionInfo regionInfo,
+ protected CloseRegionHandler(final Server server,
+ final RegionServerServices rsServices, HRegionInfo regionInfo,
boolean abort, final boolean zk, EventType eventType) {
super(server, eventType);
this.server = server;
+ this.rsServices = rsServices;
this.regionInfo = regionInfo;
this.abort = abort;
this.zk = zk;
@@ -93,7 +99,7 @@ public class CloseRegionHandler extends
LOG.debug("Processing close of " + name);
String encodedRegionName = regionInfo.getEncodedName();
// Check that this region is being served here
- HRegion region = server.getFromOnlineRegions(encodedRegionName);
+ HRegion region = this.rsServices.getFromOnlineRegions(encodedRegionName);
if (region == null) {
LOG.warn("Received CLOSE for region " + name + " but currently not serving");
return;
@@ -109,7 +115,7 @@ public class CloseRegionHandler extends
try {
// TODO: If we need to keep updating CLOSING stamp to prevent against
// a timeout if this is long-running, need to spin up a thread?
- server.removeFromOnlineRegions(regionInfo.getEncodedName());
+ this.rsServices.removeFromOnlineRegions(regionInfo.getEncodedName());
region.close(abort);
} catch (IOException e) {
LOG.error("IOException closing region for " + regionInfo);
Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseRootHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseRootHandler.java?rev=987697&r1=987696&r2=987697&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseRootHandler.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseRootHandler.java Sat Aug 21 05:25:01 2010
@@ -20,21 +20,24 @@
package org.apache.hadoop.hbase.regionserver.handler;
import org.apache.hadoop.hbase.HRegionInfo;
-import org.apache.hadoop.hbase.regionserver.RegionServer;
+import org.apache.hadoop.hbase.Server;
+import org.apache.hadoop.hbase.regionserver.RegionServerServices;
/**
* Handles closing of the root region on a region server.
*/
public class CloseRootHandler extends CloseRegionHandler {
// This is executed after receiving an CLOSE RPC from the master for root.
- public CloseRootHandler(RegionServer server, HRegionInfo regionInfo) {
- this(server, regionInfo, false, true);
+ public CloseRootHandler(final Server server,
+ final RegionServerServices rsServices, HRegionInfo regionInfo) {
+ this(server, rsServices, regionInfo, false, true);
}
// This is called directly by the regionserver when its determined its
// shutting down.
- public CloseRootHandler(RegionServer server, HRegionInfo regionInfo,
+ public CloseRootHandler(final Server server,
+ final RegionServerServices rsServices, HRegionInfo regionInfo,
final boolean abort, final boolean zk) {
- super(server, regionInfo, abort, zk, EventType.M2RS_CLOSE_ROOT);
+ super(server, rsServices, regionInfo, abort, zk, EventType.M2RS_CLOSE_ROOT);
}
}
\ No newline at end of file
Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenMetaHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenMetaHandler.java?rev=987697&r1=987696&r2=987697&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenMetaHandler.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenMetaHandler.java Sat Aug 21 05:25:01 2010
@@ -20,8 +20,9 @@
package org.apache.hadoop.hbase.regionserver.handler;
import org.apache.hadoop.hbase.HRegionInfo;
+import org.apache.hadoop.hbase.Server;
import org.apache.hadoop.hbase.catalog.CatalogTracker;
-import org.apache.hadoop.hbase.regionserver.RegionServer;
+import org.apache.hadoop.hbase.regionserver.RegionServerServices;
/**
* Handles opening of a meta region on a region server.
@@ -29,8 +30,9 @@ import org.apache.hadoop.hbase.regionser
* This is executed after receiving an OPEN RPC from the master for meta.
*/
public class OpenMetaHandler extends OpenRegionHandler {
- public OpenMetaHandler(RegionServer server,
+ public OpenMetaHandler(final Server server,
+ final RegionServerServices rsServices,
CatalogTracker catalogTracker, HRegionInfo regionInfo) {
- super(server, catalogTracker, regionInfo, EventType.M2RS_OPEN_META);
+ super(server,rsServices, catalogTracker, regionInfo, EventType.M2RS_OPEN_META);
}
}
Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java?rev=987697&r1=987696&r2=987697&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java Sat Aug 21 05:25:01 2010
@@ -25,12 +25,13 @@ import java.util.concurrent.atomic.Atomi
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.catalog.RootLocationEditor;
import org.apache.hadoop.hbase.executor.EventHandler;
import org.apache.hadoop.hbase.regionserver.HRegion;
-import org.apache.hadoop.hbase.regionserver.RegionServer;
+import org.apache.hadoop.hbase.regionserver.RegionServerServices;
import org.apache.hadoop.hbase.zookeeper.ZKAssign;
import org.apache.hadoop.util.Progressable;
import org.apache.zookeeper.KeeperException;
@@ -44,22 +45,24 @@ import org.apache.zookeeper.KeeperExcept
public class OpenRegionHandler extends EventHandler {
private static final Log LOG = LogFactory.getLog(OpenRegionHandler.class);
- private final RegionServer server;
+ private final RegionServerServices rsServices;
private final CatalogTracker catalogTracker;
private final HRegionInfo regionInfo;
- public OpenRegionHandler(RegionServer server,
+ public OpenRegionHandler(final Server server,
+ final RegionServerServices rsServices,
CatalogTracker catalogTracker, HRegionInfo regionInfo) {
- this(server, catalogTracker, regionInfo, EventType.M2RS_OPEN_REGION);
+ this(server, rsServices, catalogTracker, regionInfo, EventType.M2RS_OPEN_REGION);
}
- protected OpenRegionHandler(RegionServer server,
+ protected OpenRegionHandler(final Server server,
+ final RegionServerServices rsServices,
CatalogTracker catalogTracker, HRegionInfo regionInfo,
EventType eventType) {
super(server, eventType);
- this.server = server;
+ this.rsServices = rsServices;
this.catalogTracker = catalogTracker;
this.regionInfo = regionInfo;
}
@@ -79,7 +82,7 @@ public class OpenRegionHandler extends E
// now since we edit meta?
// Check that this region is not already online
- HRegion region = server.getFromOnlineRegions(encodedName);
+ HRegion region = this.rsServices.getFromOnlineRegions(encodedName);
if (region != null) {
LOG.warn("Attempting open of " + regionInfo.getRegionNameAsString() +
" but it's already online on this server");
@@ -106,8 +109,8 @@ public class OpenRegionHandler extends E
final AtomicInteger openingInteger = new AtomicInteger(openingVersion);
try {
// Instantiate the region. This also periodically updates OPENING.
- region = HRegion.openHRegion(regionInfo, server.getWAL(),
- server.getConfiguration(), server.getFlushRequester(),
+ region = HRegion.openHRegion(regionInfo, this.rsServices.getWAL(),
+ server.getConfiguration(), this.rsServices.getFlushRequester(),
new Progressable() {
public void progress() {
try {
@@ -159,26 +162,26 @@ public class OpenRegionHandler extends E
// Do checks to see if we need to compact (references or too many files)
if(region.hasReferences() || region.hasTooManyStoreFiles()) {
- server.getCompactionRequester().requestCompaction(region,
+ this.rsServices.getCompactionRequester().requestCompaction(region,
region.hasReferences() ? "Region has references on open" :
"Region has too many store files");
}
// Add to online regions
- server.addToOnlineRegions(region);
+ this.rsServices.addToOnlineRegions(region);
// Update ZK, ROOT or META
try {
if(regionInfo.isRootRegion()) {
RootLocationEditor.setRootLocation(server.getZooKeeper(),
- server.getServerInfo().getServerAddress());
+ this.rsServices.getServerInfo().getServerAddress());
} else if(regionInfo.isMetaRegion()) {
// TODO: doh, this has weird naming between RootEditor/MetaEditor
MetaEditor.updateMetaLocation(catalogTracker, regionInfo,
- server.getServerInfo());
+ this.rsServices.getServerInfo());
} else {
MetaEditor.updateRegionLocation(catalogTracker, region.getRegionInfo(),
- server.getServerInfo());
+ this.rsServices.getServerInfo());
}
} catch (IOException e) {
// TODO: rollback the open?
Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRootHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRootHandler.java?rev=987697&r1=987696&r2=987697&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRootHandler.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRootHandler.java Sat Aug 21 05:25:01 2010
@@ -20,8 +20,9 @@
package org.apache.hadoop.hbase.regionserver.handler;
import org.apache.hadoop.hbase.HRegionInfo;
+import org.apache.hadoop.hbase.Server;
import org.apache.hadoop.hbase.catalog.CatalogTracker;
-import org.apache.hadoop.hbase.regionserver.RegionServer;
+import org.apache.hadoop.hbase.regionserver.RegionServerServices;
/**
* Handles opening of the root region on a region server.
@@ -29,8 +30,9 @@ import org.apache.hadoop.hbase.regionser
* This is executed after receiving an OPEN RPC from the master for root.
*/
public class OpenRootHandler extends OpenRegionHandler {
- public OpenRootHandler(RegionServer server,
+ public OpenRootHandler(final Server server,
+ final RegionServerServices rsServices,
CatalogTracker catalogTracker, HRegionInfo regionInfo) {
- super(server, catalogTracker, regionInfo, EventType.M2RS_OPEN_ROOT);
+ super(server, rsServices, catalogTracker, regionInfo, EventType.M2RS_OPEN_ROOT);
}
}
Modified: hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java?rev=987697&r1=987696&r2=987697&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java (original)
+++ hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java Sat Aug 21 05:25:01 2010
@@ -343,7 +343,7 @@ public class MiniHBaseCluster {
public void flushcache() throws IOException {
for (JVMClusterUtil.RegionServerThread t:
this.hbaseCluster.getRegionServers()) {
- for(HRegion r: t.getRegionServer().getOnlineRegions()) {
+ for(HRegion r: t.getRegionServer().getOnlineRegionsLocalContext()) {
r.flushcache();
}
}
@@ -376,7 +376,7 @@ public class MiniHBaseCluster {
List<HRegion> ret = new ArrayList<HRegion>();
for (JVMClusterUtil.RegionServerThread rst : getRegionServerThreads()) {
HRegionServer hrs = rst.getRegionServer();
- for (HRegion region : hrs.getOnlineRegions()) {
+ for (HRegion region : hrs.getOnlineRegionsLocalContext()) {
if (Bytes.equals(region.getTableDesc().getName(), tableName)) {
ret.add(region);
}
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=987697&r1=987696&r2=987697&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 Sat Aug 21 05:25:01 2010
@@ -27,6 +27,7 @@ import static org.junit.Assert.assertTru
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.commons.logging.Log;
@@ -40,6 +41,10 @@ import org.apache.hadoop.hbase.HTableDes
import org.apache.hadoop.hbase.TableExistsException;
import org.apache.hadoop.hbase.TableNotDisabledException;
import org.apache.hadoop.hbase.TableNotFoundException;
+import org.apache.hadoop.hbase.executor.EventHandler;
+import org.apache.hadoop.hbase.executor.ExecutorService;
+import org.apache.hadoop.hbase.executor.EventHandler.EventType;
+import org.apache.hadoop.hbase.master.MasterServices;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.AfterClass;
import org.junit.Before;
@@ -96,6 +101,8 @@ public class TestAdmin {
TEST_UTIL.createTable(tableName, HConstants.CATALOG_FAMILY);
tables = this.admin.listTables();
assertEquals(numTables + 1, tables.length);
+
+ // FIRST, do htabledescriptor changes.
HTableDescriptor htd = this.admin.getTableDescriptor(tableName);
// Make a copy and assert copy is good.
HTableDescriptor copy = new HTableDescriptor(htd);
@@ -115,13 +122,119 @@ public class TestAdmin {
assertTrue(expectedException);
this.admin.disableTable(tableName);
assertTrue(this.admin.isTableDisabled(tableName));
- this.admin.modifyTable(tableName, copy);
- HTableDescriptor modifiedhcd = this.admin.getTableDescriptor(tableName);
+ modifyTable(tableName, copy);
+ HTableDescriptor modifiedHtd = 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));
+ assertFalse(htd.equals(modifiedHtd));
+ assertTrue(copy.equals(modifiedHtd));
+ assertEquals(newFlushSize, modifiedHtd.getMemStoreFlushSize());
+ assertEquals(key, modifiedHtd.getValue(key));
+
+ // Reenable table.
+ this.admin.enableTable(tableName);
+ assertFalse(this.admin.isTableDisabled(tableName));
+
+ // Now work on column family changes.
+ int countOfFamilies = modifiedHtd.getFamilies().size();
+ assertTrue(countOfFamilies > 0);
+ HColumnDescriptor hcd = modifiedHtd.getFamilies().iterator().next();
+ int maxversions = hcd.getMaxVersions();
+ final int newMaxVersions = maxversions + 1;
+ hcd.setMaxVersions(newMaxVersions);
+ expectedException = false;
+ final byte [] hcdName = hcd.getName();
+ try {
+ this.admin.modifyColumn(tableName, hcd);
+ LOG.info("Modified column");
+ } catch (TableNotDisabledException e) {
+ LOG.error("EXCEP", e);
+ expectedException = true;
+ }
+ assertTrue(expectedException);
+ this.admin.disableTable(tableName);
+ assertTrue(this.admin.isTableDisabled(tableName));
+ modifyColumn(tableName, hcd);
+ this.admin.modifyColumn(tableName, hcd);
+ modifiedHtd = this.admin.getTableDescriptor(tableName);
+ HColumnDescriptor modifiedHcd = modifiedHtd.getFamily(hcdName);
+ assertEquals(newMaxVersions, modifiedHcd.getMaxVersions());
+
+ TODO: ADD/REMOVE COLUMN, REMOVE TABLE
+ }
+
+ /**
+ * Modify table is async so wait on completion of the table operation in master.
+ * @param tableName
+ * @param htd
+ * @throws IOException
+ */
+ private void modifyTable(final byte [] tableName, final HTableDescriptor htd)
+ throws IOException {
+ MasterServices services = TEST_UTIL.getMiniHBaseCluster().getMaster();
+ ExecutorService executor = services.getExecutorService();
+ AtomicBoolean done = new AtomicBoolean(false);
+ executor.registerListener(EventType.C2M_MODIFY_TABLE, new DoneListener(done));
+ this.admin.modifyTable(tableName, htd);
+ while (!done.get()) {
+ synchronized (done) {
+ try {
+ done.wait(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ executor.unregisterListener(EventType.C2M_MODIFY_TABLE);
+ }
+
+ /**
+ * Modify table is async so wait on completion of the table operation in master.
+ * @param tableName
+ * @param htd
+ * @throws IOException
+ */
+ private void modifyColumn(final byte [] tableName, final HColumnDescriptor hcd)
+ throws IOException {
+ MasterServices services = TEST_UTIL.getMiniHBaseCluster().getMaster();
+ ExecutorService executor = services.getExecutorService();
+ AtomicBoolean done = new AtomicBoolean(false);
+ executor.registerListener(EventType.C2M_MODIFY_FAMILY, new DoneListener(done));
+ this.admin.modifyColumn(tableName, hcd);
+ while (!done.get()) {
+ synchronized (done) {
+ try {
+ done.wait(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ /**
+ * Listens for when an event is done in Master.
+ */
+ static class DoneListener implements EventHandler.EventHandlerListener {
+ private final AtomicBoolean done;
+
+ DoneListener(final AtomicBoolean done) {
+ super();
+ this.done = done;
+ }
+
+ @Override
+ public void afterProcess(EventHandler event) {
+ this.done.set(true);
+ synchronized (this.done) {
+ // Wake anyone waiting on this value to change.
+ this.done.notifyAll();
+ }
+ }
+
+ @Override
+ public void beforeProcess(EventHandler event) {
+ // continue
+ }
}
@Test
Modified: hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java?rev=987697&r1=987696&r2=987697&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java (original)
+++ hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java Sat Aug 21 05:25:01 2010
@@ -40,7 +40,6 @@ import org.apache.hadoop.hbase.executor.
import org.apache.hadoop.hbase.executor.EventHandler.EventHandlerListener;
import org.apache.hadoop.hbase.executor.EventHandler.EventType;
import org.apache.hadoop.hbase.master.handler.TotesHRegionInfo;
-import org.apache.hadoop.hbase.regionserver.HRegion;
import org.apache.hadoop.hbase.regionserver.HRegionServer;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.util.Threads;
@@ -100,32 +99,32 @@ public class TestZKBasedOpenCloseRegion
int rsIdx = 0;
HRegionServer regionServer =
TEST_UTIL.getHBaseCluster().getRegionServer(rsIdx);
- Collection<HRegion> regions = regionServer.getOnlineRegions();
- HRegion region;
- while((region = regions.iterator().next()) != null) {
- if(!region.getRegionInfo().isMetaRegion() && !region.getRegionInfo().isRootRegion()) {
+ Collection<HRegionInfo> regions = regionServer.getOnlineRegions();
+ HRegionInfo hri;
+ while((hri = regions.iterator().next()) != null) {
+ if(!hri.isMetaRegion() && !hri.isRootRegion()) {
break;
}
}
- LOG.debug("Asking RS to close region " + region.getRegionNameAsString());
+ LOG.debug("Asking RS to close region " + hri.getRegionNameAsString());
AtomicBoolean closeEventProcessed = new AtomicBoolean(false);
AtomicBoolean reopenEventProcessed = new AtomicBoolean(false);
EventHandlerListener closeListener =
- new ReopenEventListener(region.getRegionNameAsString(),
+ new ReopenEventListener(hri.getRegionNameAsString(),
closeEventProcessed, EventType.RS2ZK_REGION_CLOSED);
cluster.getMaster().executorService.
registerListener(EventType.RS2ZK_REGION_CLOSED, closeListener);
EventHandlerListener openListener =
- new ReopenEventListener(region.getRegionNameAsString(),
+ new ReopenEventListener(hri.getRegionNameAsString(),
reopenEventProcessed, EventType.RS2ZK_REGION_OPENED);
cluster.getMaster().executorService.
registerListener(EventType.RS2ZK_REGION_OPENED, openListener);
- LOG.info("Unassign " + region.getRegionNameAsString());
- cluster.getMaster().assignmentManager.unassign(region.getRegionInfo());
+ LOG.info("Unassign " + hri.getRegionNameAsString());
+ cluster.getMaster().assignmentManager.unassign(hri);
synchronized(closeEventProcessed) {
closeEventProcessed.wait(3*60*1000);
@@ -197,22 +196,22 @@ public class TestZKBasedOpenCloseRegion
int rsIdx = 0;
HRegionServer regionServer = TEST_UTIL.getHBaseCluster().getRegionServer(rsIdx);
- Collection<HRegion> regions = regionServer.getOnlineRegions();
- HRegion region;
- while((region = regions.iterator().next()) != null) {
- if(!region.getRegionInfo().isMetaRegion() && !region.getRegionInfo().isRootRegion()) {
+ Collection<HRegionInfo> regions = regionServer.getOnlineRegions();
+ HRegionInfo hri;
+ while((hri = regions.iterator().next()) != null) {
+ if(!hri.isMetaRegion() && !hri.isRootRegion()) {
break;
}
}
- LOG.debug("Asking RS to close region " + region.getRegionNameAsString());
+ LOG.debug("Asking RS to close region " + hri.getRegionNameAsString());
AtomicBoolean closeEventProcessed = new AtomicBoolean(false);
EventHandlerListener listener =
- new CloseRegionEventListener(region.getRegionNameAsString(),
+ new CloseRegionEventListener(hri.getRegionNameAsString(),
closeEventProcessed);
cluster.getMaster().executorService.registerListener(EventType.RS2ZK_REGION_CLOSED, listener);
- cluster.getMaster().assignmentManager.unassign(region.getRegionInfo());
+ cluster.getMaster().assignmentManager.unassign(hri);
synchronized(closeEventProcessed) {
// wait for 3 minutes
Modified: hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/regionserver/DisabledTestRegionServerExit.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/regionserver/DisabledTestRegionServerExit.java?rev=987697&r1=987696&r2=987697&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/regionserver/DisabledTestRegionServerExit.java (original)
+++ hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/regionserver/DisabledTestRegionServerExit.java Sat Aug 21 05:25:01 2010
@@ -130,7 +130,7 @@ public class DisabledTestRegionServerExi
int server = -1;
for (int i = 0; i < regionThreads.size() && server == -1; i++) {
HRegionServer s = regionThreads.get(i).getRegionServer();
- Collection<HRegion> regions = s.getOnlineRegions();
+ Collection<HRegion> regions = s.getOnlineRegionsLocalContext();
for (HRegion r : regions) {
if (Bytes.equals(r.getTableDesc().getName(),
HConstants.META_TABLE_NAME)) {
Modified: hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRolling.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRolling.java?rev=987697&r1=987696&r2=987697&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRolling.java (original)
+++ hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRolling.java Sat Aug 21 05:25:01 2010
@@ -172,7 +172,7 @@ public class TestLogRolling extends HBas
// flush all regions
List<HRegion> regions =
- new ArrayList<HRegion>(server.getOnlineRegions());
+ new ArrayList<HRegion>(server.getOnlineRegionsLocalContext());
for (HRegion r: regions) {
r.flushcache();
}