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
d2590281
Commit
d2590281
authored
May 25, 2007
by
tomas@whalegate.ndb.mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug #28525 Node failures in PGMAN at ndbrequire (line 430)
parent
fe8db78b
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
69 additions
and
6 deletions
+69
-6
storage/ndb/src/kernel/blocks/pgman.cpp
storage/ndb/src/kernel/blocks/pgman.cpp
+65
-4
storage/ndb/src/kernel/blocks/pgman.hpp
storage/ndb/src/kernel/blocks/pgman.hpp
+4
-2
No files found.
storage/ndb/src/kernel/blocks/pgman.cpp
View file @
d2590281
...
@@ -123,8 +123,8 @@ Pgman::execREAD_CONFIG_REQ(Signal* signal)
...
@@ -123,8 +123,8 @@ Pgman::execREAD_CONFIG_REQ(Signal* signal)
if
(
page_buffer
>
0
)
if
(
page_buffer
>
0
)
{
{
page_buffer
/=
GLOBAL_PAGE_SIZE
;
// in pages
page_buffer
/=
GLOBAL_PAGE_SIZE
;
// in pages
m_page_entry_pool
.
setSize
(
100
*
page_buffer
);
m_param
.
m_max_pages
=
page_buffer
;
m_param
.
m_max_pages
=
page_buffer
;
m_page_entry_pool
.
setSize
(
m_param
.
m_lirs_stack_mult
*
page_buffer
);
m_param
.
m_max_hot_pages
=
(
page_buffer
*
9
)
/
10
;
m_param
.
m_max_hot_pages
=
(
page_buffer
*
9
)
/
10
;
}
}
...
@@ -141,6 +141,7 @@ Pgman::execREAD_CONFIG_REQ(Signal* signal)
...
@@ -141,6 +141,7 @@ Pgman::execREAD_CONFIG_REQ(Signal* signal)
Pgman
::
Param
::
Param
()
:
Pgman
::
Param
::
Param
()
:
m_max_pages
(
64
),
// smallish for testing
m_max_pages
(
64
),
// smallish for testing
m_lirs_stack_mult
(
10
),
m_max_hot_pages
(
56
),
m_max_hot_pages
(
56
),
m_max_loop_count
(
256
),
m_max_loop_count
(
256
),
m_max_io_waits
(
64
),
m_max_io_waits
(
64
),
...
@@ -301,6 +302,9 @@ Pgman::get_sublist_no(Page_state state)
...
@@ -301,6 +302,9 @@ Pgman::get_sublist_no(Page_state state)
{
{
return
Page_entry
::
SL_LOCKED
;
return
Page_entry
::
SL_LOCKED
;
}
}
if
(
state
==
Page_entry
::
ONSTACK
)
{
return
Page_entry
::
SL_IDLE
;
}
return
Page_entry
::
SL_OTHER
;
return
Page_entry
::
SL_OTHER
;
}
}
...
@@ -415,15 +419,55 @@ Pgman::get_page_entry(Ptr<Page_entry>& ptr, Uint32 file_no, Uint32 page_no)
...
@@ -415,15 +419,55 @@ Pgman::get_page_entry(Ptr<Page_entry>& ptr, Uint32 file_no, Uint32 page_no)
{
{
if
(
find_page_entry
(
ptr
,
file_no
,
page_no
))
if
(
find_page_entry
(
ptr
,
file_no
,
page_no
))
{
{
jam
();
ndbrequire
(
ptr
.
p
->
m_state
!=
0
);
ndbrequire
(
ptr
.
p
->
m_state
!=
0
);
m_stats
.
m_page_hits
++
;
m_stats
.
m_page_hits
++
;
#ifdef VM_TRACE
debugOut
<<
"PGMAN: get_page_entry: found"
<<
endl
;
debugOut
<<
"PGMAN: "
<<
ptr
<<
endl
;
#endif
return
true
;
return
true
;
}
}
if
(
m_page_entry_pool
.
getNoOfFree
()
==
0
)
{
jam
();
Page_sublist
&
pl_idle
=
*
m_page_sublist
[
Page_entry
::
SL_IDLE
];
Ptr
<
Page_entry
>
idle_ptr
;
if
(
pl_idle
.
first
(
idle_ptr
))
{
jam
();
#ifdef VM_TRACE
debugOut
<<
"PGMAN: get_page_entry: re-use idle entry"
<<
endl
;
debugOut
<<
"PGMAN: "
<<
idle_ptr
<<
endl
;
#endif
Page_state
state
=
idle_ptr
.
p
->
m_state
;
ndbrequire
(
state
==
Page_entry
::
ONSTACK
);
Page_stack
&
pl_stack
=
m_page_stack
;
ndbrequire
(
pl_stack
.
hasPrev
(
idle_ptr
));
pl_stack
.
remove
(
idle_ptr
);
state
&=
~
Page_entry
::
ONSTACK
;
set_page_state
(
idle_ptr
,
state
);
ndbrequire
(
idle_ptr
.
p
->
m_state
==
0
);
release_page_entry
(
idle_ptr
);
}
}
if
(
seize_page_entry
(
ptr
,
file_no
,
page_no
))
if
(
seize_page_entry
(
ptr
,
file_no
,
page_no
))
{
{
jam
();
ndbrequire
(
ptr
.
p
->
m_state
==
0
);
ndbrequire
(
ptr
.
p
->
m_state
==
0
);
m_stats
.
m_page_faults
++
;
m_stats
.
m_page_faults
++
;
#ifdef VM_TRACE
debugOut
<<
"PGMAN: get_page_entry: seize"
<<
endl
;
debugOut
<<
"PGMAN: "
<<
ptr
<<
endl
;
#endif
return
true
;
return
true
;
}
}
...
@@ -1929,6 +1973,8 @@ Pgman::verify_page_entry(Ptr<Page_entry> ptr)
...
@@ -1929,6 +1973,8 @@ Pgman::verify_page_entry(Ptr<Page_entry> ptr)
break
;
break
;
case
Page_entry
:
:
SL_LOCKED
:
case
Page_entry
:
:
SL_LOCKED
:
break
;
break
;
case
Page_entry
:
:
SL_IDLE
:
break
;
case
Page_entry
:
:
SL_OTHER
:
case
Page_entry
:
:
SL_OTHER
:
break
;
break
;
default:
default:
...
@@ -1975,8 +2021,11 @@ Pgman::verify_page_lists()
...
@@ -1975,8 +2021,11 @@ Pgman::verify_page_lists()
ndbrequire
(
stack_count
==
pl_stack
.
count
()
||
dump_page_lists
());
ndbrequire
(
stack_count
==
pl_stack
.
count
()
||
dump_page_lists
());
ndbrequire
(
queue_count
==
pl_queue
.
count
()
||
dump_page_lists
());
ndbrequire
(
queue_count
==
pl_queue
.
count
()
||
dump_page_lists
());
Uint32
hot_count
=
0
;
Uint32
hot_bound_count
=
0
;
Uint32
hot_bound_count
=
0
;
Uint32
cold_bound_count
=
0
;
Uint32
cold_bound_count
=
0
;
Uint32
stack_request_count
=
0
;
Uint32
queue_request_count
=
0
;
Uint32
i1
=
RNIL
;
Uint32
i1
=
RNIL
;
for
(
pl_stack
.
first
(
ptr
);
ptr
.
i
!=
RNIL
;
pl_stack
.
next
(
ptr
))
for
(
pl_stack
.
first
(
ptr
);
ptr
.
i
!=
RNIL
;
pl_stack
.
next
(
ptr
))
...
@@ -1987,10 +2036,14 @@ Pgman::verify_page_lists()
...
@@ -1987,10 +2036,14 @@ Pgman::verify_page_lists()
ndbrequire
(
state
&
Page_entry
::
ONSTACK
||
dump_page_lists
());
ndbrequire
(
state
&
Page_entry
::
ONSTACK
||
dump_page_lists
());
if
(
!
pl_stack
.
hasPrev
(
ptr
))
if
(
!
pl_stack
.
hasPrev
(
ptr
))
ndbrequire
(
state
&
Page_entry
::
HOT
||
dump_page_lists
());
ndbrequire
(
state
&
Page_entry
::
HOT
||
dump_page_lists
());
if
(
state
&
Page_entry
::
HOT
&&
if
(
state
&
Page_entry
::
HOT
)
{
state
&
Page_entry
::
BOUND
)
hot_count
++
;
if
(
state
&
Page_entry
::
BOUND
)
hot_bound_count
++
;
hot_bound_count
++
;
}
}
if
(
state
&
Page_entry
::
REQUEST
)
stack_request_count
++
;
}
Uint32
i2
=
RNIL
;
Uint32
i2
=
RNIL
;
for
(
pl_queue
.
first
(
ptr
);
ptr
.
i
!=
RNIL
;
pl_queue
.
next
(
ptr
))
for
(
pl_queue
.
first
(
ptr
);
ptr
.
i
!=
RNIL
;
pl_queue
.
next
(
ptr
))
...
@@ -2001,6 +2054,8 @@ Pgman::verify_page_lists()
...
@@ -2001,6 +2054,8 @@ Pgman::verify_page_lists()
ndbrequire
(
state
&
Page_entry
::
ONQUEUE
||
dump_page_lists
());
ndbrequire
(
state
&
Page_entry
::
ONQUEUE
||
dump_page_lists
());
ndbrequire
(
state
&
Page_entry
::
BOUND
||
dump_page_lists
());
ndbrequire
(
state
&
Page_entry
::
BOUND
||
dump_page_lists
());
cold_bound_count
++
;
cold_bound_count
++
;
if
(
state
&
Page_entry
::
REQUEST
)
queue_request_count
++
;
}
}
Uint32
tot_bound_count
=
Uint32
tot_bound_count
=
...
@@ -2033,7 +2088,11 @@ Pgman::verify_page_lists()
...
@@ -2033,7 +2088,11 @@ Pgman::verify_page_lists()
<<
" cache:"
<<
m_stats
.
m_num_pages
<<
" cache:"
<<
m_stats
.
m_num_pages
<<
"("
<<
locked_bound_count
<<
"L)"
<<
"("
<<
locked_bound_count
<<
"L)"
<<
" stack:"
<<
pl_stack
.
count
()
<<
" stack:"
<<
pl_stack
.
count
()
<<
" hot:"
<<
hot_count
<<
" hot_bound:"
<<
hot_bound_count
<<
" stack_request:"
<<
stack_request_count
<<
" queue:"
<<
pl_queue
.
count
()
<<
" queue:"
<<
pl_queue
.
count
()
<<
" queue_request:"
<<
queue_request_count
<<
" queuewait:"
<<
queuewait_count
<<
endl
;
<<
" queuewait:"
<<
queuewait_count
<<
endl
;
debugOut
<<
"PGMAN:"
;
debugOut
<<
"PGMAN:"
;
...
@@ -2141,6 +2200,8 @@ Pgman::get_sublist_name(Uint32 list_no)
...
@@ -2141,6 +2200,8 @@ Pgman::get_sublist_name(Uint32 list_no)
return
"busy"
;
return
"busy"
;
case
Page_entry
:
:
SL_LOCKED
:
case
Page_entry
:
:
SL_LOCKED
:
return
"locked"
;
return
"locked"
;
case
Page_entry
:
:
SL_IDLE
:
return
"idle"
;
case
Page_entry
:
:
SL_OTHER
:
case
Page_entry
:
:
SL_OTHER
:
return
"other"
;
return
"other"
;
}
}
...
...
storage/ndb/src/kernel/blocks/pgman.hpp
View file @
d2590281
...
@@ -325,8 +325,9 @@ private:
...
@@ -325,8 +325,9 @@ private:
,
SL_CALLBACK_IO
=
4
,
SL_CALLBACK_IO
=
4
,
SL_BUSY
=
5
,
SL_BUSY
=
5
,
SL_LOCKED
=
6
,
SL_LOCKED
=
6
,
SL_OTHER
=
7
,
SL_IDLE
=
7
,
SUBLIST_COUNT
=
8
,
SL_OTHER
=
8
,
SUBLIST_COUNT
=
9
};
};
Uint16
m_file_no
;
// disk page address set at seize
Uint16
m_file_no
;
// disk page address set at seize
...
@@ -401,6 +402,7 @@ private:
...
@@ -401,6 +402,7 @@ private:
struct
Param
{
struct
Param
{
Param
();
Param
();
Uint32
m_max_pages
;
// max number of cache pages
Uint32
m_max_pages
;
// max number of cache pages
Uint32
m_lirs_stack_mult
;
// in m_max_pages (around 3-10)
Uint32
m_max_hot_pages
;
// max hot cache pages (up to 99%)
Uint32
m_max_hot_pages
;
// max hot cache pages (up to 99%)
Uint32
m_max_loop_count
;
// limit purely local loops
Uint32
m_max_loop_count
;
// limit purely local loops
Uint32
m_max_io_waits
;
Uint32
m_max_io_waits
;
...
...
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