SILENT KILLERPanel

Current Path: > > usr > > include > mysql > server > > private


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: //usr//include/mysql/server//private

NameTypeSizeLast ModifiedActions
atomic Directory - -
aligned.h File 1136 bytes May 28 2025 17:32:51.
aria_backup.h File 1547 bytes May 28 2025 17:32:51.
assume_aligned.h File 2350 bytes May 28 2025 17:32:51.
authors.h File 10141 bytes May 28 2025 17:32:51.
backup.h File 1703 bytes May 28 2025 17:32:51.
bounded_queue.h File 6093 bytes May 28 2025 17:32:51.
client_settings.h File 1935 bytes May 28 2025 17:32:51.
compat56.h File 2280 bytes May 28 2025 17:32:51.
config.h File 14574 bytes May 28 2025 17:32:51.
contributors.h File 4878 bytes May 28 2025 17:32:51.
create_options.h File 4524 bytes May 28 2025 17:32:51.
create_tmp_table.h File 2808 bytes May 28 2025 17:32:51.
cset_narrowing.h File 3968 bytes May 28 2025 17:32:51.
custom_conf.h File 1082 bytes May 28 2025 17:32:51.
datadict.h File 1700 bytes May 28 2025 17:32:51.
ddl_log.h File 12685 bytes May 28 2025 17:32:51.
debug.h File 1234 bytes May 28 2025 17:32:51.
debug_sync.h File 2046 bytes May 28 2025 17:32:51.
derived_handler.h File 2379 bytes May 28 2025 17:32:51.
derror.h File 980 bytes May 28 2025 17:32:51.
des_key_file.h File 1236 bytes May 28 2025 17:32:51.
discover.h File 1570 bytes May 28 2025 17:32:51.
dur_prop.h File 1082 bytes May 28 2025 17:32:51.
embedded_priv.h File 1733 bytes May 28 2025 17:32:51.
event_data_objects.h File 4187 bytes May 28 2025 17:32:51.
event_db_repository.h File 3648 bytes May 28 2025 17:32:51.
event_parse_data.h File 2899 bytes May 28 2025 17:32:51.
event_queue.h File 3438 bytes May 28 2025 17:32:51.
event_scheduler.h File 3290 bytes May 28 2025 17:32:51.
events.h File 4704 bytes May 28 2025 17:32:51.
field.h File 220415 bytes May 28 2025 17:32:51.
field_comp.h File 1174 bytes May 28 2025 17:32:51.
filesort.h File 7283 bytes May 28 2025 17:32:51.
filesort_utils.h File 8195 bytes May 28 2025 17:32:51.
ft_global.h File 3113 bytes May 28 2025 17:32:51.
gcalc_slicescan.h File 17272 bytes May 28 2025 17:32:51.
gcalc_tools.h File 11900 bytes May 28 2025 17:32:51.
grant.h File 2758 bytes May 28 2025 17:32:51.
group_by_handler.h File 3534 bytes May 28 2025 17:32:51.
gstream.h File 2437 bytes May 28 2025 17:32:51.
ha_handler_stats.h File 2335 bytes May 28 2025 17:32:51.
ha_partition.h File 64413 bytes May 28 2025 17:32:51.
ha_sequence.h File 6245 bytes May 28 2025 17:32:51.
handle_connections_win.h File 884 bytes May 28 2025 17:32:51.
handler.h File 201171 bytes May 28 2025 17:32:51.
hash.h File 4449 bytes May 28 2025 17:32:51.
hash_filo.h File 5688 bytes May 28 2025 17:32:51.
heap.h File 9480 bytes May 28 2025 17:32:51.
hostname.h File 5419 bytes May 28 2025 17:32:51.
ilist.h File 7048 bytes May 28 2025 17:32:51.
init.h File 852 bytes May 28 2025 17:32:51.
innodb_priv.h File 1319 bytes May 28 2025 17:32:51.
item.h File 279188 bytes May 28 2025 17:32:51.
item_cmpfunc.h File 135027 bytes May 28 2025 17:32:51.
item_create.h File 11501 bytes May 28 2025 17:32:51.
item_func.h File 136655 bytes May 28 2025 17:32:51.
item_geofunc.h File 38904 bytes May 28 2025 17:32:51.
item_jsonfunc.h File 22516 bytes May 28 2025 17:32:51.
item_row.h File 5221 bytes May 28 2025 17:32:51.
item_strfunc.h File 72241 bytes May 28 2025 17:32:51.
item_subselect.h File 59153 bytes May 28 2025 17:32:51.
item_sum.h File 72287 bytes May 28 2025 17:32:51.
item_timefunc.h File 64615 bytes May 28 2025 17:32:51.
item_vers.h File 4334 bytes May 28 2025 17:32:51.
item_windowfunc.h File 34315 bytes May 28 2025 17:32:51.
item_xmlfunc.h File 4607 bytes May 28 2025 17:32:51.
json_table.h File 9506 bytes May 28 2025 17:32:51.
key.h File 2132 bytes May 28 2025 17:32:51.
keycaches.h File 1995 bytes May 28 2025 17:32:51.
lex.h File 29827 bytes May 28 2025 17:32:51.
lex_string.h File 4068 bytes May 28 2025 17:32:51.
lex_symbol.h File 1323 bytes May 28 2025 17:32:51.
lf.h File 6462 bytes May 28 2025 17:32:51.
lock.h File 2203 bytes May 28 2025 17:32:51.
log.h File 46083 bytes May 28 2025 17:32:51.
log_event.h File 186410 bytes May 28 2025 17:32:51.
log_event_data_type.h File 1890 bytes May 28 2025 17:32:51.
log_event_old.h File 19830 bytes May 28 2025 17:32:51.
log_slow.h File 2442 bytes May 28 2025 17:32:51.
maria.h File 5872 bytes May 28 2025 17:32:51.
mariadb.h File 1277 bytes May 28 2025 17:32:51.
mdl.h File 38468 bytes May 28 2025 17:32:51.
mem_root_array.h File 7106 bytes May 28 2025 17:32:51.
message.h File 1195 bytes May 28 2025 17:32:51.
multi_range_read.h File 23179 bytes May 28 2025 17:32:51.
my_alarm.h File 2429 bytes May 28 2025 17:32:51.
my_apc.h File 4747 bytes May 28 2025 17:32:51.
my_atomic.h File 7281 bytes May 28 2025 17:32:51.
my_atomic_wrapper.h File 3051 bytes May 28 2025 17:32:51.
my_base.h File 27210 bytes May 28 2025 17:32:51.
my_bit.h File 6196 bytes May 28 2025 17:32:51.
my_bitmap.h File 5882 bytes May 28 2025 17:32:51.
my_check_opt.h File 2618 bytes May 28 2025 17:32:51.
my_compare.h File 11194 bytes May 28 2025 17:32:51.
my_counter.h File 1721 bytes May 28 2025 17:32:51.
my_cpu.h File 4855 bytes May 28 2025 17:32:51.
my_crypt.h File 904 bytes May 28 2025 17:32:51.
my_decimal.h File 14489 bytes May 28 2025 17:32:51.
my_default.h File 1880 bytes May 28 2025 17:32:51.
my_handler_errors.h File 4882 bytes May 28 2025 17:32:51.
my_json_writer.h File 18382 bytes May 28 2025 17:32:51.
my_libwrap.h File 1183 bytes May 28 2025 17:32:51.
my_md5.h File 1486 bytes May 28 2025 17:32:51.
my_minidump.h File 848 bytes May 28 2025 17:32:51.
my_nosys.h File 1438 bytes May 28 2025 17:32:51.
my_rdtsc.h File 8425 bytes May 28 2025 17:32:51.
my_rnd.h File 1064 bytes May 28 2025 17:32:51.
my_service_manager.h File 2050 bytes May 28 2025 17:32:51.
my_stack_alloc.h File 6493 bytes May 28 2025 17:32:51.
my_stacktrace.h File 3215 bytes May 28 2025 17:32:51.
my_time.h File 10466 bytes May 28 2025 17:32:51.
my_tree.h File 3991 bytes May 28 2025 17:32:51.
my_uctype.h File 69528 bytes May 28 2025 17:32:51.
my_user.h File 1126 bytes May 28 2025 17:32:51.
myisam.h File 17506 bytes May 28 2025 17:32:51.
myisamchk.h File 4716 bytes May 28 2025 17:32:51.
myisammrg.h File 4897 bytes May 28 2025 17:32:51.
myisampack.h File 14929 bytes May 28 2025 17:32:51.
mysqld.h File 40502 bytes May 28 2025 17:32:51.
mysqld_default_groups.h File 204 bytes May 28 2025 17:32:51.
mysqld_suffix.h File 1201 bytes May 28 2025 17:32:51.
mysys_err.h File 3022 bytes May 28 2025 17:32:51.
opt_range.h File 59591 bytes May 28 2025 17:32:51.
opt_subselect.h File 14551 bytes May 28 2025 17:32:51.
opt_trace.h File 8494 bytes May 28 2025 17:32:51.
opt_trace_context.h File 3291 bytes May 28 2025 17:32:51.
parse_file.h File 4387 bytes May 28 2025 17:32:51.
partition_element.h File 5209 bytes May 28 2025 17:32:51.
partition_info.h File 19300 bytes May 28 2025 17:32:51.
password.h File 1170 bytes May 28 2025 17:32:51.
pfs_file_provider.h File 3153 bytes May 28 2025 17:32:51.
pfs_idle_provider.h File 1385 bytes May 28 2025 17:32:51.
pfs_memory_provider.h File 1626 bytes May 28 2025 17:32:51.
pfs_metadata_provider.h File 1898 bytes May 28 2025 17:32:51.
pfs_socket_provider.h File 2258 bytes May 28 2025 17:32:51.
pfs_stage_provider.h File 1556 bytes May 28 2025 17:32:51.
pfs_statement_provider.h File 4347 bytes May 28 2025 17:32:51.
pfs_table_provider.h File 2625 bytes May 28 2025 17:32:51.
pfs_thread_provider.h File 5560 bytes May 28 2025 17:32:51.
pfs_transaction_provider.h File 2846 bytes May 28 2025 17:32:51.
privilege.h File 28642 bytes May 28 2025 17:32:51.
probes_mysql.h File 973 bytes May 28 2025 17:32:51.
probes_mysql_dtrace.h File 33005 bytes May 28 2025 17:32:51.
probes_mysql_nodtrace.h File 5005 bytes May 28 2025 17:32:51.
procedure.h File 6784 bytes May 28 2025 17:32:51.
protocol.h File 12490 bytes May 28 2025 17:32:51.
proxy_protocol.h File 548 bytes May 28 2025 17:32:51.
queues.h File 3477 bytes May 28 2025 17:32:51.
records.h File 3147 bytes May 28 2025 17:32:51.
repl_failsafe.h File 1585 bytes May 28 2025 17:32:51.
replication.h File 16106 bytes May 28 2025 17:32:51.
rijndael.h File 1711 bytes May 28 2025 17:32:51.
rowid_filter.h File 15477 bytes May 28 2025 17:32:51.
rpl_constants.h File 3357 bytes May 28 2025 17:32:51.
rpl_filter.h File 4535 bytes May 28 2025 17:32:51.
rpl_gtid.h File 13683 bytes May 28 2025 17:32:51.
rpl_injector.h File 9621 bytes May 28 2025 17:32:51.
rpl_mi.h File 14991 bytes May 28 2025 17:32:51.
rpl_parallel.h File 17461 bytes May 28 2025 17:32:51.
rpl_record.h File 1585 bytes May 28 2025 17:32:51.
rpl_record_old.h File 1407 bytes May 28 2025 17:32:51.
rpl_reporting.h File 3713 bytes May 28 2025 17:32:51.
rpl_rli.h File 32746 bytes May 28 2025 17:32:51.
rpl_tblmap.h File 3177 bytes May 28 2025 17:32:51.
rpl_utility.h File 9630 bytes May 28 2025 17:32:51.
scheduler.h File 3199 bytes May 28 2025 17:32:51.
scope.h File 4393 bytes May 28 2025 17:32:51.
select_handler.h File 2228 bytes May 28 2025 17:32:51.
semisync.h File 2287 bytes May 28 2025 17:32:51.
semisync_master.h File 25562 bytes May 28 2025 17:32:51.
semisync_master_ack_receiver.h File 8709 bytes May 28 2025 17:32:51.
semisync_slave.h File 3733 bytes May 28 2025 17:32:51.
service_versions.h File 2049 bytes May 28 2025 17:32:51.
session_tracker.h File 14275 bytes May 28 2025 17:32:51.
set_var.h File 16551 bytes May 28 2025 17:32:51.
slave.h File 12275 bytes May 28 2025 17:32:51.
socketpair.h File 842 bytes May 28 2025 17:32:51.
source_revision.h File 67 bytes May 28 2025 17:32:51.
sp.h File 22588 bytes May 28 2025 17:32:51.
sp_cache.h File 2045 bytes May 28 2025 17:32:51.
sp_head.h File 64509 bytes May 28 2025 17:32:51.
sp_pcontext.h File 24897 bytes May 28 2025 17:32:51.
sp_rcontext.h File 14334 bytes May 28 2025 17:32:51.
span.h File 3931 bytes May 28 2025 17:32:51.
spatial.h File 22305 bytes May 28 2025 17:32:51.
sql_acl.h File 14132 bytes May 28 2025 17:32:51.
sql_admin.h File 2915 bytes May 28 2025 17:32:51.
sql_alloc.h File 1732 bytes May 28 2025 17:32:51.
sql_alter.h File 15277 bytes May 28 2025 17:32:51.
sql_analyse.h File 11125 bytes May 28 2025 17:32:51.
sql_analyze_stmt.h File 12681 bytes May 28 2025 17:32:51.
sql_array.h File 6875 bytes May 28 2025 17:32:51.
sql_audit.h File 13943 bytes May 28 2025 17:32:51.
sql_base.h File 25880 bytes May 28 2025 17:32:51.
sql_basic_types.h File 9528 bytes May 28 2025 17:32:51.
sql_binlog.h File 895 bytes May 28 2025 17:32:51.
sql_bitmap.h File 7845 bytes May 28 2025 17:32:51.
sql_bootstrap.h File 1812 bytes May 28 2025 17:32:51.
sql_cache.h File 21676 bytes May 28 2025 17:32:51.
sql_callback.h File 1542 bytes May 28 2025 17:32:51.
sql_class.h File 267375 bytes May 28 2025 17:32:51.
sql_cmd.h File 9421 bytes May 28 2025 17:32:51.
sql_connect.h File 4087 bytes May 28 2025 17:32:51.
sql_const.h File 11228 bytes May 28 2025 17:32:51.
sql_crypt.h File 1437 bytes May 28 2025 17:32:51.
sql_cte.h File 16533 bytes May 28 2025 17:32:51.
sql_cursor.h File 2316 bytes May 28 2025 17:32:51.
sql_db.h File 2440 bytes May 28 2025 17:32:51.
sql_debug.h File 5646 bytes May 28 2025 17:32:51.
sql_delete.h File 1343 bytes May 28 2025 17:32:51.
sql_derived.h File 1289 bytes May 28 2025 17:32:51.
sql_digest.h File 3819 bytes May 28 2025 17:32:51.
sql_digest_stream.h File 1567 bytes May 28 2025 17:32:51.
sql_do.h File 954 bytes May 28 2025 17:32:51.
sql_error.h File 39588 bytes May 28 2025 17:32:51.
sql_explain.h File 29020 bytes May 28 2025 17:32:51.
sql_expression_cache.h File 4359 bytes May 28 2025 17:32:51.
sql_get_diagnostics.h File 7867 bytes May 28 2025 17:32:51.
sql_handler.h File 2910 bytes May 28 2025 17:32:51.
sql_help.h File 995 bytes May 28 2025 17:32:51.
sql_hset.h File 3401 bytes May 28 2025 17:32:51.
sql_i_s.h File 8232 bytes May 28 2025 17:32:51.
sql_insert.h File 2651 bytes May 28 2025 17:32:51.
sql_join_cache.h File 48669 bytes May 28 2025 17:32:51.
sql_lex.h File 172548 bytes May 28 2025 17:32:51.
sql_lifo_buffer.h File 9676 bytes May 28 2025 17:32:51.
sql_limit.h File 3187 bytes May 28 2025 17:32:51.
sql_list.h File 22458 bytes May 28 2025 17:32:51.
sql_load.h File 1276 bytes May 28 2025 17:32:51.
sql_locale.h File 2701 bytes May 28 2025 17:32:51.
sql_manager.h File 960 bytes May 28 2025 17:32:51.
sql_mode.h File 6735 bytes May 28 2025 17:32:51.
sql_parse.h File 8636 bytes May 28 2025 17:32:51.
sql_partition.h File 12072 bytes May 28 2025 17:32:51.
sql_partition_admin.h File 5940 bytes May 28 2025 17:32:51.
sql_plist.h File 7732 bytes May 28 2025 17:32:51.
sql_plugin.h File 7549 bytes May 28 2025 17:32:51.
sql_plugin_compat.h File 2237 bytes May 28 2025 17:32:51.
sql_prepare.h File 11409 bytes May 28 2025 17:32:51.
sql_priv.h File 18593 bytes May 28 2025 17:32:51.
sql_profile.h File 7816 bytes May 28 2025 17:32:51.
sql_reload.h File 1036 bytes May 28 2025 17:32:51.
sql_rename.h File 982 bytes May 28 2025 17:32:51.
sql_repl.h File 3045 bytes May 28 2025 17:32:51.
sql_schema.h File 3303 bytes May 28 2025 17:32:51.
sql_select.h File 88898 bytes May 28 2025 17:32:51.
sql_sequence.h File 5180 bytes May 28 2025 17:32:51.
sql_servers.h File 1777 bytes May 28 2025 17:32:51.
sql_show.h File 9616 bytes May 28 2025 17:32:51.
sql_signal.h File 3362 bytes May 28 2025 17:32:51.
sql_sort.h File 21967 bytes May 28 2025 17:32:51.
sql_statistics.h File 12454 bytes May 28 2025 17:32:51.
sql_string.h File 39773 bytes May 28 2025 17:32:51.
sql_table.h File 9612 bytes May 28 2025 17:32:51.
sql_tablespace.h File 956 bytes May 28 2025 17:32:51.
sql_test.h File 1589 bytes May 28 2025 17:32:51.
sql_time.h File 8374 bytes May 28 2025 17:32:51.
sql_trigger.h File 12332 bytes May 28 2025 17:32:51.
sql_truncate.h File 2079 bytes May 28 2025 17:32:51.
sql_tvc.h File 2418 bytes May 28 2025 17:32:51.
sql_type.h File 295437 bytes May 28 2025 17:32:51.
sql_type_fixedbin.h File 64320 bytes May 28 2025 17:32:51.
sql_type_fixedbin_storage.h File 5467 bytes May 28 2025 17:32:51.
sql_type_geom.h File 19086 bytes May 28 2025 17:32:51.
sql_type_int.h File 10001 bytes May 28 2025 17:32:51.
sql_type_json.h File 6155 bytes May 28 2025 17:32:51.
sql_type_real.h File 1257 bytes May 28 2025 17:32:51.
sql_type_string.h File 1629 bytes May 28 2025 17:32:51.
sql_udf.h File 4850 bytes May 28 2025 17:32:51.
sql_union.h File 1064 bytes May 28 2025 17:32:51.
sql_update.h File 1923 bytes May 28 2025 17:32:51.
sql_view.h File 2470 bytes May 28 2025 17:32:51.
sql_window.h File 6814 bytes May 28 2025 17:32:51.
ssl_compat.h File 3147 bytes May 28 2025 17:32:51.
strfunc.h File 2275 bytes May 28 2025 17:32:51.
structs.h File 26379 bytes May 28 2025 17:32:51.
sys_vars_shared.h File 2729 bytes May 28 2025 17:32:51.
t_ctype.h File 5639 bytes May 28 2025 17:32:51.
table.h File 115741 bytes May 28 2025 17:32:51.
table_cache.h File 4232 bytes May 28 2025 17:32:51.
thr_alarm.h File 2932 bytes May 28 2025 17:32:51.
thr_lock.h File 7350 bytes May 28 2025 17:32:51.
thr_malloc.h File 1202 bytes May 28 2025 17:32:51.
thr_timer.h File 1563 bytes May 28 2025 17:32:51.
thread_cache.h File 5905 bytes May 28 2025 17:32:51.
threadpool.h File 4810 bytes May 28 2025 17:32:51.
threadpool_generic.h File 3969 bytes May 28 2025 17:32:51.
threadpool_winsockets.h File 2290 bytes May 28 2025 17:32:51.
transaction.h File 1466 bytes May 28 2025 17:32:51.
tzfile.h File 5014 bytes May 28 2025 17:32:51.
tztime.h File 3397 bytes May 28 2025 17:32:51.
uniques.h File 4217 bytes May 28 2025 17:32:51.
unireg.h File 7716 bytes May 28 2025 17:32:51.
vers_string.h File 2534 bytes May 28 2025 17:32:51.
violite.h File 10086 bytes May 28 2025 17:32:51.
waiting_threads.h File 4532 bytes May 28 2025 17:32:51.
welcome_copyright_notice.h File 1218 bytes May 28 2025 17:32:51.
win_tzname_data.h File 6506 bytes May 28 2025 17:32:51.
winservice.h File 1194 bytes May 28 2025 17:32:51.
wqueue.h File 1565 bytes May 28 2025 17:32:51.
wsrep.h File 3308 bytes May 28 2025 17:32:51.
wsrep_applier.h File 2703 bytes May 28 2025 17:32:51.
wsrep_binlog.h File 3441 bytes May 28 2025 17:32:51.
wsrep_client_service.h File 2560 bytes May 28 2025 17:32:51.
wsrep_client_state.h File 1566 bytes May 28 2025 17:32:51.
wsrep_condition_variable.h File 1484 bytes May 28 2025 17:32:51.
wsrep_high_priority_service.h File 4912 bytes May 28 2025 17:32:51.
wsrep_mutex.h File 1216 bytes May 28 2025 17:32:51.
wsrep_mysqld.h File 21138 bytes May 28 2025 17:32:51.
wsrep_mysqld_c.h File 1227 bytes May 28 2025 17:32:51.
wsrep_on.h File 1718 bytes May 28 2025 17:32:51.
wsrep_priv.h File 1634 bytes May 28 2025 17:32:51.
wsrep_schema.h File 4943 bytes May 28 2025 17:32:51.
wsrep_server_service.h File 3631 bytes May 28 2025 17:32:51.
wsrep_server_state.h File 2285 bytes May 28 2025 17:32:51.
wsrep_sst.h File 3951 bytes May 28 2025 17:32:51.
wsrep_storage_service.h File 1809 bytes May 28 2025 17:32:51.
wsrep_thd.h File 11160 bytes May 28 2025 17:32:51.
wsrep_trans_observer.h File 18119 bytes May 28 2025 17:32:51.
wsrep_types.h File 997 bytes May 28 2025 17:32:51.
wsrep_utils.h File 9290 bytes May 28 2025 17:32:51.
wsrep_var.h File 4607 bytes May 28 2025 17:32:51.
wsrep_xid.h File 1549 bytes May 28 2025 17:32:51.
xa.h File 1845 bytes May 28 2025 17:32:51.

