Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
2202afd5
Commit
2202afd5
authored
Feb 13, 2018
by
Marko Mäkelä
Browse files
Options
Browse Files
Download
Plain Diff
Merge 10.0 into 10.1
parents
b8854268
c051eaba
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
133 additions
and
8 deletions
+133
-8
mysql-test/suite/innodb/r/read_only_recover_committed.result
mysql-test/suite/innodb/r/read_only_recover_committed.result
+43
-0
mysql-test/suite/innodb/t/read_only_recover_committed.test
mysql-test/suite/innodb/t/read_only_recover_committed.test
+68
-0
storage/innobase/lock/lock0lock.cc
storage/innobase/lock/lock0lock.cc
+4
-1
storage/innobase/trx/trx0trx.cc
storage/innobase/trx/trx0trx.cc
+3
-1
storage/innobase/trx/trx0undo.cc
storage/innobase/trx/trx0undo.cc
+4
-2
storage/xtradb/lock/lock0lock.cc
storage/xtradb/lock/lock0lock.cc
+4
-1
storage/xtradb/trx/trx0trx.cc
storage/xtradb/trx/trx0trx.cc
+3
-1
storage/xtradb/trx/trx0undo.cc
storage/xtradb/trx/trx0undo.cc
+4
-2
No files found.
mysql-test/suite/innodb/r/read_only_recover_committed.result
0 → 100644
View file @
2202afd5
CREATE TABLE t(a INT PRIMARY KEY) ENGINE=InnoDB;
INSERT INTO t VALUES(1);
BEGIN;
INSERT INTO t VALUES(2);
DELETE FROM t WHERE a=2;
# Normal MariaDB shutdown would roll back the above transaction.
# We want the transaction to remain open, so we will kill the server
# after ensuring that any non-transactional files are clean.
FLUSH TABLES;
# Create another transaction that will be recovered as COMMITTED.
BEGIN;
SET DEBUG_SYNC='after_trx_committed_in_memory SIGNAL committed WAIT_FOR ever';
COMMIT;
SET DEBUG_SYNC='now WAIT_FOR committed';
# Ensure that the above incomplete transactions become durable.
SET GLOBAL innodb_flush_log_at_trx_commit=1;
BEGIN;
INSERT INTO t VALUES(-10000);
ROLLBACK;
SELECT * FROM t;
a
1
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM t;
a
1
UPDATE t SET a=3 WHERE a=1;
ERROR HY000: Table 't' is read only
# Starting with MariaDB 10.2, innodb_read_only implies READ UNCOMMITTED.
# In earlier versions, this would return the last committed version
# (empty table)!
SELECT * FROM t;
a
1
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM t;
a
1
SELECT * FROM t;
a
1
DROP TABLE t;
NOT FOUND /Rolled back recovered transaction [^0]/ in mysqld.1.err
mysql-test/suite/innodb/t/read_only_recover_committed.test
0 → 100644
View file @
2202afd5
--
source
include
/
have_innodb
.
inc
--
source
include
/
have_debug
.
inc
--
source
include
/
have_debug_sync
.
inc
# need to restart server
--
source
include
/
not_embedded
.
inc
--
connect
(
con1
,
localhost
,
root
)
CREATE
TABLE
t
(
a
INT
PRIMARY
KEY
)
ENGINE
=
InnoDB
;
INSERT
INTO
t
VALUES
(
1
);
BEGIN
;
# Generate insert_undo log.
INSERT
INTO
t
VALUES
(
2
);
# Generate update_undo log.
DELETE
FROM
t
WHERE
a
=
2
;
--
connect
(
con2
,
localhost
,
root
)
--
echo
# Normal MariaDB shutdown would roll back the above transaction.
--
echo
# We want the transaction to remain open, so we will kill the server
--
echo
# after ensuring that any non-transactional files are clean.
FLUSH
TABLES
;
--
echo
# Create another transaction that will be recovered as COMMITTED.
BEGIN
;
# Generate multiple pages of both insert_undo and update_undo, so that
# the state TRX_UNDO_CACHE will not be chosen.
--
disable_query_log
let
$n
=
10000
;
while
(
$n
)
{
dec
$n
;
eval
INSERT
INTO
t
VALUES
(
-
$n
);
eval
DELETE
FROM
t
WHERE
a
=-
$n
;
}
--
enable_query_log
SET
DEBUG_SYNC
=
'after_trx_committed_in_memory SIGNAL committed WAIT_FOR ever'
;
send
COMMIT
;
connection
default
;
SET
DEBUG_SYNC
=
'now WAIT_FOR committed'
;
--
echo
# Ensure that the above incomplete transactions become durable.
SET
GLOBAL
innodb_flush_log_at_trx_commit
=
1
;
BEGIN
;
INSERT
INTO
t
VALUES
(
-
10000
);
ROLLBACK
;
--
let
$restart_parameters
=
--
innodb
-
force
-
recovery
=
3
--
let
$shutdown_timeout
=
0
--
source
include
/
restart_mysqld
.
inc
--
let
$shutdown_timeout
=
30
--
disconnect
con1
--
disconnect
con2
SELECT
*
FROM
t
;
SET
TRANSACTION
ISOLATION
LEVEL
READ
UNCOMMITTED
;
SELECT
*
FROM
t
;
# refused on MySQL 5.6, MariaDB 10.0, 10.1, but not MariaDB 10.2+
--
error
ER_OPEN_AS_READONLY
UPDATE
t
SET
a
=
3
WHERE
a
=
1
;
--
let
$restart_parameters
=
--
innodb
-
read
-
only
--
source
include
/
restart_mysqld
.
inc
--
echo
# Starting with MariaDB 10.2, innodb_read_only implies READ UNCOMMITTED.
--
echo
# In earlier versions, this would return the last committed version
--
echo
# (empty table)!
SELECT
*
FROM
t
;
SET
TRANSACTION
ISOLATION
LEVEL
READ
UNCOMMITTED
;
SELECT
*
FROM
t
;
--
let
$restart_parameters
=
--
source
include
/
restart_mysqld
.
inc
SELECT
*
FROM
t
;
DROP
TABLE
t
;
let
SEARCH_FILE
=
$MYSQLTEST_VARDIR
/
log
/
mysqld
.
1.
err
;
--
let
SEARCH_PATTERN
=
Rolled
back
recovered
transaction
[
^
0
]
--
source
include
/
search_pattern_in_file
.
inc
storage/innobase/lock/lock0lock.cc
View file @
2202afd5
...
...
@@ -7940,7 +7940,10 @@ lock_trx_release_locks(
}
mutex_exit
(
&
trx_sys
->
mutex
);
}
else
{
ut_ad
(
trx_state_eq
(
trx
,
TRX_STATE_ACTIVE
));
ut_ad
(
trx_state_eq
(
trx
,
TRX_STATE_ACTIVE
)
||
(
trx_state_eq
(
trx
,
TRX_STATE_COMMITTED_IN_MEMORY
)
&&
trx
->
is_recovered
&&
!
UT_LIST_GET_LEN
(
trx
->
lock
.
trx_locks
)));
}
/* The transition of trx->state to TRX_STATE_COMMITTED_IN_MEMORY
...
...
storage/innobase/trx/trx0trx.cc
View file @
2202afd5
/*****************************************************************************
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2015, 201
7
, MariaDB Corporation.
Copyright (c) 2015, 201
8
, MariaDB Corporation.
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
...
...
@@ -1256,6 +1256,8 @@ trx_commit_in_memory(
trx
->
read_view
=
NULL
;
if
(
lsn
)
{
DEBUG_SYNC_C
(
"after_trx_committed_in_memory"
);
if
(
trx
->
insert_undo
!=
NULL
)
{
trx_undo_insert_cleanup
(
trx
);
...
...
storage/innobase/trx/trx0undo.cc
View file @
2202afd5
/*****************************************************************************
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2014, 201
7
, MariaDB Corporation.
Copyright (c) 2014, 201
8
, MariaDB Corporation.
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
...
...
@@ -1989,7 +1989,9 @@ trx_undo_insert_cleanup(
mutex_exit
(
&
(
rseg
->
mutex
));
trx_undo_seg_free
(
undo
);
if
(
!
srv_read_only_mode
)
{
trx_undo_seg_free
(
undo
);
}
mutex_enter
(
&
(
rseg
->
mutex
));
...
...
storage/xtradb/lock/lock0lock.cc
View file @
2202afd5
...
...
@@ -8042,7 +8042,10 @@ lock_trx_release_locks(
}
mutex_exit
(
&
trx_sys
->
mutex
);
}
else
{
ut_ad
(
trx_state_eq
(
trx
,
TRX_STATE_ACTIVE
));
ut_ad
(
trx_state_eq
(
trx
,
TRX_STATE_ACTIVE
)
||
(
trx_state_eq
(
trx
,
TRX_STATE_COMMITTED_IN_MEMORY
)
&&
trx
->
is_recovered
&&
!
UT_LIST_GET_LEN
(
trx
->
lock
.
trx_locks
)));
}
/* The transition of trx->state to TRX_STATE_COMMITTED_IN_MEMORY
...
...
storage/xtradb/trx/trx0trx.cc
View file @
2202afd5
/*****************************************************************************
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2015, 201
7
, MariaDB Corporation.
Copyright (c) 2015, 201
8
, MariaDB Corporation.
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
...
...
@@ -1472,6 +1472,8 @@ trx_commit_in_memory(
if
(
lsn
)
{
ulint
flush_log_at_trx_commit
;
DEBUG_SYNC_C
(
"after_trx_committed_in_memory"
);
if
(
trx
->
insert_undo
!=
NULL
)
{
trx_undo_insert_cleanup
(
trx
);
...
...
storage/xtradb/trx/trx0undo.cc
View file @
2202afd5
/*****************************************************************************
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2014, 201
7
, MariaDB Corporation.
Copyright (c) 2014, 201
8
, MariaDB Corporation.
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
...
...
@@ -1989,7 +1989,9 @@ trx_undo_insert_cleanup(
mutex_exit
(
&
(
rseg
->
mutex
));
trx_undo_seg_free
(
undo
);
if
(
!
srv_read_only_mode
)
{
trx_undo_seg_free
(
undo
);
}
mutex_enter
(
&
(
rseg
->
mutex
));
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment