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(-)
----------------------------------------------------------------------