Reading File: //usr//include/mysql/server//private/wsrep_mysqld.h

/* Copyright 2008-2023 Codership Oy <http://www.codership.com>

   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 Foundation; version 2 of the License.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */

#ifndef WSREP_MYSQLD_H
#define WSREP_MYSQLD_H

#include <wsrep.h>

#ifdef WITH_WSREP

#include <mysql/plugin.h>
#include "mysql/service_wsrep.h"

#include <my_global.h>
#include <my_pthread.h>
#include "log.h"
#include "mysqld.h"

typedef struct st_mysql_show_var SHOW_VAR;
#include <sql_priv.h>
#include "mdl.h"
#include "sql_table.h"
#include "wsrep_mysqld_c.h"

#include "wsrep/provider.hpp"
#include "wsrep/streaming_context.hpp"
#include "wsrep_api.h"
#include <map>

#define WSREP_UNDEFINED_TRX_ID ULONGLONG_MAX

class THD;

// Global wsrep parameters

// MySQL wsrep options
extern const char* wsrep_provider;
extern const char* wsrep_provider_options;
extern const char* wsrep_cluster_name;
extern const char* wsrep_cluster_address;
extern const char* wsrep_node_name;
extern const char* wsrep_node_address;
extern const char* wsrep_node_incoming_address;
extern const char* wsrep_data_home_dir;
extern const char* wsrep_dbug_option;
extern long        wsrep_slave_threads;
extern int         wsrep_slave_count_change;
extern ulong       wsrep_debug;
extern my_bool     wsrep_convert_LOCK_to_trx;
extern ulong       wsrep_retry_autocommit;
extern my_bool     wsrep_auto_increment_control;
extern my_bool     wsrep_drupal_282555_workaround;
extern my_bool     wsrep_incremental_data_collection;
extern const char* wsrep_start_position;
extern ulong       wsrep_max_ws_size;
extern ulong       wsrep_max_ws_rows;
extern const char* wsrep_notify_cmd;
extern my_bool     wsrep_certify_nonPK;
extern long int    wsrep_protocol_version;
extern my_bool     wsrep_desync;
extern ulong       wsrep_reject_queries;
extern my_bool     wsrep_recovery;
extern my_bool     wsrep_replicate_myisam;
extern my_bool     wsrep_log_conflicts;
extern ulong       wsrep_mysql_replication_bundle;
extern my_bool     wsrep_load_data_splitting;
extern my_bool     wsrep_restart_slave;
extern my_bool     wsrep_restart_slave_activated;
extern my_bool     wsrep_slave_FK_checks;
extern my_bool     wsrep_slave_UK_checks;
extern ulong       wsrep_trx_fragment_unit;
extern ulong       wsrep_SR_store_type;
extern uint        wsrep_ignore_apply_errors;
extern ulong       wsrep_running_threads;
extern ulong       wsrep_running_applier_threads;
extern ulong       wsrep_running_rollbacker_threads;
extern bool        wsrep_new_cluster;
extern bool        wsrep_gtid_mode;
extern uint32      wsrep_gtid_domain_id;
extern std::atomic <bool > wsrep_thread_create_failed;
extern ulonglong   wsrep_mode;
extern my_bool     wsrep_strict_ddl;

