You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by db...@apache.org on 2016/05/18 18:05:49 UTC

[3/4] incubator-trafodion git commit: [TRAFODION-1988] Better Java exception handling in Trafodion

[TRAFODION-1988] Better Java exception handling in Trafodion


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

Branch: refs/heads/master
Commit: 34abbbe70de21475d3a9e27ff74b7c290bd617c6
Parents: dcfc8e6
Author: selvaganesang <se...@esgyn.com>
Authored: Wed May 11 21:58:55 2016 +0000
Committer: selvaganesang <se...@esgyn.com>
Committed: Thu May 12 03:06:46 2016 +0000

----------------------------------------------------------------------
 .../hbase/client/transactional/RMInterface.java |  43 +-
 .../RetryTransactionException.java              |  54 ++
 .../RollbackUnsuccessfulException.java          |  62 ++
 .../transactional/SsccTransactionalTable.java   |  34 +-
 .../hbase/client/transactional/TmDDL.java       |  24 +-
 .../transactional/TransactionManager.java       | 626 ++++++++-----------
 .../TransactionalScanner.java.tmpl              |  97 ++-
 .../transactional/TransactionalTable.java       |  46 +-
 .../transactional/IdTmException.java            |  14 +
 .../java/org/trafodion/dtm/HBaseTxClient.java   |   7 +-
 .../java/org/trafodion/sql/ByteArrayList.java   |  54 --
 .../java/org/trafodion/sql/HBaseClient.java     |  76 +--
 .../java/org/trafodion/sql/HBulkLoadClient.java |  42 +-
 .../java/org/trafodion/sql/HTableClient.java    |  18 +-
 .../main/java/org/trafodion/sql/HiveClient.java |  59 +-
 .../java/org/trafodion/sql/ResultIterator.java  | 133 ----
 .../org/trafodion/sql/ResultKeyValueList.java   | 100 ---
 .../java/org/trafodion/sql/RowToInsert.java     |  44 --
 .../java/org/trafodion/sql/RowsToInsert.java    |  57 --
 .../org/trafodion/sql/SequenceFileWriter.java   | 129 +---
 .../java/org/trafodion/sql/StringArrayList.java |  47 --
 21 files changed, 515 insertions(+), 1251 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/34abbbe7/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/RMInterface.java
----------------------------------------------------------------------
diff --git a/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/RMInterface.java b/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/RMInterface.java
index a0e92ff..df74a45 100644
--- a/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/RMInterface.java
+++ b/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/RMInterface.java
@@ -163,8 +163,8 @@ public class RMInterface {
                  idServer.id(ID_TM_SERVER_TIMEOUT, startId);
                  if (LOG.isTraceEnabled()) LOG.trace("registerTransaction idServer.id returned: " + startId.val);
               } catch (IdTmException exc) {
-                 LOG.error("registerTransaction: IdTm threw exception " + exc);
-                 throw new IOException("registerTransaction: IdTm threw exception " + exc);
+                 LOG.error("registerTransaction: IdTm threw exception " , exc);
+                 throw new IOException("registerTransaction: IdTm threw exception ", exc);
               }
               startIdVal = startId.val;
            }
