List:Commits« Previous MessageNext Message »
From:Magnus Svensson Date:December 16 2008 3:53pm
Subject:bzr commit into mysql-5.1 branch (msvensson:3167) WL#4350
View as plain text  
#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#4350Magnus Svensson16 Dec