Repository: hive
Updated Branches:
  refs/heads/master 88d224fbc -> 7584b3276


http://git-wip-us.apache.org/repos/asf/hive/blob/7584b327/standalone-metastore/src/gen/thrift/gen-php/metastore/ThriftHiveMetastore.php
----------------------------------------------------------------------
diff --git 
a/standalone-metastore/src/gen/thrift/gen-php/metastore/ThriftHiveMetastore.php 
b/standalone-metastore/src/gen/thrift/gen-php/metastore/ThriftHiveMetastore.php
index 759624f..250d990 100644
--- 
a/standalone-metastore/src/gen/thrift/gen-php/metastore/ThriftHiveMetastore.php
+++ 
b/standalone-metastore/src/gen/thrift/gen-php/metastore/ThriftHiveMetastore.php
@@ -1061,6 +1061,13 @@ interface ThriftHiveMetastoreIf extends 
\FacebookServiceIf {
    */
   public function 
grant_revoke_privileges(\metastore\GrantRevokePrivilegeRequest $request);
   /**
+   * @param \metastore\HiveObjectRef $objToRefresh
+   * @param \metastore\GrantRevokePrivilegeRequest $grantRequest
+   * @return \metastore\GrantRevokePrivilegeResponse
+   * @throws \metastore\MetaException
+   */
+  public function refresh_privileges(\metastore\HiveObjectRef $objToRefresh, 
\metastore\GrantRevokePrivilegeRequest $grantRequest);
+  /**
    * @param string $user_name
    * @param string[] $group_names
    * @return string[]
@@ -8920,6 +8927,61 @@ class ThriftHiveMetastoreClient extends 
\FacebookServiceClient implements \metas
     throw new \Exception("grant_revoke_privileges failed: unknown result");
   }
 
+  public function refresh_privileges(\metastore\HiveObjectRef $objToRefresh, 
\metastore\GrantRevokePrivilegeRequest $grantRequest)
+  {
+    $this->send_refresh_privileges($objToRefresh, $grantRequest);
+    return $this->recv_refresh_privileges();
+  }
+
+  public function send_refresh_privileges(\metastore\HiveObjectRef 
$objToRefresh, \metastore\GrantRevokePrivilegeRequest $grantRequest)
+  {
+    $args = new \metastore\ThriftHiveMetastore_refresh_privileges_args();
+    $args->objToRefresh = $objToRefresh;
+    $args->grantRequest = $grantRequest;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && 
function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'refresh_privileges', 
TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('refresh_privileges', 
TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_refresh_privileges()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && 
function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, 
'\metastore\ThriftHiveMetastore_refresh_privileges_result', 
$this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \metastore\ThriftHiveMetastore_refresh_privileges_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->o1 !== null) {
+      throw $result->o1;
+    }
+    throw new \Exception("refresh_privileges failed: unknown result");
+  }
+
   public function set_ugi($user_name, array $group_names)
   {
     $this->send_set_ugi($user_name, $group_names);
@@ -44443,6 +44505,219 @@ class 
ThriftHiveMetastore_grant_revoke_privileges_result {
 
 }
 
+class ThriftHiveMetastore_refresh_privileges_args {
+  static $_TSPEC;
+
+  /**
+   * @var \metastore\HiveObjectRef
+   */
+  public $objToRefresh = null;
+  /**
+   * @var \metastore\GrantRevokePrivilegeRequest
+   */
+  public $grantRequest = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'objToRefresh',
+          'type' => TType::STRUCT,
+          'class' => '\metastore\HiveObjectRef',
+          ),
+        2 => array(
+          'var' => 'grantRequest',
+          'type' => TType::STRUCT,
+          'class' => '\metastore\GrantRevokePrivilegeRequest',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['objToRefresh'])) {
+        $this->objToRefresh = $vals['objToRefresh'];
+      }
+      if (isset($vals['grantRequest'])) {
+        $this->grantRequest = $vals['grantRequest'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ThriftHiveMetastore_refresh_privileges_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->objToRefresh = new \metastore\HiveObjectRef();
+            $xfer += $this->objToRefresh->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->grantRequest = new \metastore\GrantRevokePrivilegeRequest();
+            $xfer += $this->grantRequest->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += 
$output->writeStructBegin('ThriftHiveMetastore_refresh_privileges_args');
+    if ($this->objToRefresh !== null) {
+      if (!is_object($this->objToRefresh)) {
+        throw new TProtocolException('Bad type in structure.', 
TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('objToRefresh', TType::STRUCT, 1);
+      $xfer += $this->objToRefresh->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->grantRequest !== null) {
+      if (!is_object($this->grantRequest)) {
+        throw new TProtocolException('Bad type in structure.', 
TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('grantRequest', TType::STRUCT, 2);
+      $xfer += $this->grantRequest->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ThriftHiveMetastore_refresh_privileges_result {
+  static $_TSPEC;
+
+  /**
+   * @var \metastore\GrantRevokePrivilegeResponse
+   */
+  public $success = null;
+  /**
+   * @var \metastore\MetaException
+   */
+  public $o1 = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        0 => array(
+          'var' => 'success',
+          'type' => TType::STRUCT,
+          'class' => '\metastore\GrantRevokePrivilegeResponse',
+          ),
+        1 => array(
+          'var' => 'o1',
+          'type' => TType::STRUCT,
+          'class' => '\metastore\MetaException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['success'])) {
+        $this->success = $vals['success'];
+      }
+      if (isset($vals['o1'])) {
+        $this->o1 = $vals['o1'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ThriftHiveMetastore_refresh_privileges_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 0:
+          if ($ftype == TType::STRUCT) {
+            $this->success = new \metastore\GrantRevokePrivilegeResponse();
+            $xfer += $this->success->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->o1 = new \metastore\MetaException();
+            $xfer += $this->o1->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += 
$output->writeStructBegin('ThriftHiveMetastore_refresh_privileges_result');
+    if ($this->success !== null) {
+      if (!is_object($this->success)) {
+        throw new TProtocolException('Bad type in structure.', 
TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('success', TType::STRUCT, 0);
+      $xfer += $this->success->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->o1 !== null) {
+      $xfer += $output->writeFieldBegin('o1', TType::STRUCT, 1);
+      $xfer += $this->o1->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
 class ThriftHiveMetastore_set_ugi_args {
   static $_TSPEC;
 

http://git-wip-us.apache.org/repos/asf/hive/blob/7584b327/standalone-metastore/src/gen/thrift/gen-py/hive_metastore/ThriftHiveMetastore-remote
----------------------------------------------------------------------
diff --git 
a/standalone-metastore/src/gen/thrift/gen-py/hive_metastore/ThriftHiveMetastore-remote
 
b/standalone-metastore/src/gen/thrift/gen-py/hive_metastore/ThriftHiveMetastore-remote
index c6c7b74..58afb24 100755
--- 
a/standalone-metastore/src/gen/thrift/gen-py/hive_metastore/ThriftHiveMetastore-remote
+++ 
b/standalone-metastore/src/gen/thrift/gen-py/hive_metastore/ThriftHiveMetastore-remote
@@ -151,6 +151,7 @@ if len(sys.argv) <= 1 or sys.argv[1] == '--help':
   print('  bool grant_privileges(PrivilegeBag privileges)')
   print('  bool revoke_privileges(PrivilegeBag privileges)')
   print('  GrantRevokePrivilegeResponse 
grant_revoke_privileges(GrantRevokePrivilegeRequest request)')
+  print('  GrantRevokePrivilegeResponse refresh_privileges(HiveObjectRef 
objToRefresh, GrantRevokePrivilegeRequest grantRequest)')
   print('   set_ugi(string user_name,  group_names)')
   print('  string get_delegation_token(string token_owner, string 
renewer_kerberos_principal_name)')
   print('  i64 renew_delegation_token(string token_str_form)')
@@ -1060,6 +1061,12 @@ elif cmd == 'grant_revoke_privileges':
     sys.exit(1)
   pp.pprint(client.grant_revoke_privileges(eval(args[0]),))
 
+elif cmd == 'refresh_privileges':
+  if len(args) != 2:
+    print('refresh_privileges requires 2 args')
+    sys.exit(1)
+  pp.pprint(client.refresh_privileges(eval(args[0]),eval(args[1]),))
+
 elif cmd == 'set_ugi':
   if len(args) != 2:
     print('set_ugi requires 2 args')

http://git-wip-us.apache.org/repos/asf/hive/blob/7584b327/standalone-metastore/src/gen/thrift/gen-py/hive_metastore/ThriftHiveMetastore.py
----------------------------------------------------------------------
diff --git 
a/standalone-metastore/src/gen/thrift/gen-py/hive_metastore/ThriftHiveMetastore.py
 
b/standalone-metastore/src/gen/thrift/gen-py/hive_metastore/ThriftHiveMetastore.py
index 49d966f..768c0e3 100644
--- 
a/standalone-metastore/src/gen/thrift/gen-py/hive_metastore/ThriftHiveMetastore.py
+++ 
b/standalone-metastore/src/gen/thrift/gen-py/hive_metastore/ThriftHiveMetastore.py
@@ -1061,6 +1061,14 @@ class Iface(fb303.FacebookService.Iface):
     """
     pass
 
+  def refresh_privileges(self, objToRefresh, grantRequest):
+    """
+    Parameters:
+     - objToRefresh
+     - grantRequest
+    """
+    pass
+
   def set_ugi(self, user_name, group_names):
     """
     Parameters:
@@ -6330,6 +6338,41 @@ class Client(fb303.FacebookService.Client, Iface):
       raise result.o1
     raise TApplicationException(TApplicationException.MISSING_RESULT, 
"grant_revoke_privileges failed: unknown result")
 
+  def refresh_privileges(self, objToRefresh, grantRequest):
+    """
+    Parameters:
+     - objToRefresh
+     - grantRequest
+    """
+    self.send_refresh_privileges(objToRefresh, grantRequest)
+    return self.recv_refresh_privileges()
+
+  def send_refresh_privileges(self, objToRefresh, grantRequest):
+    self._oprot.writeMessageBegin('refresh_privileges', TMessageType.CALL, 
self._seqid)
+    args = refresh_privileges_args()
+    args.objToRefresh = objToRefresh
+    args.grantRequest = grantRequest
+    args.write(self._oprot)
+    self._oprot.writeMessageEnd()
+    self._oprot.trans.flush()
+
+  def recv_refresh_privileges(self):
+    iprot = self._iprot
+    (fname, mtype, rseqid) = iprot.readMessageBegin()
+    if mtype == TMessageType.EXCEPTION:
+      x = TApplicationException()
+      x.read(iprot)
+      iprot.readMessageEnd()
+      raise x
+    result = refresh_privileges_result()
+    result.read(iprot)
+    iprot.readMessageEnd()
+    if result.success is not None:
+      return result.success
+    if result.o1 is not None:
+      raise result.o1
+    raise TApplicationException(TApplicationException.MISSING_RESULT, 
"refresh_privileges failed: unknown result")
+
   def set_ugi(self, user_name, group_names):
     """
     Parameters:
@@ -9044,6 +9087,7 @@ class Processor(fb303.FacebookService.Processor, Iface, 
TProcessor):
     self._processMap["grant_privileges"] = Processor.process_grant_privileges
     self._processMap["revoke_privileges"] = Processor.process_revoke_privileges
     self._processMap["grant_revoke_privileges"] = 
Processor.process_grant_revoke_privileges
+    self._processMap["refresh_privileges"] = 
Processor.process_refresh_privileges
     self._processMap["set_ugi"] = Processor.process_set_ugi
     self._processMap["get_delegation_token"] = 
Processor.process_get_delegation_token
     self._processMap["renew_delegation_token"] = 
Processor.process_renew_delegation_token
@@ -12379,6 +12423,28 @@ class Processor(fb303.FacebookService.Processor, 
Iface, TProcessor):
     oprot.writeMessageEnd()
     oprot.trans.flush()
 
+  def process_refresh_privileges(self, seqid, iprot, oprot):
+    args = refresh_privileges_args()
+    args.read(iprot)
+    iprot.readMessageEnd()
+    result = refresh_privileges_result()
+    try:
+      result.success = self._handler.refresh_privileges(args.objToRefresh, 
args.grantRequest)
+      msg_type = TMessageType.REPLY
+    except (TTransport.TTransportException, KeyboardInterrupt, SystemExit):
+      raise
+    except MetaException as o1:
+      msg_type = TMessageType.REPLY
+      result.o1 = o1
+    except Exception as ex:
+      msg_type = TMessageType.EXCEPTION
+      logging.exception(ex)
+      result = TApplicationException(TApplicationException.INTERNAL_ERROR, 
'Internal error')
+    oprot.writeMessageBegin("refresh_privileges", msg_type, seqid)
+    result.write(oprot)
+    oprot.writeMessageEnd()
+    oprot.trans.flush()
+
   def process_set_ugi(self, seqid, iprot, oprot):
     args = set_ugi_args()
     args.read(iprot)
@@ -36808,6 +36874,165 @@ class grant_revoke_privileges_result:
   def __ne__(self, other):
     return not (self == other)
 
+class refresh_privileges_args:
+  """
+  Attributes:
+   - objToRefresh
+   - grantRequest
+  """
+
+  thrift_spec = (
+    None, # 0
+    (1, TType.STRUCT, 'objToRefresh', (HiveObjectRef, 
HiveObjectRef.thrift_spec), None, ), # 1
+    (2, TType.STRUCT, 'grantRequest', (GrantRevokePrivilegeRequest, 
GrantRevokePrivilegeRequest.thrift_spec), None, ), # 2
+  )
+
+  def __init__(self, objToRefresh=None, grantRequest=None,):
+    self.objToRefresh = objToRefresh
+    self.grantRequest = grantRequest
+
+  def read(self, iprot):
+    if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is 
not None and fastbinary is not None:
+      fastbinary.decode_binary(self, iprot.trans, (self.__class__, 
self.thrift_spec))
+      return
+    iprot.readStructBegin()
+    while True:
+      (fname, ftype, fid) = iprot.readFieldBegin()
+      if ftype == TType.STOP:
+        break
+      if fid == 1:
+        if ftype == TType.STRUCT:
+          self.objToRefresh = HiveObjectRef()
+          self.objToRefresh.read(iprot)
+        else:
+          iprot.skip(ftype)
+      elif fid == 2:
+        if ftype == TType.STRUCT:
+          self.grantRequest = GrantRevokePrivilegeRequest()
+          self.grantRequest.read(iprot)
+        else:
+          iprot.skip(ftype)
+      else:
+        iprot.skip(ftype)
+      iprot.readFieldEnd()
+    iprot.readStructEnd()
+
+  def write(self, oprot):
+    if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
self.thrift_spec is not None and fastbinary is not None:
+      oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, 
self.thrift_spec)))
+      return
+    oprot.writeStructBegin('refresh_privileges_args')
+    if self.objToRefresh is not None:
+      oprot.writeFieldBegin('objToRefresh', TType.STRUCT, 1)
+      self.objToRefresh.write(oprot)
+      oprot.writeFieldEnd()
+    if self.grantRequest is not None:
+      oprot.writeFieldBegin('grantRequest', TType.STRUCT, 2)
+      self.grantRequest.write(oprot)
+      oprot.writeFieldEnd()
+    oprot.writeFieldStop()
+    oprot.writeStructEnd()
+
+  def validate(self):
+    return
+
+
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.objToRefresh)
+    value = (value * 31) ^ hash(self.grantRequest)
+    return value
+
+  def __repr__(self):
+    L = ['%s=%r' % (key, value)
+      for key, value in self.__dict__.iteritems()]
+    return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+  def __eq__(self, other):
+    return isinstance(other, self.__class__) and self.__dict__ == 
other.__dict__
+
+  def __ne__(self, other):
+    return not (self == other)
+
+class refresh_privileges_result:
+  """
+  Attributes:
+   - success
+   - o1
+  """
+
+  thrift_spec = (
+    (0, TType.STRUCT, 'success', (GrantRevokePrivilegeResponse, 
GrantRevokePrivilegeResponse.thrift_spec), None, ), # 0
+    (1, TType.STRUCT, 'o1', (MetaException, MetaException.thrift_spec), None, 
), # 1
+  )
+
+  def __init__(self, success=None, o1=None,):
+    self.success = success
+    self.o1 = o1
+
+  def read(self, iprot):
+    if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is 
not None and fastbinary is not None:
+      fastbinary.decode_binary(self, iprot.trans, (self.__class__, 
self.thrift_spec))
+      return
+    iprot.readStructBegin()
+    while True:
+      (fname, ftype, fid) = iprot.readFieldBegin()
+      if ftype == TType.STOP:
+        break
+      if fid == 0:
+        if ftype == TType.STRUCT:
+          self.success = GrantRevokePrivilegeResponse()
+          self.success.read(iprot)
+        else:
+          iprot.skip(ftype)
+      elif fid == 1:
+        if ftype == TType.STRUCT:
+          self.o1 = MetaException()
+          self.o1.read(iprot)
+        else:
+          iprot.skip(ftype)
+      else:
+        iprot.skip(ftype)
+      iprot.readFieldEnd()
+    iprot.readStructEnd()
+
+  def write(self, oprot):
+    if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
self.thrift_spec is not None and fastbinary is not None:
+      oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, 
self.thrift_spec)))
+      return
+    oprot.writeStructBegin('refresh_privileges_result')
+    if self.success is not None:
+      oprot.writeFieldBegin('success', TType.STRUCT, 0)
+      self.success.write(oprot)
+      oprot.writeFieldEnd()
+    if self.o1 is not None:
+      oprot.writeFieldBegin('o1', TType.STRUCT, 1)
+      self.o1.write(oprot)
+      oprot.writeFieldEnd()
+    oprot.writeFieldStop()
+    oprot.writeStructEnd()
+
+  def validate(self):
+    return
+
+
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.success)
+    value = (value * 31) ^ hash(self.o1)
+    return value
+
+  def __repr__(self):
+    L = ['%s=%r' % (key, value)
+      for key, value in self.__dict__.iteritems()]
+    return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+  def __eq__(self, other):
+    return isinstance(other, self.__class__) and self.__dict__ == 
other.__dict__
+
+  def __ne__(self, other):
+    return not (self == other)
+
 class set_ugi_args:
   """
   Attributes:

http://git-wip-us.apache.org/repos/asf/hive/blob/7584b327/standalone-metastore/src/gen/thrift/gen-rb/thrift_hive_metastore.rb
----------------------------------------------------------------------
diff --git 
a/standalone-metastore/src/gen/thrift/gen-rb/thrift_hive_metastore.rb 
b/standalone-metastore/src/gen/thrift/gen-rb/thrift_hive_metastore.rb
index 7946b6c..d394f72 100644
--- a/standalone-metastore/src/gen/thrift/gen-rb/thrift_hive_metastore.rb
+++ b/standalone-metastore/src/gen/thrift/gen-rb/thrift_hive_metastore.rb
@@ -2161,6 +2161,22 @@ module ThriftHiveMetastore
       raise 
::Thrift::ApplicationException.new(::Thrift::ApplicationException::MISSING_RESULT,
 'grant_revoke_privileges failed: unknown result')
     end
 
+    def refresh_privileges(objToRefresh, grantRequest)
+      send_refresh_privileges(objToRefresh, grantRequest)
+      return recv_refresh_privileges()
+    end
+
+    def send_refresh_privileges(objToRefresh, grantRequest)
+      send_message('refresh_privileges', Refresh_privileges_args, 
:objToRefresh => objToRefresh, :grantRequest => grantRequest)
+    end
+
+    def recv_refresh_privileges()
+      result = receive_message(Refresh_privileges_result)
+      return result.success unless result.success.nil?
+      raise result.o1 unless result.o1.nil?
+      raise 
::Thrift::ApplicationException.new(::Thrift::ApplicationException::MISSING_RESULT,
 'refresh_privileges failed: unknown result')
+    end
+
     def set_ugi(user_name, group_names)
       send_set_ugi(user_name, group_names)
       return recv_set_ugi()
@@ -5121,6 +5137,17 @@ module ThriftHiveMetastore
       write_result(result, oprot, 'grant_revoke_privileges', seqid)
     end
 
+    def process_refresh_privileges(seqid, iprot, oprot)
+      args = read_args(iprot, Refresh_privileges_args)
+      result = Refresh_privileges_result.new()
+      begin
+        result.success = @handler.refresh_privileges(args.objToRefresh, 
args.grantRequest)
+      rescue ::MetaException => o1
+        result.o1 = o1
+      end
+      write_result(result, oprot, 'refresh_privileges', seqid)
+    end
+
     def process_set_ugi(seqid, iprot, oprot)
       args = read_args(iprot, Set_ugi_args)
       result = Set_ugi_result.new()
@@ -10896,6 +10923,42 @@ module ThriftHiveMetastore
     ::Thrift::Struct.generate_accessors self
   end
 
+  class Refresh_privileges_args
+    include ::Thrift::Struct, ::Thrift::Struct_Union
+    OBJTOREFRESH = 1
+    GRANTREQUEST = 2
+
+    FIELDS = {
+      OBJTOREFRESH => {:type => ::Thrift::Types::STRUCT, :name => 
'objToRefresh', :class => ::HiveObjectRef},
+      GRANTREQUEST => {:type => ::Thrift::Types::STRUCT, :name => 
'grantRequest', :class => ::GrantRevokePrivilegeRequest}
+    }
+
+    def struct_fields; FIELDS; end
+
+    def validate
+    end
+
+    ::Thrift::Struct.generate_accessors self
+  end
+
+  class Refresh_privileges_result
+    include ::Thrift::Struct, ::Thrift::Struct_Union
+    SUCCESS = 0
+    O1 = 1
+
+    FIELDS = {
+      SUCCESS => {:type => ::Thrift::Types::STRUCT, :name => 'success', :class 
=> ::GrantRevokePrivilegeResponse},
+      O1 => {:type => ::Thrift::Types::STRUCT, :name => 'o1', :class => 
::MetaException}
+    }
+
+    def struct_fields; FIELDS; end
+
+    def validate
+    end
+
+    ::Thrift::Struct.generate_accessors self
+  end
+
   class Set_ugi_args
     include ::Thrift::Struct, ::Thrift::Struct_Union
     USER_NAME = 1

http://git-wip-us.apache.org/repos/asf/hive/blob/7584b327/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
----------------------------------------------------------------------
diff --git 
a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
 
b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
index 4601e09..3978b88 100644
--- 
a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
+++ 
b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
@@ -6186,6 +6186,24 @@ public class HiveMetaStore extends ThriftHiveMetastore {
     }
 
     @Override
+    public GrantRevokePrivilegeResponse refresh_privileges(HiveObjectRef 
objToRefresh,
+        GrantRevokePrivilegeRequest grantRequest)
+        throws TException {
+      incrementCounter("refresh_privileges");
+      firePreEvent(new PreAuthorizationCallEvent(this));
+      GrantRevokePrivilegeResponse response = new 
GrantRevokePrivilegeResponse();
+      try {
+        boolean result = getMS().refreshPrivileges(objToRefresh, 
grantRequest.getPrivileges());
+        response.setSuccess(result);
+      } catch (MetaException e) {
+        throw e;
+      } catch (Exception e) {
+        throw new RuntimeException(e);
+      }
+      return response;
+    }
+
+    @Override
     public boolean revoke_privileges(final PrivilegeBag privileges) throws 
TException {
       return revoke_privileges(privileges, false);
     }

http://git-wip-us.apache.org/repos/asf/hive/blob/7584b327/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
----------------------------------------------------------------------
diff --git 
a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
 
b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
index ac349fe..6af2aa5 100644
--- 
a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
+++ 
b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
@@ -2288,6 +2288,31 @@ public class HiveMetaStoreClient implements 
IMetaStoreClient, AutoCloseable {
   }
 
   @Override
+  public boolean refresh_privileges(HiveObjectRef objToRefresh,
+      PrivilegeBag grantPrivileges) throws MetaException,
+      TException {
+    String defaultCat = getDefaultCatalog(conf);
+    objToRefresh.setCatName(defaultCat);
+
+    if (grantPrivileges.getPrivileges() != null) {
+      for (HiveObjectPrivilege priv : grantPrivileges.getPrivileges()) {
+        if (!priv.getHiveObject().isSetCatName()) {
+          priv.getHiveObject().setCatName(defaultCat);
+        }
+      }
+    }
+    GrantRevokePrivilegeRequest grantReq = new GrantRevokePrivilegeRequest();
+    grantReq.setRequestType(GrantRevokeType.GRANT);
+    grantReq.setPrivileges(grantPrivileges);
+
+    GrantRevokePrivilegeResponse res = client.refresh_privileges(objToRefresh, 
grantReq);
+    if (!res.isSetSuccess()) {
+      throw new MetaException("GrantRevokePrivilegeResponse missing success 
field");
+    }
+    return res.isSuccess();
+  }
+
+  @Override
   public PrincipalPrivilegeSet get_privilege_set(HiveObjectRef hiveObject,
       String userName, List<String> groupNames) throws MetaException,
       TException {

http://git-wip-us.apache.org/repos/asf/hive/blob/7584b327/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/IMetaStoreClient.java
----------------------------------------------------------------------
diff --git 
a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/IMetaStoreClient.java
 
b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/IMetaStoreClient.java
index 0e6c57b..09f9bb1 100644
--- 
a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/IMetaStoreClient.java
+++ 
b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/IMetaStoreClient.java
@@ -2566,6 +2566,16 @@ public interface IMetaStoreClient {
       throws MetaException, TException;
 
   /**
+   * @param revokePrivileges
+   * @param objToRefresh
+   * @return true on success
+   * @throws MetaException
+   * @throws TException
+   */
+  boolean refresh_privileges(HiveObjectRef objToRefresh, PrivilegeBag 
grantPrivileges)
+      throws MetaException, TException;
+
+  /**
    * This is expected to be a no-op when in local mode,
    * which means that the implementation will return null.
    * @param owner the intended owner for the token

http://git-wip-us.apache.org/repos/asf/hive/blob/7584b327/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java
----------------------------------------------------------------------
diff --git 
a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java
 
b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java
index a4eb134..b43334b 100644
--- 
a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java
+++ 
b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java
@@ -49,6 +49,7 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.Set;
+import java.util.TreeSet;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -227,6 +228,7 @@ import org.slf4j.LoggerFactory;
 import com.codahale.metrics.Counter;
 import com.codahale.metrics.MetricRegistry;
 import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
@@ -6074,6 +6076,88 @@ public class ObjectStore implements RawStore, 
Configurable {
     return committed;
   }
 
+  class PrivilegeWithoutCreateTimeComparator implements 
Comparator<HiveObjectPrivilege> {
+    @Override
+    public int compare(HiveObjectPrivilege o1, HiveObjectPrivilege o2) {
+      int createTime1 = o1.getGrantInfo().getCreateTime();
+      int createTime2 = o2.getGrantInfo().getCreateTime();
+      o1.getGrantInfo().setCreateTime(0);
+      o2.getGrantInfo().setCreateTime(0);
+      int result = o1.compareTo(o2);
+      o1.getGrantInfo().setCreateTime(createTime1);
+      o2.getGrantInfo().setCreateTime(createTime2);
+      return result;
+    }
+  }
+
+  @Override
+  public boolean refreshPrivileges(HiveObjectRef objToRefresh, PrivilegeBag 
grantPrivileges)
+      throws InvalidObjectException, MetaException, NoSuchObjectException {
+    boolean committed = false;
+    try {
+      openTransaction();
+      Set<HiveObjectPrivilege> revokePrivilegeSet
+          = new TreeSet<HiveObjectPrivilege>(new 
PrivilegeWithoutCreateTimeComparator());
+      Set<HiveObjectPrivilege> grantPrivilegeSet
+          = new TreeSet<HiveObjectPrivilege>(new 
PrivilegeWithoutCreateTimeComparator());
+
+      List<HiveObjectPrivilege> grants = null;
+      String catName = objToRefresh.isSetCatName() ? objToRefresh.getCatName() 
:
+          getDefaultCatalog(conf);
+      switch (objToRefresh.getObjectType()) {
+      case DATABASE:
+        grants = this.listDBGrantsAll(catName, objToRefresh.getDbName());
+        break;
+      case TABLE:
+        grants = listTableGrantsAll(catName, objToRefresh.getDbName(), 
objToRefresh.getObjectName());
+        break;
+      case COLUMN:
+        Preconditions.checkArgument(objToRefresh.getColumnName()==null, 
"columnName must be null");
+        grants = convertTableCols(listTableAllColumnGrants(catName,
+            objToRefresh.getDbName(), objToRefresh.getObjectName()));
+        break;
+      default:
+        throw new MetaException("Unexpected object type " + 
objToRefresh.getObjectType());
+      }
+      if (grants != null) {
+        for (HiveObjectPrivilege grant : grants) {
+          revokePrivilegeSet.add(grant);
+        }
+      }
+
+      // Optimize revoke/grant list, remove the overlapping
+      if (grantPrivileges.getPrivileges() != null) {
+        for (HiveObjectPrivilege grantPrivilege : 
grantPrivileges.getPrivileges()) {
+          if (revokePrivilegeSet.contains(grantPrivilege)) {
+            revokePrivilegeSet.remove(grantPrivilege);
+          } else {
+            grantPrivilegeSet.add(grantPrivilege);
+          }
+        }
+      }
+      if (!revokePrivilegeSet.isEmpty()) {
+        PrivilegeBag remainingRevokePrivileges = new PrivilegeBag();
+        for (HiveObjectPrivilege revokePrivilege : revokePrivilegeSet) {
+          remainingRevokePrivileges.addToPrivileges(revokePrivilege);
+        }
+        revokePrivileges(remainingRevokePrivileges, false);
+      }
+      if (!grantPrivilegeSet.isEmpty()) {
+        PrivilegeBag remainingGrantPrivileges = new PrivilegeBag();
+        for (HiveObjectPrivilege grantPrivilege : grantPrivilegeSet) {
+          remainingGrantPrivileges.addToPrivileges(grantPrivilege);
+        }
+        grantPrivileges(remainingGrantPrivileges);
+      }
+      committed = commitTransaction();
+    } finally {
+      if (!committed) {
+        rollbackTransaction();
+      }
+    }
+    return committed;
+  }
+
   @SuppressWarnings("unchecked")
   public List<MRoleMap> listMRoleMembers(String roleName) {
     boolean success = false;

http://git-wip-us.apache.org/repos/asf/hive/blob/7584b327/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/RawStore.java
----------------------------------------------------------------------
diff --git 
a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/RawStore.java
 
b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/RawStore.java
index 3719c39..ce7d286 100644
--- 
a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/RawStore.java
+++ 
b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/RawStore.java
@@ -43,6 +43,7 @@ import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.FileMetadataExprType;
 import org.apache.hadoop.hive.metastore.api.Function;
 import org.apache.hadoop.hive.metastore.api.HiveObjectPrivilege;
+import org.apache.hadoop.hive.metastore.api.HiveObjectRef;
 import org.apache.hadoop.hive.metastore.api.ISchema;
 import org.apache.hadoop.hive.metastore.api.InvalidInputException;
 import org.apache.hadoop.hive.metastore.api.InvalidObjectException;
@@ -750,7 +751,10 @@ public interface RawStore extends Configurable {
   boolean grantPrivileges (PrivilegeBag privileges)
       throws InvalidObjectException, MetaException, NoSuchObjectException;
 
-  boolean revokePrivileges  (PrivilegeBag privileges, boolean grantOption)
+  boolean revokePrivileges(PrivilegeBag privileges, boolean grantOption)
+  throws InvalidObjectException, MetaException, NoSuchObjectException;
+
+  boolean refreshPrivileges(HiveObjectRef objToRefresh, PrivilegeBag 
grantPrivileges)
   throws InvalidObjectException, MetaException, NoSuchObjectException;
 
   org.apache.hadoop.hive.metastore.api.Role getRole(

http://git-wip-us.apache.org/repos/asf/hive/blob/7584b327/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/cache/CachedStore.java
----------------------------------------------------------------------
diff --git 
a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/cache/CachedStore.java
 
b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/cache/CachedStore.java
index 30d4bec..b223920 100644
--- 
a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/cache/CachedStore.java
+++ 
b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/cache/CachedStore.java
@@ -60,6 +60,7 @@ import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.FileMetadataExprType;
 import org.apache.hadoop.hive.metastore.api.Function;
 import org.apache.hadoop.hive.metastore.api.HiveObjectPrivilege;
+import org.apache.hadoop.hive.metastore.api.HiveObjectRef;
 import org.apache.hadoop.hive.metastore.api.ISchema;
 import org.apache.hadoop.hive.metastore.api.ISchemaName;
 import org.apache.hadoop.hive.metastore.api.InvalidInputException;
@@ -1451,6 +1452,12 @@ public class CachedStore implements RawStore, 
Configurable {
   }
 
   @Override
+  public boolean refreshPrivileges(HiveObjectRef objToRefresh, PrivilegeBag 
grantPrivileges)
+      throws InvalidObjectException, MetaException, NoSuchObjectException {
+    return rawStore.refreshPrivileges(objToRefresh, grantPrivileges);
+  }
+
+  @Override
   public Role getRole(String roleName) throws NoSuchObjectException {
     return rawStore.getRole(roleName);
   }

http://git-wip-us.apache.org/repos/asf/hive/blob/7584b327/standalone-metastore/src/main/thrift/hive_metastore.thrift
----------------------------------------------------------------------
diff --git a/standalone-metastore/src/main/thrift/hive_metastore.thrift 
b/standalone-metastore/src/main/thrift/hive_metastore.thrift
index 9dc6030..19d4433 100644
--- a/standalone-metastore/src/main/thrift/hive_metastore.thrift
+++ b/standalone-metastore/src/main/thrift/hive_metastore.thrift
@@ -2021,6 +2021,8 @@ service ThriftHiveMetastore extends fb303.FacebookService
   // Deprecated, use grant_revoke_privileges()
   bool revoke_privileges(1:PrivilegeBag privileges) throws(1:MetaException o1)
   GrantRevokePrivilegeResponse 
grant_revoke_privileges(1:GrantRevokePrivilegeRequest request) 
throws(1:MetaException o1);
+  // Revokes all privileges for the object and adds the newly granted 
privileges for it.
+  GrantRevokePrivilegeResponse refresh_privileges(1:HiveObjectRef 
objToRefresh, 2:GrantRevokePrivilegeRequest grantRequest) 
throws(1:MetaException o1);
 
   // this is used by metastore client to send UGI information to metastore 
server immediately
   // after setting up a connection.

http://git-wip-us.apache.org/repos/asf/hive/blob/7584b327/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/DummyRawStoreControlledCommit.java
----------------------------------------------------------------------
diff --git 
a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/DummyRawStoreControlledCommit.java
 
b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/DummyRawStoreControlledCommit.java
index 3895c3d..f6899be 100644
--- 
a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/DummyRawStoreControlledCommit.java
+++ 
b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/DummyRawStoreControlledCommit.java
@@ -41,6 +41,7 @@ import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.FileMetadataExprType;
 import org.apache.hadoop.hive.metastore.api.Function;
 import org.apache.hadoop.hive.metastore.api.HiveObjectPrivilege;
+import org.apache.hadoop.hive.metastore.api.HiveObjectRef;
 import org.apache.hadoop.hive.metastore.api.ISchema;
 import org.apache.hadoop.hive.metastore.api.InvalidInputException;
 import org.apache.hadoop.hive.metastore.api.InvalidObjectException;
@@ -509,6 +510,11 @@ public class DummyRawStoreControlledCommit implements 
RawStore, Configurable {
   }
 
   @Override
+  public boolean refreshPrivileges(HiveObjectRef objToRefresh, PrivilegeBag 
grantPrivileges)
+          throws InvalidObjectException, MetaException, NoSuchObjectException {
+    return objectStore.refreshPrivileges(objToRefresh, grantPrivileges);
+  }
+  @Override
   public Role getRole(String roleName) throws NoSuchObjectException {
     return objectStore.getRole(roleName);
   }

http://git-wip-us.apache.org/repos/asf/hive/blob/7584b327/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/DummyRawStoreForJdoConnection.java
----------------------------------------------------------------------
diff --git 
a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/DummyRawStoreForJdoConnection.java
 
b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/DummyRawStoreForJdoConnection.java
index cdfa001..98a85cc 100644
--- 
a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/DummyRawStoreForJdoConnection.java
+++ 
b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/DummyRawStoreForJdoConnection.java
@@ -39,6 +39,7 @@ import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.FileMetadataExprType;
 import org.apache.hadoop.hive.metastore.api.Function;
 import org.apache.hadoop.hive.metastore.api.HiveObjectPrivilege;
+import org.apache.hadoop.hive.metastore.api.HiveObjectRef;
 import org.apache.hadoop.hive.metastore.api.ISchema;
 import org.apache.hadoop.hive.metastore.api.InvalidInputException;
 import org.apache.hadoop.hive.metastore.api.InvalidObjectException;
@@ -521,6 +522,12 @@ public class DummyRawStoreForJdoConnection implements 
RawStore {
   }
 
   @Override
+  public boolean refreshPrivileges(HiveObjectRef objToRefresh, PrivilegeBag 
grantPrivileges)
+      throws InvalidObjectException, MetaException, NoSuchObjectException {
+    return false;
+  }
+
+  @Override
   public Role getRole(String roleName) throws NoSuchObjectException {
 
     return null;

http://git-wip-us.apache.org/repos/asf/hive/blob/7584b327/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClientPreCatalog.java
----------------------------------------------------------------------
diff --git 
a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClientPreCatalog.java
 
b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClientPreCatalog.java
index 66da77b..7186add 100644
--- 
a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClientPreCatalog.java
+++ 
b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClientPreCatalog.java
@@ -19,6 +19,7 @@
 package org.apache.hadoop.hive.metastore;
 
 import static org.apache.hadoop.hive.metastore.Warehouse.DEFAULT_DATABASE_NAME;
+import static 
org.apache.hadoop.hive.metastore.utils.MetaStoreUtils.getDefaultCatalog;
 
 import java.io.IOException;
 import java.lang.reflect.Constructor;
@@ -2031,6 +2032,31 @@ public class HiveMetaStoreClientPreCatalog implements 
IMetaStoreClient, AutoClos
   }
 
   @Override
+  public boolean refresh_privileges(HiveObjectRef objToRefresh,
+      PrivilegeBag grantPrivileges) throws MetaException,
+      TException {
+    String defaultCat = getDefaultCatalog(conf);
+    objToRefresh.setCatName(defaultCat);
+
+    if (grantPrivileges.getPrivileges() != null) {
+      for (HiveObjectPrivilege priv : grantPrivileges.getPrivileges()) {
+        if (!priv.getHiveObject().isSetCatName()) {
+          priv.getHiveObject().setCatName(defaultCat);
+        }
+      }
+    }
+    GrantRevokePrivilegeRequest grantReq = new GrantRevokePrivilegeRequest();
+    grantReq.setRequestType(GrantRevokeType.GRANT);
+    grantReq.setPrivileges(grantPrivileges);
+
+    GrantRevokePrivilegeResponse res = client.refresh_privileges(objToRefresh, 
grantReq);
+    if (!res.isSetSuccess()) {
+      throw new MetaException("GrantRevokePrivilegeResponse missing success 
field");
+    }
+    return res.isSuccess();
+  }
+
+  @Override
   public PrincipalPrivilegeSet get_privilege_set(HiveObjectRef hiveObject,
       String userName, List<String> groupNames) throws MetaException,
       TException {

Reply via email to