@@ -224,63 +224,30 @@ public class RMInterface {
     public void createTable(HTableDescriptor desc, byte[][] keys, int numSplits, int keyLength, long transID) throws IOException {
 
         if (LOG.isTraceEnabled()) LOG.trace("createTable ENTER: ");
-
-        try {
             byte[] lv_byte_desc = desc.toByteArray();
             byte[] lv_byte_tblname = desc.getNameAsString().getBytes();
             if (LOG.isTraceEnabled()) LOG.trace("createTable: htabledesc bytearray: " + lv_byte_desc + "desc in hex: " + Hex.encodeHexString(lv_byte_desc));
             createTableReq(lv_byte_desc, keys, numSplits, keyLength, transID, lv_byte_tblname);
-        } catch (Exception e) {
-            if (LOG.isTraceEnabled()) LOG.trace("Unable to createTable or convert table descriptor to byte array " + e);
-            StringWriter sw = new StringWriter();
-            PrintWriter pw = new PrintWriter(sw);
-            e.printStackTrace(pw);
-            LOG.error("desc.ByteArray error " + sw.toString());
-            throw new IOException("createTable exception. Unable to create table.");
-        }
     }
 
     public void truncateTableOnAbort(String tblName, long transID) throws IOException {
         if (LOG.isTraceEnabled()) LOG.trace("truncateTableOnAbort ENTER: ");
-
-        try {
             byte[] lv_byte_tblName = tblName.getBytes();
             truncateOnAbortReq(lv_byte_tblName, transID);
-        } catch (Exception e) {
-            if (LOG.isTraceEnabled()) LOG.trace("Unable to truncateTableOnAbort" + e);
-            StringWriter sw = new StringWriter();
-            PrintWriter pw = new PrintWriter(sw);
-            e.printStackTrace(pw);
-            LOG.error("truncateTableOnAbort error: " + sw.toString());
-            throw new IOException("truncateTableOnAbort exception. Unable to create table.");
-        }
     }
 
     public void dropTable(String tblName, long transID) throws IOException {
         if (LOG.isTraceEnabled()) LOG.trace("dropTable ENTER: ");
 
-        try {
             byte[] lv_byte_tblname = tblName.getBytes();
             dropTableReq(lv_byte_tblname, transID);
-        } catch (Exception e) {
-            if (LOG.isTraceEnabled()) LOG.trace("Unable to dropTable " + e);
-            StringWriter sw = new StringWriter();
-            PrintWriter pw = new PrintWriter(sw);
-            e.printStackTrace(pw);
-            LOG.error("dropTable error " + sw.toString());
-        }
     }
 
     public void alter(String tblName, Object[] tableOptions, long transID) throws IOException {
         if (LOG.isTraceEnabled()) LOG.trace("alter ENTER: ");
 
-        try {
             byte[] lv_byte_tblname = tblName.getBytes();
             alterTableReq(lv_byte_tblname, tableOptions, transID);
-        } catch (Exception e) {
-            if (LOG.isTraceEnabled()) LOG.trace("Unable to alter table, exception: " + e);
-            throw new IOException("alter exception. Unable to create table.");
-        }
     }   
 
     static public void clearTransactionStates(final long transactionID) {
@@ -294,13 +261,7 @@ public class RMInterface {
     static public synchronized void unregisterTransaction(final long transactionID) {
       TransactionState ts = null;
       if (LOG.isTraceEnabled()) LOG.trace("Enter unregisterTransaction txid: " + transactionID);
-      try {
         ts = mapTransactionStates.remove(transactionID);
-      } catch (Exception e) {
-        LOG.warn("Ignoring exception. mapTransactionStates.remove for transid " + transactionID + 
-                 " failed with exception " + e);
-        return;
-      }
       if (ts == null) {
         LOG.warn("mapTransactionStates.remove did not find transid " + transactionID);
       }

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/34abbbe7/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/RetryTransactionException.java
----------------------------------------------------------------------
diff --git a/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/RetryTransactionException.java b/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/RetryTransactionException.java
new file mode 100644
index 0000000..e767bb3
--- /dev/null
+++ b/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/RetryTransactionException.java
@@ -0,0 +1,54 @@
+/**
+* @@@ 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 @@@
+**/
+
+package org.apache.hadoop.hbase.client.transactional;
+
+import java.io.IOException;
+/**
+ * Thrown if a region server is passed an unknown transaction id
+ */
+public class RetryTransactionException extends IOException {
+
+  private static final long serialVersionUID = 698575374929591089L;
+
+  /** constructor */
+  public RetryTransactionException() {
+    super();
+  }
+
+  /**
+   * Constructor
+   * @param s message
+   */
+  public RetryTransactionException(String s) {
+    super(s);
+  }
+
+  /**
+   * Constructor
+   * @param s message
+   */
+  public RetryTransactionException(String s, Throwable t) {
+    super(s, t);
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/34abbbe7/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/RollbackUnsuccessfulException.java
----------------------------------------------------------------------
diff --git a/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/RollbackUnsuccessfulException.java b/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/RollbackUnsuccessfulException.java
new file mode 100644
index 0000000..fbf8d6d
--- /dev/null
+++ b/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/RollbackUnsuccessfulException.java
@@ -0,0 +1,62 @@
+/**
+* @@@ 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 @@@
+**/
+
+package org.apache.hadoop.hbase.client.transactional;
+
+import java.io.IOException;
+
+/** Thrown when a transaction cannot be committed. 
+ * 
+ */
+public class RollbackUnsuccessfulException extends IOException {
+
+  private static final long serialVersionUID = 7062921444531109202L;
+
+  /** Default Constructor */
+  public RollbackUnsuccessfulException() {
+    super();
+  }
+
+  /**
+   * @param arg0 message
+   * @param arg1 cause
+   */
+  public RollbackUnsuccessfulException(String arg0, Throwable arg1) {
+    super(arg0, arg1);
+  }
+
+  /**
+   * @param arg0 message
+   */
+  public RollbackUnsuccessfulException(String arg0) {
+    super(arg0);
+  }
+
+  /**
+   * @param arg0 cause
+   */
+  public RollbackUnsuccessfulException(Throwable arg0) {
+    super(arg0);
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/34abbbe7/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/SsccTransactionalTable.java
----------------------------------------------------------------------
diff --git a/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/SsccTransactionalTable.java b/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/SsccTransactionalTable.java
index 31e6d1b..3735b63 100644
--- a/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/SsccTransactionalTable.java
+++ b/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/SsccTransactionalTable.java
@@ -157,13 +157,6 @@ public class SsccTransactionalTable extends HTable implements TransactionalTable
         super( tableName,connection, threadPool);       
     }
 
-    public void resetConnection() throws IOException {
-        if (LOG.isDebugEnabled()) LOG.debug("Resetting connection for " + this.getTableDescriptor().getTableName());
-        HConnection conn = this.getConnection();
-        conn = HConnectionManager.createConnection(this.getConfiguration());
-    }
-
-
     private void addLocation(final TransactionState transactionState, HRegionLocation location) {
       if (LOG.isTraceEnabled()) LOG.trace("addLocation ENTRY");
       if (transactionState.addRegion(location)){
@@ -215,8 +208,7 @@ public class SsccTransactionalTable extends HTable implements TransactionalTable
           try {
             result = super.coprocessorService(SsccRegionService.class, get.getRow(), get.getRow(), callable);
           } catch (Throwable e) {
-            e.printStackTrace();
-            throw new IOException("ERROR while calling coprocessor get");
+            throw new IOException("ERROR while calling coprocessor get", e);
           }            
           Collection<SsccGetTransactionalResponse> results = result.values();
           // Should only be one result, if more than one. Can't handle.
@@ -275,12 +267,8 @@ public class SsccTransactionalTable extends HTable implements TransactionalTable
             try {
               result = super.coprocessorService(SsccRegionService.class, row, row, callable);
 
-            } catch (ServiceException e) {
-              e.printStackTrace();
-              throw new IOException();
             } catch (Throwable t) {
-              t.printStackTrace();
-              throw new IOException();
+              throw new IOException("ERROR while calling coprocessor delete ",t);
             } 
             Collection<SsccDeleteTransactionalResponse> results = result.values();
             //GetTransactionalResponse[] resultArray = (GetTransactionalResponse[]) results.toArray();
@@ -342,8 +330,7 @@ public class SsccTransactionalTable extends HTable implements TransactionalTable
         try {
           result = super.coprocessorService(SsccRegionService.class, put.getRow(), put.getRow(), callable);
         } catch (Throwable e) {
-          e.printStackTrace();
-          throw new IOException("ERROR while calling coprocessor put " + e);
+          throw new IOException("ERROR while calling coprocessor put ", e);
         }
         Collection<SsccPutTransactionalResponse> results = result.values();
         SsccPutTransactionalResponse[] resultArray = new SsccPutTransactionalResponse[results.size()]; 
@@ -425,8 +412,7 @@ public class SsccTransactionalTable extends HTable implements TransactionalTable
       try {
         result = super.coprocessorService(SsccRegionService.class, delete.getRow(), delete.getRow(), callable);
       } catch (Throwable e) {
-        e.printStackTrace();
-        throw new IOException("ERROR while calling coprocessor checkAndDelete");
+        throw new IOException("ERROR while calling coprocessor checkAndDelete", e);
       }
 
       Collection<SsccCheckAndDeleteResponse> results = result.values();
@@ -504,11 +490,7 @@ if (LOG.isTraceEnabled()) LOG.trace("checkAndPut, seting request startid: " + tr
       try {
          result = super.coprocessorService(SsccRegionService.class, put.getRow(), put.getRow(), callable);
       } catch (Throwable e) {
-          StringWriter sw = new StringWriter();
-          PrintWriter pw = new PrintWriter(sw);
-          e.printStackTrace(pw);
-          //sw.toString();
-        throw new IOException("ERROR while calling coprocessor checkAndPut" + sw.toString());
+        throw new IOException("ERROR while calling coprocessor checkAndPut", e);
       }
       Collection<SsccCheckAndPutResponse> results = result.values();
       // Should only be one result, if more than one. Can't handle.
@@ -581,8 +563,7 @@ if (LOG.isTraceEnabled()) LOG.trace("checkAndPut, seting request startid: " + tr
                                                    entry.getValue().get(0).getRow(),
                                                    callable);
  	      } catch (Throwable e) {
- 	        e.printStackTrace();
-	        throw new IOException("ERROR while calling coprocessor delete");
+	        throw new IOException("ERROR while calling coprocessor delete", e);
  	      }
 	      if(result.size() > 1) {
              LOG.error("result size for multiple delete:" + result.size());
@@ -660,8 +641,7 @@ if (LOG.isTraceEnabled()) LOG.trace("checkAndPut, seting request startid: " + tr
                                           entry.getValue().get(0).getRow(),
                                           callable);
       } catch (Throwable e) {
-        e.printStackTrace();
-        throw new IOException("ERROR while calling coprocessor put");
+        throw new IOException("ERROR while calling coprocessor put", e);
       }
       Collection<SsccPutMultipleTransactionalResponse> results = result.values();
       SsccPutMultipleTransactionalResponse[] resultArray = new SsccPutMultipleTransactionalResponse[results.size()];

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/34abbbe7/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/TmDDL.java
----------------------------------------------------------------------
diff --git a/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/TmDDL.java b/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/TmDDL.java
index d0922e5..783b70c 100644
--- a/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/TmDDL.java
+++ b/core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/TmDDL.java
@@ -103,7 +103,7 @@ public class TmDDL {
       table = new HTable(config, tablename);
    }
 
-   public void putRow(final long transid, final String Operation, final String tableName) throws Exception {
+   public void putRow(final long transid, final String Operation, final String tableName) throws IOException {
 
         long threadId = Thread.currentThread().getId();
         if (LOG.isTraceEnabled()) LOG.trace("TmDDL putRow Operation, TxID: " + transid + "Thread ID:" + threadId 
@@ -116,14 +116,7 @@ public class TmDDL {
 
         //Retrieve the row if it exists so we can append.
         Get g = new Get(Bytes.toBytes(transid));
-        try {
-                r = table.get(g);
-        }
-        catch(Exception e){
-          LOG.error("TmDDL putRow method, Get Exception TxID:" + transid + "Exception:" + e);
-          throw e;
-        }
-
+        r = table.get(g);
         //Check and set State
         if(! r.isEmpty())
         {
@@ -216,24 +209,11 @@ public class TmDDL {
 
         }
 
-        try {
             synchronized (tablePutLock) {
-            try {
                   if (LOG.isTraceEnabled()) LOG.trace("TmDDL table.put, TxID: " + transid + "Put :" + p );
 
                   table.put(p);
-               }
-               catch (Exception e2){
-                  //Avoiding logging within a lock. Throwing Exception.
-                  throw e2;
-               }
             } // End global synchronization
-         }
-         catch (Exception e) {
-             //create record of the exception
-            LOG.error("TmDDL tablePutLock or Table.put Exception, TxID: " + transid + "Exception:" + e);
-            throw e;
-         }
       if (LOG.isTraceEnabled()) LOG.trace("TmDDL putRow exit, TxId:" + transid);
    }