Ver código fonte

[libsentry] Update to Thrift v2

Romain Rigaux 10 anos atrás
pai
commit
685dd1c

+ 7 - 0
desktop/libs/libsentry/gen-py/sentry_policy_service/SentryPolicyService-remote

@@ -35,6 +35,7 @@ if len(sys.argv) <= 1 or sys.argv[1] == '--help':
   print '  TDropPrivilegesResponse drop_sentry_privilege(TDropPrivilegesRequest request)'
   print '  TRenamePrivilegesResponse rename_sentry_privilege(TRenamePrivilegesRequest request)'
   print '  TListSentryPrivilegesByAuthResponse list_sentry_privileges_by_authorizable(TListSentryPrivilegesByAuthRequest request)'
+  print '  TSentryConfigValueResponse get_sentry_config_value(TSentryConfigValueRequest request)'
   print ''
   sys.exit(0)
 
@@ -158,6 +159,12 @@ elif cmd == 'list_sentry_privileges_by_authorizable':
     sys.exit(1)
   pp.pprint(client.list_sentry_privileges_by_authorizable(eval(args[0]),))
 
+elif cmd == 'get_sentry_config_value':
+  if len(args) != 1:
+    print 'get_sentry_config_value requires 1 args'
+    sys.exit(1)
+  pp.pprint(client.get_sentry_config_value(eval(args[0]),))
+
 else:
   print 'Unrecognized method %s' % cmd
   sys.exit(1)

+ 170 - 0
desktop/libs/libsentry/gen-py/sentry_policy_service/SentryPolicyService.py

@@ -102,6 +102,13 @@ class Iface(object):
     """
     pass
 
+  def get_sentry_config_value(self, request):
+    """
+    Parameters:
+     - request
+    """
+    pass
+
 
 class Client(Iface):
   def __init__(self, iprot, oprot=None):
@@ -470,6 +477,36 @@ class Client(Iface):
       return result.success
     raise TApplicationException(TApplicationException.MISSING_RESULT, "list_sentry_privileges_by_authorizable failed: unknown result");
 
+  def get_sentry_config_value(self, request):
+    """
+    Parameters:
+     - request
+    """
+    self.send_get_sentry_config_value(request)
+    return self.recv_get_sentry_config_value()
+
+  def send_get_sentry_config_value(self, request):
+    self._oprot.writeMessageBegin('get_sentry_config_value', TMessageType.CALL, self._seqid)
+    args = get_sentry_config_value_args()
+    args.request = request
+    args.write(self._oprot)
+    self._oprot.writeMessageEnd()
+    self._oprot.trans.flush()
+
+  def recv_get_sentry_config_value(self, ):
+    (fname, mtype, rseqid) = self._iprot.readMessageBegin()
+    if mtype == TMessageType.EXCEPTION:
+      x = TApplicationException()
+      x.read(self._iprot)
+      self._iprot.readMessageEnd()
+      raise x
+    result = get_sentry_config_value_result()
+    result.read(self._iprot)
+    self._iprot.readMessageEnd()
+    if result.success is not None:
+      return result.success
+    raise TApplicationException(TApplicationException.MISSING_RESULT, "get_sentry_config_value failed: unknown result");
+
 
 class Processor(Iface, TProcessor):
   def __init__(self, handler):
@@ -487,6 +524,7 @@ class Processor(Iface, TProcessor):
     self._processMap["drop_sentry_privilege"] = Processor.process_drop_sentry_privilege
     self._processMap["rename_sentry_privilege"] = Processor.process_rename_sentry_privilege
     self._processMap["list_sentry_privileges_by_authorizable"] = Processor.process_list_sentry_privileges_by_authorizable
+    self._processMap["get_sentry_config_value"] = Processor.process_get_sentry_config_value
 
   def process(self, iprot, oprot):
     (name, type, seqid) = iprot.readMessageBegin()
@@ -635,6 +673,17 @@ class Processor(Iface, TProcessor):
     oprot.writeMessageEnd()
     oprot.trans.flush()
 
+  def process_get_sentry_config_value(self, seqid, iprot, oprot):
+    args = get_sentry_config_value_args()
+    args.read(iprot)
+    iprot.readMessageEnd()
+    result = get_sentry_config_value_result()
+    result.success = self._handler.get_sentry_config_value(args.request)
+    oprot.writeMessageBegin("get_sentry_config_value", TMessageType.REPLY, seqid)
+    result.write(oprot)
+    oprot.writeMessageEnd()
+    oprot.trans.flush()
+
 
 # HELPER FUNCTIONS AND STRUCTURES
 
@@ -2079,6 +2128,127 @@ class list_sentry_privileges_by_authorizable_result(object):
     return
 
 
+  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 get_sentry_config_value_args(object):
+  """
+  Attributes:
+   - request
+  """
+
+  thrift_spec = (
+    None, # 0
+    (1, TType.STRUCT, 'request', (TSentryConfigValueRequest, TSentryConfigValueRequest.thrift_spec), None, ), # 1
+  )
+
+  def __init__(self, request=None,):
+    self.request = request
+
+  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.request = TSentryConfigValueRequest()
+          self.request.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('get_sentry_config_value_args')
+    if self.request is not None:
+      oprot.writeFieldBegin('request', TType.STRUCT, 1)
+      self.request.write(oprot)
+      oprot.writeFieldEnd()
+    oprot.writeFieldStop()
+    oprot.writeStructEnd()
+
+  def validate(self):
+    return
+
+
+  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 get_sentry_config_value_result(object):
+  """
+  Attributes:
+   - success
+  """
+
+  thrift_spec = (
+    (0, TType.STRUCT, 'success', (TSentryConfigValueResponse, TSentryConfigValueResponse.thrift_spec), None, ), # 0
+  )
+
+  def __init__(self, success=None,):
+    self.success = success
+
+  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 = TSentryConfigValueResponse()
+          self.success.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('get_sentry_config_value_result')
+    if self.success is not None:
+      oprot.writeFieldBegin('success', TType.STRUCT, 0)
+      self.success.write(oprot)
+      oprot.writeFieldEnd()
+    oprot.writeFieldStop()
+    oprot.writeStructEnd()
+
+  def validate(self):
+    return
+
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]

+ 332 - 86
desktop/libs/libsentry/gen-py/sentry_policy_service/ttypes.py

@@ -47,6 +47,7 @@ class TSentryPrivilege(object):
    - action
    - createTime
    - grantOption
+   - columnName
   """
 
   thrift_spec = (
@@ -60,9 +61,10 @@ class TSentryPrivilege(object):
     (7, TType.STRING, 'action', None, "", ), # 7
     (8, TType.I64, 'createTime', None, None, ), # 8
     (9, TType.I32, 'grantOption', None,     0, ), # 9
+    (10, TType.STRING, 'columnName', None, "", ), # 10
   )
 
