62 LOG_LSA * rcv_lsa_ptr,
int undo_length,
char *undo_data,
LOG_ZIP * redo_unzip_ptr);
79 LOG_LSA * prev_lsa,
bool is_media_crash, time_t * stop_at,
80 bool * did_incom_recovery);
84 LOG_LSA * check_point,
LOG_LSA * start_redo_lsa,
bool * may_use_checkpoint,
85 bool * may_need_synch_checkpoint_2pc);
97 LOG_LSA * start_lsa,
LOG_LSA * start_redo_lsa,
bool is_media_crash,
98 time_t * stop_at,
bool * did_incom_recovery,
bool * may_use_checkpoint,
99 bool * may_need_synch_checkpoint_2pc);
103 LOG_LSA * end_redo_lsa,
bool ismedia_crash, time_t * stopat,
104 bool * did_incom_recovery, INT64 * num_redo_log_records);
110 const LOG_LSA * postpone_start_lsa);
177 if (thread_p ==
NULL)
236 area = (
char *) malloc (rcv->
length);
296 "log_rv_undo_record: Error applying compensation at log_lsa=(%lld, %d), " 297 "rcv = {mvccid=%llu, offset = %d, data_length = %d}",
298 (
long long int) rcv_undo_lsa->
pageid, (
int) rcv_undo_lsa->
offset,
304 "BTREE_UNDO: Successfully executed undo/compensate for log entry at " 305 "lsa=%lld|%d, before lsa=%lld|%d, undo_nxlsa=%lld|%d. " 306 "Transaction=%d, rcvindex=%d.\n", (
long long int) rcv_undo_lsa->
pageid,
332 "log_rv_undo_record: Error applying compensation at log_lsa=(%lld, %d), " 333 "rcv = {mvccid=%llu, vpid=(%d, %d), offset = %d, data_length = %d}",
334 (
long long int) rcv_undo_lsa->
pageid, (
int) rcv_undo_lsa->
offset,
348 save_state = tdes->
state;
353 #if defined(CUBRID_DEBUG) 359 (void) (*
RV_fun[rcvindex].undofun) (rcv);
378 (void) (*
RV_fun[rcvindex].undofun) (thread_p, rcv);
382 tdes->
state = save_state;
433 int undo_length,
char *undo_data,
LOG_ZIP * redo_unzip_ptr)
460 area = (
char *) malloc (rcv->
length);
475 if ((undo_length > 0) && (undo_data !=
NULL))
495 error_code = (*redofun) (thread_p, rcv);
509 "log_rvredo_rec: Error applying redo record at log_lsa=(%lld, %d), " 510 "rcv = {mvccid=%llu, vpid=(%d, %d), offset = %d, data_length = %d}",
511 (
long long int) rcv_lsa_ptr->
pageid, (
int) rcv_lsa_ptr->
offset,
519 "log_rvredo_rec: WARNING.. There is not a" 520 " REDO function to execute. May produce recovery problems.");
596 ptr = (
char *) log_page_p->
area + log_lsa->
offset;
597 log_lsa->
offset += length;
602 area = (
char *) malloc (length);
614 if (!
log_unzip (undo_unzip_ptr, length, ptr))
626 memcpy (undo_unzip_ptr->
log_data, ptr, length);
656 bool did_incom_recovery;
658 INT64 num_redo_log_records;
667 if (rcv_tdes ==
NULL)
674 rcv_tran_index = tran_index;
688 stopat !=
NULL ? *stopat : -1);
693 if (ismedia_crash !=
false)
730 log_recovery_analysis (thread_p, &rcv_lsa, &start_redolsa, &end_redo_lsa, ismedia_crash, stopat, &did_incom_recovery,
731 &num_redo_log_records);
746 if (did_incom_recovery ==
false)
753 #if !defined(SERVER_MODE) 785 if (did_incom_recovery ==
true)
1010 "log_recovery_analysis: SYSTEM ERROR\n Incorrect state = %s\n at log_rec at %lld|%d\n" 1011 " for transaction = %d (index %d).\n State should have been either of\n %s\n %s\n %s\n",
1353 LOG_LSA * prev_lsa,
bool is_media_crash, time_t * stop_at,
bool * did_incom_recovery)
1357 time_t last_at_time;
1367 if (is_media_crash !=
true)
1372 LSA_COPY (&record_header_lsa, log_lsa);
1382 last_at_time = (time_t) donetime->
at_time;
1383 if (stop_at !=
NULL && *stop_at != (time_t) (-1) && difftime (*stop_at, last_at_time) < 0)
1385 #if !defined(NDEBUG) 1389 (void) ctime_r (&last_at_time, time_val);
1391 record_header_lsa.
pageid, record_header_lsa.
offset, time_val);
1403 *did_incom_recovery =
true;
1458 bool commit_start_postpone =
false;
1478 switch (sysop_end->
type)
1497 commit_start_postpone =
true;
1503 commit_start_postpone =
true;
1554 commit_start_postpone =
true;
1562 if (commit_start_postpone)
1648 if (
LSA_EQ (log_lsa, start_lsa))
1650 *may_use_checkpoint =
true;
1672 LOG_LSA * check_point,
LOG_LSA * start_redo_lsa,
bool * may_use_checkpoint,
1673 bool * may_need_synch_checkpoint_2pc)
1701 if (*may_use_checkpoint ==
false)
1705 *may_use_checkpoint =
false;
1735 area = malloc (size);
1747 for (i = 0; i < chkpt.
ntrans; i++)
1767 chkpt_one = &chkpt_trans[
i];
1794 *may_need_synch_checkpoint_2pc =
true;
1812 if (chkpt.
ntops > 0)
1823 area = malloc (size);
1836 for (i = 0; i < chkpt.
ntops; i++)
1838 chkpt_topone = &chkpt_topops[
i];
2216 LOG_LSA * start_redo_lsa,
bool is_media_crash, time_t * stop_at,
bool * did_incom_recovery,
2217 bool * may_use_checkpoint,
bool * may_need_synch_checkpoint_2pc)
2264 did_incom_recovery);
2277 may_need_synch_checkpoint_2pc);
2331 #if defined(CUBRID_DEBUG) 2333 "log_recovery_analysis: Unknown record type = %d (%s) ... May be a system error\n", log_rtype,
2356 char *fwd_aligned_log_pgbuf;
2359 bool is_log_page_broken =
false;
2364 log_fwd_page_p = (
LOG_PAGE *) fwd_aligned_log_pgbuf;
2381 is_log_page_broken =
true;
2386 return is_log_page_broken;
2414 bool is_media_crash, time_t * stop_at,
bool * did_incom_recovery, INT64 * num_redo_log_records)
2416 LOG_LSA checkpoint_lsa = { -1, -1 };
2423 LOG_LSA first_corrupted_rec_lsa;
2429 time_t last_at_time = -1;
2431 bool may_need_synch_checkpoint_2pc =
false, may_use_checkpoint =
false, is_log_page_corrupted =
false;
2437 const int block_size = 4 *
ONE_K;
2438 int start_record_block, end_record_block;
2442 bool is_log_page_broken;
2448 if (num_redo_log_records !=
NULL)
2450 *num_redo_log_records = 0;
2464 *did_incom_recovery =
false;
2466 log_page_p = (
LOG_PAGE *) aligned_log_pgbuf;
2468 is_log_page_broken =
false;
2478 is_log_page_broken =
true;
2481 if (is_log_page_broken)
2483 if (is_media_crash ==
true)
2485 if (stop_at !=
NULL)
2487 *stop_at = last_at_time;
2490 #if !defined(NDEBUG) 2494 (void) ctime_r (&last_at_time, time_val);
2497 end_redo_lsa->
pageid, end_redo_lsa->
offset, ((last_at_time == -1) ?
"???...\n" : time_val));
2504 if (log_rec !=
NULL)
2507 if (last_log_tdes !=
NULL)
2522 *did_incom_recovery =
true;
2533 "log_recovery_analysis: log page %lld has been encrypted (TDE) and cannot be decrypted",
2571 if (last_checked_page_id != log_lsa.
pageid)
2573 #if !defined(NDEBUG) 2589 if (is_log_page_corrupted)
2605 "logpb_recovery_analysis: log page %lld is corrupted due to partial flush.\n",
2606 (
long long int) log_lsa.
pageid);
2611 last_checked_page_id = log_lsa.
pageid;
2618 if (is_media_crash ==
true)
2622 if (is_log_page_broken)
2626 LSA_COPY (&prev_lsa, end_redo_lsa);
2627 prev_prev_lsa = prev_lsa;
2635 if (!is_log_page_corrupted)
2643 is_log_page_corrupted =
true;
2646 "log_recovery_analysis: ** WARNING: An end of the log record was not found." 2647 "Latest log record at lsa = %lld|%d, first_corrupted_lsa = %lld|%d\n",
2649 first_corrupted_rec_lsa.
offset);
2661 start_record_block = ((int) log_lsa.
offset + sizeof (
LOG_HDRPAGE)) / block_size;
2662 assert (start_record_block >= 0 && start_record_block < max_num_blocks);
2663 end_record_block = ((int) temp_log_lsa.
offset + sizeof (
LOG_HDRPAGE)) / block_size;
2664 assert (end_record_block >= 0 && end_record_block < max_num_blocks);
2666 if (start_record_block != end_record_block)
2668 assert (start_record_block < end_record_block);
2669 if (memcmp (((
char *) log_page_p) + (end_record_block * block_size), null_block, block_size) == 0)
2672 LSA_COPY (&first_corrupted_rec_lsa, &log_lsa);
2673 is_log_page_corrupted =
true;
2676 "log_recovery_analysis: ** WARNING: An end of the log record was not found." 2677 "Latest log record at lsa = %lld|%d, first_corrupted_lsa = %lld|%d\n",
2679 first_corrupted_rec_lsa.
offset);
2685 if (is_log_page_corrupted && !
LSA_ISNULL (&first_corrupted_rec_lsa))
2690 if (
LSA_GT (&log_lsa, &first_corrupted_rec_lsa))
2699 bool is_log_lsa_corrupted =
false;
2701 if (
LSA_EQ (&log_lsa, &first_corrupted_rec_lsa)
2705 is_log_lsa_corrupted =
true;
2710 LSA_COPY (&temp_log_lsa, &log_lsa);
2715 || (
LSA_GT (&temp_log_lsa, &first_corrupted_rec_lsa)))
2717 is_log_lsa_corrupted =
true;
2721 if (is_log_lsa_corrupted)
2726 "logpb_recovery_analysis: Partial page flush - first corrupted log record LSA = (%lld, %d)\n",
2736 tran_id = log_rec->
trid;
2737 log_rtype = log_rec->
type;
2773 "log_recovery_analysis: ** System error: It seems to be a loop in the log\n." 2774 " Current log_rec at %lld|%d. Next log_rec at %lld|%d\n", (
long long int) log_lsa.
pageid,
2803 "log_recovery_analysis: ** WARNING: An end of the log record was not found." 2809 if (num_redo_log_records)
2826 (*num_redo_log_records)++;
2834 start_lsa, start_redo_lsa, is_media_crash, stop_at, did_incom_recovery,
2835 &may_use_checkpoint, &may_need_synch_checkpoint_2pc);
2836 if (*did_incom_recovery ==
true)
2841 if (
LSA_EQ (end_redo_lsa, &lsa))
2859 LSA_COPY (&prev_lsa, end_redo_lsa);
2860 prev_prev_lsa = prev_lsa;
2873 if (may_need_synch_checkpoint_2pc ==
true)
2884 log_page_p = (
LOG_PAGE *) aligned_log_pgbuf;
2916 area = malloc (size);
2928 for (i = 0; i < chkpt.
ntrans; i++)
3004 "analysis_last_aborted_sysop_lsa = %lld|%d, analysis_last_aborted_sysop_start_lsa = %lld|%d\n",
3071 int particp_id_length;
3072 void *block_particps_ids;
3078 int data_header_size = 0;
3083 bool is_mvcc_op =
false;
3106 log_pgptr = (
LOG_PAGE *) aligned_log_pgbuf;
3111 if (undo_unzip_ptr ==
NULL || redo_unzip_ptr ==
NULL)
3181 tran_id = log_rec->
trid;
3182 log_rtype = log_rec->
type;
3209 "log_recovery_redo: ** System error: It seems to be a loop in the log\n." 3210 " Current log_rec at %lld|%d. Next log_rec at %lld|%d\n", (
long long int) log_lsa.
pageid,
3230 is_diff_rec =
false;
3257 undoredo = &mvcc_undoredo->
undoredo;
3260 mvccid = mvcc_undoredo->
mvccid;
3317 if (
LSA_LE (&rcv_lsa, rcv_page_lsaptr))
3326 rcv_page_lsaptr =
NULL;
3329 temp_length = undoredo->
ulength;
3352 log_lsa.
offset += temp_length;
3356 while (temp_length > 0)
3379 log_lsa.
offset += temp_length;
3388 #if !defined(NDEBUG) 3392 "TRACE REDOING[1]: LSA = %lld|%d, Rv_index = %s,\n" 3393 " volid = %d, pageid = %d, offset = %d,\n",
LSA_AS_ARGS (&rcv_lsa),
3395 if (rcv_page_lsaptr !=
NULL)
3397 fprintf (stdout,
" page_lsa = %lld|%d\n",
LSA_AS_ARGS (rcv_page_lsaptr));
3401 fprintf (stdout,
" page_lsa = %d|%d\n", -1, -1);
3442 redo = &mvcc_redo->
redo;
3445 mvccid = mvcc_redo->
mvccid;
3502 if (
LSA_LE (&rcv_lsa, rcv_page_lsaptr))
3512 rcv_page_lsaptr =
NULL;
3521 #if !defined(NDEBUG) 3525 "TRACE REDOING[2]: LSA = %lld|%d, Rv_index = %s,\n" 3526 " volid = %d, pageid = %d, offset = %d,\n",
LSA_AS_ARGS (&rcv_lsa),
3528 if (rcv_page_lsaptr !=
NULL)
3530 fprintf (stdout,
" page_lsa = %lld|%d\n",
LSA_AS_ARGS (rcv_page_lsaptr));
3534 fprintf (stdout,
" page_lsa = %lld|%d\n", -1LL, -1);
3568 #if !defined(NDEBUG) 3571 fprintf (stdout,
"TRACE EXT REDOING[3]: LSA = %lld|%d, Rv_index = %s\n",
LSA_AS_ARGS (&rcv_lsa),
3624 if (
LSA_LE (&rcv_lsa, rcv_page_lsaptr))
3634 rcv_page_lsaptr =
NULL;
3644 #if !defined(NDEBUG) 3648 "TRACE REDOING[4]: LSA = %lld|%d, Rv_index = %s,\n" 3649 " volid = %d, pageid = %d, offset = %d,\n",
LSA_AS_ARGS (&rcv_lsa),
3651 if (rcv_page_lsaptr !=
NULL)
3653 fprintf (stdout,
" page_lsa = %lld|%d\n",
LSA_AS_ARGS (rcv_page_lsaptr));
3657 fprintf (stdout,
" page_lsa = %lld|%d\n", -1LL, -1);
3711 if (
LSA_LE (&rcv_lsa, rcv_page_lsaptr))
3721 rcv_page_lsaptr =
NULL;
3730 #if !defined(NDEBUG) 3734 "TRACE REDOING[5]: LSA = %lld|%d, Rv_index = %s,\n" 3735 " volid = %d, pageid = %d, offset = %d,\n",
LSA_AS_ARGS (&rcv_lsa),
3737 if (rcv_page_lsaptr !=
NULL)
3739 fprintf (stdout,
" page_lsa = %lld|%d\n",
LSA_AS_ARGS (rcv_page_lsaptr));
3743 fprintf (stdout,
" page_lsa = %lld|%d\n", -1LL, -1);
3758 "BTREE_REDO: Successfully applied compensate lsa=%lld|%d, undo_nxlsa=%lld|%d.\n",
3825 block_particps_ids = malloc (particp_id_length * num_particps);
3826 if (block_particps_ids ==
NULL)
3838 logpb_copy_from_log (thread_p, (
char *) block_particps_ids, particp_id_length * num_particps,
3839 &log_lsa, log_pgptr);
3882 #if defined(CUBRID_DEBUG) 3886 "log_recovery_redo: SYSTEM ERROR There is likely an error in the recovery" 3887 " analysis phase since coordinator information" 3888 " has not been allocated for transaction = %d with state = %s", tdes->
trid,
3911 bool free_tran =
false;
3921 if (stopat !=
NULL && *stopat != -1)
3931 if (difftime (*stopat, (time_t) donetime->
at_time) < 0)
3950 if (free_tran ==
true)
3966 mvccid = mvcc_undo->
mvccid;
4019 #if defined(CUBRID_DEBUG) 4021 "log_recovery_redo: Unknown record type = %d (%s)... May be a system error", log_rtype,
4025 if (
LSA_EQ (&lsa, &log_lsa))
4105 for (iter_lsa = tdes->
undo_nxlsa;
LSA_GT (&iter_lsa, postpone_start_lsa); iter_lsa = prev_lsa)
4118 last_parent_lsa = iter_lsa;
4135 last_parent_lsa = iter_lsa;
4159 last_parent_lsa = *postpone_start_lsa;
4180 LOG_LSA first_postpone_to_apply;
4189 int undo_buffer_size = 0, undo_data_size = 0;
4190 char *undo_buffer =
NULL, *undo_data =
NULL;
4214 &undo_buffer_size, &undo_buffer, &undo_data_size, &undo_data) !=
NO_ERROR)
4225 if (undo_buffer !=
NULL)
4290 LOG_LSA first_postpone_to_apply;
4305 assert (tdes->is_active_worker_transaction ());
4367 auto finish_sys_postpone = [&] (
LOG_TDES & tdes)
4381 finish_sys_postpone (*tdes_it);
4403 auto abort_atomic_func = [&] (
LOG_TDES & tdes)
4416 abort_atomic_func (*tdes_it);
4436 LOG_LSA prev_atomic_sysop_start_lsa;
4475 "(trid = %d) Nested sysop start pospone (%lld|%d) inside atomic sysop (%lld|%d). \n", tdes->
trid,
4490 "(trid = %d) Nested atomic sysop (%lld|%d) after sysop start postpone (%lld|%d). \n", tdes->
trid,
4501 log_pgptr = (
LOG_PAGE *) aligned_log_pgbuf;
4552 int data_header_size = 0;
4577 auto delete_func = [] (
const LOG_TDES & tdes)
4591 log_pgptr = (
LOG_PAGE *) aligned_log_pgbuf;
4594 if (undo_unzip_ptr ==
NULL)
4603 LSA_COPY (&log_lsa, &max_undo_lsa);
4619 tran_id = log_rec->
trid;
4620 log_rtype = log_rec->
type;
4640 #if defined(CUBRID_DEBUG) 4652 #if defined(CUBRID_DEBUG) 4696 undoredo = &mvcc_undoredo->
undoredo;
4718 #if !defined(NDEBUG) 4722 "TRACE UNDOING[1]: LSA = %lld|%d, Rv_index = %s,\n" 4723 " volid = %d, pageid = %d, offset = %d,\n", (
long long int) rcv_lsa.
pageid,
4730 log_rv_undo_record (thread_p, &log_lsa, log_pgptr, rcvindex, &rcv_vpid, &rcv, &rcv_lsa, tdes,
4755 undo = &mvcc_undo->
undo;
4777 #if !defined(NDEBUG) 4781 "TRACE UNDOING[2]: LSA = %lld|%d, Rv_index = %s,\n" 4782 " volid = %d, pageid = %d, offset = %hd,\n",
LSA_AS_ARGS (&rcv_lsa),
4787 log_rv_undo_record (thread_p, &log_lsa, log_pgptr, rcvindex, &rcv_vpid, &rcv, &rcv_lsa, tdes,
4844 log_rv_undo_record (thread_p, &log_lsa, log_pgptr, rcvindex, &rcv_vpid, &rcv, &rcv_lsa, tdes,
4861 log_rv_undo_record (thread_p, &log_lsa, log_pgptr, rcvindex, &rcv_vpid, &rcv, &rcv_lsa, tdes,
4897 #if defined(CUBRID_DEBUG) 4899 "log_recovery_undo: SYSTEM ERROR for log located at %lld|%d," 4900 " Bad log_rectype = %d\n (%s).\n", (
long long int) log_lsa.
pageid, log_lsa.
offset,
4926 #if defined(CUBRID_DEBUG) 4928 "log_recovery_undo: Unknown record type = %d (%s)\n ... May be a system error",
5019 char logarv_name[PATH_MAX];
5020 char logarv_name_first[PATH_MAX];
5043 for (i = start_arv_num; i <= INT_MAX; i++)
5048 if (i > start_arv_num)
5058 if (info_reason !=
NULL)
5063 if (start_arv_num != i)
5065 if (start_arv_num == i - 1)
5070 catmsg =
"REMOVE: %d %s to \n%d %s.\nREASON: %s\n";
5087 catmsg =
"REMOVE: %d %s to \n%d %s.\nREASON: %s\n";
5124 if (volid !=
NULL_VOLID && volid >= *start_volid)
5154 const char *ext_path;
5155 const char *ext_name;
5159 char vol_fullname[PATH_MAX];
5160 INT64 vol_dbcreation;
5161 char *alloc_extpath =
NULL;
5186 alloc_extpath = (
char *) malloc (PATH_MAX);
5187 if (alloc_extpath !=
NULL)
5190 if (ext_path ==
NULL)
5192 alloc_extpath[0] =
'\0';
5193 ext_path = alloc_extpath;
5244 char *aligned_newappend_pgbuf;
5282 newappend_pgptr = (
LOG_PAGE *) aligned_newappend_pgbuf;
5286 newappend_pgptr =
NULL;
5311 arv_num = arv_num + 1;
5314 catmsg_dup =
strdup (catmsg);
5315 if (catmsg_dup !=
NULL)
5369 if (append_pgptr ==
NULL)
5457 unsigned int nobj_locks;
5458 int repl_log_length;
5468 log_pgptr = (
LOG_PAGE *) aligned_log_pgbuf;
5472 fprintf (stdout,
" Error reading page %lld... Quit\n", (
long long int) lsa->
pageid);
5492 type = log_rec->
type;
5494 if (canuse_forwaddr ==
true)
5591 redo_length = run_posp->
length;
5601 redo_length = dbout_redo->
length;
5611 redo_length = compensate->
length;
5684 if (redo_length > 0)
5694 undo_length = savept->
length;
5807 LOG_LSA local_start_postpone_run_lsa;
5811 char *aligned_log_pgbuf;
5819 int nxtop_count = 0;
5820 bool start_postpone_lsa_wasapplied =
false;
5822 assert (ret_lsa && start_postpone_lsa && tdes);
5842 log_pgptr = (
LOG_PAGE *) aligned_log_pgbuf;
5845 LSA_COPY (&next_start_seek_lsa, start_postpone_lsa);
5847 nxtop_stack = nxtop_array;
5852 LSA_COPY (&start_seek_lsa, &next_start_seek_lsa);
5854 if (nxtop_count > 0)
5857 nxtop_range = &(nxtop_stack[nxtop_count]);
5861 end_seek_lsa = &(nxtop_range->
start_lsa);
5866 end_seek_lsa = &end_postpone_lsa;
5877 end_seek_lsa = &end_postpone_lsa;
5885 LSA_COPY (&forward_lsa, &start_seek_lsa);
5888 while (!
LSA_ISNULL (&forward_lsa) && !isdone)
5898 while (forward_lsa.
pageid == log_lsa.
pageid && !isdone)
5900 if (
LSA_GT (&forward_lsa, end_seek_lsa))
5943 switch (log_rec->
type)
5946 LSA_COPY (&local_start_postpone_run_lsa, &log_lsa);
5958 start_postpone_lsa_wasapplied =
true;
5973 LSA_COPY (&local_start_postpone_run_lsa, &log_lsa);
5977 start_postpone_lsa_wasapplied =
true;
5985 if (
LSA_ISNULL (&next_postpone_lsa) && !
LSA_EQ (start_postpone_lsa, &log_lsa))
5988 LSA_COPY (&next_postpone_lsa, &log_lsa);
6019 if (nxtop_stack != nxtop_array && nxtop_stack !=
NULL)
6024 if (start_postpone_lsa_wasapplied ==
false)
6026 LSA_COPY (ret_lsa, start_postpone_lsa);
6030 LSA_COPY (ret_lsa, &next_postpone_lsa);
6058 char *new_data =
NULL;
6074 offset_to_data = (int)
or_get_short (rcv_buf, &error_code);
6082 old_data_size = (int)
or_get_byte (rcv_buf, &error_code);
6090 new_data_size = (int)
or_get_byte (rcv_buf, &error_code);
6097 if (new_data_size > 0)
6100 new_data = rcv_buf->
ptr;
6101 error_code =
or_advance (rcv_buf, new_data_size);
6155 assert (rcv_data_length > 0);
6226 ptr = (
char *) rcv->
data;
6252 ptr = (
char *) rcv->
data;
6318 assert (offset_to_data >= 0 && offset_to_data <= 0x8FFF);
6319 assert (old_data_size >= 0 && new_data_size >= 0);
6320 assert (old_data_size <= 255 && new_data_size <= 255);
6321 assert (new_data_size == 0 || new_data !=
NULL);
6334 if (new_data_size > 0)
6336 memcpy (ptr, new_data, new_data_size);
6337 ptr += new_data_size;
6360 assert (offset_to_data >= 0 && offset_to_data <= 0x8FFF);
6361 assert (old_data_size >= 0 && new_data_size >= 0);
6362 assert (old_data_size <= 255 && new_data_size <= 255);
6363 assert (old_data_size == 0 || old_data !=
NULL);
6376 if (old_data_size > 0)
6378 memcpy (ptr, old_data, old_data_size);
6379 ptr += old_data_size;
6478 if (tdes->is_active_worker_transaction ())
6481 #if defined (SA_MODE) 6485 else if (tdes->is_system_worker_transaction ())
6499 thread_p->reset_system_tdes ();
6501 #if defined (SA_MODE) #define LOG_READ_ADD_ALIGN(thread_p, add, lsa, log_pgptr)
unsigned int num_object_locks
int num_coord_loose_end_indices
void fileio_make_volume_ext_name(char *vol_ext_full_name_p, const char *ext_path_p, const char *ext_name_p, VOLID vol_id)
static void rv_delete_all_tdes_if(const rv_delete_if_func &func)
struct log_rec_header LOG_RECORD_HEADER
void log_2pc_recovery_analysis_info(THREAD_ENTRY *thread_p, log_tdes *tdes, LOG_LSA *upto_chain_lsa)
cubthread::entry * thread_get_thread_entry_info(void)
void reset_start_mvccid()
int logtb_find_tran_index(THREAD_ENTRY *thread_p, TRANID trid)
static bool log_rv_find_checkpoint(THREAD_ENTRY *thread_p, VOLID volid, LOG_LSA *rcv_lsa)
#define ER_LOG_MAYNEED_MEDIA_RECOVERY
const char * log_Db_fullname
void logtb_rv_assign_mvccid_for_undo_recovery(THREAD_ENTRY *thread_p, MVCCID mvccid)
void log_recovery(THREAD_ENTRY *thread_p, int ismedia_crash, time_t *stopat)
char user_name[DB_MAX_USER_LENGTH+1]
const char * rv_rcvindex_string(LOG_RCVINDEX rcvindex)
void logpb_fatal_error(THREAD_ENTRY *thread_p, bool logexit, const char *file_name, const int lineno, const char *fmt,...)
bool LSA_EQ(const log_lsa *plsa1, const log_lsa *plsa2)
static int log_rv_record_modify_internal(THREAD_ENTRY *thread_p, LOG_RCV *rcv, bool is_undo)
int(* undofun)(THREAD_ENTRY *thread_p, LOG_RCV *logrcv)
void set_system_internal_with_user(const char *db_user)
void LSA_COPY(log_lsa *plsa1, const log_lsa *plsa2)
void log_sysop_end_logical_compensate(THREAD_ENTRY *thread_p, LOG_LSA *undo_nxlsa)
int heap_classrepr_restart_cache(void)
int boot_reset_db_parm(THREAD_ENTRY *thread_p)
#define ER_LOG_PAGE_CORRUPTED
LOG_LSA * log_startof_nxrec(THREAD_ENTRY *thread_p, LOG_LSA *lsa, bool canuse_forwaddr)
LOG_2PC_COORDINATOR * coord
LOG_LSA sysop_start_postpone_lsa
#define GET_ZIP_LEN(length)
int logpb_fetch_page(THREAD_ENTRY *thread_p, const LOG_LSA *req_lsa, LOG_CS_ACCESS_MODE access_mode, LOG_PAGE *log_pgptr)
const int LOG_SYSTEM_TRAN_INDEX
#define RCV_IS_LOGICAL_LOG(vpid, idx)
void logpb_vacuum_reset_log_header_cache(THREAD_ENTRY *thread_p, LOG_HEADER *loghdr)
int logpb_flush_page(THREAD_ENTRY *thread_p, LOG_PAGE *log_pgptr)
void fileio_unformat(THREAD_ENTRY *thread_p, const char *vol_label_p)
#define pgbuf_unfix(thread_p, pgptr)
#define ER_LOG_CORRUPTED_DB_DUE_CRASH_NOLOGGING
#define OR_BUF_INIT(buf, data, size)
#define LOG_GET_LOG_RECORD_HEADER(log_page_p, lsa)
static int log_rv_analysis_save_point(THREAD_ENTRY *thread_p, int tran_id, LOG_LSA *log_lsa)
static void log_recovery_finish_all_postpone(THREAD_ENTRY *thread_p)
bool logtb_is_system_worker_tranid(TRANID trid)
const log_rv_record_flag_type LOG_RV_RECORD_MODIFY_MASK
void logtb_clear_tdes(THREAD_ENTRY *thread_p, LOG_TDES *tdes)
struct log_rec_mvcc_redo LOG_REC_MVCC_REDO
static int log_rv_analysis_sysop_end(THREAD_ENTRY *thread_p, int tran_id, LOG_LSA *log_lsa, LOG_PAGE *log_page_p)
#define assert_release(e)
static int log_rv_undoredo_partial_changes_recursive(THREAD_ENTRY *thread_p, OR_BUF *rcv_buf, RECDES *record, bool is_undo)
void pgbuf_set_dirty(THREAD_ENTRY *thread_p, PAGE_PTR pgptr, bool free_page)
static int log_rv_analysis_postpone(THREAD_ENTRY *thread_p, int tran_id, LOG_LSA *log_lsa)
void LOG_CS_ENTER(THREAD_ENTRY *thread_p)
LOG_LSA analysis_last_aborted_sysop_lsa
char user_name[LOG_USERNAME_MAX]
char log_Name_active[PATH_MAX]
void log_sysop_start(THREAD_ENTRY *thread_p)
const VOLID LOG_DBLOG_ACTIVE_VOLID
const int LOG_2PC_NULL_GTRID
static void log_recovery_finish_sysop_postpone(THREAD_ENTRY *thread_p, LOG_TDES *tdes)
static void log_rv_simulate_runtime_worker(THREAD_ENTRY *thread_p, LOG_TDES *tdes)
int logpb_write_page_to_disk(THREAD_ENTRY *thread_p, LOG_PAGE *log_pgptr, LOG_PAGEID logical_pageid)
GLOBAL_UNIQUE_STATS_TABLE unique_stats_table
bool LOG_RV_RECORD_IS_INSERT(log_rv_record_flag_type flags)
#define ER_LOG_MOUNT_FAIL
LOG_PAGE * logpb_create_page(THREAD_ENTRY *thread_p, LOG_PAGEID pageid)
static int log_rv_analysis_compensate(THREAD_ENTRY *thread_p, int tran_id, LOG_LSA *log_lsa, LOG_PAGE *log_page_p)
int log_rv_undo_record_modify(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
bool fileio_is_volume_exist(const char *vol_label_p)
LOG_TDES * LOG_FIND_TDES(int tran_index)
LOG_LSA atomic_sysop_start_lsa
const VOLID LOG_MAX_DBVOLID
static int log_rv_analysis_2pc_abort_decision(THREAD_ENTRY *thread_p, int tran_id, LOG_LSA *log_lsa)
#define LSA_AS_ARGS(lsa_ptr)
#define LOG_TOPOP_STACK_INIT_SIZE
LOG_ZIP_SIZE_T data_length
LOG_PHY_PAGEID logpb_to_physical_pageid(LOG_PAGEID logical_pageid)
void logpb_page_get_first_null_block_lsa(THREAD_ENTRY *thread_p, LOG_PAGE *log_pgptr, LOG_LSA *first_null_block_lsa)
const char * log_state_string(TRAN_STATE state)
#define PTR_ALIGN(addr, boundary)
int logpb_get_archive_number(THREAD_ENTRY *thread_p, LOG_PAGEID pageid)
bool LSA_LT(const log_lsa *plsa1, const log_lsa *plsa2)
#define er_log_debug(...)
#define LOG_PAGE_INIT_VALUE
LOG_ZIP * log_zip_alloc(LOG_ZIP_SIZE_T size)
struct lk_acqobj_lock LK_ACQOBJ_LOCK
static int log_rv_analysis_2pc_commit_decision(THREAD_ENTRY *thread_p, int tran_id, LOG_LSA *log_lsa)
static int log_rv_analysis_dummy_head_postpone(THREAD_ENTRY *thread_p, int tran_id, LOG_LSA *log_lsa)
char * log_rv_pack_undo_record_changes(char *ptr, int offset_to_data, int old_data_size, int new_data_size, char *old_data)
int log_rv_undoredo_record_partial_changes(THREAD_ENTRY *thread_p, char *rcv_data, int rcv_data_length, RECDES *record, bool is_undo)
char * fileio_get_directory_path(char *path_p, const char *full_name_p)
#define pgbuf_invalidate_all(thread_p, volid)
void logpb_flush_header(THREAD_ENTRY *thread_p)
void _er_log_debug(const char *file_name, const int line_no, const char *fmt,...)
static int log_rv_analysis_sysop_start_postpone(THREAD_ENTRY *thread_p, int tran_id, LOG_LSA *log_lsa, LOG_PAGE *log_page_p)
void logpb_set_dirty(THREAD_ENTRY *thread_p, LOG_PAGE *log_pgptr)
SCAN_CODE spage_get_record(THREAD_ENTRY *thread_p, PAGE_PTR page_p, PGSLOTID slot_id, RECDES *record_descriptor_p, int is_peeking)
int fileio_mount(THREAD_ENTRY *thread_p, const char *db_full_name_p, const char *vol_label_p, VOLID vol_id, int lock_wait, bool is_do_sync)
static int log_rv_analysis_run_postpone(THREAD_ENTRY *thread_p, int tran_id, LOG_LSA *log_lsa, LOG_PAGE *log_page_p, LOG_LSA *check_point)
static bool log_unformat_ahead_volumes(THREAD_ENTRY *thread_p, VOLID volid, VOLID *start_volid)
LOG_LSA tail_topresult_lsa
struct log_rec_mvcc_undo LOG_REC_MVCC_UNDO
const bool LOG_2PC_OBTAIN_LOCKS
void log_do_postpone(THREAD_ENTRY *thread_p, LOG_TDES *tdes, LOG_LSA *start_postpone_lsa)
LOG_LSA tail_topresult_lsa
const char * log_to_string(LOG_RECTYPE type)
#define MSGCAT_LOG_INCOMPLTE_MEDIA_RECOVERY
int er_get_severity(void)
int spage_update(THREAD_ENTRY *thread_p, PAGE_PTR page_p, PGSLOTID slot_id, const RECDES *record_descriptor_p)
static void log_recovery_abort_all_atomic_sysops(THREAD_ENTRY *thread_p)
void LOG_RESET_PREV_LSA(const LOG_LSA *lsa)
int locator_initialize(THREAD_ENTRY *thread_p)
void er_set(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
static void log_recovery_undo(THREAD_ENTRY *thread_p)
void logpb_flush_pages_direct(THREAD_ENTRY *thread_p)
int log_read_sysop_start_postpone(THREAD_ENTRY *thread_p, LOG_LSA *log_lsa, LOG_PAGE *log_page, bool with_undo_data, LOG_REC_SYSOP_START_POSTPONE *sysop_start_postpone, int *undo_buffer_size, char **undo_buffer, int *undo_size, char **undo_data)
static int log_rv_analysis_2pc_abort_inform_particps(THREAD_ENTRY *thread_p, int tran_id, LOG_LSA *log_lsa)
char * fileio_get_volume_label(VOLID vol_id, bool is_peek)
LOG_REC_SYSOP_END sysop_end
const char * fileio_get_base_file_name(const char *full_name_p)
const VOLID LOG_DBFIRST_VOLID
char log_Name_info[PATH_MAX]
int logpb_fetch_start_append_page(THREAD_ENTRY *thread_p)
LOG_LSA * pgbuf_get_lsa(PAGE_PTR pgptr)
int or_get_short(OR_BUF *buf, int *error)
static int log_rv_analysis_atomic_sysop_start(THREAD_ENTRY *thread_p, int tran_id, LOG_LSA *log_lsa)
void * logtb_realloc_topops_stack(LOG_TDES *tdes, int num_elms)
#define ER_OUT_OF_VIRTUAL_MEMORY
void LOG_CS_EXIT(THREAD_ENTRY *thread_p)
#define LOG_HAS_LOGGING_BEEN_IGNORED()
void LOG_RESET_APPEND_LSA(const LOG_LSA *lsa)
static int log_rv_analysis_will_commit(THREAD_ENTRY *thread_p, int tran_id, LOG_LSA *log_lsa)
int logpb_recreate_volume_info(THREAD_ENTRY *thread_p)
bool LSA_LE(const log_lsa *plsa1, const log_lsa *plsa2)
LOG_LSA final_restored_lsa
void logpb_invalid_all_append_pages(THREAD_ENTRY *thread_p)
void log_sysop_end_recovery_postpone(THREAD_ENTRY *thread_p, LOG_REC_SYSOP_END *log_record, int data_size, const char *data)
static int log_rv_analysis_2pc_prepare(THREAD_ENTRY *thread_p, int tran_id, LOG_LSA *log_lsa)
LOG_PAGEID logical_pageid
void logpb_decache_archive_info(THREAD_ENTRY *thread_p)
char log_Prefix[PATH_MAX]
enum log_rectype LOG_RECTYPE
bool LOG_RV_RECORD_IS_UPDATE_ALL(log_rv_record_flag_type flags)
LOG_REC_MVCC_UNDO mvcc_undo
int or_overflow(OR_BUF *buf)
bool LOG_RV_RECORD_IS_UPDATE_PARTIAL(log_rv_record_flag_type flags)
int or_align(OR_BUF *buf, int alignment)
void log_append_compensate(THREAD_ENTRY *thread_p, LOG_RCVINDEX rcvindex, const VPID *vpid, PGLENGTH offset, PAGE_PTR pgptr, int length, const void *data, LOG_TDES *tdes)
void log_2pc_read_prepare(THREAD_ENTRY *thread_p, int acquire_locks, log_tdes *tdes, LOG_LSA *log_lsa, LOG_PAGE *log_page_p)
int num_prepared_loose_end_indices
static int log_rv_analysis_log_end(int tran_id, LOG_LSA *log_lsa)
static void log_recovery_resetlog(THREAD_ENTRY *thread_p, const LOG_LSA *new_append_lsa, const LOG_LSA *new_prev_lsa)
void fileio_dismount(THREAD_ENTRY *thread_p, int vol_fd)
LOG_PAGE * logpb_create_header_page(THREAD_ENTRY *thread_p)
static int log_recovery_find_first_postpone(THREAD_ENTRY *thread_p, LOG_LSA *ret_lsa, LOG_LSA *start_postpone_lsa, LOG_TDES *tdes)
int fileio_synchronize_all(THREAD_ENTRY *thread_p, bool is_include)
static void log_rv_undo_record(THREAD_ENTRY *thread_p, LOG_LSA *log_lsa, LOG_PAGE *log_page_p, LOG_RCVINDEX rcvindex, const VPID *rcv_vpid, LOG_RCV *rcv, const LOG_LSA *rcv_lsa_ptr, LOG_TDES *tdes, LOG_ZIP *undo_unzip_ptr)
static bool log_is_page_of_record_broken(THREAD_ENTRY *thread_p, const LOG_LSA *log_lsa, const LOG_RECORD_HEADER *log_rec_header)
struct log_rec_redo LOG_REC_REDO
int log_rv_redo_record_modify(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
void vacuum_notify_server_crashed(LOG_LSA *recovery_lsa)
#define ER_LOG_RECOVERY_FINISHED
static void rv_simulate_system_tdes(TRANID trid)
#define LOG_SYSOP_END_TYPE_CHECK(type)
bool log_is_in_crash_recovery(void)
struct log_rec_mvcc_undoredo LOG_REC_MVCC_UNDOREDO
bool LSA_ISNULL(const log_lsa *lsa_ptr)
struct log_info_chkpt_trans LOG_INFO_CHKPT_TRANS
int log_get_num_pages_for_creation(int db_npages)
#define pgbuf_fix(thread_p, vpid, fetch_mode, requestmode, condition)
#define MVCC_ID_PRECEDES(id1, id2)
LOG_LSA start_postpone_lsa
DISK_ISVALID disk_is_page_sector_reserved(THREAD_ENTRY *thread_p, VOLID volid, PAGEID pageid)
#define db_private_free(thrd, ptr)
LOG_LSA analysis_last_aborted_sysop_start_lsa
#define LOG_IS_MVCC_OPERATION(rcvindex)
int disk_get_checkpoint(THREAD_ENTRY *thread_p, INT16 volid, LOG_LSA *vol_lsa)
#define RECORD_REPLACE_DATA(record, offset_to_data, old_data_size, new_data_size, new_data)
struct log_rec_undoredo LOG_REC_UNDOREDO
#define OR_PUT_SHORT(ptr, val)
#define LOG_SET_CURRENT_TRAN_INDEX(thrd, index)
int pgbuf_flush_all(THREAD_ENTRY *thread_p, VOLID volid)
void log_find_unilaterally_largest_undo_lsa(THREAD_ENTRY *thread_p, LOG_LSA &max_undo_lsa)
#define ER_LOG_UNKNOWN_TRANINDEX
log_tdes * log_2pc_alloc_coord_info(log_tdes *tdes, int num_particps, int particp_id_length, void *block_particps_ids)
#define MSGCAT_CATALOG_CUBRID
static int log_rv_analysis_undo_redo(THREAD_ENTRY *thread_p, int tran_id, LOG_LSA *log_lsa)
void log_2pc_recovery(THREAD_ENTRY *thread_p)
void pgbuf_get_vpid(PAGE_PTR pgptr, VPID *vpid)
static void log_recovery_abort_atomic_sysop(THREAD_ENTRY *thread_p, LOG_TDES *tdes)
LOG_REC_UNDOREDO undoredo
const LOG_LSA * pgbuf_set_lsa(THREAD_ENTRY *thread_p, PAGE_PTR pgptr, const LOG_LSA *lsa_ptr)
void log_sysop_abort(THREAD_ENTRY *thread_p)
#define ER_LOG_MISSING_COMPENSATING_RECORD
bool LSA_GE(const log_lsa *plsa1, const log_lsa *plsa2)
void fileio_make_log_archive_name(char *log_archive_name_p, const char *log_path_p, const char *db_name_p, int archive_number)
static void rv_delete_tdes(TRANID trid)
#define MSGCAT_LOG_LOGINFO_REMOVE_REASON
#define RCV_IS_BTREE_LOGICAL_LOG(idx)
bool LOG_CS_OWN_WRITE_MODE(THREAD_ENTRY *thread_p)
static void error(const char *msg)
static bool log_rv_get_unzip_log_data(THREAD_ENTRY *thread_p, int length, LOG_LSA *log_lsa, LOG_PAGE *log_page_p, LOG_ZIP *undo_unzip_ptr)
#define VPID_ISNULL(vpid_ptr)
static void log_recovery_abort_interrupted_sysop(THREAD_ENTRY *thread_p, LOG_TDES *tdes, const LOG_LSA *postpone_start_lsa)
PGSLOTID spage_delete(THREAD_ENTRY *thread_p, PAGE_PTR page_p, PGSLOTID slot_id)
struct log_info_chkpt_sysop LOG_INFO_CHKPT_SYSOP
void logtb_free_tran_index(THREAD_ENTRY *thread_p, int tran_index)
#define pgbuf_fix_if_not_deallocated(thread_p, vpid, latch_mode, latch_condition, page)
static log_tdes * rv_get_tdes(TRANID trid)
#define LOG_FIND_THREAD_TRAN_INDEX(thrd)
#define LOG_READ_ALIGN(thread_p, lsa, log_pgptr)
int logpb_page_check_corruption(THREAD_ENTRY *thread_p, LOG_PAGE *log_pgptr, bool *is_page_corrupted)
STATIC_INLINE PAGE_PTR log_rv_redo_fix_page(THREAD_ENTRY *thread_p, const VPID *vpid_rcv, LOG_RCVINDEX rcvindex) __attribute__((ALWAYS_INLINE))
bool log_unzip(LOG_ZIP *log_unzip, LOG_ZIP_SIZE_T length, void *data)
static void log_recovery_analysis(THREAD_ENTRY *thread_p, LOG_LSA *start_lsa, LOG_LSA *start_redolsa, LOG_LSA *end_redo_lsa, bool ismedia_crash, time_t *stopat, bool *did_incom_recovery, INT64 *num_redo_log_records)
TRAN_STATE log_complete(THREAD_ENTRY *thread_p, LOG_TDES *tdes, LOG_RECTYPE iscommitted, LOG_GETNEWTRID get_newtrid, LOG_WRITE_EOT_LOG wrote_eot_log)
#define ER_LOG_RECOVERY_STARTED
void log_zip_free(LOG_ZIP *log_zip)
static void log_recovery_redo(THREAD_ENTRY *thread_p, const LOG_LSA *start_redolsa, const LOG_LSA *end_redo_lsa, time_t *stopat)
#define free_and_init(ptr)
#define DB_ALIGN(offset, align)
void LSA_SET_NULL(log_lsa *lsa_ptr)
void logpb_copy_from_log(THREAD_ENTRY *thread_p, char *area, int length, LOG_LSA *log_lsa, LOG_PAGE *log_pgptr)
bool LSA_GT(const log_lsa *plsa1, const log_lsa *plsa2)
char log_Archive_path[PATH_MAX]
void log_append_empty_record(THREAD_ENTRY *thread_p, LOG_RECTYPE logrec_type, LOG_DATA_ADDR *addr)
bool log_diff(LOG_ZIP_SIZE_T undo_length, const void *undo_data, LOG_ZIP_SIZE_T redo_length, void *redo_data)
bool logpb_is_page_in_archive(LOG_PAGEID pageid)
bool prm_get_bool_value(PARAM_ID prm_id)
static int log_rv_analysis_2pc_commit_inform_particps(THREAD_ENTRY *thread_p, int tran_id, LOG_LSA *log_lsa)
#define ZIP_CHECK(length)
void fileio_page_hexa_dump(const char *src_data, int length)
LOG_LSA sysop_start_postpone_lsa
#define ALLOC_COPY(PTR, STR)
static void log_recovery_notpartof_volumes(THREAD_ENTRY *thread_p)
int fileio_format(THREAD_ENTRY *thread_p, const char *db_full_name_p, const char *vol_label_p, VOLID vol_id, DKNPAGES npages, bool is_sweep_clean, bool is_do_lock, bool is_do_sync, size_t page_size, int kbytes_to_be_written_per_sec, bool reuse_file)
char * msgcat_message(int cat_id, int set_id, int msg_id)
static int log_rv_analysis_start_checkpoint(LOG_LSA *log_lsa, LOG_LSA *start_lsa, bool *may_use_checkpoint)
#define LOG_ISTRAN_2PC(tdes)
LOG_TOPOPS_ADDRESSES * stack
static void log_rv_redo_record(THREAD_ENTRY *thread_p, LOG_LSA *log_lsa, LOG_PAGE *log_page_p, int(*redofun)(THREAD_ENTRY *thread_p, LOG_RCV *), LOG_RCV *rcv, LOG_LSA *rcv_lsa_ptr, int undo_length, char *undo_data, LOG_ZIP *redo_unzip_ptr)
char * strdup(const char *str)
int log_dump_log_info(const char *logname_info, bool also_stdout, const char *fmt,...)
LOG_TDES * logtb_rv_find_allocate_tran_index(THREAD_ENTRY *thread_p, TRANID trid, const LOG_LSA *log_lsa)
int or_get_byte(OR_BUF *buf, int *error)
#define RCV_IS_LOGICAL_COMPENSATE_MANUAL(idx)
static int log_rv_analysis_complete(THREAD_ENTRY *thread_p, int tran_id, LOG_LSA *log_lsa, LOG_PAGE *log_page_p, LOG_LSA *prev_lsa, bool is_media_crash, time_t *stop_at, bool *did_incom_recovery)
int disk_get_creation_time(THREAD_ENTRY *thread_p, INT16 volid, INT64 *db_creation)
struct log_rec_undo LOG_REC_UNDO
static void log_rv_end_simulation(THREAD_ENTRY *thread_p)
void logtb_free_tran_index_with_undo_lsa(THREAD_ENTRY *thread_p, const LOG_LSA *undo_lsa)
LOG_PAGEID logpb_checkpoint(THREAD_ENTRY *thread_p)
#define MVCCID_FORWARD(id)
static int log_rv_analysis_commit_with_postpone(THREAD_ENTRY *thread_p, int tran_id, LOG_LSA *log_lsa, LOG_PAGE *log_page_p)
int logtb_set_num_loose_end_trans(THREAD_ENTRY *thread_p)
static int log_rv_analysis_end_checkpoint(THREAD_ENTRY *thread_p, LOG_LSA *log_lsa, LOG_PAGE *log_page_p, LOG_LSA *check_point, LOG_LSA *start_redo_lsa, bool *may_use_checkpoint, bool *may_need_synch_checkpoint_2pc)
static int log_rv_analysis_2pc_start(THREAD_ENTRY *thread_p, int tran_id, LOG_LSA *log_lsa)
static void log_recovery_finish_postpone(THREAD_ENTRY *thread_p, LOG_TDES *tdes)
LOG_LSA tran_start_postpone_lsa
#define ER_TDE_CIPHER_IS_NOT_LOADED
int log_get_next_nested_top(THREAD_ENTRY *thread_p, LOG_TDES *tdes, LOG_LSA *start_postpone_lsa, LOG_TOPOP_RANGE **out_nxtop_range_stack)
VOLID boot_find_next_permanent_volid(THREAD_ENTRY *thread_p)
#define VPID_SET_NULL(vpid_ptr)
static void log_rv_analysis_record(THREAD_ENTRY *thread_p, LOG_RECTYPE log_type, int tran_id, LOG_LSA *log_lsa, LOG_PAGE *log_page_p, LOG_LSA *check_point, LOG_LSA *prev_lsa, LOG_LSA *start_lsa, LOG_LSA *start_redo_lsa, bool is_media_crash, time_t *stop_at, bool *did_incom_recovery, bool *may_use_checkpoint, bool *may_need_synch_checkpoint_2pc)
static int log_rv_analysis_2pc_recv_ack(THREAD_ENTRY *thread_p, int tran_id, LOG_LSA *log_lsa)
static bool log_recovery_needs_skip_logical_redo(THREAD_ENTRY *thread_p, TRANID tran_id, LOG_RECTYPE log_rtype, LOG_RCVINDEX rcv_index, const LOG_LSA *lsa)
#define MVCCID_IS_VALID(id)
LOG_LSA atomic_sysop_start_lsa
static void map_all_tdes(const map_func &func)
const bool LOG_2PC_DONT_OBTAIN_LOCKS
#define MSGCAT_LOG_STARTS
static void log_recovery_notpartof_archives(THREAD_ENTRY *thread_p, int start_arv_num, const char *info_reason)
int or_advance(OR_BUF *buf, int offset)
bool LOG_RV_RECORD_IS_DELETE(log_rv_record_flag_type flags)
char * log_rv_pack_redo_record_changes(char *ptr, int offset_to_data, int old_data_size, int new_data_size, char *new_data)
int spage_insert_at(THREAD_ENTRY *thread_p, PAGE_PTR page_p, PGSLOTID slot_id, RECDES *record_descriptor_p)
#define MSGCAT_LOG_RESETLOG_DUE_INCOMPLTE_MEDIA_RECOVERY
bool fileio_map_mounted(THREAD_ENTRY *thread_p, bool(*fun)(THREAD_ENTRY *thread_p, VOLID vol_id, void *args), void *args)
#define OR_PUT_BYTE(ptr, val)
#define LOG_READ_ADVANCE_WHEN_DOESNT_FIT(thread_p, length, lsa, log_pgptr)
struct log_rec_sysop_end::@180::@182 run_postpone
#define RCV_IS_NEW_PAGE_INIT(idx)
void logpb_invalidate_pool(THREAD_ENTRY *thread_p)