blob: 93f699b0b80b3b37ebffa0b1fa2c49127fefcba2 [file]
/*
* @@@ START COPYRIGHT @@@
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
* @@@ END COPYRIGHT @@@ */
#include "tmddlrequests.h"
#include "dtm/tm.h"
#include <string.h>
#include <iostream>
#include "../../inc/fs/feerrors.h"
using namespace std;
/*
* Class: org_apache_hadoop_hbase_client_transactional_RMInterface
* Method: createTableReq
* Signature: ([B)V
*/
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_err_str = 0;
int la_err_len = 0;
char** la_keys;
int lv_error = FEOK;
int lv_tbldesc_length = pp_env->GetArrayLength(pv_tableDescriptor);
if(lv_tbldesc_length > TM_MAX_DDLREQUEST_STRING)
{
jstring lv_err_str = pp_env->NewStringUTF("Table Desc length is larger than max allowed");
return lv_err_str;
}
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;
la_keys = new char *[lv_numSplits];
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);
la_keys[i] = new char[lv_key_len];
pp_env->GetByteArrayRegion(jba_keyarray, 0, lv_key_len, (jbyte*)la_keys[i]);
pp_env->DeleteLocalRef(jba_keyarray);
}
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);
delete [] la_keys;
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("Create Table failed. Error is Unknown");
}
return lv_err_str;
}
else
{
return 0;
}
}
/*
* Class: org_apache_hadoop_hbase_client_transactional_RMInterface
* Method: dropTableReq
* Signature: ([BJ)V
*/
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_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)
{
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;
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;
}
}
/*
* Class: org_apache_hadoop_hbase_client_transactional_RMInterface
* Method: truncateOnAbortReq
* Signature: ([BJ)V
*/
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_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)
{
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 = 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;
}
}
/*
* Class: org_apache_hadoop_hbase_client_transactional_RMInterface
* Method: alterTableReq
* Signature: ([B[Ljava/lang/Object;J)V
*/
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_err_str = 0;
int la_err_len = 0;
char** tbl_options = 0;
int lv_tblname_len = pp_env->GetArrayLength(pv_tblName);
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);
int tbloptions_cnt = pp_env->GetArrayLength(pv_tableOptions);
if(tbloptions_cnt)
tbl_options = new char *[tbloptions_cnt];
for (int i=0; i<tbloptions_cnt; i++) {
//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;
tbl_options[i] = new char[tbloptions_cnt];
memcpy(tbl_options[i], str_options, str_opts_len);
pp_env->ReleaseStringUTFChars(jstr_options, str_options);
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(tbl_options)
delete [] tbl_options;
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("Alter Table failed. Error is Unknown");
}
return lv_err_str;
}
else
{
return 0;
}
}