enum enum_wsrep_reject_types {
  WSREP_REJECT_NONE,    /* nothing rejected */
  WSREP_REJECT_ALL,     /* reject all queries, with UNKNOWN_COMMAND error */
  WSREP_REJECT_ALL_KILL /* kill existing connections and reject all queries*/
};

enum enum_wsrep_OSU_method {
    WSREP_OSU_TOI,
    WSREP_OSU_RSU,
    WSREP_OSU_NONE,
};

enum enum_wsrep_sync_wait {
    WSREP_SYNC_WAIT_NONE= 0x0,
    // select, begin
    WSREP_SYNC_WAIT_BEFORE_READ= 0x1,
    WSREP_SYNC_WAIT_BEFORE_UPDATE_DELETE= 0x2,
    WSREP_SYNC_WAIT_BEFORE_INSERT_REPLACE= 0x4,
    WSREP_SYNC_WAIT_BEFORE_SHOW= 0x8,
    WSREP_SYNC_WAIT_MAX= 0xF
};

enum enum_wsrep_ignore_apply_error {
    WSREP_IGNORE_ERRORS_NONE= 0x0,
    WSREP_IGNORE_ERRORS_ON_RECONCILING_DDL= 0x1,
    WSREP_IGNORE_ERRORS_ON_RECONCILING_DML= 0x2,
    WSREP_IGNORE_ERRORS_ON_DDL= 0x4,
    WSREP_IGNORE_ERRORS_MAX= 0x7
};

