Repository: sentry Updated Branches: refs/heads/master e77ec8a6e -> 1e6ea0ea2
SENTRY-1459: Alter view with HMS Client fails with "java.lang.IllegalArgumentException: Can not create a Path from a null string" (Ankur Gupta, Reviewed by: Sravya Tirukkovalur) Change-Id: I1761eb3b33e115de6cba17100d9af85bc0cb2b80 Project: http://git-wip-us.apache.org/repos/asf/sentry/repo Commit: http://git-wip-us.apache.org/repos/asf/sentry/commit/1e6ea0ea Tree: http://git-wip-us.apache.org/repos/asf/sentry/tree/1e6ea0ea Diff: http://git-wip-us.apache.org/repos/asf/sentry/diff/1e6ea0ea Branch: refs/heads/master Commit: 1e6ea0ea2b8a1294d28990c35be95bcbe064f463 Parents: e77ec8a Author: Sravya Tirukkovalur <[email protected]> Authored: Tue Oct 11 09:45:38 2016 -0700 Committer: Sravya Tirukkovalur <[email protected]> Committed: Tue Oct 11 09:45:38 2016 -0700 ---------------------------------------------------------------------- .../metastore/MetastoreAuthzBindingBase.java | 19 ++++++++++------- ...actMetastoreTestWithStaticConfiguration.java | 9 ++++++++ .../e2e/metastore/TestMetastoreEndToEnd.java | 22 ++++++++++++++++++++ 3 files changed, 42 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/sentry/blob/1e6ea0ea/sentry-binding/sentry-binding-hive-common/src/main/java/org/apache/sentry/binding/metastore/MetastoreAuthzBindingBase.java ---------------------------------------------------------------------- diff --git a/sentry-binding/sentry-binding-hive-common/src/main/java/org/apache/sentry/binding/metastore/MetastoreAuthzBindingBase.java b/sentry-binding/sentry-binding-hive-common/src/main/java/org/apache/sentry/binding/metastore/MetastoreAuthzBindingBase.java index fb7d246..3e2a9ea 100644 --- a/sentry-binding/sentry-binding-hive-common/src/main/java/org/apache/sentry/binding/metastore/MetastoreAuthzBindingBase.java +++ b/sentry-binding/sentry-binding-hive-common/src/main/java/org/apache/sentry/binding/metastore/MetastoreAuthzBindingBase.java @@ -273,17 +273,21 @@ public abstract class MetastoreAuthzBindingBase extends MetaStorePreEventListene .getDbName(), context.getOldTable().getTableName()); // if the operation requires location change, then add URI privilege check - String oldLocationUri; - String newLocationUri; + String oldLocationUri = null; + String newLocationUri = null; try { - oldLocationUri = PathUtils.parseDFSURI(warehouseDir, - getSdLocation(context.getOldTable().getSd())); - newLocationUri = PathUtils.parseDFSURI(warehouseDir, - getSdLocation(context.getNewTable().getSd())); + if (!StringUtils.isEmpty(context.getOldTable().getSd().getLocation())) { + oldLocationUri = PathUtils.parseDFSURI(warehouseDir, + getSdLocation(context.getOldTable().getSd())); + } + if (!StringUtils.isEmpty(context.getNewTable().getSd().getLocation())) { + newLocationUri = PathUtils.parseDFSURI(warehouseDir, + getSdLocation(context.getNewTable().getSd())); + } } catch (URISyntaxException e) { throw new MetaException(e.getMessage()); } - if (oldLocationUri.compareTo(newLocationUri) != 0) { + if (!StringUtils.equals(oldLocationUri, newLocationUri)) { outputBuilder.addUriToOutput(getAuthServer(), newLocationUri, warehouseDir); operation = HiveOperation.ALTERTABLE_LOCATION; @@ -291,7 +295,6 @@ public abstract class MetastoreAuthzBindingBase extends MetaStorePreEventListene authorizeMetastoreAccess( operation, inputBuilder.build(), outputBuilder.build()); - } private void authorizeAddPartition(PreAddPartitionEvent context) http://git-wip-us.apache.org/repos/asf/sentry/blob/1e6ea0ea/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/metastore/AbstractMetastoreTestWithStaticConfiguration.java ---------------------------------------------------------------------- diff --git a/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/metastore/AbstractMetastoreTestWithStaticConfiguration.java b/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/metastore/AbstractMetastoreTestWithStaticConfiguration.java index 9f35991..80ca5b5 100644 --- a/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/metastore/AbstractMetastoreTestWithStaticConfiguration.java +++ b/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/metastore/AbstractMetastoreTestWithStaticConfiguration.java @@ -101,6 +101,15 @@ public abstract class AbstractMetastoreTestWithStaticConfiguration extends return client.getTable(dbName, tabName); } + public Table createMetastoreView(HiveMetaStoreClient client, String dbName, + String tabName, List<FieldSchema> cols) throws Exception { + + Table tbl = makeMetastoreTableObject(client, dbName, tabName, cols); + tbl.setTableType("VIRTUAL_VIEW"); + client.createTable(tbl); + return tbl; + } + public void addPartition(HiveMetaStoreClient client, String dbName, String tblName, List<String> ptnVals, Table tbl) throws Exception { Partition part = makeMetastorePartitionObject(dbName, tblName, ptnVals, tbl); http://git-wip-us.apache.org/repos/asf/sentry/blob/1e6ea0ea/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/metastore/TestMetastoreEndToEnd.java ---------------------------------------------------------------------- diff --git a/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/metastore/TestMetastoreEndToEnd.java b/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/metastore/TestMetastoreEndToEnd.java index c0f5fe8..59a4693 100644 --- a/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/metastore/TestMetastoreEndToEnd.java +++ b/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/metastore/TestMetastoreEndToEnd.java @@ -276,6 +276,28 @@ public class TestMetastoreEndToEnd extends } /** + * Verify alter view privileges + * @throws Exception + */ + @Test + public void testAlterViewPrivileges() throws Exception { + HiveMetaStoreClient client = context.getMetaStoreClient(ADMIN1); + createMetastoreView(client, dbName, tabName1, + Lists.newArrayList(new FieldSchema("col1", "int", ""))); + client.close(); + + // verify group1 users with DDL privileges can alter tables in db_1 + client = context.getMetaStoreClient(USER1_1); + Table metaView2 = client.getTable(dbName, tabName1); + metaView2.getSd().setCols( + Lists.newArrayList(new FieldSchema("col2", "double", ""))); + client.alter_table(dbName, tabName1, metaView2); + Table metaView3 = client.getTable(dbName, tabName1); + assertEquals(metaView2.getSd().getCols(), metaView3.getSd().getCols()); + client.close(); + } + + /** * Verify add partition privileges * @throws Exception */
