Richard Williams created SENTRY-703:
---------------------------------------
Summary: Calls to add_partition fail when passed Partition object
with a null location
Key: SENTRY-703
URL: https://issues.apache.org/jira/browse/SENTRY-703
Project: Sentry
Issue Type: Bug
Affects Versions: 1.5.0
Environment: CDH 5.3.3
Reporter: Richard Williams
When the Hive Metastore has
org.apache.sentry.binding.metastore.MetastoreAuthzBinding configured as a pre
event listener class, calls to the metastore Thrift API's add_partition and
add_partitions methods fail with a MetaException whose message is
"java.lang.NullPointerException" if they are passed Partition objects whose
StorageDescriptors have null location fields. In practice, this causes "alter
table add partition" statements that do not specify a location and are issued
through the Hive CLI (though apparently not HiveServer2) to fail. Example stack
trace:
{noformat}
Exception in thread "main" MetaException(message:java.lang.NullPointerException)
at
org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$add_partition_with_environment_context_result$add_partition_with_environment_context_resultStandardScheme.read(ThriftHiveMetastore.java:36240)
at
org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$add_partition_with_environment_context_result$add_partition_with_environment_context_resultStandardScheme.read(ThriftHiveMetastore.java:36199)
at
org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$add_partition_with_environment_context_result.read(ThriftHiveMetastore.java:36122)
at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78)
at
org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$Client.recv_add_partition_with_environment_context(ThriftHiveMetastore.java:1222)
at
org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$Client.add_partition_with_environment_context(ThriftHiveMetastore.java:1208)
at
org.apache.hadoop.hive.metastore.HiveMetaStoreClient.add_partition(HiveMetaStoreClient.java:439)
at
org.apache.hadoop.hive.metastore.HiveMetaStoreClient.add_partition(HiveMetaStoreClient.java:433)
at hivetest.Main.main(Main.java:190)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
{noformat}
The likely cause of this is SENTRY-654. The patch that was committed for that
issue changed HiveMetastoreAuthzBinding's authorizeAddPartition to check
whether or not the StorageDescriptor nested inside the passed Partition object
was null before calling its getLocation method, thereby preventing
append_partition calls from failing with a NullPointerException. However, in
doing so, it removed a check that was ensuring that the location itself was not
null (!StringUtils.isEmpty(partitionLocation)). It appears that both checks are
necessary.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)