You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by se...@apache.org on 2016/12/07 23:07:47 UTC

[1/3] incubator-trafodion git commit: [TRAFODION-1988] Better java exception handling in the java/JNI layer in TM

Repository: incubator-trafodion
Updated Branches:
  refs/heads/master 82604a295 -> 547dda169


[TRAFODION-1988] Better java exception handling in the java/JNI layer in TM

The following problems are fixed:
The loaded classes reference are made global to avoid the class reference from gc-ed
Introduced push/pop frame concepts to avoid memory growth usually observed with
many JNI/java transitions
Logged the errors via log4cxx mechanism instead of stdout
Possibly fixes the tm core dumped in obscure way at times


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

Branch: refs/heads/master
Commit: f502bc500a8ece5a07ff63dffd2a5d0410b2b8dc
Parents: 22f577d
Author: selvaganesang <se...@esgyn.com>
Authored: Fri Dec 2 18:35:45 2016 +0000
Committer: selvaganesang <se...@esgyn.com>
Committed: Fri Dec 2 18:44:43 2016 +0000

----------------------------------------------------------------------
 .../sqf/src/seatrans/tm/hbasetmlib2/hbasetm.cpp | 212 +++++++++----------
 .../tm/hbasetmlib2/javaobjectinterfacetm.cpp    | 103 +++++----
 .../tm/hbasetmlib2/javaobjectinterfacetm.h      |  11 +-
 core/sqf/src/tm/macros.gmk                      |   2 +-
 4 files changed, 160 insertions(+), 168 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/f502bc50/core/sqf/src/seatrans/tm/hbasetmlib2/hbasetm.cpp
----------------------------------------------------------------------
diff --git a/core/sqf/src/seatrans/tm/hbasetmlib2/hbasetm.cpp b/core/sqf/src/seatrans/tm/hbasetmlib2/hbasetm.cpp
index 89d117c..968895f 100644
--- a/core/sqf/src/seatrans/tm/hbasetmlib2/hbasetm.cpp
+++ b/core/sqf/src/seatrans/tm/hbasetmlib2/hbasetm.cpp
@@ -174,40 +174,15 @@ CHbaseTM::CHbaseTM() : JavaObjectInterfaceTM()
    iv_traceMask = HBASETM_TraceOff;
    ip_tmTimer = NULL;
    iv_next_msgNum = 1;
-   unlock();
 
    // Need to check return and handle error
    int lv_result = initJVM();
    if(lv_result != JOI_OK) {
-      cout << "CHbaseTM constructor encountered JOI error " << lv_result << " from call to initJVM()."  << endl;
+      tm_log_write(DTM_SEA_SOFT_FAULT, SQ_LOG_CRIT, (char *)"CHbaseTM::CHbaseTM()-1", (char *) _tlp_error_msg->c_str(), -1LL);
       abort();
    }
-}
-
-// CHbaseTM Methods
-#if 0
-CHbaseTM::CHbaseTM(JavaVM *jvm, JNIEnv *jenv) 
-   : JavaObjectInterfaceTM(jvm, jenv)
-{
-   // Mutex attributes: Recursive = true, ErrorCheck=false
-   // ip_mutex = new TM_Mutex(true, false);
-   iv_tm_stats = false;
-
-   lock();
-   iv_initialized = false;
-   my_nid(-1);     // Indicates that the node hasn't been set yet.
-   iv_traceMask = HBASETM_TraceOff;
-   ip_tmTimer = NULL;
-   iv_next_msgNum = 1;
    unlock();
-
-   // Need to check return and handle error
-   if(initJVM()) {
-      cout << "Error on initJVM()\n";
-      abort();
-   }
 }
-#endif
 
 // TM Destructor
 CHbaseTM::~CHbaseTM() 
@@ -280,20 +255,21 @@ short CHbaseTM::initConnection(short pv_nid)
   return RET_OK;
 }
 
