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
b4f97a14
Commit
b4f97a14
authored
Aug 10, 2016
by
Sergei Golubchik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
5.6.32
parent
720e04ff
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
107 additions
and
21 deletions
+107
-21
storage/innobase/fts/fts0fts.cc
storage/innobase/fts/fts0fts.cc
+55
-12
storage/innobase/fts/fts0opt.cc
storage/innobase/fts/fts0opt.cc
+1
-1
storage/innobase/handler/ha_innodb.cc
storage/innobase/handler/ha_innodb.cc
+5
-2
storage/innobase/handler/i_s.cc
storage/innobase/handler/i_s.cc
+37
-2
storage/innobase/include/fts0fts.h
storage/innobase/include/fts0fts.h
+3
-1
storage/innobase/row/row0merge.cc
storage/innobase/row/row0merge.cc
+1
-1
storage/innobase/srv/srv0mon.cc
storage/innobase/srv/srv0mon.cc
+5
-2
No files found.
storage/innobase/fts/fts0fts.cc
View file @
b4f97a14
...
...
@@ -265,13 +265,15 @@ FTS auxiliary INDEX table and clear the cache at the end.
@param[in,out] sync sync state
@param[in] unlock_cache whether unlock cache lock when write node
@param[in] wait whether wait when a sync is in progress
@param[in] has_dict whether has dict operation lock
@return DB_SUCCESS if all OK */
static
dberr_t
fts_sync
(
fts_sync_t
*
sync
,
bool
unlock_cache
,
bool
wait
);
bool
wait
,
bool
has_dict
);
/****************************************************************//**
Release all resources help by the words rb tree e.g., the node ilist. */
...
...
@@ -3566,7 +3568,7 @@ fts_add_doc_by_id(
DBUG_EXECUTE_IF
(
"fts_instrument_sync_debug"
,
fts_sync
(
cache
->
sync
,
true
,
true
);
fts_sync
(
cache
->
sync
,
true
,
true
,
false
);
);
DEBUG_SYNC_C
(
"fts_instrument_sync_request"
);
...
...
@@ -4378,13 +4380,11 @@ fts_sync_index(
}
/** Check if index cache has been synced completely
@param[in,out] sync sync state
@param[in,out] index_cache index cache
@return true if index is synced, otherwise false. */
static
bool
fts_sync_index_check
(
fts_sync_t
*
sync
,
fts_index_cache_t
*
index_cache
)
{
const
ib_rbt_node_t
*
rbt_node
;
...
...
@@ -4407,14 +4407,36 @@ fts_sync_index_check(
return
(
true
);
}
/*********************************************************************//**
Commit the SYNC, change state of processed doc ids etc.
/** Reset synced flag in index cache when rollback
@param[in,out] index_cache index cache */
static
void
fts_sync_index_reset
(
fts_index_cache_t
*
index_cache
)
{
const
ib_rbt_node_t
*
rbt_node
;
for
(
rbt_node
=
rbt_first
(
index_cache
->
words
);
rbt_node
!=
NULL
;
rbt_node
=
rbt_next
(
index_cache
->
words
,
rbt_node
))
{
fts_tokenizer_word_t
*
word
;
word
=
rbt_value
(
fts_tokenizer_word_t
,
rbt_node
);
fts_node_t
*
fts_node
;
fts_node
=
static_cast
<
fts_node_t
*>
(
ib_vector_last
(
word
->
nodes
));
fts_node
->
synced
=
false
;
}
}
/** Commit the SYNC, change state of processed doc ids etc.
@param[in,out] sync sync state
@return DB_SUCCESS if all OK */
static
MY_ATTRIBUTE
((
nonnull
,
warn_unused_result
))
dberr_t
fts_sync_commit
(
/*============*/
fts_sync_t
*
sync
)
/*!< in: sync state */
fts_sync_t
*
sync
)
{
dberr_t
error
;
trx_t
*
trx
=
sync
->
trx
;
...
...
@@ -4467,6 +4489,8 @@ fts_sync_commit(
(
double
)
n_nodes
/
(
double
)
elapsed_time
);
}
/* Avoid assertion in trx_free(). */
trx
->
dict_operation_lock_mode
=
0
;
trx_free_for_background
(
trx
);
return
(
error
);
...
...
@@ -4489,6 +4513,10 @@ fts_sync_rollback(
index_cache
=
static_cast
<
fts_index_cache_t
*>
(
ib_vector_get
(
cache
->
indexes
,
i
));
/* Reset synced flag so nodes will not be skipped
in the next sync, see fts_sync_write_words(). */
fts_sync_index_reset
(
index_cache
);
for
(
j
=
0
;
fts_index_selector
[
j
].
value
;
++
j
)
{
if
(
index_cache
->
ins_graph
[
j
]
!=
NULL
)
{
...
...
@@ -4514,6 +4542,9 @@ fts_sync_rollback(
rw_lock_x_unlock
(
&
cache
->
lock
);
fts_sql_rollback
(
trx
);
/* Avoid assertion in trx_free(). */
trx
->
dict_operation_lock_mode
=
0
;
trx_free_for_background
(
trx
);
}
...
...
@@ -4522,13 +4553,15 @@ FTS auxiliary INDEX table and clear the cache at the end.
@param[in,out] sync sync state
@param[in] unlock_cache whether unlock cache lock when write node
@param[in] wait whether wait when a sync is in progress
@param[in] has_dict whether has dict operation lock
@return DB_SUCCESS if all OK */
static
dberr_t
fts_sync
(
fts_sync_t
*
sync
,
bool
unlock_cache
,
bool
wait
)
bool
wait
,
bool
has_dict
)
{
ulint
i
;
dberr_t
error
=
DB_SUCCESS
;
...
...
@@ -4557,6 +4590,12 @@ fts_sync(
DEBUG_SYNC_C
(
"fts_sync_begin"
);
fts_sync_begin
(
sync
);
/* When sync in background, we hold dict operation lock
to prevent DDL like DROP INDEX, etc. */
if
(
has_dict
)
{
sync
->
trx
->
dict_operation_lock_mode
=
RW_S_LATCH
;
}
begin_sync:
if
(
cache
->
total_size
>
fts_max_cache_size
)
{
/* Avoid the case: sync never finish when
...
...
@@ -4597,7 +4636,7 @@ fts_sync(
ib_vector_get
(
cache
->
indexes
,
i
));
if
(
index_cache
->
index
->
to_be_dropped
||
fts_sync_index_check
(
sync
,
index_cache
))
{
||
fts_sync_index_check
(
index_cache
))
{
continue
;
}
...
...
@@ -4612,6 +4651,7 @@ fts_sync(
}
rw_lock_x_lock
(
&
cache
->
lock
);
sync
->
interrupted
=
false
;
sync
->
in_progress
=
false
;
os_event_set
(
sync
->
event
);
rw_lock_x_unlock
(
&
cache
->
lock
);
...
...
@@ -4635,20 +4675,23 @@ FTS auxiliary INDEX table and clear the cache at the end.
@param[in,out] table fts table
@param[in] unlock_cache whether unlock cache when write node
@param[in] wait whether wait for existing sync to finish
@param[in] has_dict whether has dict operation lock
@return DB_SUCCESS on success, error code on failure. */
UNIV_INTERN
dberr_t
fts_sync_table
(
dict_table_t
*
table
,
bool
unlock_cache
,
bool
wait
)
bool
wait
,
bool
has_dict
)
{
dberr_t
err
=
DB_SUCCESS
;
ut_ad
(
table
->
fts
);
if
(
!
dict_table_is_discarded
(
table
)
&&
table
->
fts
->
cache
)
{
err
=
fts_sync
(
table
->
fts
->
cache
->
sync
,
unlock_cache
,
wait
);
err
=
fts_sync
(
table
->
fts
->
cache
->
sync
,
unlock_cache
,
wait
,
has_dict
);
}
return
(
err
);
...
...
storage/innobase/fts/fts0opt.cc
View file @
b4f97a14
...
...
@@ -2986,7 +2986,7 @@ fts_optimize_sync_table(
if
(
table
)
{
if
(
dict_table_has_fts_index
(
table
)
&&
table
->
fts
->
cache
)
{
fts_sync_table
(
table
,
true
,
false
);
fts_sync_table
(
table
,
true
,
false
,
true
);
}
dict_table_close
(
table
,
FALSE
,
FALSE
);
...
...
storage/innobase/handler/ha_innodb.cc
View file @
b4f97a14
...
...
@@ -6529,6 +6529,7 @@ dberr_t
ha_innobase
::
innobase_lock_autoinc
(
void
)
/*====================================*/
{
DBUG_ENTER
(
"ha_innobase::innobase_lock_autoinc"
);
dberr_t
error
=
DB_SUCCESS
;
ut_ad
(
!
srv_read_only_mode
);
...
...
@@ -6563,6 +6564,8 @@ ha_innobase::innobase_lock_autoinc(void)
/* Fall through to old style locking. */
case
AUTOINC_OLD_STYLE_LOCKING
:
DBUG_EXECUTE_IF
(
"die_if_autoinc_old_lock_style_used"
,
ut_ad
(
0
););
error
=
row_lock_table_autoinc_for_mysql
(
prebuilt
);
if
(
error
==
DB_SUCCESS
)
{
...
...
@@ -6576,7 +6579,7 @@ ha_innobase::innobase_lock_autoinc(void)
ut_error
;
}
return
(
error
);
DBUG_RETURN
(
error
);
}
/********************************************************************//**
...
...
@@ -11392,7 +11395,7 @@ ha_innobase::optimize(
if
(
innodb_optimize_fulltext_only
)
{
if
(
prebuilt
->
table
->
fts
&&
prebuilt
->
table
->
fts
->
cache
&&
!
dict_table_is_discarded
(
prebuilt
->
table
))
{
fts_sync_table
(
prebuilt
->
table
,
false
,
true
);
fts_sync_table
(
prebuilt
->
table
,
false
,
true
,
false
);
fts_optimize_table
(
prebuilt
->
table
);
}
return
(
HA_ADMIN_OK
);
...
...
storage/innobase/handler/i_s.cc
View file @
b4f97a14
/*****************************************************************************
Copyright (c) 2007, 201
5
, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2007, 201
6
, Oracle and/or its affiliates. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
...
...
@@ -3004,15 +3004,26 @@ i_s_fts_deleted_generic_fill(
DBUG_RETURN
(
0
);
}
deleted
=
fts_doc_ids_create
();
/* Prevent DDL to drop fts aux tables. */
rw_lock_s_lock
(
&
dict_operation_lock
);
user_table
=
dict_table_open_on_name
(
fts_internal_tbl_name
,
FALSE
,
FALSE
,
DICT_ERR_IGNORE_NONE
);
if
(
!
user_table
)
{
rw_lock_s_unlock
(
&
dict_operation_lock
);
DBUG_RETURN
(
0
);
}
else
if
(
!
dict_table_has_fts_index
(
user_table
))
{
dict_table_close
(
user_table
,
FALSE
,
FALSE
);
rw_lock_s_unlock
(
&
dict_operation_lock
);
DBUG_RETURN
(
0
);
}
deleted
=
fts_doc_ids_create
();
trx
=
trx_allocate_for_background
();
trx
->
op_info
=
"Select for FTS DELETE TABLE"
;
...
...
@@ -3040,6 +3051,8 @@ i_s_fts_deleted_generic_fill(
dict_table_close
(
user_table
,
FALSE
,
FALSE
);
rw_lock_s_unlock
(
&
dict_operation_lock
);
DBUG_RETURN
(
0
);
}
...
...
@@ -3421,6 +3434,12 @@ i_s_fts_index_cache_fill(
DBUG_RETURN
(
0
);
}
if
(
user_table
->
fts
==
NULL
||
user_table
->
fts
->
cache
==
NULL
)
{
dict_table_close
(
user_table
,
FALSE
,
FALSE
);
DBUG_RETURN
(
0
);
}
cache
=
user_table
->
fts
->
cache
;
ut_a
(
cache
);
...
...
@@ -3859,10 +3878,15 @@ i_s_fts_index_table_fill(
DBUG_RETURN
(
0
);
}
/* Prevent DDL to drop fts aux tables. */
rw_lock_s_lock
(
&
dict_operation_lock
);
user_table
=
dict_table_open_on_name
(
fts_internal_tbl_name
,
FALSE
,
FALSE
,
DICT_ERR_IGNORE_NONE
);
if
(
!
user_table
)
{
rw_lock_s_unlock
(
&
dict_operation_lock
);
DBUG_RETURN
(
0
);
}
...
...
@@ -3875,6 +3899,8 @@ i_s_fts_index_table_fill(
dict_table_close
(
user_table
,
FALSE
,
FALSE
);
rw_lock_s_unlock
(
&
dict_operation_lock
);
DBUG_RETURN
(
0
);
}
...
...
@@ -4014,14 +4040,21 @@ i_s_fts_config_fill(
fields
=
table
->
field
;
/* Prevent DDL to drop fts aux tables. */
rw_lock_s_lock
(
&
dict_operation_lock
);
user_table
=
dict_table_open_on_name
(
fts_internal_tbl_name
,
FALSE
,
FALSE
,
DICT_ERR_IGNORE_NONE
);
if
(
!
user_table
)
{
rw_lock_s_unlock
(
&
dict_operation_lock
);
DBUG_RETURN
(
0
);
}
else
if
(
!
dict_table_has_fts_index
(
user_table
))
{
dict_table_close
(
user_table
,
FALSE
,
FALSE
);
rw_lock_s_unlock
(
&
dict_operation_lock
);
DBUG_RETURN
(
0
);
}
...
...
@@ -4077,6 +4110,8 @@ i_s_fts_config_fill(
dict_table_close
(
user_table
,
FALSE
,
FALSE
);
rw_lock_s_unlock
(
&
dict_operation_lock
);
DBUG_RETURN
(
0
);
}
...
...
storage/innobase/include/fts0fts.h
View file @
b4f97a14
...
...
@@ -840,13 +840,15 @@ FTS auxiliary INDEX table and clear the cache at the end.
@param[in,out] table fts table
@param[in] unlock_cache whether unlock cache when write node
@param[in] wait whether wait for existing sync to finish
@param[in] has_dict whether has dict operation lock
@return DB_SUCCESS on success, error code on failure. */
UNIV_INTERN
dberr_t
fts_sync_table
(
dict_table_t
*
table
,
bool
unlock_cache
,
bool
wait
);
bool
wait
,
bool
has_dict
);
/****************************************************************//**
Free the query graph but check whether dict_sys->mutex is already
...
...
storage/innobase/row/row0merge.cc
View file @
b4f97a14
...
...
@@ -1987,7 +1987,7 @@ row_merge_read_clustered_index(
/* Sync fts cache for other fts indexes to keep all
fts indexes consistent in sync_doc_id. */
err
=
fts_sync_table
(
const_cast
<
dict_table_t
*>
(
new_table
),
false
,
true
);
false
,
true
,
false
);
if
(
err
==
DB_SUCCESS
)
{
fts_update_next_doc_id
(
...
...
storage/innobase/srv/srv0mon.cc
View file @
b4f97a14
/*****************************************************************************
Copyright (c) 2010, 201
4
, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2010, 201
6
, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2012, Facebook Inc.
This program is free software; you can redistribute it and/or modify it under
...
...
@@ -1347,7 +1347,10 @@ srv_mon_set_module_control(
module */
set_current_module
=
FALSE
;
}
else
if
(
module_id
==
MONITOR_ALL_COUNTER
)
{
if
(
!
(
innodb_counter_info
[
ix
].
monitor_type
&
MONITOR_GROUP_MODULE
))
{
continue
;
}
}
else
{
/* Hitting the next module, stop */
break
;
...
...
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