[
https://issues.apache.org/jira/browse/TRAFODION-2231?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15688444#comment-15688444
]
ASF GitHub Bot commented on TRAFODION-2231:
-------------------------------------------
Github user prashanth-vasudev commented on a diff in the pull request:
https://github.com/apache/incubator-trafodion/pull/725#discussion_r89240955
--- Diff: core/sqf/src/tm/tmddlrequests.cpp ---
@@ -93,108 +104,167 @@ JNIEXPORT jint JNICALL
Java_org_apache_hadoop_hbase_client_transactional_RMInter
* Method: dropTableReq
* Signature: ([BJ)V
*/
-JNIEXPORT jint JNICALL
Java_org_apache_hadoop_hbase_client_transactional_RMInterface_dropTableReq
+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 = 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;
-
- lv_error = DROPTABLE(la_tblname, lv_tblname_len, lv_transid);
- pp_env->ReleaseByteArrayElements(pv_tblname, lp_tblname, 0);
+ 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;
+ 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
+ {
+ return 0;
}
- return lv_error;
}
/*
* Class: org_apache_hadoop_hbase_client_transactional_RMInterface
* Method: truncateOnAbortReq
* Signature: ([BJ)V
*/
-JNIEXPORT jint JNICALL
Java_org_apache_hadoop_hbase_client_transactional_RMInterface_truncateOnAbortReq
+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 = 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;
-
- lv_error = REGTRUNCATEONABORT(la_tblname, lv_tblname_len,
lv_transid);
- pp_env->ReleaseByteArrayElements(pv_tblname, lp_tblname, 0);
+
+ jbyte *lp_tblname = pp_env->GetByteArrayElements(pv_tblname, 0);
+ long lv_transid = (long) pv_transid;
+
+ 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;
+ 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 lv_error;
}
/*
* Class: org_apache_hadoop_hbase_client_transactional_RMInterface
* Method: alterTableReq
* Signature: ([B[Ljava/lang/Object;J)V
*/
-JNIEXPORT jint JNICALL
Java_org_apache_hadoop_hbase_client_transactional_RMInterface_alterTableReq
+JNIEXPORT jstring JNICALL
Java_org_apache_hadoop_hbase_client_transactional_RMInterface_alterTableReq
(JNIEnv *pp_env, jobject pv_object, jbyteArray pv_tblName, jobjectArray
pv_tableOptions, jlong pv_transID) {
int lv_error = FEOK;
int tblopts_len =0;
- char la_tblname[TM_MAX_DDLREQUEST_STRING];
+ char *la_err_str = 0;
+ int la_err_len = 0;
char** tbl_options;
tbl_options = new char *[TM_MAX_DDLREQUEST_STRING];
--- End diff --
made change. AlterTable is currently not active code for ddl transactions.
> DDL create/drop detailed error string is not propagated
> -------------------------------------------------------
>
> Key: TRAFODION-2231
> URL: https://issues.apache.org/jira/browse/TRAFODION-2231
> Project: Apache Trafodion
> Issue Type: Bug
> Components: dtm
> Reporter: Prashanth Vasudev
> Assignee: Prashanth Vasudev
> Fix For: 2.1-incubating
>
>
> TRAFODION-2148 takes care of reporting error code in failure scenario,
> however the cause/error string or stack trace is missing for additional info.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)