SENTRY-797: TestHDFSIntegration#testEngToEnd is flaky (Sravya Tirukkovalur, Reviewed by: Colin Ma)
Project: http://git-wip-us.apache.org/repos/asf/incubator-sentry/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-sentry/commit/8bd827b2 Tree: http://git-wip-us.apache.org/repos/asf/incubator-sentry/tree/8bd827b2 Diff: http://git-wip-us.apache.org/repos/asf/incubator-sentry/diff/8bd827b2 Branch: refs/heads/hive_plugin_v2 Commit: 8bd827b28b8a6df69f2d075ffbc10b305fc98380 Parents: 499074e Author: Sravya Tirukkovalur <[email protected]> Authored: Thu Jul 9 15:07:18 2015 -0700 Committer: Sravya Tirukkovalur <[email protected]> Committed: Fri Jul 10 08:04:01 2015 -0700 ---------------------------------------------------------------------- .../tests/e2e/hdfs/TestHDFSIntegration.java | 38 ++++++++++++++------ 1 file changed, 27 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/8bd827b2/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/hdfs/TestHDFSIntegration.java ---------------------------------------------------------------------- diff --git a/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/hdfs/TestHDFSIntegration.java b/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/hdfs/TestHDFSIntegration.java index 1c89b3b..53d71d6 100644 --- a/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/hdfs/TestHDFSIntegration.java +++ b/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/hdfs/TestHDFSIntegration.java @@ -74,6 +74,7 @@ import org.apache.hadoop.mapred.TextOutputFormat; import org.apache.hadoop.security.UserGroupInformation; import org.apache.sentry.binding.hive.SentryHiveAuthorizationTaskFactoryImpl; import org.apache.sentry.binding.hive.conf.HiveAuthzConf; +import org.apache.sentry.hdfs.SentryAuthorizationConstants; import org.apache.sentry.hdfs.SentryAuthorizationProvider; import org.apache.sentry.provider.db.SimpleDBProviderBackend; import org.apache.sentry.provider.file.LocalGroupResourceAuthorizationProvider; @@ -147,6 +148,7 @@ public class TestHDFSIntegration { private static int sentryPort = -1; protected static SentrySrv sentryServer; protected static boolean testSentryHA = false; + private static final long STALE_THRESHOLD = 5000; private static String fsURI; private static int hmsPort; @@ -271,9 +273,9 @@ public class TestHDFSIntegration { out.close(); Reflection.staticField("hiveSiteURL") - .ofType(URL.class) - .in(HiveConf.class) - .set(hiveSite.toURI().toURL()); + .ofType(URL.class) + .in(HiveConf.class) + .set(hiveSite.toURI().toURL()); metastore = new InternalMetastoreServer(hiveConf); new Thread() { @@ -281,7 +283,8 @@ public class TestHDFSIntegration { public void run() { try { metastore.start(); - while(true){} + while (true) { + } } catch (Exception e) { LOGGER.info("Could not start Hive Server"); } @@ -358,7 +361,7 @@ public class TestHDFSIntegration { conf.set("sentry.authorization-provider.hdfs-path-prefixes", "/user/hive/warehouse,/tmp/external"); conf.set("sentry.authorization-provider.cache-refresh-retry-wait.ms", "5000"); - conf.set("sentry.authorization-provider.cache-stale-threshold.ms", "3000"); + conf.set("sentry.authorization-provider.cache-stale-threshold.ms", String.valueOf(STALE_THRESHOLD)); conf.set("sentry.hdfs.service.security.mode", "none"); conf.set("sentry.hdfs.service.client.server.rpc-address", "localhost"); @@ -508,8 +511,12 @@ public class TestHDFSIntegration { hiveServer2.shutdown(); } } finally { - if (metastore != null) { - metastore.shutdown(); + try { + if (metastore != null) { + metastore.shutdown(); + } + } finally { + sentryServer.close(); } } } @@ -617,14 +624,23 @@ public class TestHDFSIntegration { //TODO: SENTRY-795: HDFS permissions do not sync when Sentry restarts in HA mode. if(!testSentryHA) { - sentryServer.stop(0); - // Verify that Sentry permission are still enforced for the "stale" period - verifyOnAllSubDirs("/user/hive/warehouse/p3", FsAction.WRITE_EXECUTE, "hbase", true); + long beforeStop = System.currentTimeMillis(); + sentryServer.stopAll(); + long timeTakenForStopMs = System.currentTimeMillis() - beforeStop; + LOGGER.info("Time taken for Sentry server stop: " + timeTakenForStopMs); + + // Verify that Sentry permission are still enforced for the "stale" period only if stop did not take too long + if(timeTakenForStopMs < STALE_THRESHOLD) { + verifyOnAllSubDirs("/user/hive/warehouse/p3", FsAction.WRITE_EXECUTE, "hbase", true); + Thread.sleep((STALE_THRESHOLD - timeTakenForStopMs)); + } else { + LOGGER.warn("Sentry server stop took too long"); + } // Verify that Sentry permission are NOT enforced AFTER "stale" period verifyOnAllSubDirs("/user/hive/warehouse/p3", null, "hbase", false); - sentryServer.start(0); + sentryServer.startAll(); } // Verify that After Sentry restart permissions are re-enforced