-short CHbaseTM::addControlPoint(){
+short CHbaseTM::addControlPoint() {
   JOI_RetCode lv_joi_retcode = JOI_OK;
-  lv_joi_retcode = JavaObjectInterfaceTM::initJVM();
+  lv_joi_retcode = initJNIEnv();
   if (lv_joi_retcode != JOI_OK) {
-    printf("JavaObjectInterfaceTM::initJVM returned: %d\n", lv_joi_retcode);
-    fflush(stdout);
+    tm_log_write(DTM_SEA_SOFT_FAULT, SQ_LOG_CRIT, (char *)"CHbaseTM::addControlPoint()", (char *)_tlp_error_msg->c_str(), -1LL);
     abort();
   }
 
   jlong jresult = _tlp_jenv->CallLongMethod(javaObj_, JavaMethods_[JM_CNTPOINT].methodID);
   if (getExceptionDetails(NULL)) {
      tm_log_write(DTM_SEA_SOFT_FAULT, SQ_LOG_CRIT, (char *)"CHbaseTM::addControlPoint()", (char *)_tlp_error_msg->c_str(), -1LL);
+     _tlp_jenv->PopLocalFrame(NULL);
      return RET_EXCEPTION;
   }
+  _tlp_jenv->PopLocalFrame(NULL);
   if (jresult == 0L) {
     return RET_EXCEPTION;
   }
@@ -303,45 +279,46 @@ short CHbaseTM::addControlPoint(){
 short CHbaseTM::beginTransaction(int64 *pp_transid) {
   jlong  jlv_transid = *pp_transid;
   JOI_RetCode lv_joi_retcode = JOI_OK;
-  lv_joi_retcode = JavaObjectInterfaceTM::initJVM();
+  lv_joi_retcode = initJNIEnv();
   if (lv_joi_retcode != JOI_OK) {
-    printf("JavaObjectInterfaceTM::initJVM returned: %d\n", lv_joi_retcode);
-    fflush(stdout);
+    tm_log_write(DTM_SEA_SOFT_FAULT, SQ_LOG_CRIT, (char *)"CHbaseTM::beginTransaction()", (char *)_tlp_error_msg->c_str(), -1LL);
     abort();
   }
 
   jlong jresult = _tlp_jenv->CallLongMethod(javaObj_, JavaMethods_[JM_BEGIN].methodID, jlv_transid);
   if (getExceptionDetails(NULL)) {
      tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"CHbaseTM::beginTransaction()", (char *)_tlp_error_msg->c_str(), *pp_transid);
+     _tlp_jenv->PopLocalFrame(NULL);
      return RET_EXCEPTION;
   }
   *pp_transid = (long)jresult;
 
+  _tlp_jenv->PopLocalFrame(NULL);
   return RET_OK;
 }
 
 short CHbaseTM::abortTransaction(int64 pv_transid) {
   jlong  jlv_transid = pv_transid;
   JOI_RetCode lv_joi_retcode = JOI_OK;
-  lv_joi_retcode = JavaObjectInterfaceTM::initJVM();
+  lv_joi_retcode = initJNIEnv();
   if (lv_joi_retcode != JOI_OK) {
-    printf("JavaObjectInterfaceTM::initJVM returned: %d\n", lv_joi_retcode);
-    fflush(stdout);
+    tm_log_write(DTM_SEA_SOFT_FAULT, SQ_LOG_CRIT, (char *)"CHbaseTM::abortTransaction()", (char *)_tlp_error_msg->c_str(), -1LL);
     abort();
   }
 
   jshort jresult = _tlp_jenv->CallShortMethod(javaObj_, JavaMethods_[JM_ABORT].methodID, jlv_transid);
   if (getExceptionDetails(NULL)) {
      tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"CHbaseTM::abortTransaction()", (char *)_tlp_error_msg->c_str(), pv_transid);
+     _tlp_jenv->PopLocalFrame(NULL);
      return RET_EXCEPTION;
   }
+  _tlp_jenv->PopLocalFrame(NULL);
   //  RET_NOTX means the transaction wasn't found by the HBase client code (trx).  This is ok here, it
   //  simply means the transaction hasn't been seen by the HBase client code, so no work was done on it.
   if (jresult == RET_NOTX)
   {
     return RET_OK;
   } 
-
   return jresult;
 }
 
@@ -349,26 +326,28 @@ short CHbaseTM::abortTransaction(int64 pv_transid) {
 short CHbaseTM::prepareCommit(int64 pv_transid) {
   jlong   jlv_transid = pv_transid;
   JOI_RetCode lv_joi_retcode = JOI_OK;
-  lv_joi_retcode = JavaObjectInterfaceTM::initJVM();
+  lv_joi_retcode = initJNIEnv();
   if (lv_joi_retcode != JOI_OK) {
-    printf("JavaObjectInterfaceTM::initJVM returned: %d\n", lv_joi_retcode);
-    fflush(stdout);
+    tm_log_write(DTM_SEA_SOFT_FAULT, SQ_LOG_CRIT, (char *)"CHbaseTM::prepareCommit()", (char *)_tlp_error_msg->c_str(), -1LL);
     abort();
   }
 
   jshort jresult = _tlp_jenv->CallShortMethod(javaObj_, JavaMethods_[JM_PRECOMMIT].methodID, jlv_transid);
   if (getExceptionDetails(NULL)) {
      tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"CHbaseTM::prepareCommit()", (char *)_tlp_error_msg->c_str(), pv_transid);
+     _tlp_jenv->PopLocalFrame(NULL);
      return RET_EXCEPTION;
   }
 
-  if (jresult <= RET_LAST)
+  _tlp_jenv->PopLocalFrame(NULL);
+  if (jresult <= RET_LAST) {
      return jresult;
+  }
 
   // For building
-  if(pv_transid) {
+  if(pv_transid) 
     return RET_OK;
-  }
+
   return RET_OK;
 }
 
@@ -376,19 +355,20 @@ short CHbaseTM::prepareCommit(int64 pv_transid) {
 short CHbaseTM::doCommit(int64 pv_transid) {
   jlong   jlv_transid = pv_transid;
   JOI_RetCode lv_joi_retcode = JOI_OK;
-  lv_joi_retcode = JavaObjectInterfaceTM::initJVM();
+  lv_joi_retcode = initJNIEnv();
   if (lv_joi_retcode != JOI_OK) {
-    printf("JavaObjectInterfaceTM::initJVM returned: %d\n", lv_joi_retcode);
-    fflush(stdout);
+    tm_log_write(DTM_SEA_SOFT_FAULT, SQ_LOG_CRIT, (char *)"CHbaseTM::doCommit()", (char *)_tlp_error_msg->c_str(), -1LL);
     abort();
   }
 
   jshort jresult = _tlp_jenv->CallShortMethod(javaObj_, JavaMethods_[JM_DOCOMMIT].methodID, jlv_transid);
   if (getExceptionDetails(NULL)) {
      tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"CHbaseTM::doCommit()", (char *)_tlp_error_msg->c_str(), pv_transid);
+     _tlp_jenv->PopLocalFrame(NULL);
      return RET_EXCEPTION;
   }
 
+  _tlp_jenv->PopLocalFrame(NULL);
   if (jresult == 1)
   {
     // jresult from abort java method - 1 is error
@@ -407,10 +387,9 @@ short CHbaseTM::doCommit(int64 pv_transid) {
 short CHbaseTM::tryCommit(int64 pv_transid) {
   jlong   jlv_transid = pv_transid;
   JOI_RetCode lv_joi_retcode = JOI_OK;
-  lv_joi_retcode = JavaObjectInterfaceTM::initJVM();
+  lv_joi_retcode = initJNIEnv();
   if (lv_joi_retcode != JOI_OK) {
-    printf("JavaObjectInterfaceTM::initJVM returned: %d\n", lv_joi_retcode);
-    fflush(stdout);
+    tm_log_write(DTM_SEA_SOFT_FAULT, SQ_LOG_CRIT, (char *)"CHbaseTM::tryCommit()", (char *)_tlp_error_msg->c_str(), -1LL);
     abort();
   }
 
@@ -420,6 +399,7 @@ short CHbaseTM::tryCommit(int64 pv_transid) {
      return RET_EXCEPTION;
   }
 
+  _tlp_jenv->PopLocalFrame(NULL);
   //  RET_NOTX means the transaction wasn't found by the HBase client code (trx).  This is ok here, it
   //  simply means the transaction hasn't been seen by the HBase client code, so no work was done on it.
   if (jresult == RET_NOTX)
@@ -434,19 +414,20 @@ short CHbaseTM::tryCommit(int64 pv_transid) {
 short CHbaseTM::completeRequest(int64 pv_transid) {
   jlong   jlv_transid = pv_transid;
   JOI_RetCode lv_joi_retcode = JOI_OK;
-  lv_joi_retcode = JavaObjectInterfaceTM::initJVM();
+  lv_joi_retcode = initJNIEnv();
   if (lv_joi_retcode != JOI_OK) {
-    printf("JavaObjectInterfaceTM::initJVM returned: %d\n", lv_joi_retcode);
-    fflush(stdout);
+    tm_log_write(DTM_SEA_SOFT_FAULT, SQ_LOG_CRIT, (char *)"CHbaseTM::completeRequest()", (char *)_tlp_error_msg->c_str(), -1LL);
     abort();
   }
 
   jshort jresult = _tlp_jenv->CallShortMethod(javaObj_, JavaMethods_[JM_COMPLETEREQUEST].methodID, jlv_transid);
   if (getExceptionDetails(NULL)) {
      tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"CHbaseTM::completeRequest()", (char *)_tlp_error_msg->c_str(), pv_transid);
+     _tlp_jenv->PopLocalFrame(NULL);
      return RET_EXCEPTION;
   }
 
+  _tlp_jenv->PopLocalFrame(NULL);
   if (jresult == 1)
   {
     // jresult from abort java method - 1 is error
@@ -624,21 +605,24 @@ int CHbaseTM::registerRegion(int64 pv_transid,
    HBASETrace(HBASETM_TraceAPI, (HDR "CHbaseTM::registerRegion : Txn ID (%d,%d), startid %ld, hostname: %s.\n",
 				 lv_tid.node(), lv_tid.seqnum(), jlv_startid, pa_hostname));
   JOI_RetCode lv_joi_retcode = JOI_OK;
-  lv_joi_retcode = JavaObjectInterfaceTM::initJVM();
+  lv_joi_retcode = initJNIEnv();
   if (lv_joi_retcode != JOI_OK) {
-    printf("JavaObjectInterfaceTM::initJVM returned: %d\n", lv_joi_retcode);
-    fflush(stdout);
+    tm_log_write(DTM_SEA_SOFT_FAULT, SQ_LOG_CRIT, (char *)"CHbaseTM::registerRegion()", (char *)_tlp_error_msg->c_str(), -1LL);
     abort();
   }
 
   jbyteArray jba_hostname = _tlp_jenv->NewByteArray(pv_hostname_Length+1);
-  if (jba_hostname == NULL)
+  if (jba_hostname == NULL) {
+    _tlp_jenv->PopLocalFrame(NULL);
     return RET_ADD_PARAM;
+  }
   _tlp_jenv->SetByteArrayRegion(jba_hostname, 0, pv_hostname_Length, (const jbyte*) pa_hostname);
 
   jbyteArray jba_regionInfo = _tlp_jenv->NewByteArray(pv_regionInfo_Length);
-  if (jba_regionInfo == NULL)
+  if (jba_regionInfo == NULL) {
+    _tlp_jenv->PopLocalFrame(NULL);
     return RET_ADD_PARAM;
+  }
 
   _tlp_jenv->SetByteArrayRegion(jba_regionInfo, 0, pv_regionInfo_Length, (const jbyte*)pa_regionInfo);
 
@@ -653,14 +637,14 @@ int CHbaseTM::registerRegion(int64 pv_transid,
 					jba_regionInfo);
   if (getExceptionDetails(NULL)) {
      tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"CHbaseTM::registerRegion()", (char *)_tlp_error_msg->c_str(), pv_transid);
+     _tlp_jenv->PopLocalFrame(NULL);
      return RET_EXCEPTION;
   }
-  _tlp_jenv->DeleteLocalRef(jba_hostname);
-  _tlp_jenv->DeleteLocalRef(jba_regionInfo);
 
   HBASETrace(HBASETM_TraceExit, (HDR "CHbaseTM::registerRegion : Error %d, Txn ID (%d,%d), hostname %s.\n", 
                 lv_error, lv_tid.node(), lv_tid.seqnum(), pa_hostname));
 
+  _tlp_jenv->PopLocalFrame(NULL);
   return lv_error;
 } //CHbaseTM::registerRegion
 
@@ -724,18 +708,19 @@ int CHbaseTM::participatingRegions(int64 pv_transid)
    HBASETrace(HBASETM_TraceAPI, (HDR "CHbaseTM::participatingRegions : Txn ID (%d,%d).\n", lv_transid.node(), lv_transid.seqnum()));
 
    JOI_RetCode lv_joi_retcode = JOI_OK;
-   lv_joi_retcode = JavaObjectInterfaceTM::initJVM();
-  if (lv_joi_retcode != JOI_OK) {
-    printf("JavaObjectInterfaceTM::initJVM returned: %d\n", lv_joi_retcode);
-    fflush(stdout);
-    abort();
-  }
+   lv_joi_retcode = initJNIEnv();
+   if (lv_joi_retcode != JOI_OK) {
+      tm_log_write(DTM_SEA_SOFT_FAULT, SQ_LOG_CRIT, (char *)"CHbaseTM::participatingRegions()", (char *)_tlp_error_msg->c_str(), -1LL);
+      abort();
+   }
 
    lv_participating = _tlp_jenv->CallIntMethod(javaObj_, JavaMethods_[JM_PARREGION].methodID, lv_transid_j);
-  if (getExceptionDetails(NULL)) {
-     tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"CHbaseTM::participatingRegions()", (char *)_tlp_error_msg->c_str(), pv_transid);
-     lv_participatingCount = -1;
-  }
+   if (getExceptionDetails(NULL)) {
+      tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"CHbaseTM::participatingRegions()", (char *)_tlp_error_msg->c_str(), pv_transid);
+      lv_participatingCount = -1;
+   }
+   _tlp_jenv->PopLocalFrame(NULL);
+
    lv_participatingCount = lv_participating;
 
    HBASETrace(HBASETM_TraceExit, (HDR "CHbaseTM::participatingRegions : Count %d.\n", lv_participatingCount));
@@ -762,10 +747,9 @@ int CHbaseTM::unresolvedRegions(int64 pv_transid)
 short CHbaseTM::stall(int where){
   jint jiv_where = where;
   JOI_RetCode lv_joi_retcode = JOI_OK;
-  lv_joi_retcode = JavaObjectInterfaceTM::initJVM();
+  lv_joi_retcode = initJNIEnv();
   if (lv_joi_retcode != JOI_OK) {
-    printf("JavaObjectInterfaceTM::initJVM returned: %d\n", lv_joi_retcode);
-    fflush(stdout);
+    tm_log_write(DTM_SEA_SOFT_FAULT, SQ_LOG_CRIT, (char *)"CHbaseTM::stall()", (char *)_tlp_error_msg->c_str(), -1LL);
     abort();
   }
 
@@ -773,18 +757,19 @@ short CHbaseTM::stall(int where){
   _tlp_jenv->CallShortMethod(javaObj_, JavaMethods_[JM_STALL].methodID, jiv_where);
   if (getExceptionDetails(NULL)) {
      tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"CHbaseTM::stall()", (char *)_tlp_error_msg->c_str(), -1LL);
+     _tlp_jenv->PopLocalFrame(NULL);
      return RET_EXCEPTION;
-  }
+  } 
+  _tlp_jenv->PopLocalFrame(NULL);
   return RET_OK;
 }
 
 short CHbaseTM::nodeDown(int32 nid){
   jint jiv_nid = nid;
   JOI_RetCode lv_joi_retcode = JOI_OK;
-  lv_joi_retcode = JavaObjectInterfaceTM::initJVM();
+  lv_joi_retcode = initJNIEnv();
   if (lv_joi_retcode != JOI_OK) {
-    printf("JavaObjectInterfaceTM::initJVM returned: %d\n", lv_joi_retcode);
-    fflush(stdout);
+    tm_log_write(DTM_SEA_SOFT_FAULT, SQ_LOG_CRIT, (char *)"CHbaseTM::nodeDown()", (char *)_tlp_error_msg->c_str(), -1LL);
     abort();
   }
 
@@ -792,8 +777,10 @@ short CHbaseTM::nodeDown(int32 nid){
   _tlp_jenv->CallShortMethod(javaObj_, JavaMethods_[JM_NODEDOWN].methodID, jiv_nid);
   if (getExceptionDetails(NULL)) {
      tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"CHbaseTM::nodeDown()", (char *)_tlp_error_msg->c_str(), -1LL);
+     _tlp_jenv->PopLocalFrame(NULL);
      return RET_EXCEPTION;
   }
+  _tlp_jenv->PopLocalFrame(NULL);
   return RET_OK;
 }
 
@@ -801,10 +788,9 @@ short CHbaseTM::nodeDown(int32 nid){
 short CHbaseTM::nodeUp(int32 nid){
   jint jiv_nid = nid;
   JOI_RetCode lv_joi_retcode = JOI_OK;
-  lv_joi_retcode = JavaObjectInterfaceTM::initJVM();
+  lv_joi_retcode = initJNIEnv();
   if (lv_joi_retcode != JOI_OK) {
-    printf("JavaObjectInterfaceTM::initJVM returned: %d\n", lv_joi_retcode);
-    fflush(stdout);
+    tm_log_write(DTM_SEA_SOFT_FAULT, SQ_LOG_CRIT, (char *)"CHbaseTM::nodeUp()", (char *)_tlp_error_msg->c_str(), -1LL);
     abort();
   }
 
@@ -812,8 +798,10 @@ short CHbaseTM::nodeUp(int32 nid){
   _tlp_jenv->CallShortMethod(javaObj_, JavaMethods_[JM_NODEUP].methodID, jiv_nid);
   if (getExceptionDetails(NULL)) {
      tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"CHbaseTM::nodeUp()", (char *)_tlp_error_msg->c_str(), -1LL);
+    _tlp_jenv->PopLocalFrame(NULL);
      return RET_EXCEPTION;
   }
+  _tlp_jenv->PopLocalFrame(NULL);
   return RET_OK;
 }
 
@@ -836,16 +824,17 @@ int CHbaseTM::createTable(int64 pv_transid,
               (HDR "CHbaseTM::createTable returning %d.\n", lv_error));
 
    JOI_RetCode lv_joi_retcode = JOI_OK;
-   lv_joi_retcode = JavaObjectInterfaceTM::initJVM();
+   lv_joi_retcode = initJNIEnv();
    if (lv_joi_retcode != JOI_OK) {
-      printf("JavaObjectInterfaceTM::initJVM returned: %d\n", lv_joi_retcode);
-      fflush(stdout);
+      tm_log_write(DTM_SEA_SOFT_FAULT, SQ_LOG_CRIT, (char *)"CHbaseTM::createTable()", (char *)_tlp_error_msg->c_str(), -1LL);
       abort();
    }
 
    jbyteArray jba_tbldesc = _tlp_jenv->NewByteArray(pv_tbldesc_len);
-   if (jba_tbldesc == NULL)
+   if (jba_tbldesc == NULL) {
+      _tlp_jenv->PopLocalFrame(NULL);
       return RET_ADD_PARAM;
+   }
    _tlp_jenv->SetByteArrayRegion(jba_tbldesc, 0, pv_tbldesc_len, (const jbyte*) pa_tbldesc);
 
    jobjectArray j_keys = NULL;
@@ -861,15 +850,13 @@ int CHbaseTM::createTable(int64 pv_transid,
                     j_keys);
   if (getExceptionDetails(NULL)) {
      tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"CHbaseTM::createTable()", (char *)_tlp_error_msg->c_str(), pv_transid);
+     _tlp_jenv->PopLocalFrame(NULL);
      return RET_EXCEPTION;
   }
 
-   _tlp_jenv->DeleteLocalRef(jba_tbldesc);
-   _tlp_jenv->DeleteLocalRef(j_keys);
-
    HBASETrace(HBASETM_TraceExit, (HDR "CHbaseTM::createTable : Error %d, Txn ID (%d,%d), hostname %s.\n",
                 lv_error, lv_tid.node(), lv_tid.seqnum(), pa_tbldesc));
-
+   _tlp_jenv->PopLocalFrame(NULL);
    return lv_error;
 }
 
@@ -889,19 +876,20 @@ int CHbaseTM::alterTable(int64 pv_transid,
    CTmTxKey lv_tid(pv_transid);
 
    HBASETrace(HBASETM_TraceExitError,
-              (HDR "CHbaseTM::createTable returning %d.\n", lv_error));
+              (HDR "CHbaseTM::alterTable returning %d.\n", lv_error));
 
    JOI_RetCode lv_joi_retcode = JOI_OK;
-   lv_joi_retcode = JavaObjectInterfaceTM::initJVM();
+   lv_joi_retcode = initJNIEnv();
    if (lv_joi_retcode != JOI_OK) {
-      printf("JavaObjectInterfaceTM::initJVM returned: %d\n", lv_joi_retcode);
-      fflush(stdout);
+      tm_log_write(DTM_SEA_SOFT_FAULT, SQ_LOG_CRIT, (char *)"CHbaseTM::alterTable()", (char *)_tlp_error_msg->c_str(), -1LL);
       abort();
    }
 
    jbyteArray jba_tblname = _tlp_jenv->NewByteArray(pv_tblname_len);
-   if (jba_tblname == NULL)
+   if (jba_tblname == NULL) {
+      _tlp_jenv->PopLocalFrame(NULL);
       return RET_ADD_PARAM;
+   }
    _tlp_jenv->SetByteArrayRegion(jba_tblname, 0, pv_tblname_len, (const jbyte*) pa_tblname);
 
    jobjectArray j_tblopts = NULL;
@@ -914,11 +902,10 @@ int CHbaseTM::alterTable(int64 pv_transid,
                     j_tblopts);
    if (getExceptionDetails(NULL)) {
       tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"CHbaseTM::alterTable()", (char *)_tlp_error_msg->c_str(), pv_transid);
+      _tlp_jenv->PopLocalFrame(NULL);
       return RET_EXCEPTION;
    }
-
-   _tlp_jenv->DeleteLocalRef(jba_tblname);
-   _tlp_jenv->DeleteLocalRef(j_tblopts);
+   _tlp_jenv->PopLocalFrame(NULL);
 
    HBASETrace(HBASETM_TraceExit, (HDR "CHbaseTM::createTable : Error %d, Txn ID (%d,%d), hostname %s.\n",
                 lv_error, lv_tid.node(), lv_tid.seqnum(), pa_tblname));
@@ -943,16 +930,17 @@ int CHbaseTM::regTruncateOnAbort(int64 pv_transid,
               (HDR "CHbaseTM::regTruncateOnAbort returning %d.\n", lv_error));
 
    JOI_RetCode lv_joi_retcode = JOI_OK;
-   lv_joi_retcode = JavaObjectInterfaceTM::initJVM();
+   lv_joi_retcode = initJNIEnv();
    if (lv_joi_retcode != JOI_OK) {
-      printf("JavaObjectInterfaceTM::initJVM returned: %d\n", lv_joi_retcode);
-      fflush(stdout);
+      tm_log_write(DTM_SEA_SOFT_FAULT, SQ_LOG_CRIT, (char *)"CHbaseTM::regTruncateAbort()", (char *)_tlp_error_msg->c_str(), -1LL);
       abort();
    }
 
    jbyteArray jba_tblname = _tlp_jenv->NewByteArray(pv_tblname_len);
-   if (jba_tblname == NULL)
+   if (jba_tblname == NULL) {
+      _tlp_jenv->PopLocalFrame(NULL);
       return RET_ADD_PARAM;
+   }
    _tlp_jenv->SetByteArrayRegion(jba_tblname, 0, pv_tblname_len, (const jbyte*) pa_tblname);
 
    lv_error = _tlp_jenv->CallShortMethod(javaObj_,
@@ -961,9 +949,10 @@ int CHbaseTM::regTruncateOnAbort(int64 pv_transid,
                     jba_tblname);
    if (getExceptionDetails(NULL)) {
       tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"CHbaseTM::regTruncateOnAbort()", (char *)_tlp_error_msg->c_str(), pv_transid);
+      _tlp_jenv->PopLocalFrame(NULL);
       return RET_EXCEPTION;
    }
-   _tlp_jenv->DeleteLocalRef(jba_tblname);
+   _tlp_jenv->PopLocalFrame(NULL);
 
    HBASETrace(HBASETM_TraceExit, (HDR "CHbaseTM::regTruncateOnAbort : Error %d, Txn ID (%d,%d), hostname %s.\n",
                 lv_error, lv_tid.node(), lv_tid.seqnum(), pa_tblname));
@@ -988,16 +977,17 @@ int CHbaseTM::dropTable(int64 pv_transid,
               (HDR "CHbaseTM::dropTable returning %d.\n", lv_error));
 
    JOI_RetCode lv_joi_retcode = JOI_OK;
-   lv_joi_retcode = JavaObjectInterfaceTM::initJVM();
+   lv_joi_retcode = initJNIEnv();
    if (lv_joi_retcode != JOI_OK) {
-      printf("JavaObjectInterfaceTM::initJVM returned: %d\n", lv_joi_retcode);
-      fflush(stdout);
+      tm_log_write(DTM_SEA_SOFT_FAULT, SQ_LOG_CRIT, (char *)"CHbaseTM::dropTable()", (char *)_tlp_error_msg->c_str(), -1LL);
       abort();
    }
 
    jbyteArray jba_tblname = _tlp_jenv->NewByteArray(pv_tblname_len);
-   if (jba_tblname == NULL)
+   if (jba_tblname == NULL) {
+      _tlp_jenv->PopLocalFrame(NULL);
       return RET_ADD_PARAM;
+   }
    _tlp_jenv->SetByteArrayRegion(jba_tblname, 0, pv_tblname_len, (const jbyte*) pa_tblname);
 
    lv_error = _tlp_jenv->CallShortMethod(javaObj_,
@@ -1006,10 +996,11 @@ int CHbaseTM::dropTable(int64 pv_transid,
                     jba_tblname);
    if (getExceptionDetails(NULL)) {
       tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"CHbaseTM::dropTable()", (char *)_tlp_error_msg->c_str(), pv_transid);
+      _tlp_jenv->PopLocalFrame(NULL);
       return RET_EXCEPTION;
    }
 
-   _tlp_jenv->DeleteLocalRef(jba_tblname);
+   _tlp_jenv->PopLocalFrame(NULL);
 
    HBASETrace(HBASETM_TraceExit, (HDR "CHbaseTM::dropTable : Error %d, Txn ID (%d,%d), hostname %s.\n",
                 lv_error, lv_tid.node(), lv_tid.seqnum(), pa_tblname));
@@ -1100,24 +1091,27 @@ void CHbaseTM::shutdown()
 HashMapArray* CHbaseTM::requestRegionInfo(){
 
    JOI_RetCode lv_joi_retcode = JOI_OK;
-   lv_joi_retcode = JavaObjectInterfaceTM::initJVM();
+   lv_joi_retcode = initJNIEnv();
    if (lv_joi_retcode != JOI_OK) {
-      printf("JavaObjectInterfaceTM::initJVM returned: %d\n", lv_joi_retcode);
-      fflush(stdout);
+      tm_log_write(DTM_SEA_SOFT_FAULT, SQ_LOG_CRIT, (char *)"CHbaseTM::requestRegionInfo()", (char *)_tlp_error_msg->c_str(), -1LL);
       abort();
    }
    jobject jHashMapArray = _tlp_jenv->CallObjectMethod(javaObj_, JavaMethods_[JM_RQREGINFO].methodID);
    if (getExceptionDetails(NULL)) {
       tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"CHbaseTM::requestRegionInfo()", (char *)_tlp_error_msg->c_str(), -1LL);
+      _tlp_jenv->PopLocalFrame(NULL);
       return NULL;
    }
 
-   if(jHashMapArray == NULL)
+   if (jHashMapArray == NULL) {
+      _tlp_jenv->PopLocalFrame(NULL);
       return NULL;
+   }
 
    HashMapArray* regionMap = new HashMapArray(jvm_, _tlp_jenv, jHashMapArray);
    regionMap->init();
 
+   _tlp_jenv->PopLocalFrame(NULL);
    return regionMap;
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/f502bc50/core/sqf/src/seatrans/tm/hbasetmlib2/javaobjectinterfacetm.cpp
----------------------------------------------------------------------
diff --git a/core/sqf/src/seatrans/tm/hbasetmlib2/javaobjectinterfacetm.cpp b/core/sqf/src/seatrans/tm/hbasetmlib2/javaobjectinterfacetm.cpp
index 8f89d8b..eaae702 100755
--- a/core/sqf/src/seatrans/tm/hbasetmlib2/javaobjectinterfacetm.cpp
+++ b/core/sqf/src/seatrans/tm/hbasetmlib2/javaobjectinterfacetm.cpp
@@ -21,6 +21,7 @@
 // @@@ END COPYRIGHT @@@
 // **********************************************************************
 
+#include "tmlogging.h"
 #include "javaobjectinterfacetm.h"
 
 // ===========================================================================
@@ -28,9 +29,11 @@
 // ===========================================================================
 
 JavaVM* JavaObjectInterfaceTM::jvm_  = NULL;
+jint jniHandleCapacity_ = 0;
 
 #define DEFAULT_MAX_TM_HEAP_SIZE "2048" 
 #define USE_JVM_DEFAULT_MAX_HEAP_SIZE 0
+#define TRAF_DEFAULT_JNIHANDLE_CAPACITY 32
   
 static const char* const joiErrorEnumStr[] = 
 {
@@ -42,6 +45,7 @@ static const char* const joiErrorEnumStr[] =
  ,"JNI FindClass() failed"
  ,"JNI GetMethodID() failed"
  ,"JNI NewObject() failed"
+ ,"initJNIEnv() failed"
  ,"Error Unknown"
 };
 
@@ -62,10 +66,7 @@ jmethodID JavaObjectInterfaceTM::gGetCauseMethodID = NULL;
 char* JavaObjectInterfaceTM::getErrorText(JOI_RetCode errEnum)
 {
    if (errEnum >= JOI_LAST) {
-      fprintf(stderr,"getErrorText called with out of bounds index %d.\n",errEnum);
-      fflush(stderr);
       abort();
-      //return (char*)joiErrorEnumStr[JOI_LAST];
    }
    else
       return (char*)joiErrorEnumStr[errEnum];
@@ -128,8 +129,6 @@ int JavaObjectInterfaceTM::createJVM()
   char debugOptions[300];
   int numJVMOptions = 0;
 
-  //printf("In JavaObjectInterfaceTM::createJVM\n");
-
   const char *maxHeapSize = getenv("DTM_JVM_MAX_HEAP_SIZE_MB");  
   char heapOptions[100];  
   int heapSize;  
@@ -163,7 +162,6 @@ int JavaObjectInterfaceTM::createJVM()
     abort();
   }
   _tlv_jenv_set = true;
-  fflush(stdout);
   free(classPathArg);
   return ret;
 }
