Repository: incubator-trafodion
Updated Branches:
  refs/heads/master 08be5c164 -> 419d2cd5e


Fix to correct loss of updates following a regionServer failure


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/9fc659ab
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/9fc659ab
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/9fc659ab

Branch: refs/heads/master
Commit: 9fc659ab52e47af92426a535f5e8a88cd9c09023
Parents: 160ac1c
Author: Sean Broeder <[email protected]>
Authored: Tue Jun 28 19:54:28 2016 +0000
Committer: Sean Broeder <[email protected]>
Committed: Wed Jul 6 18:02:28 2016 +0000

----------------------------------------------------------------------
 .../transactional/TransactionManager.java       |  14 +-
 .../client/transactional/TransactionState.java  |  22 +-
 .../transactional/TrxRegionEndpoint.java.tmpl   |  49 +-
 .../generated/SsccRegionProtos.java             |  21 -
 .../generated/TrxRegionProtos.java              | 949 ++++++++++++++-----
 .../hbase-trx/src/main/protobuf/TrxRegion.proto |  13 +-
 6 files changed, 758 insertions(+), 310 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/9fc659ab/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/TransactionManager.java
----------------------------------------------------------------------
diff --git 
a/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/TransactionManager.java
 
b/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/TransactionManager.java
index 2c7e6af..9d90ace 100644
--- 
a/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/TransactionManager.java
+++ 
b/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/TransactionManager.java
@@ -608,11 +608,11 @@ public class TransactionManager {
       * Return  : Commit vote (yes, no, read only)
       * Purpose : Call prepare for a given regionserver
      */
-    public Integer doPrepareX(final byte[] regionName, final long 
transactionId, final int participantNum, final TransactionRegionLocation 
location)
+    public Integer doPrepareX(final byte[] regionName, final long 
transactionId, final long startEpoc, final int participantNum, final 
TransactionRegionLocation location)
           throws IOException, CommitUnsuccessfulException {
-       if (LOG.isTraceEnabled()) LOG.trace("doPrepareX -- ENTRY txid: " + 
transactionId
-                                                                        + " 
RegionName " + Bytes.toString(regionName)
-                                                                        + " 
TableName " + table.toString() );
+       if (LOG.isTraceEnabled()) LOG.trace("doPrepareX -- ENTRY txid: " + 
transactionId + " startEpoc " + startEpoc
+                                                          + " participantNum " 
+ participantNum + " RegionName " + Bytes.toString(regionName)
+                                                       + " TableName " + 
table.toString() + " location " + location );
        int commitStatus = 0;
        boolean refresh = false;
        boolean retry = false;
@@ -632,6 +632,7 @@ public class TransactionManager {
                 public CommitRequestResponse call(TrxRegionService instance) 
throws IOException {
                    
org.apache.hadoop.hbase.coprocessor.transactional.generated.TrxRegionProtos.CommitRequestRequest.Builder
 builder = CommitRequestRequest.newBuilder();
                    builder.setTransactionId(transactionId);
+                   builder.setStartEpoc(startEpoc);
                    
builder.setRegionName(ByteString.copyFromUtf8(Bytes.toString(regionName)));
                    builder.setParticipantNum(participantNum);
 
@@ -1580,6 +1581,7 @@ public class TransactionManager {
         //long transactionId =
       if (LOG.isTraceEnabled()) LOG.trace("Enter beginTransaction, txid: " + 
transactionId);
       TransactionState ts = new TransactionState(transactionId);
+      ts.setStartEpoc(EnvironmentEdgeManager.currentTime());
       long startIdVal = -1;
 
       // Set the startid
@@ -1696,7 +1698,7 @@ public class TransactionManager {
                         public Integer call() throws 
CommitUnsuccessfulException, IOException {
 
                             return 
doPrepareX(location.getRegionInfo().getRegionName(),
-                                    transactionState.getTransactionId(), 
lvParticipantNum,
+                                    transactionState.getTransactionId(), 
transactionState.getStartEpoc(), lvParticipantNum,
                                     location);
                         }
                     });
@@ -1781,7 +1783,7 @@ public class TransactionManager {
 
              compPool.submit(new TransactionManagerCallable(transactionState, 
location, connection) {
                public Integer call() throws IOException, 
CommitUnsuccessfulException {
-                 return doPrepareX(regionName, 
transactionState.getTransactionId(), lvParticipantNum, myLocation);
+                 return doPrepareX(regionName, 
transactionState.getTransactionId(), transactionState.getStartEpoc(), 
lvParticipantNum, myLocation);
                }
              });
            }

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/9fc659ab/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/TransactionState.java
----------------------------------------------------------------------
diff --git 
a/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/TransactionState.java
 
b/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/TransactionState.java
index bb85b57..7c837f4 100644
--- 
a/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/TransactionState.java
+++ 
b/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/TransactionState.java
@@ -46,6 +46,7 @@ public class TransactionState {
 
     private final long transactionId;
     private TransState status;
+    private long startEpoc;
     private long startId;
     private long commitId;
 
@@ -363,6 +364,23 @@ public class TransactionState {
     }
 
     /**
+     * Set the startEpoc.
+     *
+     */
+    public void setStartEpoc(final long epoc) {
+        this.startEpoc = epoc;
+    }
+
+    /**
+     * Get the startEpoc.
+     *
+     * @return Return the startEpoc.
+     */
+    public long getStartEpoc() {
+        return startEpoc;
+    }
+
+    /**
      * Set the startId.
      *
      */
@@ -402,7 +420,9 @@ public class TransactionState {
     @Override
     public String toString() {
         return "transactionId: " + transactionId + ", startId: " + startId + 
", commitId: " + commitId +
-               ", participants: " + participatingRegions.size() + ", ignoring: 
" + regionsToIgnore.size();
+               ", startEpoc: " + startEpoc + ", participants: " + 
participatingRegions.size()
+               + ", ignoring: " + regionsToIgnore.size() + ", hasDDL: " + 
hasDDLTx()
+               + ", state: " + status.toString();
     }
 
     public int getParticipantCount() {

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/9fc659ab/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/coprocessor/transactional/TrxRegionEndpoint.java.tmpl
----------------------------------------------------------------------
diff --git 
a/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/coprocessor/transactional/TrxRegionEndpoint.java.tmpl
 
b/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/coprocessor/transactional/TrxRegionEndpoint.java.tmpl
index 4f7b43c..e351eb3 100644
--- 
a/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/coprocessor/transactional/TrxRegionEndpoint.java.tmpl
+++ 
b/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/coprocessor/transactional/TrxRegionEndpoint.java.tmpl
@@ -304,6 +304,7 @@ CoprocessorService, Coprocessor {
   private int regionState = 0; 
   private Path recoveryTrxPath = null;
   private int cleanAT = 0;
+  private long onlineEpoc = EnvironmentEdgeManager.currentTime();  
   
   private long[] commitCheckTimes   = new long[50];
   private long[] hasConflictTimes   = new long[50];
@@ -787,6 +788,8 @@ CoprocessorService, Coprocessor {
 
     boolean reply = false;
     long transactionId = request.getTransactionId();
+    long commitId = request.getCommitId();
+    long startEpoc = request.getStartEpoc();
     final int participantNum = request.getParticipantNum();
     Throwable t = null;
     WrongRegionException wre = null;
@@ -807,8 +810,8 @@ CoprocessorService, Coprocessor {
      {
        // Process local memory
        try {
-        if (LOG.isDebugEnabled()) LOG.debug("TrxRegionEndpoint coprocessor: 
commitIfPossible - txId "  + transactionId + ", regionName, " + 
regionInfo.getRegionNameAsString() + "calling internal commitIfPossible");
-         reply = commitIfPossible(transactionId, participantNum);
+        if (LOG.isDebugEnabled()) LOG.debug("commitIfPossible - txId "  + 
transactionId + ", regionName, " + regionInfo.getRegionNameAsString() + 
"calling internal commitIfPossible");
+         reply = commitIfPossible(transactionId, startEpoc, commitId, 
participantNum);
        } catch (Throwable e) {
           if (LOG.isTraceEnabled()) LOG.trace("TrxRegionEndpoint coprocessor: 
commitIfPossible - txId " + transactionId + ", Caught exception after internal 
commitIfPossible call "
                    + e.getMessage() + " " + stackTraceToString(e));
@@ -849,11 +852,12 @@ CoprocessorService, Coprocessor {
     Throwable t = null;
     WrongRegionException wre = null;
     long transactionId = request.getTransactionId();
+    long startEpoc = request.getStartEpoc();
     int participantNum = request.getParticipantNum();
     boolean dropTableRecorded = request.getDropTableRecorded();
 
-    if (LOG.isTraceEnabled()) LOG.trace("TrxRegionEndpoint coprocessor: 
commitRequest - txId "
-         + transactionId + ", participantNum " + participantNum + ", 
dropTableRecorded " + dropTableRecorded + 
+    if (LOG.isTraceEnabled()) LOG.trace("commitRequest - txId "
+         + transactionId + ", startEpoc " + startEpoc + ", participantNum " + 
participantNum + ", dropTableRecorded " + dropTableRecorded + 
          ", regionName " + regionInfo.getRegionNameAsString());
 
     /*  commenting out for the time being
@@ -872,7 +876,7 @@ CoprocessorService, Coprocessor {
     {
       // Process local memory
       try {
-        status = commitRequest(transactionId, participantNum, 
dropTableRecorded);
+        status = commitRequest(transactionId, startEpoc, participantNum, 
dropTableRecorded);
       } catch (UnknownTransactionException u) {
         if (LOG.isTraceEnabled()) LOG.trace("TrxRegionEndpoint coprocessor: 
commitRequest - txId " + transactionId + ", Caught UnknownTransactionException 
after internal commitRequest call - " + u.toString());
         ute = u;
@@ -931,6 +935,7 @@ CoprocessorService, Coprocessor {
     Throwable t = null;
     WrongRegionException wre = null;
     long transactionId = request.getTransactionId();
+    long startEpoc = request.getStartEpoc();
     int i = 0;
     int numOfRegion = request.getRegionNameCount();
     String requestRegionName;
@@ -973,8 +978,8 @@ CoprocessorService, Coprocessor {
                  commitRequestMultipleResponseBuilder.setException(i, 
BatchException.EXCEPTION_REGIONNOTFOUND_ERR.toString());
               }
               else {
-                 if (i == (numOfRegion - 1)) {status = 
regionEPCP.commitRequest(transactionId, i, true);} // only the last region flush
-                 else {status = regionEPCP.commitRequest(transactionId, i, 
false);}
+                 if (i == (numOfRegion - 1)) {status = 
regionEPCP.commitRequest(transactionId, startEpoc, i, true);} // only the last 
region flush
+                 else {status = regionEPCP.commitRequest(transactionId, 
startEpoc, i, false);}
               }
               if (LOG.isTraceEnabled()) LOG.trace("TrxRegionEndpoint 
commitRequestMultiple ends");
              //status = commitRequest(transactionId);
@@ -2970,7 +2975,7 @@ CoprocessorService, Coprocessor {
                              if (LOG.isInfoEnabled()) 
LOG.info("TrxRegionEndpoint coprocessor: recoveryRequest - Trafodion Recovery: 
region " + regionInfo.getEncodedName() + " in-doubt transaction " + tid + " has 
been added into the recovery reply to TM " + tmId + " during start ");
                          }
                      }
-                     // now remove the ZK node after TM has initiated the 
ecovery request   
+                     // now remove the ZK node after TM has initiated the 
recovery request   
                     String lv_encoded = 
m_Region.getRegionInfo().getEncodedName();
                     try {
                        if (LOG.isTraceEnabled()) LOG.trace("TrxRegionEndpoint 
coprocessor: recoveryRequest - Trafodion Recovery: delete recovery zNode TM "
@@ -5094,16 +5099,16 @@ CoprocessorService, Coprocessor {
    * @return TransactionRegionInterface commit code
    * @throws IOException
    */
-  public int commitRequest(final long transactionId, final int participantNum) 
throws IOException, UnknownTransactionException {
-     return commitRequest(transactionId, participantNum, true, false);
+  public int commitRequest(final long transactionId, final long startEpoc, 
final int participantNum) throws IOException, UnknownTransactionException {
+     return commitRequest(transactionId, startEpoc, participantNum, true, 
false);
   }
 
-  public int commitRequest(final long transactionId, final int participantNum, 
final boolean dropTableRecorded)
+  public int commitRequest(final long transactionId, final long startEpoc, 
final int participantNum, final boolean dropTableRecorded)
                                                     throws IOException, 
UnknownTransactionException {
-      return commitRequest(transactionId, participantNum, true, 
dropTableRecorded);
+      return commitRequest(transactionId, startEpoc, participantNum, true, 
dropTableRecorded);
   }
   
-  public int commitRequest(final long transactionId, final int participantNum, 
boolean flushHLOG,
+  public int commitRequest(final long transactionId, final long startEpoc, 
final int participantNum, boolean flushHLOG,
                                                                boolean 
dropTableRecorded) throws IOException,
                                                                                
 UnknownTransactionException {
     long txid = 0;
@@ -5114,7 +5119,13 @@ CoprocessorService, Coprocessor {
     checkBlockNonPhase2(transactionId);
 
     TrxTransactionState state;
-
+    if (startEpoc < onlineEpoc) {
+        LOG.info("commitRequest txId: "
+               + transactionId + " startEpoc " + startEpoc + " is less than 
region's onlineEpoc " + onlineEpoc
+               + " for regionName " + lv_regionName
+               + " must return COMMIT_UNSUCCESSFUL_FROM_COPROCESSOR ");
+        return COMMIT_UNSUCCESSFUL_FROM_COPROCESSOR;
+    }
     int lv_totalCommits = 0;
     int lv_timeIndex = 0;
     if (LOG.isInfoEnabled()) {
@@ -5516,7 +5527,7 @@ CoprocessorService, Coprocessor {
    * @return boolean
    * @throws IOException
    */
-  public boolean commitIfPossible(final long transactionId, final int 
participantNum)
+  public boolean commitIfPossible(final long transactionId, final long 
startEpoc, final long commitId, final int participantNum)
     throws IOException {
 
     if (LOG.isTraceEnabled()) LOG.trace("TrxRegionEndpoint coprocessor: 
commitIfPossible -- ENTRY txId: "
@@ -5524,7 +5535,7 @@ CoprocessorService, Coprocessor {
 
     checkBlockNonPhase2(transactionId);
 
-    int status = commitRequest(transactionId, participantNum);
+    int status = commitRequest(transactionId, startEpoc, participantNum);
   
     if (status == COMMIT_OK) {
 
@@ -6078,12 +6089,14 @@ CoprocessorService, Coprocessor {
       }
     }
     txnPersistBuilder.setNextSeqId(nextSequenceId.get());
+    txnPersistBuilder.setOnlineEpoc(this.onlineEpoc);
 
     ByteArrayOutputStream output = new ByteArrayOutputStream();
 
     for(TrxTransactionState ts : transactionMap.values()) {
       TransactionStateMsg.Builder tsBuilder =  
TransactionStateMsg.newBuilder();
       tsBuilder.setTxId(ts.getTransactionId());
+      tsBuilder.setTxId(ts.getTransactionId());
       tsBuilder.setStartSeqNum(ts.getStartSequenceNumber());
       tsBuilder.setSeqNum(ts.getHLogStartSequenceId());
       tsBuilder.setLogSeqId(ts.getLogSeqId());
@@ -6236,8 +6249,10 @@ CoprocessorService, Coprocessor {
                 if (ts!=null)
                   
commitedTransactionsBySequenceNumber.put(txnPersistMsg.getSeqNoListSeq(i), ts);
               }
-
+              
               this.nextSequenceId = new 
AtomicLong(txnPersistMsg.getNextSeqId());
+              this.onlineEpoc = txnPersistMsg.getOnlineEpoc();
+              LOG.info("Setting onlineEpoc after split to " + this.onlineEpoc);
             } catch(IOException e) {
                 StringWriter sw = new StringWriter();
                 PrintWriter pw = new PrintWriter(sw);

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/9fc659ab/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/coprocessor/transactional/generated/SsccRegionProtos.java
----------------------------------------------------------------------
diff --git 
a/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/coprocessor/transactional/generated/SsccRegionProtos.java
 
b/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/coprocessor/transactional/generated/SsccRegionProtos.java
index 71a8a49..79a687b 100644
--- 
a/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/coprocessor/transactional/generated/SsccRegionProtos.java
+++ 
b/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/coprocessor/transactional/generated/SsccRegionProtos.java
@@ -1,24 +1,3 @@
-// @@@ START COPYRIGHT @@@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-// @@@ END COPYRIGHT @@@
-
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: SsccRegion.proto
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/9fc659ab/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/coprocessor/transactional/generated/TrxRegionProtos.java
----------------------------------------------------------------------
diff --git 
a/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/coprocessor/transactional/generated/TrxRegionProtos.java
 
b/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/coprocessor/transactional/generated/TrxRegionProtos.java
index b430768..fa3f5a0 100755
--- 
a/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/coprocessor/transactional/generated/TrxRegionProtos.java
+++ 
b/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/coprocessor/transactional/generated/TrxRegionProtos.java
@@ -1,24 +1,3 @@
-// @@@ START COPYRIGHT @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-// @@@ END COPYRIGHT @@@
-
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: TrxRegion.proto
 
@@ -6073,23 +6052,33 @@ public final class TrxRegionProtos {
      */
     long getTransactionId();
 
-    // required int32 participantNum = 3;
+    // required int64 startEpoc = 3;
     /**
-     * <code>required int32 participantNum = 3;</code>
+     * <code>required int64 startEpoc = 3;</code>
+     */
+    boolean hasStartEpoc();
+    /**
+     * <code>required int64 startEpoc = 3;</code>
+     */
+    long getStartEpoc();
+
+    // required int32 participantNum = 4;
+    /**
+     * <code>required int32 participantNum = 4;</code>
      */
     boolean hasParticipantNum();
     /**
-     * <code>required int32 participantNum = 3;</code>
+     * <code>required int32 participantNum = 4;</code>
      */
     int getParticipantNum();
 
-    // required bool dropTableRecorded = 4;
+    // required bool dropTableRecorded = 5;
     /**
-     * <code>required bool dropTableRecorded = 4;</code>
+     * <code>required bool dropTableRecorded = 5;</code>
      */
     boolean hasDropTableRecorded();
     /**
-     * <code>required bool dropTableRecorded = 4;</code>
+     * <code>required bool dropTableRecorded = 5;</code>
      */
     boolean getDropTableRecorded();
   }
@@ -6156,11 +6145,16 @@ public final class TrxRegionProtos {
             }
             case 24: {
               bitField0_ |= 0x00000004;
-              participantNum_ = input.readInt32();
+              startEpoc_ = input.readInt64();
               break;
             }
             case 32: {
               bitField0_ |= 0x00000008;
+              participantNum_ = input.readInt32();
+              break;
+            }
+            case 40: {
+              bitField0_ |= 0x00000010;
               dropTableRecorded_ = input.readBool();
               break;
             }
@@ -6236,33 +6230,49 @@ public final class TrxRegionProtos {
       return transactionId_;
     }
 
-    // required int32 participantNum = 3;
-    public static final int PARTICIPANTNUM_FIELD_NUMBER = 3;
+    // required int64 startEpoc = 3;
+    public static final int STARTEPOC_FIELD_NUMBER = 3;
+    private long startEpoc_;
+    /**
+     * <code>required int64 startEpoc = 3;</code>
+     */
+    public boolean hasStartEpoc() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    /**
+     * <code>required int64 startEpoc = 3;</code>
+     */
+    public long getStartEpoc() {
+      return startEpoc_;
+    }
+
+    // required int32 participantNum = 4;
+    public static final int PARTICIPANTNUM_FIELD_NUMBER = 4;
     private int participantNum_;
     /**
-     * <code>required int32 participantNum = 3;</code>
+     * <code>required int32 participantNum = 4;</code>
      */
     public boolean hasParticipantNum() {
-      return ((bitField0_ & 0x00000004) == 0x00000004);
+      return ((bitField0_ & 0x00000008) == 0x00000008);
     }
     /**
-     * <code>required int32 participantNum = 3;</code>
+     * <code>required int32 participantNum = 4;</code>
      */
     public int getParticipantNum() {
       return participantNum_;
     }
 
-    // required bool dropTableRecorded = 4;
-    public static final int DROPTABLERECORDED_FIELD_NUMBER = 4;
+    // required bool dropTableRecorded = 5;
+    public static final int DROPTABLERECORDED_FIELD_NUMBER = 5;
     private boolean dropTableRecorded_;
     /**
-     * <code>required bool dropTableRecorded = 4;</code>
+     * <code>required bool dropTableRecorded = 5;</code>
      */
     public boolean hasDropTableRecorded() {
-      return ((bitField0_ & 0x00000008) == 0x00000008);
+      return ((bitField0_ & 0x00000010) == 0x00000010);
     }
     /**
-     * <code>required bool dropTableRecorded = 4;</code>
+     * <code>required bool dropTableRecorded = 5;</code>
      */
     public boolean getDropTableRecorded() {
       return dropTableRecorded_;
@@ -6271,6 +6281,7 @@ public final class TrxRegionProtos {
     private void initFields() {
       regionName_ = com.google.protobuf.ByteString.EMPTY;
       transactionId_ = 0L;
+      startEpoc_ = 0L;
       participantNum_ = 0;
       dropTableRecorded_ = false;
     }
@@ -6287,6 +6298,10 @@ public final class TrxRegionProtos {
         memoizedIsInitialized = 0;
         return false;
       }
+      if (!hasStartEpoc()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
       if (!hasParticipantNum()) {
         memoizedIsInitialized = 0;
         return false;
@@ -6309,10 +6324,13 @@ public final class TrxRegionProtos {
         output.writeInt64(2, transactionId_);
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeInt32(3, participantNum_);
+        output.writeInt64(3, startEpoc_);
       }
       if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        output.writeBool(4, dropTableRecorded_);
+        output.writeInt32(4, participantNum_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeBool(5, dropTableRecorded_);
       }
       getUnknownFields().writeTo(output);
     }
@@ -6333,11 +6351,15 @@ public final class TrxRegionProtos {
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(3, participantNum_);
+          .computeInt64Size(3, startEpoc_);
       }
       if (((bitField0_ & 0x00000008) == 0x00000008)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(4, dropTableRecorded_);
+          .computeInt32Size(4, participantNum_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(5, dropTableRecorded_);
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -6459,10 +6481,12 @@ public final class TrxRegionProtos {
         bitField0_ = (bitField0_ & ~0x00000001);
         transactionId_ = 0L;
         bitField0_ = (bitField0_ & ~0x00000002);
-        participantNum_ = 0;
+        startEpoc_ = 0L;
         bitField0_ = (bitField0_ & ~0x00000004);
-        dropTableRecorded_ = false;
+        participantNum_ = 0;
         bitField0_ = (bitField0_ & ~0x00000008);
+        dropTableRecorded_ = false;
+        bitField0_ = (bitField0_ & ~0x00000010);
         return this;
       }
 
@@ -6502,10 +6526,14 @@ public final class TrxRegionProtos {
         if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
           to_bitField0_ |= 0x00000004;
         }
-        result.participantNum_ = participantNum_;
+        result.startEpoc_ = startEpoc_;
         if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
           to_bitField0_ |= 0x00000008;
         }
+        result.participantNum_ = participantNum_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000010;
+        }
         result.dropTableRecorded_ = dropTableRecorded_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
@@ -6529,6 +6557,9 @@ public final class TrxRegionProtos {
         if (other.hasTransactionId()) {
           setTransactionId(other.getTransactionId());
         }
+        if (other.hasStartEpoc()) {
+          setStartEpoc(other.getStartEpoc());
+        }
         if (other.hasParticipantNum()) {
           setParticipantNum(other.getParticipantNum());
         }
@@ -6548,6 +6579,10 @@ public final class TrxRegionProtos {
           
           return false;
         }
+        if (!hasStartEpoc()) {
+          
+          return false;
+        }
         if (!hasParticipantNum()) {
           
           return false;
@@ -6647,67 +6682,100 @@ public final class TrxRegionProtos {
         return this;
       }
 
-      // required int32 participantNum = 3;
+      // required int64 startEpoc = 3;
+      private long startEpoc_ ;
+      /**
+       * <code>required int64 startEpoc = 3;</code>
+       */
+      public boolean hasStartEpoc() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      /**
+       * <code>required int64 startEpoc = 3;</code>
+       */
+      public long getStartEpoc() {
+        return startEpoc_;
+      }
+      /**
+       * <code>required int64 startEpoc = 3;</code>
+       */
+      public Builder setStartEpoc(long value) {
+        bitField0_ |= 0x00000004;
+        startEpoc_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>required int64 startEpoc = 3;</code>
+       */
+      public Builder clearStartEpoc() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        startEpoc_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      // required int32 participantNum = 4;
       private int participantNum_ ;
       /**
-       * <code>required int32 participantNum = 3;</code>
+       * <code>required int32 participantNum = 4;</code>
        */
       public boolean hasParticipantNum() {
-        return ((bitField0_ & 0x00000004) == 0x00000004);
+        return ((bitField0_ & 0x00000008) == 0x00000008);
       }
       /**
-       * <code>required int32 participantNum = 3;</code>
+       * <code>required int32 participantNum = 4;</code>
        */
       public int getParticipantNum() {
         return participantNum_;
       }
       /**
-       * <code>required int32 participantNum = 3;</code>
+       * <code>required int32 participantNum = 4;</code>
        */
       public Builder setParticipantNum(int value) {
-        bitField0_ |= 0x00000004;
+        bitField0_ |= 0x00000008;
         participantNum_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>required int32 participantNum = 3;</code>
+       * <code>required int32 participantNum = 4;</code>
        */
       public Builder clearParticipantNum() {
-        bitField0_ = (bitField0_ & ~0x00000004);
+        bitField0_ = (bitField0_ & ~0x00000008);
         participantNum_ = 0;
         onChanged();
         return this;
       }
 
-      // required bool dropTableRecorded = 4;
+      // required bool dropTableRecorded = 5;
       private boolean dropTableRecorded_ ;
       /**
-       * <code>required bool dropTableRecorded = 4;</code>
+       * <code>required bool dropTableRecorded = 5;</code>
        */
       public boolean hasDropTableRecorded() {
-        return ((bitField0_ & 0x00000008) == 0x00000008);
+        return ((bitField0_ & 0x00000010) == 0x00000010);
       }
       /**
-       * <code>required bool dropTableRecorded = 4;</code>
+       * <code>required bool dropTableRecorded = 5;</code>
        */
       public boolean getDropTableRecorded() {
         return dropTableRecorded_;
       }
       /**
-       * <code>required bool dropTableRecorded = 4;</code>
+       * <code>required bool dropTableRecorded = 5;</code>
        */
       public Builder setDropTableRecorded(boolean value) {
-        bitField0_ |= 0x00000008;
+        bitField0_ |= 0x00000010;
         dropTableRecorded_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>required bool dropTableRecorded = 4;</code>
+       * <code>required bool dropTableRecorded = 5;</code>
        */
       public Builder clearDropTableRecorded() {
-        bitField0_ = (bitField0_ & ~0x00000008);
+        bitField0_ = (bitField0_ & ~0x00000010);
         dropTableRecorded_ = false;
         onChanged();
         return this;
@@ -7392,13 +7460,23 @@ public final class TrxRegionProtos {
      */
     long getTransactionId();
 
-    // required int32 participantNum = 3;
+    // required int64 startEpoc = 3;
     /**
-     * <code>required int32 participantNum = 3;</code>
+     * <code>required int64 startEpoc = 3;</code>
+     */
+    boolean hasStartEpoc();
+    /**
+     * <code>required int64 startEpoc = 3;</code>
+     */
+    long getStartEpoc();
+
+    // required int32 participantNum = 4;
+    /**
+     * <code>required int32 participantNum = 4;</code>
      */
     boolean hasParticipantNum();
     /**
-     * <code>required int32 participantNum = 3;</code>
+     * <code>required int32 participantNum = 4;</code>
      */
     int getParticipantNum();
   }
@@ -7468,6 +7546,11 @@ public final class TrxRegionProtos {
             }
             case 24: {
               bitField0_ |= 0x00000002;
+              startEpoc_ = input.readInt64();
+              break;
+            }
+            case 32: {
+              bitField0_ |= 0x00000004;
               participantNum_ = input.readInt32();
               break;
             }
@@ -7553,17 +7636,33 @@ public final class TrxRegionProtos {
       return transactionId_;
     }
 
-    // required int32 participantNum = 3;
-    public static final int PARTICIPANTNUM_FIELD_NUMBER = 3;
+    // required int64 startEpoc = 3;
+    public static final int STARTEPOC_FIELD_NUMBER = 3;
+    private long startEpoc_;
+    /**
+     * <code>required int64 startEpoc = 3;</code>
+     */
+    public boolean hasStartEpoc() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    /**
+     * <code>required int64 startEpoc = 3;</code>
+     */
+    public long getStartEpoc() {
+      return startEpoc_;
+    }
+
+    // required int32 participantNum = 4;
+    public static final int PARTICIPANTNUM_FIELD_NUMBER = 4;
     private int participantNum_;
     /**
-     * <code>required int32 participantNum = 3;</code>
+     * <code>required int32 participantNum = 4;</code>
      */
     public boolean hasParticipantNum() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
+      return ((bitField0_ & 0x00000004) == 0x00000004);
     }
     /**
-     * <code>required int32 participantNum = 3;</code>
+     * <code>required int32 participantNum = 4;</code>
      */
     public int getParticipantNum() {
       return participantNum_;
@@ -7572,6 +7671,7 @@ public final class TrxRegionProtos {
     private void initFields() {
       regionName_ = java.util.Collections.emptyList();
       transactionId_ = 0L;
+      startEpoc_ = 0L;
       participantNum_ = 0;
     }
     private byte memoizedIsInitialized = -1;
@@ -7583,6 +7683,10 @@ public final class TrxRegionProtos {
         memoizedIsInitialized = 0;
         return false;
       }
+      if (!hasStartEpoc()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
       if (!hasParticipantNum()) {
         memoizedIsInitialized = 0;
         return false;
@@ -7601,7 +7705,10 @@ public final class TrxRegionProtos {
         output.writeInt64(2, transactionId_);
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeInt32(3, participantNum_);
+        output.writeInt64(3, startEpoc_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeInt32(4, participantNum_);
       }
       getUnknownFields().writeTo(output);
     }
@@ -7627,7 +7734,11 @@ public final class TrxRegionProtos {
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(3, participantNum_);
+          .computeInt64Size(3, startEpoc_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(4, participantNum_);
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -7749,8 +7860,10 @@ public final class TrxRegionProtos {
         bitField0_ = (bitField0_ & ~0x00000001);
         transactionId_ = 0L;
         bitField0_ = (bitField0_ & ~0x00000002);
-        participantNum_ = 0;
+        startEpoc_ = 0L;
         bitField0_ = (bitField0_ & ~0x00000004);
+        participantNum_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000008);
         return this;
       }
 
@@ -7791,6 +7904,10 @@ public final class TrxRegionProtos {
         if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
           to_bitField0_ |= 0x00000002;
         }
+        result.startEpoc_ = startEpoc_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000004;
+        }
         result.participantNum_ = participantNum_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
@@ -7821,6 +7938,9 @@ public final class TrxRegionProtos {
         if (other.hasTransactionId()) {
           setTransactionId(other.getTransactionId());
         }
+        if (other.hasStartEpoc()) {
+          setStartEpoc(other.getStartEpoc());
+        }
         if (other.hasParticipantNum()) {
           setParticipantNum(other.getParticipantNum());
         }
@@ -7833,6 +7953,10 @@ public final class TrxRegionProtos {
           
           return false;
         }
+        if (!hasStartEpoc()) {
+          
+          return false;
+        }
         if (!hasParticipantNum()) {
           
           return false;
@@ -7964,34 +8088,67 @@ public final class TrxRegionProtos {
         return this;
       }
 
-      // required int32 participantNum = 3;
+      // required int64 startEpoc = 3;
+      private long startEpoc_ ;
+      /**
+       * <code>required int64 startEpoc = 3;</code>
+       */
+      public boolean hasStartEpoc() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      /**
+       * <code>required int64 startEpoc = 3;</code>
+       */
+      public long getStartEpoc() {
+        return startEpoc_;
+      }
+      /**
+       * <code>required int64 startEpoc = 3;</code>
+       */
+      public Builder setStartEpoc(long value) {
+        bitField0_ |= 0x00000004;
+        startEpoc_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>required int64 startEpoc = 3;</code>
+       */
+      public Builder clearStartEpoc() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        startEpoc_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      // required int32 participantNum = 4;
       private int participantNum_ ;
       /**
-       * <code>required int32 participantNum = 3;</code>
+       * <code>required int32 participantNum = 4;</code>
        */
       public boolean hasParticipantNum() {
-        return ((bitField0_ & 0x00000004) == 0x00000004);
+        return ((bitField0_ & 0x00000008) == 0x00000008);
       }
       /**
-       * <code>required int32 participantNum = 3;</code>
+       * <code>required int32 participantNum = 4;</code>
        */
       public int getParticipantNum() {
         return participantNum_;
       }
       /**
-       * <code>required int32 participantNum = 3;</code>
+       * <code>required int32 participantNum = 4;</code>
        */
       public Builder setParticipantNum(int value) {
-        bitField0_ |= 0x00000004;
+        bitField0_ |= 0x00000008;
         participantNum_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>required int32 participantNum = 3;</code>
+       * <code>required int32 participantNum = 4;</code>
        */
       public Builder clearParticipantNum() {
-        bitField0_ = (bitField0_ & ~0x00000004);
+        bitField0_ = (bitField0_ & ~0x00000008);
         participantNum_ = 0;
         onChanged();
         return this;
@@ -8769,13 +8926,33 @@ public final class TrxRegionProtos {
      */
     long getTransactionId();
 
-    // required int32 participantNum = 3;
+    // required int64 startEpoc = 3;
     /**
-     * <code>required int32 participantNum = 3;</code>
+     * <code>required int64 startEpoc = 3;</code>
+     */
+    boolean hasStartEpoc();
+    /**
+     * <code>required int64 startEpoc = 3;</code>
+     */
+    long getStartEpoc();
+
+    // required int64 commitId = 4;
+    /**
+     * <code>required int64 commitId = 4;</code>
+     */
+    boolean hasCommitId();
+    /**
+     * <code>required int64 commitId = 4;</code>
+     */
+    long getCommitId();
+
+    // required int32 participantNum = 5;
+    /**
+     * <code>required int32 participantNum = 5;</code>
      */
     boolean hasParticipantNum();
     /**
-     * <code>required int32 participantNum = 3;</code>
+     * <code>required int32 participantNum = 5;</code>
      */
     int getParticipantNum();
   }
@@ -8842,6 +9019,16 @@ public final class TrxRegionProtos {
             }
             case 24: {
               bitField0_ |= 0x00000004;
+              startEpoc_ = input.readInt64();
+              break;
+            }
+            case 32: {
+              bitField0_ |= 0x00000008;
+              commitId_ = input.readInt64();
+              break;
+            }
+            case 40: {
+              bitField0_ |= 0x00000010;
               participantNum_ = input.readInt32();
               break;
             }
@@ -8917,17 +9104,49 @@ public final class TrxRegionProtos {
       return transactionId_;
     }
 
-    // required int32 participantNum = 3;
-    public static final int PARTICIPANTNUM_FIELD_NUMBER = 3;
+    // required int64 startEpoc = 3;
+    public static final int STARTEPOC_FIELD_NUMBER = 3;
+    private long startEpoc_;
+    /**
+     * <code>required int64 startEpoc = 3;</code>
+     */
+    public boolean hasStartEpoc() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    /**
+     * <code>required int64 startEpoc = 3;</code>
+     */
+    public long getStartEpoc() {
+      return startEpoc_;
+    }
+
+    // required int64 commitId = 4;
+    public static final int COMMITID_FIELD_NUMBER = 4;
+    private long commitId_;
+    /**
+     * <code>required int64 commitId = 4;</code>
+     */
+    public boolean hasCommitId() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    /**
+     * <code>required int64 commitId = 4;</code>
+     */
+    public long getCommitId() {
+      return commitId_;
+    }
+
+    // required int32 participantNum = 5;
+    public static final int PARTICIPANTNUM_FIELD_NUMBER = 5;
     private int participantNum_;
     /**
-     * <code>required int32 participantNum = 3;</code>
+     * <code>required int32 participantNum = 5;</code>
      */
     public boolean hasParticipantNum() {
-      return ((bitField0_ & 0x00000004) == 0x00000004);
+      return ((bitField0_ & 0x00000010) == 0x00000010);
     }
     /**
-     * <code>required int32 participantNum = 3;</code>
+     * <code>required int32 participantNum = 5;</code>
      */
     public int getParticipantNum() {
       return participantNum_;
@@ -8936,6 +9155,8 @@ public final class TrxRegionProtos {
     private void initFields() {
       regionName_ = com.google.protobuf.ByteString.EMPTY;
       transactionId_ = 0L;
+      startEpoc_ = 0L;
+      commitId_ = 0L;
       participantNum_ = 0;
     }
     private byte memoizedIsInitialized = -1;
@@ -8951,6 +9172,14 @@ public final class TrxRegionProtos {
         memoizedIsInitialized = 0;
         return false;
       }
+      if (!hasStartEpoc()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasCommitId()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
       if (!hasParticipantNum()) {
         memoizedIsInitialized = 0;
         return false;
@@ -8969,7 +9198,13 @@ public final class TrxRegionProtos {
         output.writeInt64(2, transactionId_);
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeInt32(3, participantNum_);
+        output.writeInt64(3, startEpoc_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeInt64(4, commitId_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeInt32(5, participantNum_);
       }
       getUnknownFields().writeTo(output);
     }
@@ -8990,7 +9225,15 @@ public final class TrxRegionProtos {
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(3, participantNum_);
+          .computeInt64Size(3, startEpoc_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(4, commitId_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(5, participantNum_);
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -9112,8 +9355,12 @@ public final class TrxRegionProtos {
         bitField0_ = (bitField0_ & ~0x00000001);
         transactionId_ = 0L;
         bitField0_ = (bitField0_ & ~0x00000002);
-        participantNum_ = 0;
+        startEpoc_ = 0L;
         bitField0_ = (bitField0_ & ~0x00000004);
+        commitId_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        participantNum_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000010);
         return this;
       }
 
@@ -9153,6 +9400,14 @@ public final class TrxRegionProtos {
         if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
           to_bitField0_ |= 0x00000004;
         }
+        result.startEpoc_ = startEpoc_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.commitId_ = commitId_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000010;
+        }
         result.participantNum_ = participantNum_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
@@ -9176,6 +9431,12 @@ public final class TrxRegionProtos {
         if (other.hasTransactionId()) {
           setTransactionId(other.getTransactionId());
         }
+        if (other.hasStartEpoc()) {
+          setStartEpoc(other.getStartEpoc());
+        }
+        if (other.hasCommitId()) {
+          setCommitId(other.getCommitId());
+        }
         if (other.hasParticipantNum()) {
           setParticipantNum(other.getParticipantNum());
         }
@@ -9192,6 +9453,14 @@ public final class TrxRegionProtos {
           
           return false;
         }
+        if (!hasStartEpoc()) {
+          
+          return false;
+        }
+        if (!hasCommitId()) {
+          
+          return false;
+        }
         if (!hasParticipantNum()) {
           
           return false;
@@ -9287,34 +9556,100 @@ public final class TrxRegionProtos {
         return this;
       }
 
-      // required int32 participantNum = 3;
+      // required int64 startEpoc = 3;
+      private long startEpoc_ ;
+      /**
+       * <code>required int64 startEpoc = 3;</code>
+       */
+      public boolean hasStartEpoc() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      /**
+       * <code>required int64 startEpoc = 3;</code>
+       */
+      public long getStartEpoc() {
+        return startEpoc_;
+      }
+      /**
+       * <code>required int64 startEpoc = 3;</code>
+       */
+      public Builder setStartEpoc(long value) {
+        bitField0_ |= 0x00000004;
+        startEpoc_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>required int64 startEpoc = 3;</code>
+       */
+      public Builder clearStartEpoc() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        startEpoc_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      // required int64 commitId = 4;
+      private long commitId_ ;
+      /**
+       * <code>required int64 commitId = 4;</code>
+       */
+      public boolean hasCommitId() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      /**
+       * <code>required int64 commitId = 4;</code>
+       */
+      public long getCommitId() {
+        return commitId_;
+      }
+      /**
+       * <code>required int64 commitId = 4;</code>
+       */
+      public Builder setCommitId(long value) {
+        bitField0_ |= 0x00000008;
+        commitId_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>required int64 commitId = 4;</code>
+       */
+      public Builder clearCommitId() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        commitId_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      // required int32 participantNum = 5;
       private int participantNum_ ;
       /**
-       * <code>required int32 participantNum = 3;</code>
+       * <code>required int32 participantNum = 5;</code>
        */
       public boolean hasParticipantNum() {
-        return ((bitField0_ & 0x00000004) == 0x00000004);
+        return ((bitField0_ & 0x00000010) == 0x00000010);
       }
       /**
-       * <code>required int32 participantNum = 3;</code>
+       * <code>required int32 participantNum = 5;</code>
        */
       public int getParticipantNum() {
         return participantNum_;
       }
       /**
-       * <code>required int32 participantNum = 3;</code>
+       * <code>required int32 participantNum = 5;</code>
        */
       public Builder setParticipantNum(int value) {
-        bitField0_ |= 0x00000004;
+        bitField0_ |= 0x00000010;
         participantNum_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>required int32 participantNum = 3;</code>
+       * <code>required int32 participantNum = 5;</code>
        */
       public Builder clearParticipantNum() {
-        bitField0_ = (bitField0_ & ~0x00000004);
+        bitField0_ = (bitField0_ & ~0x00000010);
         participantNum_ = 0;
         onChanged();
         return this;
@@ -34473,6 +34808,16 @@ public final class TrxRegionProtos {
      * <code>required int64 nextSeqId = 4;</code>
      */
     long getNextSeqId();
+
+    // required int64 onlineEpoc = 5;
+    /**
+     * <code>required int64 onlineEpoc = 5;</code>
+     */
+    boolean hasOnlineEpoc();
+    /**
+     * <code>required int64 onlineEpoc = 5;</code>
+     */
+    long getOnlineEpoc();
   }
   /**
    * Protobuf type {@code TransactionPersist}
@@ -34593,6 +34938,11 @@ public final class TrxRegionProtos {
               nextSeqId_ = input.readInt64();
               break;
             }
+            case 40: {
+              bitField0_ |= 0x00000002;
+              onlineEpoc_ = input.readInt64();
+              break;
+            }
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
@@ -34727,11 +35077,28 @@ public final class TrxRegionProtos {
       return nextSeqId_;
     }
 
+    // required int64 onlineEpoc = 5;
+    public static final int ONLINEEPOC_FIELD_NUMBER = 5;
+    private long onlineEpoc_;
+    /**
+     * <code>required int64 onlineEpoc = 5;</code>
+     */
+    public boolean hasOnlineEpoc() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    /**
+     * <code>required int64 onlineEpoc = 5;</code>
+     */
+    public long getOnlineEpoc() {
+      return onlineEpoc_;
+    }
+
     private void initFields() {
       txById_ = java.util.Collections.emptyList();
       seqNoListSeq_ = java.util.Collections.emptyList();
       seqNoListTxn_ = java.util.Collections.emptyList();
       nextSeqId_ = 0L;
+      onlineEpoc_ = 0L;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -34742,6 +35109,10 @@ public final class TrxRegionProtos {
         memoizedIsInitialized = 0;
         return false;
       }
+      if (!hasOnlineEpoc()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
       memoizedIsInitialized = 1;
       return true;
     }
@@ -34761,6 +35132,9 @@ public final class TrxRegionProtos {
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         output.writeInt64(4, nextSeqId_);
       }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeInt64(5, onlineEpoc_);
+      }
       getUnknownFields().writeTo(output);
     }
 
@@ -34801,6 +35175,10 @@ public final class TrxRegionProtos {
         size += com.google.protobuf.CodedOutputStream
           .computeInt64Size(4, nextSeqId_);
       }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(5, onlineEpoc_);
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -34925,6 +35303,8 @@ public final class TrxRegionProtos {
         bitField0_ = (bitField0_ & ~0x00000004);
         nextSeqId_ = 0L;
         bitField0_ = (bitField0_ & ~0x00000008);
+        onlineEpoc_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000010);
         return this;
       }
 
@@ -34972,6 +35352,10 @@ public final class TrxRegionProtos {
           to_bitField0_ |= 0x00000001;
         }
         result.nextSeqId_ = nextSeqId_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.onlineEpoc_ = onlineEpoc_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
@@ -35021,6 +35405,9 @@ public final class TrxRegionProtos {
         if (other.hasNextSeqId()) {
           setNextSeqId(other.getNextSeqId());
         }
+        if (other.hasOnlineEpoc()) {
+          setOnlineEpoc(other.getOnlineEpoc());
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -35030,6 +35417,10 @@ public final class TrxRegionProtos {
           
           return false;
         }
+        if (!hasOnlineEpoc()) {
+          
+          return false;
+        }
         return true;
       }
 
@@ -35283,6 +35674,39 @@ public final class TrxRegionProtos {
         return this;
       }
 
+      // required int64 onlineEpoc = 5;
+      private long onlineEpoc_ ;
+      /**
+       * <code>required int64 onlineEpoc = 5;</code>
+       */
+      public boolean hasOnlineEpoc() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      /**
+       * <code>required int64 onlineEpoc = 5;</code>
+       */
+      public long getOnlineEpoc() {
+        return onlineEpoc_;
+      }
+      /**
+       * <code>required int64 onlineEpoc = 5;</code>
+       */
+      public Builder setOnlineEpoc(long value) {
+        bitField0_ |= 0x00000010;
+        onlineEpoc_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>required int64 onlineEpoc = 5;</code>
+       */
+      public Builder clearOnlineEpoc() {
+        bitField0_ = (bitField0_ & ~0x00000010);
+        onlineEpoc_ = 0L;
+        onChanged();
+        return this;
+      }
+
       // @@protoc_insertion_point(builder_scope:TransactionPersist)
     }
 
@@ -39784,168 +40208,171 @@ public final class TrxRegionProtos {
       "antNum\030\003 \002(\005\022)\n!ignoreUnknownTransaction" +
       "Exception\030\004 \001(\010\"A\n\026CommitMultipleRespons" +
       "e\022\021\n\texception\030\001 
\003(\t\022\024\n\014hasException\030\002 \001" +
-      "(\010\"t\n\024CommitRequestRequest\022\022\n\nregionName" +
-      "\030\001 \002(\014\022\025\n\rtransactionId\030\002 
\002(\003\022\026\n\016partici" +
-      "pantNum\030\003 \002(\005\022\031\n\021dropTableRecorded\030\004 
\002(\010" +
-      "\"P\n\025CommitRequestResponse\022\016\n\006result\030\001 \002(" +
-      "\005\022\021\n\texception\030\002 
\001(\t\022\024\n\014hasException\030\003 \001" +
-      "(\010\"a\n\034CommitRequestMultipleRequest\022\022\n\nre",
-      "gionName\030\001 \003(\014\022\025\n\rtransactionId\030\002 
\002(\003\022\026\n" +
-      "\016participantNum\030\003 \002(\005\"X\n\035CommitRequestMu" +
-      "ltipleResponse\022\016\n\006result\030\001 \003(\005\022\021\n\texcept" 
+
-      "ion\030\002 \003(\t\022\024\n\014hasException\030\003 
\001(\010\"\\\n\027Commi" +
+      "(\010\"\207\001\n\024CommitRequestRequest\022\022\n\nregionNam" +
+      "e\030\001 \002(\014\022\025\n\rtransactionId\030\002 
\002(\003\022\021\n\tstartE" +
+      "poc\030\003 \002(\003\022\026\n\016participantNum\030\004 
\002(\005\022\031\n\021dro" +
+      "pTableRecorded\030\005 \002(\010\"P\n\025CommitRequestRes" +
+      "ponse\022\016\n\006result\030\001 
\002(\005\022\021\n\texception\030\002 \001(\t" +
+      "\022\024\n\014hasException\030\003 \001(\010\"t\n\034CommitRequestM",
+      "ultipleRequest\022\022\n\nregionName\030\001 \003(\014\022\025\n\rtr" +
+      "ansactionId\030\002 \002(\003\022\021\n\tstartEpoc\030\003 
\002(\003\022\026\n\016" +
+      "participantNum\030\004 \002(\005\"X\n\035CommitRequestMul" +
+      "tipleResponse\022\016\n\006result\030\001 \003(\005\022\021\n\texcepti" 
+
+      "on\030\002 \003(\t\022\024\n\014hasException\030\003 
\001(\010\"\201\001\n\027Commi" +
       "tIfPossibleRequest\022\022\n\nregionName\030\001 \002(\014\022\025" +
-      "\n\rtransactionId\030\002 \002(\003\022\026\n\016participantNum\030" +
-      "\003 \002(\005\"C\n\030CommitIfPossibleResponse\022\021\n\texc" +
-      "eption\030\001 \001(\t\022\024\n\014hasException\030\002 
\001(\010\"\241\001\n\025C" +
-      "heckAndDeleteRequest\022\025\n\rtransactionId\030\001 " +
-      "\002(\003\022\022\n\nregionName\030\002 
\002(\014\022\013\n\003row\030\003 \002(\014\022\016\n\006",
-      "family\030\004 \002(\014\022\021\n\tqualifier\030\005 
\002(\014\022\r\n\005value" +
-      "\030\006 \002(\014\022\036\n\006delete\030\007 
\002(\0132\016.MutationProto\"Q" +
-      "\n\026CheckAndDeleteResponse\022\016\n\006result\030\001 \002(\010" +
-      "\022\021\n\texception\030\002 \001(\t\022\024\n\014hasException\030\003 
\001(" +
-      "\010\"\233\001\n\022CheckAndPutRequest\022\025\n\rtransactionI" +
-      "d\030\001 \002(\003\022\022\n\nregionName\030\002 
\002(\014\022\013\n\003row\030\003 \002(\014" +
-      "\022\016\n\006family\030\004 \002(\014\022\021\n\tqualifier\030\005 
\002(\014\022\r\n\005v" +
-      "alue\030\006 \002(\014\022\033\n\003put\030\007 
\002(\0132\016.MutationProto\"" +
-      "N\n\023CheckAndPutResponse\022\016\n\006result\030\001 
\002(\010\022\021" +
-      "\n\texception\030\002 \001(\t\022\024\n\014hasException\030\003 
\001(\010\"",
-      "S\n\023CloseScannerRequest\022\025\n\rtransactionId\030" +
-      "\001 \002(\003\022\022\n\nregionName\030\002 
\002(\014\022\021\n\tscannerId\030\003" +
-      " \002(\003\"?\n\024CloseScannerResponse\022\021\n\texceptio" +
-      "n\030\001 \001(\t\022\024\n\014hasException\030\002 
\001(\010\"o\n\"DeleteM" +
-      "ultipleTransactionalRequest\022\025\n\rtransacti" +
-      "onId\030\001 \002(\003\022\022\n\nregionName\030\002 
\002(\014\022\036\n\006delete" +
-      "\030\003 \003(\0132\016.MutationProto\"g\n#DeleteMultiple" +
-      "TransactionalResponse\022\027\n\006result\030\001 \001(\0132\007." +
-      "Result\022\021\n\texception\030\002 \001(\t\022\024\n\014hasExceptio" +
-      "n\030\003 \001(\010\"g\n\032DeleteTransactionalRequest\022\025\n",
-      "\rtransactionId\030\001 \002(\003\022\022\n\nregionName\030\002 
\002(\014" +
-      "\022\036\n\006delete\030\003 \002(\0132\016.MutationProto\"_\n\033Dele" 
+
-      "teTransactionalResponse\022\027\n\006result\030\001 \001(\0132" +
-      "\007.Result\022\021\n\texception\030\002 
\001(\t\022\024\n\014hasExcept" +
-      "ion\030\003 \001(\010\"W\n\027GetTransactionalRequest\022\025\n\r" +
-      "transactionId\030\001 \002(\003\022\022\n\nregionName\030\002 
\002(\014\022" +
-      "\021\n\003get\030\003 \002(\0132\004.Get\"\\\n\030GetTransactionalRe" +
-      "sponse\022\027\n\006result\030\001 
\001(\0132\007.Result\022\021\n\texcep" +
-      "tion\030\002 \001(\t\022\024\n\014hasException\030\003 
\001(\010\"T\n\022Open" +
-      "ScannerRequest\022\025\n\rtransactionId\030\001 \002(\003\022\022\n",
-      "\nregionName\030\002 \002(\014\022\023\n\004scan\030\003 
\002(\0132\005.Scan\"Q" +
-      "\n\023OpenScannerResponse\022\021\n\tscannerId\030\001 \002(\003" +
-      "\022\021\n\texception\030\002 \001(\t\022\024\n\014hasException\030\003 
\001(" +
-      "\010\"\223\001\n\022PerformScanRequest\022\025\n\rtransactionI" +
-      "d\030\001 \002(\003\022\022\n\nregionName\030\002 
\002(\014\022\021\n\tscannerId" +
-      "\030\003 \002(\003\022\024\n\014numberOfRows\030\004 
\002(\005\022\024\n\014closeSca" +
-      "nner\030\005 \002(\010\022\023\n\013nextCallSeq\030\006 
\002(\003\"\214\001\n\023Perf" +
-      "ormScanResponse\022\027\n\006result\030\001 \003(\0132\007.Result" +
-      "\022\r\n\005count\030\002 \002(\003\022\023\n\013nextCallSeq\030\003 
\002(\003\022\017\n\007" +
-      "hasMore\030\004 \002(\010\022\021\n\texception\030\005 
\001(\t\022\024\n\014hasE",
-      "xception\030\006 \001(\010\"a\n\027PutTransactionalReques" +
-      "t\022\025\n\rtransactionId\030\001 
\002(\003\022\022\n\nregionName\030\002" +
-      " \002(\014\022\033\n\003put\030\003 
\002(\0132\016.MutationProto\"\\\n\030Put" +
-      "TransactionalResponse\022\027\n\006result\030\001 \001(\0132\007." +
-      "Result\022\021\n\texception\030\002 \001(\t\022\024\n\014hasExceptio" +
-      "n\030\003 \001(\010\"i\n\037PutMultipleTransactionalReque" +
-      "st\022\025\n\rtransactionId\030\001 
\002(\003\022\022\n\nregionName\030" +
-      "\002 \002(\014\022\033\n\003put\030\003 
\003(\0132\016.MutationProto\"d\n Pu" +
-      "tMultipleTransactionalResponse\022\027\n\006result" +
-      "\030\001 \001(\0132\007.Result\022\021\n\texception\030\002 
\001(\t\022\024\n\014ha",
-      "sException\030\003 \001(\010\"Q\n\026RecoveryRequestReque" +
-      "st\022\025\n\rtransactionId\030\001 
\002(\003\022\022\n\nregionName\030" +
-      "\002 \002(\014\022\014\n\004tmId\030\003 
\002(\005\"R\n\027RecoveryRequestRe" +
-      "sponse\022\016\n\006result\030\001 
\003(\003\022\021\n\texception\030\002 \001(" +
-      "\t\022\024\n\014hasException\030\003 \001(\010\"~\n\021TlogDeleteReq" +
+      "\n\rtransactionId\030\002 \002(\003\022\021\n\tstartEpoc\030\003 
\002(\003" +
+      "\022\020\n\010commitId\030\004 
\002(\003\022\026\n\016participantNum\030\005 \002" +
+      "(\005\"C\n\030CommitIfPossibleResponse\022\021\n\texcept" +
+      "ion\030\001 \001(\t\022\024\n\014hasException\030\002 
\001(\010\"\241\001\n\025Chec",
+      "kAndDeleteRequest\022\025\n\rtransactionId\030\001 \002(\003" +
+      "\022\022\n\nregionName\030\002 \002(\014\022\013\n\003row\030\003 
\002(\014\022\016\n\006fam" +
+      "ily\030\004 \002(\014\022\021\n\tqualifier\030\005 
\002(\014\022\r\n\005value\030\006 " +
+      "\002(\014\022\036\n\006delete\030\007 
\002(\0132\016.MutationProto\"Q\n\026C" +
+      "heckAndDeleteResponse\022\016\n\006result\030\001 \002(\010\022\021\n" +
+      "\texception\030\002 \001(\t\022\024\n\014hasException\030\003 
\001(\010\"\233" +
+      "\001\n\022CheckAndPutRequest\022\025\n\rtransactionId\030\001" +
+      " \002(\003\022\022\n\nregionName\030\002 
\002(\014\022\013\n\003row\030\003 \002(\014\022\016\n" +
+      "\006family\030\004 \002(\014\022\021\n\tqualifier\030\005 
\002(\014\022\r\n\005valu" +
+      "e\030\006 \002(\014\022\033\n\003put\030\007 
\002(\0132\016.MutationProto\"N\n\023",
+      "CheckAndPutResponse\022\016\n\006result\030\001 \002(\010\022\021\n\te" 
+
+      "xception\030\002 \001(\t\022\024\n\014hasException\030\003 
\001(\010\"S\n\023" +
+      "CloseScannerRequest\022\025\n\rtransactionId\030\001 \002" +
+      "(\003\022\022\n\nregionName\030\002 
\002(\014\022\021\n\tscannerId\030\003 \002(" +
+      "\003\"?\n\024CloseScannerResponse\022\021\n\texception\030\001" +
+      " \001(\t\022\024\n\014hasException\030\002 \001(\010\"o\n\"DeleteMult" +
+      "ipleTransactionalRequest\022\025\n\rtransactionI" +
+      "d\030\001 \002(\003\022\022\n\nregionName\030\002 
\002(\014\022\036\n\006delete\030\003 " +
+      "\003(\0132\016.MutationProto\"g\n#DeleteMultipleTra" +
+      "nsactionalResponse\022\027\n\006result\030\001 \001(\0132\007.Res",
+      "ult\022\021\n\texception\030\002 
\001(\t\022\024\n\014hasException\030\003" +
+      " \001(\010\"g\n\032DeleteTransactionalRequest\022\025\n\rtr" +
+      "ansactionId\030\001 \002(\003\022\022\n\nregionName\030\002 
\002(\014\022\036\n" +
+      "\006delete\030\003 \002(\0132\016.MutationProto\"_\n\033DeleteT" +
+      "ransactionalResponse\022\027\n\006result\030\001 \001(\0132\007.R" +
+      "esult\022\021\n\texception\030\002 \001(\t\022\024\n\014hasException" +
+      "\030\003 \001(\010\"W\n\027GetTransactionalRequest\022\025\n\rtra" +
+      "nsactionId\030\001 \002(\003\022\022\n\nregionName\030\002 
\002(\014\022\021\n\003" +
+      "get\030\003 \002(\0132\004.Get\"\\\n\030GetTransactionalRespo" +
+      "nse\022\027\n\006result\030\001 
\001(\0132\007.Result\022\021\n\texceptio",
+      "n\030\002 \001(\t\022\024\n\014hasException\030\003 
\001(\010\"T\n\022OpenSca" +
+      "nnerRequest\022\025\n\rtransactionId\030\001 \002(\003\022\022\n\nre" +
+      "gionName\030\002 \002(\014\022\023\n\004scan\030\003 
\002(\0132\005.Scan\"Q\n\023O" +
+      "penScannerResponse\022\021\n\tscannerId\030\001 \002(\003\022\021\n" +
+      "\texception\030\002 \001(\t\022\024\n\014hasException\030\003 
\001(\010\"\223" +
+      "\001\n\022PerformScanRequest\022\025\n\rtransactionId\030\001" +
+      " \002(\003\022\022\n\nregionName\030\002 
\002(\014\022\021\n\tscannerId\030\003 " +
+      "\002(\003\022\024\n\014numberOfRows\030\004 
\002(\005\022\024\n\014closeScanne" +
+      "r\030\005 \002(\010\022\023\n\013nextCallSeq\030\006 
\002(\003\"\214\001\n\023Perform" +
+      "ScanResponse\022\027\n\006result\030\001 \003(\0132\007.Result\022\r\n",
+      "\005count\030\002 \002(\003\022\023\n\013nextCallSeq\030\003 
\002(\003\022\017\n\007has" +
+      "More\030\004 \002(\010\022\021\n\texception\030\005 
\001(\t\022\024\n\014hasExce" +
+      "ption\030\006 \001(\010\"a\n\027PutTransactionalRequest\022\025" +
+      "\n\rtransactionId\030\001 \002(\003\022\022\n\nregionName\030\002 
\002(" +
+      "\014\022\033\n\003put\030\003 
\002(\0132\016.MutationProto\"\\\n\030PutTra" +
+      "nsactionalResponse\022\027\n\006result\030\001 \001(\0132\007.Res" +
+      "ult\022\021\n\texception\030\002 
\001(\t\022\024\n\014hasException\030\003" +
+      " \001(\010\"i\n\037PutMultipleTransactionalRequest\022" +
+      "\025\n\rtransactionId\030\001 \002(\003\022\022\n\nregionName\030\002 
\002" +
+      "(\014\022\033\n\003put\030\003 \003(\0132\016.MutationProto\"d\n PutMu",
+      "ltipleTransactionalResponse\022\027\n\006result\030\001 " +
+      "\001(\0132\007.Result\022\021\n\texception\030\002 
\001(\t\022\024\n\014hasEx" +
+      "ception\030\003 \001(\010\"Q\n\026RecoveryRequestRequest\022" +
+      "\025\n\rtransactionId\030\001 \002(\003\022\022\n\nregionName\030\002 
\002" +
+      "(\014\022\014\n\004tmId\030\003 \002(\005\"R\n\027RecoveryRequestRespo" 
+
+      "nse\022\016\n\006result\030\001 \003(\003\022\021\n\texception\030\002 
\001(\t\022\024" +
+      "\n\014hasException\030\003 \001(\010\"~\n\021TlogDeleteReques" +
+      "t\022\022\n\nregionName\030\001 
\002(\014\022\025\n\rtransactionId\030\002" +
+      " \002(\003\022\023\n\004scan\030\003 
\002(\0132\005.Scan\022\023\n\013auditSeqNum" +
+      "\030\004 \002(\003\022\024\n\014ageCommitted\030\005 
\002(\010\"e\n\022TlogDele",
+      "teResponse\022\027\n\006result\030\001 
\003(\0132\007.Result\022\r\n\005c" +
+      "ount\030\002 \002(\003\022\021\n\texception\030\003 
\001(\t\022\024\n\014hasExce" +
+      "ption\030\004 
\001(\010\"\273\001\n\020TlogWriteRequest\022\022\n\nregi" +
+      "onName\030\001 \002(\014\022\025\n\rtransactionId\030\002 
\002(\003\022\033\n\003p" +
+      "ut\030\003 \002(\0132\016.MutationProto\022\013\n\003row\030\004 
\002(\014\022\016\n" +
+      "\006family\030\005 \002(\014\022\021\n\tqualifier\030\006 
\002(\014\022\r\n\005valu" +
+      "e\030\007 \002(\014\022\020\n\010commitId\030\010 
\002(\003\022\016\n\006forced\030\t \001(" +
+      "\010\"L\n\021TlogWriteResponse\022\016\n\006result\030\001 
\003(\003\022\021" +
+      "\n\texception\030\002 \001(\t\022\024\n\014hasException\030\003 
\001(\010\"" +
+      "\321\001\n(TlogTransactionStatesFromIntervalReq",
       "uest\022\022\n\nregionName\030\001 \002(\014\022\025\n\rtransactionI" +
-      "d\030\002 \002(\003\022\023\n\004scan\030\003 
\002(\0132\005.Scan\022\023\n\013auditSeq" +
-      "Num\030\004 \002(\003\022\024\n\014ageCommitted\030\005 
\002(\010\"e\n\022TlogD" +
-      "eleteResponse\022\027\n\006result\030\001 \003(\0132\007.Result\022\r" +
-      "\n\005count\030\002 \002(\003\022\021\n\texception\030\003 
\001(\t\022\024\n\014hasE",
-      "xception\030\004 
\001(\010\"\273\001\n\020TlogWriteRequest\022\022\n\nr" +
-      "egionName\030\001 \002(\014\022\025\n\rtransactionId\030\002 
\002(\003\022\033" +
-      "\n\003put\030\003 \002(\0132\016.MutationProto\022\013\n\003row\030\004 
\002(\014" +
-      "\022\016\n\006family\030\005 \002(\014\022\021\n\tqualifier\030\006 
\002(\014\022\r\n\005v" +
-      "alue\030\007 \002(\014\022\020\n\010commitId\030\010 
\002(\003\022\016\n\006forced\030\t" +
-      " \001(\010\"L\n\021TlogWriteResponse\022\016\n\006result\030\001 \003(" 
+
-      "\003\022\021\n\texception\030\002 
\001(\t\022\024\n\014hasException\030\003 \001" +
-      "(\010\"\321\001\n(TlogTransactionStatesFromInterval" +
-      "Request\022\022\n\nregionName\030\001 \002(\014\022\025\n\rtransacti" +
-      "onId\030\002 \002(\003\022\021\n\tclusterId\030\003 
\002(\003\022\023\n\013auditSe",
-      "qNum\030\004 \002(\003\022\021\n\tscannerId\030\005 
\002(\003\022\024\n\014numberO" +
-      "fRows\030\006 \002(\005\022\023\n\013nextCallSeq\030\007 
\002(\003\022\024\n\014clos" +
-      "eScanner\030\010 \002(\010\"\242\001\n)TlogTransactionStates" +
-      "FromIntervalResponse\022\027\n\006result\030\001 \003(\0132\007.R" +
-      "esult\022\r\n\005count\030\002 
\002(\003\022\023\n\013nextCallSeq\030\003 \002(" +
-      "\003\022\017\n\007hasMore\030\004 
\002(\010\022\021\n\texception\030\005 \001(\t\022\024\n" +
-      "\014hasException\030\006 \001(\010\"\243\001\n\035TransactionalAgg" +
-      "regateRequest\022\022\n\nregionName\030\001 \002(\014\022\025\n\rtra" +
-      "nsactionId\030\002 \002(\003\022\036\n\026interpreter_class_na" +
-      "me\030\003 \002(\t\022\023\n\004scan\030\004 
\002(\0132\005.Scan\022\"\n\032interpr",
-      "eter_specific_bytes\030\005 \001(\014\"I\n\036Transaction" +
-      "alAggregateResponse\022\022\n\nfirst_part\030\003 \003(\014\022" +
-      "\023\n\013second_part\030\004 \001(\014\"c\n\022TransactionPersi" +
-      "st\022\016\n\006txById\030\001 
\003(\003\022\024\n\014seqNoListSeq\030\002 \003(\003" +
-      "\022\024\n\014seqNoListTxn\030\003 
\003(\003\022\021\n\tnextSeqId\030\004 \002(" +
-      "\003\"\372\001\n\023TransactionStateMsg\022\014\n\004txId\030\001 
\002(\003\022" +
-      "\033\n\003put\030\002 
\003(\0132\016.MutationProto\022\036\n\006delete\030\003" +
-      " \003(\0132\016.MutationProto\022\020\n\010putOrDel\030\004 
\003(\010\022\023" +
-      "\n\013txnsToCheck\030\005 \003(\003\022\023\n\013startSeqNum\030\006 
\002(\003" +
-      "\022\016\n\006seqNum\030\007 \002(\003\022\020\n\010logSeqId\030\010 
\002(\003\022\022\n\nre",
-      "instated\030\t \002(\010\022\016\n\006status\030\n 
\002(\005\022\026\n\016commit" +
-      "Progress\030\013 \002(\0052\262\020\n\020TrxRegionService\022G\n\020a" +
-      "bortTransaction\022\030.AbortTransactionReques" +
-      "t\032\031.AbortTransactionResponse\022_\n\030abortTra" +
-      "nsactionMultiple\022 .AbortTransactionMulti" +
-      "pleRequest\032!.AbortTransactionMultipleRes" +
-      "ponse\022G\n\020beginTransaction\022\030.BeginTransac" +
-      "tionRequest\032\031.BeginTransactionResponse\022A" +
-      "\n\016checkAndDelete\022\026.CheckAndDeleteRequest" +
-      "\032\027.CheckAndDeleteResponse\0228\n\013checkAndPut",
-      "\022\023.CheckAndPutRequest\032\024.CheckAndPutRespo" +
-      "nse\022;\n\014closeScanner\022\024.CloseScannerReques" +
-      "t\032\025.CloseScannerResponse\022)\n\006commit\022\016.Com" +
-      "mitRequest\032\017.CommitResponse\022G\n\020commitIfP" +
-      "ossible\022\030.CommitIfPossibleRequest\032\031.Comm" +
-      "itIfPossibleResponse\022V\n\025commitRequestMul" +
-      "tiple\022\035.CommitRequestMultipleRequest\032\036.C" +
-      "ommitRequestMultipleResponse\022A\n\016commitMu" +
-      "ltiple\022\026.CommitMultipleRequest\032\027.CommitM" +
-      "ultipleResponse\022>\n\rcommitRequest\022\025.Commi",
-      "tRequestRequest\032\026.CommitRequestResponse\022" +
-      "C\n\006delete\022\033.DeleteTransactionalRequest\032\034" +
-      ".DeleteTransactionalResponse\022[\n\016deleteMu" +
-      "ltiple\022#.DeleteMultipleTransactionalRequ" +
-      "est\032$.DeleteMultipleTransactionalRespons" +
-      "e\022:\n\003get\022\030.GetTransactionalRequest\032\031.Get" +
-      "TransactionalResponse\0228\n\013performScan\022\023.P" +
-      "erformScanRequest\032\024.PerformScanResponse\022" +
-      "8\n\013openScanner\022\023.OpenScannerRequest\032\024.Op" +
-      "enScannerResponse\022:\n\003put\022\030.PutTransactio",
-      "nalRequest\032\031.PutTransactionalResponse\022R\n" +
-      "\013putMultiple\022 .PutMultipleTransactionalR" +
-      "equest\032!.PutMultipleTransactionalRespons" +
-      "e\022D\n\017recoveryRequest\022\027.RecoveryRequestRe" +
-      "quest\032\030.RecoveryRequestResponse\022<\n\021delet" +
-      "eTlogEntries\022\022.TlogDeleteRequest\032\023.TlogD" +
-      "eleteResponse\0220\n\007putTlog\022\021.TlogWriteRequ" +
-      "est\032\022.TlogWriteResponse\022w\n\036getTransactio" +
-      "nStatesPriorToAsn\022).TlogTransactionState" +
-      "sFromIntervalRequest\032*.TlogTransactionSt",
-      "atesFromIntervalResponse\022I\n\006GetMax\022\036.Tra" +
+      "d\030\002 \002(\003\022\021\n\tclusterId\030\003 
\002(\003\022\023\n\013auditSeqNu" +
+      "m\030\004 \002(\003\022\021\n\tscannerId\030\005 
\002(\003\022\024\n\014numberOfRo" +
+      "ws\030\006 \002(\005\022\023\n\013nextCallSeq\030\007 
\002(\003\022\024\n\014closeSc" +
+      "anner\030\010 \002(\010\"\242\001\n)TlogTransactionStatesFro" +
+      "mIntervalResponse\022\027\n\006result\030\001 \003(\0132\007.Resu" +
+      "lt\022\r\n\005count\030\002 \002(\003\022\023\n\013nextCallSeq\030\003 
\002(\003\022\017" +
+      "\n\007hasMore\030\004 \002(\010\022\021\n\texception\030\005 
\001(\t\022\024\n\014ha" +
+      "sException\030\006 \001(\010\"\243\001\n\035TransactionalAggreg" +
+      "ateRequest\022\022\n\nregionName\030\001 \002(\014\022\025\n\rtransa",
+      "ctionId\030\002 \002(\003\022\036\n\026interpreter_class_name\030" +
+      "\003 \002(\t\022\023\n\004scan\030\004 
\002(\0132\005.Scan\022\"\n\032interprete" +
+      "r_specific_bytes\030\005 \001(\014\"I\n\036TransactionalA" +
+      "ggregateResponse\022\022\n\nfirst_part\030\003 \003(\014\022\023\n\013" 
+
+      "second_part\030\004 \001(\014\"w\n\022TransactionPersist\022" +
+      "\016\n\006txById\030\001 \003(\003\022\024\n\014seqNoListSeq\030\002 
\003(\003\022\024\n" +
+      "\014seqNoListTxn\030\003 \003(\003\022\021\n\tnextSeqId\030\004 
\002(\003\022\022" +
+      "\n\nonlineEpoc\030\005 \002(\003\"\372\001\n\023TransactionStateM" +
+      "sg\022\014\n\004txId\030\001 \002(\003\022\033\n\003put\030\002 
\003(\0132\016.Mutation" +
+      "Proto\022\036\n\006delete\030\003 
\003(\0132\016.MutationProto\022\020\n",
+      "\010putOrDel\030\004 \003(\010\022\023\n\013txnsToCheck\030\005 
\003(\003\022\023\n\013" +
+      "startSeqNum\030\006 \002(\003\022\016\n\006seqNum\030\007 
\002(\003\022\020\n\010log" +
+      "SeqId\030\010 \002(\003\022\022\n\nreinstated\030\t 
\002(\010\022\016\n\006statu" +
+      "s\030\n \002(\005\022\026\n\016commitProgress\030\013 
\002(\0052\262\020\n\020TrxR" +
+      "egionService\022G\n\020abortTransaction\022\030.Abort" +
+      "TransactionRequest\032\031.AbortTransactionRes" +
+      "ponse\022_\n\030abortTransactionMultiple\022 .Abor" +
+      "tTransactionMultipleRequest\032!.AbortTrans" +
+      "actionMultipleResponse\022G\n\020beginTransacti" +
+      "on\022\030.BeginTransactionRequest\032\031.BeginTran",
+      "sactionResponse\022A\n\016checkAndDelete\022\026.Chec" +
+      "kAndDeleteRequest\032\027.CheckAndDeleteRespon" +
+      "se\0228\n\013checkAndPut\022\023.CheckAndPutRequest\032\024" +
+      ".CheckAndPutResponse\022;\n\014closeScanner\022\024.C" +
+      "loseScannerRequest\032\025.CloseScannerRespons" +
+      "e\022)\n\006commit\022\016.CommitRequest\032\017.CommitResp" +
+      "onse\022G\n\020commitIfPossible\022\030.CommitIfPossi" +
+      "bleRequest\032\031.CommitIfPossibleResponse\022V\n" +
+      "\025commitRequestMultiple\022\035.CommitRequestMu" +
+      "ltipleRequest\032\036.CommitRequestMultipleRes",
+      "ponse\022A\n\016commitMultiple\022\026.CommitMultiple" +
+      "Request\032\027.CommitMultipleResponse\022>\n\rcomm" +
+      "itRequest\022\025.CommitRequestRequest\032\026.Commi" +
+      "tRequestResponse\022C\n\006delete\022\033.DeleteTrans" +
+      "actionalRequest\032\034.DeleteTransactionalRes" +
+      "ponse\022[\n\016deleteMultiple\022#.DeleteMultiple" +
+      "TransactionalRequest\032$.DeleteMultipleTra" +
+      "nsactionalResponse\022:\n\003get\022\030.GetTransacti" +
+      "onalRequest\032\031.GetTransactionalResponse\0228" +
+      "\n\013performScan\022\023.PerformScanRequest\032\024.Per",
+      "formScanResponse\0228\n\013openScanner\022\023.OpenSc" +
+      "annerRequest\032\024.OpenScannerResponse\022:\n\003pu" +
+      "t\022\030.PutTransactionalRequest\032\031.PutTransac" +
+      "tionalResponse\022R\n\013putMultiple\022 .PutMulti" +
+      "pleTransactionalRequest\032!.PutMultipleTra" +
+      "nsactionalResponse\022D\n\017recoveryRequest\022\027." +
+      "RecoveryRequestRequest\032\030.RecoveryRequest" +
+      "Response\022<\n\021deleteTlogEntries\022\022.TlogDele" +
+      "teRequest\032\023.TlogDeleteResponse\0220\n\007putTlo" +
+      "g\022\021.TlogWriteRequest\032\022.TlogWriteResponse",
+      "\022w\n\036getTransactionStatesPriorToAsn\022).Tlo" +
+      "gTransactionStatesFromIntervalRequest\032*." +
+      "TlogTransactionStatesFromIntervalRespons" +
+      "e\022I\n\006GetMax\022\036.TransactionalAggregateRequ" +
+      "est\032\037.TransactionalAggregateResponse\022I\n\006" +
+      "GetMin\022\036.TransactionalAggregateRequest\032\037" +
+      ".TransactionalAggregateResponse\022I\n\006GetSu" +
+      "m\022\036.TransactionalAggregateRequest\032\037.Tran" +
+      "sactionalAggregateResponse\022L\n\tGetRowNum\022" +
+      "\036.TransactionalAggregateRequest\032\037.Transa",
+      "ctionalAggregateResponse\022I\n\006GetAvg\022\036.Tra" +
       "nsactionalAggregateRequest\032\037.Transaction" +
-      "alAggregateResponse\022I\n\006GetMin\022\036.Transact" +
+      "alAggregateResponse\022I\n\006GetStd\022\036.Transact" +
       "ionalAggregateRequest\032\037.TransactionalAgg" +
-      "regateResponse\022I\n\006GetSum\022\036.Transactional" +
-      "AggregateRequest\032\037.TransactionalAggregat" +
-      "eResponse\022L\n\tGetRowNum\022\036.TransactionalAg" +
-      "gregateRequest\032\037.TransactionalAggregateR" +
-      "esponse\022I\n\006GetAvg\022\036.TransactionalAggrega" +
-      "teRequest\032\037.TransactionalAggregateRespon",
-      "se\022I\n\006GetStd\022\036.TransactionalAggregateReq" +
-      "uest\032\037.TransactionalAggregateResponse\022L\n" +
-      "\tGetMedian\022\036.TransactionalAggregateReque" +
-      "st\032\037.TransactionalAggregateResponseBS\n;o" +
-      "rg.apache.hadoop.hbase.coprocessor.trans" +
-      "actional.generatedB\017TrxRegionProtosH\001\210\001\001"
+      "regateResponse\022L\n\tGetMedian\022\036.Transactio" +
+      "nalAggregateRequest\032\037.TransactionalAggre" +
+      "gateResponseBS\n;org.apache.hadoop.hbase." +
+      "coprocessor.transactional.generatedB\017Trx" +
+      "RegionProtosH\001\210\001\001"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner 
assigner =
       new 
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@@ -40017,7 +40444,7 @@ public final class TrxRegionProtos {
           internal_static_CommitRequestRequest_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_CommitRequestRequest_descriptor,
-              new java.lang.String[] { "RegionName", "TransactionId", 
"ParticipantNum", "DropTableRecorded", });
+              new java.lang.String[] { "RegionName", "TransactionId", 
"StartEpoc", "ParticipantNum", "DropTableRecorded", });
           internal_static_CommitRequestResponse_descriptor =
             getDescriptor().getMessageTypes().get(11);
           internal_static_CommitRequestResponse_fieldAccessorTable = new
@@ -40029,7 +40456,7 @@ public final class TrxRegionProtos {
           internal_static_CommitRequestMultipleRequest_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_CommitRequestMultipleRequest_descriptor,
-              new java.lang.String[] { "RegionName", "TransactionId", 
"ParticipantNum", });
+              new java.lang.String[] { "RegionName", "TransactionId", 
"StartEpoc", "ParticipantNum", });
           internal_static_CommitRequestMultipleResponse_descriptor =
             getDescriptor().getMessageTypes().get(13);
           internal_static_CommitRequestMultipleResponse_fieldAccessorTable = 
new
@@ -40041,7 +40468,7 @@ public final class TrxRegionProtos {
           internal_static_CommitIfPossibleRequest_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_CommitIfPossibleRequest_descriptor,
-              new java.lang.String[] { "RegionName", "TransactionId", 
"ParticipantNum", });
+              new java.lang.String[] { "RegionName", "TransactionId", 
"StartEpoc", "CommitId", "ParticipantNum", });
           internal_static_CommitIfPossibleResponse_descriptor =
             getDescriptor().getMessageTypes().get(15);
           internal_static_CommitIfPossibleResponse_fieldAccessorTable = new
@@ -40233,7 +40660,7 @@ public final class TrxRegionProtos {
           internal_static_TransactionPersist_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_TransactionPersist_descriptor,
-              new java.lang.String[] { "TxById", "SeqNoListSeq", 
"SeqNoListTxn", "NextSeqId", });
+              new java.lang.String[] { "TxById", "SeqNoListSeq", 
"SeqNoListTxn", "NextSeqId", "OnlineEpoc", });
           internal_static_TransactionStateMsg_descriptor =
             getDescriptor().getMessageTypes().get(47);
           internal_static_TransactionStateMsg_fieldAccessorTable = new

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/9fc659ab/core/sqf/src/seatrans/hbase-trx/src/main/protobuf/TrxRegion.proto
----------------------------------------------------------------------
diff --git a/core/sqf/src/seatrans/hbase-trx/src/main/protobuf/TrxRegion.proto 
b/core/sqf/src/seatrans/hbase-trx/src/main/protobuf/TrxRegion.proto
index ecfe69b..d37bb6d 100755
--- a/core/sqf/src/seatrans/hbase-trx/src/main/protobuf/TrxRegion.proto
+++ b/core/sqf/src/seatrans/hbase-trx/src/main/protobuf/TrxRegion.proto
@@ -92,8 +92,9 @@ message CommitMultipleResponse {
 message CommitRequestRequest{
   required bytes regionName = 1;
   required int64 transactionId = 2;
-  required int32 participantNum = 3;
-  required bool dropTableRecorded = 4;
+  required int64 startEpoc = 3;
+  required int32 participantNum = 4;
+  required bool dropTableRecorded = 5;
 }
 
 message CommitRequestResponse {
@@ -105,7 +106,8 @@ message CommitRequestResponse {
 message CommitRequestMultipleRequest{
   repeated bytes regionName = 1;
   required int64 transactionId = 2;
-  required int32 participantNum = 3;
+  required int64 startEpoc = 3;
+  required int32 participantNum = 4;
 }
 
 message CommitRequestMultipleResponse {
@@ -117,7 +119,9 @@ message CommitRequestMultipleResponse {
 message CommitIfPossibleRequest{
   required bytes regionName = 1;
   required int64 transactionId = 2;
-  required int32 participantNum = 3;
+  required int64 startEpoc = 3;
+  required int64 commitId = 4;
+  required int32 participantNum = 5;
 }
 
 message CommitIfPossibleResponse {
@@ -355,6 +359,7 @@ message TransactionPersist {
   repeated int64 seqNoListSeq = 2;
   repeated int64 seqNoListTxn = 3;
   required int64 nextSeqId = 4;
+  required int64 onlineEpoc = 5;
 }
 
 message TransactionStateMsg {

Reply via email to