You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by se...@apache.org on 2017/12/12 19:19:12 UTC

[2/3] incubator-trafodion git commit: [TRAFODION-2836] Enable Trafodion SQL processes to configure garbage collector in its embedded JVM

[TRAFODION-2836] Enable Trafodion SQL processes to configure garbage collector
in its embedded JVM

Provided a way to configure the garbage collector when the JVM is created
in EsgynDB processes.


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

Branch: refs/heads/master
Commit: 68764fcf109e0020c4714567fcc3693e10f1c43c
Parents: 1a3dc67
Author: selvaganesang <se...@esgyn.com>
Authored: Fri Dec 8 23:14:05 2017 +0000
Committer: selvaganesang <se...@esgyn.com>
Committed: Fri Dec 8 23:14:05 2017 +0000

----------------------------------------------------------------------
 core/sql/executor/JavaObjectInterface.cpp | 38 ++++++++++++++++++++++----
 1 file changed, 32 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/68764fcf/core/sql/executor/JavaObjectInterface.cpp
----------------------------------------------------------------------
diff --git a/core/sql/executor/JavaObjectInterface.cpp b/core/sql/executor/JavaObjectInterface.cpp
index ff9f352..2f5b2c7 100644
--- a/core/sql/executor/JavaObjectInterface.cpp
+++ b/core/sql/executor/JavaObjectInterface.cpp
@@ -26,13 +26,14 @@
 #include "Globals.h"
 #include "ComUser.h"
 #include "LmJavaOptions.h"
+#include "ex_ex.h"
 
-// Changed the default to 256 to limit java heap size used by SQL processes.
-// Keep this define in sync with udrserv/udrserv.cpp
 #define DEFAULT_JVM_MAX_HEAP_SIZE 256
 #define DEFAULT_COMPRESSED_CLASSSPACE_SIZE 128
 #define DEFAULT_MAX_METASPACE_SIZE 128
 #define TRAF_DEFAULT_JNIHANDLE_CAPACITY 32
+
+
 // ===========================================================================
 // ===== Class JavaObjectInterface
 // ===========================================================================
