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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
27d23c02
Commit
27d23c02
authored
Aug 01, 2014
by
Jan Lindström
Browse files
Options
Browse Files
Download
Plain Diff
Merged percona-server-5.5.38-35.2.
parents
37ba4f37
a9e8b577
Changes
10
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
98 additions
and
245 deletions
+98
-245
storage/xtradb/btr/btr0cur.c
storage/xtradb/btr/btr0cur.c
+2
-2
storage/xtradb/buf/buf0buf.c
storage/xtradb/buf/buf0buf.c
+26
-77
storage/xtradb/buf/buf0flu.c
storage/xtradb/buf/buf0flu.c
+5
-1
storage/xtradb/buf/buf0lru.c
storage/xtradb/buf/buf0lru.c
+36
-147
storage/xtradb/buf/buf0rea.c
storage/xtradb/buf/buf0rea.c
+6
-2
storage/xtradb/handler/ha_innodb.cc
storage/xtradb/handler/ha_innodb.cc
+5
-5
storage/xtradb/include/buf0buf.ic
storage/xtradb/include/buf0buf.ic
+5
-0
storage/xtradb/include/buf0lru.h
storage/xtradb/include/buf0lru.h
+1
-2
storage/xtradb/include/univ.i
storage/xtradb/include/univ.i
+2
-2
storage/xtradb/row/row0ins.c
storage/xtradb/row/row0ins.c
+10
-7
No files found.
storage/xtradb/btr/btr0cur.c
View file @
27d23c02
...
...
@@ -4428,7 +4428,7 @@ btr_blob_free(
&&
buf_block_get_space
(
block
)
==
space
&&
buf_block_get_page_no
(
block
)
==
page_no
)
{
if
(
!
buf_LRU_free_block
(
&
block
->
page
,
(
void
*
)
&
block
->
mutex
,
all
,
&
have_LRU_mutex
)
if
(
!
buf_LRU_free_block
(
&
block
->
page
,
all
,
TRUE
)
&&
all
&&
block
->
page
.
zip
.
data
/* Now, buf_LRU_free_block() may release mutex temporarily */
&&
buf_block_get_state
(
block
)
==
BUF_BLOCK_FILE_PAGE
...
...
@@ -4437,7 +4437,7 @@ btr_blob_free(
/* Attempt to deallocate the uncompressed page
if the whole block cannot be deallocted. */
buf_LRU_free_block
(
&
block
->
page
,
(
void
*
)
&
block
->
mutex
,
FALSE
,
&
have_LRU_mutex
);
buf_LRU_free_block
(
&
block
->
page
,
FALSE
,
TRUE
);
}
}
...
...
storage/xtradb/buf/buf0buf.c
View file @
27d23c02
...
...
@@ -1600,6 +1600,12 @@ buf_pool_watch_is_sentinel(
buf_pool_t
*
buf_pool
,
/*!< buffer pool instance */
const
buf_page_t
*
bpage
)
/*!< in: block */
{
#ifdef UNIV_SYNC_DEBUG
ut_ad
(
rw_lock_own
(
&
buf_pool
->
page_hash_latch
,
RW_LOCK_SHARED
)
||
rw_lock_own
(
&
buf_pool
->
page_hash_latch
,
RW_LOCK_EX
)
||
mutex_own
(
buf_page_get_mutex
(
bpage
)));
#endif
ut_ad
(
buf_page_in_file
(
bpage
));
if
(
bpage
<
&
buf_pool
->
watch
[
0
]
...
...
@@ -1976,7 +1982,6 @@ buf_page_get_zip(
ib_uint64_t
start_time
;
ib_uint64_t
finish_time
;
buf_pool_t
*
buf_pool
=
buf_pool_get
(
space
,
offset
);
ibool
have_LRU_mutex
=
FALSE
;
if
(
UNIV_UNLIKELY
(
innobase_get_slow_log
()))
{
trx
=
innobase_get_trx
();
...
...
@@ -2048,40 +2053,33 @@ err_exit:
mutex_exit
(
block_mutex
);
/* get LRU_list_mutex for buf_LRU_free_block() */
if
(
!
have_LRU_mutex
)
{
ut_ad
(
!
mutex_own
(
&
buf_pool
->
LRU_list_mutex
));
mutex_enter
(
&
buf_pool
->
LRU_list_mutex
);
have_LRU_mutex
=
TRUE
;
}
mutex_enter
(
block_mutex
);
if
(
UNIV_UNLIKELY
(
bpage
->
space
!=
space
if
(
UNIV_UNLIKELY
((
buf_page_get_state
(
bpage
)
!=
BUF_BLOCK_FILE_PAGE
)
||
bpage
->
space
!=
space
||
bpage
->
offset
!=
offset
||
!
bpage
->
in_LRU_list
||
!
bpage
->
zip
.
data
))
{
/* someone should interrupt, retry */
if
(
have_LRU_mutex
)
{
ut_ad
(
mutex_own
(
&
buf_pool
->
LRU_list_mutex
));
mutex_exit
(
&
buf_pool
->
LRU_list_mutex
);
have_LRU_mutex
=
FALSE
;
}
mutex_exit
(
block_mutex
);
goto
lookup
;
}
/* Discard the uncompressed page frame if possible. */
if
(
buf_LRU_free_block
(
bpage
,
(
void
*
)
block_mutex
,
FALSE
,
&
have_LRU_mutex
))
{
if
(
have_LRU_mutex
)
{
if
(
buf_LRU_free_block
(
bpage
,
FALSE
,
TRUE
))
{
ut_ad
(
mutex_own
(
&
buf_pool
->
LRU_list_mutex
));
mutex_exit
(
&
buf_pool
->
LRU_list_mutex
);
have_LRU_mutex
=
FALSE
;
}
mutex_exit
(
block_mutex
);
goto
lookup
;
}
if
(
have_LRU_mutex
)
{
ut_ad
(
mutex_own
(
&
buf_pool
->
LRU_list_mutex
));
mutex_exit
(
&
buf_pool
->
LRU_list_mutex
);
have_LRU_mutex
=
FALSE
;
}
buf_block_buf_fix_inc
((
buf_block_t
*
)
bpage
,
__FILE__
,
__LINE__
);
...
...
@@ -2464,7 +2462,6 @@ buf_page_get_gen(
ib_uint64_t
start_time
;
ib_uint64_t
finish_time
;
buf_pool_t
*
buf_pool
=
buf_pool_get
(
space
,
offset
);
ibool
have_LRU_mutex
=
FALSE
;
ut_ad
(
mtr
);
ut_ad
(
mtr
->
state
==
MTR_ACTIVE
);
...
...
@@ -2566,21 +2563,9 @@ loop2:
||
mode
==
BUF_PEEK_IF_IN_POOL
||
mode
==
BUF_GET_IF_IN_POOL_OR_WATCH
)
{
if
(
have_LRU_mutex
)
{
mutex_exit
(
&
buf_pool
->
LRU_list_mutex
);
have_LRU_mutex
=
FALSE
;
}
return
(
NULL
);
}
/* We should not hold LRU mutex below when trying
to read the page */
if
(
have_LRU_mutex
)
{
mutex_exit
(
&
buf_pool
->
LRU_list_mutex
);
have_LRU_mutex
=
FALSE
;
}
if
(
buf_read_page
(
space
,
zip_size
,
offset
,
trx
))
{
buf_read_ahead_random
(
space
,
zip_size
,
offset
,
ibuf_inside
(
mtr
),
trx
);
...
...
@@ -2633,11 +2618,6 @@ null_exit:
//buf_pool_mutex_exit(buf_pool);
mutex_exit
(
block_mutex
);
if
(
have_LRU_mutex
)
{
mutex_exit
(
&
buf_pool
->
LRU_list_mutex
);
have_LRU_mutex
=
FALSE
;
}
return
(
NULL
);
}
...
...
@@ -2646,11 +2626,6 @@ null_exit:
mutex_exit
(
block_mutex
);
if
(
have_LRU_mutex
)
{
mutex_exit
(
&
buf_pool
->
LRU_list_mutex
);
have_LRU_mutex
=
FALSE
;
}
return
(
NULL
);
}
...
...
@@ -2711,12 +2686,8 @@ wait_until_unfixed:
ut_a
(
block
);
block_mutex
=
&
block
->
mutex
;
//buf_pool_mutex_enter(buf_pool);
if
(
!
have_LRU_mutex
)
{
ut_ad
(
!
mutex_own
(
&
buf_pool
->
LRU_list_mutex
));
mutex_enter
(
&
buf_pool
->
LRU_list_mutex
);
have_LRU_mutex
=
TRUE
;
}
rw_lock_x_lock
(
&
buf_pool
->
page_hash_latch
);
mutex_enter
(
&
block
->
mutex
);
mutex_enter
(
&
buf_pool
->
zip_mutex
);
...
...
@@ -2740,10 +2711,8 @@ wait_until_unfixed:
rw_lock_x_unlock
(
&
buf_pool
->
page_hash_latch
);
if
(
have_LRU_mutex
)
{
ut_ad
(
mutex_own
(
&
buf_pool
->
LRU_list_mutex
));
mutex_exit
(
&
buf_pool
->
LRU_list_mutex
);
have_LRU_mutex
=
FALSE
;
}
goto
wait_until_unfixed
;
}
...
...
@@ -2782,10 +2751,8 @@ wait_until_unfixed:
/* Insert at the front of unzip_LRU list */
buf_unzip_LRU_add_block
(
block
,
FALSE
);
if
(
have_LRU_mutex
)
{
ut_ad
(
mutex_own
(
&
buf_pool
->
LRU_list_mutex
));
mutex_exit
(
&
buf_pool
->
LRU_list_mutex
);
have_LRU_mutex
=
FALSE
;
}
block
->
page
.
buf_fix_count
=
1
;
buf_block_set_io_fix
(
block
,
BUF_IO_READ
);
...
...
@@ -2859,12 +2826,7 @@ wait_until_unfixed:
insert buffer (change buffer) as much as possible. */
ulint
page_no
=
buf_block_get_page_no
(
block
);
if
(
!
have_LRU_mutex
)
{
mutex_enter
(
&
buf_pool
->
LRU_list_mutex
);
have_LRU_mutex
=
TRUE
;
}
if
(
buf_LRU_free_block
(
&
block
->
page
,
(
void
*
)
block_mutex
,
TRUE
,
&
have_LRU_mutex
))
{
if
(
buf_LRU_free_block
(
&
block
->
page
,
TRUE
,
FALSE
))
{
mutex_exit
(
block_mutex
);
if
(
mode
==
BUF_GET_IF_IN_POOL_OR_WATCH
)
{
/* Set the watch, as it would have
...
...
@@ -2889,11 +2851,6 @@ wait_until_unfixed:
"innodb_change_buffering_debug evict %u %u
\n
"
,
(
unsigned
)
space
,
(
unsigned
)
offset
);
if
(
have_LRU_mutex
){
mutex_exit
(
&
buf_pool
->
LRU_list_mutex
);
have_LRU_mutex
=
FALSE
;
}
return
(
NULL
);
}
else
if
(
UNIV_UNLIKELY
(
buf_block_get_state
(
block
)
!=
BUF_BLOCK_FILE_PAGE
...
...
@@ -2910,10 +2867,7 @@ wait_until_unfixed:
}
else
{
/* We should not hold LRU mutex below when trying
to flush page */
if
(
have_LRU_mutex
)
{
mutex_exit
(
&
buf_pool
->
LRU_list_mutex
);
have_LRU_mutex
=
FALSE
;
}
ut_ad
(
!
mutex_own
(
&
buf_pool
->
LRU_list_mutex
));
if
(
buf_flush_page_try
(
buf_pool
,
block
))
{
fprintf
(
stderr
,
...
...
@@ -3022,11 +2976,6 @@ wait_until_unfixed:
_increment_page_get_statistics
(
block
,
trx
);
}
if
(
have_LRU_mutex
)
{
mutex_exit
(
&
buf_pool
->
LRU_list_mutex
);
have_LRU_mutex
=
FALSE
;
}
return
(
block
);
}
...
...
storage/xtradb/buf/buf0flu.c
View file @
27d23c02
...
...
@@ -1606,7 +1606,11 @@ buf_flush_page_and_try_neighbors(
}
ut_a
(
buf_page_in_file
(
bpage
)
||
buf_page_get_state
(
bpage
)
==
BUF_BLOCK_REMOVE_HASH
);
||
(
buf_page_get_state
(
bpage
)
==
BUF_BLOCK_REMOVE_HASH
#ifdef UNIV_DEBUG
&&
!
mutex_own
(
&
buf_pool
->
LRU_list_mutex
)
#endif
));
if
(
buf_flush_ready_for_flush
(
bpage
,
flush_type
))
{
ulint
space
;
...
...
storage/xtradb/buf/buf0lru.c
View file @
27d23c02
This diff is collapsed.
Click to expand it.
storage/xtradb/buf/buf0rea.c
View file @
27d23c02
...
...
@@ -340,9 +340,13 @@ buf_read_ahead_random(
return
(
0
);
}
buf_pool_mutex_exit
(
buf_pool
);
/* Count how many blocks in the area have been recently accessed,
that is, reside near the start of the LRU list. */
rw_lock_s_lock
(
&
buf_pool
->
page_hash_latch
);
for
(
i
=
low
;
i
<
high
;
i
++
)
{
const
buf_page_t
*
bpage
=
buf_page_hash_get
(
buf_pool
,
space
,
i
);
...
...
@@ -356,13 +360,13 @@ buf_read_ahead_random(
if
(
recent_blocks
>=
BUF_READ_AHEAD_RANDOM_THRESHOLD
(
buf_pool
))
{
buf_pool_mutex_exit
(
buf_pool
);
rw_lock_s_unlock
(
&
buf_pool
->
page_hash_latch
);
goto
read_ahead
;
}
}
}
buf_pool_mutex_exit
(
buf_pool
);
rw_lock_s_unlock
(
&
buf_pool
->
page_hash_latch
);
/* Do nothing */
return
(
0
);
...
...
storage/xtradb/handler/ha_innodb.cc
View file @
27d23c02
...
...
@@ -12693,9 +12693,9 @@ innodb_buffer_pool_evict_update(
for
(
ulint
i
=
0
;
i
<
srv_buf_pool_instances
;
i
++
)
{
buf_pool_t
*
buf_pool
=
&
buf_pool_ptr
[
i
];
ibool
have_LRU_mutex
=
TRUE
;
//buf_pool_mutex_enter(buf_pool);
ut_ad
(
!
mutex_own
(
&
buf_pool
->
LRU_list_mutex
));
mutex_enter
(
&
buf_pool
->
LRU_list_mutex
);
for
(
buf_block_t
*
block
=
UT_LIST_GET_LAST
(
...
...
@@ -12711,15 +12711,15 @@ innodb_buffer_pool_evict_update(
ut_ad
(
block
->
page
.
in_LRU_list
);
mutex_enter
(
&
block
->
mutex
);
ut_ad
(
mutex_own
(
&
buf_pool
->
LRU_list_mutex
));
buf_LRU_free_block
(
&
block
->
page
,
(
void
*
)
&
block
->
mutex
,
FALSE
,
&
have_LRU_mutex
);
FALSE
,
TRUE
);
mutex_exit
(
&
block
->
mutex
);
block
=
prev_block
;
}
if
(
have_LRU_mutex
)
{
ut_ad
(
mutex_own
(
&
buf_pool
->
LRU_list_mutex
));
mutex_exit
(
&
buf_pool
->
LRU_list_mutex
);
}
//buf_pool_mutex_exit(buf_pool);
}
}
...
...
storage/xtradb/include/buf0buf.ic
View file @
27d23c02
...
...
@@ -689,6 +689,11 @@ buf_page_get_block(
/*===============*/
buf_page_t* bpage) /*!< in: control block, or NULL */
{
#ifdef UNIV_SYNC_DEBUG
buf_pool_t* buf_pool = buf_pool_from_bpage(bpage);
ut_ad(rw_lock_own(&buf_pool->page_hash_latch, RW_LOCK_SHARED)
|| rw_lock_own(&buf_pool->page_hash_latch, RW_LOCK_EX));
#endif
if (UNIV_LIKELY(bpage != NULL)) {
ut_ad(buf_page_in_file(bpage));
...
...
storage/xtradb/include/buf0lru.h
View file @
27d23c02
...
...
@@ -99,10 +99,9 @@ ibool
buf_LRU_free_block
(
/*===============*/
buf_page_t
*
bpage
,
/*!< in: block to be freed */
void
*
block_mutex
,
/*!< in: block mutex or NULL */
ibool
zip
,
/*!< in: TRUE if should remove also the
compressed page of an uncompressed page */
ibool
*
have_LRU_mutex
)
ibool
have_LRU_mutex
)
__attribute__
((
nonnull
));
/******************************************************************//**
Try to free a replaceable block.
...
...
storage/xtradb/include/univ.i
View file @
27d23c02
...
...
@@ -64,10 +64,10 @@ component, i.e. we show M.N.P as M.N */
(
INNODB_VERSION_MAJOR
<<
8
|
INNODB_VERSION_MINOR
)
#
ifndef
PERCONA_INNODB_VERSION
#
define
PERCONA_INNODB_VERSION
35.
0
#
define
PERCONA_INNODB_VERSION
35.
2
#
endif
#
define
INNODB_VERSION_STR
"5.5.3
7
-MariaDB-"
IB_TO_STR
(
PERCONA_INNODB_VERSION
)
#
define
INNODB_VERSION_STR
"5.5.3
8
-MariaDB-"
IB_TO_STR
(
PERCONA_INNODB_VERSION
)
#
define
REFMAN
"http://dev.mysql.com/doc/refman/"
\
IB_TO_STR
(
MYSQL_MAJOR_VERSION
)
"."
\
...
...
storage/xtradb/row/row0ins.c
View file @
27d23c02
...
...
@@ -143,6 +143,7 @@ row_ins_alloc_sys_fields(
const
dict_col_t
*
col
;
dfield_t
*
dfield
;
byte
*
ptr
;
uint
len
;
row
=
node
->
row
;
table
=
node
->
table
;
...
...
@@ -151,35 +152,37 @@ row_ins_alloc_sys_fields(
ut_ad
(
row
&&
table
&&
heap
);
ut_ad
(
dtuple_get_n_fields
(
row
)
==
dict_table_get_n_cols
(
table
));
/* 1. Allocate buffer for row id */
/* allocate buffer to hold the needed system created hidden columns. */
len
=
DATA_ROW_ID_LEN
+
DATA_TRX_ID_LEN
+
DATA_ROLL_PTR_LEN
;
ptr
=
mem_heap_zalloc
(
heap
,
len
);
/* 1. Populate row-id */
col
=
dict_table_get_sys_col
(
table
,
DATA_ROW_ID
);
dfield
=
dtuple_get_nth_field
(
row
,
dict_col_get_no
(
col
));
ptr
=
mem_heap_zalloc
(
heap
,
DATA_ROW_ID_LEN
);
dfield_set_data
(
dfield
,
ptr
,
DATA_ROW_ID_LEN
);
node
->
row_id_buf
=
ptr
;
/* 3. Allocate buffer for trx id */
ptr
+=
DATA_ROW_ID_LEN
;
/* 2. Populate trx id */
col
=
dict_table_get_sys_col
(
table
,
DATA_TRX_ID
);
dfield
=
dtuple_get_nth_field
(
row
,
dict_col_get_no
(
col
));
ptr
=
mem_heap_zalloc
(
heap
,
DATA_TRX_ID_LEN
);
dfield_set_data
(
dfield
,
ptr
,
DATA_TRX_ID_LEN
);
node
->
trx_id_buf
=
ptr
;
/* 4. Allocate buffer for roll ptr */
ptr
+=
DATA_TRX_ID_LEN
;
/* 3. Populate roll ptr */
col
=
dict_table_get_sys_col
(
table
,
DATA_ROLL_PTR
);
dfield
=
dtuple_get_nth_field
(
row
,
dict_col_get_no
(
col
));
ptr
=
mem_heap_zalloc
(
heap
,
DATA_ROLL_PTR_LEN
);
dfield_set_data
(
dfield
,
ptr
,
DATA_ROLL_PTR_LEN
);
}
...
...
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