From: Jonas Oreland Date: February 20 2012 9:06pm Subject: bzr push into mysql-5.1-telco-7.0 branch (jonas.oreland:4865 to 4867) List-Archive: http://lists.mysql.com/commits/142987 Message-Id: <20120220210640.2D0EB55C26D@perch.localdomain> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 4867 Jonas Oreland 2012-02-20 ndb - 1) handle changed install path (5.1 vs 5.5) 2) handle 5.5 lack of rpath + changed install path of libs => need to rewrite LD_LIBRARY_PATH during 5.1 => 5.5 upgrade modified: storage/ndb/test/run-test/command.cpp 4866 Jonas Oreland 2012-02-20 ndb - add start-index to BaseString::indexOf() - unfortunatly needed to make atrt handle 5.1 to 5.5 upgrade modified: storage/ndb/include/util/BaseString.hpp storage/ndb/src/common/util/BaseString.cpp 4865 Jonas Oreland 2012-02-20 ndb - bug-13618181 - bug in latest patch, cause random and rare signal 11 modified: storage/ndb/src/kernel/vm/mt.cpp === modified file 'storage/ndb/include/util/BaseString.hpp' --- a/storage/ndb/include/util/BaseString.hpp 2011-06-30 15:59:25 +0000 +++ b/storage/ndb/include/util/BaseString.hpp 2012-02-20 21:01:57 +0000 @@ -133,9 +133,19 @@ public: * Returns the index of the first occurance of the character c. * * @params c character to look for + * @params pos position to start searching from * @returns index of character, of -1 if no character found */ - ssize_t indexOf(char c) const; + ssize_t indexOf(char c, size_t pos = 0) const; + + /** + * Returns the index of the first occurance of the string needle + * + * @params needle string to search for + * @params pos position to start searching from + * @returns index of character, of -1 if no character found + */ + ssize_t indexOf(const char * needle, size_t pos = 0) const; /** * Returns the index of the last occurance of the character c. === modified file 'storage/ndb/src/common/util/BaseString.cpp' --- a/storage/ndb/src/common/util/BaseString.cpp 2011-10-21 08:59:23 +0000 +++ b/storage/ndb/src/common/util/BaseString.cpp 2012-02-20 21:01:57 +0000 @@ -297,9 +297,24 @@ BaseString::split(Vector &v, } ssize_t -BaseString::indexOf(char c) const { - char *p; - p = strchr(m_chr, c); +BaseString::indexOf(char c, size_t pos) const { + + if (pos >= m_len) + return -1; + + char *p = strchr(m_chr + pos, c); + if(p == NULL) + return -1; + return (ssize_t)(p-m_chr); +} + +ssize_t +BaseString::indexOf(const char * needle, size_t pos) const { + + if (pos >= m_len) + return -1; + + char *p = strstr(m_chr + pos, needle); if(p == NULL) return -1; return (ssize_t)(p-m_chr); === modified file 'storage/ndb/test/run-test/command.cpp' --- a/storage/ndb/test/run-test/command.cpp 2012-02-17 13:41:01 +0000 +++ b/storage/ndb/test/run-test/command.cpp 2012-02-20 21:05:06 +0000 @@ -102,6 +102,24 @@ set_env_var(const BaseString& existing, return newEnv; } +static +char * +dirname(const char * path) +{ + char * s = strdup(path); + size_t len = strlen(s); + for (size_t i = 1; i g_saved_procs; @@ -163,7 +181,7 @@ do_change_version(atrt_config& config, S BaseString(new_prefix)); proc.m_proc.m_env.assign(newEnv); - ssize_t pos = proc.m_proc.m_path.lastIndexOf('/'); + ssize_t pos = proc.m_proc.m_path.lastIndexOf('/') + 1; BaseString exename(proc.m_proc.m_path.substr(pos)); char * exe = find_bin_path(new_prefix, exename.c_str()); proc.m_proc.m_path = exe; @@ -178,6 +196,33 @@ do_change_version(atrt_config& config, S proc.m_proc.m_args.append(process_args); } + { + /** + * In 5.5...binaries aren't compiled with rpath + * So we need an explicit LD_LIBRARY_PATH + * So when upgrading..we need to change LD_LIBRARY_PATH + * So I hate 5.5... + */ + ssize_t p0 = proc.m_proc.m_env.indexOf(" LD_LIBRARY_PATH="); + ssize_t p1 = proc.m_proc.m_env.indexOf(' ', p0 + 1); + + BaseString part0 = proc.m_proc.m_env.substr(0, p0); + BaseString part1 = proc.m_proc.m_env.substr(p1); + + proc.m_proc.m_env.assfmt("%s%s", + part0.c_str(), + part1.c_str()); + + BaseString lib(g_libmysqlclient_so_path); + ssize_t pos = lib.lastIndexOf('/') + 1; + BaseString libname(lib.substr(pos)); + char * exe = find_bin_path(new_prefix, libname.c_str()); + char * dir = dirname(exe); + proc.m_proc.m_env.appfmt(" LD_LIBRARY_PATH=%s", dir); + free(exe); + free(dir); + } + ndbout << proc << endl; g_logger.info("starting process..."); No bundle (reason: useless for push emails).