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
3134d9dc
Commit
3134d9dc
authored
Jun 24, 2011
by
Michael Widenius
Browse files
Options
Browse Files
Download
Plain Diff
Automatic merge
parents
f77bfdcf
9e8c92cb
Changes
17
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
699 additions
and
383 deletions
+699
-383
mysql-test/r/join.result
mysql-test/r/join.result
+19
-0
mysql-test/r/plugin_innodb.result
mysql-test/r/plugin_innodb.result
+11
-0
mysql-test/suite/funcs_1/r/processlist_priv_ps.result
mysql-test/suite/funcs_1/r/processlist_priv_ps.result
+83
-81
mysql-test/suite/funcs_1/r/processlist_val_ps.result
mysql-test/suite/funcs_1/r/processlist_val_ps.result
+192
-90
mysql-test/suite/maria/r/maria-recovery3.result
mysql-test/suite/maria/r/maria-recovery3.result
+1
-1
mysql-test/t/join.test
mysql-test/t/join.test
+18
-0
mysql-test/t/plugin_innodb.test
mysql-test/t/plugin_innodb.test
+27
-0
sql/mysqld.cc
sql/mysqld.cc
+2
-1
sql/sql_plugin.cc
sql/sql_plugin.cc
+24
-16
sql/sql_select.cc
sql/sql_select.cc
+21
-0
storage/heap/hp_test2.c
storage/heap/hp_test2.c
+1
-1
storage/maria/ma_bitmap.c
storage/maria/ma_bitmap.c
+54
-26
storage/maria/ma_check.c
storage/maria/ma_check.c
+15
-7
storage/maria/ma_pagecache.c
storage/maria/ma_pagecache.c
+183
-96
storage/myisam/ha_myisam.cc
storage/myisam/ha_myisam.cc
+5
-5
storage/myisam/mi_check.c
storage/myisam/mi_check.c
+34
-29
storage/pbxt/src/pthread_xt.cc
storage/pbxt/src/pthread_xt.cc
+9
-30
No files found.
mysql-test/r/join.result
View file @
3134d9dc
drop table if exists t1,t2,t3;
drop view if exists v1,v2;
CREATE TABLE t1 (S1 INT);
CREATE TABLE t2 (S1 INT);
INSERT INTO t1 VALUES (1);
...
...
@@ -1220,4 +1221,22 @@ f1
2
DEALLOCATE PREPARE stmt;
DROP TABLE t1;
#
# Bug LP:798597: Incorrect "Duplicate entry" error with views and
# GROUP BY
#
CREATE TABLE t1 ( f1 int NOT NULL , f2 int NOT NULL ) ;
INSERT INTO t1 VALUES (214,0),(6,6);
CREATE TABLE t2 ( f2 int) ;
INSERT INTO t2 VALUES (88),(88);
CREATE ALGORITHM=MERGE VIEW v1 AS SELECT t1.f1, t2.f2 FROM (t2 LEFT JOIN t1 ON (t2.f2 <> t1.f1)) WHERE (t1.f2 <= 0) ;
CREATE ALGORITHM=MERGE VIEW v2 AS SELECT t1.f1, t2.f2 FROM (t2 LEFT JOIN t1 ON (t2.f2 <> t1.f1)) WHERE (t1.f2 <= 0 or t1.f2 is null) ;
SELECT f1 , MIN(f2) FROM v1 GROUP BY f1;
f1 MIN(f2)
214 88
SELECT f1 , MIN(f2) FROM v2 GROUP BY f1;
f1 MIN(f2)
214 88
drop table t1,t2;
drop view v1,v2;
End of 5.1 tests
mysql-test/r/plugin_innodb.result
0 → 100644
View file @
3134d9dc
install plugin example soname 'ha_example.so';
create table t1(a int) engine=example;
drop table t1;
alter table mysql.plugin engine=innodb;
restart
create table t1(a int) engine=example;
select * from t1;
a
drop table t1;
alter table mysql.plugin engine=myisam;
uninstall plugin example;
mysql-test/suite/funcs_1/r/processlist_priv_ps.result
View file @
3134d9dc
This diff is collapsed.
Click to expand it.
mysql-test/suite/funcs_1/r/processlist_val_ps.result
View file @
3134d9dc
This source diff could not be displayed because it is too large. You can
view the blob
instead.
mysql-test/suite/maria/r/maria-recovery3.result
View file @
3134d9dc
...
...
@@ -78,7 +78,7 @@ ERROR HY000: Lost connection to MySQL server during query
* recovery happens
check table t1 extended;
Table Op Msg_type Msg_text
mysqltest.t1 check warning Size of indexfile is: 372
Should be
: 8192
mysqltest.t1 check warning Size of indexfile is: 372
Expected
: 8192
mysqltest.t1 check status OK
* testing that checksum after recovery is as expected
Checksum-check
...
...
mysql-test/t/join.test
View file @
3134d9dc
...
...
@@ -2,6 +2,7 @@
# Initialization
--
disable_warnings
drop
table
if
exists
t1
,
t2
,
t3
;
drop
view
if
exists
v1
,
v2
;
--
enable_warnings
#
...
...
@@ -921,4 +922,21 @@ EXECUTE stmt;
DEALLOCATE
PREPARE
stmt
;
DROP
TABLE
t1
;
--
echo
#
--
echo
# Bug LP:798597: Incorrect "Duplicate entry" error with views and
--
echo
# GROUP BY
--
echo
#
CREATE
TABLE
t1
(
f1
int
NOT
NULL
,
f2
int
NOT
NULL
)
;
INSERT
INTO
t1
VALUES
(
214
,
0
),(
6
,
6
);
CREATE
TABLE
t2
(
f2
int
)
;
INSERT
INTO
t2
VALUES
(
88
),(
88
);
CREATE
ALGORITHM
=
MERGE
VIEW
v1
AS
SELECT
t1
.
f1
,
t2
.
f2
FROM
(
t2
LEFT
JOIN
t1
ON
(
t2
.
f2
<>
t1
.
f1
))
WHERE
(
t1
.
f2
<=
0
)
;
CREATE
ALGORITHM
=
MERGE
VIEW
v2
AS
SELECT
t1
.
f1
,
t2
.
f2
FROM
(
t2
LEFT
JOIN
t1
ON
(
t2
.
f2
<>
t1
.
f1
))
WHERE
(
t1
.
f2
<=
0
or
t1
.
f2
is
null
)
;
SELECT
f1
,
MIN
(
f2
)
FROM
v1
GROUP
BY
f1
;
SELECT
f1
,
MIN
(
f2
)
FROM
v2
GROUP
BY
f1
;
drop
table
t1
,
t2
;
drop
view
v1
,
v2
;
--
echo
End
of
5.1
tests
mysql-test/t/plugin_innodb.test
0 → 100644
View file @
3134d9dc
--
source
include
/
not_embedded
.
inc
--
source
include
/
have_example_plugin
.
inc
--
source
include
/
have_innodb
.
inc
if
(
!
`select count(*) from information_schema.plugins
where plugin_name = 'innodb' and plugin_status = 'active' and
plugin_library is null`
)
{
skip
Need
compiled
-
in
InnoDB
;
}
--
replace_regex
/
\
.
dll
/.
so
/
eval
install
plugin
example
soname
'$HA_EXAMPLE_SO'
;
create
table
t1
(
a
int
)
engine
=
example
;
drop
table
t1
;
alter
table
mysql
.
plugin
engine
=
innodb
;
--
echo
restart
--
source
include
/
restart_mysqld
.
inc
create
table
t1
(
a
int
)
engine
=
example
;
select
*
from
t1
;
drop
table
t1
;
alter
table
mysql
.
plugin
engine
=
myisam
;
uninstall
plugin
example
;
sql/mysqld.cc
View file @
3134d9dc
...
...
@@ -3048,7 +3048,8 @@ int my_message_sql(uint error, const char *str, myf MyFlags)
{
/* At least, prevent new abuse ... */
DBUG_ASSERT
(
strncmp
(
str
,
"MyISAM table"
,
12
)
==
0
||
strncmp
(
str
,
"Aria table"
,
11
)
==
0
);
strncmp
(
str
,
"Aria table"
,
11
)
==
0
||
(
MyFlags
&
ME_JUST_INFO
));
error
=
ER_UNKNOWN_ERROR
;
}
...
...
sql/sql_plugin.cc
View file @
3134d9dc
...
...
@@ -1432,15 +1432,23 @@ int plugin_init(int *argc, char **argv, int flags)
if
(
register_builtin
(
plugin
,
&
tmp
,
&
plugin_ptr
))
goto
err_unlock
;
/* only initialize MyISAM and CSV at this stage */
if
(
!
(
is_myisam
=
!
my_strcasecmp
(
&
my_charset_latin1
,
plugin
->
name
,
"MyISAM"
))
&&
my_strcasecmp
(
&
my_charset_latin1
,
plugin
->
name
,
"CSV"
))
continue
;
is_myisam
=
!
my_strcasecmp
(
&
my_charset_latin1
,
plugin
->
name
,
"MyISAM"
);
if
(
plugin_ptr
->
state
==
PLUGIN_IS_UNINITIALIZED
&&
plugin_initialize
(
plugin_ptr
))
goto
err_unlock
;
/*
strictly speaking, we should to initialize all plugins,
even for mysqld --help, because important subsystems
may be disabled otherwise, and the help will be incomplete.
For example, if the mysql.plugin table is not MyISAM.
But for now it's an unlikely corner case, and to optimize
mysqld --help for all other users, we will only initialize
MyISAM here.
*/
if
(
!
(
flags
&
PLUGIN_INIT_SKIP_INITIALIZATION
)
||
is_myisam
)
{
if
(
plugin_ptr
->
state
==
PLUGIN_IS_UNINITIALIZED
&&
plugin_initialize
(
plugin_ptr
))
goto
err_unlock
;
}
/*
initialize the global default storage engine so that it may
...
...
@@ -1650,13 +1658,6 @@ static void plugin_load(MEM_ROOT *tmp_root, int *argc, char **argv)
goto
end
;
}
table
->
use_all_columns
();
/*
there're no other threads running yet, so we don't need a mutex.
but plugin_add() before is designed to work in multi-threaded
environment, and it uses safe_mutex_assert_owner(), so we lock
the mutex here to satisfy the assert
*/
pthread_mutex_lock
(
&
LOCK_plugin
);
while
(
!
(
error
=
read_record_info
.
read_record
(
&
read_record_info
)))
{
DBUG_PRINT
(
"info"
,
(
"init plugin record"
));
...
...
@@ -1667,12 +1668,19 @@ static void plugin_load(MEM_ROOT *tmp_root, int *argc, char **argv)
LEX_STRING
name
=
{(
char
*
)
str_name
.
ptr
(),
str_name
.
length
()};
LEX_STRING
dl
=
{(
char
*
)
str_dl
.
ptr
(),
str_dl
.
length
()};
/*
there're no other threads running yet, so we don't need a mutex.
but plugin_add() before is designed to work in multi-threaded
environment, and it uses safe_mutex_assert_owner(), so we lock
the mutex here to satisfy the assert
*/
pthread_mutex_lock
(
&
LOCK_plugin
);
if
(
plugin_add
(
tmp_root
,
&
name
,
&
dl
,
argc
,
argv
,
REPORT_TO_LOG
))
sql_print_warning
(
"Couldn't load plugin named '%s' with soname '%s'."
,
str_name
.
c_ptr
(),
str_dl
.
c_ptr
());
free_root
(
tmp_root
,
MYF
(
MY_MARK_BLOCKS_FREE
));
pthread_mutex_unlock
(
&
LOCK_plugin
);
}
pthread_mutex_unlock
(
&
LOCK_plugin
);
if
(
error
>
0
)
sql_print_error
(
ER
(
ER_GET_ERRNO
),
my_errno
);
end_read_record
(
&
read_record_info
);
...
...
sql/sql_select.cc
View file @
3134d9dc
...
...
@@ -10645,15 +10645,30 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
(
ha_base_keytype
)
key_part_info
->
type
==
HA_KEYTYPE_VARTEXT1
||
(
ha_base_keytype
)
key_part_info
->
type
==
HA_KEYTYPE_VARTEXT2
)
?
0
:
FIELDFLAG_BINARY
;
if
(
!
using_unique_constraint
)
{
cur_group
->
buff
=
(
char
*
)
group_buff
;
if
(
maybe_null
&&
!
field
->
null_bit
)
{
/*
This can only happen in the unusual case where an outer join
table was found to be not-nullable by the optimizer and we
the item can't really be null.
We solve this by marking the item as !maybe_null to ensure
that the key,field and item definition match.
*/
(
*
cur_group
->
item
)
->
maybe_null
=
maybe_null
=
0
;
}
if
(
!
(
cur_group
->
field
=
field
->
new_key_field
(
thd
->
mem_root
,
table
,
group_buff
+
test
(
maybe_null
),
field
->
null_ptr
,
field
->
null_bit
)))
goto
err
;
/* purecov: inspected */
if
(
maybe_null
)
{
/*
...
...
@@ -10675,6 +10690,12 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
}
keyinfo
->
key_length
+=
key_part_info
->
length
;
}
/*
Ensure we didn't overrun the group buffer. The < is only true when
some maybe_null fields was changed to be not null fields.
*/
DBUG_ASSERT
(
using_unique_constraint
||
group_buff
<=
param
->
group_buff
+
param
->
group_length
);
}
if
(
distinct
&&
field_count
!=
param
->
hidden_field_count
)
...
...
storage/heap/hp_test2.c
View file @
3134d9dc
...
...
@@ -22,7 +22,7 @@
#undef DBUG_OFF
#endif
#ifndef SAFEMALLOC
#define SAFEMALLOC
#define SAFEMALLOC
1
#endif
#include "heapdef.h"
/* Because of hp_find_block */
...
...
storage/maria/ma_bitmap.c
View file @
3134d9dc
...
...
@@ -310,6 +310,31 @@ my_bool _ma_bitmap_end(MARIA_SHARE *share)
return
res
;
}
/*
Ensure that we have incremented open count before we try to read/write
a page while we have the bitmap lock.
This is needed to ensure that we don't call _ma_mark_file_changed() as
part of flushing a page to disk, as this locks share->internal_lock
and then mutex lock would happen in the wrong order.
*/
static
inline
void
_ma_bitmap_mark_file_changed
(
MARIA_SHARE
*
share
)
{
/*
It's extremely unlikely that the following test is true as it
only happens once if the table has changed.
*/
if
(
unlikely
(
!
share
->
global_changed
&&
(
share
->
state
.
changed
&
STATE_CHANGED
)))
{
/* purecov: begin inspected */
/* unlock mutex as it can't be hold during _ma_mark_file_changed() */
pthread_mutex_unlock
(
&
share
->
bitmap
.
bitmap_lock
);
_ma_mark_file_changed
(
share
);
pthread_mutex_lock
(
&
share
->
bitmap
.
bitmap_lock
);
/* purecov: end */
}
}
/*
Send updated bitmap to the page cache
...
...
@@ -413,24 +438,13 @@ my_bool _ma_bitmap_flush_all(MARIA_SHARE *share)
DBUG_RETURN
(
0
);
}
_ma_bitmap_mark_file_changed
(
share
);
/*
Before flusing bitmap, ensure that we have incremented open count.
This is needed to ensure that we don't call
_ma_mark_file_changed() as part of flushing bitmap page as in this
case we would use mutex lock in wrong order.
It's extremely unlikely that the following test is true as normally
this is happening when table is flushed.
The following should be true as it was tested above. We have to test
this again as _ma_bitmap_mark_file_changed() did temporarly release
the bitmap mutex.
*/
if
(
unlikely
(
!
share
->
global_changed
))
{
/* purecov: begin inspected */
/* unlock bitmap mutex as it can't be hold during _ma_mark_file_changed */
pthread_mutex_unlock
(
&
bitmap
->
bitmap_lock
);
_ma_mark_file_changed
(
share
);
pthread_mutex_lock
(
&
bitmap
->
bitmap_lock
);
/* purecov: end */
}
if
(
bitmap
->
changed
||
bitmap
->
changed_not_flushed
)
{
bitmap
->
flush_all_requested
++
;
...
...
@@ -1010,6 +1024,8 @@ static my_bool _ma_change_bitmap_page(MARIA_HA *info,
{
DBUG_ENTER
(
"_ma_change_bitmap_page"
);
_ma_bitmap_mark_file_changed
(
info
->
s
);
if
(
bitmap
->
changed
)
{
if
(
write_changed_bitmap
(
info
->
s
,
bitmap
))
...
...
@@ -1447,10 +1463,7 @@ static ulong allocate_full_pages(MARIA_FILE_BITMAP *bitmap,
best_prefix_bits
|=
tmp
;
int6store
(
best_data
,
best_prefix_bits
);
if
(
!
(
best_area_size
-=
best_prefix_area_size
))
{
DBUG_EXECUTE
(
"bitmap"
,
_ma_print_bitmap_changes
(
bitmap
););
DBUG_RETURN
(
block
->
page_count
);
}
goto
end
;
best_data
+=
6
;
}
best_area_size
*=
3
;
/* Bits to set */
...
...
@@ -1468,6 +1481,7 @@ static ulong allocate_full_pages(MARIA_FILE_BITMAP *bitmap,
bitmap
->
used_size
=
(
uint
)
(
best_data
-
bitmap
->
map
);
DBUG_ASSERT
(
bitmap
->
used_size
<=
bitmap
->
total_size
);
}
end:
bitmap
->
changed
=
1
;
DBUG_EXECUTE
(
"bitmap"
,
_ma_print_bitmap_changes
(
bitmap
););
DBUG_RETURN
(
block
->
page_count
);
...
...
@@ -2142,7 +2156,7 @@ static my_bool set_page_bits(MARIA_HA *info, MARIA_FILE_BITMAP *bitmap,
Get bitmap pattern for a given page
SYNOPSIS
get_page_bits()
bitmap_
get_page_bits()
info Maria handler
bitmap Bitmap handler
page Page number
...
...
@@ -2152,8 +2166,8 @@ static my_bool set_page_bits(MARIA_HA *info, MARIA_FILE_BITMAP *bitmap,
~0 Error (couldn't read page)
*/
uint
_ma_
bitmap_get_page_bits
(
MARIA_HA
*
info
,
MARIA_FILE_BITMAP
*
bitmap
,
pgcache_page_no_t
page
)
static
uint
bitmap_get_page_bits
(
MARIA_HA
*
info
,
MARIA_FILE_BITMAP
*
bitmap
,
pgcache_page_no_t
page
)
{
pgcache_page_no_t
bitmap_page
;
uint
offset_page
,
offset
,
tmp
;
...
...
@@ -2179,6 +2193,19 @@ uint _ma_bitmap_get_page_bits(MARIA_HA *info, MARIA_FILE_BITMAP *bitmap,
}
/* As above, but take a lock while getting the data */
uint
_ma_bitmap_get_page_bits
(
MARIA_HA
*
info
,
MARIA_FILE_BITMAP
*
bitmap
,
pgcache_page_no_t
page
)
{
uint
tmp
;
pthread_mutex_lock
(
&
bitmap
->
bitmap_lock
);
tmp
=
bitmap_get_page_bits
(
info
,
bitmap
,
page
);
pthread_mutex_unlock
(
&
bitmap
->
bitmap_lock
);
return
tmp
;
}
/*
Mark all pages in a region as free
...
...
@@ -2258,6 +2285,7 @@ my_bool _ma_bitmap_reset_full_page_bits(MARIA_HA *info,
DBUG_RETURN
(
0
);
}
/*
Set all pages in a region as used
...
...
@@ -2290,7 +2318,7 @@ my_bool _ma_bitmap_set_full_page_bits(MARIA_HA *info,
bitmap_page
=
page
-
page
%
bitmap
->
pages_covered
;
if
(
page
==
bitmap_page
||
page
+
page_count
>
=
bitmap_page
+
bitmap
->
pages_covered
)
page
+
page_count
>
bitmap_page
+
bitmap
->
pages_covered
)
{
DBUG_ASSERT
(
0
);
/* Wrong in data */
DBUG_RETURN
(
1
);
...
...
@@ -2494,7 +2522,7 @@ my_bool _ma_bitmap_release_unused(MARIA_HA *info, MARIA_BITMAP_BLOCKS *blocks)
else
{
DBUG_ASSERT
(
current_bitmap_value
==
_ma_
bitmap_get_page_bits
(
info
,
bitmap
,
block
->
page
));
bitmap_get_page_bits
(
info
,
bitmap
,
block
->
page
));
}
/* Handle all full pages and tail pages (for head page and blob) */
...
...
@@ -2526,7 +2554,7 @@ my_bool _ma_bitmap_release_unused(MARIA_HA *info, MARIA_BITMAP_BLOCKS *blocks)
to not set the bits to the same value as before.
*/
DBUG_ASSERT
(
current_bitmap_value
==
_ma_
bitmap_get_page_bits
(
info
,
bitmap
,
block
->
page
));
bitmap_get_page_bits
(
info
,
bitmap
,
block
->
page
));
if
(
bits
!=
current_bitmap_value
)
{
...
...
storage/maria/ma_check.c
View file @
3134d9dc
...
...
@@ -412,12 +412,13 @@ int maria_chk_size(HA_CHECK *param, register MARIA_HA *info)
{
error
=
1
;
_ma_check_print_error
(
param
,
"Size of indexfile is: %-8s
Should be
: %s"
,
"Size of indexfile is: %-8s
Expected
: %s"
,
llstr
(
size
,
buff
),
llstr
(
skr
,
buff2
));
share
->
state
.
state
.
key_file_length
=
size
;
}
else
if
(
!
(
param
->
testflag
&
T_VERY_SILENT
))
_ma_check_print_warning
(
param
,
"Size of indexfile is: %-8s
Should be
: %s"
,
"Size of indexfile is: %-8s
Expected
: %s"
,
llstr
(
size
,
buff
),
llstr
(
skr
,
buff2
));
}
if
(
!
(
param
->
testflag
&
T_VERY_SILENT
)
&&
...
...
@@ -439,18 +440,18 @@ int maria_chk_size(HA_CHECK *param, register MARIA_HA *info)
#endif
if
(
skr
!=
size
)
{
share
->
state
.
state
.
data_file_length
=
size
;
/* Skip other errors */
if
(
skr
>
size
&&
skr
!=
size
+
MEMMAP_EXTRA_MARGIN
)
{
share
->
state
.
state
.
data_file_length
=
size
;
/* Skip other errors */
error
=
1
;
_ma_check_print_error
(
param
,
"Size of datafile is: %-9s
Should be
: %s"
,
_ma_check_print_error
(
param
,
"Size of datafile is: %-9s
Expected
: %s"
,
llstr
(
size
,
buff
),
llstr
(
skr
,
buff2
));
param
->
testflag
|=
T_RETRY_WITHOUT_QUICK
;
}
else
{
_ma_check_print_warning
(
param
,
"Size of datafile is: %-9s
Should be
: %s"
,
"Size of datafile is: %-9s
Expected
: %s"
,
llstr
(
size
,
buff
),
llstr
(
skr
,
buff2
));
}
}
...
...
@@ -1801,7 +1802,7 @@ static int check_block_record(HA_CHECK *param, MARIA_HA *info, int extend,
char
llbuff
[
22
],
llbuff2
[
22
];
uint
block_size
=
share
->
block_size
;
ha_rows
full_page_count
,
tail_count
;
my_bool
full_dir
;
my_bool
full_dir
,
now_transactional
;
uint
offset_page
,
offset
,
free_count
;
LINT_INIT
(
full_dir
);
...
...
@@ -1812,6 +1813,10 @@ static int check_block_record(HA_CHECK *param, MARIA_HA *info, int extend,
my_errno
);
return
1
;
}
now_transactional
=
info
->
s
->
now_transactional
;
info
->
s
->
now_transactional
=
0
;
/* Don't log changes */
bitmap_buff
=
info
->
scan
.
bitmap_buff
;
page_buff
=
info
->
scan
.
page_buff
;
full_page_count
=
tail_count
=
0
;
...
...
@@ -1831,7 +1836,8 @@ static int check_block_record(HA_CHECK *param, MARIA_HA *info, int extend,
if
(
_ma_killed_ptr
(
param
))
{
_ma_scan_end_block_record
(
info
);
return
-
1
;
info
->
s
->
now_transactional
=
now_transactional
;
return
-
1
;
/* Interrupted */
}
if
((
page
%
share
->
bitmap
.
pages_covered
)
==
0
)
{
...
...
@@ -1999,10 +2005,12 @@ static int check_block_record(HA_CHECK *param, MARIA_HA *info, int extend,
llstr
(
param
->
tail_count
,
llbuff
),
llstr
(
tail_count
,
llbuff2
));
info
->
s
->
now_transactional
=
now_transactional
;
return
param
->
error_printed
!=
0
;
err:
_ma_scan_end_block_record
(
info
);
info
->
s
->
now_transactional
=
now_transactional
;
return
1
;
}
...
...
storage/maria/ma_pagecache.c
View file @
3134d9dc
This diff is collapsed.
Click to expand it.
storage/myisam/ha_myisam.cc
View file @
3134d9dc
...
...
@@ -1072,7 +1072,7 @@ int ha_myisam::repair(THD* thd, HA_CHECK_OPT *check_opt)
param
.
testflag
&=
~
(
T_RETRY_WITHOUT_QUICK
|
T_QUICK
);
/* Ensure we don't loose any rows when retrying without quick */
param
.
testflag
|=
T_SAFE_REPAIR
;
sql_print_information
(
"Retrying repair of: '%s'
without quick
"
,
sql_print_information
(
"Retrying repair of: '%s'
including modifying data file
"
,
table
->
s
->
path
.
str
);
continue
;
}
...
...
@@ -1666,15 +1666,15 @@ bool ha_myisam::check_and_repair(THD *thd)
if
((
marked_crashed
=
mi_is_crashed
(
file
))
||
check
(
thd
,
&
check_opt
))
{
sql_print_warning
(
"Recovering table: '%s'"
,
table
->
s
->
path
.
str
);
if
(
myisam_recover_options
&
(
HA_RECOVER_FULL_BACKUP
|
HA_RECOVER_BACKUP
)
)
if
(
myisam_recover_options
&
HA_RECOVER_FULL_BACKUP
)
{
char
buff
[
MY_BACKUP_NAME_EXTRA_LENGTH
+
1
];
my_create_backup_name
(
buff
,
""
,
check_opt
.
start_time
);
sql_print_information
(
"Making backup of data with extension '%s'"
,
buff
);
}
if
(
myisam_recover_options
&
HA_RECOVER_FULL_BACKUP
)
sql_print_information
(
"Making backup of index file with extension '%s'"
,
buff
);
mi_make_backup_of_index
(
file
,
check_opt
.
start_time
,
MYF
(
MY_WME
|
ME_JUST_WARNING
));
}
check_opt
.
flags
=
(((
myisam_recover_options
&
(
HA_RECOVER_BACKUP
|
HA_RECOVER_FULL_BACKUP
))
?
T_BACKUP_DATA
:
0
)
|
...
...
storage/myisam/mi_check.c
View file @
3134d9dc
...
...
@@ -85,6 +85,8 @@ static SORT_KEY_BLOCKS *alloc_key_blocks(HA_CHECK *param, uint blocks,
uint
buffer_length
);
static
ha_checksum
mi_byte_checksum
(
const
uchar
*
buf
,
uint
length
);
static
void
set_data_file_type
(
MI_SORT_INFO
*
sort_info
,
MYISAM_SHARE
*
share
);
static
int
replace_data_file
(
HA_CHECK
*
param
,
MI_INFO
*
info
,
const
char
*
name
,
File
new_file
);
void
myisamchk_init
(
HA_CHECK
*
param
)
{
...
...
@@ -1733,17 +1735,8 @@ int mi_repair(HA_CHECK *param, register MI_INFO *info,
/* Replace the actual file with the temporary file */
if
(
new_file
>=
0
)
{
my_close
(
new_file
,
MYF
(
0
));
info
->
dfile
=
new_file
=
-
1
;
if
(
change_to_newfile
(
share
->
data_file_name
,
MI_NAME_DEXT
,
DATA_TMP_EXT
,
param
->
backup_time
,
share
->
base
.
raid_chunks
,
(
param
->
testflag
&
T_BACKUP_DATA
?
MYF
(
MY_REDEL_MAKE_BACKUP
)
:
MYF
(
0
)))
||
mi_open_datafile
(
info
,
share
,
name
,
-
1
))
got_error
=
1
;
got_error
=
replace_data_file
(
param
,
info
,
name
,
new_file
);
new_file
=
-
1
;
param
->
retry_repair
=
0
;
}
}
...
...
@@ -2553,15 +2546,8 @@ int mi_repair_by_sort(HA_CHECK *param, register MI_INFO *info,
/* Replace the actual file with the temporary file */
if
(
new_file
>=
0
)
{
my_close
(
new_file
,
MYF
(
0
));
info
->
dfile
=
new_file
=
-
1
;
if
(
change_to_newfile
(
share
->
data_file_name
,
MI_NAME_DEXT
,
DATA_TMP_EXT
,
param
->
backup_time
,
share
->
base
.
raid_chunks
,
(
param
->
testflag
&
T_BACKUP_DATA
?
MYF
(
MY_REDEL_MAKE_BACKUP
)
:
MYF
(
0
)))
||
mi_open_datafile
(
info
,
share
,
name
,
-
1
))
got_error
=
1
;
got_error
=
replace_data_file
(
param
,
info
,
name
,
new_file
);
new_file
=
-
1
;
}
}
if
(
got_error
)
...
...
@@ -3092,15 +3078,8 @@ int mi_repair_parallel(HA_CHECK *param, register MI_INFO *info,
/* Replace the actual file with the temporary file */
if
(
new_file
>=
0
)
{
my_close
(
new_file
,
MYF
(
0
));
info
->
dfile
=
new_file
=
-
1
;
if
(
change_to_newfile
(
share
->
data_file_name
,
MI_NAME_DEXT
,
DATA_TMP_EXT
,
param
->
backup_time
,
share
->
base
.
raid_chunks
,
(
param
->
testflag
&
T_BACKUP_DATA
?
MYF
(
MY_REDEL_MAKE_BACKUP
)
:
MYF
(
0
)))
||
mi_open_datafile
(
info
,
share
,
name
,
-
1
))
got_error
=
1
;
got_error
=
replace_data_file
(
param
,
info
,
name
,
new_file
);
new_file
=
-
1
;
}
}
if
(
got_error
)
...
...
@@ -4765,3 +4744,29 @@ int mi_make_backup_of_index(MI_INFO *info, time_t backup_time, myf flags)
my_create_backup_name
(
backup_name
,
info
->
s
->
index_file_name
,
backup_time
);
return
my_copy
(
info
->
s
->
index_file_name
,
backup_name
,
flags
);
}
static
int
replace_data_file
(
HA_CHECK
*
param
,
MI_INFO
*
info
,
const
char
*
name
,
File
new_file
)
{
MYISAM_SHARE
*
share
=
info
->
s
;
my_close
(
new_file
,
MYF
(
0
));
info
->
dfile
=
-
1
;
if
(
param
->
testflag
&
T_BACKUP_DATA
)
{
char
buff
[
MY_BACKUP_NAME_EXTRA_LENGTH
+
1
];
my_create_backup_name
(
buff
,
""
,
param
->
backup_time
);
my_printf_error
(
0
,
/* No error, just info */
"Making backup of data file with extension '%s'"
,
MYF
(
ME_JUST_INFO
|
ME_NOREFRESH
),
buff
);
}
if
(
change_to_newfile
(
share
->
data_file_name
,
MI_NAME_DEXT
,
DATA_TMP_EXT
,
param
->
backup_time
,
share
->
base
.
raid_chunks
,
(
param
->
testflag
&
T_BACKUP_DATA
?
MYF
(
MY_REDEL_MAKE_BACKUP
)
:
MYF
(
0
)))
||
mi_open_datafile
(
info
,
share
,
name
,
-
1
))
return
1
;
return
0
;
}
storage/pbxt/src/pthread_xt.cc
View file @
3134d9dc
...
...
@@ -547,44 +547,23 @@ xtPublic void xt_p_init_threading(void)
xtPublic
int
xt_p_set_low_priority
(
pthread_t
thr
)
{
if
(
pth_min_priority
==
pth_max_priority
)
{
/* Under Linux the priority of normal (non-runtime)
* threads are set using the standard methods
* for setting process priority.
*/
/* We could set who == 0 because it should have the same affect
* as using the PID.
*/
/* -20 = highest, 20 = lowest */
#ifdef SET_GLOBAL_PRIORITY
if
(
setpriority
(
PRIO_PROCESS
,
getpid
(),
20
)
==
-
1
)
return
errno
;
#endif
return
0
;
}
return
pth_set_priority
(
thr
,
pth_min_priority
);
if
(
pth_min_priority
!=
pth_max_priority
)
return
pth_set_priority
(
thr
,
pth_min_priority
);
return
0
;
}
xtPublic
int
xt_p_set_normal_priority
(
pthread_t
thr
)
{
if
(
pth_min_priority
==
pth_max_priority
)
{
if
(
setpriority
(
PRIO_PROCESS
,
getpid
(),
0
)
==
-
1
)
return
errno
;
return
0
;
}
return
pth_set_priority
(
thr
,
pth_normal_priority
);
if
(
pth_min_priority
!=
pth_max_priority
)
return
pth_set_priority
(
thr
,
pth_normal_priority
);
return
0
;
}
xtPublic
int
xt_p_set_high_priority
(
pthread_t
thr
)
{
if
(
pth_min_priority
==
pth_max_priority
)
{
if
(
setpriority
(
PRIO_PROCESS
,
getpid
(),
-
20
)
==
-
1
)
return
errno
;
return
0
;
}
return
pth_set_priority
(
thr
,
pth_max_priority
);
if
(
pth_min_priority
!=
pth_max_priority
)
return
pth_set_priority
(
thr
,
pth_max_priority
);
return
0
;
}
#ifdef DEBUG_LOCKING
...
...
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