[TRAFODION-2821] Trafodion core code base needs to be thread safe

Java exceptions thrown while calling the java methods from JNI in
Trafodion are stored in the current context. However in a multi-threaded
ESP environment, these exceptions should be stored in thread specific
variable to enable error handling to be thread safe. Otherwise, the JNI
errors could be overwritten by the JNI errors from another thread.

Also streamlined JNI error handling by extending the getExceptionDetails()
methods to log the errors also.

Incorporated error handling in SequenceFileReader JNI methods.


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

Branch: refs/heads/master
Commit: 073cf68dd4d3151b3a727ece2ebefeba2d8775b0
Parents: 3e26f86
Author: selvaganesang <[email protected]>
Authored: Thu Mar 22 04:48:01 2018 +0000
Committer: selvaganesang <[email protected]>
Committed: Thu Mar 22 04:48:01 2018 +0000

----------------------------------------------------------------------
 core/sql/arkcmp/CmpContext.cpp                  |   2 +-
 core/sql/cli/Context.h                          |  12 -
 core/sql/cli/Globals.cpp                        |  20 -
 core/sql/cli/Globals.h                          |   9 +-
 core/sql/executor/ExExeUtilLoad.cpp             |   4 +-
 core/sql/executor/ExFastTransport.cpp           |   4 +-
 core/sql/executor/ExHbaseAccess.cpp             |   6 +-
 core/sql/executor/ExHdfsScan.cpp                |   8 +-
 core/sql/executor/HBaseClient_JNI.cpp           | 419 ++++---------------
 core/sql/executor/HBaseClient_JNI.h             |  17 +-
 core/sql/executor/HdfsClient_JNI.cpp            |  64 +--
 core/sql/executor/JavaObjectInterface.cpp       | 113 +++--
 core/sql/executor/JavaObjectInterface.h         |  17 +-
 core/sql/executor/OrcFileReader.cpp             |  23 +-
 core/sql/executor/SequenceFileReader.cpp        |  61 ++-
 core/sql/executor/ex_root.cpp                   |   2 +-
 core/sql/executor/hiveHook.cpp                  |   2 +-
 core/sql/optimizer/NATable.cpp                  |   2 +-
 core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp        |  24 +-
 core/sql/sqlcomp/CmpSeabaseDDLtable.cpp         |  10 +-
 .../java/org/trafodion/sql/HTableClient.java    |  16 +-
 .../main/java/org/trafodion/sql/HiveClient.java |   8 +-
 core/sql/ustat/hs_cli.cpp                       |   2 +-
 23 files changed, 289 insertions(+), 556 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafodion/blob/073cf68d/core/sql/arkcmp/CmpContext.cpp
----------------------------------------------------------------------
diff --git a/core/sql/arkcmp/CmpContext.cpp b/core/sql/arkcmp/CmpContext.cpp
index a915081..4599508 100644
--- a/core/sql/arkcmp/CmpContext.cpp
+++ b/core/sql/arkcmp/CmpContext.cpp
@@ -569,7 +569,7 @@ NABoolean CmpContext::execHiveSQL(const char* hiveSQL, 
ComDiagsArea *diags)
 
       if (!result && diags)
         *diags << DgSqlCode(-1214)
-               << DgString0(GetCliGlobals()->getJniErrorStrPtr())
+               << DgString0(GetCliGlobals()->getJniErrorStr())
                << DgString1(hiveSQL);
     }
 

http://git-wip-us.apache.org/repos/asf/trafodion/blob/073cf68d/core/sql/cli/Context.h
----------------------------------------------------------------------
diff --git a/core/sql/cli/Context.h b/core/sql/cli/Context.h
index 66ddc5b..a432ec9 100644
--- a/core/sql/cli/Context.h
+++ b/core/sql/cli/Context.h
@@ -630,18 +630,6 @@ public:
     xactAborted = udrXactAborted_;
   }
 
-  inline void setJniErrorStr(NAString errorStr)
-  {  jniErrorStr_ = errorStr; }
-
-  inline void setJniErrorStr(const char *errorStr)
-  {  jniErrorStr_ = errorStr; }
-
-  inline NAString getJniErrorStr()
-  { return jniErrorStr_; }
-
-  inline const char* getJniErrorStrPtr()
-  { return (const char*)jniErrorStr_.data(); }
-
   inline CLISemaphore *getSemaphore()
   { 
      return cliSemaphore_;

http://git-wip-us.apache.org/repos/asf/trafodion/blob/073cf68d/core/sql/cli/Globals.cpp
----------------------------------------------------------------------
diff --git a/core/sql/cli/Globals.cpp b/core/sql/cli/Globals.cpp
index fb09008..3eb4502 100644
--- a/core/sql/cli/Globals.cpp
+++ b/core/sql/cli/Globals.cpp
@@ -921,26 +921,6 @@ void CliGlobals::getUdrErrorFlags(NABoolean &sqlViolation,
                                   xactAborted);
 }
 
-void CliGlobals::setJniErrorStr(NAString errorStr)
-{
-   currContext()->setJniErrorStr(errorStr);
-}
-
-void CliGlobals::setJniErrorStr(const char *errorStr)
-{
-   currContext()->setJniErrorStr(errorStr);
-}
-
-NAString CliGlobals::getJniErrorStr()
-{
-  return currContext()->getJniErrorStr();
-}
-
-const char* CliGlobals::getJniErrorStrPtr()
-{
-  return currContext()->getJniErrorStrPtr();
-}
-
 void CliGlobals::updateTransMode(TransMode *transMode)
 {
   currContext()->getTransaction()->getTransMode()->

http://git-wip-us.apache.org/repos/asf/trafodion/blob/073cf68d/core/sql/cli/Globals.h
----------------------------------------------------------------------
diff --git a/core/sql/cli/Globals.h b/core/sql/cli/Globals.h
index b8e04ea..4275c7b 100644
--- a/core/sql/cli/Globals.h
+++ b/core/sql/cli/Globals.h
@@ -70,6 +70,8 @@
 #include "ComExeTrace.h"
 #include "ComRtUtils.h"
 #include "ComSmallDefs.h"
+#include "JavaObjectInterface.h"
+
 class ContextCli;
 class Statement;  
 class ComDiagsArea; 
@@ -238,10 +240,9 @@ public:
   inline void setUncProcess() { isUncProcess_ = TRUE; }
   inline NABoolean isUncProcess() {return isUncProcess_;}
   NAHeap *getCurrContextHeap();
-  void setJniErrorStr(NAString errorStr); 
-  void setJniErrorStr(const char *errorStr); 
-  NAString getJniErrorStr();
-  const char* getJniErrorStrPtr();
+  void setJniErrorStr(NAString errorStr) { setSqlJniErrorStr(errorStr);  }
+  void setJniErrorStr(const char *errorStr)  { setSqlJniErrorStr(errorStr); }
+  const char* getJniErrorStr() { return getSqlJniErrorStr(); }
   void updateTransMode(TransMode *transMode);
 
 

http://git-wip-us.apache.org/repos/asf/trafodion/blob/073cf68d/core/sql/executor/ExExeUtilLoad.cpp
----------------------------------------------------------------------
diff --git a/core/sql/executor/ExExeUtilLoad.cpp 
b/core/sql/executor/ExExeUtilLoad.cpp
index 97c185c..702dd12 100644
--- a/core/sql/executor/ExExeUtilLoad.cpp
+++ b/core/sql/executor/ExExeUtilLoad.cpp
@@ -1259,7 +1259,7 @@ short ExExeUtilHBaseBulkLoadTcb::work()
                           &cliError, NULL,
                           " ",
                           getHbaseErrStr(retcode),
-                          (char *)currContext->getJniErrorStr().data());
+                          (char *)GetCliGlobals()->getJniErrorStr());
         step_ = LOAD_END_ERROR_;
         break;
       }
@@ -1962,7 +1962,7 @@ void 
ExExeUtilHBaseBulkUnLoadTcb::createHdfsFileError(Int32 hdfsClientRetCode)
   ComDiagsArea * diagsArea = NULL;
   char* errorMsg = 
HdfsClient::getErrorText((HDFS_Client_RetCode)hdfsClientRetCode);
   ExRaiseSqlError(getHeap(), &diagsArea, (ExeErrorCode)(8447), NULL,
-                  NULL, NULL, NULL, errorMsg, (char 
*)GetCliGlobals()->currContext()->getJniErrorStr().data());
+                  NULL, NULL, NULL, errorMsg, (char 
*)GetCliGlobals()->getJniErrorStr());
   ex_queue_entry *pentry_up = qparent_.up->getTailEntry();
   pentry_up->setDiagsArea(diagsArea);
 }

http://git-wip-us.apache.org/repos/asf/trafodion/blob/073cf68d/core/sql/executor/ExFastTransport.cpp
----------------------------------------------------------------------
diff --git a/core/sql/executor/ExFastTransport.cpp 
b/core/sql/executor/ExFastTransport.cpp
index d2cbd47..7849746 100644
--- a/core/sql/executor/ExFastTransport.cpp
+++ b/core/sql/executor/ExFastTransport.cpp
@@ -1277,7 +1277,7 @@ void ExHdfsFastExtractTcb::createSequenceFileError(Int32 
sfwRetCode)
                   (ExeErrorCode)(8447),
                   NULL, NULL, NULL, NULL,
                   errorMsg,
-                (char *)currContext->getJniErrorStr().data());
+                (char *)GetCliGlobals()->getJniErrorStr());
   //ex_queue_entry *pentry_down = qParent_.down->getHeadEntry();
   //pentry_down->setDiagsArea(diagsArea);
   updateWorkATPDiagsArea(diagsArea);
@@ -1294,7 +1294,7 @@ void 
ExHdfsFastExtractTcb::createHdfsClientFileError(Int32 hdfsClientRetCode)
                   (ExeErrorCode)(8447),
                   NULL, NULL, NULL, NULL,
                   errorMsg,
-                  (char *)currContext->getJniErrorStr().data());
+                  (char *)GetCliGlobals()->getJniErrorStr());
   updateWorkATPDiagsArea(diagsArea);
 }
 

http://git-wip-us.apache.org/repos/asf/trafodion/blob/073cf68d/core/sql/executor/ExHbaseAccess.cpp
----------------------------------------------------------------------
diff --git a/core/sql/executor/ExHbaseAccess.cpp 
b/core/sql/executor/ExHbaseAccess.cpp
index 8af9308..13146a6 100644
--- a/core/sql/executor/ExHbaseAccess.cpp
+++ b/core/sql/executor/ExHbaseAccess.cpp
@@ -722,7 +722,7 @@ short ExHbaseAccessTcb::setupError(NAHeap *heap, 
ex_queue_pair &qparent, Lng32 r
                      (str ? (char*)str : (char*)" "),
                      getHbaseErrStr(retcode),
                       (str2 ? (char*)str2 : 
-                      (char *)currContext->getJniErrorStr().data())); 
+                      (char *)GetCliGlobals()->getJniErrorStr())); 
       pentry_down->setDiagsArea(diagsArea);
       return -1;
     }
@@ -752,7 +752,7 @@ short ExHbaseAccessTcb::setupError(Lng32 retcode, const 
char * str, const char *
                      (str ? (char*)str : (char*)" "),
                      getHbaseErrStr(retcode),
                       (str2 ? (char*)str2 : 
-                      (char *)currContext->getJniErrorStr().data())); 
+                      (char *)GetCliGlobals()->getJniErrorStr())); 
       pentry_down->setDiagsArea(diagsArea);
       return -1;
     }
