IMPALA-5579: Fix IndexOutOfBoundsException in GetTables metadata request

Issue:
GetTables metadata request may result in an IndexOutOfBoundsException
while accessing table comments fields if one or more tables can't be
retrieved from the catalog cache.

Fix:
Only add tables that can be retrieved from the catalog cache (i.e. no
TableLoadingException is thrown) in the result of a GetTables request.

Change-Id: Ic933b9950d58e6f880d4078faf1a69ee7c6adbf1
Reviewed-on: http://gerrit.cloudera.org:8080/7296
Reviewed-by: Dimitris Tsirogiannis <[email protected]>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/466808ae
Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/466808ae
Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/466808ae

Branch: refs/heads/master
Commit: 466808aede88df3bb6b6f8faff39ab5db8103955
Parents: 91dbeb3
Author: Dimitris Tsirogiannis <[email protected]>
Authored: Mon Jun 26 11:12:43 2017 -0700
Committer: Impala Public Jenkins <[email protected]>
Committed: Tue Jun 27 02:36:46 2017 +0000

----------------------------------------------------------------------
 .../main/java/org/apache/impala/service/MetadataOp.java   |  2 +-
 .../test/java/org/apache/impala/service/FrontendTest.java | 10 ++++++++++
 2 files changed, 11 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/466808ae/fe/src/main/java/org/apache/impala/service/MetadataOp.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/service/MetadataOp.java 
b/fe/src/main/java/org/apache/impala/service/MetadataOp.java
index 3bf7534..6883bac 100644
--- a/fe/src/main/java/org/apache/impala/service/MetadataOp.java
+++ b/fe/src/main/java/org/apache/impala/service/MetadataOp.java
@@ -272,7 +272,6 @@ public class MetadataOp {
         List<List<Column>> tablesColumnsList = Lists.newArrayList();
         List<String> tableComments = Lists.newArrayList();
         for (String tabName: fe.getTableNames(db.getName(), 
tablePatternMatcher, user)) {
-          tableList.add(tabName);
           Table table = null;
           try {
             table = catalog.getTable(db.getName(), tabName);
@@ -291,6 +290,7 @@ public class MetadataOp {
             comment = table.getMetaStoreTable().getParameters().get("comment");
             columns.addAll(fe.getColumns(table, columnPatternMatcher, user));
           }
+          tableList.add(tabName);
           tablesColumnsList.add(columns);
           tableComments.add(Strings.nullToEmpty(comment));
         }

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/466808ae/fe/src/test/java/org/apache/impala/service/FrontendTest.java
----------------------------------------------------------------------
diff --git a/fe/src/test/java/org/apache/impala/service/FrontendTest.java 
b/fe/src/test/java/org/apache/impala/service/FrontendTest.java
index c3faa0a..d303315 100644
--- a/fe/src/test/java/org/apache/impala/service/FrontendTest.java
+++ b/fe/src/test/java/org/apache/impala/service/FrontendTest.java
@@ -207,6 +207,16 @@ public class FrontendTest extends FrontendTestBase {
         assertEquals("", row.colVals.get(4).string_val);
       }
     }
+
+    // Make sure tables that can't be loaded don't result in errors in the 
GetTables
+    // request (see IMPALA-5579)
+    req = new TMetadataOpRequest();
+    req.opcode = TMetadataOpcode.GET_TABLES;
+    req.get_tables_req = new TGetTablesReq();
+    req.get_tables_req.setSchemaName("functional");
+    req.get_tables_req.setTableName("hive_index_tbl");
+    resp = execMetadataOp(req);
+    assertEquals(0, resp.rows.size());
   }
 
   @Test

Reply via email to