You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by db...@apache.org on 2016/05/02 20:24:30 UTC

[2/3] incubator-trafodion git commit: [TRAFODION-1955] JNI optimization for the methods used at the time of query compilation Changes as per review comments. Added back ByteArrayList JNI but without any references to it to ensure other branches are not b

[TRAFODION-1955] JNI optimization for the methods used at the time of query compilation
Changes as per review comments.
Added back ByteArrayList JNI but without any references to it to
ensure other branches are not broken. Contributors are advised to modify
their code to avoid use of this class.


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/cf755beb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/cf755beb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/cf755beb

Branch: refs/heads/master
Commit: cf755bebc2d45ed787c1ba094e4be2078578e557
Parents: 6ef6f7c
Author: selvaganesang <se...@esgyn.com>
Authored: Sun May 1 09:54:48 2016 +0000
Committer: selvaganesang <se...@esgyn.com>
Committed: Sun May 1 09:54:48 2016 +0000

----------------------------------------------------------------------
 core/sql/executor/ExExeUtilGet.cpp              |  12 +-
 core/sql/executor/HBaseClient_JNI.cpp           | 244 ++++++++++++++++++-
 core/sql/executor/HBaseClient_JNI.h             |  72 +++++-
 core/sql/exp/ExpHbaseInterface.cpp              |   4 +-
 core/sql/sqlcomp/CmpSeabaseDDLcleanup.cpp       |  11 +-
 .../java/org/trafodion/sql/HBaseClient.java     |   8 +-
 6 files changed, 316 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/cf755beb/core/sql/executor/ExExeUtilGet.cpp
----------------------------------------------------------------------
diff --git a/core/sql/executor/ExExeUtilGet.cpp b/core/sql/executor/ExExeUtilGet.cpp
index f80897a..a5c9b51 100644
--- a/core/sql/executor/ExExeUtilGet.cpp
+++ b/core/sql/executor/ExExeUtilGet.cpp
@@ -3080,13 +3080,11 @@ short ExExeUtilGetHbaseObjectsTcb::work()
                 break;
               }
 
-            Int32 len = hbaseTables_->at(currIndex_).len;
-            char *tmp  = hbaseTables_->at(currIndex_).val;
-            len = hbaseTables_->at(currIndex_).len;
-            if (len > ComMAX_3_PART_EXTERNAL_UTF8_NAME_LEN_IN_BYTES+6)
-                len = ComMAX_3_PART_EXTERNAL_UTF8_NAME_LEN_IN_BYTES+6; 
-            strncpy(hbaseNameBuf_, tmp, len);
-            hbaseNameBuf_[len] = 0;
+            HbaseStr *hbaseName = &hbaseTables_->at(currIndex_);
+            if (hbaseName->len > ComMAX_3_PART_EXTERNAL_UTF8_NAME_LEN_IN_BYTES+6)
+                hbaseName->len = ComMAX_3_PART_EXTERNAL_UTF8_NAME_LEN_IN_BYTES+6; 
+            strncpy(hbaseNameBuf_, hbaseName->val, hbaseName->len);
+            hbaseNameBuf_[hbaseName->len] = 0;
             hbaseName_ = hbaseNameBuf_;
 
             Lng32 numParts = 0;

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/cf755beb/core/sql/executor/HBaseClient_JNI.cpp
----------------------------------------------------------------------
diff --git a/core/sql/executor/HBaseClient_JNI.cpp b/core/sql/executor/HBaseClient_JNI.cpp
index 5ad34cb..46e413c 100644
--- a/core/sql/executor/HBaseClient_JNI.cpp
+++ b/core/sql/executor/HBaseClient_JNI.cpp
@@ -27,6 +27,225 @@
 #include "QRLogger.h"
 #include <signal.h>
 #include "pthread.h"
