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

Tim Sell commented on HBASE-657:
--------------------------------

Definitely an improvement but there's still some odd behaviour.

I did the following, to test puts and gets via HTable and the thrift client.

    try{
      System.out.println("putting to an invalid column");
      HTable table = new HTable(t);
      BatchUpdate batch = new BatchUpdate("foo".getBytes());
      batch.put("invalid:col".getBytes(), "bar".getBytes());
      table.commit(batch);
    } catch (Exception e){
      e.printStackTrace();
    }
    
    try{
      System.out.println("getting invalid column");
      HTable table = new HTable(t);
      table.get("foo".getBytes(), "invalid:col".getBytes());
    } catch (Exception e){
      e.printStackTrace();
    }
    
    try{
      System.out.println("putting to an invalid column via thrift");
      Mutation mut = new Mutation(false, "invalid:col".getBytes(), 
"bar".getBytes());
      List<Mutation> muts = new ArrayList<Mutation>();
      client.mutateRow(t, "foo".getBytes(), muts);
    } catch (Exception e){
      e.printStackTrace();
    }
    try {  
      System.out.println("getting invalid column via thrift");
      TCell cell = client.get(t, "foo".getBytes(), "invalide:col".getBytes());
    } catch (Exception e){
      e.printStackTrace();
    }
    System.exit(1);

I got sensible exceptions using HTable, and when doing a get via thrift. 
Strangely doing a put via thrift just does nothing. no exception, no looping.

Here's the output.

