[
https://issues.apache.org/jira/browse/TRAFODION-2231?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15687575#comment-15687575
]
ASF GitHub Bot commented on TRAFODION-2231:
-------------------------------------------
Github user selvaganesang commented on a diff in the pull request:
https://github.com/apache/incubator-trafodion/pull/725#discussion_r89186340
--- Diff: core/sqf/src/tm/tmddlrequests.cpp ---
@@ -34,55 +34,76 @@ using namespace std;
* Signature: ([B)V
*/
-JNIEXPORT jint JNICALL
Java_org_apache_hadoop_hbase_client_transactional_RMInterface_createTableReq
- (JNIEnv *pp_env, jobject pv_object, jbyteArray pv_tableDescriptor,
jobjectArray pv_keys, jint pv_numSplits, jint pv_keyLength, jlong pv_transid,
jbyteArray pv_tblname){
+JNIEXPORT jstring JNICALL
Java_org_apache_hadoop_hbase_client_transactional_RMInterface_createTableReq
+ (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* 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 );
+ 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;
- 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);
--- End diff --
str_key needs to be pre-allocated. Consider moving directly to la_keys[i].
Otherwise this would lead to memory corruption
> 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)