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/08/11 23:56:31 UTC
svn commit: r684951 - in /hadoop/hbase/trunk: CHANGES.txt
src/java/org/apache/hadoop/hbase/client/HConnectionManager.java
src/test/org/apache/hadoop/hbase/client/TestHTable.java
Author: stack
Date: Mon Aug 11 14:56:30 2008
New Revision: 684951
URL: http://svn.apache.org/viewvc?rev=684951&view=rev
Log:
HBASE-729 lient region/metadata cache should have a public method for invalidating entries
Modified:
hadoop/hbase/trunk/CHANGES.txt
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HConnectionManager.java
hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/client/TestHTable.java
Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=684951&r1=684950&r2=684951&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Mon Aug 11 14:56:30 2008
@@ -7,6 +7,8 @@
HBASE-805 Remove unnecessary getRow overloads in HRS (Jonathan Gray via
Jim Kellerman) (Fix whitespace diffs in HRegionServer)
HBASE-811 HTD is not fully copyable (Andrew Purtell via Jim Kellerman)
+ HBASE-729 Client region/metadata cache should have a public method for
+ invalidating entries (Andrew Purtell via Stack)
IMPROVEMENTS
HBASE-801 When a table haven't disable, shell could response in a "user
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HConnectionManager.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HConnectionManager.java?rev=684951&r1=684950&r2=684951&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HConnectionManager.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HConnectionManager.java Mon Aug 11 14:56:30 2008
@@ -371,61 +371,42 @@
return rowsScanned > 0 && result;
}
+ private class HTableDescriptorFinder
+ implements MetaScanner.MetaScannerVisitor {
+ byte[] tableName;
+ HTableDescriptor result;
+ public HTableDescriptorFinder(byte[] tableName) {
+ this.tableName = tableName;
+ }
+ public boolean processRow(RowResult rowResult) throws IOException {
+ HRegionInfo info = Writables.getHRegionInfo(
+ rowResult.get(HConstants.COL_REGIONINFO));
+ HTableDescriptor desc = info.getTableDesc();
+ if (Bytes.compareTo(desc.getName(), tableName) == 0) {
+ result = desc;
+ return false;
+ }
+ return true;
+ }
+ HTableDescriptor getResult() {
+ return result;
+ }
+ }
+
/** {@inheritDoc} */
- public HTableDescriptor getHTableDescriptor(byte[] tableName)
+ public HTableDescriptor getHTableDescriptor(final byte[] tableName)
throws IOException {
if (Bytes.equals(tableName, HConstants.ROOT_TABLE_NAME)) {
return new UnmodifyableHTableDescriptor(HTableDescriptor.ROOT_TABLEDESC);
}
- if (!tableExists(tableName)) {
- throw new TableNotFoundException(Bytes.toString(tableName));
+ if (Bytes.equals(tableName, HConstants.META_TABLE_NAME)) {
+ return new UnmodifyableHTableDescriptor(HTableDescriptor.META_TABLEDESC);
}
- byte[] startKey =
- HRegionInfo.createRegionName(tableName, null, HConstants.ZEROES);
-
- HTableDescriptor result = null;
- HRegionInfo currentRegion = null;
- ScannerCallable s = null;
- while (result == null) {
- if (currentRegion != null) {
- byte[] endKey = currentRegion.getEndKey();
- if (endKey == null ||
- Bytes.equals(endKey, HConstants.EMPTY_BYTE_ARRAY)) {
- // We have reached the end of the table and we're done
- break;
- }
- }
- HRegionInfo oldRegion = currentRegion;
- if (oldRegion != null) {
- startKey = oldRegion.getEndKey();
- }
- s = new ScannerCallable(this,
- (Bytes.equals(tableName, HConstants.META_TABLE_NAME) ?
- HConstants.ROOT_TABLE_NAME : HConstants.META_TABLE_NAME),
- HConstants.COL_REGIONINFO_ARRAY, startKey,
- HConstants.LATEST_TIMESTAMP, null
- );
- // Open scanner
- getRegionServerWithRetries(s);
- currentRegion = s.getHRegionInfo();
- try {
- RowResult r = null;
- while ((r = getRegionServerWithRetries(s)) != null) {
- Cell c = r.get(HConstants.COL_REGIONINFO);
- if (c != null) {
- HRegionInfo info = Writables.getHRegionInfoOrNull(c.getValue());
- if (info != null) {
- if (Bytes.equals(info.getTableDesc().getName(), tableName)) {
- result = new UnmodifyableHTableDescriptor(info.getTableDesc());
- break;
- }
- }
- }
- }
- } finally {
- s.setClose();
- getRegionServerWithRetries(s);
- }
+ HTableDescriptorFinder finder = new HTableDescriptorFinder(tableName);
+ MetaScanner.metaScan(conf, finder);
+ HTableDescriptor result = finder.getResult();
+ if (result == null) {
+ throw new TableNotFoundException(Bytes.toString(tableName));
}
return result;
}
Modified: hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/client/TestHTable.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/client/TestHTable.java?rev=684951&r1=684950&r2=684951&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/client/TestHTable.java (original)
+++ hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/client/TestHTable.java Mon Aug 11 14:56:30 2008
@@ -150,36 +150,25 @@
// enable the table
admin.enableTable(tableAname);
- // Use a metascanner to avoid client API caching (HConnection has a
- // metadata cache)
- MetaScanner.MetaScannerVisitor visitor =
- new MetaScanner.MetaScannerVisitor() {
- public boolean processRow(RowResult rowResult) throws IOException {
- HRegionInfo info = Writables.getHRegionInfo(
- rowResult.get(HConstants.COL_REGIONINFO));
+ // test that attribute changes were applied
+ desc = a.getTableDescriptor();
+ if (Bytes.compareTo(desc.getName(), tableAname) != 0)
+ fail("wrong table descriptor returned");
+ // check HTD attribute
+ value = desc.getValue(attrName);
+ if (value == null)
+ fail("missing HTD attribute value");
+ if (Bytes.compareTo(value, attrValue) != 0)
+ fail("HTD attribute value is incorrect");
+ // check HCD attribute
+ for (HColumnDescriptor c: desc.getFamilies()) {
+ value = c.getValue(attrName);
+ if (value == null)
+ fail("missing HCD attribute value");
+ if (Bytes.compareTo(value, attrValue) != 0)
+ fail("HCD attribute value is incorrect");
+ }
- LOG.info("visiting " + info.toString());
- HTableDescriptor desc = info.getTableDesc();
- if (Bytes.compareTo(desc.getName(), tableAname) == 0) {
- // check HTD attribute
- byte[] value = desc.getValue(attrName);
- if (value == null)
- fail("missing HTD attribute value");
- if (Bytes.compareTo(value, attrValue) != 0)
- fail("HTD attribute value is incorrect");
- // check HCD attribute
- for (HColumnDescriptor c: desc.getFamilies()) {
- value = c.getValue(attrName);
- if (value == null)
- fail("missing HCD attribute value");
- if (Bytes.compareTo(value, attrValue) != 0)
- fail("HCD attribute value is incorrect");
- }
- }
- return true;
- }
- };
- MetaScanner.metaScan(conf, visitor);
} catch (Exception e) {
e.printStackTrace();
fail();