34 #if !defined(SERVER_MODE) 53 int length,
const char *data);
60 const char *gtran_data,
int lock_length,
const char *lock_data);
62 const char *tran_data,
int topop_length,
const char *topop_data);
90 , appending_page_tde_encrypted (false)
120 , prior_list_header (
NULL)
121 , prior_list_tail (
NULL)
123 , prior_flush_list_header (
NULL)
193 #if defined(SERVER_MODE) 239 #if defined (SERVER_MODE) 274 LOG_DATA_ADDR *addr,
int ulength,
const char *udata,
int rlength,
const char *rdata)
444 num_rcrumbs, rcrumbs);
492 if (length <= 0 || data ==
NULL)
497 node->
udata = (
char *) malloc (length);
504 memcpy (node->
udata, data, length);
523 if (length <= 0 || data ==
NULL)
528 node->
rdata = (
char *) malloc (length);
535 memcpy (node->
rdata, data, length);
560 for (i = 0, length = 0; i < num_crumbs; i++)
568 node->
udata = (
char *) malloc (length);
576 for (i = 0; i < num_crumbs; i++)
578 memcpy (ptr, crumbs[i].data, crumbs[i].length);
605 for (i = 0, length = 0; i < num_crumbs; i++)
613 node->
rdata = (
char *) malloc (length);
621 for (i = 0; i < num_crumbs; i++)
623 memcpy (ptr, crumbs[i].data, crumbs[i].length);
650 int num_rcrumbs,
const LOG_CRUMB *rcrumbs)
663 int ulength, rlength, *data_header_ulength_p =
NULL, *data_header_rlength_p =
NULL;
667 char *data_ptr =
NULL, *tmp_ptr =
NULL;
668 char *undo_data =
NULL, *redo_data =
NULL;
671 bool has_undo =
false;
672 bool has_redo =
false;
673 bool is_undo_zip =
false, is_redo_zip =
false, is_diff =
false;
674 bool can_zip =
false;
684 for (i = 0; i < num_ucrumbs; i++)
691 for (i = 0; i < num_rcrumbs; i++)
723 total_length += ulength;
727 total_length += rlength;
735 if (data_ptr !=
NULL)
741 assert (has_undo ==
true);
743 undo_data = data_ptr;
745 for (i = 0; i < num_ucrumbs; i++)
747 memcpy (tmp_ptr, (
char *) ucrumbs[i].data, ucrumbs[i].length);
756 assert (has_redo ==
true);
760 for (i = 0; i < num_rcrumbs; i++)
762 (void) memcpy (tmp_ptr, (
char *) rcrumbs[
i].
data, rcrumbs[
i].
length);
774 (void)
log_diff (ulength, undo_data, rlength, redo_data);
776 is_undo_zip =
log_zip (zip_undo, ulength, undo_data);
777 is_redo_zip =
log_zip (zip_redo, rlength, redo_data);
788 is_undo_zip =
log_zip (zip_undo, ulength, undo_data);
792 is_redo_zip =
log_zip (zip_redo, rlength, redo_data);
801 assert (has_redo && has_undo);
849 #if !defined (NDEBUG) 865 mvccid_p = &mvcc_undo_p->
mvccid;
871 data_header_ulength_p = &undo_p->
length;
872 log_data_p = &undo_p->
data;
880 mvccid_p = &mvcc_redo_p->
mvccid;
886 data_header_rlength_p = &redo_p->
length;
887 log_data_p = &redo_p->
data;
899 mvccid_p = &mvcc_undoredo_p->
mvccid;
907 data_header_ulength_p = &undoredo_p->
ulength;
908 data_header_rlength_p = &undoredo_p->
rlength;
909 log_data_p = &undoredo_p->
data;
935 if (mvccid_p !=
NULL)
963 if (vacuum_info_p !=
NULL)
997 assert (has_undo && (data_header_ulength_p !=
NULL));
1006 *data_header_ulength_p = ulength;
1012 assert (has_redo && (data_header_rlength_p !=
NULL));
1014 *data_header_rlength_p =
MAKE_ZIP_LEN (zip_redo->data_length);
1019 *data_header_rlength_p = rlength;
1122 dbout_redo->
length = length;
1142 const char *gtran_data,
int lock_length,
const char *lock_data)
1154 if (gtran_length > 0)
1158 if (lock_length > 0)
1179 int topop_length,
const char *topop_data)
1191 if (tran_length > 0)
1195 if (topop_length > 0)
1296 #if !defined (NDEBUG) 1391 mvccid = mvcc_undo->
mvccid;
1398 mvccid = mvcc_undo->
mvccid;
1408 mvccid = mvcc_undoredo->
mvccid;
1415 "log mvcc op at (%lld, %d) and create link with log_lsa(%lld, %d)",
1510 #if defined(SERVER_MODE) 1557 #if !defined(NDEBUG) 1592 if (tdes->is_system_worker_transaction () && !tdes->is_under_sysop ())
1668 if ((current_offset + length) >= last_offset)
1672 if (current_offset >= last_offset)
1684 if (current_offset + length >= last_offset)
1686 copy_length =
CAST_BUFLEN (last_offset - current_offset);
1690 copy_length = length;
1693 current_offset += copy_length;
1694 length -= copy_length;
1713 #if defined (SERVER_MODE) 1714 if (thread_p ==
NULL)
1719 if (thread_p ==
NULL)
1725 if (thread_p->log_zip_undo ==
NULL)
1729 return (
LOG_ZIP *) thread_p->log_zip_undo;
1739 #if defined (SERVER_MODE) 1740 if (thread_p ==
NULL)
1745 if (thread_p ==
NULL)
1751 if (thread_p->log_zip_redo ==
NULL)
1755 return (
LOG_ZIP *) thread_p->log_zip_redo;
1777 #if defined (SERVER_MODE) 1778 if (thread_p ==
NULL)
1783 if (thread_p ==
NULL)
1788 if (thread_p->log_data_length < length)
1792 data_ptr = (
char *) realloc (thread_p->log_data_ptr, alloc_len);
1793 if (data_ptr ==
NULL)
1796 if (thread_p->log_data_ptr)
1800 thread_p->log_data_length = 0;
1805 thread_p->log_data_ptr = data_ptr;
1806 thread_p->log_data_length = alloc_len;
1816 if (data_ptr ==
NULL)
1846 #if defined (SERVER_MODE) 1847 if (thread_p ==
NULL)
1852 if (thread_p ==
NULL)
1858 if (thread_p->log_data_ptr ==
NULL)
1861 thread_p->log_data_ptr = (
char *) malloc (thread_p->log_data_length);
1863 if (thread_p->log_data_ptr ==
NULL)
1865 thread_p->log_data_length = 0;
1867 (
size_t) thread_p->log_data_length);
1870 return thread_p->log_data_ptr;
cubthread::entry * thread_get_thread_entry_info(void)
size_t logpb_get_memsize()
static void log_prior_lsa_append_advance_when_doesnot_fit(size_t length)
static LOG_ZIP * log_zip_redo
VACUUM_LOG_BLOCKID vacuum_get_log_blockid(LOG_PAGEID pageid)
LOG_PRIOR_NODE * prior_list_header
static int prior_lsa_gen_2pc_prepare_record(THREAD_ENTRY *thread_p, LOG_PRIOR_NODE *node, int gtran_length, const char *gtran_data, int lock_length, const char *lock_data)
size_t LOG_PRIOR_LSA_LAST_APPEND_OFFSET()
#define LOG_IS_UNDOREDO_RECORD_TYPE(type)
const char * rv_rcvindex_string(LOG_RCVINDEX rcvindex)
bool LSA_EQ(const log_lsa *plsa1, const log_lsa *plsa2)
static void prior_lsa_end_append(THREAD_ENTRY *thread_p, LOG_PRIOR_NODE *node)
void LSA_COPY(log_lsa *plsa1, const log_lsa *plsa2)
bool prior_is_tde_encrypted(const log_prior_node *node)
static void log_prior_lsa_append_align()
LOG_VACUUM_INFO vacuum_info
LOG_RECORD_HEADER log_header
LOG_LSA sysop_start_postpone_lsa
#define LOG_IS_MVCC_OP_RECORD_TYPE(type)
static int prior_lsa_gen_end_chkpt_record(THREAD_ENTRY *thread_p, LOG_PRIOR_NODE *node, int tran_length, const char *tran_data, int topop_length, const char *topop_data)
static int log_data_length
static void prior_lsa_append_data(int length)
void thread_sleep(double millisec)
struct log_rec_mvcc_redo LOG_REC_MVCC_REDO
#define assert_release(e)
void LOG_CS_ENTER(THREAD_ENTRY *thread_p)
LOG_PRIOR_NODE * prior_lsa_alloc_and_copy_crumbs(THREAD_ENTRY *thread_p, LOG_RECTYPE rec_type, LOG_RCVINDEX rcvindex, LOG_DATA_ADDR *addr, const int num_ucrumbs, const LOG_CRUMB *ucrumbs, const int num_rcrumbs, const LOG_CRUMB *rcrumbs)
struct log_rec_replication LOG_REC_REPLICATION
LOG_PRIOR_NODE * prior_list_tail
static char * log_data_ptr
static LOG_LSA prior_lsa_next_record_internal(THREAD_ENTRY *thread_p, LOG_PRIOR_NODE *node, LOG_TDES *tdes, int with_lock)
struct log_rec_compensate LOG_REC_COMPENSATE
#define LSA_AS_ARGS(lsa_ptr)
struct log_rec_sysop_start_postpone LOG_REC_SYSOP_START_POSTPONE
LOG_PRIOR_NODE * prior_lsa_alloc_and_copy_data(THREAD_ENTRY *thread_p, LOG_RECTYPE rec_type, LOG_RCVINDEX rcvindex, LOG_DATA_ADDR *addr, int ulength, const char *udata, int rlength, const char *rdata)
LOG_ZIP_SIZE_T data_length
static int prior_lsa_copy_redo_data_to_node(LOG_PRIOR_NODE *node, int length, const char *data)
std::mutex prior_lsa_mutex
struct log_rec_start_postpone LOG_REC_START_POSTPONE
LOG_VACUUM_INFO vacuum_info
bool LSA_LT(const log_lsa *plsa1, const log_lsa *plsa2)
#define er_log_debug(...)
LOG_ZIP * log_zip_alloc(LOG_ZIP_SIZE_T size)
bool appending_page_tde_encrypted
static void prior_lsa_start_append(THREAD_ENTRY *thread_p, LOG_PRIOR_NODE *node, LOG_TDES *tdes)
void log_wakeup_log_flush_daemon()
struct log_rec_mvcc_undo LOG_REC_MVCC_UNDO
static int prior_lsa_gen_dbout_redo_record(THREAD_ENTRY *thread_p, LOG_PRIOR_NODE *node, LOG_RCVINDEX rcvindex, int length, const char *data)
struct log_rec_sysop_end LOG_REC_SYSOP_END
void LOG_RESET_PREV_LSA(const LOG_LSA *lsa)
LOG_LSA prior_lsa_next_record(THREAD_ENTRY *thread_p, LOG_PRIOR_NODE *node, log_tdes *tdes)
struct log_rec_donetime LOG_REC_DONETIME
void er_set(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
struct log_rec_ha_server_state LOG_REC_HA_SERVER_STATE
static bool log_Zip_support
LOG_REC_SYSOP_END sysop_end
void set_nxio_lsa(const LOG_LSA &next_io_lsa)
static LOG_ZIP * log_zip_undo
#define ER_OUT_OF_VIRTUAL_MEMORY
void LOG_CS_EXIT(THREAD_ENTRY *thread_p)
void LOG_RESET_APPEND_LSA(const LOG_LSA *lsa)
LOG_LSA prior_lsa_next_record_with_lock(THREAD_ENTRY *thread_p, LOG_PRIOR_NODE *node, log_tdes *tdes)
#define VACUUM_ER_LOG_LOGGING
int prior_set_tde_encrypted(log_prior_node *node, LOG_RCVINDEX recvindex)
enum log_rectype LOG_RECTYPE
static void prior_update_header_mvcc_info(const LOG_LSA &record_lsa, MVCCID mvccid)
LOG_LSA prev_mvcc_op_log_lsa
static int prior_lsa_copy_redo_crumbs_to_node(LOG_PRIOR_NODE *node, int num_crumbs, const LOG_CRUMB *crumbs)
void log_append_init_zip()
static void log_prior_lsa_append_add_align(size_t add)
struct log_rec_redo LOG_REC_REDO
struct log_rec_run_postpone LOG_REC_RUN_POSTPONE
int num_log_records_written
bool log_is_in_crash_recovery(void)
struct log_rec_mvcc_undoredo LOG_REC_MVCC_UNDOREDO
#define vacuum_er_log(er_log_level, msg,...)
struct log_rec_2pc_start LOG_REC_2PC_START
bool LSA_ISNULL(const log_lsa *lsa_ptr)
void log_append_final_zip()
struct log_rec_chkpt LOG_REC_CHKPT
#define LOG_IS_MVCC_OPERATION(rcvindex)
struct log_rec_undoredo LOG_REC_UNDOREDO
#define CEIL_PTVDIV(dividend, divisor)
LOG_PRIOR_LSA_INFO prior_info
static int prior_lsa_copy_undo_crumbs_to_node(LOG_PRIOR_NODE *node, int num_crumbs, const LOG_CRUMB *crumbs)
static char * log_append_get_data_ptr(THREAD_ENTRY *thread_p)
LOG_REC_UNDOREDO undoredo
#define VFID_COPY(vfid_ptr1, vfid_ptr2)
static LOG_ZIP * log_append_get_zip_redo(THREAD_ENTRY *thread_p)
static LOG_ZIP * log_append_get_zip_undo(THREAD_ENTRY *thread_p)
static int prior_lsa_gen_postpone_record(THREAD_ENTRY *thread_p, LOG_PRIOR_NODE *node, LOG_RCVINDEX rcvindex, LOG_DATA_ADDR *addr, int length, const char *data)
struct log_prior_node LOG_PRIOR_NODE
static void error(const char *msg)
STATIC_INLINE void perfmon_inc_stat(THREAD_ENTRY *thread_p, PERF_STAT_ID psid) __attribute__((ALWAYS_INLINE))
MVCCID get_global_oldest_visible() const
LOG_TDES * LOG_FIND_CURRENT_TDES(THREAD_ENTRY *thread_p=NULL)
void vacuum_produce_log_block_data(THREAD_ENTRY *thread_p)
int logpb_prior_lsa_append_all_list(THREAD_ENTRY *thread_p)
bool log_zip(LOG_ZIP *log_zip, LOG_ZIP_SIZE_T length, const void *data)
#define MAKE_ZIP_LEN(length)
void log_zip_free(LOG_ZIP *log_zip)
#define free_and_init(ptr)
#define LOG_ISRESTARTED()
#define DB_ALIGN(offset, align)
void LSA_SET_NULL(log_lsa *lsa_ptr)
static bool log_append_realloc_data_ptr(THREAD_ENTRY *thread_p, int length)
#define LOG_IS_REDO_RECORD_TYPE(type)
bool log_diff(LOG_ZIP_SIZE_T undo_length, const void *undo_data, LOG_ZIP_SIZE_T redo_length, void *redo_data)
bool prm_get_bool_value(PARAM_ID prm_id)
struct log_rec_savept LOG_REC_SAVEPT
LOG_LSA get_nxio_lsa() const
struct log_rec_2pc_prepcommit LOG_REC_2PC_PREPCOMMIT
#define LOG_IS_UNDO_RECORD_TYPE(type)
struct log_rec_undo LOG_REC_UNDO
static int log_Zip_min_size_to_compress
bool log_prior_has_worker_log_records(THREAD_ENTRY *thread_p)
LOG_LSA tran_start_postpone_lsa
#define ER_TDE_CIPHER_IS_NOT_LOADED
std::vector< MVCCID > sub_ids
static int prior_lsa_gen_record(THREAD_ENTRY *thread_p, LOG_PRIOR_NODE *node, LOG_RECTYPE rec_type, int length, const char *data)
std::atomic< LOG_LSA > nxio_lsa
#define MVCCID_IS_VALID(id)
LOG_LSA atomic_sysop_start_lsa
#define VFID_SET_NULL(vfid_ptr)
VPID * pgbuf_get_vpid_ptr(PAGE_PTR pgptr)
static int prior_lsa_gen_undoredo_record_from_crumbs(THREAD_ENTRY *thread_p, LOG_PRIOR_NODE *node, LOG_RCVINDEX rcvindex, LOG_DATA_ADDR *addr, int num_ucrumbs, const LOG_CRUMB *ucrumbs, int num_rcrumbs, const LOG_CRUMB *rcrumbs)
const TRANID LOG_SYSTEM_TRANID
static int prior_lsa_copy_undo_data_to_node(LOG_PRIOR_NODE *node, int length, const char *data)
struct log_rec_dbout_redo LOG_REC_DBOUT_REDO