You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sentry.apache.org by sr...@apache.org on 2015/10/10 01:19:12 UTC
incubator-sentry git commit: SENTRY-888: Exceptions in Callable tasks
in MetaStoreCacheInitializer are being dropped ( Sravya Tirukkovalur,
Reviewed by: Lenni Kuff)
Repository: incubator-sentry
Updated Branches:
refs/heads/master 00f74f32a -> b20f200c5
SENTRY-888: Exceptions in Callable tasks in MetaStoreCacheInitializer are being dropped ( Sravya Tirukkovalur, Reviewed by: Lenni Kuff)
Project: http://git-wip-us.apache.org/repos/asf/incubator-sentry/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-sentry/commit/b20f200c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-sentry/tree/b20f200c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-sentry/diff/b20f200c
Branch: refs/heads/master
Commit: b20f200c5c095001049a8a235f75aa555d4d0099
Parents: 00f74f3
Author: Sravya Tirukkovalur <sr...@cloudera.com>
Authored: Fri Oct 9 16:17:37 2015 -0700
Committer: Sravya Tirukkovalur <sr...@cloudera.com>
Committed: Fri Oct 9 16:19:00 2015 -0700
----------------------------------------------------------------------
.../sentry/hdfs/MetastoreCacheInitializer.java | 11 ++---
.../hdfs/TestMetastoreCacheInitializer.java | 42 ++++++++++++++++++++
2 files changed, 48 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/b20f200c/sentry-hdfs/sentry-hdfs-service/src/main/java/org/apache/sentry/hdfs/MetastoreCacheInitializer.java
----------------------------------------------------------------------
diff --git a/sentry-hdfs/sentry-hdfs-service/src/main/java/org/apache/sentry/hdfs/MetastoreCacheInitializer.java b/sentry-hdfs/sentry-hdfs-service/src/main/java/org/apache/sentry/hdfs/MetastoreCacheInitializer.java
index f1e28e9..eb85d45 100644
--- a/sentry-hdfs/sentry-hdfs-service/src/main/java/org/apache/sentry/hdfs/MetastoreCacheInitializer.java
+++ b/sentry-hdfs/sentry-hdfs-service/src/main/java/org/apache/sentry/hdfs/MetastoreCacheInitializer.java
@@ -46,7 +46,7 @@ class MetastoreCacheInitializer implements Closeable {
final Exception failure;
CallResult(Exception ex) {
- failure = null;
+ failure = ex;
}
}
@@ -56,16 +56,18 @@ class MetastoreCacheInitializer implements Closeable {
@Override
public CallResult call() throws Exception {
+ Exception e = null;
try {
doTask();
} catch (Exception ex) {
// Ignore if object requested does not exists
- return new CallResult(
- (ex instanceof NoSuchObjectException) ? null : ex);
+ if (!(ex instanceof NoSuchObjectException) ){
+ e = ex;
+ }
} finally {
taskCounter.decrementAndGet();
}
- return new CallResult(null);
+ return new CallResult(e);
}
abstract void doTask() throws Exception;
@@ -225,7 +227,6 @@ class MetastoreCacheInitializer implements Closeable {
String[]{"/"});
PathsUpdate tempUpdate = new PathsUpdate(-1, false);
List<String> allDbStr = hmsHandler.get_all_databases();
- List<Future<CallResult>> results = new ArrayList<Future<CallResult>>();
for (String dbName : allDbStr) {
Callable<CallResult> dbTask = new DbTask(tempUpdate, dbName);
results.add(threadPool.submit(dbTask));
http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/b20f200c/sentry-hdfs/sentry-hdfs-service/src/test/java/org/apache/sentry/hdfs/TestMetastoreCacheInitializer.java
----------------------------------------------------------------------
diff --git a/sentry-hdfs/sentry-hdfs-service/src/test/java/org/apache/sentry/hdfs/TestMetastoreCacheInitializer.java b/sentry-hdfs/sentry-hdfs-service/src/test/java/org/apache/sentry/hdfs/TestMetastoreCacheInitializer.java
index a5a165a..f1e729f 100644
--- a/sentry-hdfs/sentry-hdfs-service/src/test/java/org/apache/sentry/hdfs/TestMetastoreCacheInitializer.java
+++ b/sentry-hdfs/sentry-hdfs-service/src/test/java/org/apache/sentry/hdfs/TestMetastoreCacheInitializer.java
@@ -130,4 +130,46 @@ public class TestMetastoreCacheInitializer {
cacheInitializer.close();
}
+
+ // Make sure exceptions in initializer parallel tasks are propagated well
+ @Test
+ public void testExceptionInTask() throws Exception {
+ //Set up mocks: db1.tb1, with tb1 returning a wrong dbname (db2)
+ Database db1 = Mockito.mock(Database.class);
+ Mockito.when(db1.getName()).thenReturn("db1");
+ Mockito.when(db1.getLocationUri()).thenReturn("hdfs:///db1");
+
+ Table tab1 = Mockito.mock(Table.class);
+ //Return a wrong db name, so that this triggers an exception
+ Mockito.when(tab1.getDbName()).thenReturn("db2");
+ Mockito.when(tab1.getTableName()).thenReturn("tab1");
+
+ IHMSHandler hmsHandler = Mockito.mock(IHMSHandler.class);
+ Mockito.when(hmsHandler.get_all_databases()).thenReturn(Lists
+ .newArrayList("db1"));
+ Mockito.when(hmsHandler.get_database("db1")).thenReturn(db1);
+ Mockito.when(hmsHandler.get_table_objects_by_name("db1",
+ Lists.newArrayList("tab1")))
+ .thenReturn(Lists.newArrayList(tab1));
+ Mockito.when(hmsHandler.get_all_tables("db1")).thenReturn(Lists
+ .newArrayList("tab1"));
+
+ Configuration conf = new Configuration();
+ conf.setInt(ServiceConstants.ServerConfig
+ .SENTRY_HDFS_SYNC_METASTORE_CACHE_MAX_PART_PER_RPC, 1);
+ conf.setInt(ServiceConstants.ServerConfig
+ .SENTRY_HDFS_SYNC_METASTORE_CACHE_MAX_TABLES_PER_RPC, 1);
+ conf.setInt(ServiceConstants.ServerConfig
+ .SENTRY_HDFS_SYNC_METASTORE_CACHE_INIT_THREADS, 1);
+
+ try {
+ MetastoreCacheInitializer cacheInitializer = new
+ MetastoreCacheInitializer(hmsHandler, conf);
+ UpdateableAuthzPaths update = cacheInitializer.createInitialUpdate();
+ Assert.fail("Expected cacheInitializer to fail");
+ } catch (Exception e) {
+ Assert.assertTrue(e instanceof RuntimeException);
+ }
+
+ }
}