Changes to ensure NADefaults::updateSystemParameters is done correctly.
diff --git a/core/sql/optimizer/OptimizerSimulator.cpp b/core/sql/optimizer/OptimizerSimulator.cpp
index c862dde..b2c187f 100644
--- a/core/sql/optimizer/OptimizerSimulator.cpp
+++ b/core/sql/optimizer/OptimizerSimulator.cpp
@@ -426,7 +426,7 @@
case CAPTURE: // OFF --> CAPTURE
setOsimLogdir(localDir);
setOsimMode(targetMode);//mode must be set before initialize
- NADefaults::updateSystemParameters(TRUE);
+ NADefaults::updateSystemParameters(FALSE);
createLogDir();
initHashDictionaries();
initLogFilePaths();
@@ -449,7 +449,7 @@
initHashDictionaries();
readSysCallLogfiles();
//reinitialize NAClusterInfoLinux and CQDs
- NADefaults::updateSystemParameters(TRUE);
+ NADefaults::updateSystemParameters(FALSE);
//apply cqds
readAndSetCQDs();
setClusterInfoInitialized(TRUE);
diff --git a/core/sql/regress/hive/EXPECTED009 b/core/sql/regress/hive/EXPECTED009
index 8734dbe..a830748 100644
--- a/core/sql/regress/hive/EXPECTED009
+++ b/core/sql/regress/hive/EXPECTED009
@@ -1070,6 +1070,8 @@
--- SQL operation complete.
>>prepare s from select * from hive.hive.date_dim where d_date = date '2016-01-27';
+*** WARNING[6008] Statistics for column (D_DATE) from table HIVE.HIVE.DATE_DIM were not available. As a result, the access path chosen might not be the best possible.
+
--- SQL command prepared.
>>explain options 'c' s;
diff --git a/core/sql/sqlcomp/NADefaults.h b/core/sql/sqlcomp/NADefaults.h
index c480a63..ee7b77c 100644
--- a/core/sql/sqlcomp/NADefaults.h
+++ b/core/sql/sqlcomp/NADefaults.h
@@ -330,9 +330,8 @@
void initCurrentDefaultsWithDefaultDefaults();
void initCurrentDefaultsFromSavedDefaults();
void saveCurrentDefaults();
- static void updateSystemParameters(NABoolean reInit = FALSE);
- void updateCurrentDefaultsForOSIM(DefaultDefault *,
- NABoolean validateFloatVal = TRUE);
+ static void updateSystemParameters(NABoolean initDefaultDefaults);
+ void updateCurrentDefaultsForOSIM(Int32 attrEnum, const char *defaultVal);
void resetAll (NAString &value,
short reset,
Int32 errOrWarn = -1);
diff --git a/core/sql/sqlcomp/nadefaults.cpp b/core/sql/sqlcomp/nadefaults.cpp
index 1c96315..d2408e9 100644
--- a/core/sql/sqlcomp/nadefaults.cpp
+++ b/core/sql/sqlcomp/nadefaults.cpp
@@ -3790,15 +3790,6 @@
, resetAll_(FALSE)
, defFlags_(0)
{
- static THREAD_P NABoolean systemParamterUpdated = FALSE;
- // First (but only if NSK-LITE Services exist),
- // write system parameters (attributes DEF_*) into DefaultDefaults,
- if (!systemParamterUpdated && !cmpCurrentContext->isStandalone())
- {
- updateSystemParameters();
- systemParamterUpdated = TRUE;
- }
-
if (readFromDefaultsTable_) {
initCurrentDefaultsFromSavedDefaults();
readFromDefaultsTable();
@@ -3810,6 +3801,7 @@
initCurrentDefaultsFromSavedDefaults();
readFromDefaultsTable();
} else {
+ updateSystemParameters(TRUE);
initCurrentDefaultsWithDefaultDefaults();
readFromDefaultsTable();
saveCurrentDefaults();
@@ -3973,29 +3965,31 @@
}
-// Updates the system parameters in the defaultDefaults table.
-void NADefaults::updateSystemParameters(NABoolean reInit)
+// Updates the system parameters in the defaultDefaults table based on
+// the flag passed.
+void NADefaults::updateSystemParameters(NABoolean updateDefaultDefaults)
{
- static const char *arrayOfSystemParameters[] = {
- "DEF_CPU_ARCHITECTURE",
- "DEF_DISCS_ON_CLUSTER",
- "DEF_INSTRUCTIONS_SECOND",
- "DEF_PAGE_SIZE",
- "DEF_LOCAL_CLUSTER_NUMBER",
- "DEF_LOCAL_SMP_NODE_NUMBER",
- "DEF_NUM_SMP_CPUS",
- "MAX_ESPS_PER_CPU_PER_OP",
- "DEFAULT_DEGREE_OF_PARALLELISM",
- "DEF_NUM_NODES_IN_ACTIVE_CLUSTERS",
+ static Int32 arrayOfSystemParameters[] = {
+ DEF_CPU_ARCHITECTURE,
+ DEF_DISCS_ON_CLUSTER,
+ DEF_INSTRUCTIONS_SECOND,
+ DEF_PAGE_SIZE,
+ DEF_LOCAL_CLUSTER_NUMBER,
+ DEF_LOCAL_SMP_NODE_NUMBER,
+ DEF_NUM_SMP_CPUS,
+ MAX_ESPS_PER_CPU_PER_OP,
+ DEFAULT_DEGREE_OF_PARALLELISM,
+ DEF_NUM_NODES_IN_ACTIVE_CLUSTERS,
// this is deliberately not in the list: "DEF_CHUNK_SIZE",
- "DEF_NUM_BM_CHUNKS",
- "DEF_PHYSICAL_MEMORY_AVAILABLE", //returned in KB not bytes
- "DEF_TOTAL_MEMORY_AVAILABLE", //returned in KB not bytes
- "DEF_VIRTUAL_MEMORY_AVAILABLE"
- , "USTAT_IUS_PERSISTENT_CBF_PATH"
+ DEF_NUM_BM_CHUNKS,
+ DEF_PHYSICAL_MEMORY_AVAILABLE, //returned in KB not bytes
+ DEF_TOTAL_MEMORY_AVAILABLE, //returned in KB not bytes
+ DEF_VIRTUAL_MEMORY_AVAILABLE,
+ USTAT_IUS_PERSISTENT_CBF_PATH
}; //returned in KB not bytes
+ char *newValue;
char valuestr[WIDEST_CPUARCH_VALUE];
// Set up global cluster information.
@@ -4006,235 +4000,161 @@
Int32 clusterNum = 0;
OSIM_getNodeAndClusterNumbers(nodeNum, clusterNum);
- // First (but only if NSK-LITE Services exist),
- // write system parameters (attributes DEF_*) into DefaultDefaults,
- // then copy DefaultDefaults into CurrentDefaults.
- if (!cmpCurrentContext->isStandalone()) {
+ if (updateDefaultDefaults) {
+ const size_t numAttrs = numDefaultAttributes();
+ if (numAttrs != sizeof(defaultDefaults) / sizeof(DefaultDefault))
+ return;
+ for (size_t i = 0; i < numAttrs; i++) {
+ defDefIx_[defaultDefaults[i].attrEnum] = i;
+ }
+ }
+ size_t numElements = sizeof(arrayOfSystemParameters) / sizeof(Int32);
- size_t numElements = sizeof(arrayOfSystemParameters) / sizeof(char *);
for (size_t i = 0; i < numElements; i++) {
+ if (updateDefaultDefaults)
+ newValue = new (GetCliGlobals()->exCollHeap()) char[WIDEST_CPUARCH_VALUE];
+ else
+ newValue = valuestr;
+ newValue[0] = '\0';
- Int32 j;
- // perform a lookup for the string, using a binary search
- lookupAttrName(arrayOfSystemParameters[i], -1, &j);
+ switch (arrayOfSystemParameters[i])
+ {
+ case DEF_CPU_ARCHITECTURE:
+ switch(gpClusterInfo->cpuArchitecture()) {
+ case CPU_ARCH_INTEL_80386:
+ strcpy(newValue, "INTEL_80386");
+ break;
+ case CPU_ARCH_INTEL_80486:
+ strcpy(newValue, "INTEL_80486");
+ break;
+ case CPU_ARCH_PENTIUM:
+ strcpy(newValue, "PENTIUM");
+ break;
+ case CPU_ARCH_PENTIUM_PRO:
+ strcpy(newValue, "PENTIUM_PRO");
+ break;
+ case CPU_ARCH_MIPS:
+ strcpy(newValue, "MIPS");
+ break;
+ case CPU_ARCH_ALPHA:
+ strcpy(newValue, "ALPHA");
+ break;
+ case CPU_ARCH_PPC:
+ strcpy(newValue, "PPC");
+ break;
+ default:
+ strcpy(newValue, "UNKNOWN");
+ break;
+ }
+ break;
- CMPASSERT(j >= 0);
+ case DEF_DISCS_ON_CLUSTER:
+ strcpy(newValue, "8");
+ break;
+
+ case DEF_PAGE_SIZE:
+ utoa_(gpClusterInfo->pageSize(), valuestr);
+ strcpy(newValue, valuestr);
+ break;
- if(reInit)
- NADELETEBASIC(defaultDefaults[j].value,NADHEAP);
- char *newValue = new (GetCliGlobals()->exCollHeap()) char[WIDEST_CPUARCH_VALUE];
- newValue[0] = '\0';
- defaultDefaults[j].value = newValue;
+ case DEF_LOCAL_CLUSTER_NUMBER:
+ utoa_(clusterNum, valuestr);
+ strcpy(newValue, valuestr);
+ break;
- switch(defaultDefaults[j].attrEnum) {
+ case DEF_LOCAL_SMP_NODE_NUMBER:
+ utoa_(nodeNum, valuestr);
+ strcpy(newValue, valuestr);
+ break;
- case DEF_CPU_ARCHITECTURE:
+ case DEF_NUM_SMP_CPUS:
+ utoa_(gpClusterInfo->numberOfCpusPerSMP(), valuestr);
+ strcpy(newValue, valuestr);
+ break;
- switch(gpClusterInfo->cpuArchitecture()) {
- // 123456789!1234567890@123456789
- case CPU_ARCH_INTEL_80386:
- strcpy(newValue, "INTEL_80386");
- break;
+ case DEFAULT_DEGREE_OF_PARALLELISM:
+ {
+ Lng32 x = 2;
+ utoa_(x, valuestr);
+ strcpy(newValue, valuestr);
+ }
+ break;
- case CPU_ARCH_INTEL_80486:
- strcpy(newValue, "INTEL_80486");
- break;
+ case MAX_ESPS_PER_CPU_PER_OP:
+ {
+ float espsPerCore = computeNumESPsPerCore(FALSE);
+ ftoa_(espsPerCore, valuestr);
+ strcpy(newValue, valuestr);
+ }
+ break;
- case CPU_ARCH_PENTIUM:
- strcpy(newValue, "PENTIUM");
- break;
+ case DEF_NUM_NODES_IN_ACTIVE_CLUSTERS:
+ utoa_(gpClusterInfo->numOfPhysicalSMPs(), valuestr);
+ strcpy(newValue, valuestr);
+ break;
- case CPU_ARCH_PENTIUM_PRO:
- strcpy(newValue, "PENTIUM_PRO");
- break;
+ case DEF_PHYSICAL_MEMORY_AVAILABLE:
+ utoa_(gpClusterInfo->physicalMemoryAvailable(), valuestr);
+ strcpy(newValue, valuestr);
+ break;
- case CPU_ARCH_MIPS:
- strcpy(newValue, "MIPS");
- break;
+ case DEF_TOTAL_MEMORY_AVAILABLE:
+ utoa_(gpClusterInfo->totalMemoryAvailable(), valuestr);
+ strcpy(newValue, valuestr);
+ break;
- case CPU_ARCH_ALPHA:
- strcpy(newValue, "ALPHA");
- break;
+ case DEF_VIRTUAL_MEMORY_AVAILABLE:
+ utoa_(gpClusterInfo->virtualMemoryAvailable(), valuestr);
+ strcpy(newValue, valuestr);
+ break;
- case CPU_ARCH_PPC:
- strcpy(newValue, "PPC");
- break;
+ case DEF_NUM_BM_CHUNKS:
+ {
+ UInt32 numChunks = (UInt32)
+ (gpClusterInfo->physicalMemoryAvailable() / def_DEF_CHUNK_SIZE / 4);
+ utoa_(numChunks, valuestr);
+ strcpy(newValue, valuestr);
+ }
+ break;
- default:
- strcpy(newValue, "UNKNOWN");
- break;
- }
- if(reInit)
- ActiveSchemaDB()->
- getDefaults().
- updateCurrentDefaultsForOSIM(&defaultDefaults[j], FALSE);
- break;
+ case DEF_INSTRUCTIONS_SECOND:
+ {
+ Int32 frequency, speed;
+ frequency = gpClusterInfo->processorFrequency();
+ switch (gpClusterInfo->cpuArchitecture()) {
+ case CPU_ARCH_PENTIUM_PRO: speed = (Int32) (frequency * 0.5); break;
+ case CPU_ARCH_PENTIUM: speed = (Int32) (frequency * 0.4); break;
+ default: speed = (Int32) (frequency * 0.3); break;
+ }
+ itoa_(speed, valuestr);
+ strcpy(newValue, valuestr);
+ }
+ break;
-
- case DEF_DISCS_ON_CLUSTER:
- strcpy(newValue, "8");
- if(reInit)
- ActiveSchemaDB()->
- getDefaults().
- updateCurrentDefaultsForOSIM(&defaultDefaults[j]);
- break;
-
- case DEF_PAGE_SIZE:
- utoa_(gpClusterInfo->pageSize(), valuestr);
- strcpy(newValue, valuestr);
- if(reInit)
- ActiveSchemaDB()->
- getDefaults().
- updateCurrentDefaultsForOSIM(&defaultDefaults[j]);
- break;
-
- case DEF_LOCAL_CLUSTER_NUMBER:
- utoa_(clusterNum, valuestr);
- strcpy(newValue, valuestr);
- if(reInit)
- ActiveSchemaDB()->
- getDefaults().
- updateCurrentDefaultsForOSIM(&defaultDefaults[j]);
- break;
-
- case DEF_LOCAL_SMP_NODE_NUMBER:
- utoa_(nodeNum, valuestr);
- strcpy(newValue, valuestr);
- if(reInit)
- ActiveSchemaDB()->
- getDefaults().
- updateCurrentDefaultsForOSIM(&defaultDefaults[j]);
- break;
-
- case DEF_NUM_SMP_CPUS:
- utoa_(gpClusterInfo->numberOfCpusPerSMP(), valuestr);
- strcpy(newValue, valuestr);
- if(reInit)
- ActiveSchemaDB()->
- getDefaults().
- updateCurrentDefaultsForOSIM(&defaultDefaults[j]);
- break;
-
- case DEFAULT_DEGREE_OF_PARALLELISM:
- {
- Lng32 x = 2;
-
- utoa_(x, valuestr);
- strcpy(newValue, valuestr);
- if(reInit)
- ActiveSchemaDB()->
- getDefaults().
- updateCurrentDefaultsForOSIM(&defaultDefaults[j]);
- }
- break;
-
- case MAX_ESPS_PER_CPU_PER_OP:
- {
- float espsPerCore = computeNumESPsPerCore(FALSE);
- ftoa_(espsPerCore, valuestr);
- strcpy(newValue, valuestr);
- if(reInit)
- ActiveSchemaDB()->
- getDefaults().
- updateCurrentDefaultsForOSIM(&defaultDefaults[j]);
- }
- break;
-
- case DEF_NUM_NODES_IN_ACTIVE_CLUSTERS:
-
- utoa_(gpClusterInfo->numOfPhysicalSMPs(), valuestr);
- strcpy(newValue, valuestr);
-
- if(reInit)
- ActiveSchemaDB()->
- getDefaults().
- updateCurrentDefaultsForOSIM(&defaultDefaults[j]);
- break;
-
- case DEF_PHYSICAL_MEMORY_AVAILABLE:
- utoa_(gpClusterInfo->physicalMemoryAvailable(), valuestr);
- strcpy(newValue, valuestr);
- if(reInit)
- ActiveSchemaDB()->
- getDefaults().
- updateCurrentDefaultsForOSIM(&defaultDefaults[j]);
- break;
-
- case DEF_TOTAL_MEMORY_AVAILABLE:
- utoa_(gpClusterInfo->totalMemoryAvailable(), valuestr);
- strcpy(newValue, valuestr);
- if(reInit)
- ActiveSchemaDB()->
- getDefaults().
- updateCurrentDefaultsForOSIM(&defaultDefaults[j]);
- break;
-
- case DEF_VIRTUAL_MEMORY_AVAILABLE:
- utoa_(gpClusterInfo->virtualMemoryAvailable(), valuestr);
- strcpy(newValue, valuestr);
- if(reInit)
- ActiveSchemaDB()->
- getDefaults().
- updateCurrentDefaultsForOSIM(&defaultDefaults[j]);
- break;
-
- case DEF_NUM_BM_CHUNKS:
- {
- UInt32 numChunks = (UInt32)
- (gpClusterInfo->physicalMemoryAvailable() / def_DEF_CHUNK_SIZE / 4);
- utoa_(numChunks, valuestr);
- strcpy(newValue, valuestr);
- if(reInit)
- ActiveSchemaDB()->
- getDefaults().
- updateCurrentDefaultsForOSIM(&defaultDefaults[j]);
- }
- break;
-
- case DEF_INSTRUCTIONS_SECOND:
- {
- Int32 frequency, speed;
- frequency = gpClusterInfo->processorFrequency();
-
- switch (gpClusterInfo->cpuArchitecture()) {
- case CPU_ARCH_PENTIUM_PRO: speed = (Int32) (frequency * 0.5); break;
- case CPU_ARCH_PENTIUM: speed = (Int32) (frequency * 0.4); break;
- default: speed = (Int32) (frequency * 0.3); break;
- }
-
- itoa_(speed, valuestr);
- strcpy(newValue, valuestr);
- if(reInit)
- ActiveSchemaDB()->
- getDefaults().
- updateCurrentDefaultsForOSIM(&defaultDefaults[j]);
- }
- break;
-
- case USTAT_IUS_PERSISTENT_CBF_PATH:
-
- {
- // set the CQD it to $HOME/cbfs
- const char* home = getenv("HOME");
-
- if ( home ) {
- str_cat(home, "/cbfs", newValue);
- }
-
- }
- break;
-
- default:
- #ifndef NDEBUG
- cerr << "updateSystemParameters: no case for "
- << defaultDefaults[j].attrName << endl;
- #endif
- break;
-
- } // switch (arrayOfSystemParameters)
- } // for
- } // isStandalone
-
+ case USTAT_IUS_PERSISTENT_CBF_PATH:
+ {
+ // set the CQD it to $HOME/cbfs
+ const char* home = getenv("HOME");
+
+ if ( home ) {
+ str_cat(home, "/cbfs", newValue);
+ }
+ }
+ break;
+ default:
+ #ifndef NDEBUG
+ cerr << "updateSystemParameters: no case for "
+ << defaultDefaults[j].attrName << endl;
+ #endif
+ break;
+ } // switch (arrayOfSystemParameters)
+ if (updateDefaultDefaults) {
+ Int32 j = defDefIx_[arrayOfSystemParameters[i]];
+ defaultDefaults[j].value = newValue;
+ }
+ else
+ ActiveSchemaDB()->getDefaults().updateCurrentDefaultsForOSIM(arrayOfSystemParameters[i], newValue);
+ } // for
} // updateSystemParameters()
//==============================================================================
@@ -6657,39 +6577,15 @@
return TRUE;
}
-void NADefaults::updateCurrentDefaultsForOSIM(DefaultDefault * defaultDefault,
- NABoolean validateFloatVal)
+void NADefaults::updateCurrentDefaultsForOSIM(Int32 attrEnum, const char *value)
{
- Int32 attrEnum = defaultDefault->attrEnum;
- const char * defaultVal = defaultDefault->value;
- const char * valueStr = currentDefaults_[attrEnum];
+
+ Int32 errOrWarn;
- if(valueStr)
- {
- NADELETEBASIC(valueStr,NADHEAP);
- }
-
- char * value = new NADHEAP char[strlen(defaultVal) + 1];
- strcpy(value, defaultVal);
- currentDefaults_[attrEnum] = value;
-
- if ( validateFloatVal )
- {
- float floatVal = 0;
- if (validateFloat(currentDefaults_[attrEnum], floatVal, attrEnum)) {
- if (currentFloats_[attrEnum]) {
- NADELETEBASIC(currentFloats_[attrEnum], NADHEAP);
- }
- currentFloats_[attrEnum] = new NADHEAP float;
- *currentFloats_[attrEnum] = floatVal;
- }
- }
-
- if ( currentTokens_[attrEnum] )
- {
- if (provenances_[attrEnum] > INIT_DEFAULT_DEFAULTS)
- NADELETEBASIC( currentTokens_[attrEnum], NADHEAP );
- currentTokens_[attrEnum] = NULL;
+ if (! insert(attrEnum, value, errOrWarn)) {
+ *CmpCommon::diags() << DgSqlCode(-2055)
+ << DgString0(value)
+ << DgString1(lookupAttrName(attrEnum));
}
}