putting to an invalid column
2008-08-16 14:45:50,003 DEBUG [main] 
client.HConnectionManager$TableServers(812): Found ROOT REGION => {NAME => 
'-ROOT-,,0', STARTKEY => '', ENDKEY => '', ENCODED => 70236052, TABLE => {{NAME 
=> '-ROOT-', IS_ROOT => 'true', IS_META => 'true', FAMILIES => [{NAME => 
'info', BLOOMFILTER => 'false', COMPRESSION => 'NONE', VERSIONS => '1', LENGTH 
=> '2147483647', TTL => '-1', IN_MEMORY => 'false', BLOCKCACHE => 'false'}]}}
2008-08-16 14:45:50,027 DEBUG [main] 
client.HConnectionManager$TableServers(560): Attempt 0 of 10 failed with 
<org.apache.hadoop.hbase.client.NoServerForRegionException: No server address 
listed in .META. for region demo_table,,1218894349041>. Retrying after sleep of 
5000
2008-08-16 14:45:50,030 DEBUG [main] 
client.HConnectionManager$TableServers(697): Removed .META.,,1 from cache 
because of demo_table,,99999999999999
2008-08-16 14:45:50,054 DEBUG [main] 
client.HConnectionManager$TableServers(812): Found ROOT REGION => {NAME => 
'-ROOT-,,0', STARTKEY => '', ENDKEY => '', ENCODED => 70236052, TABLE => {{NAME 
=> '-ROOT-', IS_ROOT => 'true', IS_META => 'true', FAMILIES => [{NAME => 
'info', BLOOMFILTER => 'false', COMPRESSION => 'NONE', VERSIONS => '1', LENGTH 
=> '2147483647', TTL => '-1', IN_MEMORY => 'false', BLOCKCACHE => 'false'}]}}
org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: 
org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: Column family 
on invalid:col does not exist in region demo_table,,1218894349041 in table 
{NAME => 'demo_table', IS_ROOT => 'false', IS_META => 'false', FAMILIES => 
[{NAME => 'entry', BLOOMFILTER => 'false', COMPRESSION => 'NONE', VERSIONS => 
'10', LENGTH => '2147483647', TTL => '-1', IN_MEMORY => 'false', BLOCKCACHE => 
'false'}, {NAME => 'unused', BLOOMFILTER => 'false', COMPRESSION => 'NONE', 
VERSIONS => '3', LENGTH => '2147483647', TTL => '-1', IN_MEMORY => 'false', 
BLOCKCACHE => 'false'}]}
        at 
org.apache.hadoop.hbase.regionserver.HRegion.checkColumn(HRegion.java:1718)
        at 
org.apache.hadoop.hbase.regionserver.HRegion.localput(HRegion.java:1591)
        at 
org.apache.hadoop.hbase.regionserver.HRegion.batchUpdate(HRegion.java:1391)
        at 
org.apache.hadoop.hbase.regionserver.HRegionServer.batchUpdate(HRegionServer.java:1141)
        at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.hadoop.hbase.ipc.HbaseRPC$Server.call(HbaseRPC.java:473)
        at org.apache.hadoop.ipc.Server$Handler.run(Server.java:896)

        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at 
org.apache.hadoop.hbase.RemoteExceptionHandler.decodeRemoteException(RemoteExceptionHandler.java:82)
        at 
org.apache.hadoop.hbase.client.HConnectionManager$TableServers.getRegionServerWithRetries(HConnectionManager.java:868)
        at org.apache.hadoop.hbase.client.HTable.commit(HTable.java:1257)
        at org.apache.hadoop.hbase.client.HTable.commit(HTable.java:1243)
        at org.apache.hadoop.hbase.thrift.DemoClient.run(DemoClient.java:138)
        at org.apache.hadoop.hbase.thrift.DemoClient.main(DemoClient.java:61)
getting invalid column
2008-08-16 14:45:55,209 DEBUG [main] 
client.HConnectionManager$TableServers(612): Cache hit in table locations for 
row <> and tableName demo_table: location server 127.0.0.1:44872, location 
region name demo_table,,1218894349041
org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: 
org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: Column family 
on invalid:col does not exist in region demo_table,,1218894349041 in table 
{NAME => 'demo_table', IS_ROOT => 'false', IS_META => 'false', FAMILIES => 
[{NAME => 'entry', BLOOMFILTER => 'false', COMPRESSION => 'NONE', VERSIONS => 
'10', LENGTH => '2147483647', TTL => '-1', IN_MEMORY => 'false', BLOCKCACHE => 
'false'}, {NAME => 'unused', BLOOMFILTER => 'false', COMPRESSION => 'NONE', 
VERSIONS => '3', LENGTH => '2147483647', TTL => '-1', IN_MEMORY => 'false', 
BLOCKCACHE => 'false'}]}
        at 
org.apache.hadoop.hbase.regionserver.HRegion.checkColumn(HRegion.java:1718)
        at org.apache.hadoop.hbase.regionserver.HRegion.get(HRegion.java:1149)
        at org.apache.hadoop.hbase.regionserver.HRegion.get(HRegion.java:1114)
        at 
org.apache.hadoop.hbase.regionserver.HRegionServer.get(HRegionServer.java:1015)
        at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.hadoop.hbase.ipc.HbaseRPC$Server.call(HbaseRPC.java:473)
        at org.apache.hadoop.ipc.Server$Handler.run(Server.java:896)

        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at 
org.apache.hadoop.hbase.RemoteExceptionHandler.decodeRemoteException(RemoteExceptionHandler.java:82)
        at 
org.apache.hadoop.hbase.client.HConnectionManager$TableServers.getRegionServerWithRetries(HConnectionManager.java:868)
        at org.apache.hadoop.hbase.client.HTable.get(HTable.java:386)
        at org.apache.hadoop.hbase.thrift.DemoClient.run(DemoClient.java:146)
        at org.apache.hadoop.hbase.thrift.DemoClient.main(DemoClient.java:61)
putting to an invalid column via thrift
getting invalid column via thrift
IOError(message:org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException:
 Column family on invalide:col does not exist in region 
demo_table,,1218894349041 in table {NAME => 'demo_table', IS_ROOT => 'false', 
IS_META => 'false', FAMILIES => [{NAME => 'entry', BLOOMFILTER => 'false', 
COMPRESSION => 'NONE', VERSIONS => '10', LENGTH => '2147483647', TTL => '-1', 
IN_MEMORY => 'false', BLOCKCACHE => 'false'}, {NAME => 'unused', BLOOMFILTER => 
'false', COMPRESSION => 'NONE', VERSIONS => '3', LENGTH => '2147483647', TTL => 
'-1', IN_MEMORY => 'false', BLOCKCACHE => 'false'}]}
        at 
org.apache.hadoop.hbase.regionserver.HRegion.checkColumn(HRegion.java:1718)
        at org.apache.hadoop.hbase.regionserver.HRegion.get(HRegion.java:1149)
        at org.apache.hadoop.hbase.regionserver.HRegion.get(HRegion.java:1114)
        at 
org.apache.hadoop.hbase.regionserver.HRegionServer.get(HRegionServer.java:1015)
        at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.hadoop.hbase.ipc.HbaseRPC$Server.call(HbaseRPC.java:473)
        at org.apache.hadoop.ipc.Server$Handler.run(Server.java:896)
)
        at 
org.apache.hadoop.hbase.thrift.generated.Hbase$get_result.read(Hbase.java:4259)
        at 
org.apache.hadoop.hbase.thrift.generated.Hbase$Client.recv_get(Hbase.java:677)
        at 
org.apache.hadoop.hbase.thrift.generated.Hbase$Client.get(Hbase.java:653)
        at org.apache.hadoop.hbase.thrift.DemoClient.run(DemoClient.java:161)
        at org.apache.hadoop.hbase.thrift.DemoClient.main(DemoClient.java:61)


Afterwards I checked via the shell just to see if the thrift put did anything, 
and the table was empty as I'd expect.


> InvalidColumnNameException not passed through to Thrift interface
> -----------------------------------------------------------------
>
>                 Key: HBASE-657
>                 URL: https://issues.apache.org/jira/browse/HBASE-657
>             Project: Hadoop HBase
>          Issue Type: Bug
>          Components: thrift
>    Affects Versions: 0.1.2
>            Reporter: Todd Lipcon
>            Assignee: Bryan Duxbury
>            Priority: Minor
>         Attachments: null-column-name.patch
>
>
> If an invalid column name is passed to the Thrift server, the 
> InvalidColumnNameException is not caught and turned into a Thrift exception. 
> Debug output:
> 08/05/29 20:34:30 DEBUG thrift.ThriftServer$HBaseHandler: get: 
> table=test_table, row=todd, col=foobar
> 08/05/29 20:34:30 DEBUG hbase.HTable: reloading table servers because: 
> org.apache.hadoop.hbase.InvalidColumnNameException: foobar is missing the 
> colon family/qualifier separator
>         at 
> org.apache.hadoop.hbase.HStoreKey.getColonOffset(HStoreKey.java:335)
>         at org.apache.hadoop.hbase.HStoreKey.extractFamily(HStoreKey.java:295)
>         at org.apache.hadoop.hbase.HRegion.checkColumn(HRegion.java:1676)
>         at org.apache.hadoop.hbase.HRegion.get(HRegion.java:1191)
>         at org.apache.hadoop.hbase.HRegion.get(HRegion.java:1154)
>         at org.apache.hadoop.hbase.HRegionServer.get(HRegionServer.java:1402)
>         at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:585)
>         at org.apache.hadoop.hbase.ipc.HbaseRPC$Server.call(HbaseRPC.java:413)
>         at org.apache.hadoop.ipc.Server$Handler.run(Server.java:901)
> 08/05/29 20:34:40 DEBUG hbase.HTable: reloading table servers because: 
> org.apache.hadoop.hbase.InvalidColumnNameException: foobar is missing the 
> colon family/qualifier separator
>         at 
> org.apache.hadoop.hbase.HStoreKey.getColonOffset(HStoreKey.java:335)
>         at org.apache.hadoop.hbase.HStoreKey.extractFamily(HStoreKey.java:295)
>         at org.apache.hadoop.hbase.HRegion.checkColumn(HRegion.java:1676)
>         at org.apache.hadoop.hbase.HRegion.get(HRegion.java:1191)
>         at org.apache.hadoop.hbase.HRegion.get(HRegion.java:1154)
>         at org.apache.hadoop.hbase.HRegionServer.get(HRegionServer.java:1402)
>         at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:585)
>         at org.apache.hadoop.hbase.ipc.HbaseRPC$Server.call(HbaseRPC.java:413)
>         at org.apache.hadoop.ipc.Server$Handler.run(Server.java:901)
> 08/05/29 20:34:50 DEBUG hbase.HTable: reloading table servers because: 
> org.apache.hadoop.hbase.InvalidColumnNameException: foobar is missing the 
> colon family/qualifier separator
>         at 
> org.apache.hadoop.hbase.HStoreKey.getColonOffset(HStoreKey.java:335)
>         at org.apache.hadoop.hbase.HStoreKey.extractFamily(HStoreKey.java:295)
>         at org.apache.hadoop.hbase.HRegion.checkColumn(HRegion.java:1676)
>         at org.apache.hadoop.hbase.HRegion.get(HRegion.java:1191)
>         at org.apache.hadoop.hbase.HRegion.get(HRegion.java:1154)
>         at org.apache.hadoop.hbase.HRegionServer.get(HRegionServer.java:1402)
>         at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:585)
>         at org.apache.hadoop.hbase.ipc.HbaseRPC$Server.call(HbaseRPC.java:413)
>         at org.apache.hadoop.ipc.Server$Handler.run(Server.java:901)
> 08/05/29 20:35:00 DEBUG hbase.HTable: reloading table servers because: 
> org.apache.hadoop.hbase.InvalidColumnNameException: foobar is missing the 
> colon family/qualifier separator
>         at 
> org.apache.hadoop.hbase.HStoreKey.getColonOffset(HStoreKey.java:335)
>         at org.apache.hadoop.hbase.HStoreKey.extractFamily(HStoreKey.java:295)
>         at org.apache.hadoop.hbase.HRegion.checkColumn(HRegion.java:1676)
>         at org.apache.hadoop.hbase.HRegion.get(HRegion.java:1191)
>         at org.apache.hadoop.hbase.HRegion.get(HRegion.java:1154)
>         at org.apache.hadoop.hbase.HRegionServer.get(HRegionServer.java:1402)
>         at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:585)
>         at org.apache.hadoop.hbase.ipc.HbaseRPC$Server.call(HbaseRPC.java:413)
>         at org.apache.hadoop.ipc.Server$Handler.run(Server.java:901)
> 08/05/29 20:35:10 DEBUG hbase.HTable: Trying to contact region server for row 
> 'todd', but failed after 5 attempts.
> Exception 1:
> org.apache.hadoop.hbase.InvalidColumnNameException: 
> org.apache.hadoop.hbase.InvalidColumnNameException: foobar is missing the 
> colon family/qualifier separator
>         at 
> org.apache.hadoop.hbase.HStoreKey.getColonOffset(HStoreKey.java:335)
>         at org.apache.hadoop.hbase.HStoreKey.extractFamily(HStoreKey.java:295)
>         at org.apache.hadoop.hbase.HRegion.checkColumn(HRegion.java:1676)
>         at org.apache.hadoop.hbase.HRegion.get(HRegion.java:1191)
>         at org.apache.hadoop.hbase.HRegion.get(HRegion.java:1154)
>         at org.apache.hadoop.hbase.HRegionServer.get(HRegionServer.java:1402)
>         at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:585)
>         at org.apache.hadoop.hbase.ipc.HbaseRPC$Server.call(HbaseRPC.java:413)
>         at org.apache.hadoop.ipc.Server$Handler.run(Server.java:901)
> Exception 1:
> org.apache.hadoop.hbase.InvalidColumnNameException: 
> org.apache.hadoop.hbase.InvalidColumnNameException: foobar is missing the 
> colon family/qualifier separator
>         at 
> org.apache.hadoop.hbase.HStoreKey.getColonOffset(HStoreKey.java:335)
>         at org.apache.hadoop.hbase.HStoreKey.extractFamily(HStoreKey.java:295)
>         at org.apache.hadoop.hbase.HRegion.checkColumn(HRegion.java:1676)
>         at org.apache.hadoop.hbase.HRegion.get(HRegion.java:1191)
>         at org.apache.hadoop.hbase.HRegion.get(HRegion.java:1154)
>         at org.apache.hadoop.hbase.HRegionServer.get(HRegionServer.java:1402)
>         at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:585)
>         at org.apache.hadoop.hbase.ipc.HbaseRPC$Server.call(HbaseRPC.java:413)
>         at org.apache.hadoop.ipc.Server$Handler.run(Server.java:901)
> Exception 1:
> org.apache.hadoop.hbase.InvalidColumnNameException: 
> org.apache.hadoop.hbase.InvalidColumnNameException: foobar is missing the 
> colon family/qualifier separator
>         at 
> org.apache.hadoop.hbase.HStoreKey.getColonOffset(HStoreKey.java:335)
>         at org.apache.hadoop.hbase.HStoreKey.extractFamily(HStoreKey.java:295)
>         at org.apache.hadoop.hbase.HRegion.checkColumn(HRegion.java:1676)
>         at org.apache.hadoop.hbase.HRegion.get(HRegion.java:1191)
>         at org.apache.hadoop.hbase.HRegion.get(HRegion.java:1154)
>         at org.apache.hadoop.hbase.HRegionServer.get(HRegionServer.java:1402)
>         at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:585)
>         at org.apache.hadoop.hbase.ipc.HbaseRPC$Server.call(HbaseRPC.java:413)
>         at org.apache.hadoop.ipc.Server$Handler.run(Server.java:901)
> Exception 1:
> org.apache.hadoop.hbase.InvalidColumnNameException: 
> org.apache.hadoop.hbase.InvalidColumnNameException: foobar is missing the 
> colon family/qualifier separator
>         at 
> org.apache.hadoop.hbase.HStoreKey.getColonOffset(HStoreKey.java:335)
>         at org.apache.hadoop.hbase.HStoreKey.extractFamily(HStoreKey.java:295)
>         at org.apache.hadoop.hbase.HRegion.checkColumn(HRegion.java:1676)
>         at org.apache.hadoop.hbase.HRegion.get(HRegion.java:1191)
>         at org.apache.hadoop.hbase.HRegion.get(HRegion.java:1154)
>         at org.apache.hadoop.hbase.HRegionServer.get(HRegionServer.java:1402)
>         at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:585)
>         at org.apache.hadoop.hbase.ipc.HbaseRPC$Server.call(HbaseRPC.java:413)
>         at org.apache.hadoop.ipc.Server$Handler.run(Server.java:901)

-- 
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