@@ -212,18 +210,27 @@ JOI_RetCode JavaObjectInterfaceTM::initJVM()
     jsize jvm_count = 0;
     // Is there an existing JVM already created?
     result = JNI_GetCreatedJavaVMs (&jvm_, 1, &jvm_count);
-    if (result != JNI_OK)
+    if (result != JNI_OK) {
+      set_error_msg(getErrorText(JOI_ERROR_CHECK_JVM));
       return JOI_ERROR_CHECK_JVM;      
+    }
       
     if (jvm_count == 0)
     {
       // No - create a new one.
       result = createJVM();
-      if (result != JNI_OK)
+      if (result != JNI_OK) {
+        set_error_msg(getErrorText(JOI_ERROR_CHECK_JVM));
         return JOI_ERROR_CREATE_JVM;
+      }
       needToDetach_ = false;
         
     }
+    char *jniHandleCapacityStr =  getenv("TRAF_JNIHANDLE_CAPACITY");
+    if (jniHandleCapacityStr != NULL)
+       jniHandleCapacity_ = atoi(jniHandleCapacityStr);
+    if (jniHandleCapacity_ == 0)
+        jniHandleCapacity_ = TRAF_DEFAULT_JNIHANDLE_CAPACITY;
   }
   if (_tlp_jenv == NULL) {
   // We found a JVM, can we use it?
@@ -234,11 +241,10 @@ JOI_RetCode JavaObjectInterfaceTM::initJVM()
       break;
     
     case JNI_EDETACHED:
-      fprintf(stderr,"initJVM: Detached, Try 2 attach\n");
       result = jvm_->AttachCurrentThread((void**) &_tlp_jenv, NULL);   
       if (result != JNI_OK)
       {
-        fprintf(stderr,"initJVM: Error in attaching\n");
+        set_error_msg(getErrorText(JOI_ERROR_ATTACH_JVM));
         return JOI_ERROR_ATTACH_JVM;
       }
       
@@ -246,10 +252,12 @@ JOI_RetCode JavaObjectInterfaceTM::initJVM()
       break;
        
     case JNI_EVERSION:
+      set_error_msg(getErrorText(JOI_ERROR_JVM_VERSION));
       return JOI_ERROR_JVM_VERSION;
       break;
       
     default:
+      set_error_msg(getErrorText(JOI_ERROR_ATTACH_JVM));
       return JOI_ERROR_ATTACH_JVM;
       break;
   }
