diff options
author | unknown <heikki@donna.mysql.fi> | 2002-01-22 22:57:56 +0200 |
---|---|---|
committer | unknown <heikki@donna.mysql.fi> | 2002-01-22 22:57:56 +0200 |
commit | 2aa572433b9ce47a511958ce263c8400c2e81ac3 (patch) | |
tree | b54919432865c005c199b95f91277693e1c3c9ba /sql/handler.cc | |
parent | 0c57c750a84abb0f822a6fe8ed4ef051ce6105af (diff) | |
download | mariadb-git-2aa572433b9ce47a511958ce263c8400c2e81ac3.tar.gz |
ha_innobase.cc, ha_innobase.h, handler.h, handler.cc, sql_class.h, log.cc:
Tell table handlers where a binlog segment for a trx ends
sql/log.cc:
Tell table handlers where a binlog segment for a trx ends
sql/sql_class.h:
Tell table handlers where a binlog segment for a trx ends
sql/handler.cc:
Tell table handlers where a binlog segment for a trx ends
sql/handler.h:
Tell table handlers where a binlog segment for a trx ends
sql/ha_innobase.h:
Tell table handlers where a binlog segment for a trx ends
sql/ha_innobase.cc:
Tell table handlers where a binlog segment for a trx ends
Diffstat (limited to 'sql/handler.cc')
-rw-r--r-- | sql/handler.cc | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/sql/handler.cc b/sql/handler.cc index 0b493219674..c1e28b0058e 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -257,6 +257,44 @@ int ha_autocommit_or_rollback(THD *thd, int error) DBUG_RETURN(error); } +/* This function is called when MySQL writes the log segment of a transaction +to the binlog. It is called when the LOCK_log mutex is reserved. Here we +communicate to transactional table handlers whta binlog position corresponds +to the current transaction. The handler can store it and in recovery print +to the user, so that the user knows from what position in the binlog to +start possible roll-forward, for example, if the crashed server was a slave +in replication. This function also calls the commit of the table handler, +because the order of trasnactions in the log of the table handler must be +the same as in the binlog. */ + +int ha_report_binlog_offset_and_commit( + THD *thd, /* in: user thread */ + char *log_file_name, /* in: latest binlog file name */ + my_off_t end_offset) /* in: the offset in the binlog file + up to which we wrote */ +{ + THD_TRANS *trans; + int error = 0; + + trans = &thd->transaction.all; + +#ifdef HAVE_INNOBASE_DB + if (trans->innobase_tid) + { + if ((error=innobase_report_binlog_offset_and_commit(thd, + trans->innobase_tid, + log_file_name, + end_offset))) + { + my_error(ER_ERROR_DURING_COMMIT, MYF(0), error); + error=1; + } + trans->innodb_active_trans=0; + } +#endif + + return error; +} int ha_commit_trans(THD *thd, THD_TRANS* trans) { @@ -269,7 +307,7 @@ int ha_commit_trans(THD *thd, THD_TRANS* trans) if (trans == &thd->transaction.all && mysql_bin_log.is_open() && my_b_tell(&thd->transaction.trans_log)) { - mysql_bin_log.write(&thd->transaction.trans_log); + mysql_bin_log.write(thd, &thd->transaction.trans_log); reinit_io_cache(&thd->transaction.trans_log, WRITE_CACHE, (my_off_t) 0, 0, 1); thd->transaction.trans_log.end_of_file= max_binlog_cache_size; |