/* wsrep_mode features */
enum enum_wsrep_mode {
  WSREP_MODE_STRICT_REPLICATION= (1ULL << 0),
  WSREP_MODE_BINLOG_ROW_FORMAT_ONLY= (1ULL << 1),
  WSREP_MODE_REQUIRED_PRIMARY_KEY= (1ULL << 2),
  WSREP_MODE_REPLICATE_MYISAM= (1ULL << 3),
  WSREP_MODE_REPLICATE_ARIA= (1ULL << 4),
  WSREP_MODE_DISALLOW_LOCAL_GTID= (1ULL << 5),
  WSREP_MODE_BF_MARIABACKUP= (1ULL << 6)
};

// Streaming Replication
#define WSREP_FRAG_BYTES      0
#define WSREP_FRAG_ROWS       1
#define WSREP_FRAG_STATEMENTS 2

#define WSREP_SR_STORE_NONE   0
#define WSREP_SR_STORE_TABLE  1

extern const char *wsrep_fragment_units[];
extern const char *wsrep_SR_store_types[];

// MySQL status variables
extern my_bool     wsrep_connected;
extern const char* wsrep_cluster_state_uuid;
extern long long   wsrep_cluster_conf_id;
extern const char* wsrep_cluster_status;
extern long        wsrep_cluster_size;
extern long        wsrep_local_index;
extern long long   wsrep_local_bf_aborts;
extern const char* wsrep_provider_name;
extern const char* wsrep_provider_version;
extern const char* wsrep_provider_vendor;
extern char*       wsrep_provider_capabilities;
extern char*       wsrep_cluster_capabilities;