@@ -312,20 +320,14 @@ JOI_RetCode JavaObjectInterfaceTM::init(char*           className,
   if (methodsInitialized == false || javaObj_ == NULL)
   {
     // Initialize the class pointer
-    jclass javaClass = _tlp_jenv->FindClass(className); 
-    if (_tlp_jenv->ExceptionCheck()) 
-    {
-      fprintf(stderr,"FindClass failed. javaClass %p.\n", javaClass);
-      _tlp_jenv->ExceptionDescribe();
-      _tlp_jenv->ExceptionClear();
-      return JOI_ERROR_FINDCLASS;
-    }
-    
-    if (javaClass == 0) 
-    {
+    jclass lv_javaClass = _tlp_jenv->FindClass(className); 
+    if (getExceptionDetails(NULL)) {
+      tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"JavaObjectInterfaceTM::init()", (char *)_tlp_error_msg->c_str(), -1LL);
       return JOI_ERROR_FINDCLASS;
     }
-    
+    javaClass = (jclass)_tlp_jenv->NewGlobalRef(lv_javaClass);
+    _tlp_jenv->DeleteLocalRef(lv_javaClass);
+ 
     // Initialize the method pointers.
     if (!methodsInitialized)
     {
@@ -334,16 +336,11 @@ JOI_RetCode JavaObjectInterfaceTM::init(char*           className,
         JavaMethods[i].methodID = _tlp_jenv->GetMethodID(javaClass, 
                                                      JavaMethods[i].jm_name.data(), 
                                                      JavaMethods[i].jm_signature.data());
-        if (JavaMethods[i].methodID == 0 || _tlp_jenv->ExceptionCheck())
-        { 
-          fprintf(stderr,"GetMethodID failed returning error. javaClass %p, i %d, "
-                 "name %s, signature %s.\n", javaClass, i, 
-                 JavaMethods[i].jm_name.data(), JavaMethods[i].jm_signature.data());
-          _tlp_jenv->ExceptionDescribe();
-          _tlp_jenv->ExceptionClear();
-          _tlp_jenv->DeleteLocalRef(javaClass);  
-          return JOI_ERROR_GETMETHOD;
-        }      
+        if (getExceptionDetails(NULL)) {
+           tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"JNIEnv->GetMethodID()", 
+                  (char *)_tlp_error_msg->c_str(), -1LL);
+           return JOI_ERROR_GETMETHOD;
+        }
       }
     }
     
@@ -352,12 +349,11 @@ JOI_RetCode JavaObjectInterfaceTM::init(char*           className,
       // Allocate an object of the Java class, and call its constructor.
       // The constructor must be the first entry in the methods array.
       javaObj_ = _tlp_jenv->NewObject(javaClass, JavaMethods[0].methodID);
-      if (javaObj_ == 0 || _tlp_jenv->ExceptionCheck())
-      { 
-        _tlp_jenv->ExceptionDescribe();
-        _tlp_jenv->ExceptionClear();
-        _tlp_jenv->DeleteLocalRef(javaClass);  
-        return JOI_ERROR_NEWOBJ;
+      if (getExceptionDetails(NULL)) {
+         tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"JavaObjectInterfaceTM::init()", 
+             (char *)_tlp_error_msg->c_str(), -1LL);
+         _tlp_jenv->DeleteLocalRef(javaClass);  
+         return JOI_ERROR_NEWOBJ;
       }
       javaObj_ = _tlp_jenv->NewGlobalRef(javaObj_);
     }
@@ -369,28 +365,28 @@ JOI_RetCode JavaObjectInterfaceTM::init(char*           className,
   return JOI_OK;
 }
 
-//////////////////////////////////////////////////////////////////////////////
-// 
-//////////////////////////////////////////////////////////////////////////////
-void JavaObjectInterfaceTM::logError(const char* cat, const char* methodName, jstring jresult)
+JOI_RetCode JavaObjectInterfaceTM::initJNIEnv()
 {
-  if (jresult == NULL) {}
-  else
-  {
-    const char* char_result = _tlp_jenv->GetStringUTFChars(jresult, 0);
-    _tlp_jenv->ReleaseStringUTFChars(jresult, char_result);
-    _tlp_jenv->DeleteLocalRef(jresult);  
+  JOI_RetCode retcode;
+  if (_tlp_jenv == NULL) {
+     if ((retcode = initJVM()) != JOI_OK)
+         return retcode;
   }
+  if (_tlp_jenv->PushLocalFrame(jniHandleCapacity_) != 0) {
+    getExceptionDetails(NULL);
+    return JOI_ERROR_INIT_JNI;
+  }
+  return JOI_OK;
 }
 
-//////////////////////////////////////////////////////////////////////////////
-// 
-//////////////////////////////////////////////////////////////////////////////
-void JavaObjectInterfaceTM::logError(const char* cat, const char* file, int line)
+void set_error_msg(std::string &error_msg) 
 {
+   if (_tlp_error_msg != NULL)
+      delete _tlp_error_msg;
+   _tlp_error_msg = new std::string(error_msg); 
 }
 
-void set_error_msg(std::string &error_msg) 
+void set_error_msg(char *error_msg) 
 {
    if (_tlp_error_msg != NULL)
       delete _tlp_error_msg;
@@ -398,6 +394,7 @@ void set_error_msg(std::string &error_msg)
 }
 
 
+
 bool  JavaObjectInterfaceTM::getExceptionDetails(JNIEnv *jenv)
 {
    std::string error_msg;

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/f502bc50/core/sqf/src/seatrans/tm/hbasetmlib2/javaobjectinterfacetm.h
----------------------------------------------------------------------
diff --git a/core/sqf/src/seatrans/tm/hbasetmlib2/javaobjectinterfacetm.h b/core/sqf/src/seatrans/tm/hbasetmlib2/javaobjectinterfacetm.h
index c44013d..9b2768c 100755
--- a/core/sqf/src/seatrans/tm/hbasetmlib2/javaobjectinterfacetm.h
+++ b/core/sqf/src/seatrans/tm/hbasetmlib2/javaobjectinterfacetm.h
@@ -20,8 +20,8 @@
 //
 // @@@ END COPYRIGHT @@@
 // **********************************************************************
-#ifndef JNI_H
-#define JNI_H
+#ifndef JAVAOBJECTINTERFACETM_H
+#define JAVAOBJECTINTERFACETM_H
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -50,6 +50,7 @@ typedef enum {
  ,JOI_ERROR_FINDCLASS           // JNI FindClass() failed
  ,JOI_ERROR_GETMETHOD           // JNI GetMethodID() failed
  ,JOI_ERROR_NEWOBJ              // JNI NewObject() failed
+ ,JOI_ERROR_INIT_JNI            // initJNIEnv failed
  ,JOI_LAST
 } JOI_RetCode;
 
@@ -112,9 +113,7 @@ protected:
   // Get the error description.
   virtual char* getErrorText(JOI_RetCode errEnum);
 
-  // Write the description of a Java error to the log file.
-  void logError(const char* cat, const char* methodName, jstring jresult);
-  void logError(const char* cat, const char* file, int line);
+  JOI_RetCode initJNIEnv();
 
   void setHBaseCompatibilityMode(bool val)
   {
@@ -160,4 +159,6 @@ protected:
   static jmethodID gGetCauseMethodID;
 };
 
+void set_error_msg(std::string &error_msg); 
+void set_error_msg(char *error_msg); 
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/f502bc50/core/sqf/src/tm/macros.gmk
----------------------------------------------------------------------
diff --git a/core/sqf/src/tm/macros.gmk b/core/sqf/src/tm/macros.gmk
index aff0226..64b1886 100644
--- a/core/sqf/src/tm/macros.gmk
+++ b/core/sqf/src/tm/macros.gmk
@@ -93,7 +93,7 @@ ifeq ($(SQ_USE_INTC),0)
 HPCWARN		= -Wno-unused-parameter
 HPCXXWARN	= -Wno-unused-parameter -Wno-non-virtual-dtor
 endif
-INCLUDES	= -I$(INCEXPDIR) -I$(INCMONDIR) -I$(MY_SPROOT)/export/include -I$(MY_SPROOT)/source/publications -I$(PROTOBUFS)/include -I$(HBASETMLIB) -I$(INC_JAVA) -I$(INC_JAVALINUX) -I$(LOG4CXX_INC_DIR) -I$(LOG4CXX_INC_DIR)/log4cxx -I$(LIBCLOGGER)
+INCLUDES	= -I$(INCEXPDIR) -I$(INCMONDIR) -I$(MY_SPROOT)/export/include -I$(MY_SPROOT)/source/publications -I$(PROTOBUFS)/include -I$(HBASETMLIB) -I$(INC_JAVA) -I$(INC_JAVALINUX) -I$(LOG4CXX_INC_DIR) -I$(LOG4CXX_INC_DIR)/log4cxx -I$(LIBCLOGGER) -I$(MY_SQROOT)/src/tm
 #LIBSX		= -lpthread
 LIBSX		= -pthread
 ifeq ($(USE_THREADED_IO),1)


[2/3] incubator-trafodion git commit: [TRAFODION-1988] Merge branch 'master' of git://git.apache.org/incubator-trafodion into trafodion-1988

Posted by se...@apache.org.
[TRAFODION-1988] Merge branch 'master' of git://git.apache.org/incubator-trafodion into trafodion-1988

Conflicts:
	core/sqf/src/seatrans/tm/hbasetmlib2/hbasetm.cpp


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

Branch: refs/heads/master
Commit: 685a1cec69a31fde0bf55cfb4324604fca1b297f
Parents: f502bc5 c1fadff
Author: selvaganesang <se...@esgyn.com>
Authored: Fri Dec 2 19:03:35 2016 +0000
Committer: selvaganesang <se...@esgyn.com>
Committed: Fri Dec 2 19:03:35 2016 +0000

----------------------------------------------------------------------
 core/conn/jdbcT4/pom.xml                        |  79 ++---
 core/conn/odbc/src/odbc/nsksrvrcore/Makefile    |   2 +-
 core/dbsecurity/auth/Makefile                   |   1 +
 core/sqf/.gitignore                             |   1 +
 core/sqf/Makefile                               |   4 +-
 core/sqf/build-scripts/build.branch             |   8 +-
 core/sqf/build-scripts/build.id                 |   2 +-
 core/sqf/build-scripts/genverhdr.ksh            |  15 +-
 core/sqf/export/include/dtm/tm.h                |  16 +-
 core/sqf/export/include/dtm/tmtransaction.h     |  13 +-
 .../hbase/client/transactional/RMInterface.java |  40 +--
 .../sqf/src/seatrans/tm/hbasetmlib2/hbasetm.cpp |  34 ++-
 core/sqf/src/seatrans/tm/hbasetmlib2/hbasetm.h  |  14 +-
 core/sqf/src/tm/tmddlrequests.cpp               | 292 ++++++++++++-------
 core/sqf/src/tm/tmddlrequests.h                 |   8 +-
 core/sqf/src/tm/tmlib.cpp                       |  26 +-
 core/sqf/src/tm/tmlibmsg.h                      |   3 +
 core/sqf/src/tm/tmrmhbase.cpp                   |  23 +-
 core/sqf/src/tm/tmtransaction.cpp               |  52 +++-
 core/sql/bin/SqlciErrors.txt                    |   8 +-
 core/sql/common/OperTypeEnum.h                  |   8 +-
 core/sql/executor/ExExeUtil.h                   |   1 +
 core/sql/executor/ExExeUtilLoad.cpp             |  46 ++-
 core/sql/executor/ExHbaseAccess.cpp             |  30 ++
 core/sql/executor/ExHbaseAccess.h               |   1 +
 core/sql/executor/HBaseClient_JNI.cpp           | 129 +++++++-
 core/sql/executor/HBaseClient_JNI.h             |  12 +
 core/sql/executor/SequenceFileReader.cpp        | 127 --------
 core/sql/executor/SequenceFileReader.h          |  12 -
 core/sql/exp/ExpHbaseDefs.h                     |   6 +
 core/sql/exp/ExpHbaseInterface.cpp              |  45 +++
 core/sql/exp/ExpHbaseInterface.h                |  12 +-
 core/sql/exp/ExpLOBaccess.cpp                   |   2 -
 core/sql/exp/ExpPackDefs.cpp                    |  10 +
 core/sql/exp/exp_clause.cpp                     |  35 ++-
 core/sql/exp/exp_clause.h                       |   4 +-
 core/sql/exp/exp_clause_derived.h               | 169 +++++++++++
 core/sql/exp/exp_function.cpp                   | 204 ++++++++++++-
 core/sql/exp/exp_function.h                     |  35 ++-
 core/sql/exp/exp_like.cpp                       |  80 +++++
 core/sql/exp/exp_math_func.cpp                  |  19 +-
 core/sql/generator/GenItemFunc.cpp              |  42 ++-
 core/sql/optimizer/BindItemExpr.cpp             |  24 +-
 core/sql/optimizer/BindRelExpr.cpp              |   9 +-
 core/sql/optimizer/ItemCache.cpp                |   4 +-
 core/sql/optimizer/ItemExpr.cpp                 |  45 ++-
 core/sql/optimizer/ItemFunc.h                   | 104 ++++++-
 core/sql/optimizer/NormItemExpr.cpp             |   2 +-
 core/sql/optimizer/SynthType.cpp                |  67 ++++-
 core/sql/parser/ParKeyWords.cpp                 |   2 +
 core/sql/parser/sqlparser.y                     | 125 +++++++-
 core/sql/regress/compGeneral/EXPECTED006.SB     | 192 ++++++++++++
 core/sql/regress/compGeneral/TEST006            |  47 +++
 core/sql/regress/executor/EXPECTED002.SB        |  99 ++++++-
 core/sql/regress/executor/TEST002               |  29 +-
 core/sql/sqlcomp/CmpDDLCatErrorCodes.h          |   4 +-
 core/sql/sqlcomp/CmpSeabaseDDLtable.cpp         |  60 +++-
 .../java/org/trafodion/sql/HBaseClient.java     |  40 +++
 .../java/org/trafodion/sql/HBulkLoadClient.java |   2 -
 .../org/trafodion/sql/SequenceFileWriter.java   |  70 +----
 .../src/asciidoc/_chapters/ddl_msgs.adoc        |  84 +++---
 .../sql_functions_and_expressions.adoc          | 249 +++++++++++++++-
 .../_chapters/sql_language_elements.adoc        |   3 +-
 .../src/asciidoc/_chapters/sql_statements.adoc  | 243 ++++++++-------
 64 files changed, 2487 insertions(+), 687 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/685a1cec/core/sqf/src/seatrans/tm/hbasetmlib2/hbasetm.cpp
----------------------------------------------------------------------
diff --cc core/sqf/src/seatrans/tm/hbasetmlib2/hbasetm.cpp
index 968895f,326ba50..776c38c
--- a/core/sqf/src/seatrans/tm/hbasetmlib2/hbasetm.cpp
+++ b/core/sqf/src/seatrans/tm/hbasetmlib2/hbasetm.cpp
@@@ -849,8 -862,11 +851,12 @@@ int CHbaseTM::createTable(int64 pv_tran
                      jba_tbldesc,
                      j_keys);
    if (getExceptionDetails(NULL)) {
-      tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"CHbaseTM::createTable()", (char *)_tlp_error_msg->c_str(), pv_transid);
+      int errMsgLen = (int)_tlp_error_msg->length();
+ 	 errstrlen = ((errMsgLen < errstrlen) && (errMsgLen > 0)) ? errMsgLen  : errstrlen -1;
+ 	 strncpy(errstr, _tlp_error_msg->c_str(), errstrlen);
+ 	 errstr[errstrlen] = '\0';
+ 	 tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"CHbaseTM::createTable()", (char *)_tlp_error_msg->c_str(), pv_transid);
 +     _tlp_jenv->PopLocalFrame(NULL);
       return RET_EXCEPTION;
    }
  
@@@ -901,11 -921,16 +909,15 @@@ int CHbaseTM::alterTable(int64 pv_trans
                      jba_tblname,
                      j_tblopts);
     if (getExceptionDetails(NULL)) {
+       int errMsgLen = (int)_tlp_error_msg->length();
+       errstrlen = ((errMsgLen < errstrlen) && (errMsgLen > 0)) ? errMsgLen : errstrlen -1;
+       strncpy(errstr, _tlp_error_msg->c_str(), errstrlen);
+       errstr[errstrlen] = '\0';
        tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"CHbaseTM::alterTable()", (char *)_tlp_error_msg->c_str(), pv_transid);
 +      _tlp_jenv->PopLocalFrame(NULL);
        return RET_EXCEPTION;
     }
 -
 -   _tlp_jenv->DeleteLocalRef(jba_tblname);
 -   _tlp_jenv->DeleteLocalRef(j_tblopts);
 +   _tlp_jenv->PopLocalFrame(NULL);
  
     HBASETrace(HBASETM_TraceExit, (HDR "CHbaseTM::createTable : Error %d, Txn ID (%d,%d), hostname %s.\n",
                  lv_error, lv_tid.node(), lv_tid.seqnum(), pa_tblname));
