Bug #55515 Default values for InitLogFileGroup cause error 2350: 'Invalid configuration'
Submitted: 23 Jul 2010 15:16 Modified: 26 May 2014 18:09
Reporter: Matthew Montgomery Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Cluster: Disk Data Severity:S3 (Non-critical)
Version:mysql-5.1-telco-7.1 OS:Any
Assigned to: CPU Architecture:Any
Tags: ndb-7.1.6

[23 Jul 2010 15:16] Matthew Montgomery
Description:
Using:

[NDBD DEFAULT]
NoOfReplicas=2
Datadir=/data/mysql/sandbox/7.1.6/mysql-cluster

InitialLogFileGroup=undo.log:250M
InitialTablespace=data1.dat:250M

Gives: 

Time: Thursday 22 July 2010 - 21:29:15
Status: Permanent error, external action needed
Message: Invalid configuration received from Management Server (Configuration error)
Error: 2350
Error data: Failed to commit schema trans, err: 1504
Error object: NDBCNTR (Line: 2232) 0x00000002
Program: ndbd
Pid: 1247
Version: mysql-5.1.47 ndb-7.1.6
Trace: /data/mysql/sandbox/7.1.6/mysql-cluster/ndb_5_trace.log.2
***EOM***

NDB error code 1504: Out of logbuffer memory: Permanent error: Schema error

How to repeat:
See attached ndb_error_report_20100722213527.tar.bz2 file.

Setting undo_buffer_size to a maximum 16M allows startup.
[23 Jul 2010 15:22] MySQL Verification Team
The default undo_buffer_size used by InitialLogFileGroup is greater than default SharedGlobalMemory.  This results in the crash.
[23 Jul 2010 16:08] Andrew Hutchings
This is to be expected.  But the error message should probably state that we do not have enough SharedGlobalMemory for the undo buffer and the default undo buffer should probably be lower (or I guess SharedGlobalMemory higher?).
[26 Jul 2010 20:48] Hartmut Holzgraefe
Also weird that CREATE LOG GROUP and InitLogFileGroup use different default values for UNDO BUFFER SIZE ...
[5 Aug 2010 21:02] Hartmut Holzgraefe
See also Bug #53106 for the misleading error messages when undo buffer is larger than SharedGlobalMemory" ...
[6 Aug 2010 14:01] Hartmut Holzgraefe
Proposed patch for now: 

change default to be in sync with CREATE LOGFILE GROUP
and have warning comments telling about the other default
instance

in the long run a solution that would only require
defaults to be defined in a single place would be
better though

=== modified file 'sql/handler.h'
--- sql/handler.h	2010-06-16 20:49:05 +0000
+++ sql/handler.h	2010-08-06 13:49:35 +0000
@@ -531,8 +531,14 @@
     data_file_name= NULL;
     undo_file_name= NULL;
     redo_file_name= NULL;
+
+    /* changes to the following two parameters also need to be done
+       in storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp
+       in the parse_spec() function 
+    */   
     extent_size= 1024*1024;        //Default 1 MByte
     undo_buffer_size= 8*1024*1024; //Default 8 MByte
+
     redo_buffer_size= 8*1024*1024; //Default 8 MByte
     initial_size= 128*1024*1024;   //Default 128 MByte
     autoextend_size= 0;            //No autoextension as default

=== modified file 'storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp'
--- storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp	2010-06-24 21:42:03 +0000
+++ storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp	2010-08-06 13:54:43 +0000
@@ -337,7 +337,10 @@
   if (type == DictTabInfo::LogfileGroup)
   {
     key = "undo_buffer_size=";
-    group.size = 64*1024*1024;
+    /* group size must be the same value as the default for
+       undo_buffer_size in the st_alter_tablespace class 
+       constructor in sql/handler.h */
+    group.size = 8*1024*1024; 
     group.name = "DEFAULT-LG";
     group.type = type;
     filetype = DictTabInfo::Undofile;
@@ -345,6 +348,9 @@
   else
   {
     key = "extent_size=";
+    /* group size must be the same value as the default for
+       extent_size in the st_alter_tablespace class 
+       constructor in sql/handler.h */
     group.size = 1024*1024;
     group.name = "DEFAULT-TS";
     group.type = type;
[26 May 2014 18:09] Jon Stephens
Documented fix in the NDB 7.3.6 changelog, as follows:

        Setting the undo buffer size used by InitialLogFileGroup to a
        value greater than that set by SharedGlobalMemory prevented data
        nodes from starting; the data nodes failed with Error 1504 -Out
        of logbuffer memory-. While the failure itself is expected
        behavior, the error message did not provide sufficient
        information to diagnose the actual source of the problem; now in
        such cases, a more specific error message -Out of logbuffer
        memory(specify smaller undo_buffer_size or increase
        SharedGlobalMemory)- is supplied.

Closed.