int  wsrep_show_status(THD *thd, SHOW_VAR *var, void *buff,
                       system_status_var *status_var, enum_var_type scope);
int  wsrep_show_ready(THD *thd, SHOW_VAR *var, void *buff,
                      system_status_var *, enum_var_type);
void wsrep_free_status(THD *thd);
void wsrep_update_cluster_state_uuid(const char* str);

/* Filters out --wsrep-new-cluster oprtion from argv[]
 * should be called in the very beginning of main() */
void wsrep_filter_new_cluster (int* argc, char* argv[]);

int  wsrep_init();
void wsrep_deinit(bool free_options);

/* Initialize wsrep thread LOCKs and CONDs */
void wsrep_thr_init();
/* Destroy wsrep thread LOCKs and CONDs */
void wsrep_thr_deinit();

void wsrep_recover();
bool wsrep_before_SE(); // initialize wsrep before storage
                        // engines (true) or after (false)
/* wsrep initialization sequence at startup
 * @param before wsrep_before_SE() value */
void wsrep_init_startup(bool before);

/* Recover streaming transactions from fragment storage */
void wsrep_recover_sr_from_storage(THD *);

// Other wsrep global variables
extern my_bool     wsrep_inited; // whether wsrep is initialized ?
extern bool        wsrep_service_started;

