Release Notes - Sentry - Version 1.7.0

** Sub-task
    * [SENTRY-505] - Default implementation of SentryAuthorizationValidator to do authorization
    * [SENTRY-506] - Default implementation of SentryAccessController to do grant/revoke role/privlege
    * [SENTRY-514] - Enable e2e tests for authorization V2
    * [SENTRY-532] - Add unit tests for DefaultSentryAuthorizationValidator
    * [SENTRY-542] - Extend SentryPolicyServiceClient to implement grant wrapped privilege info for V2
    * [SENTRY-568] - Implement taskFactory V2 to handle special privilege for Sentry
    * [SENTRY-569] - Workaround some operations for Authorization V2
    * [SENTRY-589] - Enable dist for authorization V2
    * [SENTRY-592] - Support column level security for V2
    * [SENTRY-603] - Execute on failure hooks for V2
    * [SENTRY-813] - Refactor the AuditMetadataLogEntity to support the audit log for generic mdoel
    * [SENTRY-814] - Add new log entity for generic model
    * [SENTRY-815] - Update the util to generate the command for audit log
    * [SENTRY-816] - Update the util to manage the log entity for audit log
    * [SENTRY-817] - Update processor for generic model to generate audit log
    * [SENTRY-916] - Improve TestPrivilegesAtTableScope for keep consistent with Hive metadata.
    * [SENTRY-917] - Improve TestRuntimeMetadataRetrieval for keeping database policies consistent with Hive metadata
    * [SENTRY-925] - Improve TestMetadataPermissions for keep consistent with Hive metadata.
    * [SENTRY-926] - Improve TestMetadataObjectRetrieval for keep consistent with Hive metadata.
    * [SENTRY-928] - Improve TestDbSentryOnFailureHookLoading for keeping database policies consistent with Hive metadata
    * [SENTRY-929] - Improve TestDbEndToEnd for keep consistent with Hive metadata.
    * [SENTRY-930] - Improve TestDbDDLAuditLog for keep consistent with Hive metadata.
    * [SENTRY-931] - Improve TestDatabaseProvider for keep consistent with Hive metadata.
    * [SENTRY-987] - Move general (non specific handler) solr-sentry code to solr-sentry-core package
    * [SENTRY-1011] - Add Kafka binding
    * [SENTRY-1012] - Add core model for Kafka
    * [SENTRY-1013] - Add policy engine for Kafka
    * [SENTRY-1014] - Add end-to-end tests for Kafka
    * [SENTRY-1023] - Create an initial branch for CI
    * [SENTRY-1029] - Address review comments for Kafka model that came after patch got committed.
    * [SENTRY-1030] - Restrict Kafka Cluster authorizable to only have "kafka-cluster" as authorizable's name.
    * [SENTRY-1056] - Get service name from Kafka's server properties.
    * [SENTRY-1057] - Add implementations for acls' CRUD
    * [SENTRY-1098] - Make Kafka dependency as provided
    * [SENTRY-1102] - Merge kafka branch into trunk
    * [SENTRY-1113] - Fix test failures due to missing files.
    * [SENTRY-1126] - Create a email list for jira updates (issues@)
    * [SENTRY-1137] - Update hive dependence to 2.0.0
    * [SENTRY-1138] - Extract common classes for binding-hive-v1 and binding-hive-v2
    * [SENTRY-1142] - Rebase on master
    * [SENTRY-1143] - Sentry TLP: Update the builds with new git repo
    * [SENTRY-1144] - Sentry TLP: Update status page
    * [SENTRY-1147] - Update Home page of Sentry Web
    * [SENTRY-1148] - Update the maillist of Sentry
    * [SENTRY-1149] - Update committer list of Sentry
    * [SENTRY-1150] - Update the website svn directory
    * [SENTRY-1151] - Update source code host at sentry website
    * [SENTRY-1152] - Update Sentry wiki after graduation
    * [SENTRY-1159] - Decouple datanucleus dependences for hive-binding V1 and V2
    * [SENTRY-1162] - Add shell for Sentry Kafka integration
    * [SENTRY-1163] - Enable Jenkins for Hive Authz2
    * [SENTRY-1172] - Update mailing lists page with new issues@ list
    * [SENTRY-1173] - Sentry TLP: Update pom.xml to new git location
    * [SENTRY-1186] - Sentry TLP: Update release download links on website
    * [SENTRY-1188] - Fixes to get kerberos auth work.
    * [SENTRY-1191] - update history page of Sentry release
    * [SENTRY-1192] - Add SQL upgrade script for 1.7.0
    * [SENTRY-1202] - Sentry TLP: Other Common post graduation tasks


