You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hbase.apache.org by "Izaak Rubin (JIRA)" <ji...@apache.org> on 2008/07/14 22:24:31 UTC

[jira] Issue Comment Edited: (HBASE-739) HBaseAdmin.createTable() using old HTableDescription doesn't work

    [ https://issues.apache.org/jira/browse/HBASE-739?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12613442#action_12613442 ] 

irubin edited comment on HBASE-739 at 7/14/08 1:24 PM:
------------------------------------------------------------

I think I've really fixed it this time.  I added a default constructor to UnmodifyableHTableDescriptor, which I should have done in the last patch (this all goes in the same vein of making UnmodifyableHTableDescriptor serializable).  

I found that Eclipse really confused the testing process - I definitely ran the test with and without the default constructor, sometimes succeeding and sometimes failing.  Running the test on the command-line was much more useful and straightforward, and I'd recommend doing that instead (at least for this test).  Here's how you can run just that test on the command-line:

Add the following to your build.xml:

{code}
<target name="ensure-test-name" unless="test">
  <fail message="You must run this target with -Dtest=TestName"/>
</target>

<target name="runtest" description="Runs the test you specify on the command line with -Dtest=" depends="compile, ensure-test-name">
  <junit printsummary="withOutAndErr" fork="yes"> 
    <classpath refid="test.classpath" />
    <formatter type="plain" usefile="false"/>
    <batchtest>
      <fileset dir="${src.test}">
        <include name="**/${test}.java"/>
      </fileset>
    </batchtest>
  </junit>
</target>
{code}

Start HBase, make sure TestHbase739.java is added, "mytable" exists, etc, and then enter:

{code}
ant clean jar compile-test runtest -Dtest=TestHbase739
{code}

Without the attached patch, hbase-739_v2.patch, this should fail (it might say "Build Successful", but check the actual junit output).  After adding the attached patch, this should succeed (at least it did for me, when doing this process on a fresh copy of HBase).  

Let me know if this is still generating errors.

      was (Author: irubin):
    I think I've really fixed it this time.  I added a default constructor to UnmodifyableHTableDescriptor, which I should have done in the last patch (this all goes in the same vein of making UnmodifyableHTableDescriptor serializable).  

I found that Eclipse really confused the testing process - I had definitely run the test with and without the default constructor, sometimes succeeding and sometimes failing.  Running the test on the command-line was much more useful and straightforward, and I'd recommend doing that instead (at least for this test).  Here's how you can run just that test on the command-line:

Add the following to your build.xml:

{code}
<target name="ensure-test-name" unless="test">
  <fail message="You must run this target with -Dtest=TestName"/>
</target>

<target name="runtest" description="Runs the test you specify on the command line with -Dtest=" depends="compile, ensure-test-name">
  <junit printsummary="withOutAndErr" fork="yes"> 
    <classpath refid="test.classpath" />
    <formatter type="plain" usefile="false"/>
    <batchtest>
      <fileset dir="${src.test}">
        <include name="**/${test}.java"/>
      </fileset>
    </batchtest>
  </junit>
</target>
{code}

Start HBase, make sure TestHbase739.java is added, "mytable" exists, etc, and then enter:

{code}
ant clean jar compile-test runtest -Dtest=TestHbase739
{code}

Without the attached patch, hbase-739_v2.patch, this should fail (it might say "Build Successful", but check the actual junit output).  After adding the attached patch, this should succeed (at least it did for me, when doing this process on a fresh copy of HBase).  

Let me know if this is still generating errors.
  
> HBaseAdmin.createTable() using old HTableDescription doesn't work
> -----------------------------------------------------------------
>
>                 Key: HBASE-739
>                 URL: https://issues.apache.org/jira/browse/HBASE-739
>             Project: Hadoop HBase
>          Issue Type: Bug
>          Components: client
>    Affects Versions: 0.2.0
>            Reporter: Sebastien Rainville
>            Assignee: Izaak Rubin
>            Priority: Minor
>         Attachments: hbase-739.patch, hbase-739_v2.patch, master.log, TEST-org.apache.hadoop.hbase.TestTruncateIsaak.txt, TestHbase739.java, TestTruncate2.java
>
>
> The following test case (see below) illustrate what used to work in branch 0.1 and that doesn't anymore. testTruncateInTrunk() shows how I got it to work again. I get this error now when trying the old code but using trunk:
> java.lang.reflect.InvocationTargetException
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:597)
> 	at com.openplaces.test.fixture.FixtureLoader.truncateHbaseTable(FixtureLoader.java:105)
> 	at com.openplaces.test.fixture.FixtureLoader.loadHbaseFixtures(FixtureLoader.java:63)
> 	at com.openplaces.test.fixture.TestCaseWithFixtures.hbaseFixtures(TestCaseWithFixtures.java:34)
> 	at com.openplaces.test.isolated.TestSearchSRFIEF.setUp(TestSearchSRFIEF.java:37)
> 	at junit.framework.TestCase.runBare(TestCase.java:125)
> 	at junit.framework.TestResult$1.protect(TestResult.java:106)
> 	at junit.framework.TestResult.runProtected(TestResult.java:124)
> 	at junit.framework.TestResult.run(TestResult.java:109)
> 	at junit.framework.TestCase.run(TestCase.java:118)
> 	at junit.framework.TestSuite.runTest(TestSuite.java:208)
> 	at junit.framework.TestSuite.run(TestSuite.java:203)
> 	at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
> 	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
> Caused by: java.net.SocketTimeoutException: timed out waiting for rpc response
> 	at org.apache.hadoop.ipc.Client.call(Client.java:559)
> 	at org.apache.hadoop.hbase.ipc.HbaseRPC$Invoker.invoke(HbaseRPC.java:211)
> 	at $Proxy5.createTable(Unknown Source)
> 	at org.apache.hadoop.hbase.client.HBaseAdmin.createTableAsync(HBaseAdmin.java:184)
> 	at org.apache.hadoop.hbase.client.HBaseAdmin.createTable(HBaseAdmin.java:144)
> 	at com.openplaces.util.hbaserecord.connectionadapters.HbaseAdapter.truncateTable(HbaseAdapter.java:502)
> 	at com.openplaces.util.hbaserecord.Base$Singleton.truncate(Base.java:609)
> 	... 21 more
> import java.io.IOException;
> import java.util.Collection;
> import org.apache.hadoop.hbase.HBaseConfiguration;
> import org.apache.hadoop.hbase.HColumnDescriptor;
> import org.apache.hadoop.hbase.HTableDescriptor;
> import org.apache.hadoop.hbase.client.HBaseAdmin;
> import org.apache.hadoop.hbase.client.HTable;
> import junit.framework.TestCase;
> @SuppressWarnings("deprecation")
> public class TestTruncate extends TestCase {
> 	public void testTruncateInBranch_0_1() throws IOException{
> 		HTable table = new HTable("mytable");
> 		HBaseAdmin admin = new HBaseAdmin(new HBaseConfiguration());
> 		HTableDescriptor tableDesc = table.getMetadata();
> 		admin.deleteTable(table.getTableName());
> 		admin.createTable(tableDesc);
> 	}
> 	public void testTruncateInTrunk() throws IOException{
> 		HTable table = new HTable("mytable");
> 		HBaseAdmin admin = new HBaseAdmin(new HBaseConfiguration());
> 		Collection<HColumnDescriptor> families = table.getMetadata().getFamilies();
> 		
> 		HTableDescriptor tableDesc = new HTableDescriptor(table.getTableName());
> 		for(HColumnDescriptor family : families){
> 			tableDesc.addFamily(family);
> 		}
> 		admin.deleteTable(table.getTableName());
> 		admin.createTable(tableDesc);
> 	}
> }

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