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
60b738b6
Commit
60b738b6
authored
18 years ago
by
bell@sanja.is.com.ua
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
interface for transaction log management added to handlerton
iterators creation interface added to handlerton
parent
13ae6420
Branches unavailable
Tags unavailable
No related merge requests found
Changes
15
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
311 additions
and
21 deletions
+311
-21
sql/ha_berkeley.cc
sql/ha_berkeley.cc
+3
-1
sql/ha_federated.cc
sql/ha_federated.cc
+3
-1
sql/ha_heap.cc
sql/ha_heap.cc
+3
-1
sql/ha_innodb.cc
sql/ha_innodb.cc
+3
-1
sql/ha_myisam.cc
sql/ha_myisam.cc
+3
-1
sql/ha_myisammrg.cc
sql/ha_myisammrg.cc
+3
-1
sql/ha_ndbcluster.cc
sql/ha_ndbcluster.cc
+3
-1
sql/ha_partition.cc
sql/ha_partition.cc
+3
-1
sql/handler.cc
sql/handler.cc
+185
-4
sql/handler.h
sql/handler.h
+83
-0
sql/log.cc
sql/log.cc
+3
-1
storage/archive/ha_archive.cc
storage/archive/ha_archive.cc
+3
-2
storage/blackhole/ha_blackhole.cc
storage/blackhole/ha_blackhole.cc
+3
-1
storage/csv/ha_tina.cc
storage/csv/ha_tina.cc
+5
-2
storage/example/ha_example.cc
storage/example/ha_example.cc
+5
-3
No files found.
sql/ha_berkeley.cc
View file @
60b738b6
...
...
@@ -164,7 +164,9 @@ handlerton berkeley_hton = {
HTON_CLOSE_CURSORS_AT_COMMIT
|
HTON_FLUSH_AFTER_RENAME
,
NULL
,
/* binlog_func */
NULL
,
/* binlog_log_query */
NULL
/* release_temporary_latches */
NULL
,
/* release_temporary_latches */
NULL
,
/* get_log_status */
NULL
/* create_iterator */
};
handler
*
berkeley_create_handler
(
TABLE_SHARE
*
table
)
...
...
This diff is collapsed.
Click to expand it.
sql/ha_federated.cc
View file @
60b738b6
...
...
@@ -408,7 +408,9 @@ handlerton federated_hton= {
HTON_ALTER_NOT_SUPPORTED
,
NULL
,
/* binlog_func */
NULL
,
/* binlog_log_query */
NULL
/* release_temporary_latches */
NULL
,
/* release_temporary_latches */
NULL
,
/* get_log_status */
NULL
/* create_iterator */
};
...
...
This diff is collapsed.
Click to expand it.
sql/ha_heap.cc
View file @
60b738b6
...
...
@@ -65,7 +65,9 @@ handlerton heap_hton= {
HTON_CAN_RECREATE
,
NULL
,
/* binlog_func */
NULL
,
/* binlog_log_query */
NULL
/* release_temporary_latches */
NULL
,
/* release_temporary_latches */
NULL
,
/* get_log_status */
NULL
/* create_iterator */
};
static
handler
*
heap_create_handler
(
TABLE_SHARE
*
table
)
...
...
This diff is collapsed.
Click to expand it.
sql/ha_innodb.cc
View file @
60b738b6
...
...
@@ -244,7 +244,9 @@ handlerton innobase_hton = {
HTON_NO_FLAGS
,
NULL
,
/* binlog_func */
NULL
,
/* binlog_log_query */
innobase_release_temporary_latches
innobase_release_temporary_latches
,
NULL
,
/* get_log_status */
NULL
/* create_iterator */
};
...
...
This diff is collapsed.
Click to expand it.
sql/ha_myisam.cc
View file @
60b738b6
...
...
@@ -99,7 +99,9 @@ handlerton myisam_hton= {
HTON_CAN_RECREATE
,
NULL
,
/* binlog_func */
NULL
,
/* binlog_log_query */
NULL
/* release_temporary_latches */
NULL
,
/* release_temporary_latches */
NULL
,
/* get_log_status */
NULL
/* create_iterator */
};
...
...
This diff is collapsed.
Click to expand it.
sql/ha_myisammrg.cc
View file @
60b738b6
...
...
@@ -77,7 +77,9 @@ handlerton myisammrg_hton= {
HTON_CAN_RECREATE
|
HTON_ALTER_CANNOT_CREATE
,
NULL
,
/* binlog_func */
NULL
,
/* binlog_log_query */
NULL
/* release_temporary_latches */
NULL
,
/* release_temporary_latches */
NULL
,
/* get_log_status */
NULL
/* create_iterator */
};
static
handler
*
myisammrg_create_handler
(
TABLE_SHARE
*
table
)
...
...
This diff is collapsed.
Click to expand it.
sql/ha_ndbcluster.cc
View file @
60b738b6
...
...
@@ -81,7 +81,9 @@ handlerton ndbcluster_hton = {
ndbcluster_init
,
~
(
uint
)
0
,
/* slot */
/* below are initialized by name in ndbcluster_init() */
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
NULL
,
/* get_log_status */
NULL
/* create_iterator */
};
static
handler
*
ndbcluster_create_handler
(
TABLE_SHARE
*
table
)
...
...
This diff is collapsed.
Click to expand it.
sql/ha_partition.cc
View file @
60b738b6
...
...
@@ -111,7 +111,9 @@ handlerton partition_hton = {
HTON_NOT_USER_SELECTABLE
|
HTON_HIDDEN
,
NULL
,
/* binlog_func */
NULL
,
/* binlog_log_query */
NULL
/* release_temporary_latches */
NULL
,
/* release_temporary_latches */
NULL
,
/* get_log_status */
NULL
/* create_iterator */
};
/*
...
...
This diff is collapsed.
Click to expand it.
sql/handler.cc
View file @
60b738b6
...
...
@@ -75,7 +75,9 @@ const handlerton default_hton =
HTON_NO_FLAGS
,
/* flags */
NULL
,
/* binlog_func */
NULL
,
/* binlog_log_query */
NULL
/* release_temporary_latches */
NULL
,
/* release_temporary_latches */
NULL
,
/* get_log_status */
NULL
/* create_iterator */
};
static
SHOW_COMP_OPTION
have_yes
=
SHOW_OPTION_YES
;
...
...
@@ -2318,11 +2320,11 @@ void handler::get_dynamic_partition_info(PARTITION_INFO *stat_info, uint part_id
****************************************************************************/
/*
Initiates table-file and calls apropriate database-creator
Initiates table-file and calls ap
p
ropriate database-creator
NOTES
We must have a write lock on LOCK_open to be sure no other thread
interfers with table
interfer
e
s with table
RETURN
0 ok
...
...
@@ -2566,7 +2568,7 @@ int ha_discover(THD *thd, const char *db, const char *name,
/*
Call this function in order to give the handler the possiblity
Call this function in order to give the handler the possib
i
lity
to ask engine if there are any new tables that should be written to disk
or any dropped tables that need to be removed from disk
*/
...
...
@@ -3331,3 +3333,182 @@ int handler::ha_delete_row(const byte *buf)
#endif
return
0
;
}
/*
Dummy function which accept information about log files which is not need
by handlers
*/
void
signal_log_not_needed
(
struct
handlerton
,
char
*
log_file
)
{
DBUG_ENTER
(
"signal_log_not_needed"
);
DBUG_PRINT
(
"enter"
,
(
"logfile '%s'"
,
log_file
));
DBUG_VOID_RETURN
;
}
#ifdef TRANS_LOG_MGM_EXAMPLE_CODE
/*
Example of transaction log management functions based on assumption that logs
placed into a directory
*/
#include <my_dir.h>
#include <my_sys.h>
int
example_of_iterator_using_for_logs_cleanup
(
handlerton
*
hton
)
{
void
*
buffer
;
int
res
=
1
;
struct
handler_iterator
iterator
;
struct
handler_log_file_data
data
;
if
(
!
hton
->
create_iterator
)
return
1
;
/* iterator creator is not supported */
if
((
*
hton
->
create_iterator
)(
HA_TRANSACTLOG_ITERATOR
,
&
iterator
)
!=
HA_ITERATOR_OK
)
{
/* error during creation of log iterator or iterator is not supported */
return
1
;
}
while
((
*
iterator
.
next
)(
&
iterator
,
(
void
*
)
&
data
)
==
0
)
{
printf
(
"%s
\n
"
,
data
.
filename
.
str
);
if
(
data
.
status
==
HA_LOG_STATUS_FREE
&&
my_delete
(
data
.
filename
.
str
,
MYF
(
MY_WME
)))
goto
err
;
}
res
=
0
;
err:
(
*
iterator
.
destroy
)(
&
iterator
);
return
res
;
}
/*
Here we should get info from handler where it save logs but here is
just example, so we use constant.
IMHO FN_ROOTDIR ("/") is safe enough for example, because nobody has
rights on it except root and it consist of directories only at lest for
*nix (sorry, can't find windows-safe solution here, but it is only example).
*/
#define fl_dir FN_ROOTDIR
/*
Dummy function to return log status should be replaced by function which
really detect the log status and check that the file is a log of this
handler.
*/
enum
log_status
fl_get_log_status
(
char
*
log
)
{
MY_STAT
stat_buff
;
if
(
my_stat
(
log
,
&
stat_buff
,
MYF
(
0
)))
return
HA_LOG_STATUS_INUSE
;
return
HA_LOG_STATUS_NOSUCHLOG
;
}
struct
fl_buff
{
LEX_STRING
*
names
;
enum
log_status
*
statuses
;
uint32
entries
;
uint32
current
;
};
int
fl_log_iterator_next
(
struct
handler_iterator
*
iterator
,
void
*
iterator_object
)
{
struct
fl_buff
*
buff
=
(
struct
fl_buff
*
)
iterator
->
buffer
;
struct
handler_log_file_data
*
data
=
(
struct
handler_log_file_data
*
)
iterator_object
;
if
(
buff
->
current
>=
buff
->
entries
)
return
1
;
data
->
filename
=
buff
->
names
[
buff
->
current
];
data
->
status
=
buff
->
statuses
[
buff
->
current
];
buff
->
current
++
;
return
0
;
}
void
fl_log_iterator_destroy
(
struct
handler_iterator
*
iterator
)
{
my_free
((
gptr
)
iterator
->
buffer
,
MYF
(
MY_ALLOW_ZERO_PTR
));
}
/*
returns buffer, to be assigned in handler_iterator struct
*/
enum
handler_create_iterator_result
fl_log_iterator_buffer_init
(
struct
handler_iterator
*
iterator
)
{
MY_DIR
*
dirp
;
struct
fl_buff
*
buff
;
char
*
name_ptr
;
byte
*
ptr
;
FILEINFO
*
file
;
uint32
i
;
/* to be able to make my_free without crash in case of error */
iterator
->
buffer
=
0
;
if
(
!
(
dirp
=
my_dir
(
fl_dir
,
MYF
(
0
))))
{
return
HA_ITERATOR_ERROR
;
}
if
((
ptr
=
(
byte
*
)
my_malloc
(
ALIGN_SIZE
(
sizeof
(
fl_buff
))
+
((
ALIGN_SIZE
(
sizeof
(
LEX_STRING
))
+
sizeof
(
enum
log_status
)
+
+
FN_REFLEN
)
*
(
uint
)
dirp
->
number_off_files
),
MYF
(
0
)))
==
0
)
{
return
HA_ITERATOR_ERROR
;
}
buff
=
(
struct
fl_buff
*
)
ptr
;
buff
->
entries
=
buff
->
current
=
0
;
ptr
=
ptr
+
(
ALIGN_SIZE
(
sizeof
(
fl_buff
)));
buff
->
names
=
(
LEX_STRING
*
)
(
ptr
);
ptr
=
ptr
+
((
ALIGN_SIZE
(
sizeof
(
LEX_STRING
))
*
(
uint
)
dirp
->
number_off_files
));
buff
->
statuses
=
(
enum
log_status
*
)(
ptr
);
name_ptr
=
(
char
*
)(
ptr
+
(
sizeof
(
enum
log_status
)
*
(
uint
)
dirp
->
number_off_files
));
for
(
i
=
0
;
i
<
(
uint
)
dirp
->
number_off_files
;
i
++
)
{
enum
log_status
st
;
file
=
dirp
->
dir_entry
+
i
;
if
((
file
->
name
[
0
]
==
'.'
&&
((
file
->
name
[
1
]
==
'.'
&&
file
->
name
[
2
]
==
'\0'
)
||
file
->
name
[
1
]
==
'\0'
)))
continue
;
if
((
st
=
fl_get_log_status
(
file
->
name
))
==
HA_LOG_STATUS_NOSUCHLOG
)
continue
;
name_ptr
=
strxnmov
(
buff
->
names
[
buff
->
entries
].
str
=
name_ptr
,
FN_REFLEN
,
fl_dir
,
file
->
name
,
NullS
);
buff
->
names
[
buff
->
entries
].
length
=
(
name_ptr
-
buff
->
names
[
buff
->
entries
].
str
)
-
1
;
buff
->
statuses
[
buff
->
entries
]
=
st
;
buff
->
entries
++
;
}
iterator
->
buffer
=
buff
;
iterator
->
next
=
&
fl_log_iterator_next
;
iterator
->
destroy
=
&
fl_log_iterator_destroy
;
return
HA_ITERATOR_OK
;
}
/* An example of a iterator creator */
enum
handler_create_iterator_result
fl_create_iterator
(
enum
handler_iterator_type
type
,
struct
handler_iterator
*
iterator
)
{
switch
(
type
){
case
HA_TRANSACTLOG_ITERATOR
:
return
fl_log_iterator_buffer_init
(
iterator
);
default:
return
HA_ITERATOR_UNSUPPORTED
;
}
}
#endif
/*TRANS_LOG_MGM_EXAMPLE_CODE*/
This diff is collapsed.
Click to expand it.
sql/handler.h
View file @
60b738b6
...
...
@@ -461,6 +461,72 @@ typedef bool (stat_print_fn)(THD *thd, const char *type, uint type_len,
const
char
*
status
,
uint
status_len
);
enum
ha_stat_type
{
HA_ENGINE_STATUS
,
HA_ENGINE_LOGS
,
HA_ENGINE_MUTEX
};
/* Transaction log maintains type definitions */
enum
log_status
{
HA_LOG_STATUS_FREE
=
0
,
/* log is free and can be deleted */
HA_LOG_STATUS_INUSE
=
1
,
/* log can't be deleted because it is in use */
HA_LOG_STATUS_NOSUCHLOG
=
2
/* no such log (can't be returned by
the log iterator status) */
};
/*
Function for signaling that the log file changed its state from
LOG_STATUS_INUSE to LOG_STATUS_FREE
Now it do nothing, will be implemented as part of new transaction
log management for engines.
TODO: implement the function.
*/
void
signal_log_not_needed
(
struct
handlerton
,
char
*
log_file
);
/*
Data of transaction log iterator.
*/
struct
handler_log_file_data
{
LEX_STRING
filename
;
enum
log_status
status
;
};
enum
handler_iterator_type
{
/* request of transaction log iterator */
HA_TRANSACTLOG_ITERATOR
=
1
};
enum
handler_create_iterator_result
{
HA_ITERATOR_OK
,
/* iterator created */
HA_ITERATOR_UNSUPPORTED
,
/* such type of iterator is not supported */
HA_ITERATOR_ERROR
/* error during iterator creation */
};
/*
Iterator structure. Can be used by handler/handlerton for different purposes.
Iterator should be created in the way to point "before" the first object
it iterate, so next() call move it to the first object or return !=0 if
there is nothing to iterate through.
*/
struct
handler_iterator
{
/*
Moves iterator to next record and return 0 or return !=0
if there is no records.
iterator_object will be filled by this function if next() returns 0.
Content of the iterator_object depend on iterator type.
*/
int
(
*
next
)(
struct
handler_iterator
*
,
void
*
iterator_object
);
/*
Free resources allocated by iterator, after this call iterator
is not usable.
*/
void
(
*
destroy
)(
struct
handler_iterator
*
);
/*
Pointer to buffer for the iterator to use.
Should be allocated by function which created the iterator and
destroied by freed by above "destroy" call
*/
void
*
buffer
;
};
/*
handlerton is a singleton structure - one instance per storage engine -
to provide access to storage engine functionality that works on the
...
...
@@ -585,6 +651,23 @@ struct handlerton
const
char
*
query
,
uint
query_length
,
const
char
*
db
,
const
char
*
table_name
);
int
(
*
release_temporary_latches
)(
THD
*
thd
);
/*
Get log status.
If log_status is null then the handler do not support transaction
log information (i.e. log iterator can't be created).
(see example of implementation in handler.cc, TRANS_LOG_MGM_EXAMPLE_CODE)
*/
enum
log_status
(
*
get_log_status
)(
char
*
log
);
/*
Iterators creator.
Presence of the pointer should be checked before using
*/
enum
handler_create_iterator_result
(
*
create_iterator
)(
enum
handler_iterator_type
type
,
struct
handler_iterator
*
fill_this_in
);
};
extern
const
handlerton
default_hton
;
...
...
This diff is collapsed.
Click to expand it.
sql/log.cc
View file @
60b738b6
...
...
@@ -117,7 +117,9 @@ handlerton binlog_hton = {
HTON_NOT_USER_SELECTABLE
|
HTON_HIDDEN
,
NULL
,
/* binlog_func */
NULL
,
/* binlog_log_query */
NULL
/* release_temporary_latches */
NULL
,
/* release_temporary_latches */
NULL
,
/* get_log_status */
NULL
/* create_iterator */
};
...
...
This diff is collapsed.
Click to expand it.
storage/archive/ha_archive.cc
View file @
60b738b6
...
...
@@ -185,8 +185,9 @@ handlerton archive_hton = {
HTON_NO_FLAGS
,
NULL
,
/* binlog_func */
NULL
,
/* binlog_log_query */
NULL
/* release_temporary_latches */
NULL
,
/* release_temporary_latches */
NULL
,
/* get_log_status */
NULL
/* create_iterator */
};
static
handler
*
archive_create_handler
(
TABLE_SHARE
*
table
)
...
...
This diff is collapsed.
Click to expand it.
storage/blackhole/ha_blackhole.cc
View file @
60b738b6
...
...
@@ -70,7 +70,9 @@ handlerton blackhole_hton= {
HTON_CAN_RECREATE
|
HTON_ALTER_CANNOT_CREATE
,
NULL
,
/* binlog_func */
NULL
,
/* binlog_log_query */
NULL
/* release_temporary_latches */
NULL
,
/* release_temporary_latches */
NULL
,
/* get_log_status */
NULL
/* create_iterator */
};
...
...
This diff is collapsed.
Click to expand it.
storage/csv/ha_tina.cc
View file @
60b738b6
...
...
@@ -114,7 +114,10 @@ handlerton tina_hton= {
NULL
,
/* Fill FILES Table */
HTON_CAN_RECREATE
,
NULL
,
/* binlog_func */
NULL
/* binlog_log_query */
NULL
,
/* binlog_log_query */
NULL
,
/* release_temporary_latches */
NULL
,
/* get_log_status */
NULL
/* create_iterator */
};
/*****************************************************************************
...
...
This diff is collapsed.
Click to expand it.
storage/example/ha_example.cc
View file @
60b738b6
...
...
@@ -113,9 +113,11 @@ handlerton example_hton= {
NULL
,
/* Alter tablespace */
NULL
,
/* Fill Files table */
HTON_CAN_RECREATE
,
NULL
,
NULL
,
NULL
,
NULL
,
/* binlog_func */
NULL
,
/* binlog_log_query */
NULL
,
/* release_temporary_latches */
NULL
,
/* get_log_status */
NULL
/* create_iterator */
};
/* Variables for example share methods */
...
...
This diff is collapsed.
Click to expand it.
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