initializing a new HTable object against a nonexistent table throws a 
NoServerForRegionException instead of a TableNotFoundException when a different 
table has been created previously
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

                 Key: HADOOP-2579
                 URL: https://issues.apache.org/jira/browse/HADOOP-2579
             Project: Hadoop
          Issue Type: Bug
          Components: contrib/hbase
            Reporter: Peter Dolan


When a table has been created, initializing a new HTable object for that table 
works properly, as expected, but initializing a new HTable against a 
nonexistent table in the same context (a table exists), a 
NoServerForRegionException is thrown instead of TableNotFoundException, as 
would be expected.

If there haven't been any tables created, initializing a new HTable object 
against 'nosuchTable' throws TableNotFoundException, as expected.

Running the following TestCase exposes the issue on my machine.

{code:title=TestHTable.java|borderStyle=solid}
package org.apache.hadoop.hbase;

import java.io.IOException;

import org.apache.hadoop.io.Text;

/**
 * Tests HTable
 */
public class TestHTable extends HBaseClusterTestCase implements HConstants {
  public void testTableNotFoundExceptionWithoutAnyTables() {
    try {
      new HTable(conf, new Text("notATable"));
    } catch (TableNotFoundException e) {
      // expected
    } catch (IOException e) {
      e.printStackTrace();
      fail("Should have thrown a TableNotFoundException instead of a " +
          e.getClass());
    }
  }
  
  public void testTableNotFoundExceptionWithATable() {
    try {
      HColumnDescriptor column =
        new HColumnDescriptor(COLUMN_FAMILY.toString());
      HBaseAdmin admin = new HBaseAdmin(conf);
      HTableDescriptor testTableADesc =
        new HTableDescriptor("table");
      testTableADesc.addFamily(column);
      admin.createTable(testTableADesc);

      // This should throw a TableNotFoundException, it has not been created
      new HTable(conf, new Text("notATable"));
      
      fail("Should have thrown a TableNotFoundException");
    } catch (TableNotFoundException e) {
      // expected
    } catch (IOException e) {
      e.printStackTrace();
      fail("Should have thrown a TableNotFoundException instead of a " +
          e.getClass());
    }
  }
}
{code}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to