@@ -75,6 +76,8 @@ char* JavaObjectInterface::getErrorText(JOI_RetCode errEnum)
 //////////////////////////////////////////////////////////////////////////////
 JavaObjectInterface::~JavaObjectInterface()
 {
+  if (jenv_ == NULL)
+     return;
   if ((long)javaObj_ != -1)
      jenv_->DeleteGlobalRef(javaObj_); 
   javaObj_ = NULL;
@@ -136,6 +139,7 @@ int JavaObjectInterface::createJVM(LmJavaOptions *options)
     {
       classPathArg = buildClassPath();
       jvm_options[numJVMOptions].optionString = classPathArg;
+      jvm_options[numJVMOptions].extraInfo = NULL;
       QRLogger::log(CAT_SQL_HDFS_JNI_TOP, LL_DEBUG, "Using classpath: %s", 
                     jvm_options[numJVMOptions].optionString);
       numJVMOptions++;
@@ -145,7 +149,7 @@ int JavaObjectInterface::createJVM(LmJavaOptions *options)
     {
       int maxHeapEnvvarMB = DEFAULT_JVM_MAX_HEAP_SIZE;
       const char *maxHeapSizeStr = getenv("JVM_MAX_HEAP_SIZE_MB");
-      if (maxHeapSizeStr)
+      if (maxHeapSizeStr != NULL)
         {
           maxHeapEnvvarMB = atoi(maxHeapSizeStr);
           if (maxHeapEnvvarMB <= 0)
@@ -155,17 +159,30 @@ int JavaObjectInterface::createJVM(LmJavaOptions *options)
       snprintf(maxHeapOptions, sizeof(maxHeapOptions),
                "-Xmx%dm", maxHeapEnvvarMB);
       jvm_options[numJVMOptions].optionString = maxHeapOptions;
+      jvm_options[numJVMOptions].extraInfo = NULL;
       QRLogger::log(CAT_SQL_HDFS_JNI_TOP, LL_DEBUG,
                     "Max heap option: %s",
                     jvm_options[numJVMOptions].optionString);
       numJVMOptions++;
     }
 
+    const char *jvmGC = getenv("JVM_GC_OPTION");
+    if (jvmGC != NULL)
+    {
+       jvm_options[numJVMOptions].optionString = (char *)jvmGC;
+       jvm_options[numJVMOptions].extraInfo = NULL;
+       QRLogger::log(CAT_SQL_HDFS_JNI_TOP, LL_DEBUG,
+                   "GC Option: %s",
+                   jvm_options[numJVMOptions].optionString);
+       numJVMOptions++;
+    }
+
+
   if (!isDefinedInOptions(options, "-XX:CompressedClassSpaceSize="))
     {
       int compressedClassSpaceSize = 0;
       const char *compressedClassSpaceSizeStr = getenv("JVM_COMPRESSED_CLASS_SPACE_SIZE");
-      if (compressedClassSpaceSizeStr)
+      if (compressedClassSpaceSizeStr != NULL)
         compressedClassSpaceSize = atoi(compressedClassSpaceSizeStr);
       if (compressedClassSpaceSize <= 0)
         compressedClassSpaceSize = DEFAULT_COMPRESSED_CLASSSPACE_SIZE;
@@ -173,6 +190,7 @@ int JavaObjectInterface::createJVM(LmJavaOptions *options)
                sizeof(compressedClassSpaceSizeOptions),
                "-XX:CompressedClassSpaceSize=%dm", compressedClassSpaceSize);
       jvm_options[numJVMOptions].optionString = compressedClassSpaceSizeOptions;
+      jvm_options[numJVMOptions].extraInfo = NULL;
       QRLogger::log(CAT_SQL_HDFS_JNI_TOP, LL_DEBUG,
                     "CompressedClassSpaceSize: %s",
                     jvm_options[numJVMOptions].optionString);
@@ -183,13 +201,14 @@ int JavaObjectInterface::createJVM(LmJavaOptions *options)
     {
       int maxMetaspaceSize = 0;
       const char *maxMetaspaceSizeStr = getenv("JVM_MAX_METASPACE_SIZE");
-      if (maxMetaspaceSizeStr)
+      if (maxMetaspaceSizeStr != NULL)
         maxMetaspaceSize = atoi(maxMetaspaceSizeStr);
       if (maxMetaspaceSize <= 0)
         maxMetaspaceSize = DEFAULT_MAX_METASPACE_SIZE;
       snprintf(maxMetaspaceSizeOptions, sizeof(maxMetaspaceSizeOptions),
                "-XX:MaxMetaspaceSize=%dm", maxMetaspaceSize);
       jvm_options[numJVMOptions].optionString = maxMetaspaceSizeOptions;
+      jvm_options[numJVMOptions].extraInfo = NULL;
       QRLogger::log(CAT_SQL_HDFS_JNI_TOP, LL_DEBUG,
                     "MaxMetaspaceSize: %s",
                     jvm_options[numJVMOptions].optionString);
@@ -199,7 +218,7 @@ int JavaObjectInterface::createJVM(LmJavaOptions *options)
   if (!isDefinedInOptions(options, "-Xms"))
     {
       const char *initHeapSizeStr = getenv("JVM_INIT_HEAP_SIZE_MB");
-      if (initHeapSizeStr)
+      if (initHeapSizeStr != NULL)
         {
           const int initHeapEnvvarMB = atoi(initHeapSizeStr);
           if (initHeapEnvvarMB > 0)
@@ -207,6 +226,7 @@ int JavaObjectInterface::createJVM(LmJavaOptions *options)
               snprintf(initHeapOptions, sizeof(initHeapOptions),
                        "-Xms%dm", initHeapEnvvarMB);
               jvm_options[numJVMOptions].optionString = initHeapOptions;
+              jvm_options[numJVMOptions].extraInfo = NULL;
               QRLogger::log(CAT_SQL_HDFS_JNI_TOP, LL_DEBUG,
                             "Init heap option: %s",
                             jvm_options[numJVMOptions].optionString);
@@ -243,6 +263,7 @@ int JavaObjectInterface::createJVM(LmJavaOptions *options)
           else
             strcat(debugOptions, ",suspend=n");
           jvm_options[numJVMOptions].optionString = debugOptions;
+          jvm_options[numJVMOptions].extraInfo = NULL;
           QRLogger::log(CAT_SQL_HDFS_JNI_TOP, LL_WARN,
                         "Debugging JVM with options: %s", 
                         jvm_options[numJVMOptions].optionString);
@@ -253,6 +274,7 @@ int JavaObjectInterface::createJVM(LmJavaOptions *options)
   if (!isDefinedInOptions(options, oomOption))
     {
       jvm_options[numJVMOptions].optionString = (char *)oomOption;
+      jvm_options[numJVMOptions].extraInfo = NULL;
       numJVMOptions++;
     }
 
@@ -268,14 +290,18 @@ int JavaObjectInterface::createJVM(LmJavaOptions *options)
           strcat(oomDumpDir, mySqRoot);
           strcat(oomDumpDir, "/logs");
           jvm_options[numJVMOptions].optionString = (char *)oomDumpDir;
+          jvm_options[numJVMOptions].extraInfo = NULL;
           numJVMOptions++;
         }
     }
 
+  ex_assert((numJVMOptions < MAX_NO_JVM_OPTIONS), "Buffer overflow in JVM options");
+
   if (options)
     for (CollIndex o=0; o<options->entries(); o++)
       {
         jvm_options[numJVMOptions].optionString = (char *) options->getOption(o);
+        jvm_options[numJVMOptions].extraInfo = NULL;
         QRLogger::log(CAT_SQL_HDFS_JNI_TOP, LL_DEBUG,
                       "Option passed to JavaObjectInterface::createJVM(): %s",
                       jvm_options[numJVMOptions].optionString);