@@ -3295,7 +3295,7 @@ logErrorReturn:
      loggingErrorDiags_ = ComDiagsArea::allocate(heap);
      *loggingErrorDiags_ << DgSqlCode(EXE_ERROR_WHILE_LOGGING)
                  << DgString0(loggingFileName_)
-                 << DgString1((char 
*)GetCliGlobals()->currContext()->getJniErrorStr().data());
+                 << DgString1((char *)GetCliGlobals()->getJniErrorStr());
   }
   return;
 }

http://git-wip-us.apache.org/repos/asf/trafodion/blob/073cf68d/core/sql/executor/ExHdfsScan.cpp
----------------------------------------------------------------------
diff --git a/core/sql/executor/ExHdfsScan.cpp b/core/sql/executor/ExHdfsScan.cpp
index a56cb06..a9ab2d2 100644
--- a/core/sql/executor/ExHdfsScan.cpp
+++ b/core/sql/executor/ExHdfsScan.cpp
@@ -570,7 +570,7 @@ ExWorkProcRetcode ExHdfsScanTcb::work()
                             hdfsStats_, hdfsScanRetCode);
              if (hdfsScanRetCode != HDFS_SCAN_OK) {
                 setupError(EXE_ERROR_HDFS_SCAN, hdfsScanRetCode, 
"SETUP_HDFS_SCAN", 
-                              currContext->getJniErrorStr(), NULL);            
  
+                              GetCliGlobals()->getJniErrorStr(), NULL);        
      
                 step_ = HANDLE_ERROR_AND_DONE;
                 break;
              } 
@@ -594,7 +594,7 @@ ExWorkProcRetcode ExHdfsScanTcb::work()
              }
              else if (hdfsScanRetCode != HDFS_SCAN_OK) {
                 setupError(EXE_ERROR_HDFS_SCAN, hdfsScanRetCode, 
"SETUP_HDFS_SCAN", 
-                              currContext->getJniErrorStr(), NULL);            
  
+                              GetCliGlobals()->getJniErrorStr(), NULL);        
      
                 step_ = HANDLE_ERROR_AND_DONE;
                 break;
              } 
@@ -670,7 +670,7 @@ ExWorkProcRetcode ExHdfsScanTcb::work()
              hdfsScanRetCode = hdfsScan_->stop();
              if (hdfsScanRetCode != HDFS_SCAN_OK) {
                 setupError(EXE_ERROR_HDFS_SCAN, hdfsScanRetCode, 
"HdfsScan::stop", 
-                              currContext->getJniErrorStr(), NULL);            
  
+                              GetCliGlobals()->getJniErrorStr(), NULL);        
      
                 step_ = HANDLE_ERROR_AND_DONE;
              }    
              step_ = DONE;
@@ -2193,7 +2193,7 @@ logErrorReturn:
      loggingErrorDiags_ = ComDiagsArea::allocate(heap);
      *loggingErrorDiags_ << DgSqlCode(EXE_ERROR_WHILE_LOGGING)
                  << DgString0(loggingFileName_)
-                 << DgString1((char 
*)GetCliGlobals()->currContext()->getJniErrorStr().data());
+                 << DgString1((char *)GetCliGlobals()->getJniErrorStr());
   }
 }
 

http://git-wip-us.apache.org/repos/asf/trafodion/blob/073cf68d/core/sql/executor/HBaseClient_JNI.cpp
----------------------------------------------------------------------
diff --git a/core/sql/executor/HBaseClient_JNI.cpp 
b/core/sql/executor/HBaseClient_JNI.cpp
index 8d12821..bf9bee1 100644
--- a/core/sql/executor/HBaseClient_JNI.cpp
+++ b/core/sql/executor/HBaseClient_JNI.cpp
@@ -336,9 +336,7 @@ HBC_RetCode HBaseClient_JNI::initConnection(const char* 
zkServers, const char* z
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::initConnection()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::initConnection()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_INIT_EXCEPTION;
   }
@@ -393,9 +391,7 @@ HTableClient_JNI* HBaseClient_JNI::getHTableClient(NAHeap 
*heap, const char* tab
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::getHTableClient()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::getHTableClient()");
     NADELETE(htc, HTableClient_JNI, heap);
     jenv_->PopLocalFrame(NULL);
     return NULL;
@@ -403,10 +399,9 @@ HTableClient_JNI* HBaseClient_JNI::getHTableClient(NAHeap 
*heap, const char* tab
 
   if (j_htc == NULL) 
   {
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::getHTableClient()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::getHTableClient()");
     NADELETE(htc, HTableClient_JNI, heap);
     jenv_->PopLocalFrame(NULL);
-    return NULL;
   }
   htc->setJavaObject(j_htc);
   if (htc->init() != HTC_OK)
@@ -434,10 +429,7 @@ HBC_RetCode 
HBaseClient_JNI::releaseHTableClient(HTableClient_JNI* htc)
       tsRecentJMFromJNI = JavaMethods_[JM_REL_HTC].jm_full_name;
       jenv_->CallVoidMethod(javaObj_, JavaMethods_[JM_REL_HTC].methodID, 
j_htc);
       if (jenv_->ExceptionCheck()) {
-         getExceptionDetails();
-         logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-         logError(CAT_SQL_HBASE, "HBaseClient_JNI::releaseHTableClient()", 
getLastError());
-         jenv_->PopLocalFrame(NULL);
+         getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::releaseHTableClient()");
          return HBC_ERROR_REL_HTC_EXCEPTION;
       }
   }
@@ -465,15 +457,7 @@ HBulkLoadClient_JNI* 
HBaseClient_JNI::getHBulkLoadClient(NAHeap *heap)
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::getHBulkLoadClient()", 
getLastError());
-    jenv_->PopLocalFrame(NULL);
-    return NULL;
-  }
-  if (j_hblc == NULL)
-  {
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::getHBulkLoadClient()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::getHBulkLoadClient()");
     jenv_->PopLocalFrame(NULL);
     return NULL;
   }
@@ -505,9 +489,7 @@ HBC_RetCode 
HBaseClient_JNI::releaseHBulkLoadClient(HBulkLoadClient_JNI* hblc)
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::releaseHBulkLOadClient()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::releaseHBulkLoadClient()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_REL_HBLC_EXCEPTION;
   }
@@ -535,9 +517,7 @@ HBC_RetCode HBaseClient_JNI::create(const char* fileName, 
HBASE_NAMELIST& colFam
   jobjectArray j_fams = convertToStringObjectArray(colFamilies);
   if (j_fams == NULL)
   {
-     getExceptionDetails();
-     logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-     logError(CAT_SQL_HBASE, "HBaseClient_JNI::create()", getLastError());
+     GetCliGlobals()->setJniErrorStr(getErrorText(HBC_ERROR_CREATE_PARAM));
      jenv_->PopLocalFrame(NULL);
      return HBC_ERROR_CREATE_PARAM;
   }
@@ -549,9 +529,7 @@ HBC_RetCode HBaseClient_JNI::create(const char* fileName, 
HBASE_NAMELIST& colFam
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::create()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::create()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_CREATE_EXCEPTION;
   }
@@ -592,9 +570,7 @@ HBC_RetCode HBaseClient_JNI::create(const char* fileName,
                    HBASE_MAX_OPTIONS);
   if (j_opts == NULL)
   {
-     getExceptionDetails();
-     logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-     logError(CAT_SQL_HBASE, "HBaseClient_JNI::create()", getLastError());
+     getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::create()");
      jenv_->PopLocalFrame(NULL);
      return HBC_ERROR_CREATE_PARAM;
   }
@@ -605,9 +581,7 @@ HBC_RetCode HBaseClient_JNI::create(const char* fileName,
      j_keys = convertToByteArrayObjectArray(splitValues, numSplits, keyLength);
      if (j_keys == NULL)
      {
-        getExceptionDetails();
-        logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-        logError(CAT_SQL_HBASE, "HBaseClient_JNI::create()", getLastError());
+        getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::create()");
         jenv_->PopLocalFrame(NULL);
         return HBC_ERROR_CREATE_PARAM;
      }
@@ -623,9 +597,7 @@ HBC_RetCode HBaseClient_JNI::create(const char* fileName,
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::create()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::create()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_CREATE_EXCEPTION;
   }
@@ -660,11 +632,9 @@ HBC_RetCode HBaseClient_JNI::alter(const char* fileName,
   }
   jobjectArray j_opts = convertToStringObjectArray(createOptionsArray, 
                    HBASE_MAX_OPTIONS);
-  if (j_opts == NULL)
+  if (jenv_->ExceptionCheck())
   {
-     getExceptionDetails();
-     logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-     logError(CAT_SQL_HBASE, "HBaseClient_JNI::alter()", getLastError());
+     getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::alter()");
      jenv_->PopLocalFrame(NULL);
      return HBC_ERROR_ALTER_PARAM;
   }
@@ -677,9 +647,7 @@ HBC_RetCode HBaseClient_JNI::alter(const char* fileName,
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::alter()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::alter()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_ALTER_EXCEPTION;
   }
@@ -933,8 +901,7 @@ HBC_RetCode HBaseClient_JNI::registerTruncateOnAbort(const 
char* fileName, Int64
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails(jenv_);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::drop()");
     logError(CAT_SQL_HBASE, "HBaseClient_JNI::drop()", getLastError());
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_DROP_EXCEPTION;
@@ -967,9 +934,7 @@ HBC_RetCode HBaseClient_JNI::truncate(const char* fileName, 
NABoolean preserveSp
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails(jenv_);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::drop()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::truncate()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_TRUNCATE_EXCEPTION;
   }
@@ -999,9 +964,7 @@ HBC_RetCode HBaseClient_JNI::drop(const char* fileName, 
JNIEnv* jenv, Int64 tran
 
   if (jenv->ExceptionCheck())
   {
-    getExceptionDetails(jenv);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::drop()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::drop()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_DROP_EXCEPTION;
   }
@@ -1043,9 +1006,7 @@ HBC_RetCode HBaseClient_JNI::dropAll(const char* pattern, 
bool async, Int64 tran
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails(jenv_);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::dropAll()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::dropAll()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_DROP_EXCEPTION;
   }
@@ -1078,9 +1039,7 @@ NAArray<HbaseStr>* HBaseClient_JNI::listAll(NAHeap *heap, 
const char* pattern)
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails(jenv_);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::listAll()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::listAll()");
     jenv_->PopLocalFrame(NULL);
     return NULL;
   }
@@ -1112,9 +1071,7 @@ Int32 HBaseClient_JNI::getRegionStatsEntries()
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails(jenv_);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::getRegionStatsEntries()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::getRegionStatsEntries()");
     jenv_->PopLocalFrame(NULL);
     return 0;
   }
@@ -1151,9 +1108,7 @@ NAArray<HbaseStr>* HBaseClient_JNI::getRegionStats(NAHeap 
*heap, const char* tbl
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails(jenv_);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::getRegionStats()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::getRegionStats()");
     jenv_->PopLocalFrame(NULL);
     return NULL;
   }
@@ -1209,9 +1164,7 @@ HBC_RetCode HBaseClient_JNI::copy(const char* srcTblName,
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails(jenv_);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::copy()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::copy()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_DROP_EXCEPTION;
   }
@@ -1251,9 +1204,7 @@ HBC_RetCode HBaseClient_JNI::exists(const char* fileName, 
Int64 transID)
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::exists()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::exists()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_EXISTS_EXCEPTION;
   }
@@ -1303,9 +1254,7 @@ HBC_RetCode HBaseClient_JNI::grant(const Text& user, 
const Text& tblName, const
     j_actionCodes = convertToStringObjectArray(actions);
     if (j_actionCodes == NULL)
     {
-       getExceptionDetails();
-       logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-       logError(CAT_SQL_HBASE, "HBaseClient_JNI::grant()", getLastError());
+       getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::grant()");
        jenv_->PopLocalFrame(NULL);
        return HBC_ERROR_GRANT_PARAM;
     }
@@ -1316,9 +1265,7 @@ HBC_RetCode HBaseClient_JNI::grant(const Text& user, 
const Text& tblName, const
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::grant()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::grant()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_GRANT_EXCEPTION;
   }
@@ -1381,9 +1328,7 @@ HBC_RetCode HBaseClient_JNI::estimateRowCount(const char* 
tblName,
   breadCrumb = 4;
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::estimateRowCount()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::estimateRowCount()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_ROWCOUNT_EST_EXCEPTION;
   }
@@ -1418,10 +1363,7 @@ HBC_RetCode HBaseClient_JNI::getLatestSnapshot(const 
char * tblName, char *& sna
   jstring jresult = (jstring)jenv_->CallObjectMethod(javaObj_, 
JavaMethods_[JM_GET_LATEST_SNP].methodID,js_tblName);
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::getLatestSnapshot()", 
-             getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::getLatestSnapshot()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_GET_LATEST_SNP_EXCEPTION;
   }
@@ -1457,9 +1399,7 @@ HBC_RetCode HBaseClient_JNI::cleanSnpTmpLocation(const 
char * path)
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::cleanSnpTmpLocation()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::cleanupSnpTmpLocation()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_CLEAN_SNP_TMP_LOC_EXCEPTION;
   }
@@ -1485,10 +1425,7 @@ HBC_RetCode HBaseClient_JNI::setArchivePermissions(const 
char * tbl)
   jboolean jresult = jenv_->CallBooleanMethod(javaObj_, 
JavaMethods_[JM_SET_ARC_PERMS].methodID,js_tbl);
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::setArchivePermissions()",
-             getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::setArchivePermissions()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_SET_ARC_PERMS_EXCEPTION;
   }
