2006-09-14 19:06:51 +02:00
|
|
|
/* Copyright (C) 2006 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
2007-03-02 11:20:23 +01:00
|
|
|
the Free Software Foundation; version 2 of the License.
|
2006-09-14 19:06:51 +02:00
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program; if not, write to the Free Software
|
|
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
|
|
|
|
Maria: first version of checkpoint (WL#3071), least-recently-dirtied page flushing (WL#3261), recovery (WL#3072),
control file (WL#3234), to serve as a detailed LLD. It looks like C code, but does not compile (no point in making it compile,
as other modules on which I depend are not yet fully speficied or written); some pieces are not coded and just marked in comments.
Files' organization (names, directories of C files) does not matter at this point.
I don't think I had to commit so early, but it feels good to publish something, gives me the impression of moving forward :)
storage/maria/checkpoint.c:
WL#3071 Maria checkpoint, implementation
storage/maria/checkpoint.h:
WL#3071 Maria checkpoint, interface
storage/maria/control_file.c:
WL#3234 Maria control file, implementation
storage/maria/control_file.h:
WL#3234 Maria control file, interface
storage/maria/least_recently_dirtied.c:
WL#3261 Maria background flushing of least-recently-dirtied pages, implementation
storage/maria/least_recently_dirtied.h:
WL#3261 Maria background flushing of least-recently-dirtied pages, interface
storage/maria/recovery.c:
WL#3072 Maria recovery, implementation
storage/maria/recovery.h:
WL#3072 Maria recovery, interface
2006-04-27 16:06:46 +02:00
|
|
|
/*
|
|
|
|
WL#3234 Maria control file
|
|
|
|
First version written by Guilhem Bichot on 2006-04-27.
|
|
|
|
Does not compile yet.
|
|
|
|
*/
|
|
|
|
|
2006-08-29 22:10:06 +02:00
|
|
|
#include "maria_def.h"
|
|
|
|
|
Maria: first version of checkpoint (WL#3071), least-recently-dirtied page flushing (WL#3261), recovery (WL#3072),
control file (WL#3234), to serve as a detailed LLD. It looks like C code, but does not compile (no point in making it compile,
as other modules on which I depend are not yet fully speficied or written); some pieces are not coded and just marked in comments.
Files' organization (names, directories of C files) does not matter at this point.
I don't think I had to commit so early, but it feels good to publish something, gives me the impression of moving forward :)
storage/maria/checkpoint.c:
WL#3071 Maria checkpoint, implementation
storage/maria/checkpoint.h:
WL#3071 Maria checkpoint, interface
storage/maria/control_file.c:
WL#3234 Maria control file, implementation
storage/maria/control_file.h:
WL#3234 Maria control file, interface
storage/maria/least_recently_dirtied.c:
WL#3261 Maria background flushing of least-recently-dirtied pages, implementation
storage/maria/least_recently_dirtied.h:
WL#3261 Maria background flushing of least-recently-dirtied pages, interface
storage/maria/recovery.c:
WL#3072 Maria recovery, implementation
storage/maria/recovery.h:
WL#3072 Maria recovery, interface
2006-04-27 16:06:46 +02:00
|
|
|
/* Here is the implementation of this module */
|
|
|
|
|
2006-08-30 10:55:27 +02:00
|
|
|
/*
|
|
|
|
a control file contains 3 objects: magic string, LSN of last checkpoint,
|
|
|
|
number of last log.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* total size should be < sector size for atomic write operation */
|
2007-02-19 22:01:27 +01:00
|
|
|
#define CONTROL_FILE_MAGIC_STRING "\xfe\xfe\xc\1MACF"
|
2006-08-30 10:55:27 +02:00
|
|
|
#define CONTROL_FILE_MAGIC_STRING_OFFSET 0
|
2006-09-04 16:53:09 +02:00
|
|
|
#define CONTROL_FILE_MAGIC_STRING_SIZE (sizeof(CONTROL_FILE_MAGIC_STRING)-1)
|
|
|
|
#define CONTROL_FILE_CHECKSUM_OFFSET (CONTROL_FILE_MAGIC_STRING_OFFSET + CONTROL_FILE_MAGIC_STRING_SIZE)
|
2007-03-02 12:15:19 +01:00
|
|
|
#define CONTROL_FILE_CHECKSUM_SIZE 4
|
2006-09-04 16:53:09 +02:00
|
|
|
#define CONTROL_FILE_LSN_OFFSET (CONTROL_FILE_CHECKSUM_OFFSET + CONTROL_FILE_CHECKSUM_SIZE)
|
2007-02-19 22:01:27 +01:00
|
|
|
#define CONTROL_FILE_LSN_SIZE LSN_STORE_SIZE
|
2006-08-30 10:55:27 +02:00
|
|
|
#define CONTROL_FILE_FILENO_OFFSET (CONTROL_FILE_LSN_OFFSET + CONTROL_FILE_LSN_SIZE)
|
|
|
|
#define CONTROL_FILE_FILENO_SIZE 4
|
2006-09-04 16:53:09 +02:00
|
|
|
#define CONTROL_FILE_SIZE (CONTROL_FILE_FILENO_OFFSET + CONTROL_FILE_FILENO_SIZE)
|
2006-08-29 22:10:06 +02:00
|
|
|
|
2006-09-01 17:53:10 +02:00
|
|
|
/*
|
|
|
|
This module owns these two vars.
|
|
|
|
uint32 is always atomically updated, but LSN is 8 bytes, we will need
|
|
|
|
provisions to ensure that it's updated atomically in
|
|
|
|
ma_control_file_write_and_force(). Probably the log mutex could be
|
|
|
|
used. TODO.
|
|
|
|
*/
|
|
|
|
LSN last_checkpoint_lsn;
|
|
|
|
uint32 last_logno;
|
2006-08-29 22:10:06 +02:00
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
Control file is less then 512 bytes (a disk sector),
|
|
|
|
to be as atomic as possible
|
|
|
|
*/
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
static int control_file_fd= -1;
|
Maria: first version of checkpoint (WL#3071), least-recently-dirtied page flushing (WL#3261), recovery (WL#3072),
control file (WL#3234), to serve as a detailed LLD. It looks like C code, but does not compile (no point in making it compile,
as other modules on which I depend are not yet fully speficied or written); some pieces are not coded and just marked in comments.
Files' organization (names, directories of C files) does not matter at this point.
I don't think I had to commit so early, but it feels good to publish something, gives me the impression of moving forward :)
storage/maria/checkpoint.c:
WL#3071 Maria checkpoint, implementation
storage/maria/checkpoint.h:
WL#3071 Maria checkpoint, interface
storage/maria/control_file.c:
WL#3234 Maria control file, implementation
storage/maria/control_file.h:
WL#3234 Maria control file, interface
storage/maria/least_recently_dirtied.c:
WL#3261 Maria background flushing of least-recently-dirtied pages, implementation
storage/maria/least_recently_dirtied.h:
WL#3261 Maria background flushing of least-recently-dirtied pages, interface
storage/maria/recovery.c:
WL#3072 Maria recovery, implementation
storage/maria/recovery.h:
WL#3072 Maria recovery, interface
2006-04-27 16:06:46 +02:00
|
|
|
|
|
|
|
/*
|
2006-08-29 22:10:06 +02:00
|
|
|
Initialize control file subsystem
|
|
|
|
|
|
|
|
SYNOPSIS
|
2006-09-01 17:53:10 +02:00
|
|
|
ma_control_file_create_or_open()
|
2006-08-29 22:10:06 +02:00
|
|
|
|
2006-09-01 17:53:10 +02:00
|
|
|
Looks for the control file. If absent, it's a fresh start, creates file.
|
|
|
|
If present, reads it to find out last checkpoint's LSN and last log, updates
|
|
|
|
the last_checkpoint_lsn and last_logno global variables.
|
Maria: first version of checkpoint (WL#3071), least-recently-dirtied page flushing (WL#3261), recovery (WL#3072),
control file (WL#3234), to serve as a detailed LLD. It looks like C code, but does not compile (no point in making it compile,
as other modules on which I depend are not yet fully speficied or written); some pieces are not coded and just marked in comments.
Files' organization (names, directories of C files) does not matter at this point.
I don't think I had to commit so early, but it feels good to publish something, gives me the impression of moving forward :)
storage/maria/checkpoint.c:
WL#3071 Maria checkpoint, implementation
storage/maria/checkpoint.h:
WL#3071 Maria checkpoint, interface
storage/maria/control_file.c:
WL#3234 Maria control file, implementation
storage/maria/control_file.h:
WL#3234 Maria control file, interface
storage/maria/least_recently_dirtied.c:
WL#3261 Maria background flushing of least-recently-dirtied pages, implementation
storage/maria/least_recently_dirtied.h:
WL#3261 Maria background flushing of least-recently-dirtied pages, interface
storage/maria/recovery.c:
WL#3072 Maria recovery, implementation
storage/maria/recovery.h:
WL#3072 Maria recovery, interface
2006-04-27 16:06:46 +02:00
|
|
|
Called at engine's start.
|
2006-08-29 22:10:06 +02:00
|
|
|
|
2006-09-04 16:53:09 +02:00
|
|
|
The format of the control file is:
|
|
|
|
4 bytes: magic string
|
2007-03-02 12:15:19 +01:00
|
|
|
4 bytes: checksum of the following bytes
|
2006-09-04 16:53:09 +02:00
|
|
|
4 bytes: number of log where last checkpoint is
|
|
|
|
4 bytes: offset in log where last checkpoint is
|
|
|
|
4 bytes: number of last log
|
|
|
|
|
2006-08-29 22:10:06 +02:00
|
|
|
RETURN
|
|
|
|
0 - OK
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
1 - Error (in which case the file is left closed)
|
Maria: first version of checkpoint (WL#3071), least-recently-dirtied page flushing (WL#3261), recovery (WL#3072),
control file (WL#3234), to serve as a detailed LLD. It looks like C code, but does not compile (no point in making it compile,
as other modules on which I depend are not yet fully speficied or written); some pieces are not coded and just marked in comments.
Files' organization (names, directories of C files) does not matter at this point.
I don't think I had to commit so early, but it feels good to publish something, gives me the impression of moving forward :)
storage/maria/checkpoint.c:
WL#3071 Maria checkpoint, implementation
storage/maria/checkpoint.h:
WL#3071 Maria checkpoint, interface
storage/maria/control_file.c:
WL#3234 Maria control file, implementation
storage/maria/control_file.h:
WL#3234 Maria control file, interface
storage/maria/least_recently_dirtied.c:
WL#3261 Maria background flushing of least-recently-dirtied pages, implementation
storage/maria/least_recently_dirtied.h:
WL#3261 Maria background flushing of least-recently-dirtied pages, interface
storage/maria/recovery.c:
WL#3072 Maria recovery, implementation
storage/maria/recovery.h:
WL#3072 Maria recovery, interface
2006-04-27 16:06:46 +02:00
|
|
|
*/
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
CONTROL_FILE_ERROR ma_control_file_create_or_open()
|
Maria: first version of checkpoint (WL#3071), least-recently-dirtied page flushing (WL#3261), recovery (WL#3072),
control file (WL#3234), to serve as a detailed LLD. It looks like C code, but does not compile (no point in making it compile,
as other modules on which I depend are not yet fully speficied or written); some pieces are not coded and just marked in comments.
Files' organization (names, directories of C files) does not matter at this point.
I don't think I had to commit so early, but it feels good to publish something, gives me the impression of moving forward :)
storage/maria/checkpoint.c:
WL#3071 Maria checkpoint, implementation
storage/maria/checkpoint.h:
WL#3071 Maria checkpoint, interface
storage/maria/control_file.c:
WL#3234 Maria control file, implementation
storage/maria/control_file.h:
WL#3234 Maria control file, interface
storage/maria/least_recently_dirtied.c:
WL#3261 Maria background flushing of least-recently-dirtied pages, implementation
storage/maria/least_recently_dirtied.h:
WL#3261 Maria background flushing of least-recently-dirtied pages, interface
storage/maria/recovery.c:
WL#3072 Maria recovery, implementation
storage/maria/recovery.h:
WL#3072 Maria recovery, interface
2006-04-27 16:06:46 +02:00
|
|
|
{
|
2006-09-04 16:53:09 +02:00
|
|
|
char buffer[CONTROL_FILE_SIZE];
|
2006-08-29 22:10:06 +02:00
|
|
|
char name[FN_REFLEN];
|
|
|
|
MY_STAT stat_buff;
|
2006-09-04 16:53:09 +02:00
|
|
|
my_bool create_file;
|
|
|
|
int open_flags= O_BINARY | /*O_DIRECT |*/ O_RDWR;
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
int error= CONTROL_FILE_UNKNOWN_ERROR;
|
2006-09-01 17:53:10 +02:00
|
|
|
DBUG_ENTER("ma_control_file_create_or_open");
|
2006-08-29 22:10:06 +02:00
|
|
|
|
2006-08-30 10:55:27 +02:00
|
|
|
/*
|
|
|
|
If you change sizes in the #defines, you at least have to change the
|
|
|
|
"*store" and "*korr" calls in this file, and can even create backward
|
|
|
|
compatibility problems. Beware!
|
|
|
|
*/
|
2007-02-12 13:23:43 +01:00
|
|
|
DBUG_ASSERT(CONTROL_FILE_LSN_SIZE == (3+4));
|
2006-08-30 10:55:27 +02:00
|
|
|
DBUG_ASSERT(CONTROL_FILE_FILENO_SIZE == 4);
|
|
|
|
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
if (control_file_fd >= 0) /* already open */
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
|
|
|
|
if (fn_format(name, CONTROL_FILE_BASE_NAME,
|
|
|
|
maria_data_root, "", MYF(MY_WME)) == NullS)
|
|
|
|
DBUG_RETURN(CONTROL_FILE_UNKNOWN_ERROR);
|
2006-08-29 22:10:06 +02:00
|
|
|
|
2006-09-04 16:53:09 +02:00
|
|
|
create_file= test(my_access(name,F_OK));
|
2006-08-29 22:10:06 +02:00
|
|
|
|
2006-09-04 16:53:09 +02:00
|
|
|
if (create_file)
|
Maria: first version of checkpoint (WL#3071), least-recently-dirtied page flushing (WL#3261), recovery (WL#3072),
control file (WL#3234), to serve as a detailed LLD. It looks like C code, but does not compile (no point in making it compile,
as other modules on which I depend are not yet fully speficied or written); some pieces are not coded and just marked in comments.
Files' organization (names, directories of C files) does not matter at this point.
I don't think I had to commit so early, but it feels good to publish something, gives me the impression of moving forward :)
storage/maria/checkpoint.c:
WL#3071 Maria checkpoint, implementation
storage/maria/checkpoint.h:
WL#3071 Maria checkpoint, interface
storage/maria/control_file.c:
WL#3234 Maria control file, implementation
storage/maria/control_file.h:
WL#3234 Maria control file, interface
storage/maria/least_recently_dirtied.c:
WL#3261 Maria background flushing of least-recently-dirtied pages, implementation
storage/maria/least_recently_dirtied.h:
WL#3261 Maria background flushing of least-recently-dirtied pages, interface
storage/maria/recovery.c:
WL#3072 Maria recovery, implementation
storage/maria/recovery.h:
WL#3072 Maria recovery, interface
2006-04-27 16:06:46 +02:00
|
|
|
{
|
2006-11-21 22:22:59 +01:00
|
|
|
if ((control_file_fd= my_create(name, 0,
|
|
|
|
open_flags, MYF(MY_SYNC_DIR))) < 0)
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
DBUG_RETURN(CONTROL_FILE_UNKNOWN_ERROR);
|
2006-09-01 17:53:10 +02:00
|
|
|
|
2006-11-21 22:22:59 +01:00
|
|
|
/*
|
2006-08-29 22:10:06 +02:00
|
|
|
To be safer we should make sure that there are no logs or data/index
|
|
|
|
files around (indeed it could be that the control file alone was deleted
|
|
|
|
or not restored, and we should not go on with life at this point).
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
|
2006-08-29 22:10:06 +02:00
|
|
|
TODO: For now we trust (this is alpha version), but for beta if would
|
|
|
|
be great to verify.
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
|
Maria: first version of checkpoint (WL#3071), least-recently-dirtied page flushing (WL#3261), recovery (WL#3072),
control file (WL#3234), to serve as a detailed LLD. It looks like C code, but does not compile (no point in making it compile,
as other modules on which I depend are not yet fully speficied or written); some pieces are not coded and just marked in comments.
Files' organization (names, directories of C files) does not matter at this point.
I don't think I had to commit so early, but it feels good to publish something, gives me the impression of moving forward :)
storage/maria/checkpoint.c:
WL#3071 Maria checkpoint, implementation
storage/maria/checkpoint.h:
WL#3071 Maria checkpoint, interface
storage/maria/control_file.c:
WL#3234 Maria control file, implementation
storage/maria/control_file.h:
WL#3234 Maria control file, interface
storage/maria/least_recently_dirtied.c:
WL#3261 Maria background flushing of least-recently-dirtied pages, implementation
storage/maria/least_recently_dirtied.h:
WL#3261 Maria background flushing of least-recently-dirtied pages, interface
storage/maria/recovery.c:
WL#3072 Maria recovery, implementation
storage/maria/recovery.h:
WL#3072 Maria recovery, interface
2006-04-27 16:06:46 +02:00
|
|
|
We could have a tool which can rebuild the control file, by reading the
|
|
|
|
directory of logs, finding the newest log, reading it to find last
|
2006-09-14 19:06:51 +02:00
|
|
|
checkpoint... Slow but can save your db. For this to be possible, we
|
|
|
|
must always write to the control file right after writing the checkpoint
|
|
|
|
log record, and do nothing in between (i.e. the checkpoint must be
|
|
|
|
usable as soon as it has been written to the log).
|
Maria: first version of checkpoint (WL#3071), least-recently-dirtied page flushing (WL#3261), recovery (WL#3072),
control file (WL#3234), to serve as a detailed LLD. It looks like C code, but does not compile (no point in making it compile,
as other modules on which I depend are not yet fully speficied or written); some pieces are not coded and just marked in comments.
Files' organization (names, directories of C files) does not matter at this point.
I don't think I had to commit so early, but it feels good to publish something, gives me the impression of moving forward :)
storage/maria/checkpoint.c:
WL#3071 Maria checkpoint, implementation
storage/maria/checkpoint.h:
WL#3071 Maria checkpoint, interface
storage/maria/control_file.c:
WL#3234 Maria control file, implementation
storage/maria/control_file.h:
WL#3234 Maria control file, interface
storage/maria/least_recently_dirtied.c:
WL#3261 Maria background flushing of least-recently-dirtied pages, implementation
storage/maria/least_recently_dirtied.h:
WL#3261 Maria background flushing of least-recently-dirtied pages, interface
storage/maria/recovery.c:
WL#3072 Maria recovery, implementation
storage/maria/recovery.h:
WL#3072 Maria recovery, interface
2006-04-27 16:06:46 +02:00
|
|
|
*/
|
2006-09-04 16:53:09 +02:00
|
|
|
|
2006-08-29 22:10:06 +02:00
|
|
|
/* init the file with these "undefined" values */
|
2007-02-12 13:23:43 +01:00
|
|
|
DBUG_RETURN(ma_control_file_write_and_force(CONTROL_FILE_IMPOSSIBLE_LSN,
|
|
|
|
CONTROL_FILE_IMPOSSIBLE_FILENO,
|
2006-09-04 16:53:09 +02:00
|
|
|
CONTROL_FILE_UPDATE_ALL));
|
Maria: first version of checkpoint (WL#3071), least-recently-dirtied page flushing (WL#3261), recovery (WL#3072),
control file (WL#3234), to serve as a detailed LLD. It looks like C code, but does not compile (no point in making it compile,
as other modules on which I depend are not yet fully speficied or written); some pieces are not coded and just marked in comments.
Files' organization (names, directories of C files) does not matter at this point.
I don't think I had to commit so early, but it feels good to publish something, gives me the impression of moving forward :)
storage/maria/checkpoint.c:
WL#3071 Maria checkpoint, implementation
storage/maria/checkpoint.h:
WL#3071 Maria checkpoint, interface
storage/maria/control_file.c:
WL#3234 Maria control file, implementation
storage/maria/control_file.h:
WL#3234 Maria control file, interface
storage/maria/least_recently_dirtied.c:
WL#3261 Maria background flushing of least-recently-dirtied pages, implementation
storage/maria/least_recently_dirtied.h:
WL#3261 Maria background flushing of least-recently-dirtied pages, interface
storage/maria/recovery.c:
WL#3072 Maria recovery, implementation
storage/maria/recovery.h:
WL#3072 Maria recovery, interface
2006-04-27 16:06:46 +02:00
|
|
|
}
|
2006-09-04 16:53:09 +02:00
|
|
|
|
|
|
|
/* Otherwise, file exists */
|
|
|
|
|
|
|
|
if ((control_file_fd= my_open(name, open_flags, MYF(MY_WME))) < 0)
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
goto err;
|
|
|
|
|
2006-09-04 16:53:09 +02:00
|
|
|
if (my_stat(name, &stat_buff, MYF(MY_WME)) == NULL)
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
goto err;
|
2006-09-04 16:53:09 +02:00
|
|
|
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
if ((uint)stat_buff.st_size < CONTROL_FILE_SIZE)
|
2006-09-04 16:53:09 +02:00
|
|
|
{
|
|
|
|
/*
|
|
|
|
Given that normally we write only a sector and it's atomic, the only
|
|
|
|
possibility for a file to be of too short size is if we crashed at the
|
|
|
|
very first startup, between file creation and file write. Quite unlikely
|
|
|
|
(and can be made even more unlikely by doing this: create a temp file,
|
|
|
|
write it, and then rename it to be the control file).
|
|
|
|
What's more likely is if someone forgot to restore the control file,
|
|
|
|
just did a "touch control" to try to get Maria to start, or if the
|
|
|
|
disk/filesystem has a problem.
|
|
|
|
So let's be rigid.
|
|
|
|
*/
|
2006-09-15 11:05:35 +02:00
|
|
|
/*
|
|
|
|
TODO: store a message "too small file" somewhere, so that it goes to
|
|
|
|
MySQL's error log at startup.
|
|
|
|
*/
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
error= CONTROL_FILE_TOO_SMALL;
|
|
|
|
goto err;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ((uint)stat_buff.st_size > CONTROL_FILE_SIZE)
|
|
|
|
{
|
2006-09-15 11:05:35 +02:00
|
|
|
/* TODO: store "too big file" message */
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
error= CONTROL_FILE_TOO_BIG;
|
|
|
|
goto err;
|
2006-09-04 16:53:09 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if (my_read(control_file_fd, buffer, CONTROL_FILE_SIZE,
|
2006-08-29 22:10:06 +02:00
|
|
|
MYF(MY_FNABP | MY_WME)))
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
goto err;
|
2006-08-30 10:55:27 +02:00
|
|
|
if (memcmp(buffer + CONTROL_FILE_MAGIC_STRING_OFFSET,
|
|
|
|
CONTROL_FILE_MAGIC_STRING, CONTROL_FILE_MAGIC_STRING_SIZE))
|
2006-09-01 17:53:10 +02:00
|
|
|
{
|
2006-09-15 11:05:35 +02:00
|
|
|
/* TODO: store message "bad magic string" somewhere */
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
error= CONTROL_FILE_BAD_MAGIC_STRING;
|
|
|
|
goto err;
|
2006-09-04 16:53:09 +02:00
|
|
|
}
|
2007-03-02 12:15:19 +01:00
|
|
|
if (my_checksum(0, buffer + CONTROL_FILE_LSN_OFFSET,
|
|
|
|
CONTROL_FILE_SIZE - CONTROL_FILE_LSN_OFFSET) !=
|
|
|
|
uint4korr(buffer + CONTROL_FILE_CHECKSUM_OFFSET))
|
2006-09-04 16:53:09 +02:00
|
|
|
{
|
2006-09-15 11:05:35 +02:00
|
|
|
/* TODO: store message "checksum mismatch" somewhere */
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
error= CONTROL_FILE_BAD_CHECKSUM;
|
|
|
|
goto err;
|
2006-09-01 17:53:10 +02:00
|
|
|
}
|
2007-02-19 22:01:27 +01:00
|
|
|
last_checkpoint_lsn= lsn_korr(buffer + CONTROL_FILE_LSN_OFFSET);
|
2006-09-01 17:53:10 +02:00
|
|
|
last_logno= uint4korr(buffer + CONTROL_FILE_FILENO_OFFSET);
|
2006-09-04 16:53:09 +02:00
|
|
|
|
2006-09-01 17:53:10 +02:00
|
|
|
DBUG_RETURN(0);
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
err:
|
|
|
|
ma_control_file_end();
|
|
|
|
DBUG_RETURN(error);
|
Maria: first version of checkpoint (WL#3071), least-recently-dirtied page flushing (WL#3261), recovery (WL#3072),
control file (WL#3234), to serve as a detailed LLD. It looks like C code, but does not compile (no point in making it compile,
as other modules on which I depend are not yet fully speficied or written); some pieces are not coded and just marked in comments.
Files' organization (names, directories of C files) does not matter at this point.
I don't think I had to commit so early, but it feels good to publish something, gives me the impression of moving forward :)
storage/maria/checkpoint.c:
WL#3071 Maria checkpoint, implementation
storage/maria/checkpoint.h:
WL#3071 Maria checkpoint, interface
storage/maria/control_file.c:
WL#3234 Maria control file, implementation
storage/maria/control_file.h:
WL#3234 Maria control file, interface
storage/maria/least_recently_dirtied.c:
WL#3261 Maria background flushing of least-recently-dirtied pages, implementation
storage/maria/least_recently_dirtied.h:
WL#3261 Maria background flushing of least-recently-dirtied pages, interface
storage/maria/recovery.c:
WL#3072 Maria recovery, implementation
storage/maria/recovery.h:
WL#3072 Maria recovery, interface
2006-04-27 16:06:46 +02:00
|
|
|
}
|
|
|
|
|
2006-08-29 22:10:06 +02:00
|
|
|
|
Maria: first version of checkpoint (WL#3071), least-recently-dirtied page flushing (WL#3261), recovery (WL#3072),
control file (WL#3234), to serve as a detailed LLD. It looks like C code, but does not compile (no point in making it compile,
as other modules on which I depend are not yet fully speficied or written); some pieces are not coded and just marked in comments.
Files' organization (names, directories of C files) does not matter at this point.
I don't think I had to commit so early, but it feels good to publish something, gives me the impression of moving forward :)
storage/maria/checkpoint.c:
WL#3071 Maria checkpoint, implementation
storage/maria/checkpoint.h:
WL#3071 Maria checkpoint, interface
storage/maria/control_file.c:
WL#3234 Maria control file, implementation
storage/maria/control_file.h:
WL#3234 Maria control file, interface
storage/maria/least_recently_dirtied.c:
WL#3261 Maria background flushing of least-recently-dirtied pages, implementation
storage/maria/least_recently_dirtied.h:
WL#3261 Maria background flushing of least-recently-dirtied pages, interface
storage/maria/recovery.c:
WL#3072 Maria recovery, implementation
storage/maria/recovery.h:
WL#3072 Maria recovery, interface
2006-04-27 16:06:46 +02:00
|
|
|
/*
|
2006-09-01 17:53:10 +02:00
|
|
|
Write information durably to the control file; stores this information into
|
|
|
|
the last_checkpoint_lsn and last_logno global variables.
|
2006-09-04 16:53:09 +02:00
|
|
|
Called when we have created a new log (after syncing this log's creation)
|
|
|
|
and when we have written a checkpoint (after syncing this log record).
|
2006-08-29 22:10:06 +02:00
|
|
|
|
|
|
|
SYNOPSIS
|
2006-09-01 17:53:10 +02:00
|
|
|
ma_control_file_write_and_force()
|
2006-08-30 10:55:27 +02:00
|
|
|
checkpoint_lsn LSN of last checkpoint
|
2006-09-01 17:53:10 +02:00
|
|
|
logno last log file number
|
2006-09-04 16:53:09 +02:00
|
|
|
objs_to_write which of the arguments should be used as new values
|
|
|
|
(for example, CONTROL_FILE_UPDATE_ONLY_LSN will not
|
|
|
|
write the logno argument to the control file and will
|
|
|
|
not update the last_logno global variable); can be:
|
|
|
|
CONTROL_FILE_UPDATE_ALL
|
|
|
|
CONTROL_FILE_UPDATE_ONLY_LSN
|
|
|
|
CONTROL_FILE_UPDATE_ONLY_LOGNO.
|
2006-08-29 22:10:06 +02:00
|
|
|
|
2006-08-30 10:55:27 +02:00
|
|
|
NOTE
|
|
|
|
We always want to do one single my_pwrite() here to be as atomic as
|
|
|
|
possible.
|
|
|
|
|
2006-08-29 22:10:06 +02:00
|
|
|
RETURN
|
|
|
|
0 - OK
|
|
|
|
1 - Error
|
Maria: first version of checkpoint (WL#3071), least-recently-dirtied page flushing (WL#3261), recovery (WL#3072),
control file (WL#3234), to serve as a detailed LLD. It looks like C code, but does not compile (no point in making it compile,
as other modules on which I depend are not yet fully speficied or written); some pieces are not coded and just marked in comments.
Files' organization (names, directories of C files) does not matter at this point.
I don't think I had to commit so early, but it feels good to publish something, gives me the impression of moving forward :)
storage/maria/checkpoint.c:
WL#3071 Maria checkpoint, implementation
storage/maria/checkpoint.h:
WL#3071 Maria checkpoint, interface
storage/maria/control_file.c:
WL#3234 Maria control file, implementation
storage/maria/control_file.h:
WL#3234 Maria control file, interface
storage/maria/least_recently_dirtied.c:
WL#3261 Maria background flushing of least-recently-dirtied pages, implementation
storage/maria/least_recently_dirtied.h:
WL#3261 Maria background flushing of least-recently-dirtied pages, interface
storage/maria/recovery.c:
WL#3072 Maria recovery, implementation
storage/maria/recovery.h:
WL#3072 Maria recovery, interface
2006-04-27 16:06:46 +02:00
|
|
|
*/
|
2006-08-29 22:10:06 +02:00
|
|
|
|
2007-02-12 13:23:43 +01:00
|
|
|
int ma_control_file_write_and_force(const LSN checkpoint_lsn, uint32 logno,
|
2006-08-30 10:55:27 +02:00
|
|
|
uint objs_to_write)
|
Maria: first version of checkpoint (WL#3071), least-recently-dirtied page flushing (WL#3261), recovery (WL#3072),
control file (WL#3234), to serve as a detailed LLD. It looks like C code, but does not compile (no point in making it compile,
as other modules on which I depend are not yet fully speficied or written); some pieces are not coded and just marked in comments.
Files' organization (names, directories of C files) does not matter at this point.
I don't think I had to commit so early, but it feels good to publish something, gives me the impression of moving forward :)
storage/maria/checkpoint.c:
WL#3071 Maria checkpoint, implementation
storage/maria/checkpoint.h:
WL#3071 Maria checkpoint, interface
storage/maria/control_file.c:
WL#3234 Maria control file, implementation
storage/maria/control_file.h:
WL#3234 Maria control file, interface
storage/maria/least_recently_dirtied.c:
WL#3261 Maria background flushing of least-recently-dirtied pages, implementation
storage/maria/least_recently_dirtied.h:
WL#3261 Maria background flushing of least-recently-dirtied pages, interface
storage/maria/recovery.c:
WL#3072 Maria recovery, implementation
storage/maria/recovery.h:
WL#3072 Maria recovery, interface
2006-04-27 16:06:46 +02:00
|
|
|
{
|
2006-09-04 16:53:09 +02:00
|
|
|
char buffer[CONTROL_FILE_SIZE];
|
|
|
|
my_bool update_checkpoint_lsn= FALSE, update_logno= FALSE;
|
2006-09-01 17:53:10 +02:00
|
|
|
DBUG_ENTER("ma_control_file_write_and_force");
|
|
|
|
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
DBUG_ASSERT(control_file_fd >= 0); /* must be open */
|
|
|
|
|
2006-08-30 10:55:27 +02:00
|
|
|
memcpy(buffer + CONTROL_FILE_MAGIC_STRING_OFFSET,
|
|
|
|
CONTROL_FILE_MAGIC_STRING, CONTROL_FILE_MAGIC_STRING_SIZE);
|
2006-09-04 16:53:09 +02:00
|
|
|
|
|
|
|
/* TODO: you need some protection to be able to read last_* global vars */
|
|
|
|
|
|
|
|
if (objs_to_write == CONTROL_FILE_UPDATE_ONLY_LSN)
|
|
|
|
update_checkpoint_lsn= TRUE;
|
|
|
|
else if (objs_to_write == CONTROL_FILE_UPDATE_ONLY_LOGNO)
|
|
|
|
update_logno= TRUE;
|
|
|
|
else if (objs_to_write == CONTROL_FILE_UPDATE_ALL)
|
|
|
|
update_checkpoint_lsn= update_logno= TRUE;
|
|
|
|
else /* incorrect value of objs_to_write */
|
|
|
|
DBUG_ASSERT(0);
|
|
|
|
|
|
|
|
if (update_checkpoint_lsn)
|
2007-02-19 22:01:27 +01:00
|
|
|
lsn_store(buffer + CONTROL_FILE_LSN_OFFSET, checkpoint_lsn);
|
2006-09-04 16:53:09 +02:00
|
|
|
else /* store old value == change nothing */
|
2007-02-19 22:01:27 +01:00
|
|
|
lsn_store(buffer + CONTROL_FILE_LSN_OFFSET, last_checkpoint_lsn);
|
2006-09-04 16:53:09 +02:00
|
|
|
|
|
|
|
if (update_logno)
|
|
|
|
int4store(buffer + CONTROL_FILE_FILENO_OFFSET, logno);
|
|
|
|
else
|
|
|
|
int4store(buffer + CONTROL_FILE_FILENO_OFFSET, last_logno);
|
|
|
|
|
2007-03-02 12:15:19 +01:00
|
|
|
{
|
|
|
|
uint32 sum= (uint32)
|
|
|
|
my_checksum(0, buffer + CONTROL_FILE_LSN_OFFSET,
|
|
|
|
CONTROL_FILE_SIZE - CONTROL_FILE_LSN_OFFSET);
|
|
|
|
int4store(buffer + CONTROL_FILE_CHECKSUM_OFFSET, sum);
|
|
|
|
}
|
2006-09-04 16:53:09 +02:00
|
|
|
|
|
|
|
if (my_pwrite(control_file_fd, buffer, sizeof(buffer),
|
|
|
|
0, MYF(MY_FNABP | MY_WME)) ||
|
|
|
|
my_sync(control_file_fd, MYF(MY_WME)))
|
|
|
|
DBUG_RETURN(1);
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
|
2006-09-04 16:53:09 +02:00
|
|
|
/* TODO: you need some protection to be able to write last_* global vars */
|
|
|
|
if (update_checkpoint_lsn)
|
2007-02-12 13:23:43 +01:00
|
|
|
last_checkpoint_lsn= checkpoint_lsn;
|
2006-09-04 16:53:09 +02:00
|
|
|
if (update_logno)
|
2006-09-01 17:53:10 +02:00
|
|
|
last_logno= logno;
|
2006-09-04 16:53:09 +02:00
|
|
|
|
|
|
|
DBUG_RETURN(0);
|
2006-08-29 22:10:06 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
Free resources taken by control file subsystem
|
|
|
|
|
|
|
|
SYNOPSIS
|
2006-09-01 17:53:10 +02:00
|
|
|
ma_control_file_end()
|
2006-08-29 22:10:06 +02:00
|
|
|
*/
|
|
|
|
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
int ma_control_file_end()
|
2006-08-29 22:10:06 +02:00
|
|
|
{
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
int close_error;
|
2006-09-01 17:53:10 +02:00
|
|
|
DBUG_ENTER("ma_control_file_end");
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
|
|
|
|
if (control_file_fd < 0) /* already closed */
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
|
|
|
|
close_error= my_close(control_file_fd, MYF(MY_WME));
|
|
|
|
/*
|
|
|
|
As my_close() frees structures even if close() fails, we do the same,
|
|
|
|
i.e. we mark the file as closed in all cases.
|
|
|
|
*/
|
|
|
|
control_file_fd= -1;
|
2006-09-01 17:53:10 +02:00
|
|
|
/*
|
|
|
|
As this module owns these variables, closing the module forbids access to
|
|
|
|
them (just a safety):
|
|
|
|
*/
|
|
|
|
last_checkpoint_lsn= CONTROL_FILE_IMPOSSIBLE_LSN;
|
|
|
|
last_logno= CONTROL_FILE_IMPOSSIBLE_FILENO;
|
WL#3234 Maria control file manager.
Fitting ma_control_file_test into the mytap unittest framework:
new directories:
- unittest/storage/ for unit tests of any storage engine
- unittest/storage/maria for ... Maria, containing ma_control_file-t.
Later, older tests like ma_test*, ma_test_all (but which is Unix
dependent in its current form) could move here too.
The plugins macro enable building of unittest/storage/X for any
enabled engine X which has such a directory.
If Falcon wants to have unit tests there too, I may have to merge
this patch into 5.x one day.
config/ac-macros/plugins.m4:
If a storage engine has a directory in unittest/storage, build this
directory.
configure.in:
build storage engines' unit tests.
storage/maria/Makefile.am:
ma_control_file_test moves to unittest/storage/maria
storage/maria/ma_control_file.c:
more error codes when opening the control file fails.
ma_control_file_end() may now return an error if my_close() failed.
storage/maria/ma_control_file.h:
more error codes when opening the control file fails.
unittest/Makefile.am:
adding unit tests for storage engines.
Note that unit.pl simply recurses into "storage", so if a unit test for
storage engine X has been built previously, and now you re-configure
(without making clean) to disable this engine, then the unit test of
X will not be rebuilt but will still be present in storage/X, so will
be run.
unittest/storage/maria/ma_control_file-t.c:
Making the test fit the mytap framework (return all the way up
the stack instead of assert(); use the mytap functions plan(), ok() etc).
Adding test of file too short/long.
unittest/storage/maria/Makefile.am:
a_control_file-t is added to the Maria unit tests.
Later, older tests (ma_test1 etc) could also move here.
unittest/storage/Makefile.am:
New BitKeeper file ``unittest/storage/Makefile.am''
2006-09-11 16:12:31 +02:00
|
|
|
|
|
|
|
DBUG_RETURN(close_error);
|
Maria: first version of checkpoint (WL#3071), least-recently-dirtied page flushing (WL#3261), recovery (WL#3072),
control file (WL#3234), to serve as a detailed LLD. It looks like C code, but does not compile (no point in making it compile,
as other modules on which I depend are not yet fully speficied or written); some pieces are not coded and just marked in comments.
Files' organization (names, directories of C files) does not matter at this point.
I don't think I had to commit so early, but it feels good to publish something, gives me the impression of moving forward :)
storage/maria/checkpoint.c:
WL#3071 Maria checkpoint, implementation
storage/maria/checkpoint.h:
WL#3071 Maria checkpoint, interface
storage/maria/control_file.c:
WL#3234 Maria control file, implementation
storage/maria/control_file.h:
WL#3234 Maria control file, interface
storage/maria/least_recently_dirtied.c:
WL#3261 Maria background flushing of least-recently-dirtied pages, implementation
storage/maria/least_recently_dirtied.h:
WL#3261 Maria background flushing of least-recently-dirtied pages, interface
storage/maria/recovery.c:
WL#3072 Maria recovery, implementation
storage/maria/recovery.h:
WL#3072 Maria recovery, interface
2006-04-27 16:06:46 +02:00
|
|
|
}
|