#At file:///home/msvensson/mysql/6.4-wl4350/ based on revid:msvensson@stripped
3167 Magnus Svensson 2008-12-16
WL#4350 Add detection of previously failed config change
modified:
storage/ndb/src/mgmsrv/ConfigManager.cpp
storage/ndb/src/mgmsrv/ConfigManager.hpp
=== modified file 'storage/ndb/src/mgmsrv/ConfigManager.cpp'
--- a/storage/ndb/src/mgmsrv/ConfigManager.cpp 2008-12-16 14:30:25 +0000
+++ b/storage/ndb/src/mgmsrv/ConfigManager.cpp 2008-12-16 15:53:28 +0000
@@ -324,6 +324,9 @@ ConfigManager::init(void)
if (m_opts.initial && !delete_saved_configs())
DBUG_RETURN(false);
+ if (failed_config_change_exists())
+ DBUG_RETURN(false);
+
BaseString config_bin_name;
if (saved_config_exists(config_bin_name))
{
@@ -1691,8 +1694,8 @@ ConfigManager::delete_saved_configs(void
const char* name;
unsigned nodeid;
char extra; // Avoid matching ndb_2_config.bin.2.tmp
- unsigned version, max_version= 0;
BaseString full_name;
+ unsigned version;
while ((name= iter.next_file()) != NULL)
{
if (sscanf(name,
@@ -1758,6 +1761,47 @@ ConfigManager::saved_config_exists(BaseS
}
+
+bool
+ConfigManager::failed_config_change_exists() const
+{
+ DirIterator iter;
+
+ if (iter.open(m_configdir) != 0)
+ return false;
+
+ const char* name;
+ char tmp;
+ unsigned nodeid;
+ unsigned version;
+ while ((name= iter.next_file()) != NULL)
+ {
+ // Check for a previously failed config
+ // change, ie. ndb_<nodeid>_config.bin.X.tmp exist
+ if (sscanf(name,
+ "ndb_%u_config.bin.%u.tm%c",
+ &nodeid, &version, &tmp) == 3 &&
+ tmp == 'p')
+ {
+ if (nodeid != m_node_id)
+ continue;
+
+ g_eventLogger->error("Found binary configuration file '%s%s%s' from "
+ "previous failed attempt to change config. This "
+ "error must be manually resolved by removing the "
+ "file(ie. ROLLBACK) or renaming the file to it's "
+ "name without the .tmp extension(ie COMMIT). Make "
+ "sure to check the other nodes so that they all "
+ "have the same configuration generation.",
+ m_configdir, DIR_SEPARATOR, name);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+
Config*
ConfigManager::load_saved_config(const BaseString& config_name)
{
=== modified file 'storage/ndb/src/mgmsrv/ConfigManager.hpp'
--- a/storage/ndb/src/mgmsrv/ConfigManager.hpp 2008-12-16 14:30:25 +0000
+++ b/storage/ndb/src/mgmsrv/ConfigManager.hpp 2008-12-16 15:53:28 +0000
@@ -80,6 +80,7 @@ class ConfigManager : public MgmtThread
bool save_config(void);
bool saved_config_exists(BaseString& config_name) const;
bool delete_saved_configs(void) const;
+ bool failed_config_change_exists(void) const;
Config* load_saved_config(const BaseString& config_name);
NodeId find_nodeid_from_configdir(void);
NodeId find_nodeid_from_config(void);
| Thread |
|---|
| • bzr commit into mysql-5.1 branch (msvensson:3167) WL#4350 | Magnus Svensson | 16 Dec |