@@ -1509,10 +1446,7 @@ HBC_RetCode 
HBaseClient_JNI::getBlockCacheFraction(float& frac)
   
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::getBlockCacheFraction()", 
-             getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::getBlockCacheFraction()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_GET_CACHE_FRAC_EXCEPTION;
   }
@@ -1649,9 +1583,7 @@ HBLC_RetCode HBulkLoadClient_JNI::initHFileParams(
   }
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBulkLoadClient_JNI::initHFileParams() => before 
calling Java.", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBulkLoadClient_JNI::initHFileParams()");
     jenv_->PopLocalFrame(NULL);
     return HBLC_ERROR_CREATE_HFILE_EXCEPTION;
   }
@@ -1664,9 +1596,7 @@ HBLC_RetCode HBulkLoadClient_JNI::initHFileParams(
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBulkLoadClient_JNI::initHFileParams()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBulkLoadClient_JNI::initHFileParams()");
     jenv_->PopLocalFrame(NULL);
     return HBLC_ERROR_CREATE_HFILE_EXCEPTION;
   }
@@ -1718,9 +1648,7 @@ HBLC_RetCode HBulkLoadClient_JNI::addToHFile( short 
rowIDLen, HbaseStr &rowIDs,
   }
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBulkLoadClient_JNI::addToHFile()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBulkLoadClient_JNI::addToHFile()");
     jenv_->PopLocalFrame(NULL);
     return HBLC_ERROR_ADD_TO_HFILE_EXCEPTION;
   }
@@ -1747,9 +1675,7 @@ HBLC_RetCode HBulkLoadClient_JNI::closeHFile(
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBulkLoadClient_JNI::closeHFile()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBulkLoadClient_JNI::closeHFile()");
     jenv_->PopLocalFrame(NULL);
     return HBLC_ERROR_CLOSE_HFILE_EXCEPTION;
   }
@@ -1791,15 +1717,6 @@ HBLC_RetCode HBulkLoadClient_JNI::doBulkLoad(
      return HBLC_ERROR_DO_BULKLOAD_PARAM;
    }
 
-  if (jenv_->ExceptionCheck())
-  {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBulkLoadClient_JNI::doBulkLoad() => before 
calling Java.", getLastError());
-    jenv_->PopLocalFrame(NULL);
-    return HBLC_ERROR_DO_BULKLOAD_EXCEPTION;
-  }
-
   jboolean j_quasiSecure = quasiSecure;
 
   jboolean j_snapshot = snapshot;
@@ -1808,9 +1725,7 @@ HBLC_RetCode HBulkLoadClient_JNI::doBulkLoad(
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBulkLoadClient_JNI::doBulkLoad()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBulkLoadClient_JNI::doBulkLoad()");
     jenv_->PopLocalFrame(NULL);
     return HBLC_ERROR_DO_BULKLOAD_EXCEPTION;
   }
