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