35 #include <sys/types.h> 48 #include <sys/param.h> 68 #if !defined(SERVER_MODE) 108 #if !defined(SERVER_MODE) 109 #define pthread_mutex_init(a, b) 110 #define pthread_mutex_destroy(a) 111 #define pthread_mutex_lock(a) 0 112 #define pthread_mutex_unlock(a) 116 #undef COND_BROADCAST 117 #define COND_BROADCAST(a) 119 #define COND_DESTROY(a) 122 #define logpb_log(...) if (logpb_Logging) _er_log_debug (ARG_FILE_LINE, "LOGPB: " __VA_ARGS__) 123 #define log_archive_er_log(...) \ 124 if (prm_get_bool_value (PRM_ID_DEBUG_LOG_ARCHIVES)) _er_log_debug (ARG_FILE_LINE, __VA_ARGS__) 126 #define LOGPB_FIND_BUFPTR(bufid) &log_Pb.buffers[(bufid)] 130 #define LOGPB_HEADER_PAGE_ID (-9) 133 #define LOGPB_NEXT_ARCHIVE_PAGE_ID (log_Gl.hdr.nxarv_pageid) 134 #define LOGPB_FIRST_ACTIVE_PAGE_ID (log_Gl.hdr.fpageid) 135 #define LOGPB_LAST_ACTIVE_PAGE_ID (log_Gl.hdr.nxarv_pageid + log_Gl.hdr.npages - 1) 136 #define LOGPB_ACTIVE_NPAGES (log_Gl.hdr.npages) 142 #define LOGPB_PHYSICAL_HEADER_PAGE_ID 0 144 #define LOGPB_IS_FIRST_PHYSICAL_PAGE(pageid) (logpb_to_physical_pageid(pageid) == 1) 147 #define LOGPB_IS_ARCHIVE_PAGE(pageid) \ 148 ((pageid) != LOGPB_HEADER_PAGE_ID && (pageid) < LOGPB_NEXT_ARCHIVE_PAGE_ID) 149 #define LOGPB_AT_NEXT_ARCHIVE_PAGE_ID(pageid) \ 150 (logpb_to_physical_pageid(pageid) == log_Gl.hdr.nxarv_phy_pageid) 152 #define ARV_PAGE_INFO_TABLE_SIZE 256 154 #define LOG_LAST_APPEND_PTR() ((char *) log_Gl.append.log_pgptr->area + LOGAREA_SIZE) 156 #define LOG_APPEND_ALIGN(thread_p, current_setdirty) \ 158 if ((current_setdirty) == LOG_SET_DIRTY) \ 160 logpb_set_dirty ((thread_p), log_Gl.append.log_pgptr); \ 162 log_Gl.hdr.append_lsa.offset = DB_ALIGN (log_Gl.hdr.append_lsa.offset, DOUBLE_ALIGNMENT); \ 163 if (log_Gl.hdr.append_lsa.offset >= (int) LOGAREA_SIZE) \ 165 logpb_next_append_page((thread_p), LOG_DONT_SET_DIRTY); \ 169 #define LOG_APPEND_ADVANCE_WHEN_DOESNOT_FIT(thread_p, length) \ 171 if (log_Gl.hdr.append_lsa.offset + (int) (length) >= (int) LOGAREA_SIZE) \ 173 logpb_next_append_page ((thread_p), LOG_DONT_SET_DIRTY); \ 177 #define LOG_APPEND_SETDIRTY_ADD_ALIGN(thread_p, add) \ 179 log_Gl.hdr.append_lsa.offset += (add); \ 180 LOG_APPEND_ALIGN ((thread_p), LOG_SET_DIRTY); \ 262 #define LOG_MAX_LOGINFO_LINE (PATH_MAX * 4) 265 #if defined(SERVER_MODE) 288 #if defined(CUBRID_DEBUG) 303 static int logpb_verify_length (
const char *db_fullname,
const char *log_path,
const char *log_prefix);
307 static int logpb_start_where_path (
const char *to_db_fullname,
const char *toext_path,
const char **toext_name,
308 char **ext_path,
char **alloc_extpath,
const char *fileof_vols_and_wherepaths,
309 FILE ** where_paths_fp);
310 static int logpb_next_where_path (
const char *to_db_fullname,
const char *toext_path,
const char *ext_name,
311 char *ext_path,
const char *fileof_vols_and_wherepaths, FILE * where_paths_fp,
312 int num_perm_vols,
VOLID volid,
char *from_volname,
char *to_volname);
316 #if defined(SERVER_MODE) 318 int first_arv_num,
int last_arv_num);
349 const int lineno,
const char *fmt, va_list ap);
355 const char *logpath,
const char *prefix_logname,
LOG_HEADER * hdr,
361 const char *db_full_name);
424 log_buffer_p->
dirty =
false;
425 log_buffer_p->
logpage = log_pg;
443 int error_code =
NO_ERROR, saved_checksum_crc32;
444 const int block_size = 4096;
446 const int sample_nbytes = 16;
448 char buf[max_num_pages * sample_nbytes * 2];
450 const size_t sizeof_buf = num_pages * sample_nbytes * 2;
461 for (
int i = 0;
i < num_pages;
i++)
464 sampling_offset = (
i * block_size);
465 memcpy (p, ((
char *) log_pgptr) + sampling_offset, sample_nbytes);
469 sampling_offset = (
i * block_size) + (block_size - sample_nbytes);
470 memcpy (p, ((
char *) log_pgptr) + sampling_offset, sample_nbytes);
474 crypt_crc32 ((
char *) buf, (
int) sizeof_buf, checksum_crc32);
492 int error_code =
NO_ERROR, checksum_crc32;
504 logpb_log (
"logpb_set_page_checksum: log page %lld has checksum = %d\n",
520 int checksum_crc32, error_code =
NO_ERROR;
530 *has_valid_checksum = (checksum_crc32 == log_pgptr->
hdr.
checksum);
531 if (*has_valid_checksum ==
false)
533 logpb_log (
"logpb_page_has_valid_checksum: log page %lld has checksum = %d, computed checksum = %d\n",
625 #if !defined (NDEBUG) 633 pthread_cond_init (&group_commit_info->
gc_cond,
NULL);
686 #if defined(CUBRID_DEBUG) 804 bool is_perf_tracking;
807 UINT64 fix_wait_time;
811 logpb_log (
"called logpb_locate_page for pageid %lld, fetch_mode=%s", (
long long int) pageid,
812 fetch_mode ==
NEW_PAGE ?
"new_page" :
"old_page\n");
815 if (is_perf_tracking)
846 if (log_bufptr->
dirty ==
true)
850 logpb_log (
"logpb_locate_page: fatal error, victimizing dirty log page %lld.\n",
851 (
long long int) log_bufptr->
pageid);
858 log_bufptr->
dirty =
false;
892 logpb_log (
"logpb_locate_page using log buffer entry for pageid = %lld", pageid);
896 if (is_perf_tracking)
900 fix_wait_time = tv_diff.tv_sec * 1000000LL + tv_diff.tv_usec;
901 if (fix_wait_time > 0)
930 logpb_log (
"dirty flag set for pageid = %lld\n", (
long long int) bufptr->
pageid);
932 #if defined(CUBRID_DEBUG) 940 bufptr->
dirty =
true;
988 if (bufptr->
dirty ==
true)
999 #if defined(CUBRID_DEBUG) 1051 logpb_log (
"called logpb_flush_page for pageid = %lld\n", (
long long int) bufptr->
pageid);
1053 #if defined(CUBRID_DEBUG) 1069 if (bufptr->
dirty ==
true)
1087 bufptr->
dirty =
false;
1144 (void) fprintf (out_fp,
"\n\n");
1145 (void) fprintf (out_fp,
"Buf Log_Pageid Phy_pageid Drt Rct Bufaddr Pagearea HDR:Pageid offset\n");
1160 long long int append;
1163 fprintf (out_fp,
"\n\n ** DUMP OF LOG BUFFER POOL INFORMATION **\n\n");
1165 fprintf (out_fp,
"\nHash table dump\n");
1168 fprintf (out_fp,
"Pageid = %5lld, Address = %p\n", (
long long int) i, (
void *) &log_Pb.
buffers[i]);
1170 fprintf (out_fp,
"\n\n");
1172 fprintf (out_fp,
" Next IO_LSA = %lld|%d, Current append LSA = %lld|%d, Prev append LSA = %lld|%d\n" 1173 " Prior LSA = %lld|%d, Prev prior LSA = %lld|%d\n\n",
1189 fprintf (out_fp,
" Append to_flush array: max = %d, num_active = %d\n" 1207 (void) fprintf (out_fp,
" Candidate append pages to flush are:\n");
1216 fprintf (out_fp,
",\n");
1220 fprintf (out_fp,
",");
1223 fprintf (out_fp,
" %4lld", (
long long int) log_bufptr->
pageid);
1226 fprintf (out_fp,
"\n");
1252 fprintf (out_fp,
"%3d %10lld %10d %3d %p %p-%p %4s %5lld %5d\n",
1254 (
void *) log_bufptr, (
void *) (log_bufptr->
logpage),
1259 fprintf (out_fp,
"\n");
1309 DKNPAGES npages, INT64 * db_creation)
1321 if (db_creation !=
NULL)
1347 loghdr->
npages = npages - 1;
1362 if (prefix_logname !=
NULL)
1557 #if !defined(NDEBUG) 1588 int log_vdes =
fileio_open (active_log_path, O_RDONLY, 0);
1595 logpb_log (
"reading from active log:%s, physical page is : %lld\n", active_log_path, (
long long int) phy_pageid);
1597 log_pgptr = (
LOG_PAGE *) aligned_log_pgbuf;
1636 char next_archive_file_path[PATH_MAX], log_path[PATH_MAX];
1646 next_archive_file_path);
1664 #if defined(CUBRID_DEBUG) 1665 struct timeval start_time = { 0, 0 };
1666 struct timeval end_time = { 0, 0 };
1668 css_gettimeofday (&start_time,
NULL);
1699 #if defined(CUBRID_DEBUG) 1700 gettimeofday (&end_time,
NULL);
1705 #if defined(CUBRID_DEBUG) 1727 LOG_LSA append_lsa, append_prev_lsa;
1734 logpb_log (
"called logpb_fetch_page with pageid = %lld\n", (
long long int) req_lsa->
pageid);
1747 if (
LSA_LE (&append_lsa, req_lsa)
1748 ||
LSA_LE (&append_prev_lsa, req_lsa))
1796 logpb_log (
"called logpb_copy_page_from_log_buffer with pageid = %lld\n", (
long long int) pageid);
1824 logpb_log (
"called logpb_copy_page_from_file with pageid = %lld\n", (
long long int) pageid);
1827 if (log_pgptr !=
NULL)
1859 bool is_perf_tracking;
1862 UINT64 fix_wait_time;
1864 bool log_csect_entered =
false;
1870 logpb_log (
"called logpb_copy_page with pageid = %lld\n", (
long long int) pageid);
1873 if (is_perf_tracking)
1881 log_csect_entered =
true;
1918 if (log_bufptr->
pageid == pageid)
1922 if (log_bufptr->
pageid == pageid)
1939 if (log_csect_entered)
1945 if (is_perf_tracking)
1949 fix_wait_time = tv_diff.tv_sec * 1000000LL + tv_diff.tv_usec;
1953 if (fix_wait_time > 0)
1977 bool log_csect_entered =
false;
1982 logpb_log (
"called logpb_read_page_from_file with pageid = %lld, hdr.logical_pageid = %lld, " 1983 "LOGPB_ACTIVE_NPAGES = %d\n", (
long long int) pageid, (
long long int) log_pgptr->
hdr.
logical_pageid,
1993 log_csect_entered =
true;
2002 if (fetch_from_archive)
2007 if (is_archive_page_in_active_log && !dont_fetch_archive_from_active)
2010 fetch_from_archive =
false;
2013 if (fetch_from_archive)
2018 #if defined (SERVER_MODE) 2022 "Failed to fetch page %lld from archives.", pageid);
2038 logpb_log (
"phy_pageid in logpb_read_page_from_file is %lld\n", (
long long int) phy_pageid);
2057 #if defined (SERVER_MODE) 2061 "Failed to fetch page %lld from archives.", pageid);
2094 if (log_csect_entered)
2099 logpb_log (
"logpb_read_page_from_file: log page %lld has checksum = %d\n",
2102 #if !defined(NDEBUG) 2113 if (log_csect_entered)
2139 logpb_log (
"called logpb_read_page_from_active_log with pageid = %lld and num_pages = %d\n", (
long long int) pageid,
2168 char *ptr = (
char *) log_pgptr;
2170 for (i = 0; i < num_pages; i++)
2185 #if !defined(NDEBUG) 2193 ptr = (
char *) log_pgptr;
2194 for (i = 0; i < num_pages; i++)
2241 int nbytes, error_code;
2255 logpb_log (
"called logpb_write_page_to_disk for logical_pageid = %lld\n", (
long long int) logical_pageid);
2265 logpb_log (
"phy_pageid in logpb_write_page_to_disk is %lld\n", (
long long int) phy_pageid);
2271 logpb_log (
"logpb_write_page_to_disk: The page (%lld) is being tde-encrypted: %d\n", (
long long int) logical_pageid,
2288 log_pgptr = enc_pgptr;
2343 const char *logpath,
const char *prefix_logname,
PGLENGTH * io_page_size,
2344 PGLENGTH * log_page_size, INT64 * creation_time,
float *db_compatibility,
int *
db_charset)
2347 static bool is_header_read_from_file =
false;
2348 static bool is_log_header_validated =
false;
2353 if (force_read_log_header)
2355 is_header_read_from_file =
false;
2356 is_log_header_validated =
false;
2394 return *io_page_size;
2397 if (!is_header_read_from_file)
2399 log_pgptr = (
LOG_PAGE *) aligned_log_pgbuf;
2406 is_header_read_from_file =
true;
2415 if (is_log_header_validated)
2417 return *io_page_size;
2425 if (strcmp (hdr.
prefix_name, prefix_logname) != 0)
2448 is_log_header_validated =
true;
2450 return *io_page_size;
2454 *log_page_size = -1;
2456 *db_compatibility = -1.0;
2458 return *io_page_size;
2480 #if defined(SERVER_MODE) 2486 logpb_log (
"started logpb_fetch_start_append_page\n");
2556 logpb_log (
"started logpb_fetch_start_append_page_new\n");
2600 #if defined(SERVER_MODE) 2603 #if defined(CUBRID_DEBUG) 2604 long commit_count = 0;
2605 static struct timeval start_append_time = { 0, 0 };
2606 struct timeval end_append_time = { 0, 0 };
2607 static long prev_commit_count_in_append = 0;
2610 gettimeofday (&end_append_time,
NULL);
2615 logpb_log (
"started logpb_next_append_page\n");
2669 logpb_log (
"logpb_next_append_page: set tde_algorithm to appending page (%lld), " 2674 #if defined(CUBRID_DEBUG) 2705 #if defined(CUBRID_DEBUG) 2706 if (start_append_time.tv_sec != 0 && start_append_time.tv_usec != 0)
2708 elapsed = LOG_GET_ELAPSED_TIME (end_append_time, start_append_time);
2712 gettimeofday (&start_append_time,
NULL);
2714 commit_count = log_Stat.
commit_count - prev_commit_count_in_append;
2724 #if defined(CUBRID_DEBUG) 2726 "log_next_append_page: new page id(%lld) total_append_page_count(%ld)" 2727 " num_toflush(%d) use_append_page_sec(%f) need_flush(%d) commit_count(%ld)" 2757 #if !defined (CS_MODE) 2767 logpb_log (
"logpb_writev_append_pages: started with pageid = %lld and phy_pageid = %lld\n",
2768 (
long long int) bufptr->
pageid, (
long long int) phy_pageid);
2770 for (i = 0; i < npages; i++)
2778 for (i = 0; i < npages; i++)
2780 log_pgptr = to_flush[
i];
2782 logpb_log (
"logpb_writev_append_pages: The page (%lld) is being tde-encrypted: %d\n",
2798 log_pgptr = enc_pgptr;
2859 while (pageid < prev_lsa_pageid && i < flush_info->num_toflush)
2862 if (pageid > bufptr->
pageid)
2869 else if (pageid < bufptr->pageid)
2887 log_pgptr = flush_info->
toflush[
i];
2891 #if !defined(NDEBUG) 2897 logpb_log (
"logpb_write_toflush_pages_to_archive: The page (%lld) is being tde-encrypted: %d\n",
2914 log_pgptr = enc_pgptr;
2960 logpb_log (
"logpb_append_next_record: append a record\n" 2961 "log_Gl.hdr.append_lsa.offset = %d, total record size = %d\n",
3079 if (prior_list !=
NULL)
3101 const int block_size = 4 *
ONE_K;
3102 char log_block_string[block_size * 4], log_header_string[200], *src_ptr, *dest_ptr;
3103 int count_remaining_bytes, count_bytes_to_dump,
i;
3117 sprintf (log_header_string,
"page_id = %lld, checksum = %d, offset = %d, length = %d\n",
3120 count_remaining_bytes = length;
3121 src_ptr = log_pgptr->
area + offset;
3122 while (count_remaining_bytes > 0)
3124 dest_ptr = log_block_string;
3125 count_bytes_to_dump = MIN (count_remaining_bytes, block_size);
3126 for (i = 0; i < count_bytes_to_dump; i++, src_ptr++)
3130 dest_ptr += sprintf (dest_ptr,
"\n %05d: ", line_no++);
3133 dest_ptr += sprintf (dest_ptr,
"%02X ", (
unsigned char) (*src_ptr));
3136 dest_ptr += sprintf (dest_ptr,
"\n");
3137 logpb_log (
"logpb_dump_log_page_area: header = %s data = %s\n", log_header_string, log_block_string);
3138 count_remaining_bytes -= count_bytes_to_dump;
3153 const int block_size = 4 *
ONE_K;
3165 for (i = 0; i < max_num_blocks; i++)
3168 if (memcmp (((
char *) log_pgptr) + (i * block_size), null_block, block_size) == 0)
3172 first_null_block_lsa->
offset = i * block_size;
3174 if (first_null_block_lsa->
offset > 0)
3202 bool need_flush =
true;
3204 int flush_page_count = 0;
3205 #if defined(CUBRID_DEBUG) 3206 struct timeval start_time = { 0, 0 };
3207 struct timeval end_time = { 0, 0 };
3208 int dirty_page_count = 0;
3209 int curr_flush_count = 0;
3210 long commit_count = 0;
3211 static long prev_commit_count_in_flush = 0;
3213 bool hold_flush_mutex =
false;
3218 #if defined(SERVER_MODE) 3219 INT64 flush_start_time = 0;
3220 INT64 flush_completed_time = 0;
3221 INT64 all_writer_thr_end_time = 0;
3230 logpb_log (
"called logpb_flush_all_append_pages\n");
3232 #if defined(CUBRID_DEBUG) 3235 gettimeofday (&start_time,
NULL);
3239 hold_flush_mutex =
true;
3261 hold_flush_mutex =
false;
3268 #if !defined(NDEBUG) 3270 const char *env_value;
3271 int verbose_dump = -1;
3273 if (verbose_dump == -1)
3280 verbose_dump = atoi (env_value) != 0 ? 1 : 0;
3288 if (verbose_dump != 0)
3290 fprintf (stdout,
"\n DUMP BEFORE FLUSHING APPEND PAGES\n");
3296 #if defined(SERVER_MODE) 3305 #if defined(CUBRID_DEBUG) 3309 "logpb_flush_all_append_pages: SYSTEM ERROR\n NXIO_PAGE %d does not seem the same as next free" 3357 logpb_log (
"logpb_flush_all_append_pages: incomplete record at log_Gl.append.prev_lsa=%lld|%d when flush is " 3365 if (bufptr->
pageid != first_append_pageid)
3368 logpb_log (
"logpb_flush_all_append_pages: fatal error, partial page not found in log page buffer.");
3377 bufptr->
dirty =
false;
3399 logpb_log (
"logpb_flush_all_append_pages: continue flushing page of partially appended log record.\n");
3408 logpb_log (
"logpb_flush_all_append_pages: append end of log record at append_lsa = %lld|%d.\n",
3431 #if defined(SERVER_MODE) 3435 assert (hold_flush_mutex ==
false);
3441 if (thread_p !=
NULL && thread_p->event_stats.trace_log_flush_time > 0)
3460 assert (wait_thread_p != thread_p);
3479 entry = entry->
next;
3496 hold_flush_mutex =
true;
3498 #if defined(CUBRID_DEBUG) 3499 log_scan_flush_info (log_dump_pageid);
3523 logpb_log (
"logpb_flush_all_append_pages: skip flushing not dirty page %lld.\n", bufptr->
pageid);
3533 prv_bufptr = bufptr;
3567 prv_bufptr = bufptr;
3581 flush_page_count += i - idxflush;
3583 logpb_log (
"logpb_flush_all_append_pages: flushed all pages in range [%lld, %lld].\n",
3588 for (buf_iter = idxflush; buf_iter <
i; buf_iter++)
3591 bufptr->
dirty =
false;
3593 #if defined (CUBRID_DEBUG) 3594 dirty_page_count += i - idxflush;
3619 logpb_log (
"logpb_flush_all_append_pages: fatal error, nxio_lsa %lld|%d page not found in buffer. " 3620 "bufptr->pageid is %lld instead.\n",
3621 (
long long int) nxio_lsa.
pageid, (
int) nxio_lsa.
offset, (
long long int) bufptr->
pageid);
3632 logpb_log (
"logpb_flush_all_append_pages: fatal error, nxio_lsa %lld|%d page is not dirty.\n",
3633 (
long long int) nxio_lsa.
pageid, (
int) nxio_lsa.
offset);
3641 bufptr->
dirty =
false;
3642 flush_page_count += 1;
3644 logpb_log (
"logpb_flush_all_append_pages: flushed nxio_lsa = %lld|%d page to disk.\n",
3658 logpb_log (
"logpb_flush_all_append_pages: skipped flushing nxio_lsa = %lld|%d page to disk because it matches " 3659 "the header page for incomplete record (prev_lsa = %lld|%d).\n",
3667 if (need_sync ==
true)
3688 #if !defined(NDEBUG) 3701 #if defined(CUBRID_DEBUG) 3726 if (bufptr->
pageid == first_append_pageid)
3730 #if !defined(NDEBUG) 3747 logpb_log (
"logpb_flush_all_append_pages: completed partial record and flush again its first page %lld. " 3748 "nxio_lsa = %lld|%d.\n",
3757 logpb_log (
"logpb_flush_all_append_pages: partial record flushed... set nxio_lsa = %lld|%d.\n",
3764 logpb_log (
"logpb_flush_all_append_pages: set nxio_lsa = %lld|%d.\n",
3787 #if defined(CUBRID_DEBUG) 3788 gettimeofday (&end_time,
NULL);
3794 commit_count = log_Stat.
commit_count - prev_commit_count_in_flush;
3801 "logpb_flush_all_append_pages: flush page(%ld / %d / %ld) avg flush count(%f), avg flush sec(%f)" 3810 hold_flush_mutex =
false;
3812 #if defined(SERVER_MODE) 3818 if (thread_p !=
NULL && thread_p->event_stats.trace_log_flush_time > 0)
3833 while (entry !=
NULL)
3839 entry = entry->
next;
3851 if (thread_p !=
NULL && thread_p->event_stats.trace_log_flush_time > 0)
3855 if (all_writer_thr_end_time - flush_start_time > thread_p->event_stats.trace_log_flush_time)
3858 (
int) (all_writer_thr_end_time - flush_start_time),
3859 (
int) (all_writer_thr_end_time - flush_completed_time),
3867 assert (hold_flush_mutex ==
false);
3872 #if defined(SERVER_MODE) 3877 thread_p->event_stats.trace_log_flush_time = 0;
3884 if (hold_flush_mutex)
3891 #if defined(SERVER_MODE) 3896 thread_p->event_stats.trace_log_flush_time = 0;
3912 #if defined(CUBRID_DEBUG) 3940 #if !defined(SERVER_MODE) 3946 struct timeval start_time = { 0, 0 };
3947 struct timeval tmp_timeval = { 0, 0 };
3948 struct timespec to = { 0, 0 };
3949 int max_wait_time_in_msec = 1000;
3950 bool need_wakeup_LFT, need_wait;
3951 bool async_commit, group_commit;
3979 if (async_commit ==
false)
3982 if (group_commit ==
false)
3985 need_wakeup_LFT =
true;
3990 need_wakeup_LFT =
false;
3999 if (group_commit ==
false)
4002 need_wakeup_LFT =
true;
4007 need_wakeup_LFT =
false;
4012 if (need_wakeup_LFT ==
true && need_wait ==
false)
4016 else if (need_wait ==
true)
4022 need_wakeup_LFT =
true;
4025 while (
LSA_LT (&nxio_lsa, flush_lsa))
4027 gettimeofday (&start_time,
NULL);
4028 (void)
timeval_add_msec (&tmp_timeval, &start_time, max_wait_time_in_msec);
4033 if (
LSA_GE (&nxio_lsa, flush_lsa))
4039 if (need_wakeup_LFT ==
true)
4043 (void) pthread_cond_timedwait (&group_commit_info->
gc_cond, &group_commit_info->
gc_mutex, &to);
4046 need_wakeup_LFT =
true;
4082 #if defined(SERVER_MODE) 4088 logpb_log (
"called logpb_invalid_all_append_pages\n");
4139 #if defined(CUBRID_DEBUG) 4191 logpb_log (
"logpb_start_append: set tde_algorithm to existing page (%lld), " 4197 logpb_log (
"logpb_start_append: tde_algorithm already set to existing page (%lld), " 4261 if (length == 0 || data ==
NULL)
4276 if ((ptr + length) >= last_ptr)
4280 if (ptr >= last_ptr)
4290 if (ptr + length >= last_ptr)
4296 copy_length = length;
4298 memcpy (ptr, data, copy_length);
4300 data += copy_length;
4301 length -= copy_length;
4307 memcpy (ptr, data, length);
4340 if (num_crumbs == 0)
4354 for (i = 0; i < num_crumbs; i++)
4357 data = (
char *) crumbs[i].data;
4360 if ((ptr + length) >= last_ptr)
4363 if (ptr >= last_ptr)
4373 if ((ptr + length) >= last_ptr)
4379 copy_length = length;
4381 memcpy (ptr, data, copy_length);
4383 data += copy_length;
4384 length -= copy_length;
4389 memcpy (ptr, data, length);
4483 const char *
db_name = db_fullname;
4487 fp = fopen (logname_info,
"w");
4492 if (db_name ==
NULL)
4498 catmsg =
"COMMENT: %s for database %s\n";
4526 int last_arvnum = -1;
4528 bool isfound =
false;
4560 last_arvnum = next_arvnum;
4562 if (pageid < from_pageid)
4573 arv_num = next_arvnum;
4575 if (pageid >= from_pageid && pageid <= to_pageid)
4649 char vol_fullname[PATH_MAX];
4650 char *volinfo_fullname;
4651 FILE *volinfo_fp =
NULL;
4653 if (db_fullname !=
NULL)
4656 volinfo_fullname = vol_fullname;
4663 volinfo_fp = fopen (volinfo_fullname,
"w");
4664 if (volinfo_fp ==
NULL)
4677 fflush (volinfo_fp);
4678 fclose (volinfo_fp);
4695 char next_vol_fullname[PATH_MAX];
4768 char vol_fullname[PATH_MAX];
4769 char *volinfo_fullname;
4770 FILE *volinfo_fp =
NULL;
4772 if (db_fullname !=
NULL)
4775 volinfo_fullname = vol_fullname;
4782 volinfo_fp = fopen (volinfo_fullname,
"a");
4783 if (volinfo_fp !=
NULL)
4786 fprintf (volinfo_fp,
"%4d %s\n", new_volid, new_volfullname);
4787 fflush (volinfo_fp);
4788 fclose (volinfo_fp);
4816 int (*fun) (
THREAD_ENTRY * thread_p,
VOLID xvolid,
const char *vlabel,
void *args),
void *args)
4818 char xxvolinfo_fullname[PATH_MAX];
4819 char *volinfo_fullname;
4820 FILE *volinfo_fp =
NULL;
4821 char vol_fullname[PATH_MAX];
4825 bool start_scan =
false;
4826 char format_string[64];
4828 if (db_fullname !=
NULL)
4831 volinfo_fullname = xxvolinfo_fullname;
4838 volinfo_fp = fopen (volinfo_fullname,
"r");
4839 if (volinfo_fp ==
NULL)
4845 sprintf (format_string,
"%%d %%%ds", PATH_MAX - 1);
4848 if (fscanf (volinfo_fp, format_string, &read_int_volid, vol_fullname) != 2)
4853 if ((volid + 1) !=
NULL_VOLID && (volid + 1) > (
VOLID) read_int_volid && num_vols != 0)
4856 read_int_volid, vol_fullname);
4860 volid = (
VOLID) read_int_volid;
4867 if (start_scan ==
false)
4869 if (start_volid == read_int_volid)
4879 if (volid != ignore_volid)
4881 if (((*fun) (thread_p, volid, vol_fullname, args)) !=
NO_ERROR)
4891 fclose (volinfo_fp);
4929 else if (tmp_pageid < 0)
5025 ptr = (
int *) malloc (size);
5159 char arv_name[PATH_MAX];
5160 const char *tmp_arv_name;
5162 int direction = 0, retry;
5163 bool has_guess_arvnum =
false, first_time =
true;
5165 char format_string[64];
5169 logpb_log (
"called logpb_fetch_from_archive for pageid = %lld\n", (
long long int) pageid);
5176 #if !defined(NDEBUG) 5179 fprintf (stdout,
"\n **log_fetch_from_archive has been called on pageid = %lld ** \n", (
long long int) pageid);
5184 hdr_pgptr = (
LOG_PAGE *) aligned_hdr_pgbuf;
5185 if (log_pgptr ==
NULL)
5187 log_pgptr = (
LOG_PAGE *) aligned_log_pgbuf;
5189 if (ret_arv_num ==
NULL)
5191 ret_arv_num = &arv_num;
5209 has_guess_arvnum =
true;
5258 *ret_arv_num = arv_hdr->
arv_num;
5261 sprintf (format_string,
"%%%ds", PATH_MAX - 1);
5267 if (arv_hdr !=
NULL && pageid >= arv_hdr->
fpageid && pageid <= arv_hdr->fpageid + arv_hdr->
npages - 1)
5315 if (has_guess_arvnum ==
false)
5317 has_guess_arvnum =
true;
5319 if (retry != *ret_arv_num)
5321 *ret_arv_num = retry;
5331 if (arv_hdr !=
NULL)
5333 if (pageid < arv_hdr->fpageid)
5346 if (first_time !=
true)
5367 if (arv_hdr !=
NULL)
5369 if (direction == -1)
5376 if (pageid < arv_hdr->fpageid)
5405 if (first_time !=
true)
5417 *ret_arv_num = *ret_arv_num + direction;
5453 while (retry != 0 && retry != 1
5458 char line_buf[PATH_MAX * 2];
5459 bool is_in_crash_recovery;
5466 if (is_in_crash_recovery ==
true)
5468 fprintf (stdout,
"%s\n",
er_msg ());
5475 if (retry == 1 && is_in_crash_recovery ==
true)
5477 fprintf (stdout,
"Continue without present archive. (Partial recovery).\n");
5487 if (fgets (line_buf, PATH_MAX, stdin) ==
NULL)
5491 else if (sscanf (line_buf,
"%d", &retry) != 1)
5517 if (fgets (line_buf, PATH_MAX, stdin) == 0 || (sscanf (line_buf, format_string, arv_name) != 1))
5571 #if defined(CUBRID_DEBUG) 5583 #if !defined (NDEBUG) 5591 assert (log_pgptr !=
NULL && *ret_arv_num != -1 && arv_hdr !=
NULL);
5592 if (ret_arv_hdr !=
NULL)
5594 *ret_arv_hdr = *arv_hdr;
5614 char arv_name[PATH_MAX] = {
'\0' };
5619 char *aligned_log_pgbuf;
5633 #if defined(SERVER_MODE) 5639 logpb_log (
"Entered logpb_archive_active_log. log_Gl.hdr.nxarv_phy_pageid = %lld , log_Gl.hdr.nxarv_pageid =%lld\n",
5645 "log_archive_active_log: WARNING Trying to archive ONLY the append page" " which is incomplete\n");
5658 if (malloc_arv_hdr_pgptr ==
NULL)
5669 malloc_arv_hdr_pgptr->
hdr.
flags = 0;
5689 if (last_pageid < arvhdr->fpageid)
5691 last_pageid = arvhdr->
fpageid;
5706 vdes = bg_arv_info->
vdes;
5751 log_pgptr = (
LOG_PAGE *) aligned_log_pgbuf;
5754 for (; pageid <= last_pageid; pageid += num_pages, ar_phy_pageid += num_pages)
5756 logpb_log (
"Dump page %lld in logpb_archive_active_log, num_pages = %d\n", (
long long int) pageid, num_pages);
5816 (
"In logpb_archive_active_log, new values from log_Gl.hdr.nxarv_pageid = %lld and log_Gl.hdr.nxarv_phy_pageid = %lld\n",
5846 catmsg =
"ARCHIVE: %d %s %lld %lld\n";
5857 #if defined(SERVER_MODE) 5860 LOG_PAGEID min_fpageid = logwr_get_min_copied_fpageid ();
5863 int unneeded_arvnum = -1;
5864 if (min_fpageid >= arvhdr->
fpageid)
5866 unneeded_arvnum = arvhdr->
arv_num - 1;
5873 unneeded_arvnum = min_arvhdr.
arv_num - 1;
5876 if (unneeded_arvnum >= 0)
5878 char unneeded_logarv_name[PATH_MAX];
5886 "29 COMMENT: Log archive %s, which contains log pages before %lld," 5887 " is not needed any longer by any HA utilities.\n";
5935 if (malloc_arv_hdr_pgptr !=
NULL)
5962 int first_arv_num_to_delete = -1;
5963 int last_arv_num_to_delete = -1;
5964 int min_arv_required_for_vacuum;
5966 #if defined(SERVER_MODE) 5968 int min_copied_arv_num;
5970 int num_remove_arv_num;
5973 int deleted_count = 0;
5975 if (log_max_archives == INT_MAX)
5996 #if defined(SERVER_MODE) 5997 min_copied_pageid = logwr_get_min_copied_fpageid ();
6007 if (min_copied_arv_num == -1)
6012 else if (min_copied_arv_num > 1)
6014 min_copied_arv_num--;
6017 num_remove_arv_num = MAX (log_max_archives,
log_Gl.
hdr.
nxarv_num - min_copied_arv_num);
6021 num_remove_arv_num = log_max_archives;
6024 num_remove_arv_num = log_max_archives;
6029 num_remove_arv_num = log_max_archives;
6049 min_arv_required_for_vacuum);
6050 if (min_arv_required_for_vacuum >= 0)
6052 last_arv_num_to_delete = MIN (last_arv_num_to_delete, min_arv_required_for_vacuum);
6064 last_arv_num_to_delete = MIN (last_arv_num_to_delete, first_arv_num_to_delete + max_count);
6067 last_arv_num_to_delete--;
6068 if (last_arv_num_to_delete >= first_arv_num_to_delete)
6072 #if defined (SA_MODE) 6087 if (last_arv_num_to_delete >= 0 && last_arv_num_to_delete >= first_arv_num_to_delete)
6093 "vacuum_first_pageid = %d, last_arv_num_for_syscrashes = %d",
6094 first_arv_num_to_delete, last_arv_num_to_delete, vacuum_first_pageid,
6101 catmsg = (
char *)
"Number of active log archives has been exceeded the max desired number.";
6107 return deleted_count;
6125 #if !defined(SERVER_MODE) 6129 int first_deleted_arv_num;
6130 int last_deleted_arv_num;
6131 int min_arv_required_for_vacuum;
6149 #if defined(SERVER_MODE) 6158 if ((!
LSA_ISNULL (&newflush_upto_lsa) &&
LSA_LT (&newflush_upto_lsa, &flush_upto_lsa))
6180 if (last_deleted_arv_num == -1)
6185 last_deleted_arv_num--;
6191 min_arv_required_for_vacuum--;
6192 last_deleted_arv_num = MIN (last_deleted_arv_num, min_arv_required_for_vacuum);
6202 if (last_deleted_arv_num >= 0)
6210 last_deleted_arv_num);
6233 rear = logpb_Arv_page_info_table.
rear;
6242 logpb_Arv_page_info_table.
rear = rear;
6267 for (i = logpb_Arv_page_info_table.
rear, count = 0; count < logpb_Arv_page_info_table.
item_count;
6301 char logarv_name[PATH_MAX];
6303 bool append_log_info =
false;
6304 int deleted_count = 0;
6309 for (i = first; i <= last; i++)
6313 #if defined(SERVER_MODE) 6325 append_log_info =
true;
6329 if (append_log_info)
6334 return deleted_count;
6353 char logarv_name[PATH_MAX];
6354 char logarv_name_first[PATH_MAX];
6357 if (info_reason !=
NULL)
6362 catmsg =
"REMOVE: %d %s to \n%d %s.\nREASON: %s\n";
6420 memcpy (area, (
char *) log_page_p->
area + log_lsa->
offset, length);
6421 log_lsa->
offset += length;
6430 if (log_lsa->
offset + length < (
int) LOGAREA_SIZE)
6432 copy_length = length;
6436 copy_length = LOGAREA_SIZE - (int) (log_lsa->
offset);
6438 memcpy (area + area_offset, (
char *) log_page_p->
area + log_lsa->
offset, copy_length);
6439 length -= copy_length;
6440 area_offset += copy_length;
6441 log_lsa->
offset += copy_length;
6474 long int filename_max;
6475 long int pathname_max;
6495 if ((
int) (
strlen (dbname) + 1 + volmax_suffix) > filename_max)
6499 filename_max - volmax_suffix - 1);
6515 if ((
int) (
strlen (db_fullname) + 1 + volmax_suffix) > pathname_max)
6519 strlen (db_fullname) + 1, pathname_max);
6528 if (log_path !=
NULL)
6530 length = (int) (
strlen (log_path) +
strlen (log_prefix) + 2);
6534 length = (int)
strlen (log_prefix) + 1;
6537 if (length + volmax_suffix > pathname_max)
6575 const char *prefix_logname)
6590 if (logpath !=
NULL)
6704 size_t & length_all_tops)
6715 if (ntops >= tmp_chkpt.
ntops)
6718 length_all_tops =
sizeof (*chkpt_topops) * tmp_chkpt.
ntops;
6748 #define detailed_er_log(...) if (detailed_logging) _er_log_debug (ARG_FILE_LINE, __VA_ARGS__) 6762 unsigned int nobj_locks;
6763 char logarv_name[PATH_MAX];
6764 char logarv_name_first[PATH_MAX];
6767 int length_all_chkpt_trans;
6768 size_t length_all_tops = 0;
6772 VOLID curr_last_perm_volid;
6775 int first_arv_num_not_needed;
6776 int last_arv_num_not_needed;
6779 int flushed_page_cnt = 0, vdes;
6787 #if defined(SERVER_MODE) 6816 goto error_cannot_chkpt;
6836 goto error_cannot_chkpt;
6849 detailed_er_log (
"logpb_checkpoint: call logtb_reflect_global_unique_stats_to_btree()\n");
6852 goto error_cannot_chkpt;
6855 detailed_er_log (
"logpb_checkpoint: call pgbuf_flush_checkpoint()\n");
6859 goto error_cannot_chkpt;
6862 detailed_er_log (
"logpb_checkpoint: call fileio_synchronize_all()\n");
6865 goto error_cannot_chkpt;
6877 #if defined(SERVER_MODE) 6892 length_all_chkpt_trans =
sizeof (*chkpt_trans) * tmp_chkpt.
ntrans;
6895 if (chkpt_trans ==
NULL)
6898 goto error_cannot_chkpt;
6925 tmp_chkpt.
ntrans = ntrans;
6926 length_all_chkpt_trans =
sizeof (*chkpt_trans) * tmp_chkpt.
ntrans;
6936 chkpt_topops =
NULL;
6940 length_all_tops =
sizeof (*chkpt_topops) * tmp_chkpt.
ntops;
6942 if (chkpt_topops ==
NULL)
6947 goto error_cannot_chkpt;
6966 goto error_cannot_chkpt;
6972 tmp_chkpt.
ntops = 1;
6973 length_all_tops =
sizeof (*chkpt_topops) * tmp_chkpt.
ntops;
6975 if (chkpt_topops ==
NULL)
6980 goto error_cannot_chkpt;
6986 mapper = [thread_p, &chkpt_topops, &chkpt_trans, &tmp_chkpt, &ntops, &length_all_tops, &error_code] (
log_tdes &tdes)
6996 goto error_cannot_chkpt;
6999 assert (
sizeof (*chkpt_topops) * ntops <= length_all_tops);
7000 tmp_chkpt.ntops = ntops;
7001 length_all_tops =
sizeof (*chkpt_topops) * tmp_chkpt.ntops;
7005 (
char *) chkpt_trans, (
int) length_all_tops, (
char *) chkpt_topops);
7010 if (chkpt_topops !=
NULL)
7016 goto error_cannot_chkpt;
7031 if (chkpt_topops !=
NULL)
7042 detailed_er_log (
"logpb_checkpoint: call logpb_flush_all_append_pages()\n");
7096 goto error_cannot_chkpt;
7110 goto error_cannot_chkpt;
7127 first_arv_num_not_needed = last_arv_num_not_needed = -1;
7133 #if defined(SERVER_MODE) 7134 smallest_pageid = MIN (
log_Gl.flushed_lsa_lower_bound.pageid, tmp_chkpt.redo_lsa.pageid);
7136 smallest_pageid = tmp_chkpt.redo_lsa.pageid;
7143 smallest_pageid = MIN (smallest_pageid, lsa.
pageid);
7153 first_arv_num_not_needed = last_arv_num_not_needed = -1;
7158 last_arv_num_not_needed = arv_num - 1;
7167 if (first_arv_num_not_needed != -1)
7178 if (first_arv_num_not_needed == last_arv_num_not_needed)
7185 catmsg =
"COMMENT: Log archive %s is not needed any longer unless a database media crash occurs.\n";
7200 "COMMENT: Log archives from %s to %s are not" 7201 " needed any longer unless a database media crash occurs.\n";
7207 goto error_cannot_chkpt;
7239 return tmp_chkpt.redo_lsa.pageid;
7255 #undef detailed_er_log 7275 ntrans = length /
sizeof (*chkpt_trans);
7279 for (i = 0; i < ntrans; i++)
7281 chkpt_one = &chkpt_trans[
i];
7283 " Trid = %d, State = %s, isloose_end = %d,\n" 7284 " Head_lsa = %lld|%d, Tail_lsa = %lld|%d, UndoNxtLSA = %lld|%d,\n" 7285 " Postpone_lsa = %lld|%d, Save_lsa = %lld|%d, Tail_topresult_lsa = %lld|%d,\n" 7295 (void) fprintf (out_fp,
"\n");
7345 only_updated =
false;
7349 vol_sys_lastpage = -1;
7428 bool delete_unneeded_logarchives,
const char *backup_verbose_file_path,
int num_threads,
7433 const char *from_vlabel;
7434 char vol_backup[PATH_MAX];
7437 char real_pathbuf[PATH_MAX];
7442 #if defined(SERVER_MODE) 7445 FILE *backup_volinfo_fp =
NULL;
7450 int first_arv_needed = -1;
7451 int last_arv_needed = -1;
7453 bool isincremental =
false;
7454 bool bkup_in_progress =
false;
7456 char mk_path[PATH_MAX] = { 0, };
7457 char separate_mk_path[PATH_MAX] = { 0, };
7458 char bkpath_without_units[PATH_MAX] = { 0, };
7459 const char *db_nopath_name_p;
7461 #if defined(SERVER_MODE) 7463 time_t wait_checkpoint_begin_time;
7464 bool print_backupdb_waiting_reason =
false;
7469 time_t backup_start_time, backup_end_time;
7470 char old_bkpath[PATH_MAX];
7471 const char *str_tmp;
7477 #if defined (SERVER_MODE) 7480 if (
log_Gl.backup_in_progress ==
true)
7488 log_Gl.backup_in_progress =
true;
7497 if (allbackup_path ==
NULL)
7503 else if (realpath (allbackup_path, real_pathbuf) !=
NULL)
7505 allbackup_path = real_pathbuf;
7522 num_threads, sleep_msecs) ==
NULL)
7534 #if defined (SERVER_MODE) 7535 print_backupdb_waiting_reason =
false;
7536 wait_checkpoint_begin_time = time (
NULL);
7543 #if defined (SERVER_MODE) 7547 bool continue_check;
7549 if (print_backupdb_waiting_reason ==
false && session.
verbose_fp !=
NULL)
7551 fprintf (session.
verbose_fp,
"[ Database backup will start after checkpointing is complete. ]\n\n");
7552 print_backupdb_waiting_reason =
true;
7570 if (print_backupdb_waiting_reason ==
true && session.
verbose_fp !=
NULL)
7573 fprintf (session.
verbose_fp,
"[ Database backup has been suspended for %lld seconds due to checkpoint. ]\n\n",
7574 (
long long int) (time (
NULL) - wait_checkpoint_begin_time));
7599 min_arv_required_for_vacuum);
7601 if (min_arv_required_for_vacuum >= 0)
7603 if (first_arv_needed >= 0)
7605 first_arv_needed = MIN (first_arv_needed, min_arv_required_for_vacuum);
7609 first_arv_needed = min_arv_required_for_vacuum;
7628 switch (backup_level)
7644 isincremental =
true;
7660 isincremental =
true;
7690 if (error_code !=
NO_ERROR || backup_volinfo_fp ==
NULL)
7700 fclose (backup_volinfo_fp);
7704 fclose (backup_volinfo_fp);
7720 while (bk_vol && !beenwarned)
7725 if (strcmp (old_bkpath, allbackup_path) == 0 || strcmp (bk_vol, allbackup_path) == 0)
7730 tmp_time = (time_t) io_bkup_hdr_p->
start_time;
7731 (
void) ctime_r (&tmp_time, time_val);
7732 snprintf (old_bkpath, PATH_MAX,
7780 switch (backup_level)
7786 str_tmp =
"Incremental Level 1";
7790 str_tmp =
"Incremental Level 2";
7803 fprintf (session.
verbose_fp,
"- compression method: %d (%s), compression level: %d (%s)\n\n", zip_method,
7810 assert (!skip_activelog);
7811 fprintf (session.
verbose_fp,
"- not include active log.\n\n");
7814 #if defined(SERVER_MODE) 7819 if (sleep_msecs > 0)
7821 sleep_nsecs = sleep_msecs * 1000;
7832 if (sleep_nsecs > 0)
7834 fprintf (session.
verbose_fp,
"- sleep %d millisecond per 1M read.\n\n", sleep_nsecs / 1000);
7839 backup_start_time = time (
NULL);
7840 (void) ctime_r (&backup_start_time, time_val);
7841 fprintf (session.
verbose_fp,
"- backup start time: %s\n", time_val);
7842 fprintf (session.
verbose_fp,
"- number of permanent volumes: %d\n\n", num_perm_vols);
7848 fprintf (session.
verbose_fp,
"- backup progress status\n\n");
7849 fprintf (session.
verbose_fp,
"-----------------------------------------------------------------------------\n");
7850 fprintf (session.
verbose_fp,
" volume name | # of pages | backup progress status | done \n");
7851 fprintf (session.
verbose_fp,
"-----------------------------------------------------------------------------\n");
7855 assert (!skip_activelog);
7859 &chkpt_lsa, all_bkup_info, &session, zip_method, zip_level) ==
NULL)
7894 from_vlabel = mk_path;
7899 from_vlabel = vol_backup;
7946 bkup_in_progress =
true;
7950 #if defined(SERVER_MODE) 7968 if (last_arv_needed >= first_arv_needed)
7970 error_code = logpb_backup_needed_archive_logs (thread_p, &session, first_arv_needed, last_arv_needed);
7981 first_arv_needed = -1;
7982 last_arv_needed = -1;
7992 #if defined(SERVER_MODE) 7996 error_code = logpb_backup_needed_archive_logs (thread_p, &session, last_arv_needed + 1,
log_Gl.
hdr.
nxarv_num - 1);
8041 switch (backup_level)
8083 if (delete_unneeded_logarchives !=
false)
8104 fprintf (session.
verbose_fp,
"-----------------------------------------------------------------------------\n\n");
8105 backup_end_time = time (
NULL);
8106 (void) ctime_r (&backup_end_time, time_val);
8107 fprintf (session.
verbose_fp,
"# backup end time: %s\n", time_val);
8108 switch (backup_level)
8114 str_tmp =
"Incremental Level 1";
8118 str_tmp =
"Incremental Level 2";
8126 #if defined(SERVER_MODE) 8129 log_Gl.backup_in_progress =
false;
8148 #if defined(SERVER_MODE) 8154 log_Gl.backup_in_progress =
false;
8178 FILE *backup_volinfo_fp;
8181 backup_volinfo_fp = fopen (bkupinfo_file_name,
"w");
8182 if (backup_volinfo_fp ==
NULL)
8196 fclose (backup_volinfo_fp);
8199 fflush (backup_volinfo_fp);
8200 fclose (backup_volinfo_fp);
8218 size_t time_str_len;
8220 if (stop_at < backup_time)
8222 ctime_r (&stop_at, ctime_buf1);
8223 ctime_r (&backup_time, ctime_buf2);
8226 time_str_len =
strlen (ctime_buf1);
8227 if (time_str_len > 0)
8229 ctime_buf1[time_str_len - 1] = 0;
8231 time_str_len =
strlen (ctime_buf2);
8232 if (time_str_len > 0)
8234 ctime_buf2[time_str_len - 1] = 0;
8278 const char *nopath_name;
8279 char to_volname[PATH_MAX];
8280 char verbose_to_volname[PATH_MAX];
8281 char prev_volname[PATH_MAX];
8282 char from_volbackup[PATH_MAX];
8284 FILE *backup_volinfo_fp =
NULL;
8287 INT64 bkup_match_time = 0;
8290 float db_compatibility;
8292 float bkdb_compatibility;
8299 bool first_time =
true;
8300 bool remember_pages =
false;
8301 bool error_expected =
false;
8302 bool restore_in_progress =
false;
8304 time_t restore_start_time, restore_end_time;
8307 char tmp_logfiles_from_backup[PATH_MAX];
8308 char bk_mk_path[PATH_MAX];
8309 char bkpath_without_units[PATH_MAX];
8310 char backup_dir_path[PATH_MAX];
8311 char *volume_name_p;
8312 struct stat stat_buf;
8320 start_level = try_level;
8323 memset (verbose_to_volname, 0, PATH_MAX);
8324 memset (tmp_logfiles_from_backup, 0, PATH_MAX);
8329 &log_page_size, &db_creation, &db_compatibility, &dummy) == -1)
8384 error_expected =
true;
8394 printtoc = (r_args->
printtoc) ?
false :
true;
8395 if (
fileio_start_restore (thread_p, db_fullname, from_volbackup, db_creation, &bkdb_iopagesize,
8396 &bkdb_compatibility, &session_storage, try_level, printtoc, bkup_match_time,
8412 session = &session_storage;
8420 else if (r_args->
stopat > 0)
8434 error_expected =
true;
8440 if (first_time && db_iopagesize != bkdb_iopagesize)
8489 restore_start_time = time (
NULL);
8490 (void) ctime_r (&restore_start_time, time_val);
8491 fprintf (session->
verbose_fp,
"- restore start time: %s\n", time_val);
8492 fprintf (session->
verbose_fp,
"- restore steps: %d \n", r_args->
level + 1);
8495 fprintf (session->
verbose_fp,
" step %1d) restore using (level = %d) backup data\n", ++loop_cnt, try_level);
8498 fprintf (session->
verbose_fp,
"- restore progress status (using level = %d backup data)\n", try_level);
8500 " -----------------------------------------------------------------------------\n");
8502 " volume name | # of pages | restore progress status | done \n");
8504 " -----------------------------------------------------------------------------\n");
8529 else if (S_ISDIR (stat_buf.st_mode))
8556 error_expected =
true;
8566 error_expected =
true;
8577 if (another_vol == 1)
8581 strcpy (verbose_to_volname, to_volname);
8590 volume_name_p = tmp_logfiles_from_backup;
8595 volume_name_p = bk_mk_path;
8599 volume_name_p = to_volname;
8602 restore_in_progress =
true;
8605 remember_pages =
true;
8649 remember_pages =
false;
8660 if (page_bitmap ==
NULL)
8663 if (page_bitmap ==
NULL)
8672 fileio_restore_volume (thread_p, session, volume_name_p, verbose_to_volname, prev_volname, page_bitmap,
8680 if (volume_name_p == tmp_logfiles_from_backup)
8684 bool is_backup_log_useful =
false;
8686 if (stat (to_volname, &stat_buf) != 0 && stat (tmp_logfiles_from_backup, &stat_buf) == 0)
8688 is_backup_log_useful =
true;
8694 is_backup_log_useful =
false;
8698 if (is_backup_log_useful)
8710 unlink (tmp_logfiles_from_backup);
8713 tmp_logfiles_from_backup[0] =
'\0';
8716 volume_name_p =
NULL;
8718 else if (another_vol == 0)
8737 else if (r_args->
stopat > 0)
8743 error_expected =
true;
8754 " -----------------------------------------------------------------------------\n\n");
8762 backup_volinfo_fp = fopen (from_volbackup,
"w");
8763 if (backup_volinfo_fp !=
NULL)
8766 fclose (backup_volinfo_fp);
8769 if (session !=
NULL)
8773 restore_end_time = time (
NULL);
8774 (void) ctime_r (&restore_end_time, time_val);
8775 fprintf (session->
verbose_fp,
"- restore end time: %s\n", time_val);
8806 if (restore_in_progress)
8822 if (backup_volinfo_fp !=
NULL)
8824 fclose (backup_volinfo_fp);
8827 if (session !=
NULL)
8839 if (!error_expected)
8844 if (tmp_logfiles_from_backup[0] !=
'\0')
8846 unlink (tmp_logfiles_from_backup);
8898 char **alloc_extpath,
const char *fileof_vols_and_wherepaths, FILE ** where_paths_fp)
8906 *alloc_extpath =
NULL;
8908 *where_paths_fp =
NULL;
8916 if (fileof_vols_and_wherepaths !=
NULL)
8923 *where_paths_fp = fopen (fileof_vols_and_wherepaths,
"r");
8924 if (*where_paths_fp ==
NULL)
8927 fileof_vols_and_wherepaths);
8935 if (toext_path ==
NULL)
8941 *alloc_extpath = (
char *) malloc (PATH_MAX);
8942 if (*alloc_extpath ==
NULL)
8946 *ext_path = *alloc_extpath;
8951 *ext_path = (
char *) toext_path;
8992 const char *fileof_vols_and_wherepaths, FILE * where_paths_fp,
int num_perm_vols,
8993 VOLID volid,
char *from_volname,
char *to_volname)
8995 const char *current_vlabel;
8997 #if !defined(WINDOWS) 8998 char link_path[PATH_MAX];
8999 struct stat stat_buf;
9002 char format_string[64];
9005 sprintf (format_string,
"%%d %%%ds %%%ds", PATH_MAX - 1, PATH_MAX - 1);
9010 if (where_paths_fp !=
NULL)
9012 if (fscanf (where_paths_fp, format_string, &from_volid, from_volname, to_volname) != 3)
9015 fileof_vols_and_wherepaths, num_perm_vols);
9024 #if defined(WINDOWS) 9026 fileof_vols_and_wherepaths, volid + 1, from_volid, from_volname, to_volname, (
int) volid,
9027 current_vlabel, to_db_fullname);
9034 fileof_vols_and_wherepaths, volid + 1, from_volid, from_volname, to_volname, (
int) volid,
9035 current_vlabel, to_db_fullname);
9039 strcpy (to_volname, to_db_fullname);
9047 fileof_vols_and_wherepaths, volid + 1, from_volid, from_volname, to_volname, (
int) volid,
9052 #if !defined(WINDOWS) 9053 if (stat (to_volname, &stat_buf) != -1)
9055 if (S_ISCHR (stat_buf.st_mode))
9066 strcpy (to_volname, link_path);
9083 strcpy (to_volname, to_db_fullname);
9087 if (toext_path ==
NULL)
9100 strcpy (from_volname, current_vlabel);
9122 int from_vdes, to_vdes;
9226 const char *to_prefix_logname,
const char *toext_path,
const char *fileof_vols_and_copypaths)
9229 char from_volname[PATH_MAX];
9230 FILE *fromfile_paths_fp =
NULL;
9233 char to_volname[PATH_MAX];
9236 FILE *to_volinfo_fp =
NULL;
9237 char *alloc_extpath =
NULL;
9238 const char *ext_name;
9243 bool stop_eof =
false;
9246 char format_string[64];
9248 char from_mk_path[PATH_MAX] = { 0, };
9249 char to_mk_path[PATH_MAX] = { 0, };
9251 db_creation = time (
NULL);
9298 catmsg =
"ACTIVE: %s %d pages\n";
9322 if (to_malloc_log_pgptr ==
NULL)
9328 #if !defined (NDEBUG) 9357 to_malloc_log_pgptr->
hdr.
flags = 0;
9393 to_malloc_log_pgptr->
hdr.
flags = 0;
9437 logpb_start_where_path (to_db_fullname, toext_path, &ext_name, &ext_path, &alloc_extpath, fileof_vols_and_copypaths,
9438 &fromfile_paths_fp);
9448 fromfile_paths_fp, num_perm_vols, volid, from_volname, to_volname);
9476 sprintf (format_string,
"%%d %%%ds", PATH_MAX - 1);
9478 to_volinfo_fp = fopen (to_volname,
"r");
9479 if (to_volinfo_fp !=
NULL)
9484 if (fscanf (to_volinfo_fp, format_string, &fromfile_volid, to_volname) != 2)
9488 to_volname[0] =
'\0';
9527 if (stop_eof ==
true)
9535 volid = (
VOLID) fromfile_volid;
9544 fclose (to_volinfo_fp);
9547 if (fromfile_paths_fp !=
NULL)
9549 fclose (fromfile_paths_fp);
9552 if (alloc_extpath !=
NULL)
9564 if (to_malloc_log_pgptr)
9569 if (fromfile_paths_fp !=
NULL)
9571 fclose (fromfile_paths_fp);
9574 if (alloc_extpath !=
NULL)
9590 sprintf (format_string,
"%%*d %%%ds", PATH_MAX - 1);
9591 if (to_volinfo_fp !=
NULL)
9593 fclose (to_volinfo_fp);
9595 if ((to_volinfo_fp = fopen (to_volname,
"r")) !=
NULL)
9599 if (fscanf (to_volinfo_fp, format_string, to_volname) != 1)
9605 fclose (to_volinfo_fp);
9650 const char *to_logpath,
const char *to_prefix_logname,
const char *toext_path,
9651 const char *fileof_vols_and_renamepaths,
bool extern_rename,
bool force_delete)
9653 char from_volname[PATH_MAX];
9654 char to_volname[PATH_MAX];
9655 char from_mk_path[PATH_MAX];
9656 char to_mk_path[PATH_MAX];
9657 char *alloc_extpath =
NULL;
9658 FILE *to_volinfo_fp =
NULL;
9659 const char *ext_name;
9661 VOLID volid, prev_volid;
9662 FILE *fromfile_paths_fp =
NULL;
9666 struct stat ext_path_stat;
9667 struct stat vol_stat;
9668 char real_pathbuf[PATH_MAX];
9671 if (toext_path !=
NULL && realpath ((
char *) toext_path, real_pathbuf) !=
NULL)
9673 toext_path = real_pathbuf;
9688 if (toext_path !=
NULL)
9690 if (stat (toext_path, &ext_path_stat))
9696 if ((access (toext_path, W_OK) < 0) || !(S_ISDIR (ext_path_stat.st_mode)))
9705 fileof_vols_and_renamepaths, &fromfile_paths_fp);
9715 fromfile_paths_fp, num_perm_vols, volid, from_volname, to_volname);
9720 if (stat (from_volname, &vol_stat))
9726 if ((volid > 0) && (ext_path_stat.st_dev != vol_stat.st_dev))
9757 if (to_volinfo_fp !=
NULL)
9767 fclose (to_volinfo_fp);
9809 if (extern_rename ==
true)
9872 catmsg =
"COMMENT: from renamed database = %s\n";
9883 catmsg =
"ACTIVE: %s %d pages\n";
9921 fileof_vols_and_renamepaths, &fromfile_paths_fp);
9932 fromfile_paths_fp, num_perm_vols, volid, from_volname, to_volname);
9983 if (extern_rename ==
true)
9988 (void)
fileio_mount (thread_p, to_db_fullname, to_volname, volid,
false,
false);
10006 if (fromfile_paths_fp !=
NULL)
10008 fclose (fromfile_paths_fp);
10011 if (alloc_extpath !=
NULL)
10024 if (to_volinfo_fp !=
NULL)
10026 fclose (to_volinfo_fp);
10029 if (fromfile_paths_fp !=
NULL)
10031 fclose (fromfile_paths_fp);
10034 if (alloc_extpath !=
NULL)
10079 const char *prefix_logname,
bool force_delete)
10082 char vol_fullname[PATH_MAX];
10086 FILE *db_volinfo_fp =
NULL;
10087 int read_int_volid;
10090 char format_string[64];
10133 log_pgptr = (
LOG_PAGE *) aligned_log_pgbuf;
10148 loghdr = &disk_hdr;
10172 logpb_delete (thread_p, num_perm_vols, db_fullname, logpath, prefix_logname, force_delete);
10187 sprintf (format_string,
"%%d %%%ds", PATH_MAX - 1);
10189 db_volinfo_fp = fopen (vol_fullname,
"r");
10190 if (db_volinfo_fp !=
NULL)
10194 if (fscanf (db_volinfo_fp, format_string, &read_int_volid, vol_fullname) != 2)
10199 volid = (
VOLID) read_int_volid;
10216 fclose (db_volinfo_fp);
10233 if (vlabel !=
NULL)
10266 if (db_volinfo_fp !=
NULL)
10276 fclose (db_volinfo_fp);
10294 if (loghdr !=
NULL)
10345 struct stat stat_buf;
10347 if (stat (fname, &stat_buf) != 0)
10352 if (first_vol[0] == 0)
10354 strcpy (first_vol, fname);
10374 const char *prefix_logname,
char *first_vol,
bool * is_exist)
10433 va_start (ap, fmt);
10440 const char *fmt, ...)
10444 va_start (ap, fmt);
10451 const int lineno,
const char *fmt, va_list ap)
10453 const char *msglog;
10454 char msg[LINE_MAX];
10457 vsnprintf (msg, LINE_MAX, fmt, ap);
10473 static int in_fatal =
false;
10475 if (in_fatal ==
false)
10505 #if defined(CUBRID_DEBUG) 10506 fprintf (stderr,
"\n--->>>\n*** LOG FATAL ERROR *** file %s - line %d\n", file_name, lineno);
10508 vfprintf (stderr, fmt, ap);
10509 fprintf (stderr,
"\n");
10511 fprintf (stderr,
"\n--->>>\n*** FATAL ERROR *** \n");
10514 fprintf (stderr,
"%s\n",
er_msg ());
10521 if (msglog !=
NULL && strcmp (msglog,
"/dev/null") != 0)
10523 fprintf (stderr,
"Please consult error_log file = %s for additional information\n", msglog);
10529 if (log_exit ==
true)
10531 fprintf (stderr,
"... ABORT/EXIT IMMEDIATELY ...<<<---\n");
10533 #if defined(SERVER_MODE) 10534 boot_donot_shutdown_server_at_exit ();
10547 #if defined(NDEBUG) 10548 exit (EXIT_FAILURE);
10556 #if defined(SERVER_MODE) 10577 char logarv_name[PATH_MAX];
10580 for (i = first_arv_num; i >= 0 && i <= last_arv_num; i++)
10610 char *fullmsg =
NULL;
10617 ||
asprintf (&fullmsg,
"%s%s%s%s", ptr1, ptr2, ptr3, ptr1) < 0)
10632 r = (user_response[0] ==
'1');
10647 if (fullmsg !=
NULL)
10670 vpid.
volid = volid;
10735 #if defined(SERVER_MODE) 10765 #if defined (SERVER_MODE) 10771 if (writer_info->
is_init ==
true)
10777 next_entry = entry->
next;
10779 entry = next_entry;
10782 writer_info->
is_init =
false;
10811 logpb_Arv_page_info_table.
rear = -1;
10839 char *aligned_log_pgbuf;
10851 log_pgptr = (
LOG_PAGE *) aligned_log_pgbuf;
10854 vdes = bg_arv_info->
vdes;
10865 for (; page_id <= last_page_id; page_id += num_pages, phy_pageid += num_pages)
10867 num_pages = MIN (
LOGPB_IO_NPAGES, (
int) (last_page_id - page_id + 1));
10870 if (num_pages <= 0)
10898 "background archiving error, hdr->start_page_id = %d, hdr->current_page_id = %d, error:%d\n",
10902 log_archive_er_log (
"logpb_background_archiving end, hdr->start_page_id = %d, hdr->current_page_id = %d\n",
10920 fprintf (outfp,
"Log Header:\n");
10922 fprintf (outfp,
"\tfirst log page id : %lld\n", (
long long int)
log_Gl.
hdr.
fpageid);
10928 fprintf (outfp,
"\tlowest lsa which hasn't been written to disk : (%lld|%d)\n",
10968 fprintf (outfp,
"Log Parameters:\n");
10970 fprintf (outfp,
"\tgroup_commit_interval_msec : %d\n",
10990 fprintf (outfp,
"Log Statistics:\n");
10994 fprintf (outfp,
"\tgroup commit flush count= %ld\n", log_Stat.
gc_flush_count);
11017 fprintf (outfp,
"\tavg group commit wait time = %f\n", log_Stat.
gc_total_wait_time / temp);
11019 fprintf (outfp,
"\ttotal commit count = %ld\n", log_Stat.
commit_count);
11054 if (
LSA_LE (&nxio_lsa, lsa))
11081 snprintf (buf, buf_size,
"time: N/A");
11082 buf[buf_size - 1] = 0;
11086 ctime_r (&time_val, time_str);
11088 time_str[
strlen (time_str) - 1] = 0;
11089 snprintf (buf, buf_size,
"time: %s", time_str);
11090 buf[buf_size - 1] = 0;
11110 char arv_name[PATH_MAX];
11131 arv_hdr_pgptr = (
LOG_PAGE *) aligned_arv_hdr_pgbuf;
11162 #if !defined(NDEBUG) 11185 char arv_name[PATH_MAX];
11187 int ret_arv_num = -1;
11193 while (arv_num >= 0)
11199 ret_arv_num = arv_num;
11214 return ret_arv_num;
11224 const char *prefix_logname)
11227 char vol_fullname[PATH_MAX];
11246 log_pgptr = (
LOG_PAGE *) aligned_log_pgbuf;
11253 goto delete_fixed_logs;
11260 loghdr = &disk_hdr;
11263 if (loghdr !=
NULL)
11318 return blockid - 1;
11332 bool has_valid_checksum;
11342 *is_page_corrupted = !has_valid_checksum;
11346 #if !defined(NDEBUG) 11351 bool is_log_page_corrupted;
int logpb_remove_all_in_log_path(THREAD_ENTRY *thread_p, const char *db_fullname, const char *logpath, const char *prefix_logname)
bool logpb_find_volume_info_exist(void)
unsigned long log_buffer_full_count
#define ER_LOG_USER_FILE_UNKNOWN
FILEIO_BACKUP_SESSION * fileio_start_backup(THREAD_ENTRY *thread_p, const char *db_full_name_p, INT64 *db_creation_time_p, FILEIO_BACKUP_LEVEL backup_level, LOG_LSA *backup_start_lsa_p, LOG_LSA *backup_checkpoint_lsa_p, FILEIO_BACKUP_RECORD_INFO *all_levels_info_p, FILEIO_BACKUP_SESSION *session_p, FILEIO_ZIP_METHOD zip_method, FILEIO_ZIP_LEVEL zip_level)
LOG_FLUSH_INFO flush_info
LOG_PAGEID logpb_get_page_id(LOG_PAGE *log_pgptr)
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 int logpb_flush_all_append_pages(THREAD_ENTRY *thread_p)
struct log_rec_header LOG_RECORD_HEADER
#define LOG_ARCHIVE_CS_EXIT(thread_p)
int logpb_initialize_header(THREAD_ENTRY *thread_p, LOG_HEADER *loghdr, const char *prefix_logname, DKNPAGES npages, INT64 *db_creation)
#define pthread_mutex_lock(a)
#define difftime64(time1, time2)
static int logpb_get_archive_num_from_info_table(THREAD_ENTRY *thread_p, LOG_PAGEID page_id)
unsigned long gc_flush_count
int os_rename_file(const char *src_path, const char *dest_path)
static void logpb_start_append(THREAD_ENTRY *thread_p, LOG_RECORD_HEADER *header)
int logpb_get_archive_number(THREAD_ENTRY *thread_p, LOG_PAGEID pageid)
bool pgbuf_has_perm_pages_fixed(THREAD_ENTRY *thread_p)
#define ER_LOG_USER_FILE_INCORRECT_PRIMARY_VOLNAME
#define vacuum_er_log_error(er_log_level, msg,...)
const VOLID LOG_DBLOG_INFO_VOLID
static void logpb_dump_information(FILE *out_fp)
VOLID logpb_add_volume(const char *db_fullname, VOLID new_volid, const char *new_volfullname, DISK_VOLPURPOSE new_volpurpose)
cubthread::entry * thread_get_thread_entry_info(void)
int logpb_prior_lsa_append_all_list(THREAD_ENTRY *thread_p)
pthread_mutex_t flush_end_mutex
void fileio_unformat_and_rename(THREAD_ENTRY *thread_p, const char *vol_label_p, const char *new_label_p)
static int logpb_compute_page_checksum(THREAD_ENTRY *thread_p, LOG_PAGE *log_pgptr, int *checksum_crc32)
STATIC_INLINE LOG_BUFFER * logpb_get_log_buffer(LOG_PAGE *log_pg) __attribute__((ALWAYS_INLINE))
VACUUM_LOG_BLOCKID vacuum_get_log_blockid(LOG_PAGEID pageid)
static LOG_PRIOR_NODE * prior_lsa_remove_prior_list(THREAD_ENTRY *thread_p)
void LOG_CS_PROMOTE(THREAD_ENTRY *thread_p)
LOG_PRIOR_NODE * prior_list_header
const char * verbose_file
#define ER_LOG_MAYNEED_MEDIA_RECOVERY
const char * log_Db_fullname
void LOG_CS_DEMOTE(THREAD_ENTRY *thread_p)
static int logpb_peek_header_of_active_log_from_backup(THREAD_ENTRY *thread_p, const char *active_log_path, LOG_HEADER *hdr)
#define MSGCAT_LOG_READ_ERROR_DURING_RESTORE
static int logpb_start_where_path(const char *to_db_fullname, const char *toext_path, const char **toext_name, char **ext_path, char **alloc_extpath, const char *fileof_vols_and_wherepaths, FILE **where_paths_fp)
#define BO_IS_SERVER_RESTARTED()
#define LOG_ESTIMATE_NACTIVE_TRANS
int logpb_fetch_page(THREAD_ENTRY *thread_p, const LOG_LSA *req_lsa, LOG_CS_ACCESS_MODE access_mode, LOG_PAGE *log_pgptr)
bool logpb_is_smallest_lsa_in_archive(THREAD_ENTRY *thread_p)
void logpb_force_flush_header_and_pages(THREAD_ENTRY *thread_p)
int pgbuf_flush_all_unfixed_and_set_lsa_as_null(THREAD_ENTRY *thread_p, VOLID volid)
int logpb_copy_page_from_file(THREAD_ENTRY *thread_p, LOG_PAGEID pageid, LOG_PAGE *log_pgptr)
int logpb_initialize_log_names(THREAD_ENTRY *thread_p, const char *db_fullname, const char *logpath, const char *prefix_logname)
bool LOG_CS_OWN(THREAD_ENTRY *thread_p)
float rel_disk_compatible(void)
volatile LOG_PAGEID pageid
const char * fileio_get_zip_level_string(FILEIO_ZIP_LEVEL zip_level)
#define FILEIO_NO_BACKUP_UNITS
void logpb_fetch_header(THREAD_ENTRY *thread_p, LOG_HEADER *hdr)
bool LSA_EQ(const log_lsa *plsa1, const log_lsa *plsa2)
#define ER_LOG_FATAL_ERROR
#define LOGPB_LAST_ACTIVE_PAGE_ID
pthread_mutex_t flush_start_mutex
void LSA_COPY(log_lsa *plsa1, const log_lsa *plsa2)
#define LOG_APPEND_SETDIRTY_ADD_ALIGN(thread_p, add)
LOG_PAGEID last_append_pageid
bool prior_is_tde_encrypted(const log_prior_node *node)
static bool logpb_Initialized
int logpb_background_archiving(THREAD_ENTRY *thread_p)
#define LOG_IS_PAGE_TDE_ENCRYPTED(log_page_p)
const char * fileio_get_zip_method_string(FILEIO_ZIP_METHOD zip_method)
int logpb_restore(THREAD_ENTRY *thread_p, const char *db_fullname, const char *logpath, const char *prefix_logname, bo_restart_arg *r_args)
void logpb_flush_log_for_wal(THREAD_ENTRY *thread_p, const LOG_LSA *lsa_ptr)
#define FILEIO_FIRST_BACKUP_VOL_INFO
unsigned long total_flush_count_by_trans
#define ER_LOG_PREFIX_NAME_IS_TOO_LONG
void * fileio_read(THREAD_ENTRY *thread_p, int vol_fd, void *io_page_p, PAGEID page_id, size_t page_size)
#define ER_LOG_PAGE_CORRUPTED
#define VACUUM_ER_LOG_ARCHIVES
INT64 last_writer_elapsed_time
LOG_RECORD_HEADER log_header
LOG_LSA sysop_start_postpone_lsa
LOG_PB_GLOBAL_DATA log_Pb
#define CUBRID_MAGIC_LOG_ACTIVE
int fileio_get_next_restore_file(THREAD_ENTRY *thread_p, FILEIO_BACKUP_SESSION *session_p, char *file_name_p, VOLID *vol_id_p)
void logpb_invalid_all_append_pages(THREAD_ENTRY *thread_p)
const int LOG_SYSTEM_TRAN_INDEX
#define LOG_HDRPAGE_FLAG_ENCRYPTED_MASK
ARV_PAGE_INFO page_info[ARV_PAGE_INFO_TABLE_SIZE]
#define CUBRID_MAGIC_LOG_ARCHIVE
#define LOG_ESTIMATE_NOBJ_LOCKS
void logpb_set_tde_algorithm(THREAD_ENTRY *thread_p, LOG_PAGE *log_pgptr, const TDE_ALGORITHM tde_algo)
const char * boot_db_name(void)
VOLID fileio_find_next_perm_volume(THREAD_ENTRY *thread_p, VOLID volid)
LOGPB_PARTIAL_APPEND partial_append
bool logpb_need_wal(const LOG_LSA *lsa)
int fileio_finish_restore(THREAD_ENTRY *thread_p, FILEIO_BACKUP_SESSION *session_p)
CLIENTIDS last_writer_client_info
bool dwb_is_created(void)
FILEIO_BACKUP_SESSION * fileio_start_restore(THREAD_ENTRY *thread_p, const char *db_full_name_p, char *backup_source_p, INT64 match_db_creation_time, PGLENGTH *db_io_page_size_p, float *db_compatibility_p, FILEIO_BACKUP_SESSION *session_p, FILEIO_BACKUP_LEVEL level, bool is_authenticate, INT64 match_backup_creation_time, const char *restore_verbose_file_path, bool is_new_vol_path)
static bool logpb_check_if_exists(const char *fname, char *first_vol)
int fileio_skip_restore_volume(THREAD_ENTRY *thread_p, FILEIO_BACKUP_SESSION *session_p)
#define TRAN_DEFAULT_ISOLATION_LEVEL()
bool fileio_is_volume_exist_and_file(const char *vol_label_p)
void fileio_unformat(THREAD_ENTRY *thread_p, const char *vol_label_p)
#define pgbuf_unfix(thread_p, pgptr)
int fileio_restore_volume(THREAD_ENTRY *thread_p, FILEIO_BACKUP_SESSION *session_p, char *to_vol_label_p, char *verbose_to_vol_label_p, char *prev_vol_label_p, FILEIO_RESTORE_PAGE_BITMAP *page_bitmap, bool is_remember_pages)
int disk_set_link(THREAD_ENTRY *thread_p, INT16 volid, INT16 next_volid, const char *next_volext_fullname, bool logchange, DISK_FLUSH_TYPE flush)
unsigned int lock_get_number_object_locks(void)
#define CUBRID_MAGIC_LOG_INFO
int disk_set_checkpoint(THREAD_ENTRY *thread_p, INT16 volid, const LOG_LSA *log_chkpt_lsa)
int logpb_find_oldest_available_arv_num(THREAD_ENTRY *thread_p)
static LOG_PAGE * logpb_locate_page(THREAD_ENTRY *thread_p, LOG_PAGEID pageid, PAGE_FETCH_MODE fetch_mode)
#define ASSERT_ERROR_AND_SET(error_code)
void thread_sleep(double millisec)
#define ER_BO_UNSORTED_VOLINFO
void logtb_clear_tdes(THREAD_ENTRY *thread_p, LOG_TDES *tdes)
#define ER_LOG_CHECKPOINT_FINISHED
static void logpb_append_archives_removed_to_log_info(int first, int last, const char *info_reason)
#define assert_release(e)
void logpb_fetch_header_with_buffer(THREAD_ENTRY *thread_p, LOG_HEADER *hdr, LOG_PAGE *log_pgptr)
#define REL_MAX_RELEASE_LENGTH
pthread_mutex_t wr_list_mutex
void thread_wakeup_already_had_mutex(cubthread::entry *thread_p, thread_resume_suspend_status resume_reason)
void pgbuf_set_dirty(THREAD_ENTRY *thread_p, PAGE_PTR pgptr, bool free_page)
enum log_setdirty LOG_SETDIRTY
INT64 log_get_clock_msec(void)
STATIC_INLINE int logpb_get_log_buffer_index(LOG_PAGEID log_pageid) __attribute__((ALWAYS_INLINE))
void LOG_CS_ENTER(THREAD_ENTRY *thread_p)
unsigned long gc_commit_request_count
#define LOG_IS_GROUP_COMMIT_ACTIVE()
char user_name[LOG_USERNAME_MAX]
LOG_PRIOR_NODE * prior_list_tail
#define MSGCAT_LOG_LOGINFO_COMMENT_MANY_ARCHIVES_NONEEDED
char log_Name_active[PATH_MAX]
#define ER_IO_MOUNT_LOCKED
const VOLID LOG_DBLOG_ACTIVE_VOLID
unsigned long commit_count
LOG_PAGE * log_page_record_header
VOLID xboot_find_last_permanent(THREAD_ENTRY *thread_p)
static int logpb_append_next_record(THREAD_ENTRY *thread_p, LOG_PRIOR_NODE *ndoe)
void logpb_decache_archive_info(THREAD_ENTRY *thread_p)
static void logpb_dump_to_flush_page(FILE *out_fp)
static ARV_LOG_PAGE_INFO_TABLE logpb_Arv_page_info_table
#define ER_BO_FULL_DATABASE_NAME_IS_TOO_LONG
void fileio_make_log_archive_temp_name(char *log_archive_temp_name_p, const char *log_path_p, const char *db_name_p)
struct timeval TSCTIMEVAL
void logpb_page_get_first_null_block_lsa(THREAD_ENTRY *thread_p, LOG_PAGE *log_pgptr, LOG_LSA *first_null_block_lsa)
#define ER_LOG_FLUSHING_UNUPDATABLE
double use_append_page_sec
#define LOGPB_HEADER_PAGE_ID
#define ER_LOG_MOUNT_FAIL
LOG_GROUP_COMMIT_INFO group_commit_info
bool fileio_is_volume_exist(const char *vol_label_p)
LOG_TDES * LOG_FIND_TDES(int tran_index)
int pgbuf_flush_all_unfixed(THREAD_ENTRY *thread_p, VOLID volid)
void tsc_elapsed_time_usec(TSCTIMEVAL *tv, TSC_TICKS end_tick, TSC_TICKS start_tick)
void logpb_set_dirty(THREAD_ENTRY *thread_p, LOG_PAGE *log_pgptr)
LOG_LSA atomic_sysop_start_lsa
pthread_cond_t flush_start_cond
int logpb_backup(THREAD_ENTRY *thread_p, int num_perm_vols, const char *allbackup_path, FILEIO_BACKUP_LEVEL backup_level, bool delete_unneeded_logarchives, const char *backup_verbose_file_path, int num_threads, FILEIO_ZIP_METHOD zip_method, FILEIO_ZIP_LEVEL zip_level, int skip_activelog, int sleep_msecs, bool separate_keys)
void fileio_remove_all_backup(THREAD_ENTRY *thread_p, int start_level)
pthread_cond_t flush_wait_cond
#define LSA_AS_ARGS(lsa_ptr)
#define VACUUM_NULL_LOG_BLOCKID
static bool logpb_is_any_dirty(THREAD_ENTRY *thread_p)
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)
const VOLID LOG_DBLOG_BKUPINFO_VOLID
#define LOG_MAX_LOGINFO_LINE
const char * log_state_string(TRAN_STATE state)
#define PTR_ALIGN(addr, boundary)
void crypt_crc32(const char *src, int src_len, int *dest)
bool logtb_get_check_interrupt(THREAD_ENTRY *thread_p)
int fileio_clear_backup_info_level(int level, bool is_dealloc, int which_bkvinf)
#define ER_TM_GET_STAT_FAIL
#define LOGPB_PHYSICAL_HEADER_PAGE_ID
std::mutex prior_lsa_mutex
static void logpb_dump_runtime(FILE *outfp)
static void logpb_dismount_log_archive(THREAD_ENTRY *thread_p)
#define MSGCAT_LOG_INPUT_RANGE_ERROR
bool LSA_LT(const log_lsa *plsa1, const log_lsa *plsa2)
int logpb_create_volume_info(const char *db_fullname)
static int logpb_copy_page(THREAD_ENTRY *thread_p, LOG_PAGEID pageid, LOG_CS_ACCESS_MODE access_mode, LOG_PAGE *log_pgptr)
#define er_log_debug(...)
TDE_ALGORITHM logpb_get_tde_algorithm(const LOG_PAGE *log_pgptr)
#define LOG_PAGE_INIT_VALUE
#define ER_BO_CANNOT_CREATE_LINK
LOG_PAGE * logpb_create_page(THREAD_ENTRY *thread_p, LOG_PAGEID pageid)
char log_Name_removed_archive[PATH_MAX]
const VOLID LOG_DBCOPY_VOLID
#define MSGCAT_LOG_LOGINFO_KEYWORD_ARCHIVE
static void logpb_initialize_log_buffer(LOG_BUFFER *log_buffer_p, LOG_PAGE *log_pg)
#define MSGCAT_LOG_LOGINFO_ACTIVE
char * fileio_get_volume_label_by_fd(int vol_fd, bool is_peek)
void fileio_make_temp_log_files_from_backup(char *temp_log_name, VOLID to_volid, FILEIO_BACKUP_LEVEL level, const char *base_log_name)
FILEIO_BACKUP_HEADER * bkuphdr
bool appending_page_tde_encrypted
static int logpb_update_backup_volume_info(const char *bkupinfo_file_name)
char * fileio_get_directory_path(char *path_p, const char *full_name_p)
int logpb_set_page_checksum(THREAD_ENTRY *thread_p, LOG_PAGE *log_pgptr)
#define pgbuf_invalidate_all(thread_p, volid)
void _er_log_debug(const char *file_name, const int line_no, const char *fmt,...)
BOOT_SERVER_STATUS boot_Server_status
bool logpb_is_page_in_archive(LOG_PAGEID pageid)
static void logpb_write_toflush_pages_to_archive(THREAD_ENTRY *thread_p)
void log_wakeup_log_flush_daemon()
const char * fileio_rename(VOLID vol_id, const char *old_label_p, const char *new_label_p)
char log_Name_volinfo[PATH_MAX]
static int logpb_append_prior_lsa_list(THREAD_ENTRY *thread_p, LOG_PRIOR_NODE *list)
#define FILEIO_INITIAL_BACKUP_UNITS
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)
#define ER_LOG_DBBACKUP_FAIL
void * fileio_read_pages(THREAD_ENTRY *thread_p, int vol_fd, char *io_pages_p, PAGEID page_id, int num_pages, size_t page_size)
int fileio_read_backup_info_entries(FILE *fp, int which_bkvinf)
unsigned long last_commit_count_while_using_a_page
void fileio_page_bitmap_list_init(FILEIO_RESTORE_PAGE_BITMAP_LIST *page_bitmap_list)
const char * er_get_msglog_filename(void)
LOG_LSA tail_topresult_lsa
#define ER_IO_WRITE_OUT_OF_SPACE
LOG_PRIOR_NODE * prior_flush_list_header
static int logpb_remove_archive_logs_internal(THREAD_ENTRY *thread_p, int first, int last, const char *info_reason)
double total_flush_hdr_sec_by_LFT
#define ER_BO_CANNOT_CREATE_VOL
static void logpb_fatal_error_internal(THREAD_ENTRY *thread_p, bool log_exit, bool need_flush, const char *file_name, const int lineno, const char *fmt, va_list ap)
static int logpb_page_has_valid_checksum(THREAD_ENTRY *thread_p, LOG_PAGE *log_pgptr, bool *has_valid_checksum)
int fileio_symlink(const char *src_p, const char *dest_p, int overwrite)
#define ER_TDE_ENCRYPTION_LOGPAGE_ERORR_AND_OFF_TDE
LOG_LSA tail_topresult_lsa
#define TR_TABLE_CS_ENTER(thread_p)
#define ER_BO_VOLUME_EXISTS
static void logpb_append_data(THREAD_ENTRY *thread_p, int length, const char *data)
#define ER_LOG_NAME_IS_TOO_LONG
int logpb_initialize_pool(THREAD_ENTRY *thread_p)
static int logpb_verify_length(const char *db_fullname, const char *log_path, const char *log_prefix)
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)
INTL_CODESET lang_charset(void)
static int logpb_copy_volume(THREAD_ENTRY *thread_p, VOLID from_volid, const char *tonew_volname, INT64 *db_creation, LOG_LSA *vol_chkpt_lsa)
volatile LOG_PHY_PAGEID phy_pageid
int disk_set_creation(THREAD_ENTRY *thread_p, INT16 volid, const char *new_vol_fullname, const INT64 *new_dbcreation, const LOG_LSA *new_chkptlsa, bool logchange, DISK_FLUSH_TYPE flush)
void fileio_page_bitmap_list_add(FILEIO_RESTORE_PAGE_BITMAP_LIST *page_bitmap_list, FILEIO_RESTORE_PAGE_BITMAP *page_bitmap)
const char * tde_get_algorithm_name(TDE_ALGORITHM tde_algo)
const char * boot_db_full_name()
void boot_donot_shutdown_client_at_exit(void)
#define MSGCAT_LOG_LOGINFO_ARCHIVE
void er_set(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
db_client_type client_type
unsigned long total_append_page_count
static void logpb_archive_active_log(THREAD_ENTRY *thread_p)
int fileio_get_volume_max_suffix(void)
void LOG_CS_ENTER_READ_MODE(THREAD_ENTRY *thread_p)
char * fileio_get_volume_label(VOLID vol_id, bool is_peek)
static bool logpb_is_dirty(THREAD_ENTRY *thread_p, LOG_PAGE *log_pgptr)
void logpb_dump_checkpoint_trans(FILE *out_fp, int length, void *data)
const VOLID LOG_DBLOG_ARCHIVE_VOLID
int fileio_add_volume_to_backup_info(const char *name_p, FILEIO_BACKUP_LEVEL level, int unit_num, int which_bkvinf)
unsigned long last_flush_count_by_trans
#define MSGCAT_LOG_DELETE_BKVOLS
const char * fileio_get_base_file_name(const char *full_name_p)
void logpb_force_flush_pages(THREAD_ENTRY *thread_p)
static void logpb_initialize_backup_info(LOG_HEADER *loghdr)
#define ER_LOG_USER_FILE_UNORDERED_ENTRIES
const VOLID LOG_DBFIRST_VOLID
std::int64_t VACUUM_LOG_BLOCKID
const VOLID LOG_DBVOLINFO_VOLID
void logpb_checkpoint_trans(LOG_INFO_CHKPT_TRANS *chkpt_entries, log_tdes *tdes, int &ntrans, int &ntops, LOG_LSA &smallest_lsa)
static bool logpb_is_log_active_from_backup_useful(THREAD_ENTRY *thread_p, const char *active_log_path, const char *db_full_name)
unsigned long flush_hdr_call_count
#define ER_TM_IS_NOT_WRITEABLE
LOG_PAGE * logpb_fetch_from_archive(THREAD_ENTRY *thread_p, LOG_PAGEID pageid, LOG_PAGE *log_pgptr, int *ret_arv_num, LOG_ARV_HEADER *ret_arv_hdr, bool is_fatal)
char log_Name_info[PATH_MAX]
char * disk_get_link(THREAD_ENTRY *thread_p, INT16 volid, INT16 *next_volid, char *next_volext_fullname)
#define MSGCAT_LOG_BACKUP_HALTED_BY_USER
#define ASSERT_ALIGN(ptr, alignment)
#define ER_LOG_BKUP_DUPLICATE_REQUESTS
static int logpb_next_where_path(const char *to_db_fullname, const char *toext_path, const char *ext_name, char *ext_path, const char *fileof_vols_and_wherepaths, FILE *where_paths_fp, int num_perm_vols, VOLID volid, char *from_volname, char *to_volname)
void set_nxio_lsa(const LOG_LSA &next_io_lsa)
int prm_get_integer_value(PARAM_ID prm_id)
void logpb_invalidate_pool(THREAD_ENTRY *thread_p)
void event_log_log_flush_thr_wait(THREAD_ENTRY *thread_p, int flush_count, clientids *client_info, int flush_time, int flush_wait_time, int writer_time)
static int logpb_check_stop_at_time(FILEIO_BACKUP_SESSION *session, time_t stop_at, time_t backup_time)
LOG_PAGE * logpb_fetch_start_append_page_new(THREAD_ENTRY *thread_p)
LOG_PAGEID logpb_checkpoint(THREAD_ENTRY *thread_p)
DISK_VOLPURPOSE xdisk_get_purpose(THREAD_ENTRY *thread_p, VOLID volid)
#define ER_LOG_BACKUP_LEVEL_NOGAPS
void fileio_close(int vol_fd)
void logpb_dump_log_page_area(THREAD_ENTRY *thread_p, LOG_PAGE *log_pgptr, int offset, int length)
#define CUBRID_MAGIC_MAX_LENGTH
#define ER_OUT_OF_VIRTUAL_MEMORY
void LOG_CS_EXIT(THREAD_ENTRY *thread_p)
void LOG_RESET_APPEND_LSA(const LOG_LSA *lsa)
LOG_PAGEID current_page_id
void fileio_page_bitmap_list_destroy(FILEIO_RESTORE_PAGE_BITMAP_LIST *page_bitmap_list)
#define MSGCAT_LOG_LOGINFO_COMMENT
unsigned long last_commit_count_in_flush_pages
void fileio_abort_backup(THREAD_ENTRY *thread_p, FILEIO_BACKUP_SESSION *session_p, bool does_unformat_bk)
LOG_LSA prior_lsa_next_record_with_lock(THREAD_ENTRY *thread_p, LOG_PRIOR_NODE *node, log_tdes *tdes)
#define LOGPB_ACTIVE_NPAGES
void xlogpb_dump_stat(FILE *outfp)
void logpb_remove_archive_logs(THREAD_ENTRY *thread_p, const char *info_reason)
bool LSA_LE(const log_lsa *plsa1, const log_lsa *plsa2)
PGLENGTH logpb_find_header_parameters(THREAD_ENTRY *thread_p, const bool force_read_log_header, const char *db_fullname, const char *logpath, const char *prefix_logname, PGLENGTH *io_page_size, PGLENGTH *log_page_size, INT64 *creation_time, float *db_compatibility, int *db_charset)
bool log_is_log_flush_daemon_available()
#define ER_LOG_WRITE_OUT_OF_SPACE
int logpb_check_exist_any_volumes(THREAD_ENTRY *thread_p, const char *db_fullname, const char *logpath, const char *prefix_logname, char *first_vol, bool *is_exist)
#define LOGPB_FIND_BUFPTR(bufid)
void tde_make_keys_file_fullname(char *keys_vol_fullname, const char *db_full_name, bool ignore_parm)
FILEIO_RESTORE_PAGE_BITMAP * fileio_page_bitmap_list_find(FILEIO_RESTORE_PAGE_BITMAP_LIST *page_bitmap_list, int vol_id)
LOG_PAGEID last_sync_pageid
LOG_PAGEID logical_pageid
#define LOGPB_AT_NEXT_ARCHIVE_PAGE_ID(pageid)
void log_wakeup_remove_log_archive_daemon()
int logpb_read_page_from_file(THREAD_ENTRY *thread_p, LOG_PAGEID pageid, LOG_CS_ACCESS_MODE access_mode, LOG_PAGE *log_pgptr)
char log_Prefix[PATH_MAX]
#define VACUUM_ER_LOG_MASTER
int logpb_rename_all_volumes_files(THREAD_ENTRY *thread_p, VOLID num_perm_vols, const char *to_db_fullname, const char *to_logpath, const char *to_prefix_logname, const char *toext_path, const char *fileof_vols_and_renamepaths, bool extern_rename, bool force_delete)
char keys_file_path[PATH_MAX]
#define ER_LOG_BACKUP_CS_ENTER
int asprintf(char **ptr, const char *format,...)
void fileio_dismount(THREAD_ENTRY *thread_p, int vol_fd)
int logpb_delete(THREAD_ENTRY *thread_p, VOLID num_perm_vols, const char *db_fullname, const char *logpath, const char *prefix_logname, bool force_delete)
#define DB_MAX_PATH_LENGTH
LOG_PAGE * logpb_create_header_page(THREAD_ENTRY *thread_p)
static bool logpb_is_archive_available(THREAD_ENTRY *thread_p, int arv_num)
const char * rel_name(void)
pthread_mutex_t flush_wait_mutex
static void logpb_finalize_flush_info(void)
int fileio_synchronize_all(THREAD_ENTRY *thread_p, bool is_include)
DKNPAGES chkpt_every_npages
FILEIO_BACKUP_SESSION * fileio_finish_backup(THREAD_ENTRY *thread_p, FILEIO_BACKUP_SESSION *session_p)
void log_append_init_zip()
static void logpb_dump_log_header(FILE *outfp)
#define MSGCAT_LOG_DATABASE_BACKUP_WAS_TAKEN
#define strncpy_bufsize(buf, str)
LOGWR_ENTRY * writer_list
const char * er_msg(void)
void fileio_make_removed_log_archive_name(char *log_archive_name_p, const char *log_path_p, const char *db_name_p)
#define LOG_HDRPAGE_FLAG_ENCRYPTED_AES
double last_flush_sec_by_trans
void tsc_getticks(TSC_TICKS *tck)
STATIC_INLINE bool perfmon_is_perf_tracking(void) __attribute__((ALWAYS_INLINE))
#define TIME_SIZE_OF_DUMP_LOG_INFO
#define FILEIO_MAX_USER_RESPONSE_SIZE
bool log_is_in_crash_recovery(void)
static bool logpb_Logging
#define vacuum_er_log(er_log_level, msg,...)
bool vacuum_is_safe_to_remove_archives(void)
int logtb_define_trantable_log_latch(THREAD_ENTRY *thread_p, int num_expected_tran_indices)
char current_path[PATH_MAX]
DKNPAGES xdisk_get_total_numpages(THREAD_ENTRY *thread_p, VOLID volid)
bool LSA_ISNULL(const log_lsa *lsa_ptr)
int util_compare_filepath(const char *file1, const char *file2)
int logtb_reflect_global_unique_stats_to_btree(THREAD_ENTRY *thread_p)
#define LOGPB_IS_ARCHIVE_PAGE(pageid)
#define MSGCAT_LOG_LOGINFO_COMMENT_ARCHIVE_NONEEDED
#define ER_LOG_MAX_ARCHIVES_HAS_BEEN_EXCEEDED
int ndirty_pages_post_bkup
void fileio_finalize_backup_info(int which_bkvinf)
#define LOG_HDRPAGE_FLAG_ENCRYPTED_ARIA
pthread_cond_t flush_end_cond
#define pgbuf_fix(thread_p, vpid, fetch_mode, requestmode, condition)
void thread_lock_entry(cubthread::entry *thread_p)
LOG_LSA start_postpone_lsa
int logpb_flush_page(THREAD_ENTRY *thread_p, LOG_PAGE *log_pgptr)
void log_append_final_zip()
#define MSGCAT_LOG_LOGINFO_COMMENT_UNUSED_ARCHIVE_NAME
char log_Name_bkupinfo[PATH_MAX]
void logpb_flush_pages_direct(THREAD_ENTRY *thread_p)
#define CEIL_PTVDIV(dividend, divisor)
void logpb_flush_header(THREAD_ENTRY *thread_p)
char * logpb_backup_level_info_to_string(char *buf, int buf_size, const LOG_HDR_BKUP_LEVEL_INFO *info)
#define ER_LOG_NOTIN_ARCHIVE
LOG_PRIOR_LSA_INFO prior_info
char log_Name_bg_archive[PATH_MAX]
int pgbuf_flush_all(THREAD_ENTRY *thread_p, VOLID volid)
void er_set_with_oserror(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
#define detailed_er_log(...)
int count(int &result, const cub_regex_object ®, const std::string &src, const int position, const INTL_CODESET codeset)
#define MSGCAT_CATALOG_CUBRID
void logpb_finalize_pool(THREAD_ENTRY *thread_p)
void fileio_make_log_active_name(char *log_active_name_p, const char *log_path_p, const char *db_name_p)
#define ER_LOG_USER_FILE_WITHOUT_ENOUGH_ENTRIES
int timeval_to_timespec(struct timespec *to, const struct timeval *from)
static void logpb_set_unavailable_archive(THREAD_ENTRY *thread_p, int arv_num)
void fileio_make_log_info_name(char *log_info_name_p, const char *log_path_p, const char *db_name_p)
void logpb_debug_check_log_page(THREAD_ENTRY *thread_p, void *log_pgptr_ptr)
#define ER_TDE_COPY_KEYS_FILE_FAIL
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)
void logpb_copy_from_log(THREAD_ENTRY *thread_p, char *area, int length, LOG_LSA *log_lsa, LOG_PAGE *log_page_p)
void fileio_abort_restore(THREAD_ENTRY *thread_p, FILEIO_BACKUP_SESSION *session_p)
#define MSGCAT_LOG_LOGINFO_REMOVE_REASON
LOG_PAGEID run_nxchkpt_atpageid
#define LOG_APPEND_ALIGN(thread_p, current_setdirty)
const char * envvar_get(const char *name)
bool logtb_is_interrupted(THREAD_ENTRY *thread_p, bool clear, bool *continue_checking)
int logpb_remove_archive_logs_exceed_limit(THREAD_ENTRY *thread_p, int max_count)
void logpb_vacuum_reset_log_header_cache(THREAD_ENTRY *thread_p, LOG_HEADER *loghdr)
bool LOG_CS_OWN_WRITE_MODE(THREAD_ENTRY *thread_p)
int logpb_check_and_reset_temp_lsa(THREAD_ENTRY *thread_p, VOLID volid)
static void error(const char *msg)
#define VACUUM_ER_LOG_VACUUM_DATA
void thread_unlock_entry(cubthread::entry *thread_p)
void * fileio_write(THREAD_ENTRY *thread_p, int vol_fd, void *io_page_p, PAGEID page_id, size_t page_size, FILEIO_WRITE_MODE write_mode)
FILEIO_BACKUP_DB_BUFFER dbfile
#define MSGCAT_LOG_ENTER_Y2_CONFIRM
REL_COMPATIBILITY rel_get_disk_compatible(float db_level, REL_FIXUP_FUNCTION **fixups)
#define LOGPB_FIRST_ACTIVE_PAGE_ID
std::function< void(log_tdes &)> map_func
int logpb_recreate_volume_info(THREAD_ENTRY *thread_p)
STATIC_INLINE void perfmon_inc_stat(THREAD_ENTRY *thread_p, PERF_STAT_ID psid) __attribute__((ALWAYS_INLINE))
FILEIO_RESTORE_PAGE_BITMAP * fileio_page_bitmap_create(int vol_id, int total_pages)
#define LOG_READ_NEXT_TRANID
log_global::log_global() char log_Path[PATH_MAX]
int logpb_read_page_from_active_log(THREAD_ENTRY *thread_p, LOG_PAGEID pageid, int num_pages, bool decrypt_needed, LOG_PAGE *log_pgptr)
int log_default_input_for_archive_log_location
#define LOG_ARCHIVE_CS_OWN_WRITE_MODE(thread_p)
int fileio_get_max_name(const char *given_path_p, long int *file_name_max_p, long int *path_name_max_p)
#define ER_LOG_NOFULL_DATABASE_NAME_IS_TOO_LONG
int logpb_page_check_corruption(THREAD_ENTRY *thread_p, LOG_PAGE *log_pgptr, bool *is_page_corrupted)
int fileio_request_user_response(THREAD_ENTRY *thread_p, FILEIO_REMOTE_PROMPT_TYPE prompt_id, const char *prompt_p, char *response_p, const char *failure_prompt_p, int range_low, int range_high, const char *secondary_prompt_p, int reprompt_value)
double total_flush_sec_by_trans
void tran_cache_tran_settings(int tran_index, int lock_timeout, TRAN_ISOLATION tran_isolation)
#define ER_LOG_BKUP_INCOMPATIBLE
void logpb_fatal_error(THREAD_ENTRY *thread_p, bool log_exit, const char *file_name, const int lineno, const char *fmt,...)
static void logpb_dump_pages(FILE *out_fp)
const VOLID LOG_DBTDE_KEYS_VOLID
const char * fileio_get_backup_info_volume_name(FILEIO_BACKUP_LEVEL level, int unit_num, int which_bkvinf)
#define ER_LOG_CANNOT_ACCESS_BACKUP
LOG_PAGEID vacuum_min_log_pageid_to_keep(THREAD_ENTRY *thread_p)
bool tde_validate_keys_file(int vdes)
#define MSGCAT_LOG_MAX_ARCHIVES_HAS_BEEN_EXCEEDED
int fileio_synchronize(THREAD_ENTRY *thread_p, int vol_fd, const char *vlabel, FILEIO_SYNC_OPTION sync_dwb)
unsigned long direct_flush_count
int fileio_get_backup_volume(THREAD_ENTRY *thread_p, const char *db_fullname, const char *logpath, const char *user_backuppath, int try_level, char *from_volbackup)
void disk_unlock_extend(void)
static void logpb_end_append(THREAD_ENTRY *thread_p, LOG_RECORD_HEADER *header)
bool logpb_exist_log(THREAD_ENTRY *thread_p, const char *db_fullname, const char *logpath, const char *prefix_logname)
struct arv_page_info ARV_PAGE_INFO
#define ER_LOG_CREATE_LOGARCHIVE_FAIL
BACKGROUND_ARCHIVING_INFO bg_archive_info
LOG_PAGEID logpb_find_oldest_available_page_id(THREAD_ENTRY *thread_p)
int logpb_fetch_start_append_page(THREAD_ENTRY *thread_p)
const char * get_db_user() const
#define LOG_ARCHIVE_CS_ENTER(thread_p)
static int logpb_add_archive_page_info(THREAD_ENTRY *thread_p, int arv_num, LOG_PAGEID start_page, LOG_PAGEID end_page)
#define free_and_init(ptr)
unsigned long total_sync_count
#define LOG_ISRESTARTED()
#define LOGPB_NEXT_ARCHIVE_PAGE_ID
VOLID fileio_find_previous_perm_volume(THREAD_ENTRY *thread_p, VOLID volid)
void LSA_SET_NULL(log_lsa *lsa_ptr)
#define FILEIO_SECOND_BACKUP_VOL_INFO
int fileio_write_backup_info_entries(FILE *fp, int which_bkvinf)
int tde_copy_keys_file(THREAD_ENTRY *thread_p, const char *dest_fullname, const char *src_fullname, bool keep_dest_mount, bool keep_src_mount)
void fileio_make_dwb_name(char *dwb_name_p, const char *dwb_path_p, const char *db_name_p)
int fileio_backup_volume(THREAD_ENTRY *thread_p, FILEIO_BACKUP_SESSION *session_p, const char *from_vol_label_p, VOLID from_vol_id, PAGEID last_page, bool is_only_updated_pages)
const VOLID LOG_DBLOG_BG_ARCHIVE_VOLID
bool LSA_GT(const log_lsa *plsa1, const log_lsa *plsa2)
#define MSGCAT_LOG_LOGINFO_COMMENT_FROM_RENAMED
char log_Archive_path[PATH_MAX]
double last_flush_hdr_sec_by_LFT
#define ER_LOG_ARCHIVE_CREATED
FILEIO_THREAD_INFO read_thread_info
bool prm_get_bool_value(PARAM_ID prm_id)
static int logpb_initialize_flush_info(void)
#define MSGCAT_LOG_NEWLOCATION
#define ARV_PAGE_INFO_TABLE_SIZE
#define ER_LOG_INCOMPATIBLE_DATABASE
static void logpb_dump_parameter(FILE *outfp)
static void logpb_next_append_page(THREAD_ENTRY *thread_p, LOG_SETDIRTY current_setdirty)
LOG_RECORD_HEADER * record_header_p
static int logpb_get_guess_archive_num(THREAD_ENTRY *thread_p, LOG_PAGEID pageid)
LOG_LSA sysop_start_postpone_lsa
unsigned long async_commit_request_count
bool logpb_is_pool_initialized(void)
#define ALLOC_COPY(PTR, STR)
FILEIO_BACKUP_SESSION * fileio_initialize_backup(const char *db_full_name_p, const char *backup_destination_p, FILEIO_BACKUP_SESSION *session_p, FILEIO_BACKUP_LEVEL level, const char *verbose_file_path, int num_threads, int sleep_msecs)
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)
struct log_hdrpage LOG_HDRPAGE
const size_t LOG_USERNAME_MAX
char * msgcat_message(int cat_id, int set_id, int msg_id)
#define ER_LOG_DOESNT_CORRESPOND_TO_DATABASE
void fileio_make_backup_volume_info_name(char *backup_volinfo_name_p, const char *backup_info_path_p, const char *db_name_p)
void logpb_flush_pages(THREAD_ENTRY *thread_p, LOG_LSA *flush_lsa)
void fileio_make_backup_name(char *backup_name_p, const char *no_path_vol_name_p, const char *backup_path_p, FILEIO_BACKUP_LEVEL level, int unit_num)
#define ER_LOG_UPTODATE_ERROR
void * fileio_write_pages(THREAD_ENTRY *thread_p, int vol_fd, char *io_pages_p, PAGEID page_id, int num_pages, size_t page_size, FILEIO_WRITE_MODE write_mode)
STATIC_INLINE void perfmon_add_stat(THREAD_ENTRY *thread_p, PERF_STAT_ID psid, UINT64 amount) __attribute__((ALWAYS_INLINE))
#define ER_LOG_BACKUP_CS_EXIT
int log_dump_log_info(const char *logname_info, bool also_stdout, const char *fmt,...)
#define VACUUM_IS_ER_LOG_LEVEL_SET(er_log_level)
enum log_cs_access_mode LOG_CS_ACCESS_MODE
LOG_LSA get_nxio_lsa() const
unsigned long total_commit_count_in_flush_pages
FILEIO_BACKUP_BUFFER bkup
INT16 xdisk_get_purpose_and_sys_lastpage(THREAD_ENTRY *thread_p, INT16 volid, DISK_VOLPURPOSE *vol_purpose, INT32 *sys_lastpage)
void logpb_dump(THREAD_ENTRY *thread_p, FILE *out_fp)
unsigned long log_buffer_flush_count_by_replacement
int logpb_copy_page_from_log_buffer(THREAD_ENTRY *thread_p, LOG_PAGEID pageid, LOG_PAGE *log_pgptr)
int fileio_copy_volume(THREAD_ENTRY *thread_p, int from_vol_desc, DKNPAGES npages, const char *to_vol_label_p, VOLID to_vol_id, bool is_reset_recovery_info)
static int logpb_fetch_header_from_active_log(THREAD_ENTRY *thread_p, const char *db_fullname, const char *logpath, const char *prefix_logname, LOG_HEADER *hdr, LOG_PAGE *log_pgptr)
unsigned long flushall_append_pages_call_count
int dwb_destroy(THREAD_ENTRY *thread_p)
VACUUM_LOG_BLOCKID logpb_last_complete_blockid(void)
#define ER_LOG_INCOMPATIBLE_PREFIX_NAME
#define ER_TDE_INVALID_KEYS_FILE
void logtb_undefine_trantable(THREAD_ENTRY *thread_p)
void logtb_find_smallest_lsa(THREAD_ENTRY *thread_p, LOG_LSA *lsa)
void disk_lock_extend(void)
size_t logpb_get_memsize()
#define ER_TM_CROSS_DEVICE_LINK
static int logpb_backup_for_volume(THREAD_ENTRY *thread_p, VOLID volid, LOG_LSA *chkpt_lsa, FILEIO_BACKUP_SESSION *session, bool only_updated)
#define pthread_mutex_unlock(a)
int logpb_write_page_to_disk(THREAD_ENTRY *thread_p, LOG_PAGE *log_pgptr, LOG_PAGEID logical_pageid)
#define ER_LOG_CHECKPOINT_STARTED
const char * rel_release_string(void)
int logpb_copy_database(THREAD_ENTRY *thread_p, VOLID num_perm_vols, const char *to_db_fullname, const char *to_logpath, const char *to_prefix_logname, const char *toext_path, const char *fileof_vols_and_copypaths)
LOG_LSA tran_start_postpone_lsa
#define TR_TABLE_CS_EXIT(thread_p)
int timeval_add_msec(struct timeval *added_time, const struct timeval *start_time, int msec)
int tde_decrypt_log_page(const LOG_PAGE *logpage_cipher, TDE_ALGORITHM tde_algo, LOG_PAGE *logpage_plain)
double gc_total_wait_time
void logpb_initialize_logging_statistics(void)
LOG_PHY_PAGEID logpb_to_physical_pageid(LOG_PAGEID logical_pageid)
int logpb_checkpoint_topops(THREAD_ENTRY *thread_p, LOG_INFO_CHKPT_SYSOP *&chkpt_topops, LOG_INFO_CHKPT_TRANS *chkpt_trans, LOG_REC_CHKPT &tmp_chkpt, log_tdes *tdes, int &ntops, size_t &length_all_tops)
void logpb_create_log_info(const char *logname_info, const char *db_fullname)
int pgbuf_flush_checkpoint(THREAD_ENTRY *thread_p, const LOG_LSA *flush_upto_lsa, const LOG_LSA *prev_chkpt_redo_lsa, LOG_LSA *smallest_lsa, int *flushed_page_cnt)
#define LOGPB_IS_FIRST_PHYSICAL_PAGE(pageid)
#define pthread_mutex_init(a, b)
int fileio_open(const char *vol_label_p, int flags, int mode)
LOGPB_APPENDREC_STATUS status
LOG_LSA atomic_sysop_start_lsa
const size_t LOGPB_IO_NPAGES
void fileio_make_volume_info_name(char *vol_info_name_p, const char *db_full_name_p)
#define pthread_mutex_destroy(a)
static void map_all_tdes(const map_func &func)
#define MSGCAT_LOG_STARTS
LOG_LOGGING_STAT log_Stat
#define DB_CONNECTION_STATUS_NOT_CONNECTED
#define ER_LOG_COMPILATION_RELEASE
void logpb_initialize_arv_page_info_table(void)
#define ER_LOG_CREATE_DBBACKUP_DIRINFO
#define LOG_APPEND_ADVANCE_WHEN_DOESNOT_FIT(thread_p, length)
int db_set_page_size(PGLENGTH io_page_size, PGLENGTH log_page_size)
int logpb_scan_volume_info(THREAD_ENTRY *thread_p, const char *db_fullname, VOLID ignore_volid, VOLID start_volid, int(*fun)(THREAD_ENTRY *thread_p, VOLID xvolid, const char *vlabel, void *args), void *args)
static void logpb_finalize_writer_info(void)
void pgbuf_reset_temp_lsa(PAGE_PTR pgptr)
LOG_RECORD_HEADER original_record_header
const TRANID LOG_SYSTEM_TRANID
unsigned long total_commit_count_while_using_a_page
char buffer_log_page[IO_MAX_PAGE_SIZE+MAX_ALIGNMENT]
void logpb_fatal_error_exit_immediately_wo_flush(THREAD_ENTRY *thread_p, const char *file_name, const int lineno, const char *fmt,...)
static bool logpb_remote_ask_user_before_delete_volumes(THREAD_ENTRY *thread_p, const char *volpath)
static LOG_PAGE ** logpb_writev_append_pages(THREAD_ENTRY *thread_p, LOG_PAGE **to_flush, DKNPAGES npages)
#define LOG_READ_ADVANCE_WHEN_DOESNT_FIT(thread_p, length, lsa, log_pgptr)
#define LOG_LAST_APPEND_PTR()
int fileio_get_volume_descriptor(VOLID vol_id)
int tde_encrypt_log_page(const LOG_PAGE *logpage_plain, TDE_ALGORITHM tde_algo, LOG_PAGE *logpage_cipher)
#define log_archive_er_log(...)
#define ER_BO_CANNOT_FINE_VOLINFO
#define MSGCAT_LOG_LOGARCHIVE_NEEDED
static void logpb_append_crumbs(THREAD_ENTRY *thread_p, int num_crumbs, const LOG_CRUMB *crumbs)
static int logpb_copy_log_header(THREAD_ENTRY *thread_p, LOG_HEADER *to_hdr, const LOG_HEADER *from_hdr)