** Bug
    * [SENTRY-677] - Make the Sentry DB provider RPC methods synchronized
    * [SENTRY-768] - [Improve error handling] Handle cases when getGroups throws an exception
    * [SENTRY-769] - [Improve error handling] Make sure groups in list_sentry_privileges_for_provider is not empty
    * [SENTRY-826] - TRUNCATE on empty partitioned table in Hive fails
    * [SENTRY-835] - Drop table leaves a connection open when using metastorelistener
    * [SENTRY-837] - Distributed path update counters in Sentry are indefinitely incremented
    * [SENTRY-878] - collect_list missing from HIVE_UDF_WHITE_LIST
    * [SENTRY-881] - Allow some metadata operations with column-level privileges
    * [SENTRY-884] - Give execute permission by default to paths managed by sentry
    * [SENTRY-885] - DB name should be case insensitive in HDFS sync plugin
    * [SENTRY-886] - HDFSIntegration test testAccessToTableDirectory should wait for cache refresh before verification
    * [SENTRY-888] - Exceptions in Callable tasks in MetaStoreCacheInitializer are being dropped
    * [SENTRY-890] - Fix TestDbOperations.testAllOnTable on real clusters
    * [SENTRY-892] - parsePath should handle empty paths well
    * [SENTRY-893] - Synchronize calls in SentryClient and create sentry client once per request in SimpleDBProvider
    * [SENTRY-900] - User could access sentry metric info by curl without authorization
    * [SENTRY-904] - Set max message size for thrift messages
    * [SENTRY-914] - Sentry default webserver port needs to change out of ephemeral port range
    * [SENTRY-922] - INSERT OVERWRITE DIRECTORY permission not working correctly
    * [SENTRY-923] - Fix SentryStore getPrivileges when table require "some"
    * [SENTRY-932] - TestColumnEndToEnd error check should non-case sensitive
    * [SENTRY-936] - getGroup and getUser should always return orginal hdfs values for paths in prefix which are not sentry managed
    * [SENTRY-944] - Setting HDFS rules on Sentry managed hdfs paths should not affect original hdfs rules
    * [SENTRY-945] - Avoid logging all DataNucleus queries when debug logging is enabled
    * [SENTRY-953] - External Partitions which are referenced by more than one table can cause some unexpected behavior with Sentry HDFS sync
    * [SENTRY-960] - Use hive.server2.builtin.udf.blacklist
    * [SENTRY-962] - Fix SentryStore getPrivileges when column require "some"
    * [SENTRY-965] - Solr /terms request handler broken because of components declaration
    * [SENTRY-966] - SqoopAuthBindingSingleton uses bad double check locking idiom
    * [SENTRY-968] - Uri check needs to be case sensitive
    * [SENTRY-971] - Add profile to enable Hive AuthZ v2
    * [SENTRY-974] - create a sentry test data dump to facilite sentry scale tests
    * [SENTRY-981] - Fix the error in integration tests
    * [SENTRY-988] - It's better to let SentryAuthorization setter path always fall through and update HDFS
    * [SENTRY-989] - RealTimeGet with explicit ids can bypass document level authorization
    * [SENTRY-991] - Roles of Sentry Permission needs to be case insensitive
    * [SENTRY-994] - SentryAuthorizationInfoX should override isSentryManaged
    * [SENTRY-997] - Update HiveAuthorizer of Sentry after HiveAuthorizer interface changes
    * [SENTRY-998] - TestSentryShellHive test failure with JDK 8
    * [SENTRY-1002] - PathsUpdate.parsePath(path) will throw an NPE when parsing relative paths
    * [SENTRY-1003] - Support "reload" by updating the classpath of Sentry function aux jar path during runtime
    * [SENTRY-1007] - Sentry column-level performance for wide tables
    * [SENTRY-1008] - Path should be not be updated if the create/drop table/partition event fails
    * [SENTRY-1009] - Improve TestDatabaseProvider to validate test object names instead of validating vague numbers.
    * [SENTRY-1010] - Sentry column-level performance for wide tables for 1.5.1
    * [SENTRY-1018] - HiveServer is not properly shutdown cause BindException in TestServerConfiguration
    * [SENTRY-1027] - Fix PMD error for unused field when enable Hive authz V2
    * [SENTRY-1035] - Generic service does not handle group name casing correctly
    * [SENTRY-1037] - Set "hadoop.security.authentication" to "kerberos" in the Generic Client
    * [SENTRY-1039] - Sentry shell tests assume order of option group privileges
    * [SENTRY-1044] - Tables with non-hdfs locations breaks HMS startup
    * [SENTRY-1046] - Hive Auxiliary JARs Directory is not working when Sentry is enabled: Caused by: java.lang.ClassNotFoundException
    * [SENTRY-1050] - Improve clearAll method to avoid throwing exceptions because of deleting objects created outside of tests.
    * [SENTRY-1054] - Updated Apache Shiro dependency
    * [SENTRY-1055] - Sentry service solr constants refer to clusters rather than services
    * [SENTRY-1058] - Duplicate junit versions in the root pom
    * [SENTRY-1059] - 'dependencies.dependency.version' for org.apache.sentry:sentry-core-model-kafka:jar is missing. @ line 42, column 17
    * [SENTRY-1060] - Improve the SentryAuthFilter error message when authentication failure
    * [SENTRY-1064] - Fix TestDbOperations#testCaseSensitivity
    * [SENTRY-1066] - Sentry oracle upgrade script failed with ORA-0955 duplicate name issue
    * [SENTRY-1071] - Update thrift gen-file with maven plugin
    * [SENTRY-1077] - create a wiki to describe how to run scale script to prepare data and how to run sentry hive e2e tests on the cluster
    * [SENTRY-1087] - Capture URI when using Hive Serdes
    * [SENTRY-1095] - Insert into requires URI privilege on partition location under table.
    * [SENTRY-1096] - Fix TestDbOperations#testCaseSensitivity failure on a real cluster
    * [SENTRY-1097] - Fix compilation errors from SentryGenericPolicyProcessor
    * [SENTRY-1099] - JDK8 autoboxing compilation failure
    * [SENTRY-1105] - Fix unittest TestMetastoreEndToEnd.testAddPartion
    * [SENTRY-1111] - Apache Sentry should depend on the same version of metrics-core as hadoop
    * [SENTRY-1112] - Change default value of "sentry.hive.server" to empty string
    * [SENTRY-1114] - Wrong classname and incorrect _CMD_JAR var in sentryShell
    * [SENTRY-1116] - Fix PMD violation for Sentry tests after missing commits
    * [SENTRY-1122] - Allow Solr Audit Log to Read Impersonator Info
    * [SENTRY-1128] - Add metastore_db to .gitignore
    * [SENTRY-1155] - Add waiting time for getMetastoreClient for avoiding metastore isn't ready
    * [SENTRY-1156] - TestDbColumnLevelMetaDataOps should add `use database` for user session created
    * [SENTRY-1157] - Fix Unit Tests TestAclsCrud&TestAuthorize failed
    * [SENTRY-1164] - Fix testCaseSensitivity test failure on a real cluster
    * [SENTRY-1169] - MetastorePlugin#renameAuthzObject log message prints oldpathname as newpathname
    * [SENTRY-1217] - NPE for list_sentry_privileges_by_authorizable when activeRoleSet is not set