extern "C" void wsrep_fire_rollbacker(THD *thd);
extern "C" uint32 wsrep_thd_wsrep_rand(THD *thd);
extern "C" time_t wsrep_thd_query_start(THD *thd);
extern void wsrep_close_client_connections(my_bool wait_to_end,
                                           THD *except_caller_thd= NULL);
extern "C" query_id_t wsrep_thd_wsrep_last_query_id(THD *thd);
extern "C" void wsrep_thd_set_wsrep_last_query_id(THD *thd, query_id_t id);

extern int  wsrep_wait_committing_connections_close(int wait_time);
extern void wsrep_close_applier(THD *thd);
extern void wsrep_wait_appliers_close(THD *thd);
extern void wsrep_close_applier_threads(int count);


/* new defines */
extern void wsrep_stop_replication(THD *thd);
extern bool wsrep_start_replication(const char *wsrep_cluster_address);
extern void wsrep_shutdown_replication();
extern bool wsrep_check_mode (enum_wsrep_mode mask);
extern bool wsrep_check_mode_after_open_table (THD *thd, const handlerton *hton,
                                               TABLE_LIST *tables);
extern bool wsrep_check_mode_before_cmd_execute (THD *thd);
extern bool wsrep_must_sync_wait (THD* thd, uint mask= WSREP_SYNC_WAIT_BEFORE_READ);
extern bool wsrep_sync_wait (THD* thd, uint mask= WSREP_SYNC_WAIT_BEFORE_READ);
extern bool wsrep_sync_wait (THD* thd, enum enum_sql_command command);
extern enum wsrep::provider::status
wsrep_sync_wait_upto (THD* thd, wsrep_gtid_t* upto, int timeout);
extern int  wsrep_check_opts();
extern void wsrep_prepend_PATH (const char* path);
extern bool wsrep_append_fk_parent_table(THD* thd, TABLE_LIST* table, wsrep::key_array* keys);
extern bool wsrep_reload_ssl();

/* Other global variables */
extern wsrep_seqno_t wsrep_locked_seqno;

/* A wrapper function for MySQL log functions. The call will prefix
   the log message with WSREP and forward the result buffer to fun. */
void WSREP_LOG(void (*fun)(const char* fmt, ...), const char* fmt, ...);

#define WSREP_SYNC_WAIT(thd_, before_)                                  \
    { if (WSREP_CLIENT(thd_) &&                                         \
          wsrep_sync_wait(thd_, before_)) goto wsrep_error_label; }

#define WSREP_MYSQL_DB (char *)"mysql"

#define WSREP_TO_ISOLATION_BEGIN(db_, table_, table_list_)              \
  if (WSREP_ON && WSREP(thd) && wsrep_to_isolation_begin(thd, db_, table_, table_list_)) \
    goto wsrep_error_label;

#define WSREP_TO_ISOLATION_BEGIN_CREATE(db_, table_, table_list_, create_info_)	\
  if (WSREP_ON && WSREP(thd) &&                                         \
      wsrep_to_isolation_begin(thd, db_, table_,                        \
                               table_list_, nullptr, nullptr, create_info_))\
    goto wsrep_error_label;

#define WSREP_TO_ISOLATION_BEGIN_ALTER(db_, table_, table_list_, alter_info_, fk_tables_, create_info_) \
  if (WSREP(thd) && wsrep_thd_is_local(thd) &&                          \
      wsrep_to_isolation_begin(thd, db_, table_,                        \
                               table_list_, alter_info_, fk_tables_, create_info_))

#define WSREP_TO_ISOLATION_END                                          \
  if ((WSREP(thd) && wsrep_thd_is_local_toi(thd)) ||                    \
      wsrep_thd_is_in_rsu(thd))                                         \
    wsrep_to_isolation_end(thd);

/*
  Checks if lex->no_write_to_binlog is set for statements that use LOCAL or
  NO_WRITE_TO_BINLOG.
*/
#define WSREP_TO_ISOLATION_BEGIN_WRTCHK(db_, table_, table_list_)       \
  if (WSREP(thd) && !thd->lex->no_write_to_binlog                       \
      && wsrep_to_isolation_begin(thd, db_, table_, table_list_))       \
    goto wsrep_error_label;


#define WSREP_PROVIDER_EXISTS (WSREP_PROVIDER_EXISTS_)

static inline bool wsrep_cluster_address_exists()
{
  if (mysqld_server_started)
    mysql_mutex_assert_owner(&LOCK_global_system_variables);
  return wsrep_cluster_address && wsrep_cluster_address[0];
}

extern my_bool wsrep_ready_get();
extern void wsrep_ready_wait();

extern mysql_mutex_t LOCK_wsrep_ready;
extern mysql_cond_t  COND_wsrep_ready;
extern mysql_mutex_t LOCK_wsrep_sst;
extern mysql_cond_t  COND_wsrep_sst;
extern mysql_mutex_t LOCK_wsrep_sst_init;
extern mysql_cond_t  COND_wsrep_sst_init;
extern int wsrep_replaying;
extern mysql_mutex_t LOCK_wsrep_replaying;
extern mysql_cond_t  COND_wsrep_replaying;
extern mysql_mutex_t LOCK_wsrep_slave_threads;
extern mysql_cond_t  COND_wsrep_slave_threads;
extern mysql_mutex_t LOCK_wsrep_gtid_wait_upto;
extern mysql_mutex_t LOCK_wsrep_cluster_config;
extern mysql_mutex_t LOCK_wsrep_desync;
extern mysql_mutex_t LOCK_wsrep_SR_pool;
extern mysql_mutex_t LOCK_wsrep_SR_store;
extern mysql_mutex_t LOCK_wsrep_config_state;
extern mysql_mutex_t LOCK_wsrep_group_commit;
extern mysql_mutex_t LOCK_wsrep_joiner_monitor;
extern mysql_mutex_t LOCK_wsrep_donor_monitor;
extern mysql_cond_t  COND_wsrep_joiner_monitor;
extern mysql_cond_t  COND_wsrep_donor_monitor;