@@ -1834,29 +1749,18 @@ HBLC_RetCode HBulkLoadClient_JNI::bulkLoadCleanup(
      return HBLC_ERROR_INIT_PARAM;
 
   jstring js_location = jenv_->NewStringUTF(location.c_str());
-   if (js_location == NULL)
-   {
+  if (js_location == NULL)
+  {
      
GetCliGlobals()->setJniErrorStr(getErrorText(HBLC_ERROR_BULKLOAD_CLEANUP_PARAM));
      jenv_->PopLocalFrame(NULL);
      return HBLC_ERROR_BULKLOAD_CLEANUP_PARAM;
-   }
-
-
-  if (jenv_->ExceptionCheck())
-  {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBulkLoadClient_JNI::bulkLoadCleanup() => before 
calling Java.", getLastError());
-    jenv_->PopLocalFrame(NULL);
-    return HBLC_ERROR_BULKLOAD_CLEANUP_PARAM;
   }
+
   tsRecentJMFromJNI = JavaMethods_[JM_BULK_LOAD_CLEANUP].jm_full_name;
   jboolean jresult = jenv_->CallBooleanMethod(javaObj_, 
JavaMethods_[JM_BULK_LOAD_CLEANUP].methodID, js_location);
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBulkLoadClient_JNI::bulkLoadCleanup()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBulkLoadClient_JNI::bulkLoadCleanup()");
     jenv_->PopLocalFrame(NULL);
     return HBLC_ERROR_BULKLOAD_CLEANUP_PARAM;
   }
@@ -1912,9 +1816,7 @@ HBLC_RetCode HBulkLoadClient_JNI::bulkLoadCleanup(
    count = jcount;
    if (jenv_->ExceptionCheck())
    {
-     getExceptionDetails();
-     logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-     logError(CAT_SQL_HBASE, "HBaseClient_JNI::incrCounter()", getLastError());
+     getExceptionDetails(__FILE__, __LINE__, 
"HBulkLoadClient_JNI::incrCounter()");
      jenv_->PopLocalFrame(NULL);
      return HBC_ERROR_INCR_COUNTER_EXCEPTION;
    }
@@ -1947,9 +1849,7 @@ HBLC_RetCode HBulkLoadClient_JNI::bulkLoadCleanup(
 
    if (jenv_->ExceptionCheck())
    {
-     getExceptionDetails();
-     logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-     logError(CAT_SQL_HBASE, "HBaseClient_JNI::createCounterTable()", 
getLastError());
+     getExceptionDetails(__FILE__, __LINE__, 
"HBulkLoadClient_JNI::createCounterTable()");
      jenv_->PopLocalFrame(NULL);
      return HBC_ERROR_CREATE_COUNTER_EXCEPTION;
    }
@@ -2004,9 +1904,7 @@ HBC_RetCode HBaseClient_JNI::revoke(const Text& user, 
const Text& tblName, const
     j_actionCodes = convertToStringObjectArray(actions);
     if (j_actionCodes == NULL)
     {
-       getExceptionDetails();
-       logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-       logError(CAT_SQL_HBASE, "HBaseClient_JNI::revoke()", getLastError());
+       getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::revoke()");
        jenv_->PopLocalFrame(NULL);
        return HBC_ERROR_REVOKE_PARAM;
     }
@@ -2017,9 +1915,7 @@ HBC_RetCode HBaseClient_JNI::revoke(const Text& user, 
const Text& tblName, const
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::revoke()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::revoke()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_REVOKE_EXCEPTION;
   }
@@ -2082,9 +1978,7 @@ HTableClient_JNI *HBaseClient_JNI::startGet(NAHeap *heap, 
const char* tableName,
   if (!cols.isEmpty()) {
      j_cols = convertToByteArrayObjectArray(cols);
      if (j_cols == NULL) {
-        getExceptionDetails();
-        logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-        logError(CAT_SQL_HBASE, "HBaseClient_JNI::startGet()", getLastError());
+        getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::startGet()");
         NADELETE(htc, HTableClient_JNI, heap);
         jenv_->PopLocalFrame(NULL);
         return NULL;
@@ -2111,9 +2005,7 @@ HTableClient_JNI *HBaseClient_JNI::startGet(NAHeap *heap, 
const char* tableName,
   }
 
   if (jenv_->ExceptionCheck()) {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseCient_JNI::startGet()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::startGet()");
     jenv_->PopLocalFrame(NULL);
     releaseHTableClient(htc);
     return NULL;
@@ -2160,9 +2052,7 @@ HTableClient_JNI *HBaseClient_JNI::startGets(NAHeap 
*heap, const char* tableName
   if (!cols.isEmpty()) {
      j_cols = convertToByteArrayObjectArray(cols);
      if (j_cols == NULL) {
-        getExceptionDetails();
-        logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-        logError(CAT_SQL_HBASE, "HBaseClient_JNI::startGets()", 
getLastError());
+        getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::startGets()");
         NADELETE(htc, HTableClient_JNI, heap);
         jenv_->PopLocalFrame(NULL);
         return NULL;
@@ -2177,9 +2067,7 @@ HTableClient_JNI *HBaseClient_JNI::startGets(NAHeap 
*heap, const char* tableName
   if (rowIDs != NULL) {
      j_rows = convertToByteArrayObjectArray(*rowIDs);
      if (j_rows == NULL) {
-        getExceptionDetails();
-        logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-        logError(CAT_SQL_HBASE, "HBaseClient_JNI::startGets()", 
getLastError());
+        getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::startGets()");
         NADELETE(htc, HTableClient_JNI, heap);
         jenv_->PopLocalFrame(NULL);
         return NULL;
@@ -2224,9 +2112,7 @@ HTableClient_JNI *HBaseClient_JNI::startGets(NAHeap 
*heap, const char* tableName
   }
 
   if (jenv_->ExceptionCheck()) {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseCient_JNI::startGets()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::startGets()");
     jenv_->PopLocalFrame(NULL);
     releaseHTableClient(htc);
     return NULL;
@@ -2280,9 +2166,7 @@ HBC_RetCode HBaseClient_JNI::getRegionsNodeName(const 
char* tblName,
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::getRegionsNodeName()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::getRegionsNodeName()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_GET_HBTI_EXCEPTION;
   }
@@ -2324,9 +2208,7 @@ HBC_RetCode HBaseClient_JNI::getHbaseTableInfo(const 
char* tblName,
                                               js_tblName, jHtabInfo);
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::getHbaseTableInfo()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::getHbaseTableInfo()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_GET_HBTI_EXCEPTION;
   }
@@ -2413,9 +2295,7 @@ HBC_RetCode HBaseClient_JNI::insertRow(NAHeap *heap, 
const char *tableName,
          hbs->incMaxHbaseIOTime(hbs->getHbaseTimer().stop());
   }
   if (jenv_->ExceptionCheck()) {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::insertRow()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::insertRow()");
     jenv_->PopLocalFrame(NULL);
     if (htc != NULL)
         NADELETE(htc, HTableClient_JNI, heap);
@@ -2503,9 +2383,7 @@ HBC_RetCode HBaseClient_JNI::insertRows(NAHeap *heap, 
const char *tableName,
          hbs->incMaxHbaseIOTime(hbs->getHbaseTimer().stop());
   }
   if (jenv_->ExceptionCheck()) {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::insertRows()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::insertRows()");
     jenv_->PopLocalFrame(NULL);
     if (htc != NULL)
         NADELETE(htc, HTableClient_JNI, heap);
@@ -2618,9 +2496,7 @@ HBC_RetCode HBaseClient_JNI::checkAndUpdateRow(NAHeap 
*heap, const char *tableNa
          hbs->incMaxHbaseIOTime(hbs->getHbaseTimer().stop());
   }
   if (jenv_->ExceptionCheck()) {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::checkAndUpdateRow()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::cheakAndUpdateRow()");
     if (htc != NULL)
         NADELETE(htc, HTableClient_JNI, heap);
     jenv_->PopLocalFrame(NULL);
@@ -2691,9 +2567,7 @@ HBC_RetCode HBaseClient_JNI::deleteRow(NAHeap *heap, 
const char *tableName,
   if (cols != NULL && !cols->isEmpty()) {
      j_cols = convertToByteArrayObjectArray(*cols);
      if (j_cols == NULL) {
-        getExceptionDetails();
-        logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-        logError(CAT_SQL_HBASE, "HBaseClient_JNI::deleteRow()", 
getLastError());
+        getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::deleteRow()");
         if (htc != NULL)
            NADELETE(htc, HTableClient_JNI, heap);
         jenv_->PopLocalFrame(NULL);
@@ -2719,9 +2593,7 @@ HBC_RetCode HBaseClient_JNI::deleteRow(NAHeap *heap, 
const char *tableName,
          hbs->incMaxHbaseIOTime(hbs->getHbaseTimer().stop());
   }
   if (jenv_->ExceptionCheck()) {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::deleteRow()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::deleteRow()");
     jenv_->PopLocalFrame(NULL);
     if (htc != NULL)
         NADELETE(htc, HTableClient_JNI, heap);
@@ -2804,9 +2676,7 @@ HBC_RetCode HBaseClient_JNI::deleteRows(NAHeap *heap, 
const char *tableName,
          hbs->incMaxHbaseIOTime(hbs->getHbaseTimer().stop());
   }
   if (jenv_->ExceptionCheck()) {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::deleteRows()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::deleteRows()");
     jenv_->PopLocalFrame(NULL);
     if (htc != NULL)
         NADELETE(htc, HTableClient_JNI, heap);
@@ -2908,9 +2778,7 @@ HBC_RetCode HBaseClient_JNI::checkAndDeleteRow(NAHeap 
*heap, const char *tableNa
          hbs->incMaxHbaseIOTime(hbs->getHbaseTimer().stop());
   }
   if (jenv_->ExceptionCheck()) {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::checkAndDeleteRow()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::checkAndDeleteRow()");
     jenv_->PopLocalFrame(NULL);
     if (htc != NULL)
         NADELETE(htc, HTableClient_JNI, heap);
@@ -2959,8 +2827,7 @@ NAArray<HbaseStr>* HBaseClient_JNI::getKeys(Int32 
funcIndex, NAHeap *heap, const
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
+    getExceptionDetails(__FILE__, __LINE__, "HBaseClient_JNI::getKeys()");
     jenv_->PopLocalFrame(NULL);
     return NULL;
   }
@@ -2999,9 +2866,7 @@ HBC_RetCode HBaseClient_JNI::createSnapshot( const 
NAString&  tableName, const N
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::createSnapshot()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::createSnapshot()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_CREATE_SNAPSHOT_EXCEPTION;
   }
@@ -3037,9 +2902,7 @@ HBC_RetCode HBaseClient_JNI::verifySnapshot( const 
NAString&  tableName, const N
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::verifySnapshot()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::verifySnapshot()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_VERIFY_SNAPSHOT_EXCEPTION;
   }
@@ -3070,9 +2933,7 @@ HBC_RetCode HBaseClient_JNI::deleteSnapshot( const 
NAString&  snapshotName)
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HBaseClient_JNI::deleteSnapshot()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HBaseClient_JNI::deleteSnapshot()");
     jenv_->PopLocalFrame(NULL);
     return HBC_ERROR_DELETE_SNAPSHOT_EXCEPTION;
   }
@@ -3187,8 +3048,6 @@ HTC_RetCode HTableClient_JNI::init()
       return (HTC_RetCode)JavaObjectInterface::init(className, javaClass_, 
JavaMethods_, (Int32)JM_LAST, javaMethodsInitialized_);
     }
     JavaMethods_ = new JavaMethodInit[JM_LAST];
-    JavaMethods_[JM_GET_ERROR  ].jm_name      = "getLastError";
-    JavaMethods_[JM_GET_ERROR  ].jm_signature = "()Ljava/lang/String;";
     JavaMethods_[JM_SCAN_OPEN  ].jm_name      = "startScan";
     JavaMethods_[JM_SCAN_OPEN  ].jm_signature = 
"(J[B[B[Ljava/lang/Object;JZZI[Ljava/lang/Object;[Ljava/lang/Object;[Ljava/lang/Object;FFZZILjava/lang/String;Ljava/lang/String;II)Z";
     JavaMethods_[JM_DELETE     ].jm_name      = "deleteRow";
@@ -3219,14 +3078,6 @@ HTC_RetCode HTableClient_JNI::init()
 //////////////////////////////////////////////////////////////////////////////
 // 
 //////////////////////////////////////////////////////////////////////////////
-NAString HTableClient_JNI::getLastJavaError()
-{
-  return 
JavaObjectInterface::getLastJavaError(JavaMethods_[JM_GET_ERROR].methodID);
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// 
-//////////////////////////////////////////////////////////////////////////////
 HTC_RetCode HTableClient_JNI::startScan(Int64 transID, const Text& startRowID, 
    const Text& stopRowID, const LIST(HbaseStr) & cols, Int64 timestamp, 
    bool cacheBlocks, bool smallScanner, Lng32 numCacheRows, NABoolean preFetch,
@@ -3273,9 +3124,7 @@ HTC_RetCode HTableClient_JNI::startScan(Int64 transID, 
const Text& startRowID,
     j_cols = convertToByteArrayObjectArray(cols);
     if (j_cols == NULL)
     {
-       getExceptionDetails();
-       logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-       logError(CAT_SQL_HBASE, "HTableClient_JNI::startScan()", 
getLastError());
+       getExceptionDetails(__FILE__, __LINE__, 
"HTableClient_JNI::startScan()");
        jenv_->PopLocalFrame(NULL);
        return HTC_ERROR_SCANOPEN_PARAM;
     }
@@ -3300,9 +3149,7 @@ HTC_RetCode HTableClient_JNI::startScan(Int64 transID, 
const Text& startRowID,
     j_colnamestofilter = convertToByteArrayObjectArray(*inColNamesToFilter);
     if (j_colnamestofilter == NULL)
     {
-       getExceptionDetails();
-       logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-       logError(CAT_SQL_HBASE, "HTableClient_JNI::startScan()", 
getLastError());
+       getExceptionDetails(__FILE__, __LINE__, 
"HTableClient_JNI::startScan()");
        jenv_->PopLocalFrame(NULL);
        return HTC_ERROR_SCANOPEN_PARAM;
     }
@@ -3314,9 +3161,7 @@ HTC_RetCode HTableClient_JNI::startScan(Int64 transID, 
const Text& startRowID,
      j_compareoplist = convertToByteArrayObjectArray(*inCompareOpList);
      if (j_compareoplist == NULL)
      {
-        getExceptionDetails();
-        logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-        logError(CAT_SQL_HBASE, "HTableClient_JNI::startScan()", 
getLastError());
+        getExceptionDetails(__FILE__, __LINE__, 
"HTableClient_JNI::startScan()");
         jenv_->PopLocalFrame(NULL);
         return HTC_ERROR_SCANOPEN_PARAM;
      }
@@ -3328,9 +3173,7 @@ HTC_RetCode HTableClient_JNI::startScan(Int64 transID, 
const Text& startRowID,
      j_colvaluestocompare = 
convertToByteArrayObjectArray(*inColValuesToCompare);
      if (j_colvaluestocompare == NULL)
      {
-        getExceptionDetails();
-        logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-        logError(CAT_SQL_HBASE, "HTableClient_JNI::startScan()", 
getLastError());
+        getExceptionDetails(__FILE__, __LINE__, 
"HTableClient_JNI::startScan()");
         jenv_->PopLocalFrame(NULL);
         return HTC_ERROR_SCANOPEN_PARAM;
      }
@@ -3379,9 +3222,7 @@ HTC_RetCode HTableClient_JNI::startScan(Int64 transID, 
const Text& startRowID,
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HTableClient_JNI::scanOpen()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::scanOpen()");
     jenv_->PopLocalFrame(NULL);
     return HTC_ERROR_SCANOPEN_EXCEPTION;
   }
@@ -3420,9 +3261,7 @@ HTC_RetCode HTableClient_JNI::deleteRow(Int64 transID, 
HbaseStr &rowID, const LI
      j_cols = convertToByteArrayObjectArray(*cols);
      if (j_cols == NULL)
      {
-        getExceptionDetails();
-        logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-        logError(CAT_SQL_HBASE, "HTableClient_JNI::deleteRow()", 
getLastError());
+        getExceptionDetails(__FILE__, __LINE__, 
"HTableClient_JNI::deleteROw()");
         jenv_->PopLocalFrame(NULL);
         return HTC_ERROR_DELETEROW_PARAM;
      }
@@ -3444,9 +3283,7 @@ HTC_RetCode HTableClient_JNI::deleteRow(Int64 transID, 
HbaseStr &rowID, const LI
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HTableClient_JNI::deleteRow()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::deleteROw()");
     jenv_->PopLocalFrame(NULL);
     return HTC_ERROR_DELETEROW_EXCEPTION;
   }
@@ -3481,8 +3318,6 @@ HTC_RetCode HTableClient_JNI::setWriteBufferSize(Int64 
size)
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
     logError(CAT_SQL_HBASE, "HTableClient_JNI::setWriteBufferSize()", 
getLastError());
     jenv_->PopLocalFrame(NULL);
     return HTC_ERROR_WRITEBUFFERSIZE_EXCEPTION;
@@ -3514,9 +3349,7 @@ HTC_RetCode HTableClient_JNI::setWriteToWAL(bool WAL)
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HTableClient_JNI::setWriteToWAL()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HTableClient_JNI::setWriteToWAL)");
     jenv_->PopLocalFrame(NULL);
     return HTC_ERROR_WRITETOWAL_EXCEPTION;
   }
@@ -3552,9 +3385,7 @@ std::string* HTableClient_JNI::getHTableName()
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HTableClient_JNI::getHTableName()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HTableClient_JNI::getHTableName()");
     jenv_->PopLocalFrame(NULL);
     return NULL;
   }
@@ -3654,9 +3485,7 @@ HTC_RetCode HTableClient_JNI::coProcAggr(Int64 transID,
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HTableClient_JNI::coProcAggr()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::coProcAggr()");
     jenv_->PopLocalFrame(NULL);
     return HTC_ERROR_COPROC_AGGR_EXCEPTION;
   }
@@ -3704,6 +3533,8 @@ static const char* const hvcErrorEnumStr[] =
  ,"Java exception in getAllSchemas()."
  ,"Preparing parameters for getAllTables()."
  ,"Java exception in getAllTables()."
+ ,"Preparing parameters for executeHiveSQL()."
+ ,"Java exception in executeHiveSQL()."
 };
 
 
@@ -3781,8 +3612,6 @@ HVC_RetCode HiveClient_JNI::init()
     
     JavaMethods_[JM_CTOR       ].jm_name      = "<init>";
     JavaMethods_[JM_CTOR       ].jm_signature = "()V";
-    JavaMethods_[JM_GET_ERROR  ].jm_name      = "getLastError";
-    JavaMethods_[JM_GET_ERROR  ].jm_signature = "()Ljava/lang/String;";
     JavaMethods_[JM_INIT       ].jm_name      = "init";
     JavaMethods_[JM_INIT       ].jm_signature = "(Ljava/lang/String;)Z";
     JavaMethods_[JM_CLOSE      ].jm_name      = "close";
@@ -3810,14 +3639,6 @@ HVC_RetCode HiveClient_JNI::init()
 //////////////////////////////////////////////////////////////////////////////
 // 
 //////////////////////////////////////////////////////////////////////////////
-NAString HiveClient_JNI::getLastJavaError()
-{
-  return 
JavaObjectInterface::getLastJavaError(JavaMethods_[JM_GET_ERROR].methodID);
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// 
-//////////////////////////////////////////////////////////////////////////////
 HVC_RetCode HiveClient_JNI::initConnection(const char* metastoreURI)
 {
   QRLogger::log(CAT_SQL_HBASE, LL_DEBUG, "HiveClient_JNI::initConnection(%s) 
called.", metastoreURI);
@@ -3839,9 +3660,7 @@ HVC_RetCode HiveClient_JNI::initConnection(const char* 
metastoreURI)
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HiveClient_JNI::initConnection()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HiveClient_JNI::initConnection()");
     jenv_->PopLocalFrame(NULL);
     return HVC_ERROR_INIT_EXCEPTION;
   }
@@ -3873,9 +3692,7 @@ HVC_RetCode HiveClient_JNI::close()
   jboolean jresult = jenv_->CallBooleanMethod(javaObj_, 
JavaMethods_[JM_CLOSE].methodID);
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HiveClient_JNI::close()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HiveClient_JNI::close()");
     jenv_->PopLocalFrame(NULL);
     return HVC_ERROR_CLOSE_EXCEPTION;
   }
@@ -3921,9 +3738,7 @@ HVC_RetCode HiveClient_JNI::exists(const char* schName, 
const char* tabName)
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HiveClient_JNI::exists()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HiveClient_JNI::exists()");
     jenv_->PopLocalFrame(NULL);
     return HVC_ERROR_EXISTS_EXCEPTION;
   }
@@ -3970,9 +3785,7 @@ HVC_RetCode HiveClient_JNI::getHiveTableStr(const char* 
schName,
                                             js_schName, js_tabName);
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HiveClient_JNI::getHiveTableStr()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HiveClient_JNI::getHiveTableStr()");
     jenv_->PopLocalFrame(NULL);
     return HVC_ERROR_GET_HVT_EXCEPTION;
   }
@@ -4031,9 +3844,7 @@ HVC_RetCode HiveClient_JNI::getRedefTime(const char* 
schName,
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HiveClient_JNI::getRedefTime()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HiveClient_JNI::getRedefTime()");
     jenv_->PopLocalFrame(NULL);
     return HVC_ERROR_GET_REDEFTIME_EXCEPTION;
   }
@@ -4066,9 +3877,7 @@ HVC_RetCode HiveClient_JNI::getAllSchemas(LIST(Text *)& 
schNames)
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HiveClient_JNI::getAllSchemas()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HiveClient_JNI::getAllSchemas()");
     jenv_->PopLocalFrame(NULL);
     return HVC_ERROR_GET_ALLSCH_EXCEPTION;
   }
@@ -4099,7 +3908,7 @@ HVC_RetCode HiveClient_JNI::executeHiveSQL(const char* 
hiveSQL)
   {
     GetCliGlobals()->setJniErrorStr(getErrorText(HVC_ERROR_GET_ALLTBL_PARAM));
     jenv_->PopLocalFrame(NULL);
-    return HVC_ERROR_GET_ALLTBL_PARAM;
+    return HVC_ERROR_EXECUTE_HIVE_SQL_PARAM;
   }
   
   tsRecentJMFromJNI = JavaMethods_[JM_EXEC_HIVE_SQL].jm_full_name;
@@ -4107,11 +3916,9 @@ HVC_RetCode HiveClient_JNI::executeHiveSQL(const char* 
hiveSQL)
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HiveClient_JNI::executeHiveSQL()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HiveClient_JNI::executeHiveSQL()");
     jenv_->PopLocalFrame(NULL);
-    return HVC_ERROR_GET_ALLSCH_EXCEPTION;
+    return HVC_ERROR_EXECUTE_HIVE_SQL_EXCEPTION;
   }
 
   QRLogger::log(CAT_SQL_HBASE, LL_DEBUG, 
@@ -4143,21 +3950,9 @@ HVC_RetCode HiveClient_JNI::getAllTables(const char* 
schName,
     (jarray)jenv_->CallObjectMethod(javaObj_, 
JavaMethods_[JM_GET_ATL].methodID, 
                             js_schName);
 
-  if (j_tblNames == NULL) 
-    {
-      getExceptionDetails();
-
-      logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-      logError(CAT_SQL_HBASE, "HiveClient_JNI::getAllTables()", 
getLastError());
-      jenv_->PopLocalFrame(NULL);
-      return HVC_ERROR_EXISTS_EXCEPTION;
-    }
-
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HiveClient_JNI::getAllTables()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HiveClient_JNI::getAllTables()");
     jenv_->PopLocalFrame(NULL);
     return HVC_ERROR_GET_ALLTBL_EXCEPTION;
   }
@@ -4520,17 +4315,13 @@ HTC_RetCode HTableClient_JNI::prepareForNextCell(int 
idx)
     kvBufferObj = jenv_->GetObjectArrayElement(jKvFamArray_, idx);
     if (jenv_->ExceptionCheck())
     {
-      getExceptionDetails();
-      logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-      logError(CAT_SQL_HBASE, "HTableClient_JNI::prepareForNextCell()", 
getLastError());
+      getExceptionDetails(__FILE__, __LINE__, 
"HTableClient_JNI::prepareForNextCell()");
       return HTC_PREPARE_FOR_NEXTCELL_EXCEPTION;
     }
     jba_kvFamArray_ = (jbyteArray)jenv_->NewGlobalRef(kvBufferObj);
     if (jenv_->ExceptionCheck())
     {
-      getExceptionDetails();
-      logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-      logError(CAT_SQL_HBASE, "HTableClient_JNI::prepareForNextCell()", 
getLastError());
+      getExceptionDetails(__FILE__, __LINE__, 
"HTableClient_JNI::prepareForNextCell()");
       return HTC_PREPARE_FOR_NEXTCELL_EXCEPTION;
     }
     jenv_->DeleteLocalRef(kvBufferObj);
@@ -4543,17 +4334,13 @@ HTC_RetCode HTableClient_JNI::prepareForNextCell(int 
idx)
     kvBufferObj = jenv_->GetObjectArrayElement(jKvQualArray_, idx);
     if (jenv_->ExceptionCheck())
     {
-      getExceptionDetails();
-      logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-      logError(CAT_SQL_HBASE, "HTableClient_JNI::prepareForNextCell()", 
getLastError());
+      getExceptionDetails(__FILE__, __LINE__, 
"HTableClient_JNI::prepareForNextCell()");
       return HTC_PREPARE_FOR_NEXTCELL_EXCEPTION;
     }
     jba_kvQualArray_ = (jbyteArray)jenv_->NewGlobalRef(kvBufferObj);
     if (jenv_->ExceptionCheck())
     {
-      getExceptionDetails();
-      logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-      logError(CAT_SQL_HBASE, "HTableClient_JNI::prepareForNextCell()", 
getLastError());
+      getExceptionDetails(__FILE__, __LINE__, 
"HTableClient_JNI::prepareForNextCell()");
       return HTC_PREPARE_FOR_NEXTCELL_EXCEPTION;
     }
     jenv_->DeleteLocalRef(kvBufferObj);
@@ -4566,17 +4353,13 @@ HTC_RetCode HTableClient_JNI::prepareForNextCell(int 
idx)
     kvBufferObj = jenv_->GetObjectArrayElement(jKvBuffer_, idx);
     if (jenv_->ExceptionCheck())
     {
-      getExceptionDetails();
-      logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-      logError(CAT_SQL_HBASE, "HTableClient_JNI::prepareForNextCell()", 
getLastError());
+      getExceptionDetails(__FILE__, __LINE__, 
"HTableClient_JNI::prepareForNextCell()");
       return HTC_PREPARE_FOR_NEXTCELL_EXCEPTION;
     }
     jba_kvBuffer_ = (jbyteArray)jenv_->NewGlobalRef(kvBufferObj);
     if (jenv_->ExceptionCheck())
     {
-      getExceptionDetails();
-      logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-      logError(CAT_SQL_HBASE, "HTableClient_JNI::prepareForNextCell()", 
getLastError());
+      getExceptionDetails(__FILE__, __LINE__, 
"HTableClient_JNI::prepareForNextCell()");
       return HTC_PREPARE_FOR_NEXTCELL_EXCEPTION;
     }
     jenv_->DeleteLocalRef(kvBufferObj);
@@ -4744,9 +4527,7 @@ HTC_RetCode HTableClient_JNI::getRowID(HbaseStr &rowID)
        jba_rowID_ = (jbyteArray)jenv_->NewGlobalRef(rowIDObj);
        if (jenv_->ExceptionCheck())
        {
-          getExceptionDetails();
-          logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-          logError(CAT_SQL_HBASE, "HTableClient_JNI::getRowID()", 
getLastError());
+          getExceptionDetails(__FILE__, __LINE__, 
"HTableClient_JNI::getRowID()");
           return HTC_GET_ROWID_EXCEPTION;
        }
        jenv_->DeleteLocalRef(rowIDObj);
@@ -4780,21 +4561,12 @@ HTC_RetCode HTableClient_JNI::fetchRows()
 
    if (jenv_->ExceptionCheck())
    {
-      getExceptionDetails();
-      logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-      logError(CAT_SQL_HBASE, "HTableClient_JNI::fetchRows()", getLastError());
+      getExceptionDetails(__FILE__, __LINE__, "HTableClient_JNI::fetchRows()");
       jenv_->PopLocalFrame(NULL);
       return HTC_ERROR_FETCHROWS_EXCEPTION;
    }
 
    numRowsReturned_ = jRowsReturned;
-   if (numRowsReturned_ == -1)
-   {
-      logError(CAT_SQL_HBASE, "HTableClient_JNI::fetchRows()", 
getLastJavaError());
-      jenv_->PopLocalFrame(NULL);
-      return HTC_ERROR_FETCHROWS_EXCEPTION;
-   }
-   else
    if (numRowsReturned_ == 0) {
       jenv_->PopLocalFrame(NULL);
       return HTC_DONE;
@@ -4879,7 +4651,6 @@ HTC_RetCode 
HTableClient_JNI::completeAsyncOperation(Int32 timeout, NABoolean *r
   HTC_RetCode retcode;
 
   if (initJNIEnv() != JOI_OK) {
-     getExceptionDetails();
      if (hbs_)
         hbs_->incMaxHbaseIOTime(hbs_->getHbaseTimer().stop());
      return HTC_ERROR_COMPLETEASYNCOPERATION_EXCEPTION;
@@ -4887,9 +4658,7 @@ HTC_RetCode 
HTableClient_JNI::completeAsyncOperation(Int32 timeout, NABoolean *r
   jint jtimeout = timeout;
   jbooleanArray jresultArray =  jenv_->NewBooleanArray(resultArrayLen);
   if (jenv_->ExceptionCheck()) {
-      getExceptionDetails();
-      logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-      logError(CAT_SQL_HBASE, "HTableClient_JNI::completeAsyncOperation()", 
getLastError());
+      getExceptionDetails(__FILE__, __LINE__, 
"HTableClient_JNI::completeAsyncOperation()");
       jenv_->PopLocalFrame(NULL);
       if (hbs_)
          hbs_->incMaxHbaseIOTime(hbs_->getHbaseTimer().stop());
@@ -4899,9 +4668,7 @@ HTC_RetCode 
HTableClient_JNI::completeAsyncOperation(Int32 timeout, NABoolean *r
   jboolean jresult = jenv_->CallBooleanMethod(javaObj_, 
JavaMethods_[JM_COMPLETE_PUT].methodID,
                                jtimeout, jresultArray);
   if (jenv_->ExceptionCheck()) {
-    getExceptionDetails();
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HTableClient_JNI::completeAsyncOperation()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HTableClient_JNI::completeAsyncOperation()");
     jenv_->PopLocalFrame(NULL);
     if (hbs_)
        hbs_->incMaxHbaseIOTime(hbs_->getHbaseTimer().stop());

http://git-wip-us.apache.org/repos/asf/trafodion/blob/073cf68d/core/sql/executor/HBaseClient_JNI.h
----------------------------------------------------------------------
diff --git a/core/sql/executor/HBaseClient_JNI.h 
b/core/sql/executor/HBaseClient_JNI.h
index 3177a7a..01b0edc 100644
--- a/core/sql/executor/HBaseClient_JNI.h
+++ b/core/sql/executor/HBaseClient_JNI.h
@@ -282,11 +282,8 @@ public:
   }
 
 private:
-  NAString getLastJavaError();
-
   enum JAVA_METHODS {
-    JM_GET_ERROR
-   ,JM_SCAN_OPEN 
+    JM_SCAN_OPEN 
    ,JM_DELETE    
    ,JM_COPROC_AGGR
    ,JM_GET_NAME
@@ -546,9 +543,6 @@ private:
   NAArray<HbaseStr>* getKeys(Int32 funcIndex, NAHeap *heap, const char 
*tableName, bool useTRex);
 
 private:
-  NAString  getLastJavaError();
-
-private:  
   enum JAVA_METHODS {
     JM_CTOR = 0
    ,JM_INIT
@@ -631,6 +625,8 @@ typedef enum {
  ,HVC_ERROR_GET_ALLSCH_EXCEPTION
  ,HVC_ERROR_GET_ALLTBL_PARAM
  ,HVC_ERROR_GET_ALLTBL_EXCEPTION
+ ,HVC_ERROR_EXECUTE_HIVE_SQL_PARAM
+ ,HVC_ERROR_EXECUTE_HIVE_SQL_EXCEPTION
  ,HVC_LAST
 } HVC_RetCode;
 
@@ -676,13 +672,9 @@ private:
   , isConnected_(FALSE)
   {}
 
-private:
-  NAString getLastJavaError();
-
 private:  
   enum JAVA_METHODS {
     JM_CTOR = 0
-   ,JM_GET_ERROR 
    ,JM_INIT
    ,JM_CLOSE
    ,JM_EXISTS     
@@ -761,9 +753,6 @@ public:
 
 
 private:
-  NAString getLastJavaError();
-
-
   enum JAVA_METHODS {
     JM_CTOR = 0
    ,JM_INIT_HFILE_PARAMS

http://git-wip-us.apache.org/repos/asf/trafodion/blob/073cf68d/core/sql/executor/HdfsClient_JNI.cpp
----------------------------------------------------------------------
diff --git a/core/sql/executor/HdfsClient_JNI.cpp 
b/core/sql/executor/HdfsClient_JNI.cpp
index d5eb4ec..eed9e7d 100644
--- a/core/sql/executor/HdfsClient_JNI.cpp
+++ b/core/sql/executor/HdfsClient_JNI.cpp
@@ -208,9 +208,7 @@ HDFS_Scan_RetCode 
HdfsScan::setScanRanges(ExHdfsScanTcb::HDFS_SCAN_BUF *hdfsScan
    }
 
    if (jenv_->ExceptionCheck()) {
-      getExceptionDetails();
-      logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-      logError(CAT_SQL_HDFS, "HdfsScan::setScanRanges()", getLastError());
+      getExceptionDetails(__FILE__, __LINE__, "HdfsScan::setScanRanges()");
       jenv_->PopLocalFrame(NULL);
       return HDFS_SCAN_ERROR_SET_SCAN_RANGES_EXCEPTION;
    }
@@ -260,9 +258,7 @@ HDFS_Scan_RetCode HdfsScan::trafHdfsRead(int retArray[], 
short arrayLen)
    }
 
    if (jenv_->ExceptionCheck()) {
-      getExceptionDetails();
-      logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-      logError(CAT_SQL_HDFS, "HdfsScan::setScanRanges()", getLastError());
+      getExceptionDetails(__FILE__, __LINE__, "HdfsScan::setScanRanges()");
       jenv_->PopLocalFrame(NULL);
       return HDFS_SCAN_ERROR_TRAF_HDFS_READ_EXCEPTION;
    }
@@ -292,9 +288,7 @@ HDFS_Scan_RetCode HdfsScan::stop()
    }
 
    if (jenv_->ExceptionCheck()) {
-      getExceptionDetails();
-      logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-      logError(CAT_SQL_HDFS, "HdfsScan::stop()", getLastError());
+      getExceptionDetails(__FILE__, __LINE__, "HdfsScan::stop()");
       jenv_->PopLocalFrame(NULL);
       return HDFS_SCAN_ERROR_STOP_EXCEPTION;
    }
@@ -513,9 +507,7 @@ HDFS_Client_RetCode HdfsClient::hdfsCreate(const char* 
path, NABoolean overwrite
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS, "HdfsClient::hdfsCreate()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::hdfsCreate()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_HDFS_CREATE_EXCEPTION;
   }
@@ -557,9 +549,7 @@ HDFS_Client_RetCode HdfsClient::hdfsOpen(const char* path, 
NABoolean compress)
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS, "HdfsClient::hdfsOpen()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::hdfsOpen()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_HDFS_OPEN_EXCEPTION;
   }
@@ -608,9 +598,7 @@ Int32 HdfsClient::hdfsWrite(const char* data, Int64 len, 
HDFS_Client_RetCode &hd
   }
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS, "HdfsClient::hdfsWrite()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::hdfsWrite()");
     jenv_->PopLocalFrame(NULL);
     hdfsClientRetcode = HDFS_CLIENT_ERROR_HDFS_WRITE_EXCEPTION;
     return 0;
@@ -650,9 +638,7 @@ Int32 HdfsClient::hdfsRead(const char* data, Int64 len, 
HDFS_Client_RetCode &hdf
   }
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS, "HdfsClient::hdfsRead()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::hdfsRead()");
     jenv_->PopLocalFrame(NULL);
     hdfsClientRetcode = HDFS_CLIENT_ERROR_HDFS_READ_EXCEPTION;
     return 0;
@@ -681,9 +667,7 @@ HDFS_Client_RetCode HdfsClient::hdfsClose()
   }
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS, "HdfsClient::hdfsClose()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::hdfsClose()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_HDFS_CLOSE_EXCEPTION;
   }
@@ -719,9 +703,7 @@ HDFS_Client_RetCode HdfsClient::hdfsCleanUnloadPath( const 
NAString& uldPath)
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS, "HdfsClient::hdfsCleanUnloadPath()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HdfsClient::hdfsCleanUnloadPath()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_HDFS_CLEANUP_EXCEPTION;
   }
@@ -760,9 +742,7 @@ HDFS_Client_RetCode HdfsClient::hdfsMergeFiles( const 
NAString& srcPath,
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS, "HdfsClient::hdfsMergeFiles()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::hdfsMergeFiles()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_HDFS_MERGE_FILES_EXCEPTION;
   }
@@ -799,9 +779,7 @@ HDFS_Client_RetCode HdfsClient::hdfsDeletePath( const 
NAString& delPath)
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS, "HdfsClient::hdfsDeletePath()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::hdfsDeletePath()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_HDFS_DELETE_PATH_EXCEPTION;
   }
@@ -836,9 +814,7 @@ HDFS_Client_RetCode HdfsClient::hdfsListDirectory(const 
char *pathStr, HDFS_File
           js_pathStr, jniObj);
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS, "HdfsClient::hdfsListDirectory()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::hdfsListDirectory()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_HDFS_LIST_DIR_EXCEPTION;
   } 
@@ -868,9 +844,7 @@ HDFS_Client_RetCode HdfsClient::hdfsExists( const NAString& 
uldPath, NABoolean &
   exist = jresult;
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS, "HdfsClient::hdfsExists()", getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::hdfsExists()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_HDFS_EXISTS_EXCEPTION;
   } 
@@ -901,9 +875,7 @@ HDFS_Client_RetCode 
HdfsClient::getHiveTableMaxModificationTs( Int64& maxModific
   jenv_->DeleteLocalRef(js_tableDirPaths);
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails(jenv_);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HDFSClientI::getHiveTableMaxModificationTs()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HdfsClient::getHiveTableMaxModificationTS()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_HIVE_TBL_MAX_MODIFICATION_TS_EXCEPTION;
   }
@@ -929,9 +901,7 @@ HDFS_Client_RetCode HdfsClient::getFsDefaultName(char* buf, 
int buf_len)
                               JavaMethods_[JM_GET_FS_DEFAULT_NAME].methodID);
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails(jenv_);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HDFSClient_JNI::getFsDefaultName()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "HdfsClient::getFsDefaultName()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_GET_FS_DEFAULT_NAME_EXCEPTION;
   }
@@ -969,9 +939,7 @@ HDFS_Client_RetCode HdfsClient::hdfsCreateDirectory(const 
NAString &dirName)
                               JavaMethods_[JM_HDFS_CREATE_DIRECTORY].methodID, 
js_dirName);
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails(jenv_);
-    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
-    logError(CAT_SQL_HBASE, "HDFSClient_JNI::hdfsCreateDirectory()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, 
"HdfsClient::hdfsCreateDirectory()");
     jenv_->PopLocalFrame(NULL);
     return HDFS_CLIENT_ERROR_CREATE_DIRECTORY_EXCEPTION;
   }

http://git-wip-us.apache.org/repos/asf/trafodion/blob/073cf68d/core/sql/executor/JavaObjectInterface.cpp
----------------------------------------------------------------------
diff --git a/core/sql/executor/JavaObjectInterface.cpp 
b/core/sql/executor/JavaObjectInterface.cpp
index 2260715..22b9003 100644
--- a/core/sql/executor/JavaObjectInterface.cpp
+++ b/core/sql/executor/JavaObjectInterface.cpp
@@ -46,6 +46,7 @@ int JavaObjectInterface::debugTimeout_ = 0;
 
 __thread JNIEnv* jenv_ = NULL;
 __thread NAString *tsRecentJMFromJNI = NULL;
+__thread NAString *tsSqlJniErrorStr = NULL;
 jclass JavaObjectInterface::gThrowableClass = NULL;
 jclass JavaObjectInterface::gStackTraceClass = NULL;
 jmethodID JavaObjectInterface::gGetStackTraceMethodID = NULL;
@@ -53,6 +54,27 @@ jmethodID JavaObjectInterface::gThrowableToStringMethodID = 
NULL;
 jmethodID JavaObjectInterface::gStackFrameToStringMethodID = NULL;
 jmethodID JavaObjectInterface::gGetCauseMethodID = NULL;
 
+void setSqlJniErrorStr(NAString &errorMsg)
+{
+  if (tsSqlJniErrorStr != NULL)
+     delete tsSqlJniErrorStr;
+  tsSqlJniErrorStr = new NAString(errorMsg); 
+}
+
+void setSqlJniErrorStr(const char *errorMsg)
+{
+  if (tsSqlJniErrorStr != NULL)
+     delete tsSqlJniErrorStr;
+  tsSqlJniErrorStr = new NAString(errorMsg); 
+}
+
+const char *getSqlJniErrorStr()
+{
+   if (tsSqlJniErrorStr == NULL)
+      return "";
+   else
+      return tsSqlJniErrorStr->data();
+}
   
 static const char* const joiErrorEnumStr[] = 
 {
@@ -451,8 +473,9 @@ JOI_RetCode JavaObjectInterface::init(char *className,
        lJavaClass = jenv_->FindClass(className); 
        if (jenv_->ExceptionCheck()) 
        {
-          getExceptionDetails();
-          QRLogger::log(CAT_SQL_HDFS_JNI_TOP, LL_ERROR, "Exception in 
FindClass(%s).", className);
+          char errMsg[200];
+          snprintf(errMsg, sizeof(errMsg), "Exception in FindClass(%s)", 
className);
+          getExceptionDetails(__FILE__, __LINE__, errMsg);
           return JOI_ERROR_FINDCLASS;
        }
        if (lJavaClass == 0) 
@@ -476,13 +499,12 @@ JOI_RetCode JavaObjectInterface::init(char *className,
                                                      
JavaMethods[i].jm_signature);
         if (JavaMethods[i].methodID == 0 || jenv_->ExceptionCheck())
         { 
-          getExceptionDetails();
+          getExceptionDetails(__FILE__, __LINE__, "GetMethodId()");
           JavaMethods[i].methodID = jenv_->GetStaticMethodID(javaClass, 
                                                      JavaMethods[i].jm_name, 
                                                      
JavaMethods[i].jm_signature);
           if (JavaMethods[i].methodID == 0 || jenv_->ExceptionCheck()) {
-             getExceptionDetails();
-             QRLogger::log(CAT_SQL_HDFS_JNI_TOP, LL_ERROR, "Error in 
GetMethod(%s).", JavaMethods[i].jm_name);
+             getExceptionDetails(__FILE__, __LINE__, "GetMethodId()");
              return JOI_ERROR_GETMETHOD;
           }
         }      
@@ -496,8 +518,9 @@ JOI_RetCode JavaObjectInterface::init(char *className,
       jobject jObj = jenv_->NewObject(javaClass, JavaMethods[0].methodID);
       if (jObj == 0 || jenv_->ExceptionCheck())
       { 
-        getExceptionDetails();
-        QRLogger::log(CAT_SQL_HDFS_JNI_TOP, LL_ERROR, "Error in NewObject() 
for class %s.", className);
+        char errMsg[200];
+        snprintf(errMsg, sizeof(errMsg), "Error in NewObject() for class %s.", 
className);
+        getExceptionDetails(__FILE__, __LINE__, errMsg);
         return JOI_ERROR_NEWOBJ;
       }
       javaObj_ = jenv_->NewGlobalRef(jObj);
@@ -542,50 +565,46 @@ void JavaObjectInterface::logError(std::string &cat, 
const char* file, int line)
   QRLogger::log(cat, LL_ERROR, "Java exception in file %s, line %d.", file, 
line);
 }
 
-NABoolean  JavaObjectInterface::getExceptionDetails(JNIEnv *jenv)
+NABoolean  JavaObjectInterface::getExceptionDetails(const char *fileName, int 
lineNo,
+                       const char *methodName)  
 {
-   if (jenv == NULL)
-       jenv = jenv_;
+   JNIEnv *jenv = jenv_;
    CliGlobals *cliGlobals = GetCliGlobals();
-   NAString error_msg(cliGlobals->currContext()->exHeap());
-   if (jenv == NULL)
-   {
-      error_msg = "Internal Error - Unable to obtain jenv";
-      cli_globals->setJniErrorStr(error_msg);
-      return FALSE;
-   } 
+   NAString error_msg;
    if (gThrowableClass == NULL)
    {
       jenv->ExceptionDescribe();
       error_msg = "Internal Error - Unable to find Throwable class";
-      cli_globals->setJniErrorStr(error_msg);
+      setSqlJniErrorStr(error_msg); 
       return FALSE; 
    }
    jthrowable a_exception = jenv->ExceptionOccurred();
    if (a_exception == NULL)
    {
        error_msg = "No java exception was thrown";
-       cli_globals->setJniErrorStr(error_msg);
+       setSqlJniErrorStr(error_msg); 
        return FALSE;
    }
-   appendExceptionMessages(jenv, a_exception, error_msg);
-   cli_globals->setJniErrorStr(error_msg);
+   appendExceptionMessages(a_exception, error_msg);
+   setSqlJniErrorStr(error_msg); 
+   logError(CAT_SQL_EXE, fileName, lineNo); 
+   logError(CAT_SQL_EXE, methodName, error_msg); 
    jenv->ExceptionClear();
    return TRUE;
 }
 
-void JavaObjectInterface::appendExceptionMessages(JNIEnv *jenv, jthrowable 
a_exception, NAString &error_msg)
+void JavaObjectInterface::appendExceptionMessages(jthrowable a_exception, 
NAString &error_msg)
 {
     jstring msg_obj =
-       (jstring) jenv->CallObjectMethod(a_exception,
+       (jstring) jenv_->CallObjectMethod(a_exception,
                                          gThrowableToStringMethodID);
     const char *msg_str;
     if (msg_obj != NULL)
     {
-       msg_str = jenv->GetStringUTFChars(msg_obj, 0);
+       msg_str = jenv_->GetStringUTFChars(msg_obj, 0);
        error_msg += msg_str;
-       jenv->ReleaseStringUTFChars(msg_obj, msg_str);
-       jenv->DeleteLocalRef(msg_obj);
+       jenv_->ReleaseStringUTFChars(msg_obj, msg_str);
+       jenv_->DeleteLocalRef(msg_obj);
     }
     else
        msg_str = "Exception is thrown, but tostring is null";
@@ -593,57 +612,37 @@ void JavaObjectInterface::appendExceptionMessages(JNIEnv 
*jenv, jthrowable a_exc
 
     // Get the stack trace
     jobjectArray frames =
-        (jobjectArray) jenv->CallObjectMethod(
+        (jobjectArray) jenv_->CallObjectMethod(
                                         a_exception,
                                         gGetStackTraceMethodID);
     if (frames == NULL)
        return;
-    jsize frames_length = jenv->GetArrayLength(frames);
+    jsize frames_length = jenv_->GetArrayLength(frames);
 
     jsize i = 0;
     for (i = 0; i < frames_length; i++)
     {
-       jobject frame = jenv->GetObjectArrayElement(frames, i);
-       msg_obj = (jstring) jenv->CallObjectMethod(frame,
+       jobject frame = jenv_->GetObjectArrayElement(frames, i);
+       msg_obj = (jstring) jenv_->CallObjectMethod(frame,
                                             gStackFrameToStringMethodID);
        if (msg_obj != NULL)
        {
-          msg_str = jenv->GetStringUTFChars(msg_obj, 0);
+          msg_str = jenv_->GetStringUTFChars(msg_obj, 0);
           error_msg += "\n";
           error_msg += msg_str;
-          jenv->ReleaseStringUTFChars(msg_obj, msg_str);
-          jenv->DeleteLocalRef(msg_obj);
-          jenv->DeleteLocalRef(frame);
+          jenv_->ReleaseStringUTFChars(msg_obj, msg_str);
+          jenv_->DeleteLocalRef(msg_obj);
+          jenv_->DeleteLocalRef(frame);
        }
     }
-    jthrowable j_cause = (jthrowable)jenv->CallObjectMethod(a_exception, 
gGetCauseMethodID);
+    jthrowable j_cause = (jthrowable)jenv_->CallObjectMethod(a_exception, 
gGetCauseMethodID);
     if (j_cause != NULL) {
        error_msg += " Caused by \n";
-       appendExceptionMessages(jenv, j_cause, error_msg);
+       appendExceptionMessages(j_cause, error_msg);
     }
-    jenv->DeleteLocalRef(a_exception);
+    jenv_->DeleteLocalRef(a_exception);
 } 
 
-NAString JavaObjectInterface::getLastError()
-{
-  return cli_globals->getJniErrorStr();
-}
-
-NAString JavaObjectInterface::getLastJavaError(jmethodID methodID)
-{
-  if (javaObj_ == NULL)
-    return "";
-  jstring j_error = (jstring)jenv_->CallObjectMethod(javaObj_,
-               methodID);
-  if (j_error == NULL)
-      return "";
-  const char *error_str = jenv_->GetStringUTFChars(j_error, NULL);
-  cli_globals->setJniErrorStr(error_str);
-  jenv_->ReleaseStringUTFChars(j_error, error_str);
-  return cli_globals->getJniErrorStr();
-}
-
-
 JOI_RetCode JavaObjectInterface::initJNIEnv()
 {
   JOI_RetCode retcode;

http://git-wip-us.apache.org/repos/asf/trafodion/blob/073cf68d/core/sql/executor/JavaObjectInterface.h
----------------------------------------------------------------------
diff --git a/core/sql/executor/JavaObjectInterface.h 
b/core/sql/executor/JavaObjectInterface.h
index d07b6f0..f6da8ec 100644
--- a/core/sql/executor/JavaObjectInterface.h
+++ b/core/sql/executor/JavaObjectInterface.h
@@ -31,6 +31,7 @@
 #include <sys/syscall.h>
 #include "jni.h"
 #include "Platform.h"
+#include "NAString.h"
 
 class LmJavaOptions;
 
@@ -40,7 +41,11 @@ class LmJavaOptions;
 
 extern __thread JNIEnv *jenv_;
 extern __thread NAString *tsRecentJMFromJNI;
+extern __thread NAString *tsSqlJniErrorStr;
 
+void setSqlJniErrorStr(NAString &errorMsg);
+void setSqlJniErrorStr(const char *errorMsg);
+const char *getSqlJniErrorStr();
 
 // This structure defines the information needed for each java method used.
 struct JavaMethodInit {
@@ -74,8 +79,6 @@ class JavaObjectInterface
   : public ExGod
 #endif
 {
-public:
-  NAString getLastJavaError(jmethodID methodID);
 protected:
 
   // Default constructor - for creating a new JVM              
@@ -119,7 +122,8 @@ protected:
   // Get the error description.
   static char* getErrorText(JOI_RetCode errEnum);
  
-  static NAString getLastError();
+  static const char *getLastError() 
+    { return getSqlJniErrorStr(); }
 
   // Write the description of a Java error to the log file.
   static void logError(std::string &cat, const char* methodName, const char 
*result);
@@ -143,11 +147,10 @@ public:
   {
     return isInitialized_;
   }
-  // Pass in jenv if the thread where the object is created is different than
-  // the thread where exception occurred
-  static NABoolean getExceptionDetails(JNIEnv *jenv = NULL);  
+  static NABoolean getExceptionDetails(const char *fileName, int lineNo,
+                       const char *methodName);  
 
-  static void appendExceptionMessages(JNIEnv *jenv, jthrowable a_exception, 
NAString &error_msg);
+  static void appendExceptionMessages(jthrowable a_exception, NAString 
&error_msg);
   
   NAHeap *getHeap() { return heap_; }
 protected:

http://git-wip-us.apache.org/repos/asf/trafodion/blob/073cf68d/core/sql/executor/OrcFileReader.cpp
----------------------------------------------------------------------
diff --git a/core/sql/executor/OrcFileReader.cpp 
b/core/sql/executor/OrcFileReader.cpp
index 988704d..bc7ee9d 100644
--- a/core/sql/executor/OrcFileReader.cpp
+++ b/core/sql/executor/OrcFileReader.cpp
@@ -166,8 +166,7 @@ OFR_RetCode OrcFileReader::open(const char* path)
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS_ORC_FILE_READER, "OrcFileReader::open()", jresult);
+    getExceptionDetails(__FILE__, __LINE__, "OrcFileReader::open()");
     jenv_->PopLocalFrame(NULL);
     return OFR_ERROR_OPEN_EXCEPTION;
   }
@@ -191,9 +190,7 @@ OFR_RetCode OrcFileReader::getPosition(Int64& pos)
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS_ORC_FILE_READER, __FILE__, __LINE__);
-    logError(CAT_SQL_HDFS_ORC_FILE_READER, "OrcFileReader::getPosition()", 
getLastError());
+    getExceptionDetails(__FILE__, __LINE__, "OrcFileReader::getPosition()");
     jenv_->PopLocalFrame(NULL);
     return OFR_ERROR_GETPOS_EXCEPTION;
   }
@@ -230,8 +227,7 @@ OFR_RetCode OrcFileReader::seeknSync(Int64 pos)
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS_ORC_FILE_READER, __FILE__, __LINE__);
+    getExceptionDetails(__FILE__, __LINE__, "OrcFileReader::seeknSync()");
     jenv_->PopLocalFrame(NULL);
     return OFR_ERROR_SYNC_EXCEPTION;
   }
@@ -270,8 +266,7 @@ OFR_RetCode OrcFileReader::isEOF(bool& isEOF)
 
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS_ORC_FILE_READER, __FILE__, __LINE__);
+    getExceptionDetails(__FILE__, __LINE__, "OrcFileReader::isEOF()");
     jenv_->PopLocalFrame(NULL);
     return OFR_ERROR_ISEOF_EXCEPTION;
   }
@@ -318,9 +313,7 @@ OFR_RetCode OrcFileReader::fetchNextRow(char * buffer, 
long& array_length, long&
        jobject jresult = (jobject)jenv_->CallObjectMethod(javaObj_, 
JavaMethods_[JM_FETCHROW2].methodID);
     if (jenv_->ExceptionCheck()) 
     {
-      getExceptionDetails();
-      logError(CAT_SQL_HDFS_ORC_FILE_READER, __FILE__, __LINE__);
-      logError(CAT_SQL_HDFS_ORC_FILE_READER, "OrcFileReader::fetchNextRow()", 
getLastError());
+      getExceptionDetails(__FILE__, __LINE__, "OrcFileReader::fetchNextRow()");
       jenv_->PopLocalFrame(NULL);
       return OFR_ERROR_FETCHROW_EXCEPTION;
     }
@@ -399,8 +392,7 @@ OFR_RetCode OrcFileReader::close()
 
   if (jenv_->ExceptionCheck()) 
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS_ORC_FILE_READER, __FILE__, __LINE__);
+    getExceptionDetails(__FILE__, __LINE__, "OrcFileReader::close()");
     jenv_->PopLocalFrame(NULL);
     return OFR_ERROR_CLOSE_EXCEPTION;
   }
@@ -432,8 +424,7 @@ OFR_RetCode OrcFileReader::getRowCount(Int64& count)
   
   if (jenv_->ExceptionCheck())
   {
-    getExceptionDetails();
-    logError(CAT_SQL_HDFS_ORC_FILE_READER, __FILE__, __LINE__);
+    getExceptionDetails(__FILE__, __LINE__, "OrcFileReader::getRowCount()");
     jenv_->PopLocalFrame(NULL);
     return OFR_ERROR_GETNUMROWS_EXCEPTION;
   }

http://git-wip-us.apache.org/repos/asf/trafodion/blob/073cf68d/core/sql/executor/SequenceFileReader.cpp
----------------------------------------------------------------------
diff --git a/core/sql/executor/SequenceFileReader.cpp 
b/core/sql/executor/SequenceFileReader.cpp
index 8feb1d5..07bab86 100644
--- a/core/sql/executor/SequenceFileReader.cpp
+++ b/core/sql/executor/SequenceFileReader.cpp
@@ -189,6 +189,13 @@ SFR_RetCode SequenceFileReader::open(const char* path)
   tsRecentJMFromJNI = JavaMethods_[JM_OPEN].jm_full_name;
   jstring jresult = (jstring)jenv_->CallObjectMethod(javaObj_, 
JavaMethods_[JM_OPEN].methodID, js_path);
 
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails(__FILE__, __LINE__, "SequenceFileReader::open()");
+    jenv_->PopLocalFrame(NULL);
+    return SFR_ERROR_OPEN_EXCEPTION;
+  }
+
   if (jresult != NULL)
   {
     logError(CAT_SQL_HDFS_SEQ_FILE_READER, "SequenceFileReader::open()", 
jresult);
@@ -213,6 +220,13 @@ SFR_RetCode SequenceFileReader::getPosition(Int64& pos)
   tsRecentJMFromJNI = JavaMethods_[JM_GETPOS].jm_full_name;
   Int64 result = jenv_->CallLongMethod(javaObj_, 
JavaMethods_[JM_GETPOS].methodID);
 
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails(__FILE__, __LINE__, 
"SequenceFileReader::getPosition()");
+    jenv_->PopLocalFrame(NULL);
+    return SFR_ERROR_GETPOS_EXCEPTION;
+  }
+
   if (result == -1) 
   {
     logError(CAT_SQL_HDFS_SEQ_FILE_READER, 
"SequenceFileReader::getPosition()", getLastError());
@@ -233,12 +247,19 @@ SFR_RetCode SequenceFileReader::seeknSync(Int64 pos)
   QRLogger::log(CAT_SQL_HDFS_SEQ_FILE_READER, LL_DEBUG, 
"SequenceFileReader::seeknSync(%ld) called.", pos);
 
   if (initJNIEnv() != JOI_OK)
-     return SFR_ERROR_GETPOS_EXCEPTION;
+     return SFR_ERROR_SYNC_EXCEPTION;
 
   // String seeknSync(long);
   tsRecentJMFromJNI = JavaMethods_[JM_SYNC].jm_full_name;
   jstring jresult = (jstring)jenv_->CallObjectMethod(javaObj_, 
JavaMethods_[JM_SYNC].methodID, pos);
 
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails(__FILE__, __LINE__, "SequenceFileReader::seeknSync()");
+    jenv_->PopLocalFrame(NULL);
+    return SFR_ERROR_SYNC_EXCEPTION;
+  }
+
   if (jresult != NULL)
   {
     logError(CAT_SQL_HDFS_SEQ_FILE_READER, "SequenceFileReader::seeknSync()", 
jresult);
@@ -263,6 +284,13 @@ SFR_RetCode SequenceFileReader::isEOF(bool& isEOF)
   tsRecentJMFromJNI = JavaMethods_[JM_ISEOF].jm_full_name;
   bool result = jenv_->CallBooleanMethod(javaObj_, 
JavaMethods_[JM_ISEOF].methodID);
 
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails(__FILE__, __LINE__, "SequenceFileReader::seeknSync()");
+    jenv_->PopLocalFrame(NULL);
+    return SFR_ERROR_ISEOF_EXCEPTION;
+  }
+
   jenv_->PopLocalFrame(NULL);
   isEOF = result;
   return SFR_OK;
@@ -279,6 +307,12 @@ SFR_RetCode SequenceFileReader::fetchNextRow(Int64 
stopOffset, char* buffer)
   // java.lang.String fetchNextRow(long stopOffset);
   tsRecentJMFromJNI = JavaMethods_[JM_FETCHROW2].jm_full_name;
   jstring jresult = (jstring)jenv_->CallObjectMethod(javaObj_, 
JavaMethods_[JM_FETCHROW2].methodID, stopOffset);
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails(__FILE__, __LINE__, 
"SequenceFileReader::fetchNextRow()");
+    jenv_->PopLocalFrame(NULL);
+    return SFR_ERROR_FETCHROW_EXCEPTION;
+  }
   if (jresult==NULL && getLastError()) 
   {
     logError(CAT_SQL_HDFS_SEQ_FILE_READER, 
"SequenceFileReader::fetchNextRow()", getLastError());
@@ -312,6 +346,12 @@ SFR_RetCode SequenceFileReader::close()
   // String close();
   tsRecentJMFromJNI = JavaMethods_[JM_CLOSE].jm_full_name;
   jstring jresult = (jstring)jenv_->CallObjectMethod(javaObj_, 
JavaMethods_[JM_CLOSE].methodID);
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails(__FILE__, __LINE__, "SequenceFileReader::close()");
+    jenv_->PopLocalFrame(NULL);
+    return SFR_ERROR_CLOSE_EXCEPTION;
+  }
 
   if (jresult!=NULL) 
   {
@@ -466,6 +506,13 @@ SFW_RetCode SequenceFileWriter::open(const char* path, 
SFW_CompType compression)
   tsRecentJMFromJNI = JavaMethods_[JM_OPEN].jm_full_name;
   jstring jresult = (jstring)jenv_->CallObjectMethod(javaObj_, 
JavaMethods_[JM_OPEN].methodID, js_path, compression);
 
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails(__FILE__, __LINE__, "SequenceFileWriter::open()");
+    jenv_->PopLocalFrame(NULL);
+    return SFW_ERROR_OPEN_EXCEPTION;
+  }
+
   if (jresult != NULL)
   {
     logError(CAT_SQL_HDFS_SEQ_FILE_WRITER, "SequenceFileWriter::open()", 
jresult);
@@ -495,6 +542,12 @@ SFW_RetCode SequenceFileWriter::write(const char* data)
   // String write(java.lang.String);
   tsRecentJMFromJNI = JavaMethods_[JM_WRITE].jm_full_name;
   jstring jresult = (jstring)jenv_->CallObjectMethod(javaObj_, 
JavaMethods_[JM_WRITE].methodID, js_data);
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails(__FILE__, __LINE__, "SequenceFileWriter::write()");
+    jenv_->PopLocalFrame(NULL);
+    return SFW_ERROR_WRITE_EXCEPTION;
+  }
 
   if (jresult != NULL)
   {
@@ -551,6 +604,12 @@ SFW_RetCode SequenceFileWriter::close()
   // String close();
   tsRecentJMFromJNI = JavaMethods_[JM_CLOSE].jm_full_name;
   jstring jresult = (jstring)jenv_->CallObjectMethod(javaObj_, 
JavaMethods_[JM_CLOSE].methodID);
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails(__FILE__, __LINE__, "SequenceFileWriter::close()");
+    jenv_->PopLocalFrame(NULL);
+    return SFW_ERROR_CLOSE_EXCEPTION;
+  }
 
   if (jresult != NULL)
   {

Reply via email to