+// ===========================================================================
+// ===== Class ByteArrayList
+// ===========================================================================
+
+JavaMethodInit* ByteArrayList::JavaMethods_ = NULL;
+jclass ByteArrayList::javaClass_ = 0;
+bool ByteArrayList::javaMethodsInitialized_ = false;
+pthread_mutex_t ByteArrayList::javaMethodsInitMutex_ = PTHREAD_MUTEX_INITIALIZER;
+
+
+static const char* const balErrorEnumStr[] =
+{
+  "JNI NewStringUTF() in add() for writing."  // BAL_ERROR_ADD_PARAM
+ ,"Java exception in add() for writing."      // BAL_ERROR_ADD_EXCEPTION
+ ,"Java exception in get() for reading."      // BAL_ERROR_GET_EXCEPTION
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// 
+//////////////////////////////////////////////////////////////////////////////
+char* ByteArrayList::getErrorText(BAL_RetCode errEnum)
+{
+  if (errEnum < (BAL_RetCode)JOI_LAST)
+    return JavaObjectInterface::getErrorText((JOI_RetCode)errEnum);
+  else
+    return (char*)balErrorEnumStr[errEnum-BAL_FIRST-1];
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// 
+//////////////////////////////////////////////////////////////////////////////
+ByteArrayList::~ByteArrayList()
+{
+//  QRLogger::log(CAT_JNI_TOP, LL_DEBUG, "ByteArrayList destructor called.");
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// 
+//////////////////////////////////////////////////////////////////////////////
+BAL_RetCode ByteArrayList::init()
+{
+  static char className[]="org/trafodion/sql/ByteArrayList";
+  BAL_RetCode rc;
+
+  if (isInitialized())
+    return BAL_OK;
+
+  if (javaMethodsInitialized_)
+    return (BAL_RetCode)JavaObjectInterface::init(className, javaClass_, JavaMethods_, (Int32)JM_LAST, javaMethodsInitialized_);
+  else
+  {
+    pthread_mutex_lock(&javaMethodsInitMutex_);
+    if (javaMethodsInitialized_)
+    {
+      pthread_mutex_unlock(&javaMethodsInitMutex_);
+      return (BAL_RetCode)JavaObjectInterface::init(className, javaClass_, JavaMethods_, (Int32)JM_LAST, javaMethodsInitialized_);
+    }
+    JavaMethods_ = new JavaMethodInit[JM_LAST];
+
+    JavaMethods_[JM_CTOR      ].jm_name      = "<init>";
+    JavaMethods_[JM_CTOR      ].jm_signature = "()V";
+    JavaMethods_[JM_ADD       ].jm_name      = "addElement";
+    JavaMethods_[JM_ADD       ].jm_signature = "([B)V";
+    JavaMethods_[JM_GET       ].jm_name      = "getElement";
+    JavaMethods_[JM_GET       ].jm_signature = "(I)[B";
+    JavaMethods_[JM_GETSIZE   ].jm_name      = "getSize";
+    JavaMethods_[JM_GETSIZE   ].jm_signature = "()I";
+    JavaMethods_[JM_GETENTRYSIZE].jm_name      = "getEntrySize";
+    JavaMethods_[JM_GETENTRYSIZE].jm_signature = "(I)I";
+    JavaMethods_[JM_GETENTRY  ].jm_name      = "getEntry";
+    JavaMethods_[JM_GETENTRY].jm_signature = "(I)[B";
+
+    rc = (BAL_RetCode)JavaObjectInterface::init(className, javaClass_, JavaMethods_, (Int32)JM_LAST, javaMethodsInitialized_);
+    javaMethodsInitialized_ = TRUE;
+    pthread_mutex_unlock(&javaMethodsInitMutex_);
+  }
+  return rc;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// 
+//////////////////////////////////////////////////////////////////////////////
+BAL_RetCode ByteArrayList::add(const Text& t)
+{
+//  QRLogger::log(CAT_SQL_HBASE, LL_DEBUG, "ByteArrayList::add(%s) called.", t.data());
+
+  int len = t.size();
+  jbyteArray jba_t = jenv_->NewByteArray(len);
+  if (jba_t == NULL)
+  {
+    GetCliGlobals()->setJniErrorStr(getErrorText(BAL_ERROR_ADD_PARAM));
+    return BAL_ERROR_ADD_PARAM;
+  }
+  jenv_->SetByteArrayRegion(jba_t, 0, len, (const jbyte*)t.data());
+
+  // void add(byte[]);
+  jenv_->CallVoidMethod(javaObj_, JavaMethods_[JM_ADD].methodID, jba_t);
+  jenv_->DeleteLocalRef(jba_t);
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails();
+    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
+    return BAL_ERROR_ADD_EXCEPTION;
+  }
+  return BAL_OK;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// 
+//////////////////////////////////////////////////////////////////////////////
+BAL_RetCode ByteArrayList::add(const TextVec& vec)
+{
+  for (std::vector<Text>::const_iterator it = vec.begin() ; it != vec.end(); ++it)
+  {
+    Text str(*it);
+    add(str);
+  }
+
+  return BAL_OK;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// 
+//////////////////////////////////////////////////////////////////////////////
+BAL_RetCode ByteArrayList::addElement(const char* data, int keyLength)
+{
+  Text str(data, keyLength);
+  add(str);
+  return BAL_OK;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// 
+//////////////////////////////////////////////////////////////////////////////
+Text* ByteArrayList::get(Int32 i)
+{
+  // byte[] get(i);
+  jbyteArray jba_val = static_cast<jbyteArray>(jenv_->CallObjectMethod(javaObj_, JavaMethods_[JM_GET].methodID, i));
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails();
+    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
+    return NULL;
+  }
+
+  if (jba_val == NULL)
+    return NULL;
+
+  jbyte* p_val = jenv_->GetByteArrayElements(jba_val, 0);
+  int len = jenv_->GetArrayLength(jba_val);
+  Text* val = new (heap_) Text((char*)p_val, len);
+  jenv_->ReleaseByteArrayElements(jba_val, p_val, JNI_ABORT);
+  jenv_->DeleteLocalRef(jba_val);
+
+  return val;
+}
+
+Int32 ByteArrayList::getSize()
+{
+  Int32 len = jenv_->CallIntMethod(javaObj_, JavaMethods_[JM_GETSIZE].methodID);
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails();
+    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
+    return 0;
+  }
+  return len;
+}
+
+Int32 ByteArrayList::getEntrySize(Int32 i)
+{
+  jint jidx = i;
+
+  Int32 len =
+    jenv_->CallIntMethod(javaObj_, JavaMethods_[JM_GETENTRYSIZE].methodID, jidx);
+
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails();
+    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
+    return 0;
+  }
+  return len;
+}
+
+
+char* ByteArrayList::getEntry(Int32 i, char* buf, Int32 bufLen, Int32& datalen)
+{
+  datalen = 0;
+
+  jint jidx = i;
+
+  jbyteArray jBuffer = static_cast<jbyteArray>
+      (jenv_->CallObjectMethod(javaObj_, JavaMethods_[JM_GETENTRY].methodID, jidx));
+
+  if (jenv_->ExceptionCheck())
+  {
+    getExceptionDetails();
+    logError(CAT_SQL_HBASE, __FILE__, __LINE__);
+    return NULL;
+  }
+
+  if (jBuffer != NULL) {
+
+    datalen = jenv_->GetArrayLength(jBuffer);
+
+    if (datalen > bufLen)
+      // call setJniErrorStr?
+      return NULL;
+
+    jenv_->GetByteArrayRegion(jBuffer, 0, datalen, (jbyte*)buf);
+
+    jenv_->DeleteLocalRef(jBuffer);
+  }
+
+  return buf;
+}
+
+                                   
 //
 // ===========================================================================
 // ===== Class HBaseClient_JNI
@@ -282,9 +501,9 @@ HBC_RetCode HBaseClient_JNI::init()
     JavaMethods_[JM_HBC_CHECKANDDELETE_ROW ].jm_name      = "checkAndDeleteRow";
     JavaMethods_[JM_HBC_CHECKANDDELETE_ROW ].jm_signature = "(JLjava/lang/String;ZJ[B[B[BJZ)Z";
     JavaMethods_[JM_HBC_GETSTARTKEYS ].jm_name      = "getStartKeys";
-    JavaMethods_[JM_HBC_GETSTARTKEYS ].jm_signature = "(Ljava/lang/String;)[[B";
+    JavaMethods_[JM_HBC_GETSTARTKEYS ].jm_signature = "(Ljava/lang/String;Z)[[B";
     JavaMethods_[JM_HBC_GETENDKEYS ].jm_name      = "getEndKeys";
-    JavaMethods_[JM_HBC_GETENDKEYS ].jm_signature = "(Ljava/lang/String;)[[B";
+    JavaMethods_[JM_HBC_GETENDKEYS ].jm_signature = "(Ljava/lang/String;Z)[[B";
     rc = (HBC_RetCode)JavaObjectInterface::init(className, javaClass_, JavaMethods_, (Int32)JM_LAST, javaMethodsInitialized_);
     javaMethodsInitialized_ = TRUE;
     pthread_mutex_unlock(&javaMethodsInitMutex_);
@@ -3253,17 +3472,17 @@ HBC_RetCode HBaseClient_JNI::checkAndDeleteRow(NAHeap *heap, const char *tableNa
   return HBC_OK;
 }
 
-NAArray<HbaseStr>* HBaseClient_JNI::getStartKeys(NAHeap *heap, const char *tableName)
+NAArray<HbaseStr>* HBaseClient_JNI::getStartKeys(NAHeap *heap, const char *tableName, bool useTRex)
 {
-   return HBaseClient_JNI::getKeys(JM_HBC_GETSTARTKEYS, heap, tableName);
+   return HBaseClient_JNI::getKeys(JM_HBC_GETSTARTKEYS, heap, tableName, useTRex);
 }
 
-NAArray<HbaseStr>* HBaseClient_JNI::getEndKeys(NAHeap *heap, const char * tableName)
+NAArray<HbaseStr>* HBaseClient_JNI::getEndKeys(NAHeap *heap, const char * tableName, bool useTRex)
 {
-   return HBaseClient_JNI::getKeys(JM_HBC_GETENDKEYS, heap, tableName);
+   return HBaseClient_JNI::getKeys(JM_HBC_GETENDKEYS, heap, tableName, useTRex);
 }
 
-NAArray<HbaseStr>* HBaseClient_JNI::getKeys(Int32 funcIndex, NAHeap *heap, const char *tableName)
+NAArray<HbaseStr>* HBaseClient_JNI::getKeys(Int32 funcIndex, NAHeap *heap, const char *tableName, bool useTRex)
 {
 
   if (jenv_->PushLocalFrame(jniHandleCapacity_) != 0) {
@@ -3276,9 +3495,9 @@ NAArray<HbaseStr>* HBaseClient_JNI::getKeys(Int32 funcIndex, NAHeap *heap, const
     jenv_->PopLocalFrame(NULL);
     return NULL;
   }
-
+  jboolean j_useTRex = useTRex;
   jarray j_keyArray=
-     (jarray)jenv_->CallObjectMethod(javaObj_, JavaMethods_[funcIndex].methodID, js_tblName);
+     (jarray)jenv_->CallObjectMethod(javaObj_, JavaMethods_[funcIndex].methodID, js_tblName, j_useTRex);
 
   if (jenv_->ExceptionCheck())
   {
@@ -5397,8 +5616,10 @@ int convertStringObjectArrayToList(NAHeap *heap, jarray j_objArray,
 
 jint convertByteArrayObjectArrayToNAArray(NAHeap *heap, jarray j_objArray, NAArray<HbaseStr> **retArray)
 {
-    if (j_objArray == NULL)
+    if (j_objArray == NULL) {
+       *retArray = NULL;
        return 0;
+    }
     int arrayLen = jenv_->GetArrayLength(j_objArray);
     jbyteArray j_ba;
     jint j_baLen;
@@ -5406,8 +5627,7 @@ jint convertByteArrayObjectArrayToNAArray(NAHeap *heap, jarray j_objArray, NAArr
     jboolean isCopy;
     HbaseStr element; 
     NAArray<HbaseStr> *tmpArray = new (heap) NAArray<HbaseStr> (heap, arrayLen); 
-    for (int i = 0; i < arrayLen; i++)
-    {
+    for (int i = 0; i < arrayLen; i++) {
         j_ba = (jbyteArray)jenv_->GetObjectArrayElement((jobjectArray)j_objArray, i);
         j_baLen = jenv_->GetArrayLength(j_ba);
         ba = new (heap) BYTE[j_baLen];

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/cf755beb/core/sql/executor/HBaseClient_JNI.h
----------------------------------------------------------------------
diff --git a/core/sql/executor/HBaseClient_JNI.h b/core/sql/executor/HBaseClient_JNI.h
index 593c7ba..dbb454c 100644
--- a/core/sql/executor/HBaseClient_JNI.h
+++ b/core/sql/executor/HBaseClient_JNI.h
@@ -71,6 +71,70 @@ public :
   NAHeap *heap_;
 };
 
+// ===========================================================================
+// ===== The ByteArrayList class implements access to the Java 
+// ===== ByteArrayList class.
+// ===========================================================================
+
+typedef enum {
+  BAL_OK     = JOI_OK
+ ,BAL_FIRST  = JOI_LAST
+ ,BAL_ERROR_ADD_PARAM = BAL_FIRST
+ ,BAL_ERROR_ADD_EXCEPTION
+ ,BAL_ERROR_GET_EXCEPTION
+ ,BAL_LAST
+} BAL_RetCode;
+
+class ByteArrayList : public JavaObjectInterface
+{
+public:
+  ByteArrayList(NAHeap *heap, jobject jObj = NULL)
+    :  JavaObjectInterface(heap, jObj)
+  {}
+
+  // Destructor
+  virtual ~ByteArrayList();
+
+  // Initialize JVM and all the JNI configuration.
+  // Must be called.
+  BAL_RetCode    init();
+
+  BAL_RetCode add(const Text& str);
+
+  // Add a Text vector.
+  BAL_RetCode add(const TextVec& vec);
+
+  BAL_RetCode addElement(const char * data, int keyLength);
+
+  // Get a Text element
+  Text* get(Int32 i);
+
+  // Get the error description.
+  virtual char* getErrorText(BAL_RetCode errEnum);
+
+  Int32 getSize();
+  Int32 getEntrySize(Int32 i);
+  char* getEntry(Int32 i, char* buf, Int32 bufLen, Int32& dataLen);
+
+
+private:
+  enum JAVA_METHODS {
+    JM_CTOR = 0,
+    JM_ADD,
+    JM_GET,
+    JM_GETSIZE,
+    JM_GETENTRY,
+    JM_GETENTRYSIZE,
+    JM_LAST
+  };
+
+  static jclass          javaClass_;
+  static JavaMethodInit* JavaMethods_;
+  static bool javaMethodsInitialized_;
+  // this mutex protects both JaveMethods_ and javaClass_ initialization
+  static pthread_mutex_t javaMethodsInitMutex_;
+};
+
 
 // ===========================================================================
 // ===== The HTableClient class implements access to the Java 
@@ -79,7 +143,7 @@ public :
 
 typedef enum {
   HTC_OK     = JOI_OK
- ,HTC_FIRST  = JOI_LAST
+ ,HTC_FIRST  = BAL_LAST
  ,HTC_DONE   = HTC_FIRST
  ,HTC_DONE_RESULT = 1000
  ,HTC_DONE_DATA
@@ -502,13 +566,13 @@ public:
       ExHbaseAccessStats *hbs, bool useTRex, Int64 transID, HbaseStr rowID, 
       HbaseStr columnToCheck, HbaseStr columnValToCheck,
       Int64 timestamp, bool asyncOperation, HTableClient_JNI **outHtc);
-  NAArray<HbaseStr>* getStartKeys(NAHeap *heap, const char *tableName);
-  NAArray<HbaseStr>* getEndKeys(NAHeap *heap, const char * tableName);
+  NAArray<HbaseStr>* getStartKeys(NAHeap *heap, const char *tableName, bool useTRex);
+  NAArray<HbaseStr>* getEndKeys(NAHeap *heap, const char * tableName, bool useTRex);
 
 private:   
   // private default constructor
   HBaseClient_JNI(NAHeap *heap, int debugPort, int debugTimeout);
-  NAArray<HbaseStr>* getKeys(Int32 funcIndex, NAHeap *heap, const char *tableName);
+  NAArray<HbaseStr>* getKeys(Int32 funcIndex, NAHeap *heap, const char *tableName, bool useTRex);
 
 private:
   NAString  getLastJavaError();

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/cf755beb/core/sql/exp/ExpHbaseInterface.cpp
----------------------------------------------------------------------
diff --git a/core/sql/exp/ExpHbaseInterface.cpp b/core/sql/exp/ExpHbaseInterface.cpp
index 2c8084e..1498b1c 100644
--- a/core/sql/exp/ExpHbaseInterface.cpp
+++ b/core/sql/exp/ExpHbaseInterface.cpp
@@ -1305,13 +1305,13 @@ Lng32 ExpHbaseInterface_JNI::revoke(
 
 NAArray<HbaseStr> *ExpHbaseInterface_JNI::getRegionBeginKeys(const char* tblName)
 { 
-  NAArray<HbaseStr> *retValue = client_->getStartKeys((NAHeap *)heap_, tblName);
+  NAArray<HbaseStr> *retValue = client_->getStartKeys((NAHeap *)heap_, tblName, useTRex_);
   return retValue;
 }
 
 NAArray<HbaseStr> *ExpHbaseInterface_JNI::getRegionEndKeys(const char* tblName)
 { 
-  NAArray<HbaseStr> *retValue = client_->getEndKeys((NAHeap *)heap_, tblName);
+  NAArray<HbaseStr> *retValue = client_->getEndKeys((NAHeap *)heap_, tblName, useTRex_);
   return retValue;
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/cf755beb/core/sql/sqlcomp/CmpSeabaseDDLcleanup.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLcleanup.cpp b/core/sql/sqlcomp/CmpSeabaseDDLcleanup.cpp
index d03c24a..6079782 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLcleanup.cpp
+++ b/core/sql/sqlcomp/CmpSeabaseDDLcleanup.cpp
@@ -1186,12 +1186,11 @@ short CmpSeabaseMDcleanup::cleanupOrphanHbaseEntries(ExeCliInterface *cliInterfa
     {
       char cBuf[1000];
       
-      Int32 len = listArray->at(i).len;
-      char *val = listArray->at(i).val;
-      if (len >= sizeof(cBuf))
-         len = sizeof(cBuf)-1;
-      strncpy(cBuf, val, len);
-      cBuf[len] = '\0';
+      HbaseStr *hbaseStr = &listArray->at(i);
+      if (hbaseStr->len >= sizeof(cBuf))
+         hbaseStr->len = sizeof(cBuf)-1;
+      strncpy(cBuf, hbaseStr->val, hbaseStr->len);
+      cBuf[hbaseStr->len] = '\0';
       char *c = cBuf;
       Lng32 numParts = 0;
       char *parts[4];

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/cf755beb/core/sql/src/main/java/org/trafodion/sql/HBaseClient.java
----------------------------------------------------------------------
diff --git a/core/sql/src/main/java/org/trafodion/sql/HBaseClient.java b/core/sql/src/main/java/org/trafodion/sql/HBaseClient.java
index d693053..fa33ab1 100644
--- a/core/sql/src/main/java/org/trafodion/sql/HBaseClient.java
+++ b/core/sql/src/main/java/org/trafodion/sql/HBaseClient.java
@@ -1748,19 +1748,19 @@ public class HBaseClient {
     return count;
   }
  
-  public byte[][] getStartKeys(String tblName) throws IOException 
+  public byte[][] getStartKeys(String tblName, boolean useTRex) throws IOException 
   {
     byte[][] startKeys;
-    HTableClient htc = getHTableClient(0, tblName, false);
+    HTableClient htc = getHTableClient(0, tblName, useTRex);
     startKeys = htc.getStartKeys();
     releaseHTableClient(htc);
     return startKeys;
   }
 
-  public byte[][] getEndKeys(String tblName) throws IOException 
+  public byte[][] getEndKeys(String tblName, boolean useTRex) throws IOException 
   {
     byte[][] endKeys;
-    HTableClient htc = getHTableClient(0, tblName, false);
+    HTableClient htc = getHTableClient(0, tblName, useTRex);
     endKeys = htc.getEndKeys();
     releaseHTableClient(htc);
     return endKeys;