@@@ -948,11 -974,14 +962,15 @@@ int CHbaseTM::regTruncateOnAbort(int64 
                      jlv_transid,
                      jba_tblname);
     if (getExceptionDetails(NULL)) {
+       int errMsgLen = (int)_tlp_error_msg->length();
+       errstrlen = ((errMsgLen < errstrlen) && (errMsgLen > 0)) ? errMsgLen : errstrlen -1;
+       strncpy(errstr, _tlp_error_msg->c_str(), errstrlen);
+       errstr[errstrlen] = '\0';
        tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"CHbaseTM::regTruncateOnAbort()", (char *)_tlp_error_msg->c_str(), pv_transid);
 +      _tlp_jenv->PopLocalFrame(NULL);
        return RET_EXCEPTION;
     }
 -   _tlp_jenv->DeleteLocalRef(jba_tblname);
 +   _tlp_jenv->PopLocalFrame(NULL);
  
     HBASETrace(HBASETM_TraceExit, (HDR "CHbaseTM::regTruncateOnAbort : Error %d, Txn ID (%d,%d), hostname %s.\n",
                  lv_error, lv_tid.node(), lv_tid.seqnum(), pa_tblname));
@@@ -995,8 -1025,11 +1015,12 @@@ int CHbaseTM::dropTable(int64 pv_transi
                      jlv_transid,
                      jba_tblname);
     if (getExceptionDetails(NULL)) {
+       int errMsgLen = (int)_tlp_error_msg->length();
+       errstrlen = ((errMsgLen < errstrlen) && (errMsgLen > 0)) ? errMsgLen : errstrlen -1;
+       strncpy(errstr, _tlp_error_msg->c_str(), errstrlen);
+       errstr[errstrlen] = '\0';
        tm_log_write(DTM_TM_JNI_ERROR, SQ_LOG_ERR, (char *)"CHbaseTM::dropTable()", (char *)_tlp_error_msg->c_str(), pv_transid);
 +      _tlp_jenv->PopLocalFrame(NULL);
        return RET_EXCEPTION;
     }
  


[3/3] incubator-trafodion git commit: Merge [TRAFODION-1988] PR 861 etter java exception handling in the java/JNI layer in TM

Posted by se...@apache.org.
Merge [TRAFODION-1988] PR 861 etter java exception handling in the java/JNI layer in TM


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

Branch: refs/heads/master
Commit: 547dda169fdbcc0557cf840493784f4b1231b8d7
Parents: 82604a2 685a1ce
Author: selvaganesang <se...@apache.org>
Authored: Wed Dec 7 23:06:28 2016 +0000
Committer: selvaganesang <se...@apache.org>
Committed: Wed Dec 7 23:06:28 2016 +0000

----------------------------------------------------------------------
 .../sqf/src/seatrans/tm/hbasetmlib2/hbasetm.cpp | 212 +++++++++----------
 .../tm/hbasetmlib2/javaobjectinterfacetm.cpp    | 103 +++++----
 .../tm/hbasetmlib2/javaobjectinterfacetm.h      |  11 +-
 core/sqf/src/tm/macros.gmk                      |   2 +-
 4 files changed, 160 insertions(+), 168 deletions(-)
----------------------------------------------------------------------