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

Reply via email to