** Improvement
    * [SENTRY-520] - Use the twitter Bootstrap kit (or similar) to beautify the Sentry Service webpage
    * [SENTRY-565] - Improve performance of filtering Hive SHOW commands
    * [SENTRY-685] - Refactor Sentry HDFS plugin to work with new Hadoop interface
    * [SENTRY-832] - Clean dependences of sentry-provider-db
    * [SENTRY-870] - Create UpdateForwarders for paths and permissions
    * [SENTRY-913] - Thread safe improvement for sqoop binding singleton
    * [SENTRY-934] - Update plugin versions
    * [SENTRY-952] - Update source to JDK 7
    * [SENTRY-957] - Exceptions in MetastoreCacheInitializer should probably not prevent HMS from starting up
    * [SENTRY-970] - Use random free port for Sqoop tests
    * [SENTRY-972] - Include sentry-tests-hive hadoop test script in maven project
    * [SENTRY-973] - Bump hamcrest version
    * [SENTRY-979] - Speed up the build (a bit)
    * [SENTRY-986] - Apply PMD plugin to Sentry source
    * [SENTRY-993] - list_sentry_privileges_by_authorizable() gone in API v2
    * [SENTRY-1006] - Add user manual for simple shell
    * [SENTRY-1015] - Improve Sentry + Hive error message when user does not have sufficient privileges to perform an operation
    * [SENTRY-1021] - Add PMD to Sentry tests
    * [SENTRY-1036] - Move ProviderConstants from sentry-provider-common to sentry-policy-common
    * [SENTRY-1048] - Fix "Critical" issues identified by analysis.apache.org
    * [SENTRY-1051] - The policy Privilege implementations could be consolidated
    * [SENTRY-1052] - Sentry shell should use kerberos requestor and give better error messages for kerberos failures
    * [SENTRY-1065] - Make SentryNoSuchObjectException exception error message consistent across all files 
    * [SENTRY-1078] - Add servlet for dumping configurations
    * [SENTRY-1088] - PathsUpdate should log invalid paths to make troubleshooting easier 
    * [SENTRY-1119] - Allow data engines to specify the ActionFactory from configuration
    * [SENTRY-1135] - Remove deprecated junit.framework dependencies
    * [SENTRY-1136] - Remove /Ping and /HealthCheck from Sentry Service Webpage