extern int           wsrep_to_isolation;
#ifdef GTID_SUPPORT
extern rpl_sidno     wsrep_sidno;
#endif /* GTID_SUPPORT */
extern my_bool       wsrep_preordered_opt;

#ifdef HAVE_PSI_INTERFACE

extern PSI_cond_key  key_COND_wsrep_thd;

extern PSI_mutex_key key_LOCK_wsrep_ready;
extern PSI_mutex_key key_COND_wsrep_ready;
extern PSI_mutex_key key_LOCK_wsrep_sst;
extern PSI_cond_key  key_COND_wsrep_sst;
extern PSI_mutex_key key_LOCK_wsrep_sst_init;
extern PSI_cond_key  key_COND_wsrep_sst_init;
extern PSI_mutex_key key_LOCK_wsrep_sst_thread;
extern PSI_cond_key  key_COND_wsrep_sst_thread;
extern PSI_mutex_key key_LOCK_wsrep_replaying;
extern PSI_cond_key  key_COND_wsrep_replaying;
extern PSI_mutex_key key_LOCK_wsrep_slave_threads;
extern PSI_cond_key  key_COND_wsrep_slave_threads;
extern PSI_mutex_key key_LOCK_wsrep_gtid_wait_upto;
extern PSI_cond_key  key_COND_wsrep_gtid_wait_upto;
extern PSI_mutex_key key_LOCK_wsrep_cluster_config;
extern PSI_mutex_key key_LOCK_wsrep_desync;
extern PSI_mutex_key key_LOCK_wsrep_SR_pool;
extern PSI_mutex_key key_LOCK_wsrep_SR_store;
extern PSI_mutex_key key_LOCK_wsrep_global_seqno;
extern PSI_mutex_key key_LOCK_wsrep_thd_queue;
extern PSI_cond_key  key_COND_wsrep_thd_queue;
extern PSI_mutex_key key_LOCK_wsrep_joiner_monitor;
extern PSI_mutex_key key_LOCK_wsrep_donor_monitor;

extern PSI_file_key key_file_wsrep_gra_log;

extern PSI_thread_key key_wsrep_sst_joiner;
extern PSI_thread_key key_wsrep_sst_donor;
extern PSI_thread_key key_wsrep_rollbacker;
extern PSI_thread_key key_wsrep_applier;
extern PSI_thread_key key_wsrep_sst_joiner_monitor;
extern PSI_thread_key key_wsrep_sst_donor_monitor;
#endif /* HAVE_PSI_INTERFACE */


struct TABLE_LIST;
class Alter_info;
int wsrep_to_isolation_begin(THD *thd, const char *db_, const char *table_,
                             const TABLE_LIST* table_list,
                             const Alter_info* alter_info= nullptr,
                             const wsrep::key_array *fk_tables= nullptr,
                             const HA_CREATE_INFO* create_info= nullptr);

bool wsrep_should_replicate_ddl(THD* thd, const handlerton *hton);
bool wsrep_should_replicate_ddl_iterate(THD* thd, const TABLE_LIST* table_list);

void wsrep_to_isolation_end(THD *thd);

bool wsrep_append_SR_keys(THD *thd);
int wsrep_to_buf_helper(
  THD* thd, const char *query, uint query_len, uchar** buf, size_t* buf_len);
int wsrep_create_trigger_query(THD *thd, uchar** buf, size_t* buf_len);
int wsrep_create_event_query(THD *thd, uchar** buf, size_t* buf_len);

void wsrep_init_sidno(const wsrep_uuid_t&);
bool wsrep_node_is_donor();
bool wsrep_node_is_synced();

void wsrep_init_SR();
void wsrep_verify_SE_checkpoint(const wsrep_uuid_t& uuid, wsrep_seqno_t seqno);
int wsrep_replay_from_SR_store(THD*, const wsrep_trx_meta_t&);

class Log_event;
int wsrep_ignored_error_code(Log_event* ev, int error);
int wsrep_must_ignore_error(THD* thd);

struct wsrep_server_gtid_t
{
  uint32 domain_id;
  uint32 server_id;
  uint64 seqno;
};
class Wsrep_gtid_server
{
public:
  uint32 domain_id;
  uint32 server_id;
  Wsrep_gtid_server()
    : m_force_signal(false)
    , m_seqno(0)
    , m_committed_seqno(0)
  { }
  void gtid(const wsrep_server_gtid_t& gtid)
  {
    domain_id=  gtid.domain_id;
    server_id=  gtid.server_id;
    m_seqno=    gtid.seqno;
  }
  wsrep_server_gtid_t gtid()
  {
    wsrep_server_gtid_t gtid;
    gtid.domain_id= domain_id;
    gtid.server_id= server_id;
    gtid.seqno=     m_seqno;
    return gtid;
  }
  void seqno(const uint64 seqno) { m_seqno= seqno; }
  uint64 seqno() const { return m_seqno; }
  uint64 seqno_committed() const { return m_committed_seqno; }
  uint64 seqno_inc()
  {
    m_seqno++;
    return m_seqno;
  }
  const wsrep_server_gtid_t& undefined()
  {
    return m_undefined;
  }
  int wait_gtid_upto(const uint64_t seqno, uint timeout)
  {
    int wait_result= 0;
    struct timespec wait_time;
    int ret= 0;
    mysql_cond_t wait_cond;
    mysql_cond_init(key_COND_wsrep_gtid_wait_upto, &wait_cond, NULL);
    set_timespec(wait_time, timeout);
    mysql_mutex_lock(&LOCK_wsrep_gtid_wait_upto);
    std::multimap<uint64, mysql_cond_t*>::iterator it;
    if (seqno > m_seqno)
    {
      try
      {
        it= m_wait_map.insert(std::make_pair(seqno, &wait_cond));
      } 
      catch (std::bad_alloc& e)
      {
         ret= ENOMEM;
      }
      while (!ret && (m_committed_seqno < seqno) && !m_force_signal)
      {
        wait_result= mysql_cond_timedwait(&wait_cond,
                                          &LOCK_wsrep_gtid_wait_upto,
                                          &wait_time);
        if (wait_result == ETIMEDOUT || wait_result == ETIME)
        {
          ret= wait_result;
          break;
        }
      }
      if (ret != ENOMEM)
      {
        m_wait_map.erase(it);
      }
    }
    mysql_mutex_unlock(&LOCK_wsrep_gtid_wait_upto);
    mysql_cond_destroy(&wait_cond);
    return ret;
  }
  void signal_waiters(uint64 seqno, bool signal_all)
  {
    mysql_mutex_lock(&LOCK_wsrep_gtid_wait_upto);
    if (!signal_all && (m_committed_seqno >= seqno))
    {
      mysql_mutex_unlock(&LOCK_wsrep_gtid_wait_upto);
      return;
    }
    m_force_signal= true;
    std::multimap<uint64, mysql_cond_t*>::iterator it_end;
    std::multimap<uint64, mysql_cond_t*>::iterator it_begin;
    if (signal_all)
    {
      it_end= m_wait_map.end();
    }
    else
    {
      it_end= m_wait_map.upper_bound(seqno);
    }
    if (m_committed_seqno < seqno)
    {
      m_committed_seqno= seqno;
    }
    for (it_begin = m_wait_map.begin(); it_begin != it_end; ++it_begin)
    {
      mysql_cond_signal(it_begin->second);
    }
    m_force_signal= false;
    mysql_mutex_unlock(&LOCK_wsrep_gtid_wait_upto);
  }
private:
  const wsrep_server_gtid_t m_undefined= {0,0,0};
  std::multimap<uint64, mysql_cond_t*> m_wait_map;
  bool m_force_signal;
  Atomic_counter<uint64_t> m_seqno;
  Atomic_counter<uint64_t> m_committed_seqno;
};
extern Wsrep_gtid_server wsrep_gtid_server;
void wsrep_init_gtid();
bool wsrep_check_gtid_seqno(const uint32&, const uint32&, uint64&);
bool wsrep_get_binlog_gtid_seqno(wsrep_server_gtid_t&);

