added a comment -
Dockerfile
FROM quay.io/mariadb-foundation/mariadb-debug:10.6
RUN apt-get update \
&& apt-get install -y mariadb-plugin-connect mariadb-plugin-connect-dbgsym curl strace gdb && \
rm -rf /var/lib/apt/lists/*
build: $ buildah bud --tag mariadb_connect .
run
$ docker run -d -e MARIADB_USER=anel -e MARIADB_PASSWORD=anel -e MARIADB_DATABASE=web_users -e MARIADB_RANDOM_ROOT_PASSWORD=1 --cap-add CAP_SYS_PTRACE -p 2345 --name mariadb-server1 --rm mariadb_connect
6a1184cd5306df68228ed6f9500b8295a6efeec8d3405830b81929be779f50ca
Notes
CAP_SYS_PTRACE to allow debugging in container
-p to expose the ports
docker may require --security-opt seccomp=unconfined https://docs.docker.com/engine/security/seccomp/
obtain port map for debug port
$ podman port mariadb-server1
2345/tcp -> 0.0.0.0:33973
mariadb client
$ podman exec -ti mariadb-server1 mariadb -p']bQ@>+_mN6{v{%YZ[`@l|RB".R!3K?8}' web_users
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.6.5-MariaDB-309209c51c211d0733a6c7a67fb70a523a1706f7 mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [web_users]>
gdbserver to run inside container
$ podman exec -ti mariadb-server1 gosu mysql gdbserver --attach :2345 1
Attached; pid = 1
Listening on port 2345
Remote debugging from host ::ffff:10.0.2.100, port 41920
Detaching from process 175
Detaching from process 176
gdb remote connection using port number from 2345 map above
$ ./gdb/gdb
GNU gdb (GDB) 12.0.50.20210828-git
(gdb) target extended-remote :33973
Remote debugging using :33973
Reading /usr/sbin/mariadbd from remote target...
warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.
Reading /usr/sbin/mariadbd from remote target...
Reading symbols from target:/usr/sbin/mariadbd...
Reading /usr/lib/debug/.build-id/4f/59b9d9bede1f9466cc81fc68ff6c20fb690381.debug from remote target...
Reading /usr/lib/debug/.build-id/4f/59b9d9bede1f9466cc81fc68ff6c20fb690381.debug from remote target...
Reading symbols from target:/usr/lib/debug/.build-id/4f/59b9d9bede1f9466cc81fc68ff6c20fb690381.debug...
Reading /lib/x86_64-linux-gnu/libpcre2-8.so.0 from remote target...
Reading /lib/x86_64-linux-gnu/libcrypt.so.1 from remote target...
....
(gdb) b JSONDISC::GetColumns
Breakpoint 1 at 0x7f6bac73eab0: file ./storage/connect/tabjson.cpp, line 172.
Program not restarted.
(gdb) c
Continuing.
The JSONDISC::GetColumns is the function that generate the Can only retrieve columns from object rows error.
create table
MariaDB [web_users]> create table cusers3 engine=connect http='http://jsonplaceholder.typicode.com/users' table_type=json;
back to debugger
[Detaching after vfork from child process 175]
[Detaching after vfork from child process 176]
[New Thread 1.173]
[New Thread 1.174]
[Switching to Thread 1.163]
Thread 20 hit Breakpoint 1, JSONDISC::GetColumns (this=this@entry=0x7f6b2bfff040, g=g@entry=0x7f6b3c019db0, db=db@entry=0x7f6b3c0110b8 "web_users", dsn=dsn@entry=0x0, topt=topt@entry=0x7f6b3c018750) at ./storage/connect/tabjson.cpp:172
172 ./storage/connect/tabjson.cpp: No such file or directory.
(gdb) bt full
#0 JSONDISC::GetColumns (this=this@entry=0x7f6b2bfff040, g=g@entry=0x7f6b3c019db0, db=db@entry=0x7f6b3c0110b8 "web_users", dsn=dsn@entry=0x0, topt=topt@entry=0x7f6b3c018750) at ./storage/connect/tabjson.cpp:172
filename = '\000' <repeats 80 times>, "web_users/cusers3.json", '\000' <repeats 314 times>...
reclg = <optimized out>
mgo = <optimized out>
G = <optimized out>
#1 0x00007f6bac73f8ce in JSONColumns (g=g@entry=0x7f6b3c019db0, db=db@entry=0x7f6b3c0110b8 "web_users", dsn=dsn@entry=0x0, topt=topt@entry=0x7f6b3c018750, info=info@entry=false) at ./storage/connect/tabjson.cpp:94
buftyp = {1, 3, 1, 7, 7, 3, 3, 1}
fldtyp = {FLD_NAME, FLD_TYPE, FLD_TYPENAME, FLD_PREC, FLD_LENGTH, FLD_SCALE, FLD_NULL, FLD_FORMAT}
length = {0, 6, 8, 10, 10, 6, 6, 0}
i = <optimized out>
n = 0
ncol = 8
jcp = <optimized out>
pjdc = 0x7f6b2bfff040
qrp = <optimized out>
crp = <optimized out>
#2 0x00007f6bac7abea8 in RESTColumns (g=g@entry=0x7f6b3c019db0, tp=tp@entry=0x7f6b3c018750, tab=tab@entry=0x7f6b3c0109a0 "cusers3", db=db@entry=0x7f6b3c0110b8 "web_users", info=info@entry=false) at ./storage/connect/tabrest.cpp:256
qrp = 0x0
filename = "/var/lib/mysql/web_users/cusers3.json", '\000' <repeats 4059 times>...
rc = <optimized out>
http = 0x7f6b3c018828 "http://jsonplaceholder.typicode.com/users"
uri = 0x0
fn = <optimized out>
ftype = <optimized out>
grf = <optimized out>
curl = true
#3 0x00007f6bac6ef845 in connect_assisted_discovery (thd=0x7f6b3c000c58, table_s=0x7f6b86ffcfa0, create_info=0x7f6b86ffdc80) at ./storage/connect/ha_connect.cc:6142
rem = <optimized out>
key = <optimized out>
cnm = <optimized out>
dft = <optimized out>
xtra = <optimized out>
fmt = <optimized out>
dec = <optimized out>
typ = <optimized out>
i = <optimized out>
len = <optimized out>
prec = 0
flg = <optimized out>
v = 0 '\000'
fncn = 0x0
user = 0x7f6bac7b1e62 "root"
fn = 0x0
db = 0x7f6b3c0110b8 "web_users"
host = 0x7f6bac7b1e67 "localhost"
pwd = 0x0
sep = <optimized out>
tbl = <optimized out>
src = 0x0
col = 0x0
ocl = 0x0
rnk = 0x0
pic = 0x0
fcl = 0x0
skc = 0x0
zfn = <optimized out>
tab = 0x7f6b3c0109a0 "cusers3"
dsn = <optimized out>
shm = 0x0
dpath = <optimized out>
url = 0x0
port = 0
mxr = 0
rc = 0
mul = 0
sop = <optimized out>
ucnc = <optimized out>
cnc = <optimized out>
cto = -1
qto = -1
tm = <optimized out>
fnc = 1
supfnc = <optimized out>
bif = false
ok = <optimized out>
dbf = <optimized out>
ttp = <optimized out>
ttr = <optimized out>
qrp = 0x0
crp = <optimized out>
xp = 0x7f6b3c0186b0
g = 0x7f6b3c019db0
topt = 0x7f6b3c018750
buf = "CREATE TABLE whatever (\000p\223\350\327\374U\000\000\220\313\377\206k\177\000\000\300\332\320\326\374U\000\000\000\000\000\000\000\000\000\000\220\313\377\206k\177\000\000 \313\377\206k\177\000\000\063\371\320\325\374U\000\000\000\000\000\000\000\000\000\000\260\026\027\326\374U\000\000X\f\000<k\177\000\000X\f\000<k\177\000\000\f\000\000\000\000\000\000\000\340-\363\325\374U\000\000`\314\377\206k\177\000\000\220\313\377\206k\177\000\000\000\314\377\206k\177\000\000r\373\320\325\374U\000\000\240-\350\327\374U\000\000\360+\350\327\374U\000\000\340/\350\327\374U\000\000\060.\350\327\374U\000\000\300.\350\327\374U\000\000"...
sql = {<Charset> = {m_charset = 0x55fcd6cf9140 <my_charset_utf8mb3_general_ci>}, <Binary_string> = {<Sql_alloc> = {<No data fields>}, Ptr = 0x7f6b86ffca90 "CREATE TABLE whatever (", str_length = 23, Alloced_length = 1024, extra_alloc = 0, alloced = false, thread_specific = false}, <No data fields>}
#4 0x000055fcd5da975e in create_table_impl (thd=thd@entry=0x7f6b3c000c58, ddl_log_state_create=ddl_log_state_create@entry=0x7f6b86ffda30, ddl_log_state_rm=<optimized out>, orig_db=@0x7f6b3c0109f0: {str = 0x7f6b3c0110b8 "web_users", length = 9}, orig_table_name=@0x7f6b3c010a00: {str = 0x7f6b3c0109a0 "cusers3", length = 7}, db=@0x7f6b3c0109f0: {str = 0x7f6b3c0110b8 "web_users", length = 9}, table_name=@0x7f6b3c010a00: {str = 0x7f6b3c0109a0 "cusers3", length = 7}, path=@0x7f6b86ffd760: {str = 0x7f6b86ffd780 "./web_users/cusers3", length = 19}, options=<optimized out>, create_info=0x7f6b86ffdc80, alter_info=0x7f6b86ffdb90, create_table_mode=-3, is_trans=0x7f6b86ffda2f, key_info=0x7f6b86ffd758, key_count=0x7f6b86ffd754, frm=0x7f6b86ffd770) at ./sql/sql_table.cc:4397
share = {table_category = TABLE_CATEGORY_TEMPORARY, name_hash = {key_offset = 0, key_length = 0, blength = 0, records = 0, flags = 0, array = {buffer = 0x0, elements = 0, max_element = 0, alloc_increment = 0, size_of_element = 0, m_psi_key = 0, malloc_flags = 0}, get_key = 0x0, hash_function = 0x0, free = 0x0, charset = 0x0}, mem_root = {free = 0x7f6b3c018738, used = 0x0, pre_alloc = 0x0, min_malloc = 32, block_size = 985, block_num = 5, first_block_usage = 0, error_handler = 0x55fcd5debbf0 <sql_alloc_error_handler()>, m_psi_key = 0}, keynames = {count = 0, name = 0x0, type_names = 0x0, type_lengths = 0x0}, fieldnames = {count = 0, name = 0x0, type_names = 0x0, type_lengths = 0x0}, intervals = 0x0, LOCK_ha_data = {m_mutex = {__data = {__lock = 0, __count = 0, __owner = 0, __nusers = 0, __kind = 0, __spins = 0, __elision = 0, __list = {__prev = 0x0, __next = 0x0}}, __size = '\000' <repeats 39 times>, __align = 0}, m_psi = 0x0}, LOCK_share = {m_mutex = {__data = {__lock = 0, __count = 0, __owner = 0, __nusers = 0, __kind = 0, __spins = 0, __elision = 0, __list = {__prev = 0x0, __next = 0x0}}, __size = '\000' <repeats 39 times>, __align = 0}, m_psi = 0x0}, tdc = 0x0, tabledef_version = {str = 0x0, length = 0}, option_list = 0x7f6b3c011188, option_struct = 0x7f6b3c018750, field = 0x7f6b86ffcf50, found_next_number_field = 0x0, key_info = 0x0, check_constraints = 0x0, blob_field = 0x0, vcol_defs = {str = 0x0, length = 0}, stats_cb = {stats_state = {state = 0}, hist_state = {state = 0}, mem_root = {free = 0x0, used = 0x0, pre_alloc = 0x0, min_malloc = 0, block_size = 0, block_num = 0, first_block_usage = 0, error_handler = 0x0, m_psi_key = 0}, table_stats = 0x0, total_hist_size = 0}, default_values = 0x0, comment = {str = 0x0, length = 0}, table_charset = 0x0, check_set = 0x0, all_set = {bitmap = 0x0, last_word_ptr = 0x0, mutex = 0x0, last_word_mask = 0, n_bits = 0}, table_cache_key = {str = 0x7f6b3c0110b8 "web_users", length = 0}, db = {str = 0x7f6b3c0110b8 "web_users", length = 9}, table_name = {str = 0x7f6b3c0109a0 "cusers3", length = 7}, path = {str = 0x7f6b86ffd780 "./web_users/cusers3", length = 19}, normalized_path = {str = 0x7f6b86ffd780 "./web_users/cusers3", length = 19}, connect_string = {str = 0x0, length = 0}, keys_in_use = {buffer = {0}}, ignored_indexes = {buffer = {0}}, keys_for_keyread = {buffer = {0}}, min_rows = 0, max_rows = 0, avg_row_length = 0, mysql_version = 0, reclength = 0, stored_rec_length = 0, db_plugin = 0x55fcd7e89440, row_type = ROW_TYPE_DEFAULT, table_type = TABLE_TYPE_UNKNOWN, tmp_table = INTERNAL_TMP_TABLE, transactional = HA_CHOICE_UNDEF, page_checksum = HA_CHOICE_UNDEF, key_block_size = 0, stats_sample_pages = 0, stats_auto_recalc = HA_STATS_AUTO_RECALC_DEFAULT, null_bytes = 0, last_null_bit_pos = 0, null_bytes_for_compare = 0, fields = 0, stored_fields = 0, virtual_fields = 0, virtual_not_stored_blob_fields = 0, null_fields = 0, blob_fields = 0, varchar_fields = 0, default_fields = 0, visible_fields = 0, default_expressions = 0, table_check_constraints = 0, field_check_constraints = 0, rec_buff_length = 0, keys = 0, key_parts = 0, ext_key_parts = 0, max_key_length = 0, max_unique_length = 0, uniques = 0, db_create_options = 0, db_options_in_use = 0, db_record_offset = 0, rowid_field_offset = 0, primary_key = 0, next_number_index = 0, next_number_key_offset = 0, next_number_keypart = 0, error = OPEN_FRM_OK, open_errno = 0, column_bitmap_size = 0, frm_version = 11 '\v', check_set_initialized = TABLE_SHARE::NOT_INITIALIZED, use_ext_keys = false, null_field_first = false, system = false, not_usable_by_query_cache = true, online_backup = false, no_replicate = false, crashed = false, is_view = false, can_cmp_whole_record = false, table_creation_was_logged = false, non_determinstic_insert = false, vcols_need_refixing = false, has_update_default_function = false, can_do_row_logging = false, long_unique_table = false, table_map_id = 6, incompatible_version = 0, view_def = 0x0, sequence = 0x0, auto_partitioned = false, partition_info_str = 0x0, partition_info_str_len = 0, partition_info_buffer_size = 0, default_part_plugin = 0x0, versioned = VERS_UNDEFINED, vers = {start_fieldno = 0, end_fieldno = 0, name = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}, constr_name = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}, unique_keys = 0}, period = {start_fieldno = 0, end_fieldno = 0, name = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}, constr_name = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}, unique_keys = 0}, table_field_def_cache = 0x0, ha_share = 0x0, m_psi = 0x0, frm_image = 0x0}
hton = 0x55fcd7f2e988
ha_err = <optimized out>
no_fields = 0x0
err = <optimized out>
alias = <optimized out>
file = 0x0
error = 1
frm_only = false
internal_tmp_table = false
#5 0x000055fcd5da9cd8 in mysql_create_table_no_lock (thd=thd@entry=0x7f6b3c000c58, ddl_log_state_create=ddl_log_state_create@entry=0x7f6b86ffda30, ddl_log_state_rm=ddl_log_state_rm@entry=0x7f6b86ffda50, db=db@entry=0x7f6b3c0109f0, table_name=table_name@entry=0x7f6b3c010a00, create_info=create_info@entry=0x7f6b86ffdc80, alter_info=0x7f6b86ffdb90, is_trans=0x7f6b86ffda2f, create_table_mode=-3, table_list=0x7f6b3c0109d8) at ./sql/sql_table.cc:4546
not_used_1 = 0x4
not_used_2 = 32619
res = <optimized out>
path_length = <optimized out>
path = "./web_users/cusers3\000\374U\000\000\220\327\377\206k\177\000\000\000\000\000\000k\177\000\000\000\000\000\000k\177\000\000\020\323\320\326\374U\000\000\260\327\377\206k\177\000\000\000\000\000\000\000\000\000\000f\221\312\325\374U\000\000\340\205\001<k\177\000\000\276[E\326\374U\000\000\001\000\000\000\000\000\000\000\350\023\001<k\177\000\000\200Q\001\000\000\000\000\000\370(\000<k\177", '\000' <repeats 18 times>, "`\330\377\206k\177\000\000\360\221\312\325\374U\000\000\000\000\000\000k\177\000\000@\271\310\326\374U\000\000p\330\377\206k\177\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000"...
cpath = {str = 0x7f6b86ffd780 "./web_users/cusers3", length = 19}
frm = {str = 0x0, length = 0}
#6 0x000055fcd5daa0e5 in mysql_create_table (thd=thd@entry=0x7f6b3c000c58, create_table=create_table@entry=0x7f6b3c0109d8, create_info=create_info@entry=0x7f6b86ffdc80, alter_info=alter_info@entry=0x7f6b86ffdb90) at ./sql/sql_table.cc:4658
err = <optimized out>
pos_in_locked_tables = <optimized out>
mdl_ticket = <optimized out>
ddl_log_state_create = {list = 0x7f6b3c007b88, execute_entry = 0x7f6b3c010768, main_entry = 0x7f6b3c007b88, flags = 4}
ddl_log_state_rm = {list = 0x0, execute_entry = 0x0, main_entry = 0x0, flags = 0}
create_table_mode = <optimized out>
save_thd_create_info_options = <optimized out>
is_trans = false
result = <optimized out>
#7 0x000055fcd5dab9c9 in Sql_cmd_create_table_like::execute (this=<optimized out>, thd=0x7f6b3c000c58) at ./sql/sql_table.cc:11778
lex = <optimized out>
select_lex = 0x7f6b3c0055f8
first_table = 0x7f6b3c0109d8
link_to_local = 184
create_table = 0x7f6b3c0109d8
select_tables = 0x0
unit = <optimized out>
res = <optimized out>
used_engine = <optimized out>
create_info = {<HA_CREATE_INFO> = {<Table_scope_and_contents_source_st> = {<Table_scope_and_contents_source_pod_st> = {alter_table_convert_to_charset = 0x0, tabledef_version = {str = 0x0, length = 0}, org_tabledef_version = {str = 0x0, length = 0}, connect_string = {str = 0x0, length = 0}, comment = {str = 0x0, length = 0}, alias = {str = 0x7f6b3c0109d0 "cusers3", length = 7}, org_storage_engine_name = {str = 0x0, length = 0}, new_storage_engine_name = {str = 0x7f6bac7b1000 "CONNECT", length = 7}, password = 0x0, tablespace = 0x0, data_file_name = 0x0, index_file_name = 0x0, max_rows = 0, min_rows = 0, auto_increment_value = 0, table_options = 0, avg_row_length = 0, used_fields = 4096, key_block_size = 0, expression_length = 0, field_check_constraints = 0, stats_sample_pages = 0, null_bits = 0, options = 0, merge_insert_method = 0, extra_size = 0, db_type = 0x55fcd7f2e988, row_type = ROW_TYPE_DEFAULT, transactional = HA_CHOICE_UNDEF, storage_media = HA_SM_DEFAULT, page_checksum = HA_CHOICE_UNDEF, option_list = 0x7f6b3c011188, stats_auto_recalc = HA_STATS_AUTO_RECALC_DEFAULT, varchar = false, sequence = false, check_constraint_list = 0x0, option_struct = 0x0, fields_option_struct = 0x0, indexes_option_struct = 0x0, table = 0x0, pos_in_locked_tables = 0x0, merge_list = 0x0, mdl_ticket = 0x0, table_was_deleted = false, seq_create_info = 0x0}, vers_info = {<Table_period_info> = {<Sql_alloc> = {<No data fields>}, name = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x55fcd66771b9 "SYSTEM_TIME", length = 11}, <No data fields>}, <No data fields>}, period = {start = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}, end = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}}, create_if_not_exists = false, constr = 0x0, unique_keys = 0}, as_row = {start = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}, end = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}}, versioned_fields = false, unversioned_fields = false}, period_info = {<Sql_alloc> = {<No data fields>}, name = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}, period = {start = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}, end = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}}, create_if_not_exists = false, constr = 0x0, unique_keys = 0}}, <Schema_specification_st> = {default_table_charset = 0x0, schema_comment = 0x0}, alter_info = 0x7f6b86ffdb90}, <DDL_options_st> = {m_options = DDL_options_st::OPT_NONE}, <No data fields>}
alter_info = {drop_list = {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x55fcd6d0d310 <end_of_list>, last = 0x7f6b86ffdb90, elements = 0}, <No data fields>}, alter_list = {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x55fcd6d0d310 <end_of_list>, last = 0x7f6b86ffdba8, elements = 0}, <No data fields>}, key_list = {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x55fcd6d0d310 <end_of_list>, last = 0x7f6b86ffdbc0, elements = 0}, <No data fields>}, alter_rename_key_list = {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x55fcd6d0d310 <end_of_list>, last = 0x7f6b86ffdbd8, elements = 0}, <No data fields>}, create_list = {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x55fcd6d0d310 <end_of_list>, last = 0x7f6b86ffdbf0, elements = 0}, <No data fields>}, alter_index_ignorability_list = {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x55fcd6d0d310 <end_of_list>, last = 0x7f6b86ffdc08, elements = 0}, <No data fields>}, check_constraint_list = {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x55fcd6d0d310 <end_of_list>, last = 0x7f6b86ffdc20, elements = 0}, <No data fields>}, flags = 0, partition_flags = 0, keys_onoff = Alter_info::LEAVE_AS_IS, partition_names = {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x55fcd6d0d310 <end_of_list>, last = 0x7f6b86ffdc50, elements = 0}, <No data fields>}, num_parts = 0, requested_algorithm = Alter_info::ALTER_TABLE_ALGORITHM_NONE, requested_lock = Alter_info::ALTER_TABLE_LOCK_DEFAULT}
#8 0x000055fcd5d06cce in mysql_execute_command (thd=0x7f6b3c000c58, is_called_from_prepared_stmt=<optimized out>) at ./sql/sql_parse.cc:5997
multi_delete_error = <optimized out>
wsrep_error_label = <optimized out>
error = <optimized out>
res = 0
up_result = 0
lex = 0x7f6b3c004d38
select_lex = 0x7f6b3c0055f8
first_table = 0x7f6b3c0109d8
all_tables = 0x7f6b3c0109d8
unit = 0x7f6b3c004e00
have_table_map_for_update = false
rpl_filter = <optimized out>
ots = {ctx = 0x7f6b3c0049e8, traceable = false}
trace_command = {<Json_writer_struct> = {my_writer = <optimized out>, context = {writer = <optimized out>}, closed = false}, <No data fields>}
trace_command_steps = {<Json_writer_struct> = {my_writer = 0x0, context = {writer = <optimized out>}, closed = false}, <No data fields>}
orig_binlog_format = BINLOG_FORMAT_MIXED
orig_current_stmt_binlog_format = BINLOG_FORMAT_STMT
#9 0x000055fcd5cf7037 in mysql_parse (thd=0x7f6b3c000c58, rawbuf=<optimized out>, length=<optimized out>, parser_state=<optimized out>) at ./sql/sql_parse.cc:8030
found_semicolon = <optimized out>
error = <optimized out>
lex = 0x7f6b3c004d38
err = <optimized out>
#10 0x000055fcd5d02fb5 in dispatch_command (command=COM_QUERY, thd=0x7f6b3c000c58, packet=<optimized out>, packet_length=<optimized out>, blocking=<optimized out>) at ./sql/sql_class.h:234
packet_end = 0x7f6b3c0108b4 ""
parser_state = {m_lip = {lookahead_token = -1, lookahead_yylval = 0x0, m_thd = 0x7f6b3c000c58, m_ptr = 0x7f6b3c0108b5 "\t", m_tok_start = 0x7f6b3c0108b5 "\t", m_tok_end = 0x7f6b3c0108b5 "\t", m_end_of_query = 0x7f6b3c0108b4 "", m_tok_start_prev = 0x7f6b3c0108b4 "", m_buf = 0x7f6b3c010850 "create table cusers3 engine=connect http='http://jsonplaceholder.typicode.com/users' table_type=json", m_buf_length = 100, m_echo = true, m_echo_saved = false, m_cpp_buf = 0x7f6b3c010910 "create table cusers3 engine=connect http='http://jsonplaceholder.typicode.com/users' table_type=json", m_cpp_ptr = 0x7f6b3c010974 "", m_cpp_tok_start = 0x7f6b3c010974 "", m_cpp_tok_start_prev = 0x7f6b3c010974 "", m_cpp_tok_end = 0x7f6b3c010974 "", m_body_utf8 = 0x0, m_body_utf8_ptr = 0x0, m_cpp_utf8_processed_ptr = 0x0, next_state = MY_LEX_END, found_semicolon = 0x0, ignore_space = false, stmt_prepare_mode = false, multi_statements = true, yylineno = 1, m_digest = 0x0, in_comment = NO_COMMENT, in_comment_saved = NO_COMMENT, m_cpp_text_start = 0x7f6b3c010965 "table_type=json", m_cpp_text_end = 0x7f6b3c01096f "=json", m_underscore_cs = 0x0}, m_yacc = {yacc_yyss = 0x0, yacc_yyvs = 0x0, m_set_signal_info = {m_item = {0x0 <repeats 12 times>}}, m_lock_type = TL_READ_DEFAULT, m_mdl_type = MDL_SHARED_READ}, m_digest_psi = 0x0}
net = 0x7f6b3c000ee8
error = false
do_end_of_statement = true
drop_more_results = false
__FUNCTION__ = "dispatch_command"
res = <optimized out>
#11 0x000055fcd5d04ea8 in do_command (thd=0x7f6b3c000c58, blocking=blocking@entry=true) at ./sql/sql_parse.cc:1404
return_value = <optimized out>
packet = 0x7f6b3c0084b8 "\003create table cusers3 engine=connect http='http://jsonplaceholder.typicode.com/users' table_type=json"
packet_length = <optimized out>
net = 0x7f6b3c000ee8
command = COM_QUERY
__FUNCTION__ = "do_command"
#12 0x000055fcd5e143d7 in do_handle_one_connection (connect=<optimized out>, put_in_cache=true) at ./sql/sql_connect.cc:1418
create_user = true
thr_create_utime = <optimized out>
thd = 0x7f6b3c000c58
#13 0x000055fcd5e1472d in handle_one_connection (arg=arg@entry=0x55fcd83a52f8) at ./sql/sql_connect.cc:1312
connect = 0x55fcd83a52f8
#14 0x000055fcd617241d in pfs_spawn_thread (arg=0x55fcd831fd98) at ./storage/perfschema/pfs.cc:2201
typed_arg = 0x55fcd831fd98
user_arg = 0x55fcd83a52f8
user_start_routine = 0x55fcd5e146d0 <handle_one_connection(void*)>
pfs = <optimized out>
klass = <optimized out>
#15 0x00007f6bad05b609 in start_thread (arg=<optimized out>) at pthread_create.c:477
ret = <optimized out>
pd = <optimized out>
unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140099803150080, -2772519655998606122, 140722899554222, 140722899554223, 94544424106720, 140099803148032, 2833052169746920662, 2833135820276774102}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
not_first_call = 0
#16 0x00007f6bacc49293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
json file retreived
$ podman exec -ti 6a1184cd5306 gosu mysql bash
mysql@6a1184cd5306:/$ cd /var/lib/mysql/
mysql@6a1184cd5306:/var/lib/mysql$ ls
aria_log.00000001 aria_log_control ddl_recovery.log ib_buffer_pool ib_logfile0 ibdata1 ibtmp1 multi-master.info mysql performance_schema sys web_users
mysql@6a1184cd5306:/var/lib/mysql$ cd web_users/
mysql@6a1184cd5306:/var/lib/mysql/web_users$ ls
cusers3.json db.opt
mysql@6a1184cd5306:/var/lib/mysql/web_users$ ls -la
total 20
drwx------. 2 mysql mysql 4096 Sep 30 03:05 .
drwxr-xr-x. 6 mysql mysql 4096 Sep 30 03:02 ..
-rw-rw----. 1 mysql mysql 5645 Sep 30 03:05 cusers3.json
-rw-rw----. 1 mysql mysql 67 Sep 30 03:02 db.opt
(gdb) info locals
filename = '\000' <repeats 80 times>, "web_users/cusers3.json", '\000' <repeats 314 times>...
reclg = 0
mgo = false
G = 0x0
(gdb) p topt
$1 = (PTOS) 0x7f6b3c018750
(gdb) p *topt
$2 = {type = 0x7f6b3c018820 "json", filename = 0x0, optname = 0x0, tabname = 0x0, tablist = 0x0, dbname = 0x0, separator = 0x0, qchar = 0x0, module = 0x0, subtype = 0x7f6b2bfff030 "cusers3.json", catfunc = 0x0, srcdef = 0x0, colist = 0x0, filter = 0x0, oplist = 0x0, data_charset = 0x0, http = 0x7f6b3c018828 "http://jsonplaceholder.typicode.com/users", uri = 0x0, lrecl = 0, elements = 0, multiple = 0, header = 0, quoted = 18446744073709551615, ending = 18446744073709551615, compressed = 0, mapped = false, huge = false, split = false, readonly = false, sepindex = false, zipped = false}
(gdb) p lvl
$3 = 5
(gdb) p sz
$4 = 1024
(gdb) p limit
$5 = 50
(gdb) p tdp
$6 = (JSONDEF *) 0x7f6b2bfff1c8
(gdb) p *tdp
$7 = (JSONDEF) {<DOSDEF> = {<TABDEF> = {<RELDEF> = {<BLOCK> = {_vptr.BLOCK = 0x7f6bac7f4068 <vtable for JSONDEF+16>}, Next = 0x0, Name = 0x0, Database = 0x0, To_Cols = 0x0, Cat = 0x0, Hc = 0x0}, Schema = 0x0, Desc = 0x0, Recfm = RECFM_VAR, Catfunc = 1, Card = 0, Elemt = 0, Sort = 0, Multiple = 0, Degree = 0, Pseudo = 3, Read_Only = false, m_data_charset = 0x0, csname = 0x0}, Fn = 0x0, Ofn = 0x0, Entry = 0x0, Pwd = 0x0, To_Indx = 0x0, Mapped = false, Zipped = false, Mulentries = false, Append = false, Padded = false, Huge = false, Accept = false, Eof = false, To_Pos = 0x0, Optimized = 0, AllocBlks = 0, Compressed = 0, Lrecl = 0, AvgLen = 0, Block = 0, Last = 0, Blksize = 0, Maxerr = 0, ReadMode = 0, Ending = 0, Teds = 0 '\000'}, Jmode = MODE_OBJECT, Objname = 0x0, Xcol = 0x0, Limit = 1, Pretty = 2, Base = 0, Strict = false, Sep = 46 '.', Uri = 0x0, Collname = 0x0, Options = 0x0, Filter = 0x0, Driver = 0x0, Pipe = false, Version = 0, Wrapname = 0x0}
(gdb) c
back to mariadb client
MariaDB [web_users]> show create table cusers3;
| cusers3 | CREATE TABLE `cusers3` (
`id` int(2) NOT NULL `JPATH`='$.id',
`name` char(24) NOT NULL `JPATH`='$.name',
`username` char(16) NOT NULL `JPATH`='$.username',
`email` char(25) NOT NULL `JPATH`='$.email',
`address_street` char(17) NOT NULL `JPATH`='$.address.street',
`address_suite` char(9) NOT NULL `JPATH`='$.address.suite',
`address_city` char(14) NOT NULL `JPATH`='$.address.city',
`address_zipcode` char(10) NOT NULL `JPATH`='$.address.zipcode',
`address_geo_lat` char(8) NOT NULL `JPATH`='$.address.geo.lat',
`address_geo_lng` char(9) NOT NULL `JPATH`='$.address.geo.lng',
`phone` char(21) NOT NULL `JPATH`='$.phone',
`website` char(13) NOT NULL `JPATH`='$.website',
`company_name` char(18) NOT NULL `JPATH`='$.company.name',
`company_catchPhrase` char(40) NOT NULL `JPATH`='$.company.catchPhrase',
`company_bs` char(36) NOT NULL `JPATH`='$.company.bs'
) ENGINE=CONNECT DEFAULT CHARSET=utf8mb4 `TABLE_TYPE`='json' `HTTP`='http://jsonplaceholder.typicode.com/users' |
(under debugger)
MariaDB [web_users] > create table cusers5 engine=connect http='http://jsonplaceholder.typicode.com/users' table_type=json;
Query OK, 0 rows affected, 1 warning (15.017 sec)
(cleared breakpoint and continued}
MariaDB [web_users] > create or replace table cusers5 engine=connect http='http://jsonplaceholder.typicode.com/users' table_type=json;
ERROR 1105 (HY000): Can only retrieve columns from object rows
So in short, there is a race condition.
Note: gdb client is manually compiled to include this patchhttps://sourceware.org/pipermail/gdb-patches/2021-August/181718.html so gdb symbols are retreived from "remote" container
Dockerfile
FROM quay.io/mariadb-foundation/mariadb-debug:10.6
RUN apt-get update \
&& apt-get install -y mariadb-plugin-connect mariadb-plugin-connect-dbgsym curl strace gdb && \
rm -rf /var/lib/apt/lists/*
build: $ buildah bud --tag mariadb_connect .
run
$ docker run -d -e MARIADB_USER=anel -e MARIADB_PASSWORD=anel -e MARIADB_DATABASE=web_users -e MARIADB_RANDOM_ROOT_PASSWORD=1 --cap-add CAP_SYS_PTRACE -p 2345 --name mariadb-server1 --rm mariadb_connect
6a1184cd5306df68228ed6f9500b8295a6efeec8d3405830b81929be779f50ca
Notes
obtain port map for debug port
$ podman port mariadb-server1
2345/tcp -> 0.0.0.0:33973
mariadb client
$ podman exec -ti mariadb-server1 mariadb -p']bQ@>+_mN6{v{%YZ[`@l|RB".R!3K?8}' web_users
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.6.5-MariaDB-309209c51c211d0733a6c7a67fb70a523a1706f7 mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [web_users]>
gdbserver to run inside container
$ podman exec -ti mariadb-server1 gosu mysql gdbserver --attach :2345 1
Attached; pid = 1
Listening on port 2345
Remote debugging from host ::ffff:10.0.2.100, port 41920
Detaching from process 175
Detaching from process 176
gdb remote connection using port number from 2345 map above
$ ./gdb/gdb
GNU gdb (GDB) 12.0.50.20210828-git
(gdb) target extended-remote :33973
Remote debugging using :33973
Reading /usr/sbin/mariadbd from remote target...
warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.
Reading /usr/sbin/mariadbd from remote target...
Reading symbols from target:/usr/sbin/mariadbd...
Reading /usr/lib/debug/.build-id/4f/59b9d9bede1f9466cc81fc68ff6c20fb690381.debug from remote target...
Reading /usr/lib/debug/.build-id/4f/59b9d9bede1f9466cc81fc68ff6c20fb690381.debug from remote target...
Reading symbols from target:/usr/lib/debug/.build-id/4f/59b9d9bede1f9466cc81fc68ff6c20fb690381.debug...
Reading /lib/x86_64-linux-gnu/libpcre2-8.so.0 from remote target...
Reading /lib/x86_64-linux-gnu/libcrypt.so.1 from remote target...
....
(gdb) b JSONDISC::GetColumns
Breakpoint 1 at 0x7f6bac73eab0: file ./storage/connect/tabjson.cpp, line 172.
Program not restarted.
(gdb) c
Continuing.
The JSONDISC::GetColumns is the function that generate the Can only retrieve columns from object rows error.
create table
MariaDB [web_users]> create table cusers3 engine=connect http='http://jsonplaceholder.typicode.com/users' table_type=json;
back to debugger
[Detaching after vfork from child process 175]
[Detaching after vfork from child process 176]
[New Thread 1.173]
[New Thread 1.174]
[Switching to Thread 1.163]
Thread 20 hit Breakpoint 1, JSONDISC::GetColumns (this=this@entry=0x7f6b2bfff040, g=g@entry=0x7f6b3c019db0, db=db@entry=0x7f6b3c0110b8 "web_users", dsn=dsn@entry=0x0, topt=topt@entry=0x7f6b3c018750) at ./storage/connect/tabjson.cpp:172
172 ./storage/connect/tabjson.cpp: No such file or directory.
(gdb) bt full
#0 JSONDISC::GetColumns (this=this@entry=0x7f6b2bfff040, g=g@entry=0x7f6b3c019db0, db=db@entry=0x7f6b3c0110b8 "web_users", dsn=dsn@entry=0x0, topt=topt@entry=0x7f6b3c018750) at ./storage/connect/tabjson.cpp:172
filename = '\000' <repeats 80 times>, "web_users/cusers3.json", '\000' <repeats 314 times>...
reclg = <optimized out>
mgo = <optimized out>
G = <optimized out>
#1 0x00007f6bac73f8ce in JSONColumns (g=g@entry=0x7f6b3c019db0, db=db@entry=0x7f6b3c0110b8 "web_users", dsn=dsn@entry=0x0, topt=topt@entry=0x7f6b3c018750, info=info@entry=false) at ./storage/connect/tabjson.cpp:94
buftyp = {1, 3, 1, 7, 7, 3, 3, 1}
fldtyp = {FLD_NAME, FLD_TYPE, FLD_TYPENAME, FLD_PREC, FLD_LENGTH, FLD_SCALE, FLD_NULL, FLD_FORMAT}
length = {0, 6, 8, 10, 10, 6, 6, 0}
i = <optimized out>
n = 0
ncol = 8
jcp = <optimized out>
pjdc = 0x7f6b2bfff040
qrp = <optimized out>
crp = <optimized out>
#2 0x00007f6bac7abea8 in RESTColumns (g=g@entry=0x7f6b3c019db0, tp=tp@entry=0x7f6b3c018750, tab=tab@entry=0x7f6b3c0109a0 "cusers3", db=db@entry=0x7f6b3c0110b8 "web_users", info=info@entry=false) at ./storage/connect/tabrest.cpp:256
qrp = 0x0
filename = "/var/lib/mysql/web_users/cusers3.json", '\000' <repeats 4059 times>...
rc = <optimized out>
http = 0x7f6b3c018828 "http://jsonplaceholder.typicode.com/users"
uri = 0x0
fn = <optimized out>
ftype = <optimized out>
grf = <optimized out>
curl = true
#3 0x00007f6bac6ef845 in connect_assisted_discovery (thd=0x7f6b3c000c58, table_s=0x7f6b86ffcfa0, create_info=0x7f6b86ffdc80) at ./storage/connect/ha_connect.cc:6142
rem = <optimized out>
key = <optimized out>
cnm = <optimized out>
dft = <optimized out>
xtra = <optimized out>
fmt = <optimized out>
dec = <optimized out>
typ = <optimized out>
i = <optimized out>
len = <optimized out>
prec = 0
flg = <optimized out>
v = 0 '\000'
fncn = 0x0
user = 0x7f6bac7b1e62 "root"
fn = 0x0
db = 0x7f6b3c0110b8 "web_users"
host = 0x7f6bac7b1e67 "localhost"
pwd = 0x0
sep = <optimized out>
tbl = <optimized out>
src = 0x0
col = 0x0
ocl = 0x0
rnk = 0x0
pic = 0x0
fcl = 0x0
skc = 0x0
zfn = <optimized out>
tab = 0x7f6b3c0109a0 "cusers3"
dsn = <optimized out>
shm = 0x0
dpath = <optimized out>
url = 0x0
port = 0
mxr = 0
rc = 0
mul = 0
sop = <optimized out>
ucnc = <optimized out>
cnc = <optimized out>
cto = -1
qto = -1
tm = <optimized out>
fnc = 1
supfnc = <optimized out>
bif = false
ok = <optimized out>
dbf = <optimized out>
ttp = <optimized out>
ttr = <optimized out>
qrp = 0x0
crp = <optimized out>
xp = 0x7f6b3c0186b0
g = 0x7f6b3c019db0
topt = 0x7f6b3c018750
buf = "CREATE TABLE whatever (\000p\223\350\327\374U\000\000\220\313\377\206k\177\000\000\300\332\320\326\374U\000\000\000\000\000\000\000\000\000\000\220\313\377\206k\177\000\000 \313\377\206k\177\000\000\063\371\320\325\374U\000\000\000\000\000\000\000\000\000\000\260\026\027\326\374U\000\000X\f\000<k\177\000\000X\f\000<k\177\000\000\f\000\000\000\000\000\000\000\340-\363\325\374U\000\000`\314\377\206k\177\000\000\220\313\377\206k\177\000\000\000\314\377\206k\177\000\000r\373\320\325\374U\000\000\240-\350\327\374U\000\000\360+\350\327\374U\000\000\340/\350\327\374U\000\000\060.\350\327\374U\000\000\300.\350\327\374U\000\000"...
sql = {<Charset> = {m_charset = 0x55fcd6cf9140 <my_charset_utf8mb3_general_ci>}, <Binary_string> = {<Sql_alloc> = {<No data fields>}, Ptr = 0x7f6b86ffca90 "CREATE TABLE whatever (", str_length = 23, Alloced_length = 1024, extra_alloc = 0, alloced = false, thread_specific = false}, <No data fields>}
#4 0x000055fcd5da975e in create_table_impl (thd=thd@entry=0x7f6b3c000c58, ddl_log_state_create=ddl_log_state_create@entry=0x7f6b86ffda30, ddl_log_state_rm=<optimized out>, orig_db=@0x7f6b3c0109f0: {str = 0x7f6b3c0110b8 "web_users", length = 9}, orig_table_name=@0x7f6b3c010a00: {str = 0x7f6b3c0109a0 "cusers3", length = 7}, db=@0x7f6b3c0109f0: {str = 0x7f6b3c0110b8 "web_users", length = 9}, table_name=@0x7f6b3c010a00: {str = 0x7f6b3c0109a0 "cusers3", length = 7}, path=@0x7f6b86ffd760: {str = 0x7f6b86ffd780 "./web_users/cusers3", length = 19}, options=<optimized out>, create_info=0x7f6b86ffdc80, alter_info=0x7f6b86ffdb90, create_table_mode=-3, is_trans=0x7f6b86ffda2f, key_info=0x7f6b86ffd758, key_count=0x7f6b86ffd754, frm=0x7f6b86ffd770) at ./sql/sql_table.cc:4397
share = {table_category = TABLE_CATEGORY_TEMPORARY, name_hash = {key_offset = 0, key_length = 0, blength = 0, records = 0, flags = 0, array = {buffer = 0x0, elements = 0, max_element = 0, alloc_increment = 0, size_of_element = 0, m_psi_key = 0, malloc_flags = 0}, get_key = 0x0, hash_function = 0x0, free = 0x0, charset = 0x0}, mem_root = {free = 0x7f6b3c018738, used = 0x0, pre_alloc = 0x0, min_malloc = 32, block_size = 985, block_num = 5, first_block_usage = 0, error_handler = 0x55fcd5debbf0 <sql_alloc_error_handler()>, m_psi_key = 0}, keynames = {count = 0, name = 0x0, type_names = 0x0, type_lengths = 0x0}, fieldnames = {count = 0, name = 0x0, type_names = 0x0, type_lengths = 0x0}, intervals = 0x0, LOCK_ha_data = {m_mutex = {__data = {__lock = 0, __count = 0, __owner = 0, __nusers = 0, __kind = 0, __spins = 0, __elision = 0, __list = {__prev = 0x0, __next = 0x0}}, __size = '\000' <repeats 39 times>, __align = 0}, m_psi = 0x0}, LOCK_share = {m_mutex = {__data = {__lock = 0, __count = 0, __owner = 0, __nusers = 0, __kind = 0, __spins = 0, __elision = 0, __list = {__prev = 0x0, __next = 0x0}}, __size = '\000' <repeats 39 times>, __align = 0}, m_psi = 0x0}, tdc = 0x0, tabledef_version = {str = 0x0, length = 0}, option_list = 0x7f6b3c011188, option_struct = 0x7f6b3c018750, field = 0x7f6b86ffcf50, found_next_number_field = 0x0, key_info = 0x0, check_constraints = 0x0, blob_field = 0x0, vcol_defs = {str = 0x0, length = 0}, stats_cb = {stats_state = {state = 0}, hist_state = {state = 0}, mem_root = {free = 0x0, used = 0x0, pre_alloc = 0x0, min_malloc = 0, block_size = 0, block_num = 0, first_block_usage = 0, error_handler = 0x0, m_psi_key = 0}, table_stats = 0x0, total_hist_size = 0}, default_values = 0x0, comment = {str = 0x0, length = 0}, table_charset = 0x0, check_set = 0x0, all_set = {bitmap = 0x0, last_word_ptr = 0x0, mutex = 0x0, last_word_mask = 0, n_bits = 0}, table_cache_key = {str = 0x7f6b3c0110b8 "web_users", length = 0}, db = {str = 0x7f6b3c0110b8 "web_users", length = 9}, table_name = {str = 0x7f6b3c0109a0 "cusers3", length = 7}, path = {str = 0x7f6b86ffd780 "./web_users/cusers3", length = 19}, normalized_path = {str = 0x7f6b86ffd780 "./web_users/cusers3", length = 19}, connect_string = {str = 0x0, length = 0}, keys_in_use = {buffer = {0}}, ignored_indexes = {buffer = {0}}, keys_for_keyread = {buffer = {0}}, min_rows = 0, max_rows = 0, avg_row_length = 0, mysql_version = 0, reclength = 0, stored_rec_length = 0, db_plugin = 0x55fcd7e89440, row_type = ROW_TYPE_DEFAULT, table_type = TABLE_TYPE_UNKNOWN, tmp_table = INTERNAL_TMP_TABLE, transactional = HA_CHOICE_UNDEF, page_checksum = HA_CHOICE_UNDEF, key_block_size = 0, stats_sample_pages = 0, stats_auto_recalc = HA_STATS_AUTO_RECALC_DEFAULT, null_bytes = 0, last_null_bit_pos = 0, null_bytes_for_compare = 0, fields = 0, stored_fields = 0, virtual_fields = 0, virtual_not_stored_blob_fields = 0, null_fields = 0, blob_fields = 0, varchar_fields = 0, default_fields = 0, visible_fields = 0, default_expressions = 0, table_check_constraints = 0, field_check_constraints = 0, rec_buff_length = 0, keys = 0, key_parts = 0, ext_key_parts = 0, max_key_length = 0, max_unique_length = 0, uniques = 0, db_create_options = 0, db_options_in_use = 0, db_record_offset = 0, rowid_field_offset = 0, primary_key = 0, next_number_index = 0, next_number_key_offset = 0, next_number_keypart = 0, error = OPEN_FRM_OK, open_errno = 0, column_bitmap_size = 0, frm_version = 11 '\v', check_set_initialized = TABLE_SHARE::NOT_INITIALIZED, use_ext_keys = false, null_field_first = false, system = false, not_usable_by_query_cache = true, online_backup = false, no_replicate = false, crashed = false, is_view = false, can_cmp_whole_record = false, table_creation_was_logged = false, non_determinstic_insert = false, vcols_need_refixing = false, has_update_default_function = false, can_do_row_logging = false, long_unique_table = false, table_map_id = 6, incompatible_version = 0, view_def = 0x0, sequence = 0x0, auto_partitioned = false, partition_info_str = 0x0, partition_info_str_len = 0, partition_info_buffer_size = 0, default_part_plugin = 0x0, versioned = VERS_UNDEFINED, vers = {start_fieldno = 0, end_fieldno = 0, name = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}, constr_name = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}, unique_keys = 0}, period = {start_fieldno = 0, end_fieldno = 0, name = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}, constr_name = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}, unique_keys = 0}, table_field_def_cache = 0x0, ha_share = 0x0, m_psi = 0x0, frm_image = 0x0}
hton = 0x55fcd7f2e988
ha_err = <optimized out>
no_fields = 0x0
err = <optimized out>
alias = <optimized out>
file = 0x0
error = 1
frm_only = false
internal_tmp_table = false
#5 0x000055fcd5da9cd8 in mysql_create_table_no_lock (thd=thd@entry=0x7f6b3c000c58, ddl_log_state_create=ddl_log_state_create@entry=0x7f6b86ffda30, ddl_log_state_rm=ddl_log_state_rm@entry=0x7f6b86ffda50, db=db@entry=0x7f6b3c0109f0, table_name=table_name@entry=0x7f6b3c010a00, create_info=create_info@entry=0x7f6b86ffdc80, alter_info=0x7f6b86ffdb90, is_trans=0x7f6b86ffda2f, create_table_mode=-3, table_list=0x7f6b3c0109d8) at ./sql/sql_table.cc:4546
not_used_1 = 0x4
not_used_2 = 32619
res = <optimized out>
path_length = <optimized out>
path = "./web_users/cusers3\000\374U\000\000\220\327\377\206k\177\000\000\000\000\000\000k\177\000\000\000\000\000\000k\177\000\000\020\323\320\326\374U\000\000\260\327\377\206k\177\000\000\000\000\000\000\000\000\000\000f\221\312\325\374U\000\000\340\205\001<k\177\000\000\276[E\326\374U\000\000\001\000\000\000\000\000\000\000\350\023\001<k\177\000\000\200Q\001\000\000\000\000\000\370(\000<k\177", '\000' <repeats 18 times>, "`\330\377\206k\177\000\000\360\221\312\325\374U\000\000\000\000\000\000k\177\000\000@\271\310\326\374U\000\000p\330\377\206k\177\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000"...
cpath = {str = 0x7f6b86ffd780 "./web_users/cusers3", length = 19}
frm = {str = 0x0, length = 0}
#6 0x000055fcd5daa0e5 in mysql_create_table (thd=thd@entry=0x7f6b3c000c58, create_table=create_table@entry=0x7f6b3c0109d8, create_info=create_info@entry=0x7f6b86ffdc80, alter_info=alter_info@entry=0x7f6b86ffdb90) at ./sql/sql_table.cc:4658
err = <optimized out>
pos_in_locked_tables = <optimized out>
mdl_ticket = <optimized out>
ddl_log_state_create = {list = 0x7f6b3c007b88, execute_entry = 0x7f6b3c010768, main_entry = 0x7f6b3c007b88, flags = 4}
ddl_log_state_rm = {list = 0x0, execute_entry = 0x0, main_entry = 0x0, flags = 0}
create_table_mode = <optimized out>
save_thd_create_info_options = <optimized out>
is_trans = false
result = <optimized out>
#7 0x000055fcd5dab9c9 in Sql_cmd_create_table_like::execute (this=<optimized out>, thd=0x7f6b3c000c58) at ./sql/sql_table.cc:11778
lex = <optimized out>
select_lex = 0x7f6b3c0055f8
first_table = 0x7f6b3c0109d8
link_to_local = 184
create_table = 0x7f6b3c0109d8
select_tables = 0x0
unit = <optimized out>
res = <optimized out>
used_engine = <optimized out>
create_info = {<HA_CREATE_INFO> = {<Table_scope_and_contents_source_st> = {<Table_scope_and_contents_source_pod_st> = {alter_table_convert_to_charset = 0x0, tabledef_version = {str = 0x0, length = 0}, org_tabledef_version = {str = 0x0, length = 0}, connect_string = {str = 0x0, length = 0}, comment = {str = 0x0, length = 0}, alias = {str = 0x7f6b3c0109d0 "cusers3", length = 7}, org_storage_engine_name = {str = 0x0, length = 0}, new_storage_engine_name = {str = 0x7f6bac7b1000 "CONNECT", length = 7}, password = 0x0, tablespace = 0x0, data_file_name = 0x0, index_file_name = 0x0, max_rows = 0, min_rows = 0, auto_increment_value = 0, table_options = 0, avg_row_length = 0, used_fields = 4096, key_block_size = 0, expression_length = 0, field_check_constraints = 0, stats_sample_pages = 0, null_bits = 0, options = 0, merge_insert_method = 0, extra_size = 0, db_type = 0x55fcd7f2e988, row_type = ROW_TYPE_DEFAULT, transactional = HA_CHOICE_UNDEF, storage_media = HA_SM_DEFAULT, page_checksum = HA_CHOICE_UNDEF, option_list = 0x7f6b3c011188, stats_auto_recalc = HA_STATS_AUTO_RECALC_DEFAULT, varchar = false, sequence = false, check_constraint_list = 0x0, option_struct = 0x0, fields_option_struct = 0x0, indexes_option_struct = 0x0, table = 0x0, pos_in_locked_tables = 0x0, merge_list = 0x0, mdl_ticket = 0x0, table_was_deleted = false, seq_create_info = 0x0}, vers_info = {<Table_period_info> = {<Sql_alloc> = {<No data fields>}, name = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x55fcd66771b9 "SYSTEM_TIME", length = 11}, <No data fields>}, <No data fields>}, period = {start = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}, end = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}}, create_if_not_exists = false, constr = 0x0, unique_keys = 0}, as_row = {start = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}, end = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}}, versioned_fields = false, unversioned_fields = false}, period_info = {<Sql_alloc> = {<No data fields>}, name = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}, period = {start = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}, end = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}}, create_if_not_exists = false, constr = 0x0, unique_keys = 0}}, <Schema_specification_st> = {default_table_charset = 0x0, schema_comment = 0x0}, alter_info = 0x7f6b86ffdb90}, <DDL_options_st> = {m_options = DDL_options_st::OPT_NONE}, <No data fields>}
alter_info = {drop_list = {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x55fcd6d0d310 <end_of_list>, last = 0x7f6b86ffdb90, elements = 0}, <No data fields>}, alter_list = {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x55fcd6d0d310 <end_of_list>, last = 0x7f6b86ffdba8, elements = 0}, <No data fields>}, key_list = {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x55fcd6d0d310 <end_of_list>, last = 0x7f6b86ffdbc0, elements = 0}, <No data fields>}, alter_rename_key_list = {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x55fcd6d0d310 <end_of_list>, last = 0x7f6b86ffdbd8, elements = 0}, <No data fields>}, create_list = {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x55fcd6d0d310 <end_of_list>, last = 0x7f6b86ffdbf0, elements = 0}, <No data fields>}, alter_index_ignorability_list = {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x55fcd6d0d310 <end_of_list>, last = 0x7f6b86ffdc08, elements = 0}, <No data fields>}, check_constraint_list = {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x55fcd6d0d310 <end_of_list>, last = 0x7f6b86ffdc20, elements = 0}, <No data fields>}, flags = 0, partition_flags = 0, keys_onoff = Alter_info::LEAVE_AS_IS, partition_names = {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x55fcd6d0d310 <end_of_list>, last = 0x7f6b86ffdc50, elements = 0}, <No data fields>}, num_parts = 0, requested_algorithm = Alter_info::ALTER_TABLE_ALGORITHM_NONE, requested_lock = Alter_info::ALTER_TABLE_LOCK_DEFAULT}
#8 0x000055fcd5d06cce in mysql_execute_command (thd=0x7f6b3c000c58, is_called_from_prepared_stmt=<optimized out>) at ./sql/sql_parse.cc:5997
multi_delete_error = <optimized out>
wsrep_error_label = <optimized out>
error = <optimized out>
res = 0
up_result = 0
lex = 0x7f6b3c004d38
select_lex = 0x7f6b3c0055f8
first_table = 0x7f6b3c0109d8
all_tables = 0x7f6b3c0109d8
unit = 0x7f6b3c004e00
have_table_map_for_update = false
rpl_filter = <optimized out>
ots = {ctx = 0x7f6b3c0049e8, traceable = false}
trace_command = {<Json_writer_struct> = {my_writer = <optimized out>, context = {writer = <optimized out>}, closed = false}, <No data fields>}
trace_command_steps = {<Json_writer_struct> = {my_writer = 0x0, context = {writer = <optimized out>}, closed = false}, <No data fields>}
orig_binlog_format = BINLOG_FORMAT_MIXED
orig_current_stmt_binlog_format = BINLOG_FORMAT_STMT
#9 0x000055fcd5cf7037 in mysql_parse (thd=0x7f6b3c000c58, rawbuf=<optimized out>, length=<optimized out>, parser_state=<optimized out>) at ./sql/sql_parse.cc:8030
found_semicolon = <optimized out>
error = <optimized out>
lex = 0x7f6b3c004d38
err = <optimized out>
#10 0x000055fcd5d02fb5 in dispatch_command (command=COM_QUERY, thd=0x7f6b3c000c58, packet=<optimized out>, packet_length=<optimized out>, blocking=<optimized out>) at ./sql/sql_class.h:234
packet_end = 0x7f6b3c0108b4 ""
parser_state = {m_lip = {lookahead_token = -1, lookahead_yylval = 0x0, m_thd = 0x7f6b3c000c58, m_ptr = 0x7f6b3c0108b5 "\t", m_tok_start = 0x7f6b3c0108b5 "\t", m_tok_end = 0x7f6b3c0108b5 "\t", m_end_of_query = 0x7f6b3c0108b4 "", m_tok_start_prev = 0x7f6b3c0108b4 "", m_buf = 0x7f6b3c010850 "create table cusers3 engine=connect http='http://jsonplaceholder.typicode.com/users' table_type=json", m_buf_length = 100, m_echo = true, m_echo_saved = false, m_cpp_buf = 0x7f6b3c010910 "create table cusers3 engine=connect http='http://jsonplaceholder.typicode.com/users' table_type=json", m_cpp_ptr = 0x7f6b3c010974 "", m_cpp_tok_start = 0x7f6b3c010974 "", m_cpp_tok_start_prev = 0x7f6b3c010974 "", m_cpp_tok_end = 0x7f6b3c010974 "", m_body_utf8 = 0x0, m_body_utf8_ptr = 0x0, m_cpp_utf8_processed_ptr = 0x0, next_state = MY_LEX_END, found_semicolon = 0x0, ignore_space = false, stmt_prepare_mode = false, multi_statements = true, yylineno = 1, m_digest = 0x0, in_comment = NO_COMMENT, in_comment_saved = NO_COMMENT, m_cpp_text_start = 0x7f6b3c010965 "table_type=json", m_cpp_text_end = 0x7f6b3c01096f "=json", m_underscore_cs = 0x0}, m_yacc = {yacc_yyss = 0x0, yacc_yyvs = 0x0, m_set_signal_info = {m_item = {0x0 <repeats 12 times>}}, m_lock_type = TL_READ_DEFAULT, m_mdl_type = MDL_SHARED_READ}, m_digest_psi = 0x0}
net = 0x7f6b3c000ee8
error = false
do_end_of_statement = true
drop_more_results = false
__FUNCTION__ = "dispatch_command"
res = <optimized out>
#11 0x000055fcd5d04ea8 in do_command (thd=0x7f6b3c000c58, blocking=blocking@entry=true) at ./sql/sql_parse.cc:1404
return_value = <optimized out>
packet = 0x7f6b3c0084b8 "\003create table cusers3 engine=connect http='http://jsonplaceholder.typicode.com/users' table_type=json"
packet_length = <optimized out>
net = 0x7f6b3c000ee8
command = COM_QUERY
__FUNCTION__ = "do_command"
#12 0x000055fcd5e143d7 in do_handle_one_connection (connect=<optimized out>, put_in_cache=true) at ./sql/sql_connect.cc:1418
create_user = true
thr_create_utime = <optimized out>
thd = 0x7f6b3c000c58
#13 0x000055fcd5e1472d in handle_one_connection (arg=arg@entry=0x55fcd83a52f8) at ./sql/sql_connect.cc:1312
connect = 0x55fcd83a52f8
#14 0x000055fcd617241d in pfs_spawn_thread (arg=0x55fcd831fd98) at ./storage/perfschema/pfs.cc:2201
typed_arg = 0x55fcd831fd98
user_arg = 0x55fcd83a52f8
user_start_routine = 0x55fcd5e146d0 <handle_one_connection(void*)>
pfs = <optimized out>
klass = <optimized out>
#15 0x00007f6bad05b609 in start_thread (arg=<optimized out>) at pthread_create.c:477
ret = <optimized out>
pd = <optimized out>
unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140099803150080, -2772519655998606122, 140722899554222, 140722899554223, 94544424106720, 140099803148032, 2833052169746920662, 2833135820276774102}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
not_first_call = 0
#16 0x00007f6bacc49293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
json file retreived
$ podman exec -ti 6a1184cd5306 gosu mysql bash
mysql@6a1184cd5306:/$ cd /var/lib/mysql/
mysql@6a1184cd5306:/var/lib/mysql$ ls
aria_log.00000001 aria_log_control ddl_recovery.log ib_buffer_pool ib_logfile0 ibdata1 ibtmp1 multi-master.info mysql performance_schema sys web_users
mysql@6a1184cd5306:/var/lib/mysql$ cd web_users/
mysql@6a1184cd5306:/var/lib/mysql/web_users$ ls
cusers3.json db.opt
mysql@6a1184cd5306:/var/lib/mysql/web_users$ ls -la
total 20
drwx------. 2 mysql mysql 4096 Sep 30 03:05 .
drwxr-xr-x. 6 mysql mysql 4096 Sep 30 03:02 ..
-rw-rw----. 1 mysql mysql 5645 Sep 30 03:05 cusers3.json
-rw-rw----. 1 mysql mysql 67 Sep 30 03:02 db.opt
(gdb) info locals
filename = '\000' <repeats 80 times>, "web_users/cusers3.json", '\000' <repeats 314 times>...
reclg = 0
mgo = false
G = 0x0
(gdb) p topt
$1 = (PTOS) 0x7f6b3c018750
(gdb) p *topt
$2 = {type = 0x7f6b3c018820 "json", filename = 0x0, optname = 0x0, tabname = 0x0, tablist = 0x0, dbname = 0x0, separator = 0x0, qchar = 0x0, module = 0x0, subtype = 0x7f6b2bfff030 "cusers3.json", catfunc = 0x0, srcdef = 0x0, colist = 0x0, filter = 0x0, oplist = 0x0, data_charset = 0x0, http = 0x7f6b3c018828 "http://jsonplaceholder.typicode.com/users", uri = 0x0, lrecl = 0, elements = 0, multiple = 0, header = 0, quoted = 18446744073709551615, ending = 18446744073709551615, compressed = 0, mapped = false, huge = false, split = false, readonly = false, sepindex = false, zipped = false}
(gdb) p lvl
$3 = 5
(gdb) p sz
$4 = 1024
(gdb) p limit
$5 = 50
(gdb) p tdp
$6 = (JSONDEF *) 0x7f6b2bfff1c8
(gdb) p *tdp
$7 = (JSONDEF) {<DOSDEF> = {<TABDEF> = {<RELDEF> = {<BLOCK> = {_vptr.BLOCK = 0x7f6bac7f4068 <vtable for JSONDEF+16>}, Next = 0x0, Name = 0x0, Database = 0x0, To_Cols = 0x0, Cat = 0x0, Hc = 0x0}, Schema = 0x0, Desc = 0x0, Recfm = RECFM_VAR, Catfunc = 1, Card = 0, Elemt = 0, Sort = 0, Multiple = 0, Degree = 0, Pseudo = 3, Read_Only = false, m_data_charset = 0x0, csname = 0x0}, Fn = 0x0, Ofn = 0x0, Entry = 0x0, Pwd = 0x0, To_Indx = 0x0, Mapped = false, Zipped = false, Mulentries = false, Append = false, Padded = false, Huge = false, Accept = false, Eof = false, To_Pos = 0x0, Optimized = 0, AllocBlks = 0, Compressed = 0, Lrecl = 0, AvgLen = 0, Block = 0, Last = 0, Blksize = 0, Maxerr = 0, ReadMode = 0, Ending = 0, Teds = 0 '\000'}, Jmode = MODE_OBJECT, Objname = 0x0, Xcol = 0x0, Limit = 1, Pretty = 2, Base = 0, Strict = false, Sep = 46 '.', Uri = 0x0, Collname = 0x0, Options = 0x0, Filter = 0x0, Driver = 0x0, Pipe = false, Version = 0, Wrapname = 0x0}
(gdb) c
back to mariadb client
MariaDB [web_users]> show create table cusers3;
| cusers3 | CREATE TABLE `cusers3` (
`id` int(2) NOT NULL `JPATH`='$.id',
`name` char(24) NOT NULL `JPATH`='$.name',
`username` char(16) NOT NULL `JPATH`='$.username',
`email` char(25) NOT NULL `JPATH`='$.email',
`address_street` char(17) NOT NULL `JPATH`='$.address.street',
`address_suite` char(9) NOT NULL `JPATH`='$.address.suite',
`address_city` char(14) NOT NULL `JPATH`='$.address.city',
`address_zipcode` char(10) NOT NULL `JPATH`='$.address.zipcode',
`address_geo_lat` char(8) NOT NULL `JPATH`='$.address.geo.lat',
`address_geo_lng` char(9) NOT NULL `JPATH`='$.address.geo.lng',
`phone` char(21) NOT NULL `JPATH`='$.phone',
`website` char(13) NOT NULL `JPATH`='$.website',
`company_name` char(18) NOT NULL `JPATH`='$.company.name',
`company_catchPhrase` char(40) NOT NULL `JPATH`='$.company.catchPhrase',
`company_bs` char(36) NOT NULL `JPATH`='$.company.bs'
) ENGINE=CONNECT DEFAULT CHARSET=utf8mb4 `TABLE_TYPE`='json' `HTTP`='http://jsonplaceholder.typicode.com/users' |
(under debugger)
MariaDB [web_users]> create table cusers5 engine=connect http='http://jsonplaceholder.typicode.com/users' table_type=json;
Query OK, 0 rows affected, 1 warning (15.017 sec)
(cleared breakpoint and continued}
MariaDB [web_users]> create or replace table cusers5 engine=connect http='http://jsonplaceholder.typicode.com/users' table_type=json;
ERROR 1105 (HY000): Can only retrieve columns from object rows
So in short, there is a race condition.
Note: gdb client is manually compiled to include this patchhttps://sourceware.org/pipermail/gdb-patches/2021-August/181718.html so gdb symbols are retreived from "remote" container