Repository: hive
Updated Branches:
  refs/heads/master f5618d922 -> 10cfba200


http://git-wip-us.apache.org/repos/asf/hive/blob/10cfba20/standalone-metastore/metastore-common/src/gen/thrift/gen-py/hive_metastore/ttypes.py
----------------------------------------------------------------------
diff --git 
a/standalone-metastore/metastore-common/src/gen/thrift/gen-py/hive_metastore/ttypes.py
 
b/standalone-metastore/metastore-common/src/gen/thrift/gen-py/hive_metastore/ttypes.py
index bdfb480..4ef4aad 100644
--- 
a/standalone-metastore/metastore-common/src/gen/thrift/gen-py/hive_metastore/ttypes.py
+++ 
b/standalone-metastore/metastore-common/src/gen/thrift/gen-py/hive_metastore/ttypes.py
@@ -12141,6 +12141,7 @@ class CommitTxnRequest:
    - replPolicy
    - writeEventInfos
    - keyValue
+   - replLastIdInfo
   """
 
   thrift_spec = (
@@ -12149,13 +12150,15 @@ class CommitTxnRequest:
     (2, TType.STRING, 'replPolicy', None, None, ), # 2
     (3, TType.LIST, 'writeEventInfos', (TType.STRUCT,(WriteEventInfo, 
WriteEventInfo.thrift_spec)), None, ), # 3
     (4, TType.STRUCT, 'keyValue', (CommitTxnKeyValue, 
CommitTxnKeyValue.thrift_spec), None, ), # 4
+    (5, TType.STRUCT, 'replLastIdInfo', (ReplLastIdInfo, 
ReplLastIdInfo.thrift_spec), None, ), # 5
   )
 
-  def __init__(self, txnid=None, replPolicy=None, writeEventInfos=None, 
keyValue=None,):
+  def __init__(self, txnid=None, replPolicy=None, writeEventInfos=None, 
keyValue=None, replLastIdInfo=None,):
     self.txnid = txnid
     self.replPolicy = replPolicy
     self.writeEventInfos = writeEventInfos
     self.keyValue = keyValue
+    self.replLastIdInfo = replLastIdInfo
 
   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:
@@ -12193,6 +12196,12 @@ class CommitTxnRequest:
           self.keyValue.read(iprot)
         else:
           iprot.skip(ftype)
+      elif fid == 5:
+        if ftype == TType.STRUCT:
+          self.replLastIdInfo = ReplLastIdInfo()
+          self.replLastIdInfo.read(iprot)
+        else:
+          iprot.skip(ftype)
       else:
         iprot.skip(ftype)
       iprot.readFieldEnd()
@@ -12222,6 +12231,10 @@ class CommitTxnRequest:
       oprot.writeFieldBegin('keyValue', TType.STRUCT, 4)
       self.keyValue.write(oprot)
       oprot.writeFieldEnd()
+    if self.replLastIdInfo is not None:
+      oprot.writeFieldBegin('replLastIdInfo', TType.STRUCT, 5)
+      self.replLastIdInfo.write(oprot)
+      oprot.writeFieldEnd()
     oprot.writeFieldStop()
     oprot.writeStructEnd()
 
@@ -12237,6 +12250,149 @@ class CommitTxnRequest:
     value = (value * 31) ^ hash(self.replPolicy)
     value = (value * 31) ^ hash(self.writeEventInfos)
     value = (value * 31) ^ hash(self.keyValue)
+    value = (value * 31) ^ hash(self.replLastIdInfo)
+    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 ReplLastIdInfo:
+  """
+  Attributes:
+   - database
+   - lastReplId
+   - table
+   - catalog
+   - partitionList
+   - needUpdateDBReplId
+  """
+
+  thrift_spec = (
+    None, # 0
+    (1, TType.STRING, 'database', None, None, ), # 1
+    (2, TType.I64, 'lastReplId', None, None, ), # 2
+    (3, TType.STRING, 'table', None, None, ), # 3
+    (4, TType.STRING, 'catalog', None, None, ), # 4
+    (5, TType.LIST, 'partitionList', (TType.STRING,None), None, ), # 5
+    (6, TType.BOOL, 'needUpdateDBReplId', None, None, ), # 6
+  )
+
+  def __init__(self, database=None, lastReplId=None, table=None, catalog=None, 
partitionList=None, needUpdateDBReplId=None,):
+    self.database = database
+    self.lastReplId = lastReplId
+    self.table = table
+    self.catalog = catalog
+    self.partitionList = partitionList
+    self.needUpdateDBReplId = needUpdateDBReplId
+
+  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.STRING:
+          self.database = iprot.readString()
+        else:
+          iprot.skip(ftype)
+      elif fid == 2:
+        if ftype == TType.I64:
+          self.lastReplId = iprot.readI64()
+        else:
+          iprot.skip(ftype)
+      elif fid == 3:
+        if ftype == TType.STRING:
+          self.table = iprot.readString()
+        else:
+          iprot.skip(ftype)
+      elif fid == 4:
+        if ftype == TType.STRING:
+          self.catalog = iprot.readString()
+        else:
+          iprot.skip(ftype)
+      elif fid == 5:
+        if ftype == TType.LIST:
+          self.partitionList = []
+          (_etype540, _size537) = iprot.readListBegin()
+          for _i541 in xrange(_size537):
+            _elem542 = iprot.readString()
+            self.partitionList.append(_elem542)
+          iprot.readListEnd()
+        else:
+          iprot.skip(ftype)
+      elif fid == 6:
+        if ftype == TType.BOOL:
+          self.needUpdateDBReplId = iprot.readBool()
+        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('ReplLastIdInfo')
+    if self.database is not None:
+      oprot.writeFieldBegin('database', TType.STRING, 1)
+      oprot.writeString(self.database)
+      oprot.writeFieldEnd()
+    if self.lastReplId is not None:
+      oprot.writeFieldBegin('lastReplId', TType.I64, 2)
+      oprot.writeI64(self.lastReplId)
+      oprot.writeFieldEnd()
+    if self.table is not None:
+      oprot.writeFieldBegin('table', TType.STRING, 3)
+      oprot.writeString(self.table)
+      oprot.writeFieldEnd()
+    if self.catalog is not None:
+      oprot.writeFieldBegin('catalog', TType.STRING, 4)
+      oprot.writeString(self.catalog)
+      oprot.writeFieldEnd()
+    if self.partitionList is not None:
+      oprot.writeFieldBegin('partitionList', TType.LIST, 5)
+      oprot.writeListBegin(TType.STRING, len(self.partitionList))
+      for iter543 in self.partitionList:
+        oprot.writeString(iter543)
+      oprot.writeListEnd()
+      oprot.writeFieldEnd()
+    if self.needUpdateDBReplId is not None:
+      oprot.writeFieldBegin('needUpdateDBReplId', TType.BOOL, 6)
+      oprot.writeBool(self.needUpdateDBReplId)
+      oprot.writeFieldEnd()
+    oprot.writeFieldStop()
+    oprot.writeStructEnd()
+
+  def validate(self):
+    if self.database is None:
+      raise TProtocol.TProtocolException(message='Required field database is 
unset!')
+    if self.lastReplId is None:
+      raise TProtocol.TProtocolException(message='Required field lastReplId is 
unset!')
+    return
+
+
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.database)
+    value = (value * 31) ^ hash(self.lastReplId)
+    value = (value * 31) ^ hash(self.table)
+    value = (value * 31) ^ hash(self.catalog)
+    value = (value * 31) ^ hash(self.partitionList)
+    value = (value * 31) ^ hash(self.needUpdateDBReplId)
     return value
 
   def __repr__(self):
@@ -12467,10 +12623,10 @@ class ReplTblWriteIdStateRequest:
       elif fid == 6:
         if ftype == TType.LIST:
           self.partNames = []
-          (_etype540, _size537) = iprot.readListBegin()
-          for _i541 in xrange(_size537):
-            _elem542 = iprot.readString()
-            self.partNames.append(_elem542)
+          (_etype547, _size544) = iprot.readListBegin()
+          for _i548 in xrange(_size544):
+            _elem549 = iprot.readString()
+            self.partNames.append(_elem549)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -12507,8 +12663,8 @@ class ReplTblWriteIdStateRequest:
     if self.partNames is not None:
       oprot.writeFieldBegin('partNames', TType.LIST, 6)
       oprot.writeListBegin(TType.STRING, len(self.partNames))
-      for iter543 in self.partNames:
-        oprot.writeString(iter543)
+      for iter550 in self.partNames:
+        oprot.writeString(iter550)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -12581,10 +12737,10 @@ class GetValidWriteIdsRequest:
       if fid == 1:
         if ftype == TType.LIST:
           self.fullTableNames = []
-          (_etype547, _size544) = iprot.readListBegin()
-          for _i548 in xrange(_size544):
-            _elem549 = iprot.readString()
-            self.fullTableNames.append(_elem549)
+          (_etype554, _size551) = iprot.readListBegin()
+          for _i555 in xrange(_size551):
+            _elem556 = iprot.readString()
+            self.fullTableNames.append(_elem556)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -12611,8 +12767,8 @@ class GetValidWriteIdsRequest:
     if self.fullTableNames is not None:
       oprot.writeFieldBegin('fullTableNames', TType.LIST, 1)
       oprot.writeListBegin(TType.STRING, len(self.fullTableNames))
-      for iter550 in self.fullTableNames:
-        oprot.writeString(iter550)
+      for iter557 in self.fullTableNames:
+        oprot.writeString(iter557)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.validTxnList is not None:
@@ -12698,10 +12854,10 @@ class TableValidWriteIds:
       elif fid == 3:
         if ftype == TType.LIST:
           self.invalidWriteIds = []
-          (_etype554, _size551) = iprot.readListBegin()
-          for _i555 in xrange(_size551):
-            _elem556 = iprot.readI64()
-            self.invalidWriteIds.append(_elem556)
+          (_etype561, _size558) = iprot.readListBegin()
+          for _i562 in xrange(_size558):
+            _elem563 = iprot.readI64()
+            self.invalidWriteIds.append(_elem563)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -12736,8 +12892,8 @@ class TableValidWriteIds:
     if self.invalidWriteIds is not None:
       oprot.writeFieldBegin('invalidWriteIds', TType.LIST, 3)
       oprot.writeListBegin(TType.I64, len(self.invalidWriteIds))
-      for iter557 in self.invalidWriteIds:
-        oprot.writeI64(iter557)
+      for iter564 in self.invalidWriteIds:
+        oprot.writeI64(iter564)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.minOpenWriteId is not None:
@@ -12809,11 +12965,11 @@ class GetValidWriteIdsResponse:
       if fid == 1:
         if ftype == TType.LIST:
           self.tblValidWriteIds = []
-          (_etype561, _size558) = iprot.readListBegin()
-          for _i562 in xrange(_size558):
-            _elem563 = TableValidWriteIds()
-            _elem563.read(iprot)
-            self.tblValidWriteIds.append(_elem563)
+          (_etype568, _size565) = iprot.readListBegin()
+          for _i569 in xrange(_size565):
+            _elem570 = TableValidWriteIds()
+            _elem570.read(iprot)
+            self.tblValidWriteIds.append(_elem570)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -12830,8 +12986,8 @@ class GetValidWriteIdsResponse:
     if self.tblValidWriteIds is not None:
       oprot.writeFieldBegin('tblValidWriteIds', TType.LIST, 1)
       oprot.writeListBegin(TType.STRUCT, len(self.tblValidWriteIds))
-      for iter564 in self.tblValidWriteIds:
-        iter564.write(oprot)
+      for iter571 in self.tblValidWriteIds:
+        iter571.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -12907,10 +13063,10 @@ class AllocateTableWriteIdsRequest:
       elif fid == 3:
         if ftype == TType.LIST:
           self.txnIds = []
-          (_etype568, _size565) = iprot.readListBegin()
-          for _i569 in xrange(_size565):
-            _elem570 = iprot.readI64()
-            self.txnIds.append(_elem570)
+          (_etype575, _size572) = iprot.readListBegin()
+          for _i576 in xrange(_size572):
+            _elem577 = iprot.readI64()
+            self.txnIds.append(_elem577)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -12922,11 +13078,11 @@ class AllocateTableWriteIdsRequest:
       elif fid == 5:
         if ftype == TType.LIST:
           self.srcTxnToWriteIdList = []
-          (_etype574, _size571) = iprot.readListBegin()
-          for _i575 in xrange(_size571):
-            _elem576 = TxnToWriteId()
-            _elem576.read(iprot)
-            self.srcTxnToWriteIdList.append(_elem576)
+          (_etype581, _size578) = iprot.readListBegin()
+          for _i582 in xrange(_size578):
+            _elem583 = TxnToWriteId()
+            _elem583.read(iprot)
+            self.srcTxnToWriteIdList.append(_elem583)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -12951,8 +13107,8 @@ class AllocateTableWriteIdsRequest:
     if self.txnIds is not None:
       oprot.writeFieldBegin('txnIds', TType.LIST, 3)
       oprot.writeListBegin(TType.I64, len(self.txnIds))
-      for iter577 in self.txnIds:
-        oprot.writeI64(iter577)
+      for iter584 in self.txnIds:
+        oprot.writeI64(iter584)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.replPolicy is not None:
@@ -12962,8 +13118,8 @@ class AllocateTableWriteIdsRequest:
     if self.srcTxnToWriteIdList is not None:
       oprot.writeFieldBegin('srcTxnToWriteIdList', TType.LIST, 5)
       oprot.writeListBegin(TType.STRUCT, len(self.srcTxnToWriteIdList))
-      for iter578 in self.srcTxnToWriteIdList:
-        iter578.write(oprot)
+      for iter585 in self.srcTxnToWriteIdList:
+        iter585.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -13105,11 +13261,11 @@ class AllocateTableWriteIdsResponse:
       if fid == 1:
         if ftype == TType.LIST:
           self.txnToWriteIds = []
-          (_etype582, _size579) = iprot.readListBegin()
-          for _i583 in xrange(_size579):
-            _elem584 = TxnToWriteId()
-            _elem584.read(iprot)
-            self.txnToWriteIds.append(_elem584)
+          (_etype589, _size586) = iprot.readListBegin()
+          for _i590 in xrange(_size586):
+            _elem591 = TxnToWriteId()
+            _elem591.read(iprot)
+            self.txnToWriteIds.append(_elem591)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -13126,8 +13282,8 @@ class AllocateTableWriteIdsResponse:
     if self.txnToWriteIds is not None:
       oprot.writeFieldBegin('txnToWriteIds', TType.LIST, 1)
       oprot.writeListBegin(TType.STRUCT, len(self.txnToWriteIds))
-      for iter585 in self.txnToWriteIds:
-        iter585.write(oprot)
+      for iter592 in self.txnToWriteIds:
+        iter592.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -13355,11 +13511,11 @@ class LockRequest:
       if fid == 1:
         if ftype == TType.LIST:
           self.component = []
-          (_etype589, _size586) = iprot.readListBegin()
-          for _i590 in xrange(_size586):
-            _elem591 = LockComponent()
-            _elem591.read(iprot)
-            self.component.append(_elem591)
+          (_etype596, _size593) = iprot.readListBegin()
+          for _i597 in xrange(_size593):
+            _elem598 = LockComponent()
+            _elem598.read(iprot)
+            self.component.append(_elem598)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -13396,8 +13552,8 @@ class LockRequest:
     if self.component is not None:
       oprot.writeFieldBegin('component', TType.LIST, 1)
       oprot.writeListBegin(TType.STRUCT, len(self.component))
-      for iter592 in self.component:
-        iter592.write(oprot)
+      for iter599 in self.component:
+        iter599.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.txnid is not None:
@@ -14095,11 +14251,11 @@ class ShowLocksResponse:
       if fid == 1:
         if ftype == TType.LIST:
           self.locks = []
-          (_etype596, _size593) = iprot.readListBegin()
-          for _i597 in xrange(_size593):
-            _elem598 = ShowLocksResponseElement()
-            _elem598.read(iprot)
-            self.locks.append(_elem598)
+          (_etype603, _size600) = iprot.readListBegin()
+          for _i604 in xrange(_size600):
+            _elem605 = ShowLocksResponseElement()
+            _elem605.read(iprot)
+            self.locks.append(_elem605)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -14116,8 +14272,8 @@ class ShowLocksResponse:
     if self.locks is not None:
       oprot.writeFieldBegin('locks', TType.LIST, 1)
       oprot.writeListBegin(TType.STRUCT, len(self.locks))
-      for iter599 in self.locks:
-        iter599.write(oprot)
+      for iter606 in self.locks:
+        iter606.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -14332,20 +14488,20 @@ class HeartbeatTxnRangeResponse:
       if fid == 1:
         if ftype == TType.SET:
           self.aborted = set()
-          (_etype603, _size600) = iprot.readSetBegin()
-          for _i604 in xrange(_size600):
-            _elem605 = iprot.readI64()
-            self.aborted.add(_elem605)
+          (_etype610, _size607) = iprot.readSetBegin()
+          for _i611 in xrange(_size607):
+            _elem612 = iprot.readI64()
+            self.aborted.add(_elem612)
           iprot.readSetEnd()
         else:
           iprot.skip(ftype)
       elif fid == 2:
         if ftype == TType.SET:
           self.nosuch = set()
-          (_etype609, _size606) = iprot.readSetBegin()
-          for _i610 in xrange(_size606):
-            _elem611 = iprot.readI64()
-            self.nosuch.add(_elem611)
+          (_etype616, _size613) = iprot.readSetBegin()
+          for _i617 in xrange(_size613):
+            _elem618 = iprot.readI64()
+            self.nosuch.add(_elem618)
           iprot.readSetEnd()
         else:
           iprot.skip(ftype)
@@ -14362,15 +14518,15 @@ class HeartbeatTxnRangeResponse:
     if self.aborted is not None:
       oprot.writeFieldBegin('aborted', TType.SET, 1)
       oprot.writeSetBegin(TType.I64, len(self.aborted))
-      for iter612 in self.aborted:
-        oprot.writeI64(iter612)
+      for iter619 in self.aborted:
+        oprot.writeI64(iter619)
       oprot.writeSetEnd()
       oprot.writeFieldEnd()
     if self.nosuch is not None:
       oprot.writeFieldBegin('nosuch', TType.SET, 2)
       oprot.writeSetBegin(TType.I64, len(self.nosuch))
-      for iter613 in self.nosuch:
-        oprot.writeI64(iter613)
+      for iter620 in self.nosuch:
+        oprot.writeI64(iter620)
       oprot.writeSetEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -14467,11 +14623,11 @@ class CompactionRequest:
       elif fid == 6:
         if ftype == TType.MAP:
           self.properties = {}
-          (_ktype615, _vtype616, _size614 ) = iprot.readMapBegin()
-          for _i618 in xrange(_size614):
-            _key619 = iprot.readString()
-            _val620 = iprot.readString()
-            self.properties[_key619] = _val620
+          (_ktype622, _vtype623, _size621 ) = iprot.readMapBegin()
+          for _i625 in xrange(_size621):
+            _key626 = iprot.readString()
+            _val627 = iprot.readString()
+            self.properties[_key626] = _val627
           iprot.readMapEnd()
         else:
           iprot.skip(ftype)
@@ -14508,9 +14664,9 @@ class CompactionRequest:
     if self.properties is not None:
       oprot.writeFieldBegin('properties', TType.MAP, 6)
       oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.properties))
-      for kiter621,viter622 in self.properties.items():
-        oprot.writeString(kiter621)
-        oprot.writeString(viter622)
+      for kiter628,viter629 in self.properties.items():
+        oprot.writeString(kiter628)
+        oprot.writeString(viter629)
       oprot.writeMapEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -14945,11 +15101,11 @@ class ShowCompactResponse:
       if fid == 1:
         if ftype == TType.LIST:
           self.compacts = []
-          (_etype626, _size623) = iprot.readListBegin()
-          for _i627 in xrange(_size623):
-            _elem628 = ShowCompactResponseElement()
-            _elem628.read(iprot)
-            self.compacts.append(_elem628)
+          (_etype633, _size630) = iprot.readListBegin()
+          for _i634 in xrange(_size630):
+            _elem635 = ShowCompactResponseElement()
+            _elem635.read(iprot)
+            self.compacts.append(_elem635)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -14966,8 +15122,8 @@ class ShowCompactResponse:
     if self.compacts is not None:
       oprot.writeFieldBegin('compacts', TType.LIST, 1)
       oprot.writeListBegin(TType.STRUCT, len(self.compacts))
-      for iter629 in self.compacts:
-        iter629.write(oprot)
+      for iter636 in self.compacts:
+        iter636.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -15056,10 +15212,10 @@ class AddDynamicPartitions:
       elif fid == 5:
         if ftype == TType.LIST:
           self.partitionnames = []
-          (_etype633, _size630) = iprot.readListBegin()
-          for _i634 in xrange(_size630):
-            _elem635 = iprot.readString()
-            self.partitionnames.append(_elem635)
+          (_etype640, _size637) = iprot.readListBegin()
+          for _i641 in xrange(_size637):
+            _elem642 = iprot.readString()
+            self.partitionnames.append(_elem642)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -15097,8 +15253,8 @@ class AddDynamicPartitions:
     if self.partitionnames is not None:
       oprot.writeFieldBegin('partitionnames', TType.LIST, 5)
       oprot.writeListBegin(TType.STRING, len(self.partitionnames))
-      for iter636 in self.partitionnames:
-        oprot.writeString(iter636)
+      for iter643 in self.partitionnames:
+        oprot.writeString(iter643)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.operationType is not None:
@@ -15331,10 +15487,10 @@ class CreationMetadata:
       elif fid == 4:
         if ftype == TType.SET:
           self.tablesUsed = set()
-          (_etype640, _size637) = iprot.readSetBegin()
-          for _i641 in xrange(_size637):
-            _elem642 = iprot.readString()
-            self.tablesUsed.add(_elem642)
+          (_etype647, _size644) = iprot.readSetBegin()
+          for _i648 in xrange(_size644):
+            _elem649 = iprot.readString()
+            self.tablesUsed.add(_elem649)
           iprot.readSetEnd()
         else:
           iprot.skip(ftype)
@@ -15373,8 +15529,8 @@ class CreationMetadata:
     if self.tablesUsed is not None:
       oprot.writeFieldBegin('tablesUsed', TType.SET, 4)
       oprot.writeSetBegin(TType.STRING, len(self.tablesUsed))
-      for iter643 in self.tablesUsed:
-        oprot.writeString(iter643)
+      for iter650 in self.tablesUsed:
+        oprot.writeString(iter650)
       oprot.writeSetEnd()
       oprot.writeFieldEnd()
     if self.validTxnList is not None:
@@ -15691,11 +15847,11 @@ class NotificationEventResponse:
       if fid == 1:
         if ftype == TType.LIST:
           self.events = []
-          (_etype647, _size644) = iprot.readListBegin()
-          for _i648 in xrange(_size644):
-            _elem649 = NotificationEvent()
-            _elem649.read(iprot)
-            self.events.append(_elem649)
+          (_etype654, _size651) = iprot.readListBegin()
+          for _i655 in xrange(_size651):
+            _elem656 = NotificationEvent()
+            _elem656.read(iprot)
+            self.events.append(_elem656)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -15712,8 +15868,8 @@ class NotificationEventResponse:
     if self.events is not None:
       oprot.writeFieldBegin('events', TType.LIST, 1)
       oprot.writeListBegin(TType.STRUCT, len(self.events))
-      for iter650 in self.events:
-        iter650.write(oprot)
+      for iter657 in self.events:
+        iter657.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -16036,30 +16192,30 @@ class InsertEventRequestData:
       elif fid == 2:
         if ftype == TType.LIST:
           self.filesAdded = []
-          (_etype654, _size651) = iprot.readListBegin()
-          for _i655 in xrange(_size651):
-            _elem656 = iprot.readString()
-            self.filesAdded.append(_elem656)
+          (_etype661, _size658) = iprot.readListBegin()
+          for _i662 in xrange(_size658):
+            _elem663 = iprot.readString()
+            self.filesAdded.append(_elem663)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
       elif fid == 3:
         if ftype == TType.LIST:
           self.filesAddedChecksum = []
-          (_etype660, _size657) = iprot.readListBegin()
-          for _i661 in xrange(_size657):
-            _elem662 = iprot.readString()
-            self.filesAddedChecksum.append(_elem662)
+          (_etype667, _size664) = iprot.readListBegin()
+          for _i668 in xrange(_size664):
+            _elem669 = iprot.readString()
+            self.filesAddedChecksum.append(_elem669)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
       elif fid == 4:
         if ftype == TType.LIST:
           self.subDirectoryList = []
-          (_etype666, _size663) = iprot.readListBegin()
-          for _i667 in xrange(_size663):
-            _elem668 = iprot.readString()
-            self.subDirectoryList.append(_elem668)
+          (_etype673, _size670) = iprot.readListBegin()
+          for _i674 in xrange(_size670):
+            _elem675 = iprot.readString()
+            self.subDirectoryList.append(_elem675)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -16080,22 +16236,22 @@ class InsertEventRequestData:
     if self.filesAdded is not None:
       oprot.writeFieldBegin('filesAdded', TType.LIST, 2)
       oprot.writeListBegin(TType.STRING, len(self.filesAdded))
-      for iter669 in self.filesAdded:
-        oprot.writeString(iter669)
+      for iter676 in self.filesAdded:
+        oprot.writeString(iter676)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.filesAddedChecksum is not None:
       oprot.writeFieldBegin('filesAddedChecksum', TType.LIST, 3)
       oprot.writeListBegin(TType.STRING, len(self.filesAddedChecksum))
-      for iter670 in self.filesAddedChecksum:
-        oprot.writeString(iter670)
+      for iter677 in self.filesAddedChecksum:
+        oprot.writeString(iter677)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.subDirectoryList is not None:
       oprot.writeFieldBegin('subDirectoryList', TType.LIST, 4)
       oprot.writeListBegin(TType.STRING, len(self.subDirectoryList))
-      for iter671 in self.subDirectoryList:
-        oprot.writeString(iter671)
+      for iter678 in self.subDirectoryList:
+        oprot.writeString(iter678)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -16254,10 +16410,10 @@ class FireEventRequest:
       elif fid == 5:
         if ftype == TType.LIST:
           self.partitionVals = []
-          (_etype675, _size672) = iprot.readListBegin()
-          for _i676 in xrange(_size672):
-            _elem677 = iprot.readString()
-            self.partitionVals.append(_elem677)
+          (_etype682, _size679) = iprot.readListBegin()
+          for _i683 in xrange(_size679):
+            _elem684 = iprot.readString()
+            self.partitionVals.append(_elem684)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -16295,8 +16451,8 @@ class FireEventRequest:
     if self.partitionVals is not None:
       oprot.writeFieldBegin('partitionVals', TType.LIST, 5)
       oprot.writeListBegin(TType.STRING, len(self.partitionVals))
-      for iter678 in self.partitionVals:
-        oprot.writeString(iter678)
+      for iter685 in self.partitionVals:
+        oprot.writeString(iter685)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.catName is not None:
@@ -16448,10 +16604,10 @@ class WriteNotificationLogRequest:
       elif fid == 6:
         if ftype == TType.LIST:
           self.partitionVals = []
-          (_etype682, _size679) = iprot.readListBegin()
-          for _i683 in xrange(_size679):
-            _elem684 = iprot.readString()
-            self.partitionVals.append(_elem684)
+          (_etype689, _size686) = iprot.readListBegin()
+          for _i690 in xrange(_size686):
+            _elem691 = iprot.readString()
+            self.partitionVals.append(_elem691)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -16488,8 +16644,8 @@ class WriteNotificationLogRequest:
     if self.partitionVals is not None:
       oprot.writeFieldBegin('partitionVals', TType.LIST, 6)
       oprot.writeListBegin(TType.STRING, len(self.partitionVals))
-      for iter685 in self.partitionVals:
-        oprot.writeString(iter685)
+      for iter692 in self.partitionVals:
+        oprot.writeString(iter692)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -16683,12 +16839,12 @@ class GetFileMetadataByExprResult:
       if fid == 1:
         if ftype == TType.MAP:
           self.metadata = {}
-          (_ktype687, _vtype688, _size686 ) = iprot.readMapBegin()
-          for _i690 in xrange(_size686):
-            _key691 = iprot.readI64()
-            _val692 = MetadataPpdResult()
-            _val692.read(iprot)
-            self.metadata[_key691] = _val692
+          (_ktype694, _vtype695, _size693 ) = iprot.readMapBegin()
+          for _i697 in xrange(_size693):
+            _key698 = iprot.readI64()
+            _val699 = MetadataPpdResult()
+            _val699.read(iprot)
+            self.metadata[_key698] = _val699
           iprot.readMapEnd()
         else:
           iprot.skip(ftype)
@@ -16710,9 +16866,9 @@ class GetFileMetadataByExprResult:
     if self.metadata is not None:
       oprot.writeFieldBegin('metadata', TType.MAP, 1)
       oprot.writeMapBegin(TType.I64, TType.STRUCT, len(self.metadata))
-      for kiter693,viter694 in self.metadata.items():
-        oprot.writeI64(kiter693)
-        viter694.write(oprot)
+      for kiter700,viter701 in self.metadata.items():
+        oprot.writeI64(kiter700)
+        viter701.write(oprot)
       oprot.writeMapEnd()
       oprot.writeFieldEnd()
     if self.isSupported is not None:
@@ -16782,10 +16938,10 @@ class GetFileMetadataByExprRequest:
       if fid == 1:
         if ftype == TType.LIST:
           self.fileIds = []
-          (_etype698, _size695) = iprot.readListBegin()
-          for _i699 in xrange(_size695):
-            _elem700 = iprot.readI64()
-            self.fileIds.append(_elem700)
+          (_etype705, _size702) = iprot.readListBegin()
+          for _i706 in xrange(_size702):
+            _elem707 = iprot.readI64()
+            self.fileIds.append(_elem707)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -16817,8 +16973,8 @@ class GetFileMetadataByExprRequest:
     if self.fileIds is not None:
       oprot.writeFieldBegin('fileIds', TType.LIST, 1)
       oprot.writeListBegin(TType.I64, len(self.fileIds))
-      for iter701 in self.fileIds:
-        oprot.writeI64(iter701)
+      for iter708 in self.fileIds:
+        oprot.writeI64(iter708)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.expr is not None:
@@ -16892,11 +17048,11 @@ class GetFileMetadataResult:
       if fid == 1:
         if ftype == TType.MAP:
           self.metadata = {}
-          (_ktype703, _vtype704, _size702 ) = iprot.readMapBegin()
-          for _i706 in xrange(_size702):
-            _key707 = iprot.readI64()
-            _val708 = iprot.readString()
-            self.metadata[_key707] = _val708
+          (_ktype710, _vtype711, _size709 ) = iprot.readMapBegin()
+          for _i713 in xrange(_size709):
+            _key714 = iprot.readI64()
+            _val715 = iprot.readString()
+            self.metadata[_key714] = _val715
           iprot.readMapEnd()
         else:
           iprot.skip(ftype)
@@ -16918,9 +17074,9 @@ class GetFileMetadataResult:
     if self.metadata is not None:
       oprot.writeFieldBegin('metadata', TType.MAP, 1)
       oprot.writeMapBegin(TType.I64, TType.STRING, len(self.metadata))
-      for kiter709,viter710 in self.metadata.items():
-        oprot.writeI64(kiter709)
-        oprot.writeString(viter710)
+      for kiter716,viter717 in self.metadata.items():
+        oprot.writeI64(kiter716)
+        oprot.writeString(viter717)
       oprot.writeMapEnd()
       oprot.writeFieldEnd()
     if self.isSupported is not None:
@@ -16981,10 +17137,10 @@ class GetFileMetadataRequest:
       if fid == 1:
         if ftype == TType.LIST:
           self.fileIds = []
-          (_etype714, _size711) = iprot.readListBegin()
-          for _i715 in xrange(_size711):
-            _elem716 = iprot.readI64()
-            self.fileIds.append(_elem716)
+          (_etype721, _size718) = iprot.readListBegin()
+          for _i722 in xrange(_size718):
+            _elem723 = iprot.readI64()
+            self.fileIds.append(_elem723)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -17001,8 +17157,8 @@ class GetFileMetadataRequest:
     if self.fileIds is not None:
       oprot.writeFieldBegin('fileIds', TType.LIST, 1)
       oprot.writeListBegin(TType.I64, len(self.fileIds))
-      for iter717 in self.fileIds:
-        oprot.writeI64(iter717)
+      for iter724 in self.fileIds:
+        oprot.writeI64(iter724)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -17108,20 +17264,20 @@ class PutFileMetadataRequest:
       if fid == 1:
         if ftype == TType.LIST:
           self.fileIds = []
-          (_etype721, _size718) = iprot.readListBegin()
-          for _i722 in xrange(_size718):
-            _elem723 = iprot.readI64()
-            self.fileIds.append(_elem723)
+          (_etype728, _size725) = iprot.readListBegin()
+          for _i729 in xrange(_size725):
+            _elem730 = iprot.readI64()
+            self.fileIds.append(_elem730)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
       elif fid == 2:
         if ftype == TType.LIST:
           self.metadata = []
-          (_etype727, _size724) = iprot.readListBegin()
-          for _i728 in xrange(_size724):
-            _elem729 = iprot.readString()
-            self.metadata.append(_elem729)
+          (_etype734, _size731) = iprot.readListBegin()
+          for _i735 in xrange(_size731):
+            _elem736 = iprot.readString()
+            self.metadata.append(_elem736)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -17143,15 +17299,15 @@ class PutFileMetadataRequest:
     if self.fileIds is not None:
       oprot.writeFieldBegin('fileIds', TType.LIST, 1)
       oprot.writeListBegin(TType.I64, len(self.fileIds))
-      for iter730 in self.fileIds:
-        oprot.writeI64(iter730)
+      for iter737 in self.fileIds:
+        oprot.writeI64(iter737)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.metadata is not None:
       oprot.writeFieldBegin('metadata', TType.LIST, 2)
       oprot.writeListBegin(TType.STRING, len(self.metadata))
-      for iter731 in self.metadata:
-        oprot.writeString(iter731)
+      for iter738 in self.metadata:
+        oprot.writeString(iter738)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.type is not None:
@@ -17259,10 +17415,10 @@ class ClearFileMetadataRequest:
       if fid == 1:
         if ftype == TType.LIST:
           self.fileIds = []
-          (_etype735, _size732) = iprot.readListBegin()
-          for _i736 in xrange(_size732):
-            _elem737 = iprot.readI64()
-            self.fileIds.append(_elem737)
+          (_etype742, _size739) = iprot.readListBegin()
+          for _i743 in xrange(_size739):
+            _elem744 = iprot.readI64()
+            self.fileIds.append(_elem744)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -17279,8 +17435,8 @@ class ClearFileMetadataRequest:
     if self.fileIds is not None:
       oprot.writeFieldBegin('fileIds', TType.LIST, 1)
       oprot.writeListBegin(TType.I64, len(self.fileIds))
-      for iter738 in self.fileIds:
-        oprot.writeI64(iter738)
+      for iter745 in self.fileIds:
+        oprot.writeI64(iter745)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -17509,11 +17665,11 @@ class GetAllFunctionsResponse:
       if fid == 1:
         if ftype == TType.LIST:
           self.functions = []
-          (_etype742, _size739) = iprot.readListBegin()
-          for _i743 in xrange(_size739):
-            _elem744 = Function()
-            _elem744.read(iprot)
-            self.functions.append(_elem744)
+          (_etype749, _size746) = iprot.readListBegin()
+          for _i750 in xrange(_size746):
+            _elem751 = Function()
+            _elem751.read(iprot)
+            self.functions.append(_elem751)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -17530,8 +17686,8 @@ class GetAllFunctionsResponse:
     if self.functions is not None:
       oprot.writeFieldBegin('functions', TType.LIST, 1)
       oprot.writeListBegin(TType.STRUCT, len(self.functions))
-      for iter745 in self.functions:
-        iter745.write(oprot)
+      for iter752 in self.functions:
+        iter752.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -17583,10 +17739,10 @@ class ClientCapabilities:
       if fid == 1:
         if ftype == TType.LIST:
           self.values = []
-          (_etype749, _size746) = iprot.readListBegin()
-          for _i750 in xrange(_size746):
-            _elem751 = iprot.readI32()
-            self.values.append(_elem751)
+          (_etype756, _size753) = iprot.readListBegin()
+          for _i757 in xrange(_size753):
+            _elem758 = iprot.readI32()
+            self.values.append(_elem758)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -17603,8 +17759,8 @@ class ClientCapabilities:
     if self.values is not None:
       oprot.writeFieldBegin('values', TType.LIST, 1)
       oprot.writeListBegin(TType.I32, len(self.values))
-      for iter752 in self.values:
-        oprot.writeI32(iter752)
+      for iter759 in self.values:
+        oprot.writeI32(iter759)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -17876,10 +18032,10 @@ class GetTablesRequest:
       elif fid == 2:
         if ftype == TType.LIST:
           self.tblNames = []
-          (_etype756, _size753) = iprot.readListBegin()
-          for _i757 in xrange(_size753):
-            _elem758 = iprot.readString()
-            self.tblNames.append(_elem758)
+          (_etype763, _size760) = iprot.readListBegin()
+          for _i764 in xrange(_size760):
+            _elem765 = iprot.readString()
+            self.tblNames.append(_elem765)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -17911,8 +18067,8 @@ class GetTablesRequest:
     if self.tblNames is not None:
       oprot.writeFieldBegin('tblNames', TType.LIST, 2)
       oprot.writeListBegin(TType.STRING, len(self.tblNames))
-      for iter759 in self.tblNames:
-        oprot.writeString(iter759)
+      for iter766 in self.tblNames:
+        oprot.writeString(iter766)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.capabilities is not None:
@@ -17977,11 +18133,11 @@ class GetTablesResult:
       if fid == 1:
         if ftype == TType.LIST:
           self.tables = []
-          (_etype763, _size760) = iprot.readListBegin()
-          for _i764 in xrange(_size760):
-            _elem765 = Table()
-            _elem765.read(iprot)
-            self.tables.append(_elem765)
+          (_etype770, _size767) = iprot.readListBegin()
+          for _i771 in xrange(_size767):
+            _elem772 = Table()
+            _elem772.read(iprot)
+            self.tables.append(_elem772)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -17998,8 +18154,8 @@ class GetTablesResult:
     if self.tables is not None:
       oprot.writeFieldBegin('tables', TType.LIST, 1)
       oprot.writeListBegin(TType.STRUCT, len(self.tables))
-      for iter766 in self.tables:
-        iter766.write(oprot)
+      for iter773 in self.tables:
+        iter773.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -19298,44 +19454,44 @@ class WMFullResourcePlan:
       elif fid == 2:
         if ftype == TType.LIST:
           self.pools = []
-          (_etype770, _size767) = iprot.readListBegin()
-          for _i771 in xrange(_size767):
-            _elem772 = WMPool()
-            _elem772.read(iprot)
-            self.pools.append(_elem772)
+          (_etype777, _size774) = iprot.readListBegin()
+          for _i778 in xrange(_size774):
+            _elem779 = WMPool()
+            _elem779.read(iprot)
+            self.pools.append(_elem779)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
       elif fid == 3:
         if ftype == TType.LIST:
           self.mappings = []
-          (_etype776, _size773) = iprot.readListBegin()
-          for _i777 in xrange(_size773):
-            _elem778 = WMMapping()
-            _elem778.read(iprot)
-            self.mappings.append(_elem778)
+          (_etype783, _size780) = iprot.readListBegin()
+          for _i784 in xrange(_size780):
+            _elem785 = WMMapping()
+            _elem785.read(iprot)
+            self.mappings.append(_elem785)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
       elif fid == 4:
         if ftype == TType.LIST:
           self.triggers = []
-          (_etype782, _size779) = iprot.readListBegin()
-          for _i783 in xrange(_size779):
-            _elem784 = WMTrigger()
-            _elem784.read(iprot)
-            self.triggers.append(_elem784)
+          (_etype789, _size786) = iprot.readListBegin()
+          for _i790 in xrange(_size786):
+            _elem791 = WMTrigger()
+            _elem791.read(iprot)
+            self.triggers.append(_elem791)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
       elif fid == 5:
         if ftype == TType.LIST:
           self.poolTriggers = []
-          (_etype788, _size785) = iprot.readListBegin()
-          for _i789 in xrange(_size785):
-            _elem790 = WMPoolTrigger()
-            _elem790.read(iprot)
-            self.poolTriggers.append(_elem790)
+          (_etype795, _size792) = iprot.readListBegin()
+          for _i796 in xrange(_size792):
+            _elem797 = WMPoolTrigger()
+            _elem797.read(iprot)
+            self.poolTriggers.append(_elem797)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -19356,29 +19512,29 @@ class WMFullResourcePlan:
     if self.pools is not None:
       oprot.writeFieldBegin('pools', TType.LIST, 2)
       oprot.writeListBegin(TType.STRUCT, len(self.pools))
-      for iter791 in self.pools:
-        iter791.write(oprot)
+      for iter798 in self.pools:
+        iter798.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.mappings is not None:
       oprot.writeFieldBegin('mappings', TType.LIST, 3)
       oprot.writeListBegin(TType.STRUCT, len(self.mappings))
-      for iter792 in self.mappings:
-        iter792.write(oprot)
+      for iter799 in self.mappings:
+        iter799.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.triggers is not None:
       oprot.writeFieldBegin('triggers', TType.LIST, 4)
       oprot.writeListBegin(TType.STRUCT, len(self.triggers))
-      for iter793 in self.triggers:
-        iter793.write(oprot)
+      for iter800 in self.triggers:
+        iter800.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.poolTriggers is not None:
       oprot.writeFieldBegin('poolTriggers', TType.LIST, 5)
       oprot.writeListBegin(TType.STRUCT, len(self.poolTriggers))
-      for iter794 in self.poolTriggers:
-        iter794.write(oprot)
+      for iter801 in self.poolTriggers:
+        iter801.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -19903,11 +20059,11 @@ class WMGetAllResourcePlanResponse:
       if fid == 1:
         if ftype == TType.LIST:
           self.resourcePlans = []
-          (_etype798, _size795) = iprot.readListBegin()
-          for _i799 in xrange(_size795):
-            _elem800 = WMResourcePlan()
-            _elem800.read(iprot)
-            self.resourcePlans.append(_elem800)
+          (_etype805, _size802) = iprot.readListBegin()
+          for _i806 in xrange(_size802):
+            _elem807 = WMResourcePlan()
+            _elem807.read(iprot)
+            self.resourcePlans.append(_elem807)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -19924,8 +20080,8 @@ class WMGetAllResourcePlanResponse:
     if self.resourcePlans is not None:
       oprot.writeFieldBegin('resourcePlans', TType.LIST, 1)
       oprot.writeListBegin(TType.STRUCT, len(self.resourcePlans))
-      for iter801 in self.resourcePlans:
-        iter801.write(oprot)
+      for iter808 in self.resourcePlans:
+        iter808.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -20255,20 +20411,20 @@ class WMValidateResourcePlanResponse:
       if fid == 1:
         if ftype == TType.LIST:
           self.errors = []
-          (_etype805, _size802) = iprot.readListBegin()
-          for _i806 in xrange(_size802):
-            _elem807 = iprot.readString()
-            self.errors.append(_elem807)
+          (_etype812, _size809) = iprot.readListBegin()
+          for _i813 in xrange(_size809):
+            _elem814 = iprot.readString()
+            self.errors.append(_elem814)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
       elif fid == 2:
         if ftype == TType.LIST:
           self.warnings = []
-          (_etype811, _size808) = iprot.readListBegin()
-          for _i812 in xrange(_size808):
-            _elem813 = iprot.readString()
-            self.warnings.append(_elem813)
+          (_etype818, _size815) = iprot.readListBegin()
+          for _i819 in xrange(_size815):
+            _elem820 = iprot.readString()
+            self.warnings.append(_elem820)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -20285,15 +20441,15 @@ class WMValidateResourcePlanResponse:
     if self.errors is not None:
       oprot.writeFieldBegin('errors', TType.LIST, 1)
       oprot.writeListBegin(TType.STRING, len(self.errors))
-      for iter814 in self.errors:
-        oprot.writeString(iter814)
+      for iter821 in self.errors:
+        oprot.writeString(iter821)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.warnings is not None:
       oprot.writeFieldBegin('warnings', TType.LIST, 2)
       oprot.writeListBegin(TType.STRING, len(self.warnings))
-      for iter815 in self.warnings:
-        oprot.writeString(iter815)
+      for iter822 in self.warnings:
+        oprot.writeString(iter822)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -20909,11 +21065,11 @@ class WMGetTriggersForResourePlanResponse:
       if fid == 1:
         if ftype == TType.LIST:
           self.triggers = []
-          (_etype819, _size816) = iprot.readListBegin()
-          for _i820 in xrange(_size816):
-            _elem821 = WMTrigger()
-            _elem821.read(iprot)
-            self.triggers.append(_elem821)
+          (_etype826, _size823) = iprot.readListBegin()
+          for _i827 in xrange(_size823):
+            _elem828 = WMTrigger()
+            _elem828.read(iprot)
+            self.triggers.append(_elem828)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -20930,8 +21086,8 @@ class WMGetTriggersForResourePlanResponse:
     if self.triggers is not None:
       oprot.writeFieldBegin('triggers', TType.LIST, 1)
       oprot.writeListBegin(TType.STRUCT, len(self.triggers))
-      for iter822 in self.triggers:
-        iter822.write(oprot)
+      for iter829 in self.triggers:
+        iter829.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -22141,11 +22297,11 @@ class SchemaVersion:
       elif fid == 4:
         if ftype == TType.LIST:
           self.cols = []
-          (_etype826, _size823) = iprot.readListBegin()
-          for _i827 in xrange(_size823):
-            _elem828 = FieldSchema()
-            _elem828.read(iprot)
-            self.cols.append(_elem828)
+          (_etype833, _size830) = iprot.readListBegin()
+          for _i834 in xrange(_size830):
+            _elem835 = FieldSchema()
+            _elem835.read(iprot)
+            self.cols.append(_elem835)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -22205,8 +22361,8 @@ class SchemaVersion:
     if self.cols is not None:
       oprot.writeFieldBegin('cols', TType.LIST, 4)
       oprot.writeListBegin(TType.STRUCT, len(self.cols))
-      for iter829 in self.cols:
-        iter829.write(oprot)
+      for iter836 in self.cols:
+        iter836.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.state is not None:
@@ -22461,11 +22617,11 @@ class FindSchemasByColsResp:
       if fid == 1:
         if ftype == TType.LIST:
           self.schemaVersions = []
-          (_etype833, _size830) = iprot.readListBegin()
-          for _i834 in xrange(_size830):
-            _elem835 = SchemaVersionDescriptor()
-            _elem835.read(iprot)
-            self.schemaVersions.append(_elem835)
+          (_etype840, _size837) = iprot.readListBegin()
+          for _i841 in xrange(_size837):
+            _elem842 = SchemaVersionDescriptor()
+            _elem842.read(iprot)
+            self.schemaVersions.append(_elem842)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -22482,8 +22638,8 @@ class FindSchemasByColsResp:
     if self.schemaVersions is not None:
       oprot.writeFieldBegin('schemaVersions', TType.LIST, 1)
       oprot.writeListBegin(TType.STRUCT, len(self.schemaVersions))
-      for iter836 in self.schemaVersions:
-        iter836.write(oprot)
+      for iter843 in self.schemaVersions:
+        iter843.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -22968,11 +23124,11 @@ class AlterPartitionsRequest:
       elif fid == 4:
         if ftype == TType.LIST:
           self.partitions = []
-          (_etype840, _size837) = iprot.readListBegin()
-          for _i841 in xrange(_size837):
-            _elem842 = Partition()
-            _elem842.read(iprot)
-            self.partitions.append(_elem842)
+          (_etype847, _size844) = iprot.readListBegin()
+          for _i848 in xrange(_size844):
+            _elem849 = Partition()
+            _elem849.read(iprot)
+            self.partitions.append(_elem849)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -23017,8 +23173,8 @@ class AlterPartitionsRequest:
     if self.partitions is not None:
       oprot.writeFieldBegin('partitions', TType.LIST, 4)
       oprot.writeListBegin(TType.STRUCT, len(self.partitions))
-      for iter843 in self.partitions:
-        iter843.write(oprot)
+      for iter850 in self.partitions:
+        iter850.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.environmentContext is not None:
@@ -23170,10 +23326,10 @@ class RenamePartitionRequest:
       elif fid == 4:
         if ftype == TType.LIST:
           self.partVals = []
-          (_etype847, _size844) = iprot.readListBegin()
-          for _i848 in xrange(_size844):
-            _elem849 = iprot.readString()
-            self.partVals.append(_elem849)
+          (_etype854, _size851) = iprot.readListBegin()
+          for _i855 in xrange(_size851):
+            _elem856 = iprot.readString()
+            self.partVals.append(_elem856)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -23213,8 +23369,8 @@ class RenamePartitionRequest:
     if self.partVals is not None:
       oprot.writeFieldBegin('partVals', TType.LIST, 4)
       oprot.writeListBegin(TType.STRING, len(self.partVals))
-      for iter850 in self.partVals:
-        oprot.writeString(iter850)
+      for iter857 in self.partVals:
+        oprot.writeString(iter857)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.newPart is not None:
@@ -23536,10 +23692,10 @@ class GetPartitionsProjectionSpec:
       if fid == 1:
         if ftype == TType.LIST:
           self.fieldList = []
-          (_etype854, _size851) = iprot.readListBegin()
-          for _i855 in xrange(_size851):
-            _elem856 = iprot.readString()
-            self.fieldList.append(_elem856)
+          (_etype861, _size858) = iprot.readListBegin()
+          for _i862 in xrange(_size858):
+            _elem863 = iprot.readString()
+            self.fieldList.append(_elem863)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -23566,8 +23722,8 @@ class GetPartitionsProjectionSpec:
     if self.fieldList is not None:
       oprot.writeFieldBegin('fieldList', TType.LIST, 1)
       oprot.writeListBegin(TType.STRING, len(self.fieldList))
-      for iter857 in self.fieldList:
-        oprot.writeString(iter857)
+      for iter864 in self.fieldList:
+        oprot.writeString(iter864)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.includeParamKeyPattern is not None:
@@ -23643,10 +23799,10 @@ class GetPartitionsFilterSpec:
       elif fid == 8:
         if ftype == TType.LIST:
           self.filters = []
-          (_etype861, _size858) = iprot.readListBegin()
-          for _i862 in xrange(_size858):
-            _elem863 = iprot.readString()
-            self.filters.append(_elem863)
+          (_etype868, _size865) = iprot.readListBegin()
+          for _i869 in xrange(_size865):
+            _elem870 = iprot.readString()
+            self.filters.append(_elem870)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -23667,8 +23823,8 @@ class GetPartitionsFilterSpec:
     if self.filters is not None:
       oprot.writeFieldBegin('filters', TType.LIST, 8)
       oprot.writeListBegin(TType.STRING, len(self.filters))
-      for iter864 in self.filters:
-        oprot.writeString(iter864)
+      for iter871 in self.filters:
+        oprot.writeString(iter871)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -23721,11 +23877,11 @@ class GetPartitionsResponse:
       if fid == 1:
         if ftype == TType.LIST:
           self.partitionSpec = []
-          (_etype868, _size865) = iprot.readListBegin()
-          for _i869 in xrange(_size865):
-            _elem870 = PartitionSpec()
-            _elem870.read(iprot)
-            self.partitionSpec.append(_elem870)
+          (_etype875, _size872) = iprot.readListBegin()
+          for _i876 in xrange(_size872):
+            _elem877 = PartitionSpec()
+            _elem877.read(iprot)
+            self.partitionSpec.append(_elem877)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -23742,8 +23898,8 @@ class GetPartitionsResponse:
     if self.partitionSpec is not None:
       oprot.writeFieldBegin('partitionSpec', TType.LIST, 1)
       oprot.writeListBegin(TType.STRUCT, len(self.partitionSpec))
-      for iter871 in self.partitionSpec:
-        iter871.write(oprot)
+      for iter878 in self.partitionSpec:
+        iter878.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -23841,10 +23997,10 @@ class GetPartitionsRequest:
       elif fid == 6:
         if ftype == TType.LIST:
           self.groupNames = []
-          (_etype875, _size872) = iprot.readListBegin()
-          for _i876 in xrange(_size872):
-            _elem877 = iprot.readString()
-            self.groupNames.append(_elem877)
+          (_etype882, _size879) = iprot.readListBegin()
+          for _i883 in xrange(_size879):
+            _elem884 = iprot.readString()
+            self.groupNames.append(_elem884)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -23893,8 +24049,8 @@ class GetPartitionsRequest:
     if self.groupNames is not None:
       oprot.writeFieldBegin('groupNames', TType.LIST, 6)
       oprot.writeListBegin(TType.STRING, len(self.groupNames))
-      for iter878 in self.groupNames:
-        oprot.writeString(iter878)
+      for iter885 in self.groupNames:
+        oprot.writeString(iter885)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.projectionSpec is not None:

http://git-wip-us.apache.org/repos/asf/hive/blob/10cfba20/standalone-metastore/metastore-common/src/gen/thrift/gen-rb/hive_metastore_types.rb
----------------------------------------------------------------------
diff --git 
a/standalone-metastore/metastore-common/src/gen/thrift/gen-rb/hive_metastore_types.rb
 
b/standalone-metastore/metastore-common/src/gen/thrift/gen-rb/hive_metastore_types.rb
index 46973bf..97dc069 100644
--- 
a/standalone-metastore/metastore-common/src/gen/thrift/gen-rb/hive_metastore_types.rb
+++ 
b/standalone-metastore/metastore-common/src/gen/thrift/gen-rb/hive_metastore_types.rb
@@ -2707,12 +2707,14 @@ class CommitTxnRequest
   REPLPOLICY = 2
   WRITEEVENTINFOS = 3
   KEYVALUE = 4
+  REPLLASTIDINFO = 5
 
   FIELDS = {
     TXNID => {:type => ::Thrift::Types::I64, :name => 'txnid'},
     REPLPOLICY => {:type => ::Thrift::Types::STRING, :name => 'replPolicy', 
:optional => true},
     WRITEEVENTINFOS => {:type => ::Thrift::Types::LIST, :name => 
'writeEventInfos', :element => {:type => ::Thrift::Types::STRUCT, :class => 
::WriteEventInfo}, :optional => true},
-    KEYVALUE => {:type => ::Thrift::Types::STRUCT, :name => 'keyValue', :class 
=> ::CommitTxnKeyValue, :optional => true}
+    KEYVALUE => {:type => ::Thrift::Types::STRUCT, :name => 'keyValue', :class 
=> ::CommitTxnKeyValue, :optional => true},
+    REPLLASTIDINFO => {:type => ::Thrift::Types::STRUCT, :name => 
'replLastIdInfo', :class => ::ReplLastIdInfo, :optional => true}
   }
 
   def struct_fields; FIELDS; end
@@ -2724,6 +2726,34 @@ class CommitTxnRequest
   ::Thrift::Struct.generate_accessors self
 end
 
+class ReplLastIdInfo
+  include ::Thrift::Struct, ::Thrift::Struct_Union
+  DATABASE = 1
+  LASTREPLID = 2
+  TABLE = 3
+  CATALOG = 4
+  PARTITIONLIST = 5
+  NEEDUPDATEDBREPLID = 6
+
+  FIELDS = {
+    DATABASE => {:type => ::Thrift::Types::STRING, :name => 'database'},
+    LASTREPLID => {:type => ::Thrift::Types::I64, :name => 'lastReplId'},
+    TABLE => {:type => ::Thrift::Types::STRING, :name => 'table', :optional => 
true},
+    CATALOG => {:type => ::Thrift::Types::STRING, :name => 'catalog', 
:optional => true},
+    PARTITIONLIST => {:type => ::Thrift::Types::LIST, :name => 
'partitionList', :element => {:type => ::Thrift::Types::STRING}, :optional => 
true},
+    NEEDUPDATEDBREPLID => {:type => ::Thrift::Types::BOOL, :name => 
'needUpdateDBReplId', :optional => true}
+  }
+
+  def struct_fields; FIELDS; end
+
+  def validate
+    raise 
::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required 
field database is unset!') unless @database
+    raise 
::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required 
field lastReplId is unset!') unless @lastReplId
+  end
+
+  ::Thrift::Struct.generate_accessors self
+end
+
 class WriteEventInfo
   include ::Thrift::Struct, ::Thrift::Struct_Union
   WRITEID = 1

http://git-wip-us.apache.org/repos/asf/hive/blob/10cfba20/standalone-metastore/metastore-common/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
----------------------------------------------------------------------
diff --git 
a/standalone-metastore/metastore-common/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
 
b/standalone-metastore/metastore-common/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
index 1ff749e..9eb1193 100644
--- 
a/standalone-metastore/metastore-common/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
+++ 
b/standalone-metastore/metastore-common/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
@@ -2802,7 +2802,7 @@ public class HiveMetaStoreClient implements 
IMetaStoreClient, AutoCloseable {
   public List<Long> replOpenTxn(String replPolicy, List<Long> srcTxnIds, 
String user) throws TException {
     // As this is called from replication task, the user is the user who has 
fired the repl command.
     // This is required for standalone metastore authentication.
-    OpenTxnsResponse txns = openTxnsIntr(user, srcTxnIds.size(), replPolicy, 
srcTxnIds);
+    OpenTxnsResponse txns = openTxnsIntr(user, srcTxnIds != null ? 
srcTxnIds.size() : 1, replPolicy, srcTxnIds);
     return txns.getTxn_ids();
   }
 

http://git-wip-us.apache.org/repos/asf/hive/blob/10cfba20/standalone-metastore/metastore-common/src/main/thrift/hive_metastore.thrift
----------------------------------------------------------------------
diff --git 
a/standalone-metastore/metastore-common/src/main/thrift/hive_metastore.thrift 
b/standalone-metastore/metastore-common/src/main/thrift/hive_metastore.thrift
index 1676b4c..cb899d7 100644
--- 
a/standalone-metastore/metastore-common/src/main/thrift/hive_metastore.thrift
+++ 
b/standalone-metastore/metastore-common/src/main/thrift/hive_metastore.thrift
@@ -912,6 +912,18 @@ struct CommitTxnRequest {
 
     // An optional key/value to store atomically with the transaction
     4: optional CommitTxnKeyValue keyValue,
+
+    // Information to update the last repl id of table/partition along with 
commit txn (replication from 2.6 to 3.0)
+    5: optional ReplLastIdInfo replLastIdInfo,
+}
+
+struct ReplLastIdInfo {
+    1: required string database,
+    2: required i64    lastReplId,
+    3: optional string table,
+    4: optional string catalog,
+    5: optional list<string> partitionList,
+    6: optional bool needUpdateDBReplId,
 }
 
 struct WriteEventInfo {

http://git-wip-us.apache.org/repos/asf/hive/blob/10cfba20/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONAlterPartitionMessage.java
----------------------------------------------------------------------
diff --git 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONAlterPartitionMessage.java
 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONAlterPartitionMessage.java
index a38c1aa..414402f 100644
--- 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONAlterPartitionMessage.java
+++ 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONAlterPartitionMessage.java
@@ -146,7 +146,7 @@ public class JSONAlterPartitionMessage extends 
AlterPartitionMessage {
 
   @Override
   public Long getWriteId() {
-    return writeId;
+    return writeId == null ? 0 : writeId;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/hive/blob/10cfba20/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONAlterTableMessage.java
----------------------------------------------------------------------
diff --git 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONAlterTableMessage.java
 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONAlterTableMessage.java
index d6ec826..8c621b2 100644
--- 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONAlterTableMessage.java
+++ 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONAlterTableMessage.java
@@ -121,7 +121,7 @@ public class JSONAlterTableMessage extends 
AlterTableMessage {
 
   @Override
   public Long getWriteId() {
-    return writeId ;
+    return writeId == null ? 0 : writeId;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/hive/blob/10cfba20/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java
----------------------------------------------------------------------
diff --git 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java
 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java
index 25d79ad..3928d69 100644
--- 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java
+++ 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java
@@ -83,10 +83,13 @@ import 
org.apache.hadoop.hive.metastore.metrics.MetricsConstants;
 import org.apache.hadoop.hive.metastore.tools.SQLGenerator;
 import org.apache.hadoop.hive.metastore.utils.JavaUtils;
 import org.apache.hadoop.hive.metastore.utils.MetaStoreServerUtils;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.utils.StringableMap;
 import org.apache.hadoop.util.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import static org.apache.hadoop.hive.metastore.DatabaseProduct.MYSQL;
+import static 
org.apache.hadoop.hive.metastore.utils.StringUtils.normalizeIdentifier;
 
 import com.google.common.annotations.VisibleForTesting;
 
@@ -864,6 +867,168 @@ abstract class TxnHandler implements TxnStore, 
TxnStore.MutexAPI {
     }
   }
 
+  private void updateReplId(Connection dbConn, ReplLastIdInfo replLastIdInfo) 
throws SQLException, MetaException {
+    PreparedStatement pst = null;
+    PreparedStatement pstInt = null;
+    ResultSet rs = null;
+    ResultSet prs = null;
+    Statement stmt = null;
+    String lastReplId = Long.toString(replLastIdInfo.getLastReplId());
+    String catalog = replLastIdInfo.isSetCatalog() ? 
normalizeIdentifier(replLastIdInfo.getCatalog()) :
+            MetaStoreUtils.getDefaultCatalog(conf);
+    String db = normalizeIdentifier(replLastIdInfo.getDatabase());
+    String table = replLastIdInfo.isSetTable() ? 
normalizeIdentifier(replLastIdInfo.getTable()) : null;
+    List<String> partList = replLastIdInfo.isSetPartitionList() ? 
replLastIdInfo.getPartitionList() : null;
+    boolean needUpdateDBReplId = replLastIdInfo.isSetNeedUpdateDBReplId() && 
replLastIdInfo.isNeedUpdateDBReplId();
+
+    try {
+      stmt = dbConn.createStatement();
+
+      if (sqlGenerator.getDbProduct() == MYSQL) {
+        stmt.execute("SET @@session.sql_mode=ANSI_QUOTES");
+      }
+
+      String query = "select \"DB_ID\" from \"DBS\" where \"NAME\" = ?  and 
\"CTLG_NAME\" = ?";
+      List<String> params = Arrays.asList(db, catalog);
+      pst = sqlGenerator.prepareStmtWithParameters(dbConn, query, params);
+      LOG.debug("Going to execute query <" + query.replaceAll("\\?", "{}") + 
">",
+              quoteString(db), quoteString(catalog));
+      rs = pst.executeQuery();
+      if (!rs.next()) {
+        throw new MetaException("DB with name " + db + " does not exist in 
catalog " + catalog);
+      }
+      long dbId = rs.getLong(1);
+      rs.close();
+      pst.close();
+
+      if (needUpdateDBReplId) {
+        // not used select for update as it will be updated by single thread 
only from repl load
+        rs = stmt.executeQuery("select PARAM_VALUE from DATABASE_PARAMS where 
PARAM_KEY = " +
+                "'repl.last.id' and DB_ID = " + dbId);
+        if (!rs.next()) {
+          query = "insert into DATABASE_PARAMS values ( " + dbId + " , 
'repl.last.id' , ? )";
+        } else {
+          query = "update DATABASE_PARAMS set PARAM_VALUE = ? where DB_ID = " 
+ dbId +
+                  " and PARAM_KEY = 'repl.last.id'";
+        }
+        close(rs);
+        params = Arrays.asList(lastReplId);
+        pst = sqlGenerator.prepareStmtWithParameters(dbConn, query, params);
+        LOG.debug("Updating repl id for db <" + query.replaceAll("\\?", "{}") 
+ ">", lastReplId);
+        if (pst.executeUpdate() != 1) {
+          //only one row insert or update should happen
+          throw new RuntimeException("DATABASE_PARAMS is corrupted for db " + 
db);
+        }
+        pst.close();
+      }
+
+      if (table == null) {
+        // if only database last repl id to be updated.
+        return;
+      }
+
+      query = "select \"TBL_ID\" from \"TBLS\" where \"TBL_NAME\" = ? and 
\"DB_ID\" = " + dbId;
+      params = Arrays.asList(table);
+      pst = sqlGenerator.prepareStmtWithParameters(dbConn, query, params);
+      LOG.debug("Going to execute query <" + query.replaceAll("\\?", "{}") + 
">", quoteString(table));
+
+      rs = pst.executeQuery();
+      if (!rs.next()) {
+        throw new MetaException("Table with name " + table + " does not exist 
in db " + catalog + "." + db);
+      }
+      long tblId = rs.getLong(1);
+      rs.close();
+      pst.close();
+
+      // select for update is not required as only one task will update this 
during repl load.
+      rs = stmt.executeQuery("select PARAM_VALUE from TABLE_PARAMS where 
PARAM_KEY = " +
+              "'repl.last.id' and TBL_ID = " + tblId);
+      if (!rs.next()) {
+        query = "insert into TABLE_PARAMS values ( " + tblId + " , 
'repl.last.id' , ? )";
+      } else {
+        query = "update TABLE_PARAMS set PARAM_VALUE = ? where TBL_ID = " + 
tblId +
+                " and PARAM_KEY = 'repl.last.id'";
+      }
+      rs.close();
+
+      params = Arrays.asList(lastReplId);
+      pst = sqlGenerator.prepareStmtWithParameters(dbConn, query, params);
+      LOG.debug("Updating repl id for table <" + query.replaceAll("\\?", "{}") 
+ ">", lastReplId);
+      if (pst.executeUpdate() != 1) {
+        //only one row insert or update should happen
+        throw new RuntimeException("TABLE_PARAMS is corrupted for table " + 
table);
+      }
+      pst.close();
+
+      if (partList == null || partList.isEmpty()) {
+        return;
+      }
+
+      List<String> questions = new ArrayList<>();
+      for(int i = 0; i < partList.size(); ++i) {
+        questions.add("?");
+      }
+
+      List<String> queries = new ArrayList<>();
+      StringBuilder prefix = new StringBuilder();
+      StringBuilder suffix = new StringBuilder();
+      prefix.append("select \"PART_ID\" from \"PARTITIONS\" where \"TBL_ID\" = 
" + tblId + " and ");
+
+      // Populate the complete query with provided prefix and suffix
+      List<Integer> counts = TxnUtils.buildQueryWithINClauseStrings(conf, 
queries, prefix, suffix,
+              questions, "\"PART_NAME\"", true, false);
+      int totalCount = 0;
+      assert queries.size() == counts.size();
+      params = Arrays.asList(lastReplId);
+      for (int i = 0; i < queries.size(); i++) {
+        query = queries.get(i);
+        int partCount = counts.get(i);
+
+        LOG.debug("Going to execute query " + query + " with partitions " +
+                partList.subList(totalCount, (totalCount + partCount)));
+        pst = dbConn.prepareStatement(query);
+        for (int j = 0; j < partCount; j++) {
+          pst.setString(j + 1, partList.get(totalCount + j));
+        }
+        totalCount += partCount;
+        prs = pst.executeQuery();
+        while (prs.next()) {
+          long partId = prs.getLong(1);
+          rs = stmt.executeQuery("select PARAM_VALUE from PARTITION_PARAMS 
where PARAM_KEY " +
+                  " = 'repl.last.id' and PART_ID = " + partId);
+          if (!rs.next()) {
+            query = "insert into PARTITION_PARAMS values ( " + partId + " , 
'repl.last.id' , ? )";
+          } else {
+            query = "update PARTITION_PARAMS set PARAM_VALUE = ? " +
+                    " where PART_ID = " + partId + " and PARAM_KEY = 
'repl.last.id'";
+          }
+          rs.close();
+
+          pstInt = sqlGenerator.prepareStmtWithParameters(dbConn, query, 
params);
+          LOG.debug("Updating repl id for part <" + query.replaceAll("\\?", 
"{}") + ">", lastReplId);
+          if (pstInt.executeUpdate() != 1) {
+            //only one row insert or update should happen
+            throw new RuntimeException("PARTITION_PARAMS is corrupted for 
partition " + partId);
+          }
+          partCount--;
+          pstInt.close();
+        }
+        if (partCount != 0) {
+          throw new MetaException(partCount + " Number of partition among " + 
partList + " does not exist in table " +
+                  catalog + "." + db + "." + table);
+        }
+        prs.close();
+        pst.close();
+      }
+    } finally {
+      closeStmt(stmt);
+      close(rs);
+      close(prs);
+      closeStmt(pst);
+      closeStmt(pstInt);
+    }
+  }
+
   /**
    * Concurrency/isolation notes:
    * This is mutexed with {@link #openTxns(OpenTxnRequest)} and other {@link 
#commitTxn(CommitTxnRequest)}
@@ -908,6 +1073,10 @@ abstract class TxnHandler implements TxnStore, 
TxnStore.MutexAPI {
         dbConn = getDbConn(Connection.TRANSACTION_READ_COMMITTED);
         stmt = dbConn.createStatement();
 
+        if (rqst.isSetReplLastIdInfo()) {
+          updateReplId(dbConn, rqst.getReplLastIdInfo());
+        }
+
         if (rqst.isSetReplPolicy()) {
           sourceTxnId = rqst.getTxnid();
           List<Long> targetTxnIds = getTargetTxnIdList(rqst.getReplPolicy(),

Reply via email to