IMPALA-5318: Generate access events with fully qualified table names This commit fixes an issue where dropping a table that is not loaded correctly (throws TableLoadingException) generates an access event that doesn't use a fully qualified table name.
Change-Id: Icd63f7e4accc7fda9719e13059fa8d432981618a Reviewed-on: http://gerrit.cloudera.org:8080/6879 Reviewed-by: Alex Behm <[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/a2caacf8 Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/a2caacf8 Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/a2caacf8 Branch: refs/heads/master Commit: a2caacf872ac0881723c865539f5be2d3e79e0e2 Parents: f195b75 Author: Dimitris Tsirogiannis <[email protected]> Authored: Fri May 12 14:11:28 2017 -0700 Committer: Impala Public Jenkins <[email protected]> Committed: Sat May 13 02:26:56 2017 +0000 ---------------------------------------------------------------------- .../apache/impala/analysis/DropTableOrViewStmt.java | 3 ++- .../java/org/apache/impala/analysis/TableDef.java | 2 +- .../java/org/apache/impala/analysis/AuditingTest.java | 14 +++++++++++++- 3 files changed, 16 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/a2caacf8/fe/src/main/java/org/apache/impala/analysis/DropTableOrViewStmt.java ---------------------------------------------------------------------- diff --git a/fe/src/main/java/org/apache/impala/analysis/DropTableOrViewStmt.java b/fe/src/main/java/org/apache/impala/analysis/DropTableOrViewStmt.java index d7d429c..fc9db4d 100644 --- a/fe/src/main/java/org/apache/impala/analysis/DropTableOrViewStmt.java +++ b/fe/src/main/java/org/apache/impala/analysis/DropTableOrViewStmt.java @@ -105,7 +105,8 @@ public class DropTableOrViewStmt extends StatementBase { // we set it as TABLE as VIEW loading is unlikely to fail and even if it does // TABLE -> VIEW is a small difference. analyzer.addAccessEvent(new TAccessEvent( - tableName_.toString(), TCatalogObjectType.TABLE, Privilege.DROP.toString())); + analyzer.getFqTableName(tableName_).toString(), TCatalogObjectType.TABLE, + Privilege.DROP.toString())); } catch (AnalysisException e) { if (ifExists_ && analyzer.getMissingTbls().isEmpty()) return; throw e; http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/a2caacf8/fe/src/main/java/org/apache/impala/analysis/TableDef.java ---------------------------------------------------------------------- diff --git a/fe/src/main/java/org/apache/impala/analysis/TableDef.java b/fe/src/main/java/org/apache/impala/analysis/TableDef.java index 5c8a653..f524595 100644 --- a/fe/src/main/java/org/apache/impala/analysis/TableDef.java +++ b/fe/src/main/java/org/apache/impala/analysis/TableDef.java @@ -202,7 +202,7 @@ class TableDef { throw new AnalysisException(Analyzer.TBL_ALREADY_EXISTS_ERROR_MSG + getTblName()); } - analyzer.addAccessEvent(new TAccessEvent(getTblName().toString(), + analyzer.addAccessEvent(new TAccessEvent(fqTableName_.toString(), TCatalogObjectType.TABLE, Privilege.CREATE.toString())); Preconditions.checkNotNull(options_); http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/a2caacf8/fe/src/test/java/org/apache/impala/analysis/AuditingTest.java ---------------------------------------------------------------------- diff --git a/fe/src/test/java/org/apache/impala/analysis/AuditingTest.java b/fe/src/test/java/org/apache/impala/analysis/AuditingTest.java index 163424f..60d31c8 100644 --- a/fe/src/test/java/org/apache/impala/analysis/AuditingTest.java +++ b/fe/src/test/java/org/apache/impala/analysis/AuditingTest.java @@ -229,6 +229,13 @@ public class AuditingTest extends AnalyzerTest { "drop table functional.unsupported_partition_types"); Assert.assertEquals(accessEvents, Sets.newHashSet(new TAccessEvent( "functional.unsupported_partition_types", TCatalogObjectType.TABLE, "DROP"))); + + // Dropping a table without using a fully qualified path should generate the correct + // access event (see IMPALA-5318). + accessEvents = AnalyzeAccessEvents( + "drop table unsupported_partition_types", "functional"); + Assert.assertEquals(accessEvents, Sets.newHashSet(new TAccessEvent( + "functional.unsupported_partition_types", TCatalogObjectType.TABLE, "DROP"))); } @Test @@ -456,7 +463,12 @@ public class AuditingTest extends AnalyzerTest { */ private Set<TAccessEvent> AnalyzeAccessEvents(String stmt) throws AuthorizationException, AnalysisException { - Analyzer analyzer = createAnalyzer(Catalog.DEFAULT_DB); + return AnalyzeAccessEvents(stmt, Catalog.DEFAULT_DB); + } + + private Set<TAccessEvent> AnalyzeAccessEvents(String stmt, String db) + throws AuthorizationException, AnalysisException { + Analyzer analyzer = createAnalyzer(db); AnalyzesOk(stmt, analyzer); return analyzer.getAccessEvents(); }
