You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@trafodion.apache.org by "Suresh Subbiah (JIRA)" <ji...@apache.org> on 2017/10/05 22:08:00 UTC

[jira] [Created] (TRAFODION-2767) Select count(*) from a renamed table should return error 4082 instead of error 8448

Suresh Subbiah created TRAFODION-2767:
-----------------------------------------

             Summary: Select count(*) from a renamed table should return error 4082 instead of error 8448
                 Key: TRAFODION-2767
                 URL: https://issues.apache.org/jira/browse/TRAFODION-2767
             Project: Apache Trafodion
          Issue Type: Bug
          Components: sql-cmp
    Affects Versions: 2.2-incubating
            Reporter: Suresh Subbiah
            Assignee: Suresh Subbiah
             Fix For: 2.2-incubating


Select count(*) from a table that has been renamed now returns a 8448 error with a hbase stack. This used to return a proper 4082 error:

SQL>select count(*) from mytable1;
*** ERROR[4082] Object TRAFODION.MYTEST.MYTABLE1 does not exist or is inaccessible. [2017-08-30 15:47:07]

This is a regression introduced sometime between the 20170824 daily build and the 20170901 daily build. The 4082 error was still seen in the 20170824 daily build. The same regression is also seen in R2.2.4 20170830 daily build. It also only occurs with the select count(*) statement, as select and showddl both still return the 4082 error, as shown here:

>>drop schema if exists mytest cascade;

--- SQL operation complete.
>>create schema mytest;

--- SQL operation complete.
>>set schema mytest;

--- SQL operation complete.
>>
>>create table mytable1 (a int);

--- SQL operation complete.
>>insert into mytable1 values (1),(2),(3);

--- 3 row(s) inserted.
>>
>>select count(*) from mytable1;

(EXPR)
--------------------

                   3

--- 1 row(s) selected.
>>
>>alter table mytable1 rename to mytable2;

--- SQL operation complete.
>>
>>showddl mytable1;

*** ERROR[4082] Object TRAFODION.MYTEST.MYTABLE1 does not exist or is inaccessible.

--- SQL operation failed with errors.
>>select * from mytable1;

*** ERROR[4082] Object TRAFODION.MYTEST.MYTABLE1 does not exist or is inaccessible.

*** ERROR[8822] The statement was not prepared.

>>select count(*) from mytable1;

*** ERROR[8448] Unable to access Hbase interface. Call to ExpHbaseInterface::coProcAggr returned error HBASE_ACCESS_ERROR(-706). Cause: org.apache.hadoop.hbase.TableNotFoundException: TRAFODION.MYTEST.MYTABLE1
org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegionInMeta(ConnectionManager.java:1264)
org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegion(ConnectionManager.java:1162)
org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegion(ConnectionManager.java:1146)
org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegion(ConnectionManager.java:1103)
org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.getRegionLocation(ConnectionManager.java:938)
org.apache.hadoop.hbase.client.HRegionLocator.getRegionLocation(HRegionLocator.java:83)
org.apache.hadoop.hbase.client.HTable.getRegionLocation(HTable.java:504)
org.apache.hadoop.hbase.client.HTable.getKeysAndRegionsInRange(HTable.java:747)
org.apache.hadoop.hbase.client.HTable.getKeysAndRegionsInRange(HTable.java:717)
org.apache.hadoop.hbase.client.HTable.getStartKeysInRange(HTable.java:1784)
org.apache.hadoop.hbase.client.HTable.coprocessorService(HTable.java:1739)
org.apache.hadoop.hbase.client.coprocessor.AggregationClient.rowCount(AggregationClient.java:319)
org.apache.hadoop.hbase.client.coprocessor.AggregationClient.rowCount(AggregationClient.java:285)
org.trafodion.sql.HTableClient.coProcAggr(HTableClient.java:2064).

--- 0 row(s) selected.
>>
>>drop schema mytest cascade;

--- SQL operation complete.

----- To reproduce

drop schema if exists mytest cascade;
create schema mytest;
set schema mytest;

create table mytable1 (a int);
insert into mytable1 values (1),(2),(3);

select count(*) from mytable1;

alter table mytable1 rename to mytable2;

showddl mytable1;
select * from mytable1;
select count(*) from mytable1;

drop schema mytest cascade;

---- Analysis
As Anoop said, when CoProc plan is chosen objectuid was not being added to root tdb. Adding the object uid is necessary as this is used to invalidate query cache upon a DDL change and to invalidate prepared plans held by executor as well. After adding objectuid of table to root tdb we get the expected error messages.

>>select count(*) from mytable1;

*** ERROR[4082] Object TRAFODION.MYTEST.MYTABLE1 does not exist or is inaccessible.

*** ERROR[8822] The statement was not prepared.

-- s1 was prepared before the alter statement as select count(*) from mytable1
>>execute s1 ;

*** ERROR[4082] Object TRAFODION.MYTEST.MYTABLE1 does not exist or is inaccessible.

*** ERROR[8822] The statement was not prepared.

--- 0 row(s) selected.

A simpler way to detect this problem is took for ObjectUIDs in explain output. If they are missing for a Trafodion table, the we will see this problem. Current output of explain is below. Note the line under ROOT with ObjectUIDs.


------------------------------------------------------------------ PLAN SUMMARY
MODULE_NAME .............. DYNAMICALLY COMPILED
STATEMENT_NAME ........... S1
PLAN_ID .................. 212373989857170229
ROWS_OUT ................. 1
EST_TOTAL_COST ........... 0.01
STATEMENT ................ select count(*) from mytable1;


------------------------------------------------------------------ NODE LISTING
ROOT ====================================== SEQ_NO 2 ONLY CHILD 1
REQUESTS_IN .............. 1
ROWS_OUT ................. 1
EST_OPER_COST ............ 0
EST_TOTAL_COST ........... 0.01
DESCRIPTION
  est_memory_per_node .... 10240.00(Limit), 0.00(BMOs), 0.00(nBMOs) MB
  max_card_est ........... 1
  fragment_id ............ 0
  parent_frag ............ (none)
  fragment_type .......... master
  record_length .......... 8
  statement_index ........ 0
  affinity_value ......... 0
  max_max_cardinality 100
  total_overflow_size .... 0.00 KB
  xn_access_mode ......... read_only
  xn_autoabort_interval 0
  auto_query_retry ....... enabled
  plan_version ....... 2,600
  embedded_arkcmp ........ used
  ObjectUIDs ............. 7043208724545270591
  select_list ............ count(1 )


HBASE_AGGR ================================ SEQ_NO 1 NO CHILDREN
REQUESTS_IN .............. (not found)
ROWS_OUT ................. 1
EST_OPER_COST ............ 0
EST_TOTAL_COST ........... 0
DESCRIPTION
  max_card_est ........... 1
  fragment_id ............ 0
  parent_frag ............ (none)
  fragment_type .......... master
  record_length .......... 8
  aggregates ............. count(1 )



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)