int wsrep_append_table_keys(THD* thd,
                            TABLE_LIST* first_table,
                            TABLE_LIST* table_list,
                            Wsrep_service_key_type key_type);

extern void
wsrep_handle_mdl_conflict(MDL_context *requestor_ctx,
                          const MDL_ticket *ticket,
                          const MDL_key *key);

enum wsrep_thread_type {
  WSREP_APPLIER_THREAD=1,
  WSREP_ROLLBACKER_THREAD=2
};

typedef void (*wsrep_thd_processor_fun)(THD*, void *);
class Wsrep_thd_args
{
 public:
 Wsrep_thd_args(wsrep_thd_processor_fun fun,
                wsrep_thread_type thread_type,
                pthread_t thread_id)
   :
  fun_ (fun),
  thread_type_ (thread_type),
  thread_id_ (thread_id)
  { }

  wsrep_thd_processor_fun fun() { return fun_; }
  pthread_t* thread_id() {return &thread_id_; }
  enum wsrep_thread_type thread_type() {return thread_type_;}

 private:

  Wsrep_thd_args(const Wsrep_thd_args&);
  Wsrep_thd_args& operator=(const Wsrep_thd_args&);

  wsrep_thd_processor_fun fun_;
  enum wsrep_thread_type  thread_type_;
  pthread_t thread_id_;
};

void* start_wsrep_THD(void*);

void wsrep_close_threads(THD *thd);
bool wsrep_is_show_query(enum enum_sql_command command);
void wsrep_replay_transaction(THD *thd);
bool wsrep_create_like_table(THD* thd, TABLE_LIST* table,
                             TABLE_LIST* src_table,
                             HA_CREATE_INFO *create_info);
bool wsrep_node_is_donor();
bool wsrep_node_is_synced();

/**
 * Check if the wsrep provider (ie the Galera library) is capable of
 * doing streaming replication.
 * @return true if SR capable
 */
bool wsrep_provider_is_SR_capable();

/**
 * Initialize WSREP server instance.
 *
 * @return Zero on success, non-zero on error.
 */
int wsrep_init_server();

/**
 * Initialize WSREP globals. This should be done after server initialization
 * is complete and the server has joined to the cluster.
 *
 */
void wsrep_init_globals();

/**
 * Deinit and release WSREP resources.
 */
void wsrep_deinit_server();

/**
 * Convert streaming fragment unit (WSREP_FRAG_BYTES, WSREP_FRAG_ROWS...)
 * to corresponding wsrep-lib fragment_unit
 */
enum wsrep::streaming_context::fragment_unit wsrep_fragment_unit(ulong unit);

wsrep::key wsrep_prepare_key_for_toi(const char* db, const char* table,
                                     enum wsrep::key::type type);

void wsrep_wait_ready(THD *thd);
void wsrep_ready_set(bool ready_value);

/**
 * Returns true if the given list of tables contains at least one
 * non-temporary table.
 */
bool wsrep_table_list_has_non_temp_tables(THD *thd, TABLE_LIST *tables);

#else /* !WITH_WSREP */

/* These macros are needed to compile MariaDB without WSREP support
 * (e.g. embedded) */

#define WSREP_PROVIDER_EXISTS (0)
#define wsrep_emulate_bin_log (0)
#define wsrep_to_isolation (0)
#define wsrep_before_SE() (0)
#define wsrep_init_startup(X)
#define wsrep_check_opts() (0)
#define wsrep_thr_init() do {} while(0)
#define wsrep_thr_deinit() do {} while(0)
#define wsrep_init_globals() do {} while(0)
#define wsrep_create_appliers(X) do {} while(0)
#define wsrep_cluster_address_exists() (false)
#define WSREP_MYSQL_DB (0)
#define WSREP_TO_ISOLATION_BEGIN(db_, table_, table_list_) do { } while(0)
#define WSREP_TO_ISOLATION_BEGIN_ALTER(db_, table_, table_list_, alter_info_, fk_tables_)
#define WSREP_TO_ISOLATION_END
#define WSREP_TO_ISOLATION_BEGIN_WRTCHK(db_, table_, table_list_)
#define WSREP_SYNC_WAIT(thd_, before_)

#endif /* WITH_WSREP */

#endif /* WSREP_MYSQLD_H */

SILENT KILLER Tool