** New Feature
    * [SENTRY-498] - Sentry integration with Hive authorization framework V2
    * [SENTRY-749] - Create simple shell for sentry
    * [SENTRY-812] - Generate audit trail for Sentry generic model when authorization metadata change 
    * [SENTRY-906] - Add concurrency sentry client tests
    * [SENTRY-995] - Simple Solr Shell
    * [SENTRY-1130] - Upgrade Hive plugin v2 for hive 2.0.0


** Task
    * [SENTRY-510] - Metrics collection for Sentry HDFS plugin
    * [SENTRY-742] - Add describe, show/compute stats tests for column level privileges
    * [SENTRY-984] - add sentry into analysis.apache.org
    * [SENTRY-1016] - Update incubator status page with new committer news (Anne) and new resolution (Committer == PPMC during graduation)
    * [SENTRY-1017] - Update Sentry website "people (commiters)" section with new committer (Anne) and PPMC section with a note on new resolution
    * [SENTRY-1032] - Implement group/role commands in solr shell
    * [SENTRY-1038] - More strict checking of SOLR actions in shell
    * [SENTRY-1047] - Use existing validators in SentryShellSolr


** Test
    * [SENTRY-570] - Bug fixing for the test case "TestMetaStoreWithPigHCat"
    * [SENTRY-748] - Improve test coverage of Sentry + Hive using complex views
    * [SENTRY-869] - Add a test where we have multiple column level privileges for a given role
    * [SENTRY-915] - Improve Hive E2E tests for keep consistent with Hive metadata.
    * [SENTRY-927] - Improve AbstractTestWithStaticConfiguration for keep consistent with Hive metadata.
    * [SENTRY-955] - Add more meta data operation tests for column level privilege
    * [SENTRY-958] - TestGrantPrivilege fails on JDK8
    * [SENTRY-1109] - mvn clean install fails with PMD validation: Unnecessary use of fully qualified name 'org.apache.hadoop.hive.metastore.api.Partition' due to existing import 'org.apache.hadoop.hive.metastore.api.Partition'
