MDEV-9488 - Table cache cleanups
tdc_assign_new_table_id() does not relate to table cache, move it out of table_cache.cc.
This commit is contained in:
parent
90c9641a8a
commit
d3af894235
13
sql/table.cc
13
sql/table.cc
@ -63,6 +63,8 @@ LEX_STRING SLOW_LOG_NAME= {C_STRING_WITH_LEN("slow_log")};
|
||||
*/
|
||||
LEX_STRING parse_vcol_keyword= { C_STRING_WITH_LEN("PARSE_VCOL_EXPR ") };
|
||||
|
||||
static int64 last_table_id;
|
||||
|
||||
/* Functions defined in this file */
|
||||
|
||||
static void fix_type_pointers(const char ***array, TYPELIB *point_to_type,
|
||||
@ -327,7 +329,16 @@ TABLE_SHARE *alloc_table_share(const char *db, const char *table_name,
|
||||
&share->LOCK_share, MY_MUTEX_INIT_SLOW);
|
||||
mysql_mutex_init(key_TABLE_SHARE_LOCK_ha_data,
|
||||
&share->LOCK_ha_data, MY_MUTEX_INIT_FAST);
|
||||
tdc_assign_new_table_id(share);
|
||||
|
||||
/*
|
||||
There is one reserved number that cannot be used. Remember to
|
||||
change this when 6-byte global table id's are introduced.
|
||||
*/
|
||||
do
|
||||
{
|
||||
share->table_map_id= my_atomic_add64_explicit(&last_table_id, 1,
|
||||
MY_MEMORY_ORDER_RELAXED);
|
||||
} while (unlikely(share->table_map_id == ~0UL));
|
||||
}
|
||||
DBUG_RETURN(share);
|
||||
}
|
||||
|
@ -67,7 +67,6 @@ I_P_List <TDC_element,
|
||||
I_P_List_fast_push_back<TDC_element> > unused_shares;
|
||||
|
||||
static int64 tdc_version; /* Increments on each reload */
|
||||
static int64 last_table_id;
|
||||
static bool tdc_inited;
|
||||
|
||||
static int32 tc_count; /**< Number of TABLE objects in table cache. */
|
||||
@ -1091,56 +1090,3 @@ int tdc_iterate(THD *thd, my_hash_walk_action action, void *argument,
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Function to assign a new table map id to a table share.
|
||||
|
||||
PARAMETERS
|
||||
|
||||
share - Pointer to table share structure
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
We are intentionally not checking that share->mutex is locked
|
||||
since this function should only be called when opening a table
|
||||
share and before it is entered into the table definition cache
|
||||
(meaning that it cannot be fetched by another thread, even
|
||||
accidentally).
|
||||
|
||||
PRE-CONDITION(S)
|
||||
|
||||
share is non-NULL
|
||||
last_table_id_lock initialized (tdc_inited)
|
||||
|
||||
POST-CONDITION(S)
|
||||
|
||||
share->table_map_id is given a value that with a high certainty is
|
||||
not used by any other table (the only case where a table id can be
|
||||
reused is on wrap-around, which means more than 4 billion table
|
||||
share opens have been executed while one table was open all the
|
||||
time).
|
||||
|
||||
share->table_map_id is not ~0UL.
|
||||
*/
|
||||
|
||||
void tdc_assign_new_table_id(TABLE_SHARE *share)
|
||||
{
|
||||
ulong tid;
|
||||
DBUG_ENTER("assign_new_table_id");
|
||||
DBUG_ASSERT(share);
|
||||
DBUG_ASSERT(tdc_inited);
|
||||
|
||||
/*
|
||||
There is one reserved number that cannot be used. Remember to
|
||||
change this when 6-byte global table id's are introduced.
|
||||
*/
|
||||
do
|
||||
{
|
||||
tid= my_atomic_add64_explicit(&last_table_id, 1, MY_MEMORY_ORDER_RELAXED);
|
||||
} while (unlikely(tid == ~0UL));
|
||||
|
||||
share->table_map_id= tid;
|
||||
DBUG_PRINT("info", ("table_id= %lu", share->table_map_id));
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
@ -220,7 +220,6 @@ extern int tdc_wait_for_old_version(THD *thd, const char *db,
|
||||
ulong refresh_version= ULONG_MAX);
|
||||
extern ulong tdc_refresh_version(void);
|
||||
extern ulong tdc_increment_refresh_version(void);
|
||||
extern void tdc_assign_new_table_id(TABLE_SHARE *share);
|
||||
extern int tdc_iterate(THD *thd, my_hash_walk_action action, void *argument,
|
||||
bool no_dups= false);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user