24#ifndef PERSISTED_VARIABLE_H_INCLUDED
25#define PERSISTED_VARIABLE_H_INCLUDED
30#include <unordered_set>
70 return key == persist_var.
key;
102#ifdef HAVE_PSI_INTERFACE
120 int init(
int *argc,
char ***argv);
151 const char *target_var_name =
nullptr,
152 int target_var_name_length = 0);
189 bool arg_separator_added =
false,
190 bool plugin_options =
false,
198 bool &arg_separator_added);
222 std::string
to_hex(
const std::string &value);
223 std::string
from_hex(
const std::string &value);
236 bool is_read_only =
false);
245 size_t &file_key_length,
bool generate =
false);
JSON DOM abstract base class.
Definition: json_dom.h:172
Represents a JSON container value of type "object" (ECMA), type J_OBJECT here.
Definition: json_dom.h:367
Definition: persisted_variable.h:111
Key_info m_key_info
Definition: persisted_variable.h:336
bool m_keyring_support_available
Definition: persisted_variable.h:339
bool append_read_only_variables(int *argc, char ***argv, bool arg_separator_added=false, bool plugin_options=false, MEM_ROOT *root_to_use=nullptr)
append read only persisted variables to command line options with a separator.
Definition: persisted_variable.cc:2073
Persisted_variables_uset * get_persisted_dynamic_variables()
Get persisted variables.
Definition: persisted_variable.cc:2289
bool reset_persisted_variables(THD *thd, const char *name, bool if_exists)
Reset persisted options.
Definition: persisted_variable.cc:2165
void clear_sensitive_blob_and_iv()
Definition: persisted_variable.cc:2350
void unlock()
Release lock on m_persisted_dynamic_variables/m_persisted_static_variables.
Definition: persisted_variable.h:209
void load_aliases()
After extracting the variables from the JSON, we duplicate any variable definition that relates to an...
Definition: persisted_variable.cc:1757
int read_persist_file_v2(const Json_object *json_object)
Read v2 persistent file.
Definition: persisted_variable.cc:1651
void close_persist_file()
Close persisted config file.
Definition: persisted_variable.cc:885
Persisted_variables_uset m_persisted_dynamic_variables
Definition: persisted_variable.h:313
void set_parse_early_sources()
Helper to set source information for PARSE_EARLY variables.
Definition: persisted_variable.cc:902
File_version
Definition: persisted_variable.h:113
bool load_persist_file()
Search for persisted config file and if found read persistent options.
Definition: persisted_variable.cc:897
std::string to_hex(const std::string &value)
Definition: persisted_variable.cc:2355
Persisted_variables_uset * get_persisted_dynamic_parse_early_variables()
Get persisted parse-early variables.
Definition: persisted_variable.cc:2311
bool open_persist_backup_file(int flag)
Open persisted backup config file.
Definition: persisted_variable.cc:875
Persisted_variables_uset m_persisted_dynamic_parse_early_variables
Definition: persisted_variable.h:309
static Persisted_variables_cache * m_instance
Definition: persisted_variable.h:346
return_status decrypt_sensitive_variables()
Decrypt sensitive variables values.
Definition: persisted_variable.cc:2593
int read_persist_file_v1(const Json_object *json_object)
Read v1 persistent file.
Definition: persisted_variable.cc:1536
Persisted_variables_umap * get_persisted_static_sensitive_variables(THD *thd)
Get SENSITIVE persisted static variables.
Definition: persisted_variable.cc:2327
void cleanup()
Definition: persisted_variable.cc:2342
bool write_persist_file_v2(String &dest, bool &do_cleanup)
Write v2 persistent file.
Definition: persisted_variable.cc:685
bool get_file_encryption_key(std::unique_ptr< unsigned char[]> &file_key, size_t &file_key_length, bool generate=false)
Get file encryption key.
Definition: persisted_variable.cc:2394
return_status encrypt_sensitive_variables()
Encrypt sensitive variables values.
Definition: persisted_variable.cc:2521
static Persisted_variables_cache * get_instance()
Return a singleton object.
Definition: persisted_variable.cc:336
MYSQL_FILE * m_fd
Definition: persisted_variable.h:349
void handle_option_type_change()
Helper function to handle changes in option type.
Definition: persisted_variable.cc:1869
MEM_ROOT ro_persisted_argv_alloc
Definition: persisted_variable.h:357
std::string m_persist_filename
Definition: persisted_variable.h:350
Persisted_variables_uset m_persisted_dynamic_plugin_variables
Definition: persisted_variable.h:324
void keyring_support_available()
Set internal state to reflect keyring support status.
Definition: persisted_variable.cc:2665
Persisted_variables_uset m_persisted_dynamic_sensitive_variables
Definition: persisted_variable.h:311
Persisted_variables_umap * get_persisted_static_variables()
Get persisted static variables.
Definition: persisted_variable.cc:2319
std::string from_hex(const std::string &value)
Definition: persisted_variable.cc:2363
return_status
Definition: persisted_variable.h:243
static const char * get_variable_alias(const sys_var *system_var)
If the variable has an alias, return the name for the alias.
Definition: persisted_variable.cc:593
int read_persist_file()
Driver function: Read options from persistent file.
Definition: persisted_variable.cc:1903
Persisted_variables_uset m_persisted_dynamic_sensitive_plugin_variables
Definition: persisted_variable.h:319
bool set_variable(THD *thd, set_var *system_var)
Update in-memory copy for every SET PERSIST statement.
Definition: persisted_variable.cc:376
std::string m_sensitive_variables_blob
Definition: persisted_variable.h:341
Persisted_variables_umap m_persisted_static_variables
Definition: persisted_variable.h:306
Persisted_variables_uset * get_persisted_dynamic_sensitive_variables(THD *thd)
Get SENSITIVE persisted variables.
Definition: persisted_variable.cc:2297
mysql_mutex_t m_LOCK_persist_file
Definition: persisted_variable.h:352
void lock()
Acquire lock on m_persisted_dynamic_variables/m_persisted_static_variables.
Definition: persisted_variable.h:205
static String * get_variable_value(THD *thd, sys_var *system_var, String *str, bool *is_null)
Retrieve variables value from sys_var.
Definition: persisted_variable.cc:567
MEM_ROOT parse_early_persisted_argv_alloc
Definition: persisted_variable.h:354
std::string m_iv
Definition: persisted_variable.h:343
Persisted_variables_umap m_persisted_static_parse_early_variables
Definition: persisted_variable.h:304
Persisted_variables_cache()
Definition: persisted_variable.cc:231
bool append_parse_early_variables(int *argc, char ***argv, bool &arg_separator_added)
append PARSE EARLY read only persisted variables to command line options with a separator.
Definition: persisted_variable.cc:1993
int init(int *argc, char ***argv)
Initialize class members.
Definition: persisted_variable.cc:261
mysql_mutex_t m_LOCK_persist_variables
Definition: persisted_variable.h:345
Persisted_variables_umap m_persisted_static_sensitive_variables
Definition: persisted_variable.h:302
std::string m_persist_backup_filename
Definition: persisted_variable.h:351
void assert_lock_owner()
Assert caller that owns lock on m_persisted_dynamic_variables/m_persisted_static_variables.
Definition: persisted_variable.h:214
bool flush_to_file()
Driver: Flush in-memory copy to persistent file.
Definition: persisted_variable.cc:803
bool open_persist_file(int flag)
Open persisted config file.
Definition: persisted_variable.cc:854
File_version m_default_version
Definition: persisted_variable.h:363
bool set_persisted_options(bool plugin_options, const char *target_var_name=nullptr, int target_var_name_length=0)
set_persisted_options() will set the options read from persisted config file
Definition: persisted_variable.cc:950
bool extract_variables_from_json(const Json_dom *dom, bool is_read_only=false)
extract_variables_from_json() is used to extract all the variable information which is in the form of...
Definition: persisted_variable.cc:1433
Persisted_variables_umap * get_persisted_static_parse_early_variables()
Get persisted parse-early static variables.
Definition: persisted_variable.cc:2338
MEM_ROOT ro_persisted_plugin_argv_alloc
Definition: persisted_variable.h:359
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:167
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:36
set_var_base descendant for assignments to the system variables.
Definition: set_var.h:983
A class representing one system variable - that is something that can be accessed as @global....
Definition: set_var.h:107
#define mysql_mutex_lock(M)
Definition: mysql_mutex.h:50
#define mysql_mutex_unlock(M)
Definition: mysql_mutex.h:57
#define mysql_mutex_assert_owner(M)
Wrapper, to use safe_mutex_assert_owner with instrumented mutexes.
Definition: mysql_mutex.h:112
static int flag
Definition: hp_test1.cc:40
This file follows Google coding style, except for the name MEM_ROOT (which is kept for historical rea...
Some integer typedefs for easier portability.
unsigned long long int ulonglong
Definition: my_inttypes.h:56
Defines various enable/disable and HAVE_ macros related to the performance schema instrumentation sys...
ABI for instrumented mutexes.
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1105
std::conditional_t< !std::is_array< T >::value, std::unique_ptr< T, detail::Deleter< T > >, std::conditional_t< detail::is_unbounded_array_v< T >, std::unique_ptr< T, detail::Array_deleter< std::remove_extent_t< T > > >, void > > unique_ptr
The following is a common type that is returned by all the ut::make_unique (non-aligned) specializati...
Definition: ut0new.h:2440
void my_init_persist_psi_keys(void)
CLASS Persisted_variables_cache Holds <name,value> pair of all options which needs to be persisted to...
Definition: persisted_variable.cc:161
Instrumentation helpers for mutexes.
Performance schema instrumentation interface.
PSI_memory_key key_memory_persisted_variables_memroot
Definition: psi_memory_key.cc:125
Our own string classes, used pervasively throughout the executor.
case opt name
Definition: sslopt-case.h:29
The MEM_ROOT is a simple arena, where allocations are carved out of larger blocks.
Definition: my_alloc.h:83
An instrumented FILE structure.
Definition: mysql_file.h:484
Definition: persisted_variable.h:326
std::string m_file_key_iv
Definition: persisted_variable.h:332
const size_t m_master_key_size
Definition: persisted_variable.h:329
std::string m_master_key_name
Definition: persisted_variable.h:327
std::string m_master_key_type
Definition: persisted_variable.h:328
std::string m_file_key
Definition: persisted_variable.h:331
An instrumented mutex structure.
Definition: mysql_mutex_bits.h:50
STRUCT st_persist_var_hash.
Definition: persisted_variable.h:80
size_t operator()(const st_persist_var &pv) const
Definition: persisted_variable.h:81
STRUCT st_persist_var.
Definition: persisted_variable.h:55
st_persist_var()
Definition: persisted_variable.cc:201
std::string user
Definition: persisted_variable.h:59
ulonglong timestamp
Definition: persisted_variable.h:58
std::string value
Definition: persisted_variable.h:57
bool is_null
Definition: persisted_variable.h:61
std::string key
Definition: persisted_variable.h:56
std::string host
Definition: persisted_variable.h:60
bool operator==(const st_persist_var &persist_var) const
Definition: persisted_variable.h:69