mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 18:20:07 +01:00
2d327efd89
it couldn't entirely write its new information (it could not write more bytes than the old format wrote). storage/maria/ma_control_file.c: Let ma_control_file_write_and_force() return error if called when file is not open. When the file was of an old version (no room for our changeable part) we upgrade this part. When the file was of a new version we re-use its format but zero the parts which we can't maintain. storage/maria/ma_init.c: ma_control_file_write_and_force() now does not assert if called when control file is not open. storage/maria/ma_recovery.c: missing ";" (thanks Peter Zaitsev for the bug report and Monty for the patch)
77 lines
2.1 KiB
C
77 lines
2.1 KiB
C
/* 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
|
|
the Free Software Foundation; version 2 of the License.
|
|
|
|
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 */
|
|
|
|
/* Initialize an maria-database */
|
|
|
|
#include "maria_def.h"
|
|
#include <ft_global.h>
|
|
#include "ma_blockrec.h"
|
|
#include "trnman_public.h"
|
|
#include "ma_checkpoint.h"
|
|
|
|
/*
|
|
Initialize maria
|
|
|
|
SYNOPSIS
|
|
maria_init()
|
|
|
|
TODO
|
|
Open log files and do recovery if need
|
|
|
|
RETURN
|
|
0 ok
|
|
# error number
|
|
*/
|
|
|
|
int maria_init(void)
|
|
{
|
|
if (!maria_inited)
|
|
{
|
|
maria_inited= TRUE;
|
|
pthread_mutex_init(&THR_LOCK_maria,MY_MUTEX_INIT_SLOW);
|
|
_ma_init_block_record_data();
|
|
my_handler_error_register();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
void maria_end(void)
|
|
{
|
|
if (maria_inited)
|
|
{
|
|
TrID trid;
|
|
maria_inited= maria_multi_threaded= FALSE;
|
|
ft_free_stopwords();
|
|
ma_checkpoint_end();
|
|
if ((trid= trnman_get_max_trid()) > max_trid_in_control_file)
|
|
{
|
|
/*
|
|
Store max transaction id into control file, in case logs are removed
|
|
by user, or maria_chk wants to check tables (it cannot access max trid
|
|
from the log, as it cannot process REDOs).
|
|
*/
|
|
(void)ma_control_file_write_and_force(last_checkpoint_lsn, last_logno,
|
|
trid);
|
|
}
|
|
trnman_destroy();
|
|
if (translog_status == TRANSLOG_OK)
|
|
translog_destroy();
|
|
end_pagecache(maria_log_pagecache, TRUE);
|
|
end_pagecache(maria_pagecache, TRUE);
|
|
ma_control_file_end();
|
|
pthread_mutex_destroy(&THR_LOCK_maria);
|
|
}
|
|
}
|