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/11/28 22:32:18 UTC
[2/6] incubator-trafodion git commit: [TRAFODION 2231] fix feedback
comments
[TRAFODION 2231] fix feedback comments
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/a17b2a30
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/a17b2a30
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/a17b2a30
Branch: refs/heads/master
Commit: a17b2a30011803a6572ee31abc90eeba5dbc4d29
Parents: c4e4596
Author: Prashant Vasudev <pr...@esgyn.com>
Authored: Mon Nov 21 20:23:57 2016 +0000
Committer: Prashant Vasudev <pr...@esgyn.com>
Committed: Mon Nov 21 20:23:57 2016 +0000
----------------------------------------------------------------------
core/sqf/export/include/dtm/tm.h | 14 +-
core/sqf/export/include/dtm/tmtransaction.h | 13 +-
core/sqf/src/tm/tmddlrequests.cpp | 240 +++++++++++++----------
core/sqf/src/tm/tmlib.cpp | 26 ++-
core/sqf/src/tm/tmtransaction.cpp | 53 ++---
5 files changed, 207 insertions(+), 139 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/a17b2a30/core/sqf/export/include/dtm/tm.h
----------------------------------------------------------------------
diff --git a/core/sqf/export/include/dtm/tm.h b/core/sqf/export/include/dtm/tm.h
index d558567..885d6b1 100644
--- a/core/sqf/export/include/dtm/tm.h
+++ b/core/sqf/export/include/dtm/tm.h
@@ -277,10 +277,16 @@ typedef struct TM_HBASEREGIONINFO {
#define TM_MAX_ERROR_STRING 2048
extern "C" short REGISTERREGION(long transid, long startid, int port, char *hostname, int hostname_length, long startcode, char *regionInfo, int regionInfo_Length);
extern "C" short CREATETABLE(char *pa_tbldesc, int pv_tbldesc_length, char *pv_tblname, char** pv_keys, int pv_numsplits, int pv_keylen, long transid,
- char* pv_err_str);
-extern "C" short REGTRUNCATEONABORT(char *pv_tblname, int pv_tblname_len, long pv_transid, char* pv_err_str);
-extern "C" short DROPTABLE(char *pv_tblname, int pv_tblname_len, long transid, char* pv_err_str);
-extern "C" short ALTERTABLE(char *pv_tblname, int pv_tblname_len, char ** pv_tbloptions, int pv_tbloptslen, int pv_tbloptscnt, long pv_transid, char* pv_err_str);
+ char *&pv_err_str, int &pv_err_len);
+extern "C" short REGTRUNCATEONABORT(char *pv_tblname, int pv_tblname_len,
+ long pv_transid, char* &pv_err_str,
+ int &pv_err_len);
+extern "C" short DROPTABLE(char *pv_tblname, int pv_tblname_len, long transid,
+ char* &pv_err_str, int &pv_err_len);
+extern "C" short ALTERTABLE(char *pv_tblname, int pv_tblname_len,
+ char ** pv_tbloptions, int pv_tbloptslen,
+ int pv_tbloptscnt, long pv_transid,
+ char* &pv_err_str, int &pv_err_len);
extern "C" short HBASETM_REQUESTREGIONINFO(TM_HBASEREGIONINFO pa_trans[], short *pp_count);
extern "C" short DTM_GETNEXTSEQNUMBLOCK(unsigned int &pp_seqNum_start, unsigned int &pp_seqNum_count);
extern "C" bool DTM_LOCALTRANSACTION(int32 *pp_node, int32 *pp_seqnum);
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/a17b2a30/core/sqf/export/include/dtm/tmtransaction.h
----------------------------------------------------------------------
diff --git a/core/sqf/export/include/dtm/tmtransaction.h b/core/sqf/export/include/dtm/tmtransaction.h
index 4467842..4533997 100755
--- a/core/sqf/export/include/dtm/tmtransaction.h
+++ b/core/sqf/export/include/dtm/tmtransaction.h
@@ -52,10 +52,15 @@ public:
short suspend(TM_Transid *transid, bool coordinator_role=true);
short resume();
short register_region(long startid, int port, char *hostname, int hostname_length, long startcode, char *regionInfo, int regionInfoLength); //TOPL
- short create_table(char* pa_tbldesc, int pv_tbldesc_len, char* pa_tblname, char** pv_keys, int pv_numsplits, int pv_keylen, char* pv_err_str);
- short reg_truncateonabort(char* pa_tblname, int pv_tblname_len, char* pv_err_str);
- short drop_table(char* pa_tblname, int pv_tblname_len, char* pv_err_str);
- short alter_table(char * pa_tblname, int pv_tblname_len, char ** pv_tbloptions, int pv_tbloptslen, int pv_tbloptscnt, char* pv_err_str);
+ short create_table(char* pa_tbldesc, int pv_tbldesc_len, char* pa_tblname, char** pv_keys, int pv_numsplits, int pv_keylen,
+ char* &pv_err_str, int &pv_err_len);
+ short reg_truncateonabort(char* pa_tblname, int pv_tblname_len,
+ char* &pv_err_str, int &pv_err_len);
+ short drop_table(char* pa_tblname, int pv_tblname_len, char* &pv_err_str,
+ int &pv_err_len);
+ short alter_table(char * pa_tblname, int pv_tblname_len, char ** pv_tbloptions,
+ int pv_tbloptslen, int pv_tbloptscnt, char* &pv_err_str,
+ int &pv_err_len);
TM_Transaction *release();
short status(short *status);
TM_Transid * getTransid();
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/a17b2a30/core/sqf/src/tm/tmddlrequests.cpp
----------------------------------------------------------------------
diff --git a/core/sqf/src/tm/tmddlrequests.cpp b/core/sqf/src/tm/tmddlrequests.cpp
index d854e69..3427a20 100644
--- a/core/sqf/src/tm/tmddlrequests.cpp
+++ b/core/sqf/src/tm/tmddlrequests.cpp
@@ -38,61 +38,71 @@ JNIEXPORT jstring JNICALL Java_org_apache_hadoop_hbase_client_transactional_RMIn
(JNIEnv *pp_env, jobject pv_object, jbyteArray pv_tableDescriptor, jobjectArray pv_keys, jint pv_numSplits, jint pv_keyLength, jlong pv_transid, jbyteArray pv_tblname)
{
- char la_tbldesc[TM_MAX_DDLREQUEST_STRING];
- char la_tblname[TM_MAX_DDLREQUEST_STRING];
- char la_err_str[TM_MAX_ERROR_STRING];
- char* str_key;
+ char *la_err_str = 0;
+ int la_err_len = 0;
+ char* str_key = 0;
str_key = new char[TM_MAX_DDLREQUEST_STRING];
char** la_keys;
la_keys = new char *[TM_MAX_DDLREQUEST_STRING];
int lv_error = FEOK;
int lv_tblname_len = pp_env->GetArrayLength(pv_tblname);
- if(lv_tblname_len > TM_MAX_DDLREQUEST_STRING) {
- cout << "Table name length is larger than max allowed" << endl;
+ if(lv_tblname_len > TM_MAX_DDLREQUEST_STRING)
+ {
+ jstring lv_err_str = pp_env->NewStringUTF("Table name length is larger than max allowed");
+ return lv_err_str;
}
- else {
- int lv_tbldesc_length = pp_env->GetArrayLength(pv_tableDescriptor);
- memset(la_tbldesc, 0, lv_tbldesc_length);
- jbyte *lp_tbldesc = pp_env->GetByteArrayElements(pv_tableDescriptor, 0);
- memcpy(la_tbldesc, lp_tbldesc, lv_tbldesc_length);
-
- memset(la_tblname, 0, lv_tblname_len < TM_MAX_DDLREQUEST_STRING ? lv_tblname_len : TM_MAX_DDLREQUEST_STRING);
- jbyte *lp_tblname = pp_env->GetByteArrayElements(pv_tblname, 0);
- memcpy(la_tblname, lp_tblname, lv_tblname_len < TM_MAX_DDLREQUEST_STRING ? lv_tblname_len : TM_MAX_DDLREQUEST_STRING -1 );
- long lv_transid = (long) pv_transid;
+ int lv_tbldesc_length = pp_env->GetArrayLength(pv_tableDescriptor);
+ jbyte *lp_tbldesc = pp_env->GetByteArrayElements(pv_tableDescriptor, 0);
+ jbyte *lp_tblname = pp_env->GetByteArrayElements(pv_tblname, 0);
+
+ long lv_transid = (long) pv_transid;
- // Keys for Salted Tables
- int lv_numSplits = (int) pv_numSplits;
- int lv_keyLength = (int) pv_keyLength;
+ // Keys for Salted Tables
+ int lv_numSplits = (int) pv_numSplits;
+ int lv_keyLength = (int) pv_keyLength;
- for(int i=0; i<lv_numSplits; i++)
- {
- jbyteArray jba_keyarray = (jbyteArray)(pp_env->GetObjectArrayElement((jobjectArray)pv_keys, i));
- int lv_key_len = pp_env->GetArrayLength(jba_keyarray);
- pp_env->GetByteArrayRegion(jba_keyarray, 0, lv_key_len, (jbyte*)str_key);
+ for(int i=0; i<lv_numSplits; i++)
+ {
+ jbyteArray jba_keyarray = (jbyteArray)(pp_env->GetObjectArrayElement((jobjectArray)pv_keys, i));
+ int lv_key_len = pp_env->GetArrayLength(jba_keyarray);
+ pp_env->GetByteArrayRegion(jba_keyarray, 0, lv_key_len, (jbyte*)str_key);
- la_keys[i] = new char[lv_key_len];
- memcpy(la_keys[i], str_key, lv_key_len);
+ la_keys[i] = new char[lv_key_len];
+ memcpy(la_keys[i], str_key, lv_key_len);
- pp_env->DeleteLocalRef(jba_keyarray);
- }
+ pp_env->DeleteLocalRef(jba_keyarray);
+ }
- lv_error = CREATETABLE(la_tbldesc, lv_tbldesc_length, la_tblname, la_keys, lv_numSplits, lv_keyLength, lv_transid, la_err_str);
+ lv_error = CREATETABLE((char*) lp_tbldesc, lv_tbldesc_length,
+ (char *)lp_tblname, la_keys, lv_numSplits,
+ lv_keyLength, lv_transid, la_err_str, la_err_len);
- pp_env->ReleaseByteArrayElements(pv_tableDescriptor, lp_tbldesc, 0);
- pp_env->ReleaseByteArrayElements(pv_tblname, lp_tblname, 0);
- }
+ pp_env->ReleaseByteArrayElements(pv_tableDescriptor, lp_tbldesc, 0);
+ pp_env->ReleaseByteArrayElements(pv_tblname, lp_tblname, 0);
+ delete str_key;
+ delete [] la_keys;
if(lv_error)
{
- jstring lv_err_str = pp_env->NewStringUTF(la_err_str);
- return lv_err_str;
+ jstring lv_err_str;
+ if(la_err_len && la_err_str)
+ {
+ lv_err_str = pp_env->NewStringUTF(la_err_str);
+
+ //la_err_str is allocated in lower layers.
+ delete la_err_str;
+ }
+ else
+ {
+ lv_err_str = pp_env->NewStringUTF("Create Table failed. Error is Unknown");
+ }
+ return lv_err_str;
}
else
{
- return 0;
+ return 0;
}
}
@@ -105,29 +115,37 @@ JNIEXPORT jstring JNICALL Java_org_apache_hadoop_hbase_client_transactional_RMIn
JNIEXPORT jstring JNICALL Java_org_apache_hadoop_hbase_client_transactional_RMInterface_dropTableReq
(JNIEnv *pp_env, jobject pv_object, jbyteArray pv_tblname, jlong pv_transid) {
- char la_tblname[TM_MAX_DDLREQUEST_STRING];
- char la_err_str[TM_MAX_ERROR_STRING];
+ char *la_err_str = 0;
+ int la_err_len = 0;
int lv_error = FEOK;
int lv_tblname_len = pp_env->GetArrayLength(pv_tblname);
- if(lv_tblname_len > TM_MAX_DDLREQUEST_STRING) {
- cout << "Table name length is larger than max allowed" << endl;
- }
- else {
- memset(la_tblname, 0, lv_tblname_len < TM_MAX_DDLREQUEST_STRING ? lv_tblname_len : TM_MAX_DDLREQUEST_STRING);
- jbyte *lp_tblname = pp_env->GetByteArrayElements(pv_tblname, 0);
- memcpy(la_tblname, lp_tblname, lv_tblname_len < TM_MAX_DDLREQUEST_STRING ? lv_tblname_len : TM_MAX_DDLREQUEST_STRING -1 );
-
- long lv_transid = (long) pv_transid;
-
- lv_error = DROPTABLE(la_tblname, lv_tblname_len, lv_transid, la_err_str);
- pp_env->ReleaseByteArrayElements(pv_tblname, lp_tblname, 0);
+ if(lv_tblname_len > TM_MAX_DDLREQUEST_STRING)
+ {
+ jstring lv_err_str = pp_env->NewStringUTF("Table name length is larger than max allowed");
+ return lv_err_str;
}
+ jbyte *lp_tblname = pp_env->GetByteArrayElements(pv_tblname, 0);
+ long lv_transid = (long) pv_transid;
+ lv_error = DROPTABLE((char*)lp_tblname, lv_tblname_len, lv_transid, la_err_str,
+ la_err_len);
+ pp_env->ReleaseByteArrayElements(pv_tblname, lp_tblname, 0);
if(lv_error)
{
- jstring lv_err_str = pp_env->NewStringUTF(la_err_str);
- return lv_err_str;
+ jstring lv_err_str;
+ if(la_err_len && la_err_str)
+ {
+ lv_err_str = pp_env->NewStringUTF(la_err_str);
+
+ //la_err_str is allocated in lower layers.
+ delete la_err_str;
+ }
+ else
+ {
+ lv_err_str = pp_env->NewStringUTF("Drop Table failed. Error is Unknown");
+ }
+ return lv_err_str;
}
else
{
@@ -143,33 +161,43 @@ JNIEXPORT jstring JNICALL Java_org_apache_hadoop_hbase_client_transactional_RMIn
JNIEXPORT jstring JNICALL Java_org_apache_hadoop_hbase_client_transactional_RMInterface_truncateOnAbortReq
(JNIEnv *pp_env, jobject pv_object, jbyteArray pv_tblname, jlong pv_transid) {
- char la_tblname[TM_MAX_DDLREQUEST_STRING];
- char la_err_str[TM_MAX_ERROR_STRING];
+ char *la_err_str = 0;
+ int la_err_len = 0;
int lv_error = FEOK;
int lv_tblname_len = pp_env->GetArrayLength(pv_tblname);
- if(lv_tblname_len > TM_MAX_DDLREQUEST_STRING) {
- cout << "Table name length is larger than max allowed" << endl;
+ if(lv_tblname_len > TM_MAX_DDLREQUEST_STRING)
+ {
+ jstring lv_err_str = pp_env->NewStringUTF("Table name length is larger than max allowed");
+ return lv_err_str;
}
- else {
- memset(la_tblname, 0, lv_tblname_len < TM_MAX_DDLREQUEST_STRING ? lv_tblname_len : TM_MAX_DDLREQUEST_STRING);
- jbyte *lp_tblname = pp_env->GetByteArrayElements(pv_tblname, 0);
- memcpy(la_tblname, lp_tblname, lv_tblname_len < TM_MAX_DDLREQUEST_STRING ? lv_tblname_len : TM_MAX_DDLREQUEST_STRING -1 );
-
- long lv_transid = (long) pv_transid;
+
+ jbyte *lp_tblname = pp_env->GetByteArrayElements(pv_tblname, 0);
+ long lv_transid = (long) pv_transid;
- lv_error = REGTRUNCATEONABORT(la_tblname, lv_tblname_len, lv_transid, la_err_str);
- pp_env->ReleaseByteArrayElements(pv_tblname, lp_tblname, 0);
- }
+ lv_error = REGTRUNCATEONABORT((char*)lp_tblname, lv_tblname_len, lv_transid, la_err_str,
+ la_err_len);
+ pp_env->ReleaseByteArrayElements(pv_tblname, lp_tblname, 0);
if(lv_error)
{
- jstring lv_err_str = pp_env->NewStringUTF(la_err_str);
- return lv_err_str;
+ jstring lv_err_str;
+ if(la_err_len && la_err_str)
+ {
+ lv_err_str = pp_env->NewStringUTF(la_err_str);
+
+ //la_err_str is allocated in lower layers.
+ delete la_err_str;
+ }
+ else
+ {
+ lv_err_str = pp_env->NewStringUTF("RegTruncateonAbort failed. Error is Unknown");
+ }
+ return lv_err_str;
}
else
{
- return 0;
+ return 0;
}
}
@@ -183,56 +211,68 @@ JNIEXPORT jstring JNICALL Java_org_apache_hadoop_hbase_client_transactional_RMIn
int lv_error = FEOK;
int tblopts_len =0;
- char la_tblname[TM_MAX_DDLREQUEST_STRING];
- char la_err_str[TM_MAX_ERROR_STRING];
+ char *la_err_str = 0;
+ int la_err_len = 0;
char** tbl_options;
tbl_options = new char *[TM_MAX_DDLREQUEST_STRING];
int lv_tblname_len = pp_env->GetArrayLength(pv_tblName);
- if(lv_tblname_len > TM_MAX_DDLREQUEST_STRING) {
- cout << "Table name length is larger than max allowed" << endl;
+ if(lv_tblname_len > TM_MAX_DDLREQUEST_STRING)
+ {
+ jstring lv_err_str = pp_env->NewStringUTF("Table name length is larger than max allowed");
+ return lv_err_str;
}
- else {
- memset(la_tblname, 0, lv_tblname_len < TM_MAX_DDLREQUEST_STRING ? lv_tblname_len : TM_MAX_DDLREQUEST_STRING);
- jbyte *lp_tblname = pp_env->GetByteArrayElements(pv_tblName, 0);
- memcpy(la_tblname, lp_tblname, lv_tblname_len < TM_MAX_DDLREQUEST_STRING ? lv_tblname_len : TM_MAX_DDLREQUEST_STRING -1 );
-
- int tbloptions_cnt = pp_env->GetArrayLength(pv_tableOptions);
-
- for (int i=0; i<tbloptions_cnt; i++) {
+ jbyte *lp_tblname = pp_env->GetByteArrayElements(pv_tblName, 0);
+
+ int tbloptions_cnt = pp_env->GetArrayLength(pv_tableOptions);
- cout << " TableOptions loop " << i << endl;
- jstring jstr_options = (jstring) pp_env->GetObjectArrayElement(pv_tableOptions, i);
- const char *str_options = pp_env->GetStringUTFChars(jstr_options, 0);
- // Don't forget to call `ReleaseStringUTFChars` when you're done.
-
- //int str_opts_len = length(jstr_options);
- //int str_opts_len = pp_env->GetStringUTFLength(jstr_options);
- int str_opts_len = sizeof(str_options)/sizeof(*str_options);
- cout << "str_opts_len: " << str_opts_len << " or " << sizeof(str_options)/sizeof(*str_options) << endl;
+ for (int i=0; i<tbloptions_cnt; i++) {
- tbl_options[i] = new char[tbloptions_cnt];
- memcpy(tbl_options[i], str_options, str_opts_len);
+ //cout << " TableOptions loop " << i << endl;
+ jstring jstr_options = (jstring) pp_env->GetObjectArrayElement(pv_tableOptions, i);
+ const char *str_options = pp_env->GetStringUTFChars(jstr_options, 0);
+ // Don't forget to call `ReleaseStringUTFChars` when you're done.
+
+ //int str_opts_len = length(jstr_options);
+ //int str_opts_len = pp_env->GetStringUTFLength(jstr_options);
+ int str_opts_len = sizeof(str_options)/sizeof(*str_options);
+ //cout << "str_opts_len: " << str_opts_len << " or " << sizeof(str_options)/sizeof(*str_options) << endl;
- pp_env->ReleaseStringUTFChars(jstr_options, str_options);
+ tbl_options[i] = new char[tbloptions_cnt];
+ memcpy(tbl_options[i], str_options, str_opts_len);
- if(tblopts_len == 0)
- tblopts_len = str_opts_len;
- }
+ pp_env->ReleaseStringUTFChars(jstr_options, str_options);
- long lv_transid = (long) pv_transID;
- lv_error = ALTERTABLE(la_tblname, lv_tblname_len, tbl_options, tblopts_len, tbloptions_cnt, lv_transid, la_err_str);
- pp_env->ReleaseByteArrayElements(pv_tblName, lp_tblname, 0);
+ if(tblopts_len == 0)
+ tblopts_len = str_opts_len;
}
+
+ long lv_transid = (long) pv_transID;
+ lv_error = ALTERTABLE((char*)lp_tblname, lv_tblname_len, tbl_options,
+ tblopts_len, tbloptions_cnt, lv_transid,
+ la_err_str, la_err_len);
+ pp_env->ReleaseByteArrayElements(pv_tblName, lp_tblname, 0);
+
if(lv_error)
{
- jstring lv_err_str = pp_env->NewStringUTF(la_err_str);
- return lv_err_str;
+ jstring lv_err_str;
+ if(la_err_len && la_err_str)
+ {
+ lv_err_str = pp_env->NewStringUTF(la_err_str);
+
+ //la_err_str is allocated in lower layers.
+ delete la_err_str;
+ }
+ else
+ {
+ lv_err_str = pp_env->NewStringUTF("Alter Table failed. Error is Unknown");
+ }
+ return lv_err_str;
}
else
{
- return 0;
+ return 0;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/a17b2a30/core/sqf/src/tm/tmlib.cpp
----------------------------------------------------------------------
diff --git a/core/sqf/src/tm/tmlib.cpp b/core/sqf/src/tm/tmlib.cpp
index 665404d..43dcabe 100644
--- a/core/sqf/src/tm/tmlib.cpp
+++ b/core/sqf/src/tm/tmlib.cpp
@@ -702,7 +702,7 @@ short REGISTERREGION(long transid, long startid, int pv_port, char *pa_hostname,
// Params: pa_tabledesc, pv_tabledesc_length, pv_tblname, transid
// -------------------------------------------------------------------
short CREATETABLE(char *pa_tbldesc, int pv_tbldesc_length, char *pv_tblname, char** pv_keys, int pv_numsplits, int pv_keylen, long transid ,
- char* pv_err_str)
+ char* &pv_err_str, int &pv_err_len)
{
TM_Transid lv_transid((TM_Native_Type) transid);
short lv_error = FEOK;
@@ -713,7 +713,9 @@ short CREATETABLE(char *pa_tbldesc, int pv_tbldesc_length, char *pv_tblname, cha
if (gp_trans_thr == NULL)
gp_trans_thr = new TMLIB_ThreadTxn_Object();
TM_Transaction *lp_trans = gp_trans_thr->get_current();
- lv_error = lp_trans->create_table(pa_tbldesc, pv_tbldesc_length, pv_tblname, pv_keys, pv_numsplits, pv_keylen, pv_err_str);
+ lv_error = lp_trans->create_table(pa_tbldesc, pv_tbldesc_length,
+ pv_tblname, pv_keys, pv_numsplits, pv_keylen,
+ pv_err_str, pv_err_len);
TMlibTrace(("TMLIB_TRACE : CREATETABLE EXIT: txid: (%d,%d), returning %d\n",
lv_transid.get_node(), lv_transid.get_seq_num(), lv_error), 2);
@@ -727,7 +729,8 @@ short CREATETABLE(char *pa_tbldesc, int pv_tbldesc_length, char *pv_tblname, cha
// Purpose: send REGTRUNCATEONABORT message to the TM
// Params: pa_tabledesc, pv_tabledesc_length, pv_tblname, transid
// -------------------------------------------------------------------
-short REGTRUNCATEONABORT(char *pv_tblname, int pv_tblname_len, long pv_transid, char* pv_err_str)
+short REGTRUNCATEONABORT(char *pv_tblname, int pv_tblname_len, long pv_transid,
+ char* &pv_err_str, int &pv_err_len)
{
short lv_error = FEOK;
TM_Transid lv_transid((TM_Native_Type) pv_transid);
@@ -737,7 +740,8 @@ short REGTRUNCATEONABORT(char *pv_tblname, int pv_tblname_len, long pv_transid,
if (gp_trans_thr == NULL)
gp_trans_thr = new TMLIB_ThreadTxn_Object();
TM_Transaction *lp_trans = gp_trans_thr->get_current();
- lv_error = lp_trans->reg_truncateonabort(pv_tblname, pv_tblname_len, pv_err_str);
+ lv_error = lp_trans->reg_truncateonabort(pv_tblname, pv_tblname_len,
+ pv_err_str, pv_err_len);
TMlibTrace(("TMLIB_TRACE : REGTRUNCATEONABORT EXIT: txid: (%d,%d), tablename: %s, returning %d\n",
lv_transid.get_node(), lv_transid.get_seq_num(), pv_tblname, lv_error), 2);
@@ -746,8 +750,9 @@ short REGTRUNCATEONABORT(char *pv_tblname, int pv_tblname_len, long pv_transid,
}
-short ALTERTABLE(char *pv_tblname, int pv_tblname_len, char ** pv_tbloptions, int pv_tbloptslen, int pv_tbloptscnt, long pv_transid,
- char* pv_err_str)
+short ALTERTABLE(char *pv_tblname, int pv_tblname_len, char ** pv_tbloptions,
+ int pv_tbloptslen, int pv_tbloptscnt, long pv_transid,
+ char* &pv_err_str, int &pv_err_len)
{
short lv_error = FEOK;
TM_Transid lv_transid((TM_Native_Type) pv_transid);
@@ -757,7 +762,8 @@ short ALTERTABLE(char *pv_tblname, int pv_tblname_len, char ** pv_tbloptions, in
if (gp_trans_thr == NULL)
gp_trans_thr = new TMLIB_ThreadTxn_Object();
TM_Transaction *lp_trans = gp_trans_thr->get_current();
- lv_error = lp_trans->alter_table(pv_tblname, pv_tblname_len, pv_tbloptions, pv_tbloptslen, pv_tbloptscnt, pv_err_str);
+ lv_error = lp_trans->alter_table(pv_tblname, pv_tblname_len, pv_tbloptions,
+ pv_tbloptslen, pv_tbloptscnt, pv_err_str, pv_err_len);
TMlibTrace(("TMLIB_TRACE : ALTERTABLE EXIT: txid: (%d,%d), tablename: %s, returning %d\n",
lv_transid.get_node(), lv_transid.get_seq_num(), pv_tblname, lv_error), 2);
@@ -772,7 +778,8 @@ short ALTERTABLE(char *pv_tblname, int pv_tblname_len, char ** pv_tbloptions, in
// Purpose: send DROPTABLE message to TM
// Params: pv_tablename, transid
// -------------------------------------------------------------------
-short DROPTABLE(char *pv_tblname, int pv_tblname_len, long transid, char* pv_err_str)
+short DROPTABLE(char *pv_tblname, int pv_tblname_len, long transid,
+ char* &pv_err_str, int &pv_err_len)
{
short lv_error = FEOK;
TM_Transid lv_transid((TM_Native_Type) transid);
@@ -782,7 +789,8 @@ short DROPTABLE(char *pv_tblname, int pv_tblname_len, long transid, char* pv_err
if (gp_trans_thr == NULL)
gp_trans_thr = new TMLIB_ThreadTxn_Object();
TM_Transaction *lp_trans = gp_trans_thr->get_current();
- lv_error = lp_trans->drop_table(pv_tblname, pv_tblname_len, pv_err_str);
+ lv_error = lp_trans->drop_table(pv_tblname, pv_tblname_len, pv_err_str,
+ pv_err_len);
TMlibTrace(("TMLIB_TRACE : DROPTABLE EXIT: txid: (%d,%d), tablename: %s, returning %d\n",
lv_transid.get_node(), lv_transid.get_seq_num(), pv_tblname, lv_error), 2);
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/a17b2a30/core/sqf/src/tm/tmtransaction.cpp
----------------------------------------------------------------------
diff --git a/core/sqf/src/tm/tmtransaction.cpp b/core/sqf/src/tm/tmtransaction.cpp
index dfbd838..445945f 100644
--- a/core/sqf/src/tm/tmtransaction.cpp
+++ b/core/sqf/src/tm/tmtransaction.cpp
@@ -134,12 +134,14 @@ short TM_Transaction::register_region(long startid, int port, char *hostName, i
}
-short TM_Transaction::create_table(char* pa_tbldesc, int pv_tbldesc_len, char* pa_tblname, char** pa_keys, int pv_numsplits, int pv_keylen, char* pv_err_str)
+short TM_Transaction::create_table(char* pa_tbldesc, int pv_tbldesc_len,
+ char* pa_tblname, char** pa_keys,
+ int pv_numsplits, int pv_keylen,
+ char* &pv_err_str, int &pv_err_len)
{
Tm_Req_Msg_Type lv_req;
Tm_Rsp_Msg_Type lv_rsp;
- int maxErrStrBufLen = sizeof(lv_rsp.u.iv_ddl_response.iv_err_str);
-
+
int len = sizeof(Tm_Req_Msg_Type);
int len_aligned = 8*(((len + 7)/8));
int buffer_size = pv_numsplits*pv_keylen;
@@ -178,18 +180,21 @@ short TM_Transaction::create_table(char* pa_tbldesc, int pv_tbldesc_len, char* p
iv_last_error = lv_rsp.iv_msg_hdr.miv_err.error;
if(iv_last_error)
{
- int len = lv_rsp.u.iv_ddl_response.iv_err_str_len < maxErrStrBufLen ? lv_rsp.u.iv_ddl_response.iv_err_str_len : maxErrStrBufLen;
- memcpy(pv_err_str, lv_rsp.u.iv_ddl_response.iv_err_str, len);
+ int maxErrStrBufLen = sizeof(lv_rsp.u.iv_ddl_response.iv_err_str);
+ pv_err_len = lv_rsp.u.iv_ddl_response.iv_err_str_len < maxErrStrBufLen ? lv_rsp.u.iv_ddl_response.iv_err_str_len : maxErrStrBufLen;
+ pv_err_str = new char[pv_err_len];
+ memcpy(pv_err_str, lv_rsp.u.iv_ddl_response.iv_err_str, pv_err_len);
}
return iv_last_error;
}
-short TM_Transaction::alter_table(char * pa_tblname, int pv_tblname_len, char ** pv_tbloptions, int pv_tbloptslen, int pv_tbloptscnt, char* pv_err_str)
+short TM_Transaction::alter_table(char * pa_tblname, int pv_tblname_len,
+ char ** pv_tbloptions, int pv_tbloptslen, int pv_tbloptscnt,
+ char* &pv_err_str, int &pv_err_len)
{
Tm_Req_Msg_Type lv_req;
Tm_Rsp_Msg_Type lv_rsp;
- int maxErrStrBufLen = sizeof(lv_rsp.u.iv_ddl_response.iv_err_str);
TMlibTrace(("TMLIB_TRACE : TM_Transaction::alter_table ENTRY tablename: %s\n", pa_tblname), 1);
@@ -222,25 +227,27 @@ short TM_Transaction::alter_table(char * pa_tblname, int pv_tblname_len, char *
delete buffer;
if(lv_last_error)
{
- TMlibTrace(("TMLIB_TRACE : TM_Transaction::create_table returning error %d\n", iv_last_error), 1);
+ TMlibTrace(("TMLIB_TRACE : TM_Transaction::alter_table returning error %d\n", iv_last_error), 1);
return lv_last_error;
}
iv_last_error = lv_rsp.iv_msg_hdr.miv_err.error;
if(iv_last_error)
{
- int len = lv_rsp.u.iv_ddl_response.iv_err_str_len < maxErrStrBufLen ? lv_rsp.u.iv_ddl_response.iv_err_str_len : maxErrStrBufLen;
- memcpy(pv_err_str, lv_rsp.u.iv_ddl_response.iv_err_str, len);
+ int maxErrStrBufLen = sizeof(lv_rsp.u.iv_ddl_response.iv_err_str);
+ pv_err_len = lv_rsp.u.iv_ddl_response.iv_err_str_len < maxErrStrBufLen ? lv_rsp.u.iv_ddl_response.iv_err_str_len : maxErrStrBufLen;
+ pv_err_str = new char[pv_err_len];
+ memcpy(pv_err_str, lv_rsp.u.iv_ddl_response.iv_err_str, pv_err_len);
}
return iv_last_error;
}
-short TM_Transaction::reg_truncateonabort(char* pa_tblname, int pv_tblname_len, char* pv_err_str)
+short TM_Transaction::reg_truncateonabort(char* pa_tblname, int pv_tblname_len,
+ char* &pv_err_str, int &pv_err_len)
{
Tm_Req_Msg_Type lv_req;
Tm_Rsp_Msg_Type lv_rsp;
- int maxErrStrBufLen = sizeof(lv_rsp.u.iv_ddl_response.iv_err_str);
TMlibTrace(("TMLIB_TRACE : TM_Transaction::reg_truncateonabort ENTRY tablename: %s\n", pa_tblname), 1);
@@ -262,18 +269,19 @@ short TM_Transaction::reg_truncateonabort(char* pa_tblname, int pv_tblname_len,
iv_last_error = lv_rsp.iv_msg_hdr.miv_err.error;
if(iv_last_error)
{
- int len = lv_rsp.u.iv_ddl_response.iv_err_str_len < maxErrStrBufLen ? lv_rsp.u.iv_ddl_response.iv_err_str_len : maxErrStrBufLen;
- memcpy(pv_err_str, lv_rsp.u.iv_ddl_response.iv_err_str, len);
- }
-
+ int maxErrStrBufLen = sizeof(lv_rsp.u.iv_ddl_response.iv_err_str);
+ pv_err_len = lv_rsp.u.iv_ddl_response.iv_err_str_len < maxErrStrBufLen ? lv_rsp.u.iv_ddl_response.iv_err_str_len : maxErrStrBufLen;
+ pv_err_str = new char[pv_err_len];
+ memcpy(pv_err_str, lv_rsp.u.iv_ddl_response.iv_err_str, pv_err_len);
+ }
return iv_last_error;
}
-short TM_Transaction::drop_table(char* pa_tblname, int pv_tblname_len, char* pv_err_str)
+short TM_Transaction::drop_table(char* pa_tblname, int pv_tblname_len,
+ char* &pv_err_str, int &pv_err_len)
{
Tm_Req_Msg_Type lv_req;
Tm_Rsp_Msg_Type lv_rsp;
- int maxErrStrBufLen = sizeof(lv_rsp.u.iv_ddl_response.iv_err_str);
TMlibTrace(("TMLIB_TRACE : TM_Transaction::drop_table ENTRY tablename: %s\n", pa_tblname), 1);
@@ -295,10 +303,11 @@ short TM_Transaction::drop_table(char* pa_tblname, int pv_tblname_len, char* pv_
iv_last_error = lv_rsp.iv_msg_hdr.miv_err.error;
if(iv_last_error)
{
- int len = lv_rsp.u.iv_ddl_response.iv_err_str_len < maxErrStrBufLen ? lv_rsp.u.iv_ddl_response.iv_err_str_len : maxErrStrBufLen;
- memcpy(pv_err_str, lv_rsp.u.iv_ddl_response.iv_err_str, len);
- }
-
+ int maxErrStrBufLen = sizeof(lv_rsp.u.iv_ddl_response.iv_err_str);
+ pv_err_len = lv_rsp.u.iv_ddl_response.iv_err_str_len < maxErrStrBufLen ? lv_rsp.u.iv_ddl_response.iv_err_str_len : maxErrStrBufLen;
+ pv_err_str = new char[pv_err_len];
+ memcpy(pv_err_str, lv_rsp.u.iv_ddl_response.iv_err_str, pv_err_len);
+ }
return iv_last_error;
}