From 2bdcb159eddcf7eacdac88c0351cdf8209bd0ef2 Mon Sep 17 00:00:00 2001 From: David Hall Date: Tue, 30 Jan 2018 16:07:51 -0600 Subject: [PATCH 01/23] MCOL-962 change mcssystemreadonly to a tri state return flag. Test for 0 to see if the system is in a writable state, --- dbcon/mysql/ha_calpont_impl.cpp | 48 ++++--------------------- dbcon/mysql/install_calpont_mysql.sh | 1 - utils/winport/win_setup_mysql_part2.sql | 1 - 3 files changed, 6 insertions(+), 44 deletions(-) diff --git a/dbcon/mysql/ha_calpont_impl.cpp b/dbcon/mysql/ha_calpont_impl.cpp index 3b3a5f00b..6f5204308 100755 --- a/dbcon/mysql/ha_calpont_impl.cpp +++ b/dbcon/mysql/ha_calpont_impl.cpp @@ -1866,7 +1866,7 @@ void mcssystemready_deinit(UDF_INIT* initid) #ifdef _MSC_VER __declspec(dllexport) #endif -// Return 1 if system is read only; 0 if writeable +// Return non-zero if system is read only; 0 if writeable long long mcssystemreadonly(UDF_INIT* initid, UDF_ARGS* args, char* is_null, char* error) { @@ -1875,9 +1875,13 @@ long long mcssystemreadonly(UDF_INIT* initid, UDF_ARGS* args, try { + if (dbrm.getSystemSuspended()) + { + rtn = 1; + } if (dbrm.isReadWrite()) // Returns 0 for writable, 5 for read only { - rtn = 1; + rtn = 2; } } catch (...) @@ -1903,46 +1907,6 @@ void mcssystemreadonly_deinit(UDF_INIT* initid) { } -#ifdef _MSC_VER -__declspec(dllexport) -#endif -// Return 1 if system is read only; 0 if writeable -long long mcswritessuspended(UDF_INIT* initid, UDF_ARGS* args, - char* is_null, char* error) -{ - long long rtn = 0; - DBRM dbrm(true); - - try - { - if (dbrm.getSystemSuspended()) - { - rtn = 1; - } - } - catch (...) - { - *error = 1; - rtn = 1; - } - return rtn; -} - -#ifdef _MSC_VER -__declspec(dllexport) -#endif -my_bool mcswritessuspended_init(UDF_INIT* initid, UDF_ARGS* args, char* message) -{ - return 0; -} - -#ifdef _MSC_VER -__declspec(dllexport) -#endif -void mcswritessuspended_deinit(UDF_INIT* initid) -{ -} - #define MAXSTRINGLENGTH 50 const char* PmSmallSideMaxMemory = "pmmaxmemorysmallside"; diff --git a/dbcon/mysql/install_calpont_mysql.sh b/dbcon/mysql/install_calpont_mysql.sh index 17c6e1817..e8eb5b2b0 100755 --- a/dbcon/mysql/install_calpont_mysql.sh +++ b/dbcon/mysql/install_calpont_mysql.sh @@ -84,7 +84,6 @@ CREATE FUNCTION idbpartition RETURNS STRING soname 'libcalmysql.so'; CREATE FUNCTION idblocalpm RETURNS INTEGER soname 'libcalmysql.so'; CREATE FUNCTION mcssystemready RETURNS INTEGER soname 'libcalmysql.so'; CREATE FUNCTION mcssystemreadonly RETURNS INTEGER soname 'libcalmysql.so'; -CREATE FUNCTION mcswritessuspended RETURNS INTEGER soname 'libcalmysql.so'; CREATE DATABASE IF NOT EXISTS infinidb_vtable; CREATE DATABASE IF NOT EXISTS infinidb_querystats; diff --git a/utils/winport/win_setup_mysql_part2.sql b/utils/winport/win_setup_mysql_part2.sql index 0a2a972fb..3ac04dcad 100644 --- a/utils/winport/win_setup_mysql_part2.sql +++ b/utils/winport/win_setup_mysql_part2.sql @@ -11,7 +11,6 @@ CREATE FUNCTION calcleartablelock RETURNS STRING SONAME 'libcalmysql.dll'; CREATE FUNCTION calgetsqlcount RETURNS STRING SONAME 'libcalmysql.dll'; CREATE FUNCTION mcssystemready RETURNS INTEGER SONAME 'libcalmysql.dll'; CREATE FUNCTION mcssystemreadonly RETURNS INTEGER SONAME 'libcalmysql.dll'; -CREATE FUNCTION mcswritessuspended RETURNS INTEGER SONAME 'libcalmysql.dll'; create database if not exists calpontsys; use calpontsys; From 43f322ea2fc1f34208e403da1a7702fc5dcb7fd6 Mon Sep 17 00:00:00 2001 From: David Hall Date: Tue, 30 Jan 2018 16:19:17 -0600 Subject: [PATCH 02/23] MCOL-962 formating --- dbcon/mysql/ha_calpont_impl.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/dbcon/mysql/ha_calpont_impl.cpp b/dbcon/mysql/ha_calpont_impl.cpp index 6f5204308..3eb5a20ab 100755 --- a/dbcon/mysql/ha_calpont_impl.cpp +++ b/dbcon/mysql/ha_calpont_impl.cpp @@ -1824,7 +1824,7 @@ __declspec(dllexport) #endif // Return 1 if system is ready for reads or 0 if not. long long mcssystemready(UDF_INIT* initid, UDF_ARGS* args, - char* is_null, char* error) + char* is_null, char* error) { long long rtn = 0; Oam oam; @@ -1853,7 +1853,7 @@ __declspec(dllexport) #endif my_bool mcssystemready_init(UDF_INIT* initid, UDF_ARGS* args, char* message) { - return 0; + return 0; } #ifdef _MSC_VER @@ -1868,17 +1868,17 @@ __declspec(dllexport) #endif // Return non-zero if system is read only; 0 if writeable long long mcssystemreadonly(UDF_INIT* initid, UDF_ARGS* args, - char* is_null, char* error) + char* is_null, char* error) { long long rtn = 0; DBRM dbrm(true); try { - if (dbrm.getSystemSuspended()) - { - rtn = 1; - } + if (dbrm.getSystemSuspended()) + { + rtn = 1; + } if (dbrm.isReadWrite()) // Returns 0 for writable, 5 for read only { rtn = 2; @@ -1897,7 +1897,7 @@ __declspec(dllexport) #endif my_bool mcssystemreadonly_init(UDF_INIT* initid, UDF_ARGS* args, char* message) { - return 0; + return 0; } #ifdef _MSC_VER From 243e9e9fb89f23fc72232b2d78ab14c37ba54751 Mon Sep 17 00:00:00 2001 From: David Hall Date: Tue, 30 Jan 2018 16:21:47 -0600 Subject: [PATCH 03/23] MCOL-962 format --- dbcon/mysql/ha_calpont_impl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dbcon/mysql/ha_calpont_impl.cpp b/dbcon/mysql/ha_calpont_impl.cpp index 3eb5a20ab..5ca18e212 100755 --- a/dbcon/mysql/ha_calpont_impl.cpp +++ b/dbcon/mysql/ha_calpont_impl.cpp @@ -1824,7 +1824,7 @@ __declspec(dllexport) #endif // Return 1 if system is ready for reads or 0 if not. long long mcssystemready(UDF_INIT* initid, UDF_ARGS* args, - char* is_null, char* error) + char* is_null, char* error) { long long rtn = 0; Oam oam; @@ -1868,7 +1868,7 @@ __declspec(dllexport) #endif // Return non-zero if system is read only; 0 if writeable long long mcssystemreadonly(UDF_INIT* initid, UDF_ARGS* args, - char* is_null, char* error) + char* is_null, char* error) { long long rtn = 0; DBRM dbrm(true); From 59f7e142309c50f4c796ea7e7314f20943f3ffc6 Mon Sep 17 00:00:00 2001 From: David Hall Date: Tue, 30 Jan 2018 16:25:15 -0600 Subject: [PATCH 04/23] MCOL-962 returned wrong value. --- dbcon/mysql/ha_calpont_impl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbcon/mysql/ha_calpont_impl.cpp b/dbcon/mysql/ha_calpont_impl.cpp index 5ca18e212..196ca2202 100755 --- a/dbcon/mysql/ha_calpont_impl.cpp +++ b/dbcon/mysql/ha_calpont_impl.cpp @@ -1879,7 +1879,7 @@ long long mcssystemreadonly(UDF_INIT* initid, UDF_ARGS* args, { rtn = 1; } - if (dbrm.isReadWrite()) // Returns 0 for writable, 5 for read only + if (dbrm.isReadWrite() > 0) // Returns 0 for writable, 5 for read only { rtn = 2; } From 6f4cfcdc3b3b3158d64726a946c7a7f96077ceaf Mon Sep 17 00:00:00 2001 From: Andrew Hutchings Date: Fri, 2 Feb 2018 10:04:47 +0000 Subject: [PATCH 05/23] MCOL-1070 Fix exists in view subquery When ExeMgr processes a correlated exists filter for a subquery inside a view the de-duplication check doesn't work. We sometimes check unique with the view name, sometimes not. We don't need the view name here so remove it if we don't have it. Also push the view name in the subquery. --- dbcon/joblist/subquerytransformer.cpp | 1 + dbcon/mysql/ha_calpont_execplan.cpp | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/dbcon/joblist/subquerytransformer.cpp b/dbcon/joblist/subquerytransformer.cpp index 01441311b..cb7189a76 100644 --- a/dbcon/joblist/subquerytransformer.cpp +++ b/dbcon/joblist/subquerytransformer.cpp @@ -399,6 +399,7 @@ void SubQueryTransformer::updateCorrelateInfo() sc->schemaName(""); sc->tableName(fVtable.name()); sc->tableAlias(fVtable.alias()); + sc->viewName(fVtable.view()); sc->oid(fVtable.columnOid(k->second)); sc->columnName(fVtable.columns()[k->second]->columnName()); const CalpontSystemCatalog::ColType& ct = fVtable.columnType(k->second); diff --git a/dbcon/mysql/ha_calpont_execplan.cpp b/dbcon/mysql/ha_calpont_execplan.cpp index 6cb25c269..f07bc624b 100755 --- a/dbcon/mysql/ha_calpont_execplan.cpp +++ b/dbcon/mysql/ha_calpont_execplan.cpp @@ -1810,6 +1810,11 @@ SimpleColumn* buildSimpleColFromDerivedTable(gp_walk_info& gwi, Item_field* ifp) { sc->derivedTable(derivedName); sc->derivedRefCol(cols[j].get()); + if (tblList->belong_to_view) + { + sc->viewName(lower(tblList->belong_to_view->alias)); + } + } break; } From b4e64f24f338a8156fb1d6d6fd29c11f68f0e9eb Mon Sep 17 00:00:00 2001 From: david hill Date: Fri, 2 Feb 2018 09:04:07 -0600 Subject: [PATCH 06/23] MCOL-1185 MCOL-436 -send alarms to procmgr to be processed --- oam/etc/Columnstore.xml | 4 + oam/etc/Columnstore.xml.singleserver | 4 + oamapps/alarmmanager/alarmglobal.h | 2 +- oamapps/alarmmanager/alarmmanager.cpp | 83 ++++++++++++--- oamapps/alarmmanager/alarmmanager.h | 2 + oamapps/postConfigure/postConfigure.cpp | 4 +- procmgr/main.cpp | 121 ++++++++++++++++++--- procmgr/processmanager.cpp | 135 ++++++++++++++++++------ procmgr/processmanager.h | 16 +-- procmon/main.cpp | 1 + tools/configMgt/autoConfigure.cpp | 1 + 11 files changed, 307 insertions(+), 66 deletions(-) diff --git a/oam/etc/Columnstore.xml b/oam/etc/Columnstore.xml index c3aa79c42..ec985028f 100644 --- a/oam/etc/Columnstore.xml +++ b/oam/etc/Columnstore.xml @@ -19,6 +19,10 @@ 0.0.0.0 8603 + + 127.0.0.1 + 8606 + 0.0.0.0 8604 diff --git a/oam/etc/Columnstore.xml.singleserver b/oam/etc/Columnstore.xml.singleserver index 13f2b3fc7..58bb10ebd 100644 --- a/oam/etc/Columnstore.xml.singleserver +++ b/oam/etc/Columnstore.xml.singleserver @@ -14,6 +14,10 @@ 127.0.0.1 8603 + + 127.0.0.1 + 8606 + 127.0.0.1 8604 diff --git a/oamapps/alarmmanager/alarmglobal.h b/oamapps/alarmmanager/alarmglobal.h index fd22d3d97..af01e149c 100644 --- a/oamapps/alarmmanager/alarmglobal.h +++ b/oamapps/alarmmanager/alarmglobal.h @@ -38,7 +38,7 @@ const std::string ACTIVE_ALARM_FILE = "/var/log/mariadb/columnstore/activeAlarms const std::string ALARM_FILE = "/var/log/mariadb/columnstore/alarm.log"; const std::string ALARM_ARCHIVE_FILE = "/var/log/mariadb/columnstore/archive"; -const bool ALARM_DEBUG = false; +const bool ALARM_DEBUG = true; const uint16_t INVALID_ALARM_ID = 0; } diff --git a/oamapps/alarmmanager/alarmmanager.cpp b/oamapps/alarmmanager/alarmmanager.cpp index e03f38b4d..b9ba4f702 100644 --- a/oamapps/alarmmanager/alarmmanager.cpp +++ b/oamapps/alarmmanager/alarmmanager.cpp @@ -28,10 +28,10 @@ #include #include -#include "messagequeue.h" #include "alarmglobal.h" #include "liboamcpp.h" #include "installdir.h" +#include "messagequeue.h" using namespace std; using namespace oam; @@ -373,11 +373,11 @@ void configAlarm (Alarm& calAlarm) /***************************************************************************************** * @brief sendAlarmReport API * -* purpose: Process Alarm Report +* purpose: Send Alarm Report * *****************************************************************************************/ void ALARMManager::sendAlarmReport (const char* componentID, int alarmID, int state, - std::string repModuleName, std::string repProcessName) + std::string repModuleName, std::string repProcessName) { #ifdef SKIP_ALARM @@ -438,16 +438,73 @@ void ALARMManager::sendAlarmReport (const char* componentID, int alarmID, int st else processName = repProcessName; - Alarm calAlarm; - - calAlarm.setAlarmID (alarmID); - calAlarm.setComponentID (componentID); - calAlarm.setState (state); - calAlarm.setSname (ModuleName); - calAlarm.setPname (processName); - calAlarm.setPid (pid); - calAlarm.setTid (tid); + int returnStatus = API_SUCCESS; //default + ByteStream msg1; + // setup message + msg1 << (ByteStream::byte) alarmID; + msg1 << (std::string) componentID; + msg1 << (ByteStream::byte) state; + msg1 << (std::string) ModuleName; + msg1 << (std::string) processName; + msg1 << (ByteStream::byte) pid; + msg1 << (ByteStream::byte) tid; + + try + { + //send the msg to Process Manager + MessageQueueClient procmgr("ProcMgr_Alarm"); + procmgr.write(msg1); + + // shutdown connection + procmgr.shutdown(); + } + catch (std::runtime_error& e) + { + LoggingID lid(11); + MessageLog ml(lid); + Message msg; + Message::Args args; + args.add("sendAlarmReport error:"); + args.add(e.what()); + msg.format(args); + ml.logErrorMessage(msg); + } + catch (std::exception& e) + { + LoggingID lid(11); + MessageLog ml(lid); + Message msg; + Message::Args args; + args.add("sendAlarmReport error:"); + args.add(e.what()); + msg.format(args); + ml.logErrorMessage(msg); + } + catch (...) + { + LoggingID lid(11); + MessageLog ml(lid); + Message msg; + Message::Args args; + args.add("sendAlarmReport error:"); + args.add("general failure"); + msg.format(args); + ml.logErrorMessage(msg); + } + + return; +#endif //SKIP_ALARM +} + +/***************************************************************************************** +* @brief processAlarmReport API +* +* purpose: Process Alarm Report +* +*****************************************************************************************/ +void ALARMManager::processAlarmReport (Alarm& calAlarm) +{ // Get alarm configuration try { configAlarm (calAlarm); @@ -464,7 +521,7 @@ void ALARMManager::sendAlarmReport (const char* componentID, int alarmID, int st } return; -#endif //SKIP_ALARM + } /***************************************************************************************** diff --git a/oamapps/alarmmanager/alarmmanager.h b/oamapps/alarmmanager/alarmmanager.h index 28909cbb7..5f79ccf9a 100644 --- a/oamapps/alarmmanager/alarmmanager.h +++ b/oamapps/alarmmanager/alarmmanager.h @@ -77,6 +77,8 @@ public: std::string repProcessName = ""); + EXPORT void processAlarmReport (Alarm& calAlarm); + /** @brief return active alarm list * * @param AlarmList the alarm map reference to store alarms diff --git a/oamapps/postConfigure/postConfigure.cpp b/oamapps/postConfigure/postConfigure.cpp index a12784039..50685ae39 100644 --- a/oamapps/postConfigure/postConfigure.cpp +++ b/oamapps/postConfigure/postConfigure.cpp @@ -2028,8 +2028,8 @@ int main(int argc, char *argv[]) sysConfig->setConfig(parentProcessMonitor, "IPAddr", parentOAMModuleIPAddr); sysConfig->setConfig(parentProcessMonitor, "Port", "8800"); sysConfig->setConfig("ProcMgr", "IPAddr", parentOAMModuleIPAddr); - //sysConfig->setConfig("ProcHeartbeatControl", "IPAddr", parentOAMModuleIPAddr); - sysConfig->setConfig("ProcStatusControl", "IPAddr", parentOAMModuleIPAddr); + sysConfig->setConfig("ProcHeartbeatControl", "IPAddr", parentOAMModuleIPAddr); + sysConfig->setConfig("ProcMgr_Alarm", "IPAddr", parentOAMModuleIPAddr); string parentServerMonitor = parentOAMModuleName + "_ServerMonitor"; sysConfig->setConfig(parentServerMonitor, "IPAddr", parentOAMModuleIPAddr); string portName = parentOAMModuleName + "_WriteEngineServer"; diff --git a/procmgr/main.cpp b/procmgr/main.cpp index 01153d11f..ec90a1eeb 100644 --- a/procmgr/main.cpp +++ b/procmgr/main.cpp @@ -78,6 +78,7 @@ extern bool startFailOver; extern bool gOAMParentModuleFlag; static void messageThread(Configuration config); +static void alarmMessageThread(Configuration config); static void sigUser1Handler(int sig); static void startMgrProcessThread(); static void hdfsActiveAlarmsPushingThread(); @@ -265,6 +266,12 @@ int main(int argc, char **argv) if ( ret != 0 ) log.writeLog(__LINE__, "pthread_create failed, return code = " + oam.itoa(ret), LOG_TYPE_ERROR); + // create alarm message thread + pthread_t AlarmMessageThread; + ret = pthread_create (&AlarmMessageThread, NULL, (void*(*)(void*)) &alarmMessageThread, &config); + if ( ret != 0 ) + log.writeLog(__LINE__, "pthread_create failed, return code = " + oam.itoa(ret), LOG_TYPE_ERROR); + //monitor OAM Parent Module for failover while(true) { @@ -351,6 +358,7 @@ int main(int argc, char **argv) string IPaddr = (*pt1).IPAddr; sysConfig->setConfig("ProcMgr", "IPAddr", IPaddr); + sysConfig->setConfig("ProcMgr_Alarm", "IPAddr", IPaddr); log.writeLog(__LINE__, "set ProcMgr IPaddr to " + IPaddr, LOG_TYPE_DEBUG); //update Calpont Config table @@ -378,6 +386,12 @@ int main(int argc, char **argv) int ret = pthread_create (&MessageThread, NULL, (void*(*)(void*)) &messageThread, &config); if ( ret != 0 ) log.writeLog(__LINE__, "pthread_create failed, return code = " + oam.itoa(ret), LOG_TYPE_ERROR); + + // create alarm message thread + pthread_t AlarmMessageThread; + ret = pthread_create (&AlarmMessageThread, NULL, (void*(*)(void*)) &alarmMessageThread, &config); + if ( ret != 0 ) + log.writeLog(__LINE__, "pthread_create failed, return code = " + oam.itoa(ret), LOG_TYPE_ERROR); } // @@ -463,21 +477,102 @@ static void messageThread(Configuration config) } } - catch (exception& ex) - { - string error = ex.what(); - log.writeLog(__LINE__, "EXCEPTION ERROR on MessageQueueServer for ProcMgr:" + error, LOG_TYPE_ERROR); + catch (exception& ex) + { + string error = ex.what(); + log.writeLog(__LINE__, "EXCEPTION ERROR on MessageQueueServer for ProcMgr:" + error, LOG_TYPE_ERROR); - // takes 2 - 4 minites to free sockets, sleep and retry - sleep(60); - } - catch(...) - { - log.writeLog(__LINE__, "EXCEPTION ERROR on MessageQueueServer for ProcMgr: Caught unknown exception!", LOG_TYPE_ERROR); + // takes 2 - 4 minites to free sockets, sleep and retry + sleep(60); + } + catch(...) + { + log.writeLog(__LINE__, "EXCEPTION ERROR on MessageQueueServer for ProcMgr: Caught unknown exception!", LOG_TYPE_ERROR); - // takes 2 - 4 minites to free sockets, sleep and retry - sleep(60); - } + // takes 2 - 4 minites to free sockets, sleep and retry + sleep(60); + } + } + return; +} + +/****************************************************************************************** +* @brief alarmMesssageThread +* +* purpose: Read incoming alarm messages +* +******************************************************************************************/ +static void alarmMessageThread(Configuration config) +{ + ProcessLog log; + ProcessManager processManager(config, log); + Oam oam; + + //check for running active, then launch + while(true) + { + if ( !runStandby) + break; + sleep (1); + } + + log.writeLog(__LINE__, "Alarm Message Thread started ..", LOG_TYPE_DEBUG); + + //read and cleanup port before trying to use + try { + Config* sysConfig = Config::makeConfig(); + string port = sysConfig->getConfig("ProcMgr_Alarm", "Port"); + string cmd = "fuser -k " + port + "/tcp >/dev/null 2>&1"; + if ( !rootUser) + cmd = "sudo fuser -k " + port + "/tcp >/dev/null 2>&1"; + + + system(cmd.c_str()); + } + catch(...) + { + } + + // + //waiting for request + // + IOSocket fIos; + + for (;;) + { + try + { + MessageQueueServer procmgr("ProcMgr_Alarm"); + for (;;) + { + try + { + fIos = procmgr.accept(); + + pthread_t alarmMessagethread; + int status = pthread_create (&alarmMessagethread, NULL, (void*(*)(void*)) &processAlarmMSG, &fIos); + + if ( status != 0 ) + log.writeLog(__LINE__, "alarmmessagethread: pthread_create failed, return status = " + oam.itoa(status), LOG_TYPE_ERROR); + } + catch(...) + {} + + } + } + catch (exception& ex) + { + string error = ex.what(); + log.writeLog(__LINE__, "EXCEPTION ERROR on MessageQueueServer for ProcMgr_Alarm:" + error, LOG_TYPE_ERROR); + + sleep(1); + } + catch(...) + { + log.writeLog(__LINE__, "EXCEPTION ERROR on MessageQueueServer for ProcMgr_Alarm: Caught unknown exception!", LOG_TYPE_ERROR); + + sleep(1); + } } return; } diff --git a/procmgr/processmanager.cpp b/procmgr/processmanager.cpp index c4abe6793..24fc09f72 100755 --- a/procmgr/processmanager.cpp +++ b/procmgr/processmanager.cpp @@ -301,6 +301,79 @@ ProcessManager::~ProcessManager() { } +/****************************************************************************************** +* @brief processAlarmMSG +* +* purpose: Process the Alarm message +* +******************************************************************************************/ +//void ProcessManager::processAlarmMSG( messageqcpp::IOSocket fIos, messageqcpp::ByteStream msg) +void processAlarmMSG(messageqcpp::IOSocket* cfIos) +{ + messageqcpp::IOSocket afIos = *cfIos; + + pthread_t ThreadId; + ThreadId = pthread_self(); + + ByteStream msg; + + try{ + msg = afIos.read(); + } + catch(...) + { + pthread_detach (ThreadId); + pthread_exit(0); + } + + if (msg.length() <= 0) { + afIos.close(); + pthread_detach (ThreadId); + pthread_exit(0); + } + + Oam oam; + ProcessLog log; + + Configuration config; + ProcessManager processManager(config, log); + + log.writeLog(__LINE__, "MSG RECEIVED: Process Alarm Message"); + + ByteStream::byte alarmID; + std::string componentID; + ByteStream::byte state; + std::string ModuleName; + std::string processName; + ByteStream::byte pid; + ByteStream::byte tid; + + msg >> alarmID; + msg >> componentID; + msg >> state; + msg >> ModuleName; + msg >> processName; + msg >> pid; + msg >> tid; + + Alarm calAlarm; + + calAlarm.setAlarmID (alarmID); + calAlarm.setComponentID (componentID); + calAlarm.setState (state); + calAlarm.setSname (ModuleName); + calAlarm.setPname (processName); + calAlarm.setPid (pid); + calAlarm.setTid (tid); + + ALARMManager aManager; + aManager.processAlarmReport(calAlarm); + + afIos.close(); + pthread_detach (ThreadId); + pthread_exit(0); +} + /****************************************************************************************** * @brief processMSG * @@ -2629,44 +2702,44 @@ void processMSG(messageqcpp::IOSocket* cfIos) break; } -/* - case PROCESSALARM: - { - log.writeLog(__LINE__, "MSG RECEIVED: Process Alarm Message"); - ByteStream::byte alarmID; - std::string componentID; - ByteStream::byte state; - std::string ModuleName; - std::string processName; - ByteStream::byte pid; - ByteStream::byte tid; +/* case PROCESSALARM: + { + log.writeLog(__LINE__, "MSG RECEIVED: Process Alarm Message"); - msg >> alarmID; - msg >> componentID; - msg >> state; - msg >> ModuleName; - msg >> processName; - msg >> pid; - msg >> tid; + ByteStream::byte alarmID; + std::string componentID; + ByteStream::byte state; + std::string ModuleName; + std::string processName; + ByteStream::byte pid; + ByteStream::byte tid; - Alarm calAlarm; + msg >> alarmID; + msg >> componentID; + msg >> state; + msg >> ModuleName; + msg >> processName; + msg >> pid; + msg >> tid; - calAlarm.setAlarmID (alarmID); - calAlarm.setComponentID (componentID); - calAlarm.setState (state); - calAlarm.setSname (ModuleName); - calAlarm.setPname (processName); - calAlarm.setPid (pid); - calAlarm.setTid (tid); + Alarm calAlarm; - ALARMManager aManager; - aManager.processAlarmReport(calAlarm); + calAlarm.setAlarmID (alarmID); + calAlarm.setComponentID (componentID); + calAlarm.setState (state); + calAlarm.setSname (ModuleName); + calAlarm.setPname (processName); + calAlarm.setPid (pid); + calAlarm.setTid (tid); - break; - } + ALARMManager aManager; + aManager.processAlarmReport(calAlarm); + break; + } */ + default: log.writeLog(__LINE__, "MSG RECEIVED: Invalid type" ); break; @@ -8720,6 +8793,7 @@ int ProcessManager::switchParentOAMModule(std::string newActiveModuleName) newActiveIPaddr = (*pt2).IPAddr; sysConfig4->setConfig("ProcMgr", "IPAddr", newActiveIPaddr); + sysConfig4->setConfig("ProcMgr_Alarm", "IPAddr", newActiveIPaddr); sysConfig4->setConfig("ProcStatusControl", "IPAddr", newActiveIPaddr); sysConfig4->setConfig("DBRM_Controller", "IPAddr", newActiveIPaddr); @@ -9296,6 +9370,7 @@ int ProcessManager::OAMParentModuleChange() localIPaddr = (*pt1).IPAddr; sysConfig4->setConfig("ProcMgr", "IPAddr", localIPaddr); + sysConfig4->setConfig("ProcMgr_Alarm", "IPAddr", localIPaddr); sysConfig4->setConfig("ProcStatusControl", "IPAddr", localIPaddr); sysConfig4->setConfig("DBRM_Controller", "IPAddr", localIPaddr); diff --git a/procmgr/processmanager.h b/procmgr/processmanager.h index f1dd878ee..4339add26 100644 --- a/procmgr/processmanager.h +++ b/procmgr/processmanager.h @@ -79,6 +79,8 @@ namespace processmanager{ void startModuleThread(std::string moduleName); void stopModuleThread(std::string moduleName); void processMSG(messageqcpp::IOSocket* fIos); + void processAlarmMSG(messageqcpp::IOSocket* fIos); + void sendUpgradeRequest(); /** @brief Timeset for Milleseconds @@ -89,16 +91,16 @@ namespace processmanager{ { std::string ModuleName; //!< Module Name std::string ProcessName; //!< Process Name - int ID; //!< Heartbeat ID - bool receiveFlag; //!< Heartbeat indication flag - }; + int ID; //!< Heartbeat ID + bool receiveFlag; //!< Heartbeat indication flag + }; - typedef std::list HeartBeatProcList; + typedef std::list HeartBeatProcList; - typedef std::map srvStateList; + typedef std::map srvStateList; - const int MAX_ARGUMENTS = 10; - const std::string DEFAULT_LOG_FILE = "/var/log/mariadb/columnstore/ProcessManager.log"; + const int MAX_ARGUMENTS = 10; + const std::string DEFAULT_LOG_FILE = "/var/log/mariadb/columnstore/ProcessManager.log"; /** diff --git a/procmon/main.cpp b/procmon/main.cpp index 2f9cbce18..c1c4dd424 100644 --- a/procmon/main.cpp +++ b/procmon/main.cpp @@ -339,6 +339,7 @@ int main(int argc, char **argv) string IPaddr = (*pt1).IPAddr; sysConfig->setConfig("ProcMgr", "IPAddr", IPaddr); + sysConfig->setConfig("ProcMgr_Alarm", "IPAddr", IPaddr); log.writeLog(__LINE__, "set ProcMgr IPaddr to Old Standby Module: " + IPaddr, LOG_TYPE_DEBUG); //update Calpont Config table diff --git a/tools/configMgt/autoConfigure.cpp b/tools/configMgt/autoConfigure.cpp index 3e9ad5b34..1e7f98fdd 100755 --- a/tools/configMgt/autoConfigure.cpp +++ b/tools/configMgt/autoConfigure.cpp @@ -938,6 +938,7 @@ int main(int argc, char *argv[]) sysConfigNew->setConfig(parentProcessMonitor, "IPAddr", parentOAMModuleIPAddr); sysConfigNew->setConfig(parentProcessMonitor, "Port", "8800"); sysConfigNew->setConfig("ProcMgr", "IPAddr", parentOAMModuleIPAddr); + sysConfigNew->setConfig("ProcMgr_Alarm", "IPAddr", parentOAMModuleIPAddr); sysConfigNew->setConfig("ProcStatusControl", "IPAddr", parentOAMModuleIPAddr); string parentServerMonitor = systemParentOAMModuleName + "_ServerMonitor"; sysConfigNew->setConfig(parentServerMonitor, "IPAddr", parentOAMModuleIPAddr); From ee5abeedc9c8aca291237474027391d5c3bf5d97 Mon Sep 17 00:00:00 2001 From: david hill Date: Fri, 2 Feb 2018 09:41:00 -0600 Subject: [PATCH 07/23] MCOL-1185 MCOL-436 - make processing alarms single thread process --- oam/oamcpp/liboamcpp.h | 3 +- oamapps/alarmmanager/alarmglobal.h | 2 +- procmgr/main.cpp | 70 +++++++++++++++--- procmgr/processmanager.cpp | 110 ----------------------------- procmgr/processmanager.h | 1 - 5 files changed, 62 insertions(+), 124 deletions(-) diff --git a/oam/oamcpp/liboamcpp.h b/oam/oamcpp/liboamcpp.h index 68c6400c6..f23f73dbd 100644 --- a/oam/oamcpp/liboamcpp.h +++ b/oam/oamcpp/liboamcpp.h @@ -521,8 +521,7 @@ namespace oam ENABLEMYSQLREP, DISABLEMYSQLREP, GLUSTERASSIGN, - GLUSTERUNASSIGN, - PROCESSALARM + GLUSTERUNASSIGN }; /** @brief Process Management - Mgr to Mon request options diff --git a/oamapps/alarmmanager/alarmglobal.h b/oamapps/alarmmanager/alarmglobal.h index af01e149c..fd22d3d97 100644 --- a/oamapps/alarmmanager/alarmglobal.h +++ b/oamapps/alarmmanager/alarmglobal.h @@ -38,7 +38,7 @@ const std::string ACTIVE_ALARM_FILE = "/var/log/mariadb/columnstore/activeAlarms const std::string ALARM_FILE = "/var/log/mariadb/columnstore/alarm.log"; const std::string ALARM_ARCHIVE_FILE = "/var/log/mariadb/columnstore/archive"; -const bool ALARM_DEBUG = true; +const bool ALARM_DEBUG = false; const uint16_t INVALID_ALARM_ID = 0; } diff --git a/procmgr/main.cpp b/procmgr/main.cpp index ec90a1eeb..9fed1540f 100644 --- a/procmgr/main.cpp +++ b/procmgr/main.cpp @@ -493,7 +493,6 @@ static void messageThread(Configuration config) sleep(60); } } - return; } /****************************************************************************************** @@ -508,6 +507,8 @@ static void alarmMessageThread(Configuration config) ProcessManager processManager(config, log); Oam oam; + ByteStream msg; + //check for running active, then launch while(true) { @@ -525,8 +526,7 @@ static void alarmMessageThread(Configuration config) string cmd = "fuser -k " + port + "/tcp >/dev/null 2>&1"; if ( !rootUser) cmd = "sudo fuser -k " + port + "/tcp >/dev/null 2>&1"; - - + system(cmd.c_str()); } catch(...) @@ -549,15 +549,66 @@ static void alarmMessageThread(Configuration config) { fIos = procmgr.accept(); - pthread_t alarmMessagethread; - int status = pthread_create (&alarmMessagethread, NULL, (void*(*)(void*)) &processAlarmMSG, &fIos); + try{ + msg = fIos.read(); - if ( status != 0 ) - log.writeLog(__LINE__, "alarmmessagethread: pthread_create failed, return status = " + oam.itoa(status), LOG_TYPE_ERROR); + if (msg.length() <= 0) + continue; + + //log.writeLog(__LINE__, "MSG RECEIVED: Process Alarm Message"); + + ByteStream::byte alarmID; + std::string componentID; + ByteStream::byte state; + std::string ModuleName; + std::string processName; + ByteStream::byte pid; + ByteStream::byte tid; + + msg >> alarmID; + msg >> componentID; + msg >> state; + msg >> ModuleName; + msg >> processName; + msg >> pid; + msg >> tid; + + Alarm calAlarm; + + calAlarm.setAlarmID (alarmID); + calAlarm.setComponentID (componentID); + calAlarm.setState (state); + calAlarm.setSname (ModuleName); + calAlarm.setPname (processName); + calAlarm.setPid (pid); + calAlarm.setTid (tid); + + ALARMManager aManager; + aManager.processAlarmReport(calAlarm); + } + catch (exception& ex) + { + string error = ex.what(); + log.writeLog(__LINE__, "EXCEPTION ERROR on read for ProcMgr_Alarm:" + error, LOG_TYPE_ERROR); + continue; + } + catch(...) + { + log.writeLog(__LINE__, "EXCEPTION ERROR on read for ProcMgr_Alarm: Caught unknown exception!", LOG_TYPE_ERROR); + continue; + } + } + catch (exception& ex) + { + string error = ex.what(); + log.writeLog(__LINE__, "EXCEPTION ERROR on accept for ProcMgr_Alarm:" + error, LOG_TYPE_ERROR); + continue; } catch(...) - {} - + { + log.writeLog(__LINE__, "EXCEPTION ERROR on accept for ProcMgr_Alarm: Caught unknown exception!", LOG_TYPE_ERROR); + continue; + } } } catch (exception& ex) @@ -574,7 +625,6 @@ static void alarmMessageThread(Configuration config) sleep(1); } } - return; } /****************************************************************************************** diff --git a/procmgr/processmanager.cpp b/procmgr/processmanager.cpp index 24fc09f72..fdb3f76b1 100755 --- a/procmgr/processmanager.cpp +++ b/procmgr/processmanager.cpp @@ -301,79 +301,6 @@ ProcessManager::~ProcessManager() { } -/****************************************************************************************** -* @brief processAlarmMSG -* -* purpose: Process the Alarm message -* -******************************************************************************************/ -//void ProcessManager::processAlarmMSG( messageqcpp::IOSocket fIos, messageqcpp::ByteStream msg) -void processAlarmMSG(messageqcpp::IOSocket* cfIos) -{ - messageqcpp::IOSocket afIos = *cfIos; - - pthread_t ThreadId; - ThreadId = pthread_self(); - - ByteStream msg; - - try{ - msg = afIos.read(); - } - catch(...) - { - pthread_detach (ThreadId); - pthread_exit(0); - } - - if (msg.length() <= 0) { - afIos.close(); - pthread_detach (ThreadId); - pthread_exit(0); - } - - Oam oam; - ProcessLog log; - - Configuration config; - ProcessManager processManager(config, log); - - log.writeLog(__LINE__, "MSG RECEIVED: Process Alarm Message"); - - ByteStream::byte alarmID; - std::string componentID; - ByteStream::byte state; - std::string ModuleName; - std::string processName; - ByteStream::byte pid; - ByteStream::byte tid; - - msg >> alarmID; - msg >> componentID; - msg >> state; - msg >> ModuleName; - msg >> processName; - msg >> pid; - msg >> tid; - - Alarm calAlarm; - - calAlarm.setAlarmID (alarmID); - calAlarm.setComponentID (componentID); - calAlarm.setState (state); - calAlarm.setSname (ModuleName); - calAlarm.setPname (processName); - calAlarm.setPid (pid); - calAlarm.setTid (tid); - - ALARMManager aManager; - aManager.processAlarmReport(calAlarm); - - afIos.close(); - pthread_detach (ThreadId); - pthread_exit(0); -} - /****************************************************************************************** * @brief processMSG * @@ -2703,43 +2630,6 @@ void processMSG(messageqcpp::IOSocket* cfIos) break; } -/* case PROCESSALARM: - { - log.writeLog(__LINE__, "MSG RECEIVED: Process Alarm Message"); - - ByteStream::byte alarmID; - std::string componentID; - ByteStream::byte state; - std::string ModuleName; - std::string processName; - ByteStream::byte pid; - ByteStream::byte tid; - - msg >> alarmID; - msg >> componentID; - msg >> state; - msg >> ModuleName; - msg >> processName; - msg >> pid; - msg >> tid; - - Alarm calAlarm; - - calAlarm.setAlarmID (alarmID); - calAlarm.setComponentID (componentID); - calAlarm.setState (state); - calAlarm.setSname (ModuleName); - calAlarm.setPname (processName); - calAlarm.setPid (pid); - calAlarm.setTid (tid); - - ALARMManager aManager; - aManager.processAlarmReport(calAlarm); - - break; - } -*/ - default: log.writeLog(__LINE__, "MSG RECEIVED: Invalid type" ); break; diff --git a/procmgr/processmanager.h b/procmgr/processmanager.h index 4339add26..d60a9eaf2 100644 --- a/procmgr/processmanager.h +++ b/procmgr/processmanager.h @@ -79,7 +79,6 @@ namespace processmanager{ void startModuleThread(std::string moduleName); void stopModuleThread(std::string moduleName); void processMSG(messageqcpp::IOSocket* fIos); - void processAlarmMSG(messageqcpp::IOSocket* fIos); void sendUpgradeRequest(); From 30b4edb0cdf91bdd4783d3da04782b6e13bad2dd Mon Sep 17 00:00:00 2001 From: David Hall Date: Fri, 2 Feb 2018 15:30:12 -0600 Subject: [PATCH 08/23] MCOL-1178 Add bool processing to CASE --- utils/funcexp/func_case.cpp | 26 ++++++++++++++++++++++++++ utils/funcexp/functor_all.h | 10 ++++++++++ 2 files changed, 36 insertions(+) diff --git a/utils/funcexp/func_case.cpp b/utils/funcexp/func_case.cpp index fc82ae771..7cc033f85 100644 --- a/utils/funcexp/func_case.cpp +++ b/utils/funcexp/func_case.cpp @@ -343,6 +343,20 @@ CalpontSystemCatalog::ColType Func_simple_case::operationType(FunctionParm& fp, } +bool Func_simple_case::getBoolVal(Row& row, + FunctionParm& parm, + bool& isNull, + CalpontSystemCatalog::ColType& operationColType) +{ + uint64_t i = simple_case_cmp(row, parm, isNull, operationColType); + + if (isNull) + return joblist::BIGINTNULL; + + return parm[i+1]->data()->getBoolVal(row, isNull); +} + + int64_t Func_simple_case::getIntVal(Row& row, FunctionParm& parm, bool& isNull, @@ -446,6 +460,18 @@ CalpontSystemCatalog::ColType Func_searched_case::operationType(FunctionParm& fp return caseOperationType(fp, resultType, false); } +bool Func_searched_case::getBoolVal(Row& row, + FunctionParm& parm, + bool& isNull, + CalpontSystemCatalog::ColType&) +{ + uint64_t i = searched_case_cmp(row, parm, isNull); + + if (isNull) + return joblist::BIGINTNULL; + + return parm[i+1]->data()->getBoolVal(row, isNull); +} int64_t Func_searched_case::getIntVal(Row& row, FunctionParm& parm, diff --git a/utils/funcexp/functor_all.h b/utils/funcexp/functor_all.h index db7b8a491..84a951269 100644 --- a/utils/funcexp/functor_all.h +++ b/utils/funcexp/functor_all.h @@ -70,6 +70,11 @@ public: execplan::CalpontSystemCatalog::ColType operationType(FunctionParm& fp, execplan::CalpontSystemCatalog::ColType& resultType); + bool getBoolVal(rowgroup::Row& row, + FunctionParm& fp, + bool& isNull, + execplan::CalpontSystemCatalog::ColType& op_ct); + int64_t getIntVal(rowgroup::Row& row, FunctionParm& fp, bool& isNull, @@ -112,6 +117,11 @@ public: execplan::CalpontSystemCatalog::ColType operationType(FunctionParm& fp, execplan::CalpontSystemCatalog::ColType& resultType); + bool getBoolVal(rowgroup::Row& row, + FunctionParm& fp, + bool& isNull, + execplan::CalpontSystemCatalog::ColType& op_ct); + int64_t getIntVal(rowgroup::Row& row, FunctionParm& fp, bool& isNull, From b96124a60db782c9b3be0e97d4205a8e18074f54 Mon Sep 17 00:00:00 2001 From: david hill Date: Mon, 5 Feb 2018 14:36:16 -0600 Subject: [PATCH 09/23] MCOL-1184 - fixed non-root logrotate issue --- oam/install_scripts/columnstoreLogRotate | 14 ++++---------- oam/install_scripts/post-install | 8 -------- oam/install_scripts/syslogSetup.sh | 14 +++++++++----- oamapps/mcsadmin/mcsadmin.h | 2 +- 4 files changed, 14 insertions(+), 24 deletions(-) diff --git a/oam/install_scripts/columnstoreLogRotate b/oam/install_scripts/columnstoreLogRotate index efcf30fcf..8bb75ed6e 100644 --- a/oam/install_scripts/columnstoreLogRotate +++ b/oam/install_scripts/columnstoreLogRotate @@ -1,6 +1,6 @@ # -# MariaDb Columnstore Log Rotate file that gets installed in /etc/logrotate.d -# as part of the RPM installation +# MariaDB ColumnStore Log Rotate file that gets installed in /etc/logrotate.d +# as part of the package installation # /var/log/mariadb/columnstore/*.log { @@ -10,14 +10,7 @@ dateext copytruncate olddir /var/log/mariadb/columnstore/archive -} -/var/log/mariadb/columnstore/*.log1 { - missingok - rotate 7 - daily - nocreate - compress - olddir /var/log/mariadb/columnstore/archive + su root root } /usr/local/mariadb/columnstore/etc/Columnstore.xml { daily @@ -32,4 +25,5 @@ dateext copytruncate olddir /usr/local/mariadb/columnstore/mysql/db + su root root } diff --git a/oam/install_scripts/post-install b/oam/install_scripts/post-install index fc60e32e7..f458e3e42 100755 --- a/oam/install_scripts/post-install +++ b/oam/install_scripts/post-install @@ -230,10 +230,6 @@ if [ $user = "root" ]; then fi fi -#setup MariaDB Columnstore system logging -sed -i -e s/groupname/$user/g $installdir/bin/columnstoreSyslog7 -sed -i -e s/username/$user/g $installdir/bin/columnstoreSyslog7 - if [ $user = "root" ]; then $installdir/bin/syslogSetup.sh install > /tmp/syslog_install.log 2>&1 rm -f /etc/default/columnstore @@ -255,10 +251,6 @@ else $SUDO chmod 666 /etc/fstab fi -# install Columnstore Log Rotate File -$SUDO cp $installdir/bin/columnstoreLogRotate /etc/logrotate.d/columnstore > /dev/null 2>&1 -$SUDO chmod 644 /etc/logrotate.d/columnstore - #check if MariaDB Columnstore system logging was setup cat /tmp/syslog_install.log | grep 'No System Logging' >/dev/null 2>&1 if [ $? -eq 0 ]; then diff --git a/oam/install_scripts/syslogSetup.sh b/oam/install_scripts/syslogSetup.sh index 1e481a109..1f4235a30 100755 --- a/oam/install_scripts/syslogSetup.sh +++ b/oam/install_scripts/syslogSetup.sh @@ -166,17 +166,21 @@ if [ ! -z "$syslog_conf" ] ; then #set the syslog for ColumnStore logging # remove older version incase it was installed by previous build $SUDO rm -rf /etc/rsyslog.d/columnstore.conf + if [ $rsyslog7 == 1 ]; then + sed -i -e s/groupname/adm/g ${columnstoreSyslogFile7} + sed -i -e s/username/syslog/g ${columnstoreSyslogFile7} + $SUDO rm -f /etc/rsyslog.d/49-columnstore.conf $SUDO cp ${columnstoreSyslogFile7} ${syslog_conf} - else + else $SUDO cp ${columnstoreSyslogFile} ${syslog_conf} fi fi - - if [ $rsyslog7 == 1 ]; then - $SUDO chown -R syslog:adm /var/log/mariadb/columnstore >/dev/null 2>&1 - fi + + # install Columnstore Log Rotate File + $SUDO cp $installdir/bin/columnstoreLogRotate /etc/logrotate.d/columnstore > /dev/null 2>&1 + $SUDO chmod 644 /etc/logrotate.d/columnstore restartSyslog fi diff --git a/oamapps/mcsadmin/mcsadmin.h b/oamapps/mcsadmin/mcsadmin.h index 627f8c774..93c794571 100644 --- a/oamapps/mcsadmin/mcsadmin.h +++ b/oamapps/mcsadmin/mcsadmin.h @@ -58,7 +58,7 @@ const int ArgNum = 10; const int DescNumMax = 10; const int cmdNum = 68; -const std::string DEFAULT_LOG_FILE = "/var/log/mariadb/columnstore/uiCommands.log"; +const std::string DEFAULT_LOG_FILE = "/var/log/mariadb/columnstore/mcsadmin.log"; std::ofstream logFile; /** From c3e0a589fc69acd598b882af765f6b36c2c22d14 Mon Sep 17 00:00:00 2001 From: david hill Date: Mon, 5 Feb 2018 15:14:42 -0600 Subject: [PATCH 10/23] MCOL-927 - added mysql/lib to root library path file --- oam/install_scripts/columnstore.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oam/install_scripts/columnstore.conf b/oam/install_scripts/columnstore.conf index fb47efa80..e1b92ea84 100644 --- a/oam/install_scripts/columnstore.conf +++ b/oam/install_scripts/columnstore.conf @@ -1,2 +1,2 @@ /usr/local/mariadb/columnstore/lib - +/usr/local/mariadb/columnstore/mysql/lib \ No newline at end of file From 3fb5dde10de89494a5e621b7c080f62227e560bf Mon Sep 17 00:00:00 2001 From: david hill Date: Mon, 5 Feb 2018 18:07:59 -0600 Subject: [PATCH 11/23] add ProcStatusControl to postConfigure setup --- oamapps/postConfigure/postConfigure.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/oamapps/postConfigure/postConfigure.cpp b/oamapps/postConfigure/postConfigure.cpp index 50685ae39..25069c1ec 100644 --- a/oamapps/postConfigure/postConfigure.cpp +++ b/oamapps/postConfigure/postConfigure.cpp @@ -2030,6 +2030,7 @@ int main(int argc, char *argv[]) sysConfig->setConfig("ProcMgr", "IPAddr", parentOAMModuleIPAddr); sysConfig->setConfig("ProcHeartbeatControl", "IPAddr", parentOAMModuleIPAddr); sysConfig->setConfig("ProcMgr_Alarm", "IPAddr", parentOAMModuleIPAddr); + sysConfig->setConfig("ProcStatusControl", "IPAddr", parentOAMModuleIPAddr); string parentServerMonitor = parentOAMModuleName + "_ServerMonitor"; sysConfig->setConfig(parentServerMonitor, "IPAddr", parentOAMModuleIPAddr); string portName = parentOAMModuleName + "_WriteEngineServer"; From d4f4d7a3150b61e01ffe7af647a24d95b6839f73 Mon Sep 17 00:00:00 2001 From: david hill Date: Wed, 7 Feb 2018 14:45:17 -0600 Subject: [PATCH 12/23] MCOL-927 --- cpackEngineRPM.cmake | 2 +- oam/install_scripts/post-install | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/cpackEngineRPM.cmake b/cpackEngineRPM.cmake index 5c340adfc..3bb247dfa 100644 --- a/cpackEngineRPM.cmake +++ b/cpackEngineRPM.cmake @@ -87,7 +87,7 @@ IF (EXISTS "/etc/SuSE-release") set(SUSE_VERSION_NUMBER "${CMAKE_MATCH_1}") ENDIF () if (${REDHAT_VERSION_NUMBER} EQUAL 6) - SETA(CPACK_RPM_platform_PACKAGE_REQUIRES "expect" "mariadb-columnstore-libs" "snappy") + SETA(CPACK_RPM_platform_PACKAGE_REQUIRES "expect" "mariadb-columnstore-libs" "mariadb-columnstore-storage-engine "snappy") # Disable auto require as this will also try to pull Boost via RPM SET(CPACK_RPM_PACKAGE_AUTOREQPROV " no") elseif (${SUSE_VERSION_NUMBER} EQUAL 12) diff --git a/oam/install_scripts/post-install b/oam/install_scripts/post-install index fc60e32e7..585d1b8b0 100755 --- a/oam/install_scripts/post-install +++ b/oam/install_scripts/post-install @@ -276,8 +276,11 @@ fi #log install message test -f $installdir/post/functions && . $installdir/post/functions -LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$installdir/lib $installdir/bin/cplogger -i 19 "***** MariaDB Columnstore Installed *****" - +if [ $user = "root" ]; then + $installdir/bin/cplogger -i 19 "***** MariaDB Columnstore Installed *****" +else + LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$installdir/lib $installdir/bin/cplogger -i 19 "***** MariaDB Columnstore Installed *****" +fi #setup hadoop hadoop=`which hadoop 2>/dev/null` if [ -z "$hadoop" ]; then From 22723ad4689b8f481736a4a04eb1dbdacd5aef22 Mon Sep 17 00:00:00 2001 From: david hill Date: Wed, 7 Feb 2018 14:56:17 -0600 Subject: [PATCH 13/23] MCOL-927 --- build/postInstall_libs.sh | 1 - build/postInstall_platform.sh | 1 - build/postInstall_storage_engine.sh | 1 - cpackEngineRPM.cmake | 2 +- 4 files changed, 1 insertion(+), 4 deletions(-) diff --git a/build/postInstall_libs.sh b/build/postInstall_libs.sh index b4e8c04e4..6331d51f3 100644 --- a/build/postInstall_libs.sh +++ b/build/postInstall_libs.sh @@ -7,5 +7,4 @@ fi prefix=/usr/local -echo "MariaDB ColumnStore RPM install completed" diff --git a/build/postInstall_platform.sh b/build/postInstall_platform.sh index 78e7b0288..7f75fff0e 100644 --- a/build/postInstall_platform.sh +++ b/build/postInstall_platform.sh @@ -9,4 +9,3 @@ prefix=/usr/local test -x /usr/local/mariadb/columnstore/bin/post-install && /usr/local/mariadb/columnstore/bin/post-install --prefix=$prefix --rpmmode=$rpmmode -echo "MariaDB ColumnStore RPM install completed" diff --git a/build/postInstall_storage_engine.sh b/build/postInstall_storage_engine.sh index 3c346b537..3e88e4922 100644 --- a/build/postInstall_storage_engine.sh +++ b/build/postInstall_storage_engine.sh @@ -7,6 +7,5 @@ fi prefix=/usr/local -echo "MariaDB ColumnStore RPM install completed" diff --git a/cpackEngineRPM.cmake b/cpackEngineRPM.cmake index 3bb247dfa..943834627 100644 --- a/cpackEngineRPM.cmake +++ b/cpackEngineRPM.cmake @@ -87,7 +87,7 @@ IF (EXISTS "/etc/SuSE-release") set(SUSE_VERSION_NUMBER "${CMAKE_MATCH_1}") ENDIF () if (${REDHAT_VERSION_NUMBER} EQUAL 6) - SETA(CPACK_RPM_platform_PACKAGE_REQUIRES "expect" "mariadb-columnstore-libs" "mariadb-columnstore-storage-engine "snappy") + SETA(CPACK_RPM_platform_PACKAGE_REQUIRES "expect" "mariadb-columnstore-libs" "mariadb-columnstore-shared" "snappy") # Disable auto require as this will also try to pull Boost via RPM SET(CPACK_RPM_PACKAGE_AUTOREQPROV " no") elseif (${SUSE_VERSION_NUMBER} EQUAL 12) From ad3bda8532d8b2709892a613c96fa94cfc282242 Mon Sep 17 00:00:00 2001 From: Ben Thompson Date: Thu, 8 Feb 2018 16:43:27 -0600 Subject: [PATCH 14/23] MCOL-1194: Add back releasenum file to installations. --- CMakeLists.txt | 3 +++ cpackEngineRPM.cmake | 1 + 2 files changed, 4 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 62ff05455..0f1d2b646 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,6 +77,9 @@ ENDIF("${isSystemDir}" STREQUAL "-1") INCLUDE (configureEngine.cmake) +# releasenum is used by external scripts for various tasks. Leave it alone. +CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/build/releasenum.in ${CMAKE_CURRENT_BINARY_DIR}/build/releasenum IMMEDIATE) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/build/releasenum DESTINATION ${INSTALL_ENGINE} COMPONENT platform) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/columnstoreversion.h.in ${CMAKE_CURRENT_SOURCE_DIR}/columnstoreversion.h) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) diff --git a/cpackEngineRPM.cmake b/cpackEngineRPM.cmake index 943834627..be5df3462 100644 --- a/cpackEngineRPM.cmake +++ b/cpackEngineRPM.cmake @@ -188,6 +188,7 @@ SET(CPACK_RPM_platform_USER_FILELIST "/usr/local/mariadb/columnstore/etc/MessageFile.txt" "/usr/local/mariadb/columnstore/etc/ErrorMessage.txt" "/usr/local/mariadb/columnstore/local/module" +"/usr/local/mariadb/columnstore/releasenum" "/usr/local/mariadb/columnstore/bin/rollback" "/usr/local/mariadb/columnstore/bin/editem" "/usr/local/mariadb/columnstore/bin/getConfig" From c6e2a952f00e8e3a021b7aac4c8e244d717b9c5b Mon Sep 17 00:00:00 2001 From: Andrew Hutchings Date: Fri, 9 Feb 2018 09:45:49 +0000 Subject: [PATCH 15/23] MCOL-1210 Allow procs to be called from any schema The columnstore_info procs could only be called from within columnstore_info due to them assuming format_filesize() is local. This patch calls format_filesize() with an explicit schema allowing it to work correctly. --- dbcon/mysql/columnstore_info.sql | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dbcon/mysql/columnstore_info.sql b/dbcon/mysql/columnstore_info.sql index 691ea754d..80b0f12b1 100644 --- a/dbcon/mysql/columnstore_info.sql +++ b/dbcon/mysql/columnstore_info.sql @@ -28,8 +28,8 @@ DROP PROCEDURE IF EXISTS `total_usage` // CREATE PROCEDURE total_usage () BEGIN SELECT - (SELECT format_filesize(sum(data_size)) TOTAL_DATA_SIZE FROM INFORMATION_SCHEMA.COLUMNSTORE_EXTENTS) TOTAL_DATA_SIZE, - (SELECT format_filesize(sum(file_size)) TOTAL_DISK_USAGE FROM INFORMATION_SCHEMA.COLUMNSTORE_FILES) TOTAL_DISK_USAGE; + (SELECT columnstore_info.format_filesize(sum(data_size)) TOTAL_DATA_SIZE FROM INFORMATION_SCHEMA.COLUMNSTORE_EXTENTS) TOTAL_DATA_SIZE, + (SELECT columnstore_info.format_filesize(sum(file_size)) TOTAL_DISK_USAGE FROM INFORMATION_SCHEMA.COLUMNSTORE_FILES) TOTAL_DISK_USAGE; END // DROP PROCEDURE IF EXISTS `table_usage` // @@ -52,21 +52,21 @@ CREATE PROCEDURE table_usage (IN t_schema char(64), IN t_name char(64)) CREATE TABLE columnstore_info.columnstore_files engine=myisam as (select * from information_schema.columnstore_files); ALTER TABLE columnstore_info.columnstore_files ADD INDEX `object_id` (`object_id`); IF t_name IS NOT NULL THEN -SELECT TABLE_SCHEMA, TABLE_NAME, format_filesize(data) as DATA_DISK_USAGE, format_filesize(dict) as DICT_DISK_USAGE, format_filesize(data + dict) as TOTAL_USAGE FROM ( +SELECT TABLE_SCHEMA, TABLE_NAME, columnstore_info.format_filesize(data) as DATA_DISK_USAGE, columnstore_info.format_filesize(dict) as DICT_DISK_USAGE, columnstore_info.format_filesize(data + dict) as TOTAL_USAGE FROM ( SELECT TABLE_SCHEMA, TABLE_NAME, (SELECT sum(cf.file_size) as data FROM columnstore_info.columnstore_columns cc JOIN columnstore_info.columnstore_files cf ON cc.object_id = cf.object_id WHERE table_name = ics.table_name and table_schema = ics.table_schema) as data, (SELECT sum(cf.file_size) as dict FROM columnstore_info.columnstore_columns cc JOIN columnstore_info.columnstore_files cf ON cc.dictionary_object_id = cf.object_id WHERE table_name = ics.table_name and table_schema = ics.table_schema GROUP BY table_schema, table_name) as dict FROM columnstore_info.columnstore_columns ics where table_name = t_name and (table_schema = t_schema or t_schema IS NULL) group by table_schema, table_name ) q; ELSEIF t_schema IS NOT NULL THEN -SELECT TABLE_SCHEMA, TABLE_NAME, format_filesize(data) as DATA_DISK_USAGE, format_filesize(dict) as DICT_DISK_USAGE, format_filesize(data + dict) as TOTAL_USAGE FROM ( +SELECT TABLE_SCHEMA, TABLE_NAME, columnstore_info.format_filesize(data) as DATA_DISK_USAGE, columnstore_info.format_filesize(dict) as DICT_DISK_USAGE, columnstore_info.format_filesize(data + dict) as TOTAL_USAGE FROM ( SELECT TABLE_SCHEMA, TABLE_NAME, (SELECT sum(cf.file_size) as data FROM columnstore_info.columnstore_columns cc JOIN columnstore_info.columnstore_files cf ON cc.object_id = cf.object_id WHERE table_name = ics.table_name and table_schema = ics.table_schema) as data, (SELECT sum(cf.file_size) as dict FROM columnstore_info.columnstore_columns cc JOIN columnstore_info.columnstore_files cf ON cc.dictionary_object_id = cf.object_id WHERE table_name = ics.table_name and table_schema = ics.table_schema GROUP BY table_schema, table_name) as dict FROM columnstore_info.columnstore_columns ics where table_schema = t_schema group by table_schema, table_name ) q; ELSE -SELECT TABLE_SCHEMA, TABLE_NAME, format_filesize(data) as DATA_DISK_USAGE, format_filesize(dict) as DICT_DISK_USAGE, format_filesize(data + dict) as TOTAL_USAGE FROM ( +SELECT TABLE_SCHEMA, TABLE_NAME, columnstore_info.format_filesize(data) as DATA_DISK_USAGE, columnstore_info.format_filesize(dict) as DICT_DISK_USAGE, columnstore_info.format_filesize(data + dict) as TOTAL_USAGE FROM ( SELECT TABLE_SCHEMA, TABLE_NAME, (SELECT sum(cf.file_size) as data FROM columnstore_info.columnstore_columns cc JOIN columnstore_info.columnstore_files cf ON cc.object_id = cf.object_id WHERE table_name = ics.table_name and table_schema = ics.table_schema) as data, (SELECT sum(cf.file_size) as dict FROM columnstore_info.columnstore_columns cc JOIN columnstore_info.columnstore_files cf ON cc.dictionary_object_id = cf.object_id WHERE table_name = ics.table_name and table_schema = ics.table_schema GROUP BY table_schema, table_name) as dict FROM columnstore_info.columnstore_columns ics From 9cb9934b53611d4d677b395e90e0ce29d311a12c Mon Sep 17 00:00:00 2001 From: david hill Date: Mon, 12 Feb 2018 13:51:06 -0600 Subject: [PATCH 16/23] MCOL-1190 - code fix, mysql not being monitored on seperate um/pm systems currectly --- procmon/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/procmon/main.cpp b/procmon/main.cpp index c1c4dd424..b010b3d74 100644 --- a/procmon/main.cpp +++ b/procmon/main.cpp @@ -696,7 +696,7 @@ int main(int argc, char **argv) log.writeLog(__LINE__, "pthread_create failed, return code = " + oam.itoa(ret), LOG_TYPE_ERROR); //mysql status monitor thread - if ( ( config.ServerInstallType() == oam::INSTALL_COMBINE_DM_UM_PM ) || + if ( ( config.ServerInstallType() != oam::INSTALL_COMBINE_DM_UM_PM ) || (PMwithUM == "y") ) { From 24f12dcf5828ee7ac0d18d4cbb1c6ed83ae500ae Mon Sep 17 00:00:00 2001 From: Andrew Hutchings Date: Mon, 12 Feb 2018 23:17:41 +0000 Subject: [PATCH 17/23] Fix sig handler for ExeMgr A bad merge for in MCOL-1085 means that ExeMgr is missing the crash handler. This adds it. --- exemgr/main.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/exemgr/main.cpp b/exemgr/main.cpp index b8def9813..8106afb73 100644 --- a/exemgr/main.cpp +++ b/exemgr/main.cpp @@ -1168,10 +1168,12 @@ public: } }; +#ifdef _MSC_VER void exit_(int) { exit(0); } +#endif void added_a_pm(int) { @@ -1216,7 +1218,6 @@ void printTotalUmMemory(int sig) void setupSignalHandlers() { #ifdef _MSC_VER - signal(SIGSEGV, exit_); signal(SIGINT, exit_); signal(SIGTERM, exit_); #else @@ -1232,6 +1233,11 @@ void setupSignalHandlers() sigaction(SIGHUP, &ign, 0); ign.sa_handler = printTotalUmMemory; sigaction(SIGUSR1, &ign, 0); + memset(&ign, 0, sizeof(ign)); + ign.sa_handler = fatalHandler; + sigaction(SIGSEGV, &ign, 0); + sigaction(SIGABRT, &ign, 0); + sigaction(SIGFPE, &ign, 0); #endif } @@ -1305,6 +1311,9 @@ int main(int argc, char* argv[]) string systemLang = "C"; systemLang = funcexp::utf8::idb_setlocale(); + // This is unset due to the way we start it + program_invocation_short_name = const_cast("ExeMgr"); + gDebug = 0; bool eFlg = false; int c; From e03d75feb6811badb6a8a805e245f2359c104588 Mon Sep 17 00:00:00 2001 From: David Hall Date: Wed, 14 Feb 2018 10:02:50 -0600 Subject: [PATCH 18/23] MCOL-1212 Diuring abort, ensure that all normal threads are complete before running abort threads. Otherwise, they clash. --- dbcon/joblist/joblist.cpp | 4 +++ dbcon/joblist/tupleaggregatestep.cpp | 45 ++++++---------------------- dbcon/joblist/tupleaggregatestep.h | 2 -- 3 files changed, 13 insertions(+), 38 deletions(-) diff --git a/dbcon/joblist/joblist.cpp b/dbcon/joblist/joblist.cpp index e5eb86b26..934dae71d 100644 --- a/dbcon/joblist/joblist.cpp +++ b/dbcon/joblist/joblist.cpp @@ -1067,6 +1067,10 @@ void JobList::abort() fQuery[i]->abort(); for (i = 0; i < fProject.size(); i++) fProject[i]->abort(); + for (i = 0; i < fQuery.size(); i++) + fQuery[i]->join(); + for (i = 0; i < fProject.size(); i++) + fProject[i]->join(); } } diff --git a/dbcon/joblist/tupleaggregatestep.cpp b/dbcon/joblist/tupleaggregatestep.cpp index bc7f6326b..b5cde967b 100755 --- a/dbcon/joblist/tupleaggregatestep.cpp +++ b/dbcon/joblist/tupleaggregatestep.cpp @@ -4691,21 +4691,6 @@ void TupleAggregateStep::threadedAggregateRowGroups(uint32_t threadID) if (more) { - // Trying out a ramp-up strategy for starting the - // first phase threads to cut overhead on big systems - // processing small result - // sets. On every non-zero read from the input FIFO, - // and if there is more data to read, the - // first thread will start another thread until the - // maximum number is reached. -#if 0 - if (threadID == 0 && fFirstPhaseThreadCount < fNumOfThreads && - dlIn->more(fInputIter)) - { - fFirstPhaseRunners.push_back(jobstepThreadPool.invoke(ThreadedAggregator(this, fFirstPhaseThreadCount))); - fFirstPhaseThreadCount++; - } -#endif fRowGroupIns[threadID].setData(&rgData); fMemUsage[threadID] += fRowGroupIns[threadID].getSizeWithStrings(); if (!fRm->getMemory(fRowGroupIns[threadID].getSizeWithStrings(), fSessionMemLimit)) @@ -4971,28 +4956,16 @@ uint64_t TupleAggregateStep::doThreadedAggregate(ByteStream& bs, RowGroupDL* dlp { initializeMultiThread(); -// This block of code starts all threads at the start - fFirstPhaseThreadCount = fNumOfThreads; - fFirstPhaseRunners.clear(); - fFirstPhaseRunners.reserve(fNumOfThreads); // to prevent a resize during use - for (i = 0; i < fNumOfThreads; i++) - { - fFirstPhaseRunners.push_back(jobstepThreadPool.invoke(ThreadedAggregator(this, i))); - } + vector runners; // thread pool handles + runners.reserve(fNumOfThreads); // to prevent a resize during use + // Start the aggregator threads + for (i = 0; i < fNumOfThreads; i++) + { + runners.push_back(jobstepThreadPool.invoke(ThreadedAggregator(this, i))); + } -#if 0 -// This block of code starts one thread, relies on doThreadedAggregation() -// For reasons unknown, this doesn't work right with threadpool -// to start more as needed - fFirstPhaseRunners.clear(); - fFirstPhaseRunners.reserve(fNumOfThreads); // to prevent a resize during use - fFirstPhaseThreadCount = 1; - fFirstPhaseRunners.push_back(jobstepThreadPool.invoke(ThreadedAggregator(this, 0))); -#endif - - // Now wait for that thread plus all the threads it may have spawned - jobstepThreadPool.join(fFirstPhaseRunners); - fFirstPhaseRunners.clear(); + // Now wait for all those threads + jobstepThreadPool.join(runners); } if (dynamic_cast(fAggregator.get()) && fAggregator->aggMapKeyLength() > 0) diff --git a/dbcon/joblist/tupleaggregatestep.h b/dbcon/joblist/tupleaggregatestep.h index 0839e8263..58b84a129 100644 --- a/dbcon/joblist/tupleaggregatestep.h +++ b/dbcon/joblist/tupleaggregatestep.h @@ -186,8 +186,6 @@ private: bool fIsMultiThread; int fInputIter; // iterator boost::scoped_array fMemUsage; - std::vector fFirstPhaseRunners; // thread pool handles - uint32_t fFirstPhaseThreadCount; boost::shared_ptr fSessionMemLimit; }; From 54dea02f2a967088d8a2b408d2fb8a6259ef11d2 Mon Sep 17 00:00:00 2001 From: Andrew Hutchings Date: Wed, 14 Feb 2018 16:43:19 +0000 Subject: [PATCH 19/23] Fix view alias regression An unneeded change from the fix for MCOL-1070 that broke vTpch01b.sql --- dbcon/mysql/ha_calpont_execplan.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/dbcon/mysql/ha_calpont_execplan.cpp b/dbcon/mysql/ha_calpont_execplan.cpp index f07bc624b..6cb25c269 100755 --- a/dbcon/mysql/ha_calpont_execplan.cpp +++ b/dbcon/mysql/ha_calpont_execplan.cpp @@ -1810,11 +1810,6 @@ SimpleColumn* buildSimpleColFromDerivedTable(gp_walk_info& gwi, Item_field* ifp) { sc->derivedTable(derivedName); sc->derivedRefCol(cols[j].get()); - if (tblList->belong_to_view) - { - sc->viewName(lower(tblList->belong_to_view->alias)); - } - } break; } From f2a5997860dc368d203202065915bb81a11ab79f Mon Sep 17 00:00:00 2001 From: builder Date: Fri, 16 Feb 2018 15:05:30 -0600 Subject: [PATCH 20/23] fixed multi-node install with deb packages --- oamapps/postConfigure/postConfigure.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oamapps/postConfigure/postConfigure.cpp b/oamapps/postConfigure/postConfigure.cpp index 25069c1ec..4225195de 100644 --- a/oamapps/postConfigure/postConfigure.cpp +++ b/oamapps/postConfigure/postConfigure.cpp @@ -2834,7 +2834,7 @@ int main(int argc, char *argv[]) columnstorePackage = HOME + "/" + "mariadb-columnstore-" + version + "*.rpm"; else if ( EEPackageType == "deb") - columnstorePackage = HOME + "/" + "mariadb-columnstore-" + version + "*.deb"; + columnstorePackage = HOME + "/" + "mariadb-columnstore-*" + systemsoftware.Version + "*.deb"; else columnstorePackage = HOME + "/" + "mariadb-columnstore-" + version + "*.bin.tar.gz"; From aeeed7a869c7b27abc5682cc8a4d118c8498502a Mon Sep 17 00:00:00 2001 From: david hill Date: Thu, 22 Feb 2018 10:02:19 -0600 Subject: [PATCH 21/23] bump to 1.1.4 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index f370899f3..445a70a7a 100644 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ COLUMNSTORE_VERSION_MAJOR=1 COLUMNSTORE_VERSION_MINOR=1 -COLUMNSTORE_VERSION_PATCH=3 +COLUMNSTORE_VERSION_PATCH=4 COLUMNSTORE_VERSION_RELEASE=1 From 2b1f93e7f4b6934b86a80472b224a613f6fd5698 Mon Sep 17 00:00:00 2001 From: david hill Date: Thu, 22 Feb 2018 10:08:39 -0600 Subject: [PATCH 22/23] bump release to 1.1.4 --- README | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README b/README index 69fff339d..21bce2dd9 100644 --- a/README +++ b/README @@ -1,9 +1,9 @@ -This is MariaDB ColumnStore 1.1.3 GA -MariaDB ColumnStore 1.1.3 GA is the development version of MariaDB ColumnStore. +This is MariaDB ColumnStore 1.1.4 GA +MariaDB ColumnStore 1.1.4 GA is the development version of MariaDB ColumnStore. It is built by porting InfiniDB 4.6.7 on MariaDB 10.2 and adding entirely new features not found anywhere else. -MariaDB ColumnStore 1.1.3 is a GA release. This is the first MariaDB +MariaDB ColumnStore 1.1.4 is a GA release. This is the first MariaDB ColumnStore release, not all features planned for the MariaDB ColumnStore 1.0 series are included in this release. From aefb8a19667155a616318f4c93d0a8a507986d40 Mon Sep 17 00:00:00 2001 From: david hill Date: Thu, 22 Feb 2018 10:09:33 -0600 Subject: [PATCH 23/23] bump release to 1.1.4 --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index cf83245c7..bd3717aab 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ -#MariaDB ColumnStore Storage/Execution engine 1.1.3 GA -MariaDB ColumnStore 1.1.3 GA is the development version of MariaDB ColumnStore. +#MariaDB ColumnStore Storage/Execution engine 1.1.4 GA +MariaDB ColumnStore 1.1.4 GA is the development version of MariaDB ColumnStore. It is built by porting InfiniDB 4.6.7 on MariaDB 10.2.9 and adding entirely new features not found anywhere else. -#MariaDB ColumnStore 1.1.3 is an GA release. +#MariaDB ColumnStore 1.1.4 is an GA release. #Building This repository is not meant to be built independently outside of the server. This repository is integrated into http://mariadb-corporation/mariadb-columnstore-server (ie, the *server*) as a git submodule. As such, you can find complete build instructions on *the server* page.