Details
-
Task
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
Description
As noted in a commit message, we should not avoid writing anything to the TRX_SYS page during normal operation.
We still write some binlog and Galera write-set replication (WSREP) information on each commit to the TRX_SYS page. We do not really have to write this to that page; we can instead use rollback segment header pages (which commit is already modifying anyway).
To facilitate upgrade from older MySQL or MariaDB versions, we must read the information from the TRX_SYS page. Normally this information would be overridden by information that we find in the rollback segment header pages.
We choose pick the newest information from the rollback segment header pages. It is probably simplest to assign a 64-bit sequence number for this purpose, say, TRX_RSEG_COMMIT_INFO. On startup, we would only read this number if TRX_RSEG_FORMAT contains 0. When TRX_RSEG_FORMAT was introduced by repurposing TRX_RSEG_MAX_SIZE we would initialize the unused part of the rollback segment header page to 0.
If TRX_RSEG_FORMAT is 0 and TRX_RSEG_COMMIT_INFO is not 0, we would read the binlog and WSREP metadata into a global variable unless we already saw a bigger TRX_RSEG_COMMIT_INFO in some other rollback segment header page.
Note: 64 bits should be more than enough, because we can only have at most 1<<47 transactions (DB_TRX_ID is 48 bits, and trx_sys.get_max_trx_id() increments at transaction start and commit (actually twice at commit if the MDEV-12894 mysql.transaction_registry table is being udpated).
Upgrade will trivially work: we will first read from the TRX_SYS page, and not find anything in the rollback segment header pages.
Downgrade is trivial too: After MDEV-15132, any new transactions will be blocked, because the rollback segment headers will contain 0 in TRX_RSEG_MAX_SIZE.
Attachments
Issue Links
- causes
-
MDEV-15443 Invalid wsrep XID or binlog position read from the rollback segment
-
- Closed
-
-
MDEV-17458 Unable to Start Galera Node
-
- Closed
-
-
MDEV-22351 InnoDB may report incorrect binlog position information after RESET MASTER
-
- Closed
-
-
MDEV-26672 innodb_undo_log_truncate may cause the transaction ID sequence to be reset
-
- Closed
-
- is blocked by
-
MDEV-15132 Avoid accessing the TRX_SYS page
-
- Closed
-
- relates to
-
MDEV-18454 Assertion `0' failed in ReadView::check_trx_id_sanity upon crash-upgrade from 10.2.6
-
- Closed
-
-
MDEV-33067 SCN(Sequence Commit Number) based MVCC
-
- Open
-
Activity
Field | Original Value | New Value |
---|---|---|
Epic Link | MDEV-14442 [ 64369 ] |
Link |
This issue is blocked by |
Status | Open [ 1 ] | In Progress [ 3 ] |
issue.field.resolutiondate | 2018-02-20 19:40:38.0 | 2018-02-20 19:40:38.335 |
Fix Version/s | 10.3.5 [ 22905 ] | |
Fix Version/s | 10.3 [ 22126 ] | |
Assignee | Thirunarayanan B [ thiru ] | Marko Mäkelä [ marko ] |
Resolution | Fixed [ 1 ] | |
Status | In Progress [ 3 ] | Closed [ 6 ] |
Link |
This issue causes |
Link |
This issue relates to |
Link |
This issue causes |
Link |
This issue causes |
Link |
This issue causes |
Workflow | MariaDB v3 [ 85353 ] | MariaDB v4 [ 133462 ] |
Link | This issue relates to MDEV-33067 [ MDEV-33067 ] |
Discussed with marko about where to add rollback segment information. But we need to find where there is a need
for storing "binlog information". InnoDB have function to print binlog info, nothing more. mariabackup code uses the
binlog information. There is no test coverage for it to prove it is not garbage. Figuring out how to make test case to
reach the code path.