Details
-
Task
-
Status: Closed (View Workflow)
-
Critical
-
Resolution: Fixed
Description
Implement the engine-defined options corresponding to useful table
options, including (options marked as ++ are included only because
of the "keep" decision on the corresponding spider system variables
in MDEV-27228):
- auto_increment_mode
- bgs_mode
- bulk_size
- bulk_update_size
- connect_timeout
- multi_split_read
- net_read_timeout
- net_write_timeout
- priority
- query_cache
- query_cache_sync
- read_only_mode
- skip_parallel_search++
- host
- password
- port
- username
- wrapper
- default_file
- default_group
- driver
- dsn
- filedsn
- socket
- ssl_capath
- ssl_ca
- ssl_cert
- ssl_cipher
- ssl_key
- ssl_vscs
- use_pushdown_udf
- force_bulk_delete
- force_bulk_update
- table_count_mode
- delete_all_rows_type
- idx
Spider table parameters are documented (incompletely) at
https://mariadb.com/kb/en/spider-table-parameters/
Many of these table params have a twin system variable. Examples
include read_only_mode, net_read_timeout etc. The natural
approach to these params is to use HA_TOPTION_SYSVAR macro,
which takes care of the value overriding. This is also a natural
continuation of spider sysvar tickets like MDEV-27169 and
MDEV-31524. However, table options can not fall back dynamically to
the current sysvar value, so we have to keep the overriding/fallback
mechanism and use the string type (HA_TOPTION_STRING) for these
values, where we can encode unspecified as the null string.
There's also a temporary problem with unspecified non-string table
options. Given that we will keep connection string parsing by
COMMENT or CONNECTION until MDEV-31146, It makes sense as a part of
the changes for this ticket, to ignore COMMENT/CONNECTION parsing
when any table option is used. However, it is not possible to tell
whether a non-string type table option has been specified. We fix
this by making these options also string type (so all spider options
are of the string type) and if any of them is non-null (i.e.
specified), we ignore COMMENT/CONNECTION for parsing. An alternative
fix also considered was to make the COMMENT string parsing override
these table options. However, this is an inferior choice given
that 1. this increases complexity in overriding; 2. only six
relatively uncommon table options are not sysvars and not strings
(priority, query_cache, query_cache_sync, force_bulk_delete,
force_bulk_update, table_count_mode); 3. all params are already
supplied as strings (e.g. read_only_mode "1") in the existing
comment string parsing so no surprise to users if they remain
strings, and in create table statements strings do not need to be
quoted anyway; 4. users might want to use comments for comments.
Even though after this task there are MDEV-28861 and MDEV-31146 that
duplicate and remove connection info encoded in comments, there will
still be connection string parser in the spider codebase, for spider
udfs like spider_direct_sql and spider_copy_tables.
Regarding the choice of the table options in the list above, some
undocumented parameters have unclear purpose. It is not in the scope
of this ticket to try to document every one of them. Examples
include force_bulk_update, force_bulk_delete,
table_count_mode. Also worth noting is the parameter
delete_all_rows_type, which is buggy at 11.2 (MDEV-31996), but
on face value its purpose is clear, so we keep it for now.
Attachments
Issue Links
- blocks
-
MDEV-28861 Spider: Deprecate table options by COMMENT
-
- Closed
-
- causes
-
MDEV-32486 Assertion `!trx->alloc_line_no[id] || trx->alloc_line_no[id] == line_no' failed in spider_alloc_mem_calc
-
- Closed
-
-
MDEV-32558 ERROR 1429 (base) versus crash [SIGSEGV in spider_create_conn] (28856 patch) and ERROR 12719 infinite loop (base) versus ERROR 12518 table is read only (patch) on optimized builds in CLI
-
- Closed
-
- includes
-
MDEV-32157 Backport cleanup commits from MDEV-28856 to lower versions
-
- Closed
-
-
MDEV-32234 Missing spaces in Spider variable descriptions
-
- Closed
-
- is blocked by
-
MDEV-31117 Spider UBSAN runtime error: applying non-zero offset x to null pointer in st_spider_param_string_parse::restore_delims
-
- Closed
-
-
MDEV-32486 Assertion `!trx->alloc_line_no[id] || trx->alloc_line_no[id] == line_no' failed in spider_alloc_mem_calc
-
- Closed
-
- relates to
-
MDEV-27228 Deprecate Spider plugin variables that result in excessive tweak
-
- Stalled
-
-
MDEV-27106 Spider: specify connection to data node by engine-defined attributes
-
- Closed
-
-
MDEV-32492 SIGSEGV in spider_conn_first_link_idx and others on DELETE, INSERT and SELECT
-
- Closed
-
-
MDEV-32557 "ERROR 12501 (HY000): The connect info 'MYSQL' is invalid" not repeatable in MDEV-28856 branch
-
- Closed
-
-
MDEV-32585 ASAN: stack-buffer-overflow in get_defaults_options on SELECT
-
- Confirmed
-
From the big switch in spider_parse_connect_info in spd_table.cc
at 11.2[1], I identified 107 table options the user can specify in a
spider connection string, annotated with their statuses:
+: to keep
++: to keep (mdev-27228)
/: deprecated
--: to deprecate (mdev-27228)
access_balances
active_link_count
auto_increment_mode++
bgs_first_read--
bgs_mode
bgs_second_read--
bka_engine--
bka_mode--
bka_table_name_types/
buffer_size/
bulk_size++
bulk_update_mode--
bulk_update_size++
casual_read--
connect_timeouts++
crd_bg_mode--
crd_interval--
crd_mode/
crd_sync/
crd_type/
crd_weight/
delete_all_rows_type
direct_dup_insert--
direct_order_limit--
error_read_mode--
error_write_mode--
first_read--
force_bulk_delete
force_bulk_update
init_sql_alloc_size/
internal_limit/
internal_offset/
internal_optimize--
internal_optimize_local--
key_hint
link_statuses
load_crd_at_startup--
load_sts_at_startup--
low_mem_read--
max_order--
monitoring_bg_flag
monitoring_bg_interval
monitoring_bg_kind
monitoring_binlog_pos_at_failing
monitoring_flag
monitoring_kind
monitoring_limit
monitoring_sid
multi_split_read++
net_read_timeouts++
net_write_timeouts++
priority
query_cache
query_cache_sync
quick_mode--
quick_page_byte--
quick_page_size--
read_only_mode++
read_rate
reset_sql_alloc--
scan_rate
second_read--
select_column_mode--
selupd_lock_mode--
semi_split_read--
semi_split_read_limit--
semi_table_lock/
semi_table_lock_conn/
server_names+
skip_default_condition--
skip_parallel_search++
split_read--
static_key_cardinality
static_link_ids
static_mean_rec_length
static_records_for_status
store_last_crd--
store_last_sts/
strict_group_bys--
sts_bg_mode--
sts_interval--
sts_mode/
sts_sync/
table_count_mode
tgt_dbs+
tgt_default_files
tgt_default_groups
tgt_drivers
tgt_dsns
tgt_filedsns
tgt_hosts+
tgt_passwords+
tgt_pk_names
tgt_ports+
tgt_sequence_names
tgt_sockets
tgt_ssl_capaths
tgt_ssl_cas
tgt_ssl_certs
tgt_ssl_ciphers
tgt_ssl_keys
tgt_ssl_vscs
tgt_table_names+
tgt_usernames+
tgt_wrappers+
use_pushdown_udf
use_table_charset--
Of the annotations:
reasons, like remote table names and ports.
are marked in MDEV-27288 to keep. If the system variables
make sense as table options, then the decision to keep carries over
can ignore them for this task
are marked in MDEV-27288 to deprecate, but have not been deprecated
yet. Assuming the decision is correct, we can ignore these options
for this task too.
Removing the ones marked as deprecated to to be deprecated, we are
left with 58 table options, of which we need to make decisions on 50
of them (i.e. those not marked with a single +), whether to
implement each one of them as an engine defined option:
+: to keep
++: to keep (mdev-27228)
access_balances
active_link_count
auto_increment_mode++
bgs_mode
bulk_size++
bulk_update_size++
connect_timeouts++
delete_all_rows_type
force_bulk_delete
force_bulk_update
key_hint
link_statuses
monitoring_bg_flag
monitoring_bg_interval
monitoring_bg_kind
monitoring_binlog_pos_at_failing
monitoring_flag
monitoring_kind
monitoring_limit
monitoring_sid
multi_split_read++
net_read_timeouts++
net_write_timeouts++
priority
query_cache
query_cache_sync
read_only_mode++
read_rate
scan_rate
server_names+
skip_parallel_search++
static_key_cardinality
static_link_ids
static_mean_rec_length
static_records_for_status
table_count_mode
tgt_dbs+
tgt_default_files
tgt_default_groups
tgt_drivers
tgt_dsns
tgt_filedsns
tgt_hosts+
tgt_passwords+
tgt_pk_names
tgt_ports+
tgt_sequence_names
tgt_sockets
tgt_ssl_capaths
tgt_ssl_cas
tgt_ssl_certs
tgt_ssl_ciphers
tgt_ssl_keys
tgt_ssl_vscs
tgt_table_names+
tgt_usernames+
tgt_wrappers+
use_pushdown_udf
[1] https://github.com/MariaDB/server/blob/4f39ae75606d0400d7d6a3fc5e2123d7aa244011/storage/spider/spd_table.cc#L2199