mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 21:12:26 +01:00
adac9798bf
- new program maria_read_log to display and apply log records found in a Maria log (see file's revision comment) - minor, misc fixes storage/maria/Makefile.am: new program maria_read_log storage/maria/ha_maria.cc: create control file if missing storage/maria/ma_blockrec.c: 0 -> LSN_IMPOSSIBLE; comments storage/maria/ma_checkpoint.h: preparations for Checkpoint module storage/maria/ma_close.c: comment storage/maria/ma_control_file.c: renaming constants. Possibility to say "open control file but don't create it if it's missing" (used by maria_read_log which does not want to create anything) storage/maria/ma_control_file.h: renaming constants storage/maria/ma_create.c: I had duplicated "linkname" and "linkname_ptr", now I see it's not needed, reverting. Indeed those variables don't contain interesting information; fixing log record accordingly (the links are in ci->data/index_file_name). Storing keystart in log record is needed, to know at which size we must extend the file if we replay LOGREC_CREATE_TABLE. storage/maria/ma_loghandler.c: some structures need to be known to maria_read_log.c, taking them to ma_loghandler.h storage/maria/ma_loghandler.h: we have page_store, adding page_korr. translog_lock() made public, because Checkpoint will need it (to write to control file). Some structures moved from ma_loghandler.c because maria_read_log.c needs them (needs to know the execute-in-REDO-phase hooks of each record). storage/maria/ma_loghandler_lsn.h: constants defined in ma_control_file.h serve everywhere, and they relate to LSNs, so putting them in ma_loghandler_lsn.h. Stronger constraints in LSN_VALID(). storage/maria/ma_pagecache.c: renaming constants storage/maria/ma_recovery.h: copyright storage/maria/ma_test1.c: new prototype storage/maria/ma_test2.c: new prototype storage/maria/trnman_public.h: double-inclusion safe storage/maria/unittest/ma_control_file-t.c: constants renamed, new prototype storage/maria/unittest/ma_test_loghandler-t.c: constants renamed, new prototype storage/maria/unittest/ma_test_loghandler_multigroup-t.c: constants renamed, new prototype storage/maria/unittest/ma_test_loghandler_multithread-t.c: constants renamed, new prototype storage/maria/unittest/ma_test_loghandler_pagecache-t.c: constants renamed, new prototype storage/myisam/mi_close.c: comment storage/maria/maria_read_log.c: program to read and print log records from a Maria transaction log, and optionally apply them to tables. Very basic, early version. Should serve as a base for Recovery's code. Designed to be idempotent. Create a log by running maria.test, then cd to var/master-data and run "maria_read_log --only-display" to see info about records; run "maria_read_log --display-and-apply" to also apply the records to tables (it's more interesting if you first wipe out the tables in var/master-data/test, to see how they get re-created). Only a few records are handled by now: LONG_TRANSACTION_ID, COMMIT, FILE_ID, REDO_CREATE_TABLE; place is ready for REDO_INSERT_ROW_HEAD where I could use Monty's help (search for "Monty" in the file). Note: changes to the index pages, index's header and bitmap pages are not properly logged yet, so don't expect the program to work with that.
58 lines
2 KiB
C
58 lines
2 KiB
C
/* Copyright (C) 2006 MySQL 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 */
|
|
|
|
|
|
/*
|
|
External definitions for trnman.h
|
|
We need to split this into two files as gcc 4.1.2 gives error if it tries
|
|
to include my_atomic.h in C++ code.
|
|
*/
|
|
|
|
#ifndef _trnman_public_h
|
|
#define _trnman_public_h
|
|
|
|
#include "ma_loghandler_lsn.h"
|
|
|
|
C_MODE_START
|
|
typedef uint64 TrID; /* our TrID is 6 bytes */
|
|
typedef struct st_transaction TRN;
|
|
|
|
#define SHORT_TRID_MAX 65535
|
|
|
|
extern uint trnman_active_transactions, trnman_allocated_transactions;
|
|
extern TRN dummy_transaction_object;
|
|
|
|
int trnman_init(void);
|
|
void trnman_destroy(void);
|
|
TRN *trnman_new_trn(pthread_mutex_t *, pthread_cond_t *, void *);
|
|
int trnman_end_trn(TRN *trn, my_bool commit);
|
|
#define trnman_commit_trn(T) trnman_end_trn(T, TRUE)
|
|
#define trnman_abort_trn(T) trnman_end_trn(T, FALSE)
|
|
#define trnman_rollback_trn(T) trnman_end_trn(T, FALSE)
|
|
void trnman_free_trn(TRN *trn);
|
|
int trnman_can_read_from(TRN *trn, TrID trid);
|
|
void trnman_new_statement(TRN *trn);
|
|
void trnman_rollback_statement(TRN *trn);
|
|
my_bool trnman_collect_transactions(LEX_STRING *str_act, LEX_STRING *str_com,
|
|
LSN *min_rec_lsn,
|
|
LSN *min_first_undo_lsn);
|
|
|
|
uint trnman_increment_locked_tables(TRN *trn);
|
|
uint trnman_decrement_locked_tables(TRN *trn);
|
|
my_bool trnman_has_locked_tables(TRN *trn);
|
|
void trnman_reset_locked_tables(TRN *trn);
|
|
|
|
C_MODE_END
|
|
#endif
|