-  def __init__(self, privilegeScope=None, serverName=None, dbName=thrift_spec[4][4], tableName=thrift_spec[5][4], URI=thrift_spec[6][4], action=thrift_spec[7][4], createTime=None, grantOption=thrift_spec[9][4],):
+  def __init__(self, privilegeScope=None, serverName=None, dbName=thrift_spec[4][4], tableName=thrift_spec[5][4], URI=thrift_spec[6][4], action=thrift_spec[7][4], createTime=None, grantOption=thrift_spec[9][4], columnName=thrift_spec[10][4],):
     self.privilegeScope = privilegeScope
     self.serverName = serverName
     self.dbName = dbName
@@ -71,6 +73,7 @@ class TSentryPrivilege(object):
     self.action = action
     self.createTime = createTime
     self.grantOption = grantOption
+    self.columnName = columnName
 
   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:
@@ -121,6 +124,11 @@ class TSentryPrivilege(object):
           self.grantOption = iprot.readI32();
         else:
           iprot.skip(ftype)
+      elif fid == 10:
+        if ftype == TType.STRING:
+          self.columnName = iprot.readString();
+        else:
+          iprot.skip(ftype)
       else:
         iprot.skip(ftype)
       iprot.readFieldEnd()
@@ -163,6 +171,10 @@ class TSentryPrivilege(object):
       oprot.writeFieldBegin('grantOption', TType.I32, 9)
       oprot.writeI32(self.grantOption)
       oprot.writeFieldEnd()
+    if self.columnName is not None:
+      oprot.writeFieldBegin('columnName', TType.STRING, 10)
+      oprot.writeString(self.columnName)
+      oprot.writeFieldEnd()
     oprot.writeFieldStop()
     oprot.writeStructEnd()
 
@@ -916,6 +928,7 @@ class TAlterSentryRoleGrantPrivilegeRequest(object):
    - requestorUserName
    - roleName
    - privilege
