WL#6755: InnoDB: Use of error logging API in InnoDB
Status: Complete
Today InnoDB only partially use the provided error logging functions. Complete this to get consistent error logging throughout the server (where possible).
There shouldn't be any functional or non-functional changes.
A) Substitute functionality: ----------------------------- A1) Replace all possible occurrence of fprintf(stderr, "") with ib_logf() in InnoDB. A2) Replace all possible occurrence of fputs() that redirect error/warning to stderr stream with ib_logf() in InnoDB. Example from current trunk code: fputs("InnoDB: Error: transaction has a savepoint ", stderr); A3) Given that ib_logf() takes care of emitting timestamp with each message there is no need to call a separate timestamp API before each message logging. (Get rid of ut_print_timestamp). B) New Introduce functionality: ------------------------------ B1) Function/API to convert name into SQL normalized name. With SQL normalized name "/" is replaced with (.) (Based on logic of ut_print_name). std::string ut_get_name( /*==========*/ const trx_t* trx, /*!< in: transaction */ ibool table_id,/*!< in: TRUE=get a table name, FALSE=get other identifier */ const char* name) /*!< in: name */ Example of usage: ib_logf(IB_LOG_LEVEL_ERROR, "table %s is corrupted.", ut_get_name(NULL, TRUE, table->name).c_str()); C) Fixing existing test-cases to handle warning ----------------------------------------------- C1) Fix all mtr testcases (in case of failures) related to warning logging changes by adding warning suppression. --Reason: Before this WL, same error/warning persist in InnoDB, but mtr wasn't quite good enough to capture it, but now after using ib_logf() these error/warning messages are also caught by mtr. D) Removed ut_print_filename(), and use print identifier "%s" for name to print. So file name are now printed without quoted with apostrophes.
Copyright (c) 2000, 2024, Oracle Corporation and/or its affiliates. All rights reserved.