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
f0f21036
Commit
f0f21036
authored
Aug 05, 2010
by
Michael Widenius
Browse files
Options
Browse Files
Download
Plain Diff
Automatic merge
parents
7d1ce2e8
f66d2500
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
146 additions
and
75 deletions
+146
-75
mysql-test/r/innodb-use-sys-malloc.result
mysql-test/r/innodb-use-sys-malloc.result
+0
-48
mysql-test/t/innodb-use-sys-malloc-master.opt
mysql-test/t/innodb-use-sys-malloc-master.opt
+0
-1
storage/maria/ma_recovery.c
storage/maria/ma_recovery.c
+38
-8
storage/maria/ma_recovery.h
storage/maria/ma_recovery.h
+1
-1
storage/maria/ma_write.c
storage/maria/ma_write.c
+76
-8
storage/maria/maria_chk.c
storage/maria/maria_chk.c
+17
-4
storage/maria/maria_read_log.c
storage/maria/maria_read_log.c
+14
-5
No files found.
mysql-test/r/innodb-use-sys-malloc.result
deleted
100644 → 0
View file @
7d1ce2e8
SELECT @@GLOBAL.innodb_use_sys_malloc;
@@GLOBAL.innodb_use_sys_malloc
1
1 Expected
SET @@GLOBAL.innodb_use_sys_malloc=0;
ERROR HY000: Variable 'innodb_use_sys_malloc' is a read only variable
Expected error 'Read only variable'
SELECT @@GLOBAL.innodb_use_sys_malloc;
@@GLOBAL.innodb_use_sys_malloc
1
1 Expected
drop table if exists t1;
create table t1(a int not null) engine=innodb DEFAULT CHARSET=latin1;
insert into t1 values (1),(2),(3),(4),(5),(6),(7);
select * from t1;
a
1
2
3
4
5
6
7
drop table t1;
SELECT @@GLOBAL.innodb_use_sys_malloc;
@@GLOBAL.innodb_use_sys_malloc
1
1 Expected
SET @@GLOBAL.innodb_use_sys_malloc=0;
ERROR HY000: Variable 'innodb_use_sys_malloc' is a read only variable
Expected error 'Read only variable'
SELECT @@GLOBAL.innodb_use_sys_malloc;
@@GLOBAL.innodb_use_sys_malloc
1
1 Expected
drop table if exists t1;
create table t1(a int not null) engine=innodb DEFAULT CHARSET=latin1;
insert into t1 values (1),(2),(3),(4),(5),(6),(7);
select * from t1;
a
1
2
3
4
5
6
7
drop table t1;
mysql-test/t/innodb-use-sys-malloc-master.opt
deleted
100644 → 0
View file @
7d1ce2e8
--loose-innodb-use-sys-malloc=true
storage/maria/ma_recovery.c
View file @
f0f21036
...
@@ -109,7 +109,8 @@ prototype_undo_exec_hook(UNDO_KEY_DELETE);
...
@@ -109,7 +109,8 @@ prototype_undo_exec_hook(UNDO_KEY_DELETE);
prototype_undo_exec_hook
(
UNDO_KEY_DELETE_WITH_ROOT
);
prototype_undo_exec_hook
(
UNDO_KEY_DELETE_WITH_ROOT
);
prototype_undo_exec_hook
(
UNDO_BULK_INSERT
);
prototype_undo_exec_hook
(
UNDO_BULK_INSERT
);
static
int
run_redo_phase
(
LSN
lsn
,
enum
maria_apply_log_way
apply
);
static
int
run_redo_phase
(
LSN
lsn
,
LSN
end_lsn
,
enum
maria_apply_log_way
apply
);
static
uint
end_of_redo_phase
(
my_bool
prepare_for_undo_phase
);
static
uint
end_of_redo_phase
(
my_bool
prepare_for_undo_phase
);
static
int
run_undo_phase
(
uint
uncommitted
);
static
int
run_undo_phase
(
uint
uncommitted
);
static
void
display_record_position
(
const
LOG_DESC
*
log_desc
,
static
void
display_record_position
(
const
LOG_DESC
*
log_desc
,
...
@@ -217,8 +218,8 @@ int maria_recovery_from_log(void)
...
@@ -217,8 +218,8 @@ int maria_recovery_from_log(void)
#endif
#endif
tprint
(
trace_file
,
"TRACE of the last MARIA recovery from mysqld
\n
"
);
tprint
(
trace_file
,
"TRACE of the last MARIA recovery from mysqld
\n
"
);
DBUG_ASSERT
(
maria_pagecache
->
inited
);
DBUG_ASSERT
(
maria_pagecache
->
inited
);
res
=
maria_apply_log
(
LSN_IMPOSSIBLE
,
MARIA_LOG_APPLY
,
trace_file
,
res
=
maria_apply_log
(
LSN_IMPOSSIBLE
,
LSN_IMPOSSIBLE
,
MARIA_LOG_APPLY
,
TRUE
,
TRUE
,
TRUE
,
&
warnings_count
);
trace_file
,
TRUE
,
TRUE
,
TRUE
,
&
warnings_count
);
if
(
!
res
)
if
(
!
res
)
{
{
if
(
warnings_count
==
0
&&
recovery_found_crashed_tables
==
0
)
if
(
warnings_count
==
0
&&
recovery_found_crashed_tables
==
0
)
...
@@ -239,6 +240,7 @@ int maria_recovery_from_log(void)
...
@@ -239,6 +240,7 @@ int maria_recovery_from_log(void)
@param from_lsn LSN from which log reading/applying should start;
@param from_lsn LSN from which log reading/applying should start;
LSN_IMPOSSIBLE means "use last checkpoint"
LSN_IMPOSSIBLE means "use last checkpoint"
@param end_lsn Apply until this. LSN_IMPOSSIBLE means until end.
@param apply how log records should be applied or not
@param apply how log records should be applied or not
@param trace_file trace file where progress/debug messages will go
@param trace_file trace file where progress/debug messages will go
@param skip_DDLs_arg Should DDL records (CREATE/RENAME/DROP/REPAIR)
@param skip_DDLs_arg Should DDL records (CREATE/RENAME/DROP/REPAIR)
...
@@ -255,7 +257,8 @@ int maria_recovery_from_log(void)
...
@@ -255,7 +257,8 @@ int maria_recovery_from_log(void)
@retval !=0 Error
@retval !=0 Error
*/
*/
int
maria_apply_log
(
LSN
from_lsn
,
enum
maria_apply_log_way
apply
,
int
maria_apply_log
(
LSN
from_lsn
,
LSN
end_lsn
,
enum
maria_apply_log_way
apply
,
FILE
*
trace_file
,
FILE
*
trace_file
,
my_bool
should_run_undo_phase
,
my_bool
skip_DDLs_arg
,
my_bool
should_run_undo_phase
,
my_bool
skip_DDLs_arg
,
my_bool
take_checkpoints
,
uint
*
warnings_count
)
my_bool
take_checkpoints
,
uint
*
warnings_count
)
...
@@ -263,6 +266,7 @@ int maria_apply_log(LSN from_lsn, enum maria_apply_log_way apply,
...
@@ -263,6 +266,7 @@ int maria_apply_log(LSN from_lsn, enum maria_apply_log_way apply,
int
error
=
0
;
int
error
=
0
;
uint
uncommitted_trans
;
uint
uncommitted_trans
;
ulonglong
old_now
;
ulonglong
old_now
;
my_bool
abort_message_printed
=
0
;
DBUG_ENTER
(
"maria_apply_log"
);
DBUG_ENTER
(
"maria_apply_log"
);
DBUG_ASSERT
(
apply
==
MARIA_LOG_APPLY
||
!
should_run_undo_phase
);
DBUG_ASSERT
(
apply
==
MARIA_LOG_APPLY
||
!
should_run_undo_phase
);
...
@@ -271,6 +275,7 @@ int maria_apply_log(LSN from_lsn, enum maria_apply_log_way apply,
...
@@ -271,6 +275,7 @@ int maria_apply_log(LSN from_lsn, enum maria_apply_log_way apply,
maria_recovery_changed_data
=
0
;
maria_recovery_changed_data
=
0
;
/* checkpoints can happen only if TRNs have been built */
/* checkpoints can happen only if TRNs have been built */
DBUG_ASSERT
(
should_run_undo_phase
||
!
take_checkpoints
);
DBUG_ASSERT
(
should_run_undo_phase
||
!
take_checkpoints
);
DBUG_ASSERT
(
end_lsn
==
LSN_IMPOSSIBLE
||
should_run_undo_phase
==
0
);
all_active_trans
=
(
struct
st_trn_for_recovery
*
)
all_active_trans
=
(
struct
st_trn_for_recovery
*
)
my_malloc
((
SHORT_TRID_MAX
+
1
)
*
sizeof
(
struct
st_trn_for_recovery
),
my_malloc
((
SHORT_TRID_MAX
+
1
)
*
sizeof
(
struct
st_trn_for_recovery
),
MYF
(
MY_ZEROFILL
));
MYF
(
MY_ZEROFILL
));
...
@@ -316,7 +321,7 @@ int maria_apply_log(LSN from_lsn, enum maria_apply_log_way apply,
...
@@ -316,7 +321,7 @@ int maria_apply_log(LSN from_lsn, enum maria_apply_log_way apply,
now
=
my_getsystime
();
now
=
my_getsystime
();
in_redo_phase
=
TRUE
;
in_redo_phase
=
TRUE
;
trnman_init
(
max_trid_in_control_file
);
trnman_init
(
max_trid_in_control_file
);
if
(
run_redo_phase
(
from_lsn
,
apply
))
if
(
run_redo_phase
(
from_lsn
,
end_lsn
,
apply
))
{
{
ma_message_no_user
(
0
,
"Redo phase failed"
);
ma_message_no_user
(
0
,
"Redo phase failed"
);
trnman_destroy
();
trnman_destroy
();
...
@@ -324,6 +329,15 @@ int maria_apply_log(LSN from_lsn, enum maria_apply_log_way apply,
...
@@ -324,6 +329,15 @@ int maria_apply_log(LSN from_lsn, enum maria_apply_log_way apply,
}
}
trnman_destroy
();
trnman_destroy
();
if
(
end_lsn
!=
LSN_IMPOSSIBLE
)
{
abort_message_printed
=
1
;
my_message
(
HA_ERR_INITIALIZATION
,
"Maria recovery aborted as end_lsn/end of file was reached"
,
MYF
(
0
));
goto
err2
;
}
if
((
uncommitted_trans
=
if
((
uncommitted_trans
=
end_of_redo_phase
(
should_run_undo_phase
))
==
(
uint
)
-
1
)
end_of_redo_phase
(
should_run_undo_phase
))
==
(
uint
)
-
1
)
{
{
...
@@ -440,10 +454,15 @@ int maria_apply_log(LSN from_lsn, enum maria_apply_log_way apply,
...
@@ -440,10 +454,15 @@ int maria_apply_log(LSN from_lsn, enum maria_apply_log_way apply,
goto
end
;
goto
end
;
err:
err:
error
=
1
;
tprint
(
tracef
,
"
\n
Recovery of tables with transaction logs FAILED
\n
"
);
tprint
(
tracef
,
"
\n
Recovery of tables with transaction logs FAILED
\n
"
);
err2:
if
(
trns_created
)
if
(
trns_created
)
delete_all_transactions
();
delete_all_transactions
();
error
=
1
;
if
(
close_all_tables
())
{
ma_message_no_user
(
0
,
"closing of tables failed"
);
}
end:
end:
error_handler_hook
=
save_error_handler_hook
;
error_handler_hook
=
save_error_handler_hook
;
hash_free
(
&
all_dirty_pages
);
hash_free
(
&
all_dirty_pages
);
...
@@ -480,7 +499,7 @@ end:
...
@@ -480,7 +499,7 @@ end:
maria_recovery_changed_data
=
1
;
maria_recovery_changed_data
=
1
;
}
}
if
(
error
)
if
(
error
&&
!
abort_message_printed
)
my_message
(
HA_ERR_INITIALIZATION
,
my_message
(
HA_ERR_INITIALIZATION
,
"Maria recovery failed. Please run maria_chk -r on all maria "
"Maria recovery failed. Please run maria_chk -r on all maria "
"tables and delete all maria_log.######## files"
,
MYF
(
0
));
"tables and delete all maria_log.######## files"
,
MYF
(
0
));
...
@@ -2370,7 +2389,7 @@ prototype_undo_exec_hook(UNDO_BULK_INSERT)
...
@@ -2370,7 +2389,7 @@ prototype_undo_exec_hook(UNDO_BULK_INSERT)
}
}
static
int
run_redo_phase
(
LSN
lsn
,
enum
maria_apply_log_way
apply
)
static
int
run_redo_phase
(
LSN
lsn
,
LSN
lsn_end
,
enum
maria_apply_log_way
apply
)
{
{
TRANSLOG_HEADER_BUFFER
rec
;
TRANSLOG_HEADER_BUFFER
rec
;
struct
st_translog_scanner_data
scanner
;
struct
st_translog_scanner_data
scanner
;
...
@@ -2498,6 +2517,17 @@ static int run_redo_phase(LSN lsn, enum maria_apply_log_way apply)
...
@@ -2498,6 +2517,17 @@ static int run_redo_phase(LSN lsn, enum maria_apply_log_way apply)
tprint
(
tracef
,
"Cannot find record where it should be
\n
"
);
tprint
(
tracef
,
"Cannot find record where it should be
\n
"
);
goto
err
;
goto
err
;
}
}
if
(
lsn_end
!=
LSN_IMPOSSIBLE
&&
rec2
.
lsn
>=
lsn_end
)
{
tprint
(
tracef
,
"lsn_end reached at (%lu,0x%lx). "
"Skipping rest of redo entries"
,
LSN_IN_PARTS
(
rec2
.
lsn
));
translog_destroy_scanner
(
&
scanner
);
translog_free_record_header
(
&
rec
);
return
(
0
);
}
if
(
translog_scanner_init
(
rec2
.
lsn
,
1
,
&
scanner2
,
1
))
if
(
translog_scanner_init
(
rec2
.
lsn
,
1
,
&
scanner2
,
1
))
{
{
tprint
(
tracef
,
"Scanner2 init failed
\n
"
);
tprint
(
tracef
,
"Scanner2 init failed
\n
"
);
...
...
storage/maria/ma_recovery.h
View file @
f0f21036
...
@@ -26,7 +26,7 @@ C_MODE_START
...
@@ -26,7 +26,7 @@ C_MODE_START
enum
maria_apply_log_way
enum
maria_apply_log_way
{
MARIA_LOG_APPLY
,
MARIA_LOG_DISPLAY_HEADER
,
MARIA_LOG_CHECK
};
{
MARIA_LOG_APPLY
,
MARIA_LOG_DISPLAY_HEADER
,
MARIA_LOG_CHECK
};
int
maria_recovery_from_log
(
void
);
int
maria_recovery_from_log
(
void
);
int
maria_apply_log
(
LSN
lsn
,
enum
maria_apply_log_way
apply
,
int
maria_apply_log
(
LSN
lsn
,
LSN
lsn_end
,
enum
maria_apply_log_way
apply
,
FILE
*
trace_file
,
FILE
*
trace_file
,
my_bool
execute_undo_phase
,
my_bool
skip_DDLs
,
my_bool
execute_undo_phase
,
my_bool
skip_DDLs
,
my_bool
take_checkpoints
,
uint
*
warnings_count
);
my_bool
take_checkpoints
,
uint
*
warnings_count
);
...
...
storage/maria/ma_write.c
View file @
f0f21036
...
@@ -1987,9 +1987,9 @@ static my_bool _ma_log_split(MARIA_PAGE *ma_page,
...
@@ -1987,9 +1987,9 @@ static my_bool _ma_log_split(MARIA_PAGE *ma_page,
uint
changed_length
)
uint
changed_length
)
{
{
LSN
lsn
;
LSN
lsn
;
uchar
log_data
[
FILEID_STORE_SIZE
+
PAGE_STORE_SIZE
+
3
+
3
+
3
+
3
+
3
+
2
];
uchar
log_data
[
FILEID_STORE_SIZE
+
PAGE_STORE_SIZE
+
3
+
3
+
3
+
3
+
3
+
2
+
7
];
uchar
*
log_pos
;
uchar
*
log_pos
;
LEX_CUSTRING
log_array
[
TRANSLOG_INTERNAL_PARTS
+
3
];
LEX_CUSTRING
log_array
[
TRANSLOG_INTERNAL_PARTS
+
4
];
uint
offset
=
(
uint
)
(
key_pos
-
ma_page
->
buff
);
uint
offset
=
(
uint
)
(
key_pos
-
ma_page
->
buff
);
uint
translog_parts
,
extra_length
;
uint
translog_parts
,
extra_length
;
MARIA_HA
*
info
=
ma_page
->
info
;
MARIA_HA
*
info
=
ma_page
->
info
;
...
@@ -2085,6 +2085,22 @@ static my_bool _ma_log_split(MARIA_PAGE *ma_page,
...
@@ -2085,6 +2085,22 @@ static my_bool _ma_log_split(MARIA_PAGE *ma_page,
log_array
[
TRANSLOG_INTERNAL_PARTS
+
0
].
str
=
log_data
;
log_array
[
TRANSLOG_INTERNAL_PARTS
+
0
].
str
=
log_data
;
log_array
[
TRANSLOG_INTERNAL_PARTS
+
0
].
length
=
(
uint
)
(
log_pos
-
log_array
[
TRANSLOG_INTERNAL_PARTS
+
0
].
length
=
(
uint
)
(
log_pos
-
log_data
);
log_data
);
#ifdef EXTRA_DEBUG_KEY_CHANGES
{
int
page_length
=
ma_page
->
size
;
ha_checksum
crc
;
crc
=
my_checksum
(
0
,
ma_page
->
buff
+
LSN_STORE_SIZE
,
page_length
-
LSN_STORE_SIZE
);
log_pos
[
0
]
=
KEY_OP_CHECK
;
int2store
(
log_pos
+
1
,
page_length
);
int4store
(
log_pos
+
3
,
crc
);
log_array
[
TRANSLOG_INTERNAL_PARTS
+
translog_parts
].
str
=
log_pos
;
log_array
[
TRANSLOG_INTERNAL_PARTS
+
translog_parts
].
length
=
7
;
extra_length
+=
7
;
translog_parts
++
;
}
#endif
DBUG_RETURN
(
translog_write_record
(
&
lsn
,
LOGREC_REDO_INDEX
,
DBUG_RETURN
(
translog_write_record
(
&
lsn
,
LOGREC_REDO_INDEX
,
info
->
trn
,
info
,
info
->
trn
,
info
,
(
translog_size_t
)
(
translog_size_t
)
...
@@ -2122,8 +2138,8 @@ static my_bool _ma_log_del_prefix(MARIA_PAGE *ma_page,
...
@@ -2122,8 +2138,8 @@ static my_bool _ma_log_del_prefix(MARIA_PAGE *ma_page,
int
move_length
)
int
move_length
)
{
{
LSN
lsn
;
LSN
lsn
;
uchar
log_data
[
FILEID_STORE_SIZE
+
PAGE_STORE_SIZE
+
12
],
*
log_pos
;
uchar
log_data
[
FILEID_STORE_SIZE
+
PAGE_STORE_SIZE
+
12
+
7
],
*
log_pos
;
LEX_CUSTRING
log_array
[
TRANSLOG_INTERNAL_PARTS
+
2
];
LEX_CUSTRING
log_array
[
TRANSLOG_INTERNAL_PARTS
+
3
];
uint
offset
=
(
uint
)
(
key_pos
-
ma_page
->
buff
);
uint
offset
=
(
uint
)
(
key_pos
-
ma_page
->
buff
);
uint
diff_length
=
org_length
+
move_length
-
new_length
;
uint
diff_length
=
org_length
+
move_length
-
new_length
;
uint
translog_parts
,
extra_length
;
uint
translog_parts
,
extra_length
;
...
@@ -2190,6 +2206,22 @@ static my_bool _ma_log_del_prefix(MARIA_PAGE *ma_page,
...
@@ -2190,6 +2206,22 @@ static my_bool _ma_log_del_prefix(MARIA_PAGE *ma_page,
log_array
[
TRANSLOG_INTERNAL_PARTS
+
0
].
str
=
log_data
;
log_array
[
TRANSLOG_INTERNAL_PARTS
+
0
].
str
=
log_data
;
log_array
[
TRANSLOG_INTERNAL_PARTS
+
0
].
length
=
(
uint
)
(
log_pos
-
log_array
[
TRANSLOG_INTERNAL_PARTS
+
0
].
length
=
(
uint
)
(
log_pos
-
log_data
);
log_data
);
#ifdef EXTRA_DEBUG_KEY_CHANGES
{
int
page_length
=
ma_page
->
size
;
ha_checksum
crc
;
crc
=
my_checksum
(
0
,
ma_page
->
buff
+
LSN_STORE_SIZE
,
page_length
-
LSN_STORE_SIZE
);
log_pos
[
0
]
=
KEY_OP_CHECK
;
int2store
(
log_pos
+
1
,
page_length
);
int4store
(
log_pos
+
3
,
crc
);
log_array
[
TRANSLOG_INTERNAL_PARTS
+
translog_parts
].
str
=
log_pos
;
log_array
[
TRANSLOG_INTERNAL_PARTS
+
translog_parts
].
length
=
7
;
extra_length
+=
7
;
translog_parts
++
;
}
#endif
DBUG_RETURN
(
translog_write_record
(
&
lsn
,
LOGREC_REDO_INDEX
,
DBUG_RETURN
(
translog_write_record
(
&
lsn
,
LOGREC_REDO_INDEX
,
info
->
trn
,
info
,
info
->
trn
,
info
,
(
translog_size_t
)
(
translog_size_t
)
...
@@ -2215,9 +2247,9 @@ static my_bool _ma_log_key_middle(MARIA_PAGE *ma_page,
...
@@ -2215,9 +2247,9 @@ static my_bool _ma_log_key_middle(MARIA_PAGE *ma_page,
uint
key_length
,
int
move_length
)
uint
key_length
,
int
move_length
)
{
{
LSN
lsn
;
LSN
lsn
;
uchar
log_data
[
FILEID_STORE_SIZE
+
PAGE_STORE_SIZE
+
3
+
5
+
3
+
3
+
3
];
uchar
log_data
[
FILEID_STORE_SIZE
+
PAGE_STORE_SIZE
+
3
+
5
+
3
+
3
+
3
+
7
];
uchar
*
log_pos
;
uchar
*
log_pos
;
LEX_CUSTRING
log_array
[
TRANSLOG_INTERNAL_PARTS
+
4
];
LEX_CUSTRING
log_array
[
TRANSLOG_INTERNAL_PARTS
+
5
];
uint
key_offset
;
uint
key_offset
;
uint
translog_parts
,
extra_length
;
uint
translog_parts
,
extra_length
;
my_off_t
page
;
my_off_t
page
;
...
@@ -2300,6 +2332,22 @@ static my_bool _ma_log_key_middle(MARIA_PAGE *ma_page,
...
@@ -2300,6 +2332,22 @@ static my_bool _ma_log_key_middle(MARIA_PAGE *ma_page,
key_length
);
key_length
);
}
}
#ifdef EXTRA_DEBUG_KEY_CHANGES
{
int
page_length
=
ma_page
->
size
;
ha_checksum
crc
;
crc
=
my_checksum
(
0
,
ma_page
->
buff
+
LSN_STORE_SIZE
,
page_length
-
LSN_STORE_SIZE
);
log_pos
[
0
]
=
KEY_OP_CHECK
;
int2store
(
log_pos
+
1
,
page_length
);
int4store
(
log_pos
+
3
,
crc
);
log_array
[
TRANSLOG_INTERNAL_PARTS
+
translog_parts
].
str
=
log_pos
;
log_array
[
TRANSLOG_INTERNAL_PARTS
+
translog_parts
].
length
=
7
;
extra_length
+=
7
;
translog_parts
++
;
}
#endif
DBUG_RETURN
(
translog_write_record
(
&
lsn
,
LOGREC_REDO_INDEX
,
DBUG_RETURN
(
translog_write_record
(
&
lsn
,
LOGREC_REDO_INDEX
,
info
->
trn
,
info
,
info
->
trn
,
info
,
(
translog_size_t
)
(
translog_size_t
)
...
@@ -2327,6 +2375,7 @@ static my_bool _ma_log_middle(MARIA_PAGE *ma_page,
...
@@ -2327,6 +2375,7 @@ static my_bool _ma_log_middle(MARIA_PAGE *ma_page,
uchar
log_data
[
FILEID_STORE_SIZE
+
PAGE_STORE_SIZE
+
3
+
5
],
*
log_pos
;
uchar
log_data
[
FILEID_STORE_SIZE
+
PAGE_STORE_SIZE
+
3
+
5
],
*
log_pos
;
MARIA_HA
*
info
=
ma_page
->
info
;
MARIA_HA
*
info
=
ma_page
->
info
;
my_off_t
page
;
my_off_t
page
;
uint
translog_parts
,
extra_length
;
DBUG_ENTER
(
"_ma_log_middle"
);
DBUG_ENTER
(
"_ma_log_middle"
);
DBUG_PRINT
(
"enter"
,
(
"page: %lu"
,
(
ulong
)
page
));
DBUG_PRINT
(
"enter"
,
(
"page: %lu"
,
(
ulong
)
page
));
...
@@ -2352,12 +2401,31 @@ static my_bool _ma_log_middle(MARIA_PAGE *ma_page,
...
@@ -2352,12 +2401,31 @@ static my_bool _ma_log_middle(MARIA_PAGE *ma_page,
log_array
[
TRANSLOG_INTERNAL_PARTS
+
1
].
str
=
((
char
*
)
buff
+
log_array
[
TRANSLOG_INTERNAL_PARTS
+
1
].
str
=
((
char
*
)
buff
+
info
->
s
->
keypage_header
);
info
->
s
->
keypage_header
);
log_array
[
TRANSLOG_INTERNAL_PARTS
+
1
].
length
=
data_changed_first
;
log_array
[
TRANSLOG_INTERNAL_PARTS
+
1
].
length
=
data_changed_first
;
translog_parts
=
2
;
extra_length
=
data_changed_first
;
#ifdef EXTRA_DEBUG_KEY_CHANGES
{
int
page_length
=
ma_page
->
size
;
ha_checksum
crc
;
crc
=
my_checksum
(
0
,
ma_page
->
buff
+
LSN_STORE_SIZE
,
page_length
-
LSN_STORE_SIZE
);
log_pos
[
0
]
=
KEY_OP_CHECK
;
int2store
(
log_pos
+
1
,
page_length
);
int4store
(
log_pos
+
3
,
crc
);
log_array
[
TRANSLOG_INTERNAL_PARTS
+
translog_parts
].
str
=
log_pos
;
log_array
[
TRANSLOG_INTERNAL_PARTS
+
translog_parts
].
length
=
7
;
extra_length
+=
7
;
translog_parts
++
;
}
#endif
DBUG_RETURN
(
translog_write_record
(
&
lsn
,
LOGREC_REDO_INDEX
,
DBUG_RETURN
(
translog_write_record
(
&
lsn
,
LOGREC_REDO_INDEX
,
info
->
trn
,
info
,
info
->
trn
,
info
,
(
translog_size_t
)
(
translog_size_t
)
log_array
[
TRANSLOG_INTERNAL_PARTS
+
log_array
[
TRANSLOG_INTERNAL_PARTS
+
0
].
length
+
data_changed_first
,
0
].
length
+
extra_length
,
TRANSLOG_INTERNAL_PARTS
+
2
,
TRANSLOG_INTERNAL_PARTS
+
translog_parts
,
log_array
,
log_data
,
NULL
));
log_array
,
log_data
,
NULL
));
}
}
#endif
#endif
storage/maria/maria_chk.c
View file @
f0f21036
...
@@ -42,6 +42,7 @@ static CHARSET_INFO *set_collation;
...
@@ -42,6 +42,7 @@ static CHARSET_INFO *set_collation;
static
int
stopwords_inited
=
0
;
static
int
stopwords_inited
=
0
;
static
MY_TMPDIR
maria_chk_tmpdir
;
static
MY_TMPDIR
maria_chk_tmpdir
;
static
my_bool
opt_transaction_logging
,
opt_debug
,
opt_require_control_file
;
static
my_bool
opt_transaction_logging
,
opt_debug
,
opt_require_control_file
;
static
my_bool
opt_warning_for_wrong_transid
;
static
const
char
*
type_names
[]
=
static
const
char
*
type_names
[]
=
{
{
...
@@ -193,7 +194,7 @@ enum options_mc {
...
@@ -193,7 +194,7 @@ enum options_mc {
OPT_FT_MAX_WORD_LEN
,
OPT_FT_STOPWORD_FILE
,
OPT_FT_MAX_WORD_LEN
,
OPT_FT_STOPWORD_FILE
,
OPT_MAX_RECORD_LENGTH
,
OPT_AUTO_CLOSE
,
OPT_STATS_METHOD
,
OPT_TRANSACTION_LOG
,
OPT_MAX_RECORD_LENGTH
,
OPT_AUTO_CLOSE
,
OPT_STATS_METHOD
,
OPT_TRANSACTION_LOG
,
OPT_SKIP_SAFEMALLOC
,
OPT_ZEROFILL_KEEP_LSN
,
OPT_REQUIRE_CONTROL_FILE
,
OPT_SKIP_SAFEMALLOC
,
OPT_ZEROFILL_KEEP_LSN
,
OPT_REQUIRE_CONTROL_FILE
,
OPT_LOG_DIR
,
OPT_DATADIR
OPT_LOG_DIR
,
OPT_DATADIR
,
OPT_WARNING_FOR_WRONG_TRANSID
};
};
static
struct
my_option
my_long_options
[]
=
static
struct
my_option
my_long_options
[]
=
...
@@ -337,7 +338,9 @@ static struct my_option my_long_options[] =
...
@@ -337,7 +338,9 @@ static struct my_option my_long_options[] =
&
opt_transaction_logging
,
&
opt_transaction_logging
,
&
opt_transaction_logging
,
&
opt_transaction_logging
,
0
,
GET_BOOL
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
GET_BOOL
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"update-state"
,
'U'
,
{
"update-state"
,
'U'
,
"Mark tables as crashed if any errors were found."
,
"Mark tables as crashed if any errors were found and clean if check didn't "
"find any errors. This allows one to get rid of warnings like 'table not "
"properly closed'"
,
0
,
0
,
0
,
GET_NO_ARG
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
0
,
0
,
GET_NO_ARG
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"unpack"
,
'u'
,
{
"unpack"
,
'u'
,
"Unpack file packed with mariapack."
,
"Unpack file packed with mariapack."
,
...
@@ -349,6 +352,11 @@ static struct my_option my_long_options[] =
...
@@ -349,6 +352,11 @@ static struct my_option my_long_options[] =
0
,
0
,
0
,
GET_NO_ARG
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
0
,
0
,
GET_NO_ARG
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"wait"
,
'w'
,
"Wait if table is locked."
,
{
"wait"
,
'w'
,
"Wait if table is locked."
,
0
,
0
,
0
,
GET_NO_ARG
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
0
,
0
,
GET_NO_ARG
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"warning-for-wrong-transaction-id"
,
OPT_WARNING_FOR_WRONG_TRANSID
,
"Give a warning if we find a transaction id in the table that is bigger"
"than what exists in the control file. Use --skip-... to disable warning"
,
&
opt_warning_for_wrong_transid
,
&
opt_warning_for_wrong_transid
,
0
,
GET_BOOL
,
NO_ARG
,
1
,
0
,
0
,
0
,
0
,
0
},
{
"page_buffer_size"
,
OPT_PAGE_BUFFER_SIZE
,
{
"page_buffer_size"
,
OPT_PAGE_BUFFER_SIZE
,
"Size of page buffer. Used by --safe-repair"
,
"Size of page buffer. Used by --safe-repair"
,
&
check_param
.
use_buffers
,
&
check_param
.
use_buffers
,
0
,
&
check_param
.
use_buffers
,
&
check_param
.
use_buffers
,
0
,
...
@@ -1241,6 +1249,8 @@ static int maria_chk(HA_CHECK *param, char *filename)
...
@@ -1241,6 +1249,8 @@ static int maria_chk(HA_CHECK *param, char *filename)
llstr
(
info
->
state
->
records
,
llbuff
),
llstr
(
info
->
state
->
records
,
llbuff
),
llstr
(
info
->
state
->
del
,
llbuff2
));
llstr
(
info
->
state
->
del
,
llbuff2
));
maria_chk_init_for_check
(
param
,
info
);
maria_chk_init_for_check
(
param
,
info
);
if
(
opt_warning_for_wrong_transid
==
0
)
param
->
max_trid
=
~
(
ulonglong
)
0
;
error
=
maria_chk_status
(
param
,
info
);
error
=
maria_chk_status
(
param
,
info
);
maria_intersect_keys_active
(
share
->
state
.
key_map
,
param
->
keys_in_use
);
maria_intersect_keys_active
(
share
->
state
.
key_map
,
param
->
keys_in_use
);
error
|=
maria_chk_size
(
param
,
info
);
error
|=
maria_chk_size
(
param
,
info
);
...
@@ -1277,8 +1287,11 @@ static int maria_chk(HA_CHECK *param, char *filename)
...
@@ -1277,8 +1287,11 @@ static int maria_chk(HA_CHECK *param, char *filename)
}
}
if
(
!
error
)
if
(
!
error
)
{
{
if
((
share
->
state
.
changed
&
STATE_CHANGED
)
&&
if
(((
share
->
state
.
changed
&
(
param
->
testflag
&
T_UPDATE_STATE
))
(
STATE_CHANGED
|
STATE_CRASHED
|
STATE_CRASHED_ON_REPAIR
|
STATE_IN_REPAIR
))
||
share
->
state
.
open_count
!=
0
)
&&
(
param
->
testflag
&
T_UPDATE_STATE
))
info
->
update
|=
HA_STATE_CHANGED
|
HA_STATE_ROW_CHANGED
;
info
->
update
|=
HA_STATE_CHANGED
|
HA_STATE_ROW_CHANGED
;
DBUG_PRINT
(
"info"
,
(
"Reseting crashed state"
));
DBUG_PRINT
(
"info"
,
(
"Reseting crashed state"
));
share
->
state
.
changed
&=
~
(
STATE_CHANGED
|
STATE_CRASHED
|
share
->
state
.
changed
&=
~
(
STATE_CHANGED
|
STATE_CRASHED
|
...
...
storage/maria/maria_read_log.c
View file @
f0f21036
...
@@ -33,7 +33,7 @@ static my_bool opt_display_only, opt_apply, opt_apply_undo, opt_silent;
...
@@ -33,7 +33,7 @@ static my_bool opt_display_only, opt_apply, opt_apply_undo, opt_silent;
static
my_bool
opt_check
;
static
my_bool
opt_check
;
static
const
char
*
opt_tmpdir
;
static
const
char
*
opt_tmpdir
;
static
ulong
opt_page_buffer_size
;
static
ulong
opt_page_buffer_size
;
static
ulonglong
opt_start_from_lsn
;
static
ulonglong
opt_start_from_lsn
,
opt_end_lsn
;
static
MY_TMPDIR
maria_chk_tmpdir
;
static
MY_TMPDIR
maria_chk_tmpdir
;
...
@@ -120,8 +120,14 @@ int main(int argc, char **argv)
...
@@ -120,8 +120,14 @@ int main(int argc, char **argv)
LSN_IN_PARTS
(
lsn
));
LSN_IN_PARTS
(
lsn
));
}
}
if
(
opt_end_lsn
!=
LSN_IMPOSSIBLE
)
{
/* We can't apply undo if we use end_lsn */
opt_apply_undo
=
0
;
}
fprintf
(
stdout
,
"TRACE of the last maria_read_log
\n
"
);
fprintf
(
stdout
,
"TRACE of the last maria_read_log
\n
"
);
if
(
maria_apply_log
(
lsn
,
opt_apply
?
MARIA_LOG_APPLY
:
if
(
maria_apply_log
(
lsn
,
opt_
end_lsn
,
opt_
apply
?
MARIA_LOG_APPLY
:
(
opt_check
?
MARIA_LOG_CHECK
:
(
opt_check
?
MARIA_LOG_CHECK
:
MARIA_LOG_DISPLAY_HEADER
),
opt_silent
?
NULL
:
stdout
,
MARIA_LOG_DISPLAY_HEADER
),
opt_silent
?
NULL
:
stdout
,
opt_apply_undo
,
FALSE
,
FALSE
,
&
warnings_count
))
opt_apply_undo
,
FALSE
,
FALSE
,
&
warnings_count
))
...
@@ -178,18 +184,21 @@ static struct my_option my_long_options[] =
...
@@ -178,18 +184,21 @@ static struct my_option my_long_options[] =
{
"display-only"
,
'd'
,
"display brief info read from records' header"
,
{
"display-only"
,
'd'
,
"display brief info read from records' header"
,
(
uchar
**
)
&
opt_display_only
,
(
uchar
**
)
&
opt_display_only
,
0
,
GET_BOOL
,
(
uchar
**
)
&
opt_display_only
,
(
uchar
**
)
&
opt_display_only
,
0
,
GET_BOOL
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"maria
_log_dir_
path"
,
'l'
,
{
"maria
-log-dir-
path"
,
'l'
,
"Path to the directory where to store transactional log"
,
"Path to the directory where to store transactional log"
,
(
uchar
**
)
&
maria_data_root
,
(
uchar
**
)
&
maria_data_root
,
0
,
(
uchar
**
)
&
maria_data_root
,
(
uchar
**
)
&
maria_data_root
,
0
,
GET_STR
,
REQUIRED_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
GET_STR
,
REQUIRED_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"page
_buffer_
size"
,
'P'
,
""
,
{
"page
-buffer-
size"
,
'P'
,
""
,
&
opt_page_buffer_size
,
&
opt_page_buffer_size
,
0
,
&
opt_page_buffer_size
,
&
opt_page_buffer_size
,
0
,
GET_ULONG
,
REQUIRED_ARG
,
(
long
)
USE_BUFFER_INIT
,
GET_ULONG
,
REQUIRED_ARG
,
(
long
)
USE_BUFFER_INIT
,
(
long
)
USE_BUFFER_INIT
,
(
long
)
~
(
ulong
)
0
,
(
long
)
MALLOC_OVERHEAD
,
(
long
)
USE_BUFFER_INIT
,
(
long
)
~
(
ulong
)
0
,
(
long
)
MALLOC_OVERHEAD
,
(
long
)
IO_SIZE
,
0
},
(
long
)
IO_SIZE
,
0
},
{
"start
_from_
lsn"
,
'o'
,
"Start reading log from this lsn"
,
{
"start
-from-
lsn"
,
'o'
,
"Start reading log from this lsn"
,
&
opt_start_from_lsn
,
&
opt_start_from_lsn
,
&
opt_start_from_lsn
,
&
opt_start_from_lsn
,
0
,
GET_ULL
,
REQUIRED_ARG
,
0
,
0
,
~
(
longlong
)
0
,
0
,
0
,
0
},
0
,
GET_ULL
,
REQUIRED_ARG
,
0
,
0
,
~
(
longlong
)
0
,
0
,
0
,
0
},
{
"end-lsn"
,
'e'
,
"Stop applying at this lsn. If end-lsn is used, UNDO:s "
"will not be applied"
,
&
opt_end_lsn
,
&
opt_end_lsn
,
0
,
GET_ULL
,
REQUIRED_ARG
,
0
,
0
,
~
(
longlong
)
0
,
0
,
0
,
0
},
{
"silent"
,
's'
,
"Print less information during apply/undo phase"
,
{
"silent"
,
's'
,
"Print less information during apply/undo phase"
,
(
uchar
**
)
&
opt_silent
,
(
uchar
**
)
&
opt_silent
,
0
,
(
uchar
**
)
&
opt_silent
,
(
uchar
**
)
&
opt_silent
,
0
,
GET_BOOL
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
GET_BOOL
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
...
...
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