+   - privileges
   """
 
   thrift_spec = (
@@ -925,13 +938,15 @@ class TAlterSentryRoleGrantPrivilegeRequest(object):
     (3, TType.STRING, 'roleName', None, None, ), # 3
     None, # 4
     (5, TType.STRUCT, 'privilege', (TSentryPrivilege, TSentryPrivilege.thrift_spec), None, ), # 5
+    (6, TType.SET, 'privileges', (TType.STRUCT,(TSentryPrivilege, TSentryPrivilege.thrift_spec)), None, ), # 6
   )
 
-  def __init__(self, protocol_version=thrift_spec[1][4], requestorUserName=None, roleName=None, privilege=None,):
+  def __init__(self, protocol_version=thrift_spec[1][4], requestorUserName=None, roleName=None, privilege=None, privileges=None,):
     self.protocol_version = protocol_version
     self.requestorUserName = requestorUserName
     self.roleName = roleName
     self.privilege = privilege
+    self.privileges = privileges
 
   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:
@@ -963,6 +978,17 @@ class TAlterSentryRoleGrantPrivilegeRequest(object):
           self.privilege.read(iprot)
         else:
           iprot.skip(ftype)
+      elif fid == 6:
+        if ftype == TType.SET:
+          self.privileges = set()
+          (_etype17, _size14) = iprot.readSetBegin()
+          for _i18 in xrange(_size14):
+            _elem19 = TSentryPrivilege()
+            _elem19.read(iprot)
+            self.privileges.add(_elem19)
+          iprot.readSetEnd()
+        else:
+          iprot.skip(ftype)
       else:
         iprot.skip(ftype)
       iprot.readFieldEnd()
@@ -989,6 +1015,13 @@ class TAlterSentryRoleGrantPrivilegeRequest(object):
       oprot.writeFieldBegin('privilege', TType.STRUCT, 5)
       self.privilege.write(oprot)
       oprot.writeFieldEnd()
+    if self.privileges is not None:
+      oprot.writeFieldBegin('privileges', TType.SET, 6)
+      oprot.writeSetBegin(TType.STRUCT, len(self.privileges))
+      for iter20 in self.privileges:
+        iter20.write(oprot)
+      oprot.writeSetEnd()
+      oprot.writeFieldEnd()
     oprot.writeFieldStop()
     oprot.writeStructEnd()
 
@@ -999,8 +1032,6 @@ class TAlterSentryRoleGrantPrivilegeRequest(object):
       raise TProtocol.TProtocolException(message='Required field requestorUserName is unset!')
     if self.roleName is None:
       raise TProtocol.TProtocolException(message='Required field roleName is unset!')
-    if self.privilege is None:
-      raise TProtocol.TProtocolException(message='Required field privilege is unset!')
     return
 
 
@@ -1020,17 +1051,20 @@ class TAlterSentryRoleGrantPrivilegeResponse(object):
   Attributes:
    - status
    - privilege
+   - privileges
   """
 
   thrift_spec = (
     None, # 0
     (1, TType.STRUCT, 'status', (sentry_common_service.ttypes.TSentryResponseStatus, sentry_common_service.ttypes.TSentryResponseStatus.thrift_spec), None, ), # 1
     (2, TType.STRUCT, 'privilege', (TSentryPrivilege, TSentryPrivilege.thrift_spec), None, ), # 2
+    (3, TType.SET, 'privileges', (TType.STRUCT,(TSentryPrivilege, TSentryPrivilege.thrift_spec)), None, ), # 3
   )
 
-  def __init__(self, status=None, privilege=None,):
+  def __init__(self, status=None, privilege=None, privileges=None,):
     self.status = status
     self.privilege = privilege
+    self.privileges = privileges
 
   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:
@@ -1053,6 +1087,17 @@ class TAlterSentryRoleGrantPrivilegeResponse(object):
           self.privilege.read(iprot)
         else:
           iprot.skip(ftype)
+      elif fid == 3:
+        if ftype == TType.SET:
+          self.privileges = set()
+          (_etype24, _size21) = iprot.readSetBegin()
+          for _i25 in xrange(_size21):
+            _elem26 = TSentryPrivilege()
+            _elem26.read(iprot)
+            self.privileges.add(_elem26)
+          iprot.readSetEnd()
+        else:
+          iprot.skip(ftype)
       else:
         iprot.skip(ftype)
       iprot.readFieldEnd()
@@ -1071,6 +1116,13 @@ class TAlterSentryRoleGrantPrivilegeResponse(object):
       oprot.writeFieldBegin('privilege', TType.STRUCT, 2)
       self.privilege.write(oprot)
       oprot.writeFieldEnd()
+    if self.privileges is not None:
+      oprot.writeFieldBegin('privileges', TType.SET, 3)
+      oprot.writeSetBegin(TType.STRUCT, len(self.privileges))
+      for iter27 in self.privileges:
+        iter27.write(oprot)
+      oprot.writeSetEnd()
+      oprot.writeFieldEnd()
     oprot.writeFieldStop()
     oprot.writeStructEnd()
 
@@ -1098,6 +1150,7 @@ class TAlterSentryRoleRevokePrivilegeRequest(object):
    - requestorUserName
    - roleName
    - privilege
+   - privileges
   """
 
   thrift_spec = (
@@ -1107,13 +1160,15 @@ class TAlterSentryRoleRevokePrivilegeRequest(object):
     (3, TType.STRING, 'roleName', None, None, ), # 3
     None, # 4
     (5, TType.STRUCT, 'privilege', (TSentryPrivilege, TSentryPrivilege.thrift_spec), None, ), # 5
+    (6, TType.SET, 'privileges', (TType.STRUCT,(TSentryPrivilege, TSentryPrivilege.thrift_spec)), None, ), # 6
   )
 
-  def __init__(self, protocol_version=thrift_spec[1][4], requestorUserName=None, roleName=None, privilege=None,):
+  def __init__(self, protocol_version=thrift_spec[1][4], requestorUserName=None, roleName=None, privilege=None, privileges=None,):
     self.protocol_version = protocol_version
     self.requestorUserName = requestorUserName
     self.roleName = roleName
     self.privilege = privilege
+    self.privileges = privileges
 
   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:
@@ -1145,6 +1200,17 @@ class TAlterSentryRoleRevokePrivilegeRequest(object):
           self.privilege.read(iprot)
         else:
           iprot.skip(ftype)
+      elif fid == 6:
+        if ftype == TType.SET:
+          self.privileges = set()
+          (_etype31, _size28) = iprot.readSetBegin()
+          for _i32 in xrange(_size28):
+            _elem33 = TSentryPrivilege()
+            _elem33.read(iprot)
+            self.privileges.add(_elem33)
+          iprot.readSetEnd()
+        else:
+          iprot.skip(ftype)
       else:
         iprot.skip(ftype)
       iprot.readFieldEnd()
@@ -1171,6 +1237,13 @@ class TAlterSentryRoleRevokePrivilegeRequest(object):
       oprot.writeFieldBegin('privilege', TType.STRUCT, 5)
       self.privilege.write(oprot)
       oprot.writeFieldEnd()
+    if self.privileges is not None:
+      oprot.writeFieldBegin('privileges', TType.SET, 6)
+      oprot.writeSetBegin(TType.STRUCT, len(self.privileges))
+      for iter34 in self.privileges:
+        iter34.write(oprot)
+      oprot.writeSetEnd()
+      oprot.writeFieldEnd()
     oprot.writeFieldStop()
     oprot.writeStructEnd()
 
@@ -1181,8 +1254,6 @@ class TAlterSentryRoleRevokePrivilegeRequest(object):
       raise TProtocol.TProtocolException(message='Required field requestorUserName is unset!')
     if self.roleName is None:
       raise TProtocol.TProtocolException(message='Required field roleName is unset!')
-    if self.privilege is None:
-      raise TProtocol.TProtocolException(message='Required field privilege is unset!')
     return
 
 
@@ -1385,11 +1456,11 @@ class TSentryRole(object):
       elif fid == 2:
         if ftype == TType.SET:
           self.groups = set()
-          (_etype17, _size14) = iprot.readSetBegin()
-          for _i18 in xrange(_size14):
-            _elem19 = TSentryGroup()
-            _elem19.read(iprot)
-            self.groups.add(_elem19)
+          (_etype38, _size35) = iprot.readSetBegin()
+          for _i39 in xrange(_size35):
+            _elem40 = TSentryGroup()
+            _elem40.read(iprot)
+            self.groups.add(_elem40)
           iprot.readSetEnd()
         else:
           iprot.skip(ftype)
@@ -1415,8 +1486,8 @@ class TSentryRole(object):
     if self.groups is not None:
       oprot.writeFieldBegin('groups', TType.SET, 2)
       oprot.writeSetBegin(TType.STRUCT, len(self.groups))
-      for iter20 in self.groups:
-        iter20.write(oprot)
+      for iter41 in self.groups:
+        iter41.write(oprot)
       oprot.writeSetEnd()
       oprot.writeFieldEnd()
     if self.grantorPrincipal is not None:
@@ -1482,11 +1553,11 @@ class TListSentryRolesResponse(object):
       elif fid == 2:
         if ftype == TType.SET:
           self.roles = set()
-          (_etype24, _size21) = iprot.readSetBegin()
-          for _i25 in xrange(_size21):
-            _elem26 = TSentryRole()
-            _elem26.read(iprot)
-            self.roles.add(_elem26)
+          (_etype45, _size42) = iprot.readSetBegin()
+          for _i46 in xrange(_size42):
+            _elem47 = TSentryRole()
+            _elem47.read(iprot)
+            self.roles.add(_elem47)
           iprot.readSetEnd()
         else:
           iprot.skip(ftype)
@@ -1507,8 +1578,8 @@ class TListSentryRolesResponse(object):
     if self.roles is not None:
       oprot.writeFieldBegin('roles', TType.SET, 2)
       oprot.writeSetBegin(TType.STRUCT, len(self.roles))
-      for iter27 in self.roles:
-        iter27.write(oprot)
+      for iter48 in self.roles:
+        iter48.write(oprot)
       oprot.writeSetEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -1538,6 +1609,7 @@ class TSentryAuthorizable(object):
    - uri
    - db
    - table
+   - column
   """
 
   thrift_spec = (
@@ -1546,13 +1618,15 @@ class TSentryAuthorizable(object):
     (2, TType.STRING, 'uri', None, None, ), # 2
     (3, TType.STRING, 'db', None, None, ), # 3
     (4, TType.STRING, 'table', None, None, ), # 4
+    (5, TType.STRING, 'column', None, None, ), # 5
   )
 
-  def __init__(self, server=None, uri=None, db=None, table=None,):
+  def __init__(self, server=None, uri=None, db=None, table=None, column=None,):
     self.server = server
     self.uri = uri
     self.db = db
     self.table = table
+    self.column = column
 
   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:
@@ -1583,6 +1657,11 @@ class TSentryAuthorizable(object):
           self.table = iprot.readString();
         else:
           iprot.skip(ftype)
+      elif fid == 5:
+        if ftype == TType.STRING:
+          self.column = iprot.readString();
+        else:
+          iprot.skip(ftype)
       else:
         iprot.skip(ftype)
       iprot.readFieldEnd()
@@ -1609,6 +1688,10 @@ class TSentryAuthorizable(object):
       oprot.writeFieldBegin('table', TType.STRING, 4)
       oprot.writeString(self.table)
       oprot.writeFieldEnd()
+    if self.column is not None:
+      oprot.writeFieldBegin('column', TType.STRING, 5)
+      oprot.writeString(self.column)
+      oprot.writeFieldEnd()
     oprot.writeFieldStop()
     oprot.writeStructEnd()
 
@@ -1768,11 +1851,11 @@ class TListSentryPrivilegesResponse(object):
       elif fid == 2:
         if ftype == TType.SET:
           self.privileges = set()
-          (_etype31, _size28) = iprot.readSetBegin()
-          for _i32 in xrange(_size28):
-            _elem33 = TSentryPrivilege()
-            _elem33.read(iprot)
-            self.privileges.add(_elem33)
+          (_etype52, _size49) = iprot.readSetBegin()
+          for _i53 in xrange(_size49):
+            _elem54 = TSentryPrivilege()
+            _elem54.read(iprot)
+            self.privileges.add(_elem54)
           iprot.readSetEnd()
         else:
           iprot.skip(ftype)
@@ -1793,8 +1876,8 @@ class TListSentryPrivilegesResponse(object):
     if self.privileges is not None:
       oprot.writeFieldBegin('privileges', TType.SET, 2)
       oprot.writeSetBegin(TType.STRUCT, len(self.privileges))
-      for iter34 in self.privileges:
-        iter34.write(oprot)
+      for iter55 in self.privileges:
+        iter55.write(oprot)
       oprot.writeSetEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -2174,10 +2257,10 @@ class TSentryActiveRoleSet(object):
       elif fid == 2:
         if ftype == TType.SET:
           self.roles = set()
-          (_etype38, _size35) = iprot.readSetBegin()
-          for _i39 in xrange(_size35):
-            _elem40 = iprot.readString();
-            self.roles.add(_elem40)
+          (_etype59, _size56) = iprot.readSetBegin()
+          for _i60 in xrange(_size56):
+            _elem61 = iprot.readString();
+            self.roles.add(_elem61)
           iprot.readSetEnd()
         else:
           iprot.skip(ftype)
@@ -2198,8 +2281,8 @@ class TSentryActiveRoleSet(object):
     if self.roles is not None:
       oprot.writeFieldBegin('roles', TType.SET, 2)
       oprot.writeSetBegin(TType.STRING, len(self.roles))
-      for iter41 in self.roles:
-        oprot.writeString(iter41)
+      for iter62 in self.roles:
+        oprot.writeString(iter62)
       oprot.writeSetEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -2264,10 +2347,10 @@ class TListSentryPrivilegesForProviderRequest(object):
       elif fid == 2:
         if ftype == TType.SET:
           self.groups = set()
-          (_etype45, _size42) = iprot.readSetBegin()
-          for _i46 in xrange(_size42):
-            _elem47 = iprot.readString();
-            self.groups.add(_elem47)
+          (_etype66, _size63) = iprot.readSetBegin()
+          for _i67 in xrange(_size63):
+            _elem68 = iprot.readString();
+            self.groups.add(_elem68)
           iprot.readSetEnd()
         else:
           iprot.skip(ftype)
@@ -2300,8 +2383,8 @@ class TListSentryPrivilegesForProviderRequest(object):
     if self.groups is not None:
       oprot.writeFieldBegin('groups', TType.SET, 2)
       oprot.writeSetBegin(TType.STRING, len(self.groups))
-      for iter48 in self.groups:
-        oprot.writeString(iter48)
+      for iter69 in self.groups:
+        oprot.writeString(iter69)
       oprot.writeSetEnd()
       oprot.writeFieldEnd()
     if self.roleSet is not None:
@@ -2371,10 +2454,10 @@ class TListSentryPrivilegesForProviderResponse(object):
       elif fid == 2:
         if ftype == TType.SET:
           self.privileges = set()
-          (_etype52, _size49) = iprot.readSetBegin()
-          for _i53 in xrange(_size49):
-            _elem54 = iprot.readString();
-            self.privileges.add(_elem54)
+          (_etype73, _size70) = iprot.readSetBegin()
+          for _i74 in xrange(_size70):
+            _elem75 = iprot.readString();
+            self.privileges.add(_elem75)
           iprot.readSetEnd()
         else:
           iprot.skip(ftype)
@@ -2395,8 +2478,8 @@ class TListSentryPrivilegesForProviderResponse(object):
     if self.privileges is not None:
       oprot.writeFieldBegin('privileges', TType.SET, 2)
       oprot.writeSetBegin(TType.STRING, len(self.privileges))
-      for iter55 in self.privileges:
-        oprot.writeString(iter55)
+      for iter76 in self.privileges:
+        oprot.writeString(iter76)
       oprot.writeSetEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -2447,17 +2530,17 @@ class TSentryPrivilegeMap(object):
       if fid == 1:
         if ftype == TType.MAP:
           self.privilegeMap = {}
-          (_ktype57, _vtype58, _size56 ) = iprot.readMapBegin() 
-          for _i60 in xrange(_size56):
-            _key61 = iprot.readString();
-            _val62 = set()
-            (_etype66, _size63) = iprot.readSetBegin()
-            for _i67 in xrange(_size63):
-              _elem68 = TSentryPrivilege()
-              _elem68.read(iprot)
-              _val62.add(_elem68)
+          (_ktype78, _vtype79, _size77 ) = iprot.readMapBegin() 
+          for _i81 in xrange(_size77):
+            _key82 = iprot.readString();
+            _val83 = set()
+            (_etype87, _size84) = iprot.readSetBegin()
+            for _i88 in xrange(_size84):
+              _elem89 = TSentryPrivilege()
+              _elem89.read(iprot)
+              _val83.add(_elem89)
             iprot.readSetEnd()
-            self.privilegeMap[_key61] = _val62
+            self.privilegeMap[_key82] = _val83
           iprot.readMapEnd()
         else:
           iprot.skip(ftype)
@@ -2474,11 +2557,11 @@ class TSentryPrivilegeMap(object):
     if self.privilegeMap is not None:
       oprot.writeFieldBegin('privilegeMap', TType.MAP, 1)
       oprot.writeMapBegin(TType.STRING, TType.SET, len(self.privilegeMap))
-      for kiter69,viter70 in self.privilegeMap.items():
-        oprot.writeString(kiter69)
-        oprot.writeSetBegin(TType.STRUCT, len(viter70))
-        for iter71 in viter70:
-          iter71.write(oprot)
+      for kiter90,viter91 in self.privilegeMap.items():
+        oprot.writeString(kiter90)
+        oprot.writeSetBegin(TType.STRUCT, len(viter91))
+        for iter92 in viter91:
+          iter92.write(oprot)
         oprot.writeSetEnd()
       oprot.writeMapEnd()
       oprot.writeFieldEnd()
@@ -2550,21 +2633,21 @@ class TListSentryPrivilegesByAuthRequest(object):
       elif fid == 3:
         if ftype == TType.SET:
           self.authorizableSet = set()
-          (_etype75, _size72) = iprot.readSetBegin()
-          for _i76 in xrange(_size72):
-            _elem77 = TSentryAuthorizable()
-            _elem77.read(iprot)
-            self.authorizableSet.add(_elem77)
+          (_etype96, _size93) = iprot.readSetBegin()
+          for _i97 in xrange(_size93):
+            _elem98 = TSentryAuthorizable()
+            _elem98.read(iprot)
+            self.authorizableSet.add(_elem98)
           iprot.readSetEnd()
         else:
           iprot.skip(ftype)
       elif fid == 4:
         if ftype == TType.SET:
           self.groups = set()
-          (_etype81, _size78) = iprot.readSetBegin()
-          for _i82 in xrange(_size78):
-            _elem83 = iprot.readString();
-            self.groups.add(_elem83)
+          (_etype102, _size99) = iprot.readSetBegin()
+          for _i103 in xrange(_size99):
+            _elem104 = iprot.readString();
+            self.groups.add(_elem104)
           iprot.readSetEnd()
         else:
           iprot.skip(ftype)
@@ -2595,15 +2678,15 @@ class TListSentryPrivilegesByAuthRequest(object):
     if self.authorizableSet is not None:
       oprot.writeFieldBegin('authorizableSet', TType.SET, 3)
       oprot.writeSetBegin(TType.STRUCT, len(self.authorizableSet))
-      for iter84 in self.authorizableSet:
-        iter84.write(oprot)
+      for iter105 in self.authorizableSet:
+        iter105.write(oprot)
       oprot.writeSetEnd()
       oprot.writeFieldEnd()
     if self.groups is not None:
       oprot.writeFieldBegin('groups', TType.SET, 4)
       oprot.writeSetBegin(TType.STRING, len(self.groups))
-      for iter85 in self.groups:
-        oprot.writeString(iter85)
+      for iter106 in self.groups:
+        oprot.writeString(iter106)
       oprot.writeSetEnd()
       oprot.writeFieldEnd()
     if self.roleSet is not None:
@@ -2669,13 +2752,13 @@ class TListSentryPrivilegesByAuthResponse(object):
       elif fid == 2:
         if ftype == TType.MAP:
           self.privilegesMapByAuth = {}
-          (_ktype87, _vtype88, _size86 ) = iprot.readMapBegin() 
-          for _i90 in xrange(_size86):
-            _key91 = TSentryAuthorizable()
-            _key91.read(iprot)
-            _val92 = TSentryPrivilegeMap()
-            _val92.read(iprot)
-            self.privilegesMapByAuth[_key91] = _val92
+          (_ktype108, _vtype109, _size107 ) = iprot.readMapBegin() 
+          for _i111 in xrange(_size107):
+            _key112 = TSentryAuthorizable()
+            _key112.read(iprot)
+            _val113 = TSentryPrivilegeMap()
+            _val113.read(iprot)
+            self.privilegesMapByAuth[_key112] = _val113
           iprot.readMapEnd()
         else:
           iprot.skip(ftype)
@@ -2696,9 +2779,9 @@ class TListSentryPrivilegesByAuthResponse(object):
     if self.privilegesMapByAuth is not None:
       oprot.writeFieldBegin('privilegesMapByAuth', TType.MAP, 2)
       oprot.writeMapBegin(TType.STRUCT, TType.STRUCT, len(self.privilegesMapByAuth))
-      for kiter93,viter94 in self.privilegesMapByAuth.items():
-        kiter93.write(oprot)
-        viter94.write(oprot)
+      for kiter114,viter115 in self.privilegesMapByAuth.items():
+        kiter114.write(oprot)
+        viter115.write(oprot)
       oprot.writeMapEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -2710,6 +2793,169 @@ class TListSentryPrivilegesByAuthResponse(object):
     return
 
 
+  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 TSentryConfigValueRequest(object):
+  """
+  Attributes:
+   - protocol_version
+   - propertyName
+   - defaultValue
+  """
+
+  thrift_spec = (
+    None, # 0
+    (1, TType.I32, 'protocol_version', None, 1, ), # 1
+    (2, TType.STRING, 'propertyName', None, None, ), # 2
+    (3, TType.STRING, 'defaultValue', None, None, ), # 3
+  )
+
+  def __init__(self, protocol_version=thrift_spec[1][4], propertyName=None, defaultValue=None,):
+    self.protocol_version = protocol_version
+    self.propertyName = propertyName
+    self.defaultValue = defaultValue
+
+  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.I32:
+          self.protocol_version = iprot.readI32();
+        else:
+          iprot.skip(ftype)
+      elif fid == 2:
+        if ftype == TType.STRING:
+          self.propertyName = iprot.readString();
+        else:
+          iprot.skip(ftype)
+      elif fid == 3:
+        if ftype == TType.STRING:
+          self.defaultValue = iprot.readString();
+        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('TSentryConfigValueRequest')
+    if self.protocol_version is not None:
+      oprot.writeFieldBegin('protocol_version', TType.I32, 1)
+      oprot.writeI32(self.protocol_version)
+      oprot.writeFieldEnd()
+    if self.propertyName is not None:
+      oprot.writeFieldBegin('propertyName', TType.STRING, 2)
+      oprot.writeString(self.propertyName)
+      oprot.writeFieldEnd()
+    if self.defaultValue is not None:
+      oprot.writeFieldBegin('defaultValue', TType.STRING, 3)
+      oprot.writeString(self.defaultValue)
+      oprot.writeFieldEnd()
+    oprot.writeFieldStop()
+    oprot.writeStructEnd()
+
+  def validate(self):
+    if self.protocol_version is None:
+      raise TProtocol.TProtocolException(message='Required field protocol_version is unset!')
+    if self.propertyName is None:
+      raise TProtocol.TProtocolException(message='Required field propertyName is unset!')
+    return
+
+
+  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 TSentryConfigValueResponse(object):
+  """
+  Attributes:
+   - status
+   - value
+  """
+
+  thrift_spec = (
+    None, # 0
+    (1, TType.STRUCT, 'status', (sentry_common_service.ttypes.TSentryResponseStatus, sentry_common_service.ttypes.TSentryResponseStatus.thrift_spec), None, ), # 1
+    (2, TType.STRING, 'value', None, None, ), # 2
+  )
+
+  def __init__(self, status=None, value=None,):
+    self.status = status
+    self.value = value
+
+  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.status = sentry_common_service.ttypes.TSentryResponseStatus()
+          self.status.read(iprot)
+        else:
+          iprot.skip(ftype)
+      elif fid == 2:
+        if ftype == TType.STRING:
+          self.value = iprot.readString();
+        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('TSentryConfigValueResponse')
+    if self.status is not None:
+      oprot.writeFieldBegin('status', TType.STRUCT, 1)
+      self.status.write(oprot)
+      oprot.writeFieldEnd()
+    if self.value is not None:
+      oprot.writeFieldBegin('value', TType.STRING, 2)
+      oprot.writeString(self.value)
+      oprot.writeFieldEnd()
+    oprot.writeFieldStop()
+    oprot.writeStructEnd()
+
+  def validate(self):
+    if self.status is None:
+      raise TProtocol.TProtocolException(message='Required field status is unset!')
+    return
+
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]

+ 1 - 0
desktop/libs/libsentry/thrift/sentry_common_service.thrift

@@ -25,6 +25,7 @@ namespace php sentry.service.thrift
 namespace cpp Apache.Sentry.Service.Thrift
 
 const i32 TSENTRY_SERVICE_V1 = 1;
+const i32 TSENTRY_SERVICE_V2 = 1;
 
 const i32 TSENTRY_STATUS_OK = 0;
 const i32 TSENTRY_STATUS_ALREADY_EXISTS = 1;

+ 21 - 3
desktop/libs/libsentry/thrift/sentry_policy_service.thrift

@@ -22,7 +22,7 @@
 # Thrift Service that the MetaStore is built on
 #
 
-#include "share/fb303/if/fb303.thrift"
+# include "share/fb303/if/fb303.thrift"
 include "sentry_common_service.thrift"
 
 namespace java org.apache.sentry.provider.db.service.thrift
@@ -49,6 +49,7 @@ struct TSentryPrivilege {
 7: required string action = "",
 8: optional i64 createTime, # Set on server side
 9: optional TSentryGrantOption grantOption = TSentryGrantOption.FALSE
+10: optional string columnName = "",
 }
 
 # TODO can this be deleted? it's not adding value to TAlterSentryRoleAddGroupsRequest
@@ -104,11 +105,13 @@ struct TAlterSentryRoleGrantPrivilegeRequest {
 1: required i32 protocol_version = sentry_common_service.TSENTRY_SERVICE_V1,
 2: required string requestorUserName, # user on whose behalf the request is issued
 3: required string roleName,
-5: required TSentryPrivilege privilege
+5: optional TSentryPrivilege privilege,
+6: optional set<TSentryPrivilege> privileges
 }
 struct TAlterSentryRoleGrantPrivilegeResponse {
 1: required sentry_common_service.TSentryResponseStatus status
 2: optional TSentryPrivilege privilege
+3: optional set<TSentryPrivilege> privileges
 }
 
 # REVOKE ... ON ... FROM ROLE ...
@@ -116,7 +119,8 @@ struct TAlterSentryRoleRevokePrivilegeRequest {
 1: required i32 protocol_version = sentry_common_service.TSENTRY_SERVICE_V1,
 2: required string requestorUserName, # user on whose behalf the request is issued
 3: required string roleName,
-5: required TSentryPrivilege privilege
+5: optional TSentryPrivilege privilege,
+6: optional set<TSentryPrivilege> privileges
 }
 struct TAlterSentryRoleRevokePrivilegeResponse {
 1: required sentry_common_service.TSentryResponseStatus status
@@ -144,6 +148,7 @@ struct TSentryAuthorizable {
 2: optional string uri,
 3: optional string db,
 4: optional string table,
+5: optional string column,
 }
 
 # SHOW GRANT
@@ -216,6 +221,17 @@ struct TListSentryPrivilegesByAuthResponse {
 2: optional map<TSentryAuthorizable, TSentryPrivilegeMap> privilegesMapByAuth # will not be set in case of an error
 }
 
+# Obtain a config value from the Sentry service
+struct TSentryConfigValueRequest {
+1: required i32 protocol_version = sentry_common_service.TSENTRY_SERVICE_V1,
+2: required string propertyName, # Config attribute to obtain
+3: optional string defaultValue # Value if propertyName not found
+}
+struct TSentryConfigValueResponse {
+1: required sentry_common_service.TSentryResponseStatus status
+2: optional string value
+}
+
 service SentryPolicyService
 {
   TCreateSentryRoleResponse create_sentry_role(1:TCreateSentryRoleRequest request)
@@ -239,4 +255,6 @@ service SentryPolicyService
  TRenamePrivilegesResponse rename_sentry_privilege(1:TRenamePrivilegesRequest request);
 
  TListSentryPrivilegesByAuthResponse list_sentry_privileges_by_authorizable(1:TListSentryPrivilegesByAuthRequest request);
+
+ TSentryConfigValueResponse get_sentry_config_value(1:TSentryConfigValueRequest request)
 }