61 #if defined(SERVER_MODE) 161 #define FILE_HEADER_ALIGNED_SIZE ((INT16) (DB_ALIGN (sizeof (FILE_HEADER), MAX_ALIGNMENT))) 164 #define FILE_FLAG_NUMERABLE 0x1 165 #define FILE_FLAG_TEMPORARY 0x2 166 #define FILE_FLAG_ENCRYPTED_AES 0x4 167 #define FILE_FLAG_ENCRYPTED_ARIA 0x8 169 #define FILE_FLAG_ENCRYPTED_MASK 0x0000000c 171 #define FILE_IS_NUMERABLE(fh) (((fh)->file_flags & FILE_FLAG_NUMERABLE) != 0) 172 #define FILE_IS_TEMPORARY(fh) (((fh)->file_flags & FILE_FLAG_TEMPORARY) != 0) 173 #define FILE_IS_TDE_ENCRYPTED(fh) (((fh)->file_flags & FILE_FLAG_ENCRYPTED_MASK) != 0) 175 #define FILE_CACHE_LAST_FIND_NTH(fh) \ 176 (FILE_IS_NUMERABLE (fh) && FILE_IS_TEMPORARY (fh) && (fh)->type == FILE_TEMP) 179 #define FILE_TYPE_CAN_BE_NUMERABLE(ftype) ((ftype) == FILE_EXTENDIBLE_HASH \ 180 || (ftype) == FILE_EXTENDIBLE_HASH_DIRECTORY \ 181 || (ftype) == FILE_TEMP) 182 #define FILE_TYPE_IS_ALWAYS_TEMP(ftype) ((ftype) == FILE_TEMP \ 183 || (ftype) == FILE_QUERY_AREA) 184 #define FILE_TYPE_IS_SOMETIMES_TEMP(ftype) ((ftype) == FILE_EXTENDIBLE_HASH \ 185 || (ftype) == FILE_EXTENDIBLE_HASH_DIRECTORY) 186 #define FILE_TYPE_IS_NEVER_TEMP(ftype) (!FILE_TYPE_IS_ALWAYS_TEMP (ftype) && !FILE_TYPE_IS_SOMETIMES_TEMP (ftype)) 189 #define FILE_GET_HEADER_VPID(vfid, vpid) (vpid)->volid = (vfid)->volid; (vpid)->pageid = (vfid)->fileid 192 #define FILE_HEADER_GET_PART_FTAB(fh, parttab) \ 193 assert ((fh)->offset_to_partial_ftab >= FILE_HEADER_ALIGNED_SIZE && (fh)->offset_to_partial_ftab < DB_PAGESIZE); \ 194 (parttab) = (FILE_EXTENSIBLE_DATA *) (((char *) fh) + (fh)->offset_to_partial_ftab) 196 #define FILE_HEADER_GET_FULL_FTAB(fh, fulltab) \ 197 assert (!FILE_IS_TEMPORARY (fh)); \ 198 assert ((fh)->offset_to_full_ftab>= FILE_HEADER_ALIGNED_SIZE && (fh)->offset_to_full_ftab < DB_PAGESIZE); \ 199 (fulltab) = (FILE_EXTENSIBLE_DATA *) (((char *) fh) + (fh)->offset_to_full_ftab) 201 #define FILE_HEADER_GET_USER_PAGE_FTAB(fh, pagetab) \ 202 assert (FILE_IS_NUMERABLE (fh)); \ 203 assert ((fh)->offset_to_user_page_ftab >= FILE_HEADER_ALIGNED_SIZE && (fh)->offset_to_user_page_ftab < DB_PAGESIZE); \ 204 (pagetab) = (FILE_EXTENSIBLE_DATA *) (((char *) fh) + (fh)->offset_to_user_page_ftab) 233 #define FILE_EXTDATA_HEADER_ALIGNED_SIZE (DB_ALIGN (sizeof (FILE_EXTENSIBLE_DATA), MAX_ALIGNMENT)) 241 int (*compare_func) (
const void *,
const void *);
267 #define FILE_FULL_PAGE_BITMAP 0xFFFFFFFFFFFFFFFF 268 #define FILE_EMPTY_PAGE_BITMAP 0x0000000000000000 270 #define FILE_ALLOC_BITMAP_NBITS ((int) (sizeof (FILE_ALLOC_BITMAP) * CHAR_BIT)) 281 #define FILE_PARTIAL_SECTOR_INITIALIZER { VSID_INITIALIZER, 0 } 288 #define FILE_TABLESPACE_DEFAULT_RATIO_EXPAND ((float) 0.01) 289 #define FILE_TABLESPACE_DEFAULT_MIN_EXPAND (DISK_SECTOR_NPAGES * DB_PAGESIZE); 290 #define FILE_TABLESPACE_DEFAULT_MAX_EXPAND (DISK_SECTOR_NPAGES * DB_PAGESIZE * 1024); 292 #define FILE_TABLESPACE_FOR_PERM_NPAGES(tabspace, npages) \ 293 ((FILE_TABLESPACE *) (tabspace))->initial_size = (INT64) MAX (1, npages) * DB_PAGESIZE; \ 294 ((FILE_TABLESPACE *) (tabspace))->expand_ratio = FILE_TABLESPACE_DEFAULT_RATIO_EXPAND; \ 295 ((FILE_TABLESPACE *) (tabspace))->expand_min_size = FILE_TABLESPACE_DEFAULT_MIN_EXPAND; \ 296 ((FILE_TABLESPACE *) (tabspace))->expand_max_size = FILE_TABLESPACE_DEFAULT_MAX_EXPAND 298 #define FILE_TABLESPACE_FOR_TEMP_NPAGES(tabspace, npages) \ 299 ((FILE_TABLESPACE *) (tabspace))->initial_size = (INT64) MAX (1, npages) * DB_PAGESIZE; \ 300 ((FILE_TABLESPACE *) (tabspace))->expand_ratio = 0; \ 301 ((FILE_TABLESPACE *) (tabspace))->expand_min_size = 0; \ 302 ((FILE_TABLESPACE *) (tabspace))->expand_max_size = 0 316 #define file_log(func, msg, ...) \ 318 _er_log_debug (ARG_FILE_LINE, "FILE " func " " LOG_THREAD_TRAN_MSG ": " msg "\n", \ 319 LOG_THREAD_TRAN_ARGS(thread_get_thread_entry_info ()), __VA_ARGS__) 321 #define FILE_PERM_TEMP_STRING(is_temp) ((is_temp) ? "temporary" : "permanent") 322 #define FILE_NUMERABLE_REGULAR_STRING(is_numerable) ((is_numerable) ? "numerable" : "regular") 324 #define FILE_TABLESPACE_MSG \ 325 "\ttablespace = { init_size = %lld, expand_ratio = %f, expand_min_size = %d, expand_max_size = %d } \n" 326 #define FILE_TABLESPACE_AS_ARGS(tabspace) \ 327 (long long int) (tabspace)->initial_size, (tabspace)->expand_ratio, (tabspace)->expand_min_size, \ 328 (tabspace)->expand_max_size 330 #define FILE_HEAD_ALLOC_MSG \ 331 "\tfile header: \n" \ 332 "\t\tvfid = %d|%d \n" \ 335 "\t\ttde_algorithm: %s \n" \ 336 "\t\tpage: total = %d, user = %d, table = %d, free = %d \n" \ 337 "\t\tsector: total = %d, partial = %d, full = %d, empty = %d \n" 338 #define FILE_HEAD_ALLOC_AS_ARGS(fhead) \ 339 VFID_AS_ARGS (&(fhead)->self), \ 340 FILE_PERM_TEMP_STRING (FILE_IS_TEMPORARY (fhead)), \ 341 FILE_NUMERABLE_REGULAR_STRING (FILE_IS_NUMERABLE (fhead)), \ 342 tde_get_algorithm_name (file_get_tde_algorithm_internal (fhead)), \ 343 (fhead)->n_page_total, (fhead)->n_page_user, (fhead)->n_page_ftab, (fhead)->n_page_free, \ 344 (fhead)->n_sector_total, (fhead)->n_sector_partial, (fhead)->n_sector_full, (fhead)->n_sector_empty 346 #define FILE_HEAD_FULL_MSG \ 347 FILE_HEAD_ALLOC_MSG \ 348 "\t\ttime_creation = %lld, type = %s \n" \ 349 "\t" FILE_TABLESPACE_MSG \ 350 "\t\ttable offsets: partial = %d, full = %d, user page = %d \n" \ 351 "\t\tvpid_sticky_first = %d|%d \n" \ 352 "\t\tvpid_last_temp_alloc = %d|%d, offset_to_last_temp_alloc=%d \n" \ 353 "\t\tvpid_last_user_page_ftab = %d|%d \n" \ 354 "\t\tvpid_find_nth_last = %d|%d, first_index_find_nth_last = %d \n" 355 #define FILE_HEAD_FULL_AS_ARGS(fhead) \ 356 FILE_HEAD_ALLOC_AS_ARGS (fhead), \ 357 (long long int) fhead->time_creation, file_type_to_string ((fhead)->type), \ 358 FILE_TABLESPACE_AS_ARGS (&(fhead)->tablespace), \ 359 (fhead)->offset_to_partial_ftab, (fhead)->offset_to_full_ftab, (fhead)->offset_to_user_page_ftab, \ 360 VPID_AS_ARGS (&(fhead)->vpid_sticky_first), \ 361 VPID_AS_ARGS (&(fhead)->vpid_last_temp_alloc), (fhead)->offset_to_last_temp_alloc, \ 362 VPID_AS_ARGS (&(fhead)->vpid_last_user_page_ftab), \ 363 VPID_AS_ARGS (&(fhead)->vpid_find_nth_last), (fhead)->first_index_find_nth_last 365 #define FILE_EXTDATA_MSG(name) \ 366 "\t" name ": { vpid_next = %d|%d, max_size = %d, item_size = %d, n_items = %d } \n" 367 #define FILE_EXTDATA_AS_ARGS(extdata) \ 368 VPID_AS_ARGS (&(extdata)->vpid_next), (extdata)->max_size, (extdata)->size_of_item, (extdata)->n_items 370 #define FILE_PARTSECT_MSG(name) \ 371 "\t" name ": { vsid = %d|%d, page bitmap = " BIT64_HEXA_PRINT_FORMAT " } \n" 372 #define FILE_PARTSECT_AS_ARGS(ps) VSID_AS_ARGS (&(ps)->vsid), (long long unsigned int) (ps)->page_bitmap 374 #define FILE_ALLOC_TYPE_STRING(alloc_type) \ 375 ((alloc_type) == FILE_ALLOC_USER_PAGE ? "alloc user page" : "alloc table page") 377 #define FILE_TEMPCACHE_MSG \ 379 "\t\tfile cache: max = %d, numerable = %d, regular = %d, total = %d \n" \ 380 "\t\tfree entries: max = %d, count = %d \n" 381 #define FILE_TEMPCACHE_AS_ARGS \ 382 file_Tempcache->ncached_max, file_Tempcache->ncached_numerable, file_Tempcache->ncached_not_numerable, \ 383 file_Tempcache->ncached_numerable + file_Tempcache->ncached_not_numerable, \ 384 file_Tempcache->nfree_entries_max, file_Tempcache->nfree_entries 386 #define FILE_TEMPCACHE_ENTRY_MSG "%p, VFID %d|%d, %s" 387 #define FILE_TEMPCACHE_ENTRY_AS_ARGS(ent) ent, VFID_AS_ARGS (&(ent)->vfid), file_type_to_string ((ent)->ftype) 389 #define FILE_TRACK_ITEM_MSG "VFID %d|%d, %s" 390 #define FILE_TRACK_ITEM_AS_ARGS(item) (item)->volid, (item)->fileid, file_type_to_string ((FILE_TYPE) (item)->type) 406 #define FILE_RV_DEALLOC_COMPENSATE true 407 #define FILE_RV_DEALLOC_RUN_POSTPONE false 416 #define FILE_FTAB_COLLECTOR_INITIALIZER { 0, 0, NULL } 445 #define FILE_USER_PAGE_MARK_DELETE_FLAG ((PAGEID) 0x80000000) 446 #define FILE_USER_PAGE_IS_MARKED_DELETED(vpid) ((((VPID *) vpid)->pageid & FILE_USER_PAGE_MARK_DELETE_FLAG) != 0) 447 #define FILE_USER_PAGE_MARK_DELETED(vpid) ((VPID *) vpid)->pageid |= FILE_USER_PAGE_MARK_DELETE_FLAG 448 #define FILE_USER_PAGE_CLEAR_MARK_DELETED(vpid) ((VPID *) vpid)->pageid &= ~FILE_USER_PAGE_MARK_DELETE_FLAG 490 #if !defined (NDEBUG) 557 int index_item,
bool * stop,
void *args);
562 #define FILE_GET_TRACKER_LOCK_MODE(file_type) (((file_type) == FILE_BTREE) ? IX_LOCK : SCH_S_LOCK) 624 PAGE_PTR page_dest,
int (*compare_func) (
const void *,
const void *),
627 PAGE_PTR page_first,
const void *item,
628 int (*compare_func) (
const void *,
const void *),
bool ordered,
629 void *item_pop,
VPID * vpid_merged);
634 int (*compare_func) (
const void *,
const void *))
637 int (*compare_func) (
const void *,
const void *),
bool * found,
int *position);
647 const void *item,
int index,
bool * stop,
void *args);
651 const void *item_to_find,
652 int (*compare_func) (
const void *,
const void *),
653 bool is_ordered,
bool for_write,
bool * found,
int *position,
704 int index_unused,
bool * stop,
void *args);
721 VPID * vpid_alloc_out);
740 bool * stop,
void *args);
756 bool * stop,
void *args);
765 VPID * vpid_alloc_out);
814 int index_item,
bool * stop,
void *args);
821 int index_item,
bool * stop,
void *args);
825 int index_item,
bool * stop,
void *args);
832 #if defined (SA_MODE) 834 int index_item,
bool * stop,
void *args);
837 int index_item,
bool * stop,
void *args);
935 #if !defined (NDEBUG) 982 if (fhead->n_sector_partial == 0)
1005 if (fhead->n_sector_full == 0)
1031 for (iter_vsid = 0; iter_vsid < collector.
n_vsids - 1; iter_vsid++)
1069 VPID_COPY (&fhead->vpid_last_user_page_ftab, vpid);
1071 file_log (
"file_rv_fhead_set_last_user_page_ftab",
1072 "update vpid_last_user_page_ftab to %d|%d in file %d|%d, " 1095 assert (!was_empty || !is_full);
1133 assert (!is_empty || !was_full);
1175 is_ftab_page = ((
bool *) rcv->
data)[0];
1176 was_empty = ((
bool *) rcv->
data)[1];
1177 is_full = ((
bool *) rcv->
data)[2];
1184 "update header in file %d|%d, header page %d|%d, lsa %lld|%d, " 1213 is_ftab_page = ((
bool *) rcv->
data)[0];
1214 is_empty = ((
bool *) rcv->
data)[1];
1215 was_full = ((
bool *) rcv->
data)[2];
1222 "update header in file %d|%d, header page %d|%d, lsa %lld|%d, " 1248 #define LOG_BOOL_COUNT 3 1256 assert (!was_empty || !is_full);
1258 log_bools[0] = is_ftab_page;
1259 log_bools[1] = was_empty;
1260 log_bools[2] = is_full;
1262 addr.
pgptr = page_fhead;
1264 log_bools, log_bools);
1267 #undef LOG_BOOL_COUNT 1284 #define LOG_BOOL_COUNT 3 1291 assert (!is_empty || !was_full);
1293 log_bools[0] = is_ftab_page;
1294 log_bools[1] = is_empty;
1295 log_bools[2] = was_full;
1297 addr.
pgptr = page_fhead;
1299 log_bools, log_bools);
1302 #undef LOG_BOOL_COUNT 1317 int undo_delta = -delta;
1326 page_fhead, 0,
sizeof (undo_delta),
sizeof (delta), &undo_delta, &delta);
1330 file_log (
"file_header_update_mark_deleted",
1331 "updated n_page_mark_delete by %d to %d in file %d|%d, " 1332 "header page %d|%d, prev_lsa %lld|%d, crt_lsa %lld|%d ", delta,
1346 int delta = *(
int *) rcv->
data;
1354 fhead->n_page_mark_delete += delta;
1357 file_log (
"file_rv_header_update_mark_deleted",
1358 "modified n_page_mark_delete by %d to %d in file %d|%d, " 1359 "header page %d|%d, lsa %lld|%d", delta,
1383 if (page_fhead ==
NULL)
1391 *fhead_copy = *fhead;
1423 switch (fhead->
type)
1438 char *index_name =
NULL;
1446 fprintf (fp,
", %s, ATTRID: %5d \n", index_name !=
NULL ? index_name :
"*UNKNOWN-INDEX*",
1453 fprintf (fp,
"Overflow keys for BTID: %10d|%5d|%10d\n",
1580 return (extdata->
n_items <= 0);
1651 assert (index >= 0 && index <= extdata->n_items);
1692 int (*compare_func) (
const void *,
const void *))
1696 const char *src_ptr;
1697 const char *src_end_ptr;
1698 const char *src_new_ptr;
1701 #if !defined (NDEBUG) 1702 char *debug_dest_end_ptr =
1716 while (dest_ptr < dest_end_ptr)
1719 for (src_new_ptr = src_ptr; src_new_ptr < src_end_ptr; src_new_ptr += extdata_src->
size_of_item)
1721 assert (compare_func (src_new_ptr, dest_ptr) != 0);
1722 if (compare_func (src_new_ptr, dest_ptr) > 0)
1727 if (src_new_ptr > src_ptr)
1730 memsize = (int) (src_new_ptr - src_ptr);
1732 memmove (dest_ptr + memsize, dest_ptr, dest_end_ptr - dest_ptr);
1733 memcpy (dest_ptr, src_ptr, memsize);
1735 dest_ptr += memsize;
1736 dest_end_ptr += memsize;
1738 src_ptr = src_new_ptr;
1740 assert (dest_end_ptr <= debug_dest_end_ptr);
1742 if (src_ptr >= src_end_ptr)
1745 assert (src_ptr == src_end_ptr);
1749 for (; dest_ptr < dest_end_ptr; dest_ptr += extdata_dest->
size_of_item)
1751 assert (compare_func (src_ptr, dest_ptr) != 0);
1752 if (compare_func (src_ptr, dest_ptr) <= 0)
1759 if (src_ptr < src_end_ptr)
1762 assert (dest_ptr == dest_end_ptr);
1763 memcpy (dest_end_ptr, src_ptr, src_end_ptr - src_ptr);
1764 assert (dest_end_ptr + (src_end_ptr - src_ptr) == debug_dest_end_ptr);
1769 assert (debug_dest_end_ptr == dest_end_ptr);
1789 int (*compare_func) (
const void *,
const void *),
bool * found,
int *position)
1821 if (memmove_size > 0)
1823 memmove (copy_at + extdata->
size_of_item * count, copy_at, memmove_size);
1847 if (position < 0 || position >= extdata->
n_items)
1857 if (memmove_size > 0)
1859 memmove (remove_at, remove_at + extdata->
size_of_item * count, memmove_size);
1893 if (page_out !=
NULL)
1902 if (f_extdata !=
NULL)
1905 error_code = f_extdata (thread_p, extdata_in, &stop, f_extdata_args);
1924 error_code = f_item (thread_p,
file_extdata_at (extdata_in, i), i, &stop, f_item_args);
1945 if (page_extdata !=
NULL)
1950 if (page_extdata ==
NULL)
1960 if (stop && page_out !=
NULL)
1963 *page_out = page_extdata;
1965 else if (page_extdata !=
NULL)
1971 if (stop && extdata_out !=
NULL)
1974 *extdata_out = extdata_in;
2000 if (search_context->
found)
2027 search_context->
found =
true;
2050 int (*compare_func) (
const void *,
const void *),
2051 bool is_ordered,
bool for_write,
bool * found,
int *position,
PAGE_PTR * page_extdata)
2059 search_context.
found =
false;
2065 &search_context,
NULL,
NULL, for_write, extdata, page_extdata);
2076 &search_context, for_write, extdata, page_extdata);
2087 *found = search_context.
found;
2090 if (position !=
NULL)
2092 *position = search_context.
position;
2131 VPID_COPY (&vpid_next, &(*extdata)->vpid_next);
2139 if (*page_out !=
NULL)
2145 if (*page_out ==
NULL)
2180 file_log (
"file_rv_extdata_set_next",
2181 "page %d|%d, lsa %lld|%d, changed extdata link \n" 2201 fprintf (fp,
"Set extensible data next page to %d|%d.\n",
VPID_AS_ARGS (vpid_next));
2216 int pos,
count, offset = 0;
2221 pos = *(
int *) (rcv->
data + offset);
2222 offset +=
sizeof (pos);
2224 count = *(
int *) (rcv->
data + offset);
2225 offset +=
sizeof (
count);
2233 "add %d entries at position %d in page %d|%d, lsa %lld|%d \n" 2260 pos = *(
int *) (rcv->
data + offset);
2261 offset +=
sizeof (pos);
2263 count = *(
int *) (rcv->
data + offset);
2264 offset +=
sizeof (
count);
2271 file_log (
"file_rv_extdata_remove",
2272 "remove %d entries at position %d in page %d|%d, lsa %lld|%d" 2291 int pos,
count, offset = 0;
2293 pos = *(
int *) ((
char *) data + offset);
2294 offset +=
sizeof (pos);
2296 count = *(
int *) ((
char *) data + offset);
2297 offset +=
sizeof (
count);
2299 fprintf (fp,
"Add to extensible data at position = %d, count = %d.\n", pos, count);
2314 int pos,
count, offset = 0;
2316 pos = *(
int *) ((
char *) data + offset);
2317 offset +=
sizeof (pos);
2319 count = *(
int *) ((
char *) data + offset);
2320 offset +=
sizeof (
count);
2321 assert (length == offset);
2323 fprintf (fp,
"Remove from extensible data at position = %d, count = %d.\n", pos, count);
2347 crumbs[0].
data = &position;
2348 crumbs[0].
length =
sizeof (position);
2353 crumbs[2].
data = data;
2380 crumbs[0].
data = &position;
2381 crumbs[0].
length =
sizeof (position);
2404 const VPID * vpid_next)
2418 file_log (
"file_log_extdata_set_next",
2419 "page %d|%d, prev_lsa %lld|%d, crt_lsa %lld|%d, " 2420 "change extdata link to %d|%d, \n" 2453 memcpy (extdata_in_page, extdata_in_rcv, rcv->
length);
2482 memcpy (item_in_page, item_newval, extdata->
size_of_item);
2501 int (*compare_func) (
const void *,
const void *),
bool ordered)
2507 assert ((
char *) extdata_dest >= page_dest && (
char *) extdata_dest < page_dest +
DB_PAGESIZE);
2509 assert ((
char *) extdata_src >= page_src && (
char *) extdata_src < page_src +
DB_PAGESIZE);
2521 addr.
pgptr = page_dest;
2568 const void *item,
int (*compare_func) (
const void *,
const void *),
bool ordered,
2569 void *item_pop,
VPID * vpid_merged)
2604 extdata_crt = extdata_first;
2605 page_crt = page_first;
2630 if (item_pop !=
NULL)
2640 file_log (
"file_extdata_find_and_remove_item",
"removed extensible data item: \n" 2645 if (page_prev !=
NULL)
2663 if (page_prev !=
NULL && page_prev != page_first)
2667 page_prev = page_crt;
2668 extdata_prev = extdata_crt;
2670 if (page_crt ==
NULL)
2698 assert (page_prev != page_crt);
2700 if (page_prev !=
NULL && page_prev != page_first)
2704 if (page_crt !=
NULL && page_crt != page_first)
2853 assert (offset_to_zero >= 0);
2858 *offset_out = offset_to_zero;
2888 offset = *(
int *) rcv->
data;
2901 file_log (
"file_rv_partsect_update",
2902 "recovery partial sector update in page %d|%d prev_lsa %lld|%d: " 2903 "%s bit at offset %d, partial sector offset %d \n" 2955 VPID second_vpid = *(
VPID *) second;
2982 VFID *second_vfid = (
VFID *) second;
3027 switch (fstruct_type)
3034 return "MULTIPAGE_OBJECT_HEAP";
3038 return "BTREE_OVERFLOW_KEY";
3042 return "HASH_DIRECTORY";
3046 return "DROPPED FILES";
3048 return "VACUUM DATA";
3050 return "QUERY_AREA";
3052 return "TEMPORARILY";
3056 return "HEAP_REUSE_SLOTS";
3064 char *class_name_p =
NULL;
3073 fprintf (fp,
"CLASS_OID: %5d|%10d|%5d (%s)",
OID_AS_ARGS (class_oid_p),
3074 class_name_p !=
NULL ? class_name_p :
"*UNKNOWN-CLASS*");
3075 if (class_name_p !=
NULL)
3107 return file_create (thread_p, file_type, &tablespace, des,
false,
false, vfid);
3130 memset (&des, 0,
sizeof (des));
3171 error_code =
file_create (thread_p, ftype, &tablespace,
NULL,
true, is_numerable, vfid_out);
3178 tempcache_entry->
vfid = *vfid_out;
3184 *vfid_out = tempcache_entry->
vfid;
3301 bool was_temp_reserved =
false;
3313 INT64 max_size_ftab;
3317 bool found_vfid_page =
false;
3318 INT16 offset_ftab = 0;
3330 bool is_sysop_started =
false;
3331 bool do_logging = !is_temp;
3352 max_size_ftab = total_size / 8 / 1024;
3353 total_size += max_size_ftab;
3363 max_size_ftab = total_size * 33 / 8 / 1024;
3364 total_size += max_size_ftab;
3372 if (vsids_reserved ==
NULL)
3383 is_sysop_started =
true;
3402 was_temp_reserved = is_temp;
3405 volid_last_expand = vsids_reserved[n_sectors - 1].
volid;
3409 #if defined (SERVER_MODE) 3414 VSID *vsid_iter = vsids_reserved;
3421 bool is_file_dropped;
3423 for (vsid_iter = vsids_reserved;
3424 vsid_iter < vsids_reserved + n_sectors &&
VFID_ISNULL (&found_vfid)
3425 && vsid_iter->
volid == first_volid; vsid_iter++)
3438 if (is_file_dropped ==
false)
3441 found_vfid = vfid_iter;
3469 if (page_fhead ==
NULL)
3480 fhead->
self = *vfid;
3487 fhead->
type = file_type;
3617 extdata_part_ftab_in_fhead = extdata_part_ftab;
3618 for (vsid_iter = vsids_reserved; vsid_iter < vsids_reserved + n_sectors; vsid_iter++)
3625 if (partsect_ftab ==
NULL)
3647 if ((
void *) partsect_ftab >=
file_extdata_end (extdata_part_ftab_in_fhead))
3674 if (
VPID_EQ (&vpid_fhead, &vpid_ftab))
3680 found_vfid_page =
true;
3686 extdata_part_ftab->
vpid_next = vpid_ftab;
3687 if (page_ftab !=
NULL)
3696 if (page_ftab ==
NULL)
3710 partsect.
vsid = *vsid_iter;
3720 if (page_ftab !=
NULL)
3733 if (partsect_ftab ==
NULL)
3832 if (page_ftab !=
NULL)
3836 if (page_fhead !=
NULL)
3841 if (is_sysop_started)
3860 if (was_temp_reserved)
3878 if (vsids_reserved !=
NULL)
3985 bool is_partial = *(
bool *) args;
4049 bool save_check_interrupt =
false;
4076 if (page_fhead ==
NULL)
4085 #if !defined(NDEBUG) 4089 "TDE: file_destroy(): clear tde bit in pflag in all user pages, VFID = %d|%d, # of encrypting (user) pages = %d, tde algorithm = %s\n",
4120 ftab_collector.
npages = 0;
4121 ftab_collector.
nsects = 0;
4155 for (iter_sects = 0; iter_sects < ftab_collector.
nsects; iter_sects++)
4165 if (page_ftab ==
NULL)
4201 if (page_fhead !=
NULL)
4267 #if !defined (NDEBUG) 4277 if (page_fhead ==
NULL)
4343 entry->
vfid = *vfid;
4417 file_log (
"file_rv_perm_expand_undo",
4418 "removed expanded sectors from partial table and file header in file %d|%d, " 4419 "page header %d|%d, lsa %lld|%d, number of sectors %d \n" 4442 VSID *vsids, *vsid_iter;
4461 for (vsid_iter = vsids; vsid_iter < vsids + count_vsids; vsid_iter++)
4463 partsect.
vsid = *vsid_iter;
4477 file_log (
"file_rv_perm_expand_redo",
4478 "recovery expand in file %d|%d, file header %d|%d, lsa %lld|%d \n" 4498 int expand_min_size_in_sectors;
4499 int expand_max_size_in_sectors;
4500 int expand_size_in_sectors;
4505 bool is_sysop_started =
false;
4520 expand_max_size_in_sectors =
4522 assert (expand_min_size_in_sectors <= expand_max_size_in_sectors);
4525 expand_size_in_sectors = MAX (expand_size_in_sectors, expand_min_size_in_sectors);
4526 expand_size_in_sectors = MIN (expand_size_in_sectors, expand_max_size_in_sectors);
4535 if (vsids_reserved ==
NULL)
4545 is_sysop_started =
true;
4562 for (vsid_iter = vsids_reserved; vsid_iter < vsids_reserved + expand_size_in_sectors; vsid_iter++)
4564 partsect.
vsid = *vsid_iter;
4583 expand_size_in_sectors *
sizeof (
VSID),
NULL, vsids_reserved);
4586 "expand file %d|%d, page header %d|%d, prev_lsa %lld|%d, crt_lsa %lld|%d; " 4594 if (is_sysop_started)
4605 if (vsids_reserved !=
NULL)
4624 VPID * vpid_alloc_out)
4630 int n_items_to_move;
4659 page_part_ftab_first =
4661 if (page_part_ftab_first ==
NULL)
4670 file_log (
"file_table_move_partial_sectors_to_header",
4677 if (n_items_to_move == 0)
4704 file_log (
"file_table_move_partial_sectors_to_header",
4705 "moved %d items from first page to header page file table. \n" 4706 "file %d|%d, header page %d|%d, prev_lsa %lld|%d, crt_lsa %lld|%d \n" 4719 file_log (
"file_table_move_partial_sectors_to_header",
4720 "removed %d items from first page partial table \n" 4721 "file %d|%d, page %d|%d, prev_lsa %lld|%d, crt_lsa %lld|%d \n" 4734 file_log (
"file_table_move_partial_sectors_to_header",
4735 "remove first partial table page %d|%d\n",
VPID_AS_ARGS (&save_next));
4737 *vpid_alloc_out = save_next;
4743 page_part_ftab_first =
NULL;
4770 if (page_part_ftab_first !=
NULL)
4845 if (page_ftab ==
NULL)
4864 file_log (
"file_table_append_full_sector_page",
"%s",
"page has been added to full sectors table \n");
4920 if (page_ftab !=
NULL)
4935 if (page_ftab ==
NULL)
4945 page_extdata = page_ftab !=
NULL ? page_ftab : page_fhead;
4962 file_log (
"file_table_add_full_sector",
4963 "add sector %d|%d at position %d in file %d|%d, full table page %d|%d, " 4964 "prev_lsa %lld|%d, crt_lsa %lld|%d, \n" 4973 if (page_ftab !=
NULL)
4993 char *rcv_data = (
char *) data;
4996 vfid = (
VFID *) (rcv_data + offset);
4997 offset +=
sizeof (*vfid);
4999 vpid = (
VPID *) (rcv_data + offset);
5000 offset +=
sizeof (*vpid);
5002 assert (offset == length);
5022 int offset_to_alloc_bit;
5023 bool was_empty =
false;
5024 bool is_full =
false;
5110 (
PGLENGTH) ((
char *) partsect - page_fhead),
5111 sizeof (offset_to_alloc_bit),
sizeof (offset_to_alloc_bit),
5112 &offset_to_alloc_bit, &offset_to_alloc_bit);
5115 "allocated page %d|%d in file %d|%d page %d|%d, prev_lsa %lld|%d, crt_lsa %lld|%d, " 5116 "set bit at offset %d in partial sector at offset %d \n" 5141 "update header in file %d|%d, header page %d|%d, prev_lsa %lld|%d, crt_lsa %lld|%d, " 5157 vsid_full = partsect->
vsid;
5166 "removed full partial sector from position 0 in file %d|%d, header page %d|%d, " 5167 "prev_lsa %lld|%d, crt_lsa %lld|%d, \n" 5259 #define UNDO_DATA_SIZE (sizeof (VFID) + sizeof (VPID)) 5264 bool is_sysop_started =
false;
5273 if (page_out !=
NULL)
5281 if (page_fhead ==
NULL)
5307 is_sysop_started =
true;
5339 if (page_alloc ==
NULL)
5344 error_code = f_init (thread_p, page_alloc, f_init_args);
5356 #if !defined (NDEBUG) 5359 if (tde_algo != prev_tde_algo)
5362 "TDE: file_alloc(): set tde bit in pflag, VFID = %d|%d, VPID = %d|%d, tde_algorithm of the file = %s, previous tde algorithm of the page = %s\n",
5371 if (page_out !=
NULL)
5373 *page_out = page_alloc;
5383 if (page_out !=
NULL)
5386 if (*page_out ==
NULL)
5398 if (is_sysop_started)
5421 if (page_fhead !=
NULL)
5427 #undef UNDO_DATA_SIZE 5460 if (page_fhead ==
NULL)
5482 for (iter = 0; iter < npages; iter++)
5484 vpid_iter = vpids_out ? vpids_out + iter : &local_vpid;
5485 error_code =
file_alloc (thread_p, vfid, f_init, f_init_args, vpid_iter,
NULL);
5511 if (page_fhead !=
NULL)
5545 if (page_out !=
NULL)
5553 if (page_fhead ==
NULL)
5565 error_code =
file_alloc (thread_p, vfid, f_init, f_init_args, vpid_out, page_out);
5583 file_log (
"file_alloc_sticky_first_page",
5584 "set vpid_sticky_first to %d|%d in file %d|%d, header page %d|%d, " 5585 "prev_lsa %lld|%d, crt_lsa %lld|%d",
VPID_AS_ARGS (vpid_out),
5589 if (page_fhead !=
NULL)
5615 file_log (
"file_rv_fhead_sticky_page",
5616 "set vpid_sticky_first to %d|%d in file %d|%d, header page %d|%d, lsa %lld|%d",
5640 if (page_fhead ==
NULL)
5692 if (page_fhead ==
NULL)
5765 #if !defined(NDEBUG) 5793 if (page_fhead ==
NULL)
5872 if (page_fhead ==
NULL)
5883 if (prev_tde_algo == tde_algo)
5890 #if !defined(NDEBUG) 5892 "TDE: file_apply_tde_algorithm(): VFID = %d|%d, # of encrypting (user) pages = %d, tde algorithm = %s\n",
5907 context.
args = &args;
5910 context.
stop =
false;
5946 if (page_fhead !=
NULL)
5974 #define LOG_DATA_SIZE (sizeof (VFID) + sizeof (VPID)) 6004 #if defined (NDEBUG) 6014 if (page_fhead ==
NULL)
6025 file_type_hint = fhead->
type;
6037 file_log (
"file_dealloc",
"file %s %d|%d dealloc vpid %d|%d postponed",
6051 if (page_fhead ==
NULL)
6057 if (page_fhead ==
NULL)
6078 &found, &pos, &page_ftab);
6105 page_extdata = page_ftab !=
NULL ? page_ftab : page_fhead;
6114 addr.
pgptr = page_extdata;
6120 "marked page %d|%d as deleted in file %d|%d, page %d|%d, prev_lsa %lld|%d, " 6121 "crt_lsa %lld_%d, at offset %d ",
VPID_AS_ARGS (vpid_found),
6123 (
PGLENGTH) (((
char *) vpid_found) - page_extdata));
6141 if (page_fhead !=
NULL)
6145 if (page_ftab !=
NULL)
6152 #undef LOG_DATA_SIZE 6174 bool is_empty =
false;
6175 bool was_full =
false;
6177 int offset_to_dealloc_bit;
6211 &found, &position, &page_ftab);
6228 addr.
pgptr = page_ftab !=
NULL ? page_ftab : page_fhead;
6233 sizeof (offset_to_dealloc_bit),
sizeof (offset_to_dealloc_bit),
6234 &offset_to_dealloc_bit, &offset_to_dealloc_bit);
6239 "dealloc page %d|%d in file %d|%d page %d|%d, prev_lsa %lld|%d, crt_lsa %lld|%d, " 6240 "clear bit at offset %d in partsect at offset %d \n" 6246 if (page_ftab !=
NULL)
6256 bool is_merged_page_from_sector =
false;
6278 is_merged_page_from_sector =
true;
6297 partsect_new.
vsid = vsid_dealloc;
6301 if (is_merged_page_from_sector)
6308 "merged full table page %d|%d also belongs to sector being moved to partial table \n",
6317 "update header in file %d|%d, header page %d|%d, prev_lsa %lld|%d, crt_lsa %lld|%d, " 6324 if (page_dealloc ==
NULL)
6342 addr.
pgptr = page_ftab !=
NULL ? page_ftab : page_fhead;
6362 "add new partsect at position %d in file %d|%d, page %d|%d, prev_lsa %lld|%d, " 6363 "crt_lsa %lld|%d \n" 6370 if (page_ftab !=
NULL)
6392 if (page_ftab !=
NULL)
6400 if (page_ftab ==
NULL)
6414 "file %d|%d moved to new partial table page %d|%d \n" 6434 "update header in file %d|%d, header page %d|%d, prev_lsa %lld|%d, crt_lsa %lld|%d, " 6442 if (page_dealloc ==
NULL)
6455 if (page_ftab !=
NULL)
6480 bool is_sysop_started =
false;
6493 vfid = (
VFID *) (rcv->
data + offset);
6494 offset +=
sizeof (*vfid);
6496 vpid_dealloc = (
VPID *) (rcv->
data + offset);
6497 offset +=
sizeof (*vpid_dealloc);
6504 if (page_fhead ==
NULL)
6524 is_sysop_started =
true;
6577 if (is_sysop_started)
6599 if (page_fhead !=
NULL)
6654 if (page_fhead ==
NULL)
6695 if (page_fhead ==
NULL)
6736 if (page_ftab !=
NULL)
6742 &found, &pos, &page_ftab) !=
NO_ERROR)
6756 if (page_ftab !=
NULL)
6764 VPID *vpid_in_table;
6768 &found, &pos, &page_ftab) !=
NO_ERROR)
6797 if (page_ftab !=
NULL)
6801 if (page_fhead !=
NULL)
6829 if (page_fhead ==
NULL)
6840 *ftype_out = fhead->
type;
6869 if (page_fhead ==
NULL)
6921 collector_out->
nsects = 1;
6922 collector_out->
npages = 1;
6924 file_log (
"file_temp_reset_user_pages",
6925 "init collector with page %d|%d \n " 6992 for (idx_sect = 0; idx_sect < collect->
nsects; idx_sect++)
7000 if (idx_sect == collect->
nsects)
7007 file_log (
"file_extdata_collect_ftab_pages",
7014 file_log (
"file_extdata_collect_ftab_pages",
7038 for (iter = 0; iter < collector->
nsects; iter++)
7130 error_code = context->
func (thread_p, &page, stop, context->
args);
7144 context->
stop =
true;
7190 #if defined (SERVER_MODE) 7200 if (page_fhead ==
NULL)
7209 context.
func = func;
7210 context.
args = args;
7213 context.
stop =
false;
7256 if (page_fhead !=
NULL)
7285 #if defined (SA_MODE) 7293 #if defined (SA_MODE) 7299 if (page_fhead ==
NULL)
7338 #if defined (SERVER_MODE) 7345 for (iter_vsid = 0; iter_vsid < collector.
n_vsids; iter_vsid++)
7347 valid = disk_map_clone_clear (&collector.
vsids[iter_vsid], disk_map_clone);
7360 if (page_fhead !=
NULL)
7393 fprintf (fp,
"\n\n Dumping file %d|%d \n",
VFID_AS_ARGS (vfid));
7397 if (page_fhead ==
NULL)
7432 fprintf (fp,
"FILE TABLE: \n");
7481 FILE *fp = (FILE *) args;
7500 FILE *fp = (FILE *) args;
7510 fprintf (fp,
"\t\t allocated pages:");
7517 if (line_count++ % 8 == 0)
7519 fprintf (fp,
"\n\t\t\t");
7525 fprintf (fp,
"\n\t\t reserved pages:");
7532 if (line_count++ % 8 == 0)
7534 fprintf (fp,
"\n\t\t\t");
7556 FILE *fp = (FILE *) args;
7575 FILE *fp = (FILE *) args;
7581 vsid = (
VSID *) data;
7582 fprintf (fp,
"fully allocated sector: vsid = %d|%d \n",
VSID_AS_ARGS (vsid));
7588 if (line_count++ % 8 == 0)
7590 fprintf (fp,
"\n\t\t\t");
7610 FILE *fp = (FILE *) args;
7629 FILE *fp = (FILE *) args;
7634 fprintf (fp,
"\n\t\t\t");
7638 fprintf (fp,
"\n WARNING: page %d|%d is marked as deleted!! \n\t\t\t",
VPID_AS_ARGS (vpid));
7725 page_extdata = page_fhead;
7733 if (page_ftab ==
NULL)
7738 page_extdata = page_ftab;
7742 file_log (
"file_numerable_add_page",
7743 "file %d|%d add page %d|%d to user page table \n" 7787 if (page_ftab !=
NULL)
7795 if (page_ftab ==
NULL)
7800 page_extdata = page_ftab;
7814 file_log (
"file_numerable_add_page",
7815 "file %d|%d added new page %d|%d to user table; " 7816 "updated vpid_last_user_page_ftab in header page %d|%d, prev_lsa %lld|%d, crt_lsa %lld|%d ",
7851 file_log (
"file_numerable_add_page",
7852 "add page %d|%d to position %d in file %d|%d, page %d|%d, prev_lsa = %lld|%d, crt_lsa = %lld|%d \n" 7862 if (page_ftab !=
NULL)
7864 assert (page_ftab != page_fhead);
7887 if (count_vpid <= find_nth_context->nth)
7890 find_nth_context->
nth -= count_vpid;
7917 const void *data,
int index,
bool * stop,
void *args)
7928 if (find_nth_context->
nth == 0)
7931 *find_nth_context->
vpid_nth = *vpidp;
7937 find_nth_context->
nth--;
7983 if (page_fhead ==
NULL)
8003 if (page_fhead ==
NULL)
8012 error_code =
file_alloc (thread_p, vfid, f_init, f_init_args, vpid_nth,
NULL);
8025 else if (page_fhead ==
NULL)
8031 error_code =
file_alloc (thread_p, vfid, f_init, f_init_args, vpid_nth,
NULL);
8042 find_nth_context.
vpid_nth = vpid_nth;
8043 find_nth_context.
nth = nth;
8066 if (page_ftab_start ==
NULL)
8082 &find_nth_context,
NULL,
NULL,
false,
NULL, &page_ftab_nth_location);
8093 if (page_ftab_nth_location ==
NULL)
8096 page_ftab_nth_location = page_ftab_start !=
NULL ? page_ftab_start : page_fhead;
8101 file_log (
"file_numerable_find_nth",
"update fhead.fist_index_find_nth_last to %d " 8102 "and fhead->vpid_find_nth_last to %d|%d while searching nth=%d in file %d|%d",
8119 if (page_ftab_nth_location !=
NULL && page_ftab_nth_location != page_ftab_start
8120 && page_ftab_nth_location != page_fhead)
8124 if (page_ftab_start !=
NULL)
8128 if (page_fhead !=
NULL)
8149 vpid_ptr = (
VPID *) (page_ftab + rcv->
offset);
8153 file_log (
"file_rv_user_page_mark_delete",
8154 "marked deleted vpid %d|%d in page %d|%d lsa %lld|%d at offset %d",
8176 VPID *vpid_in_table;
8195 vfid = (
VFID *) (rcv->
data + offset);
8196 offset +=
sizeof (*vfid);
8198 vpid = (
VPID *) (rcv->
data + offset);
8199 offset +=
sizeof (*vpid);
8206 if (page_fhead ==
NULL)
8245 addr.
pgptr = page_ftab !=
NULL ? page_ftab : page_fhead;
8251 file_log (
"file_rv_user_page_unmark_delete_logical",
8252 "unmark delete vpid %d|%d in file %d|%d, page %d|%d, " 8253 "prev_lsa %lld|%d, crt_lsa %lld|%d, at offset %d",
8263 if (page_ftab !=
NULL)
8267 if (page_fhead !=
NULL)
8289 vpid_ptr = (
VPID *) (page_ftab + rcv->
offset);
8294 file_log (
"file_rv_user_page_unmark_delete_physical",
8295 "unmark delete vpid %d|%d in page %d|%d, lsa %lld|%d, " 8350 if (page_fhead ==
NULL)
8392 if (page_fhead !=
NULL)
8420 bool was_empty =
false;
8421 bool is_full =
false;
8458 if (page_ftab ==
NULL)
8499 if (page_ftab_new ==
NULL)
8512 assert (page_ftab != page_fhead);
8513 if (page_ftab !=
NULL)
8522 page_ftab = page_ftab_new;
8527 "used newly reserved sector's first page %d|%d for partial table.",
VPID_AS_ARGS (&vpid_ftab_new));
8557 "new partial sector added to partial extensible data:\n" 8574 vpid_next = extdata_part_ftab->
vpid_next;
8575 if (page_ftab !=
NULL)
8580 if (page_ftab ==
NULL)
8619 if (page_ftab !=
NULL)
8621 assert (page_ftab != page_fhead);
8641 if (page_ftab !=
NULL)
8667 if (page_fhead ==
NULL)
8683 fhead->
type = ftype;
8712 int nsect_empty_new;
8714 bool save_interrupt;
8723 if (page_fhead ==
NULL)
8743 extdata_user_page_ftab->
n_items = 0;
8759 for (idx_sect = 0; idx_sect < collector.
nsects; idx_sect++)
8766 nsect_part_new = collector.
nsects - nsect_full_new;
8768 nsect_part_new += nsect_empty_new;
8771 page_ftab = page_fhead;
8782 for (idx_sect = 0; idx_sect < collector.
nsects; idx_sect++)
8790 if (idx_sect < collector.
nsects - 1)
8810 vpid_next = extdata_part_ftab->
vpid_next;
8811 if (page_ftab != page_fhead)
8821 if (page_ftab ==
NULL)
8858 if (page_fhead !=
NULL)
8912 #if defined (SERVER_MODE) 8923 if (file_Tempcache ==
NULL)
8943 #if !defined (NDEBUG) 8957 memset (file_Tempcache->
tran_files, 0, memsize);
8977 if (file_Tempcache ==
NULL)
8982 #if defined (SERVER_MODE) 8991 for (tran = 0; tran < ntrans; tran++)
9028 for (entry = *list; entry !=
NULL; entry = next)
9065 (*entry)->next =
NULL;
9109 #if !defined (NDEBUG) 9123 #if !defined (NDEBUG) 9159 if (*entry !=
NULL && (*entry)->ftype != ftype)
9170 (*entry)->ftype = ftype;
9194 (*entry)->next =
NULL;
9197 "found in cache temporary file entry " 9216 (*entry)->next =
NULL;
9217 (*entry)->ftype = ftype;
9367 #if defined (SERVER_MODE) 9385 file_log (
"file_tempcache_drop_tran_temp_files",
9405 for (temp_file = *entries; temp_file !=
NULL; temp_file = next)
9407 next = temp_file->
next;
9413 file_log (
"file_tempcache_cache_or_drop_entries",
9440 for (entry = *tran_files_p; entry !=
NULL; entry = entry->
next)
9445 if (prev_entry !=
NULL)
9447 prev_entry->next = entry->
next;
9451 *tran_files_p = entry->
next;
9480 entry->
next = *tran_files_p;
9481 *tran_files_p = entry;
9500 for (entry = *tran_files_p; entry !=
NULL; entry = entry->
next)
9520 fprintf (fp,
"DUMPING file manager's temporary files cache.\n");
9522 " max files = %d, regular files count = %d, numerable files count = %d.\n\n",
9527 fprintf (fp,
" cached regular files: \n");
9530 fprintf (fp,
" VFID = %d|%d, file type = %s \n",
9537 fprintf (fp,
" cached numerable files: \n");
9540 fprintf (fp,
" VFID = %d|%d, file type = %s \n",
9578 &file_Tracker_vpid,
NULL);
9600 VFID_COPY (&file_Tracker_vfid, vfid_tracker_out);
9626 file_Tracker_vfid = *vfid;
9676 item.
type = (INT16) ftype;
9678 if (metadata ==
NULL)
9690 if (page_track_head ==
NULL)
9739 page_extdata = page_track_other !=
NULL ? page_track_other : page_track_head;
9758 if (page_track_other !=
NULL)
9766 if (page_track_other ==
NULL)
9773 page_extdata = page_track_other;
9801 if (page_track_other !=
NULL)
9828 if (page_track_head ==
NULL)
9874 if (page_track_head !=
NULL)
9899 if (page_track_head ==
NULL)
9954 if (page_track_head ==
NULL)
9964 &found, &pos, &page_track_other);
9977 error_code = func (thread_p, page_track_other !=
NULL ? page_track_other : page_track_head, extdata, pos,
NULL, args);
9988 if (page_track_other !=
NULL)
9992 if (page_track_head !=
NULL)
10021 if (page_track_head ==
NULL)
10027 page_extdata = page_track_head;
10033 error_code = func (thread_p, page_extdata, extdata, index_item, &stop, args);
10047 if (page_track_other !=
NULL)
10057 if (page_track_other ==
NULL)
10063 page_extdata = page_track_other;
10070 if (page_track_other !=
NULL)
10074 if (page_track_head !=
NULL)
10128 int index_item,
bool * stop,
void *args)
10138 #if defined (SERVER_MODE) 10139 bool is_dropped =
false;
10157 #if defined (SERVER_MODE) 10169 file_log (
"file_tracker_item_reuse_heap",
"can't reuse heap file %d|%d with mvccid %llu because vacuum thinks it " 10180 if (page_fhead ==
NULL)
10193 #if !defined (NDEBUG) 10213 sizeof (des_new), &fhead->
descriptor, &des_new);
10225 file_log (
"file_tracker_item_reuse_heap",
"reuse heap file %d|%d; tracker page %d|%d, prev_lsa = %lld|%d, " 10234 if (page_fhead !=
NULL)
10279 int index_item,
bool * stop,
void *args)
10300 addr.
pgptr = page_of_item;
10301 addr.
offset = index_item;
10307 file_log (
"file_tracker_item_mark_heap_deleted",
"mark delete heap file %d|%d; " 10333 context.is_undo = is_undo;
10381 #if defined (SA_MODE) 10390 file_tracker_reclaim_marked_deleted (
THREAD_ENTRY * thread_p)
10415 if (page_track_head ==
NULL)
10424 page_extdata = page_track_head;
10454 if (page_extdata !=
NULL && page_extdata != page_track_head)
10458 page_extdata =
NULL;
10465 if (page_extdata ==
NULL)
10475 page_extdata = page_track_head;
10481 if (page_extdata_next ==
NULL)
10506 if (page_extdata != page_track_head)
10510 page_extdata = page_extdata_next;
10511 extdata = extdata_next;
10512 page_extdata_next =
NULL;
10530 assert (page_extdata_next ==
NULL || page_extdata_next != page_track_head);
10531 if (page_extdata_next !=
NULL)
10535 if (page_extdata !=
NULL && page_extdata != page_track_head)
10539 if (page_track_head !=
NULL)
10577 switch (desired_type)
10630 if (page_fhead ==
NULL)
10702 bool found =
false;
10706 #if !defined (NDEBUG) 10707 VFID vfid_prev_cursor = *vfid;
10719 if (page_track_head ==
NULL)
10737 page_extdata = page_track_head;
10746 &idx_item, &page_track_other);
10759 page_extdata = page_track_other !=
NULL ? page_track_other : page_track_head;
10785 if (page_track_other !=
NULL)
10795 if (page_track_other ==
NULL)
10800 page_extdata = page_track_other;
10811 if (page_track_other !=
NULL)
10815 if (page_track_head !=
NULL)
10839 bool * stop,
void *args)
10843 FILE *fp = (FILE *) args;
10850 error_code =
file_dump (thread_p, &vfid, fp);
10870 fprintf (fp,
"\n\n DUMPING TRACKED FILES \n");
10887 int index_item,
bool * stop,
void *args)
10893 FILE *fp = (FILE *) args;
10901 if (page_fhead ==
NULL)
10912 fprintf (fp,
"Marked as deleted... ");
10933 fprintf (fp,
" VFID npages type FDES\n");
10957 int index_item,
bool * stop,
void *args)
11017 int index_item,
bool * stop,
void *args)
11021 FILE *fp = (FILE *) args;
11078 int index_item,
bool * stop,
void *args)
11082 FILE *fp = (FILE *) args;
11140 #if defined (SERVER_MODE) 11191 error_code = disk_map_clone_create (thread_p, &disk_map_clone);
11215 disk_map_clone_free (&disk_map_clone);
11221 disk_map_clone_free (&disk_map_clone);
11227 valid = disk_map_clone_check_leaks (disk_map_clone);
11238 disk_map_clone_free (&disk_map_clone);
11246 #if defined (SA_MODE) 11260 bool * stop,
void *args)
11301 int index_item,
bool * stop,
void *args)
11316 if (page_fhead ==
NULL)
11323 switch (fhead->
type)
11339 spacedb[spacedb_ftype].
nfile++;
11374 if (page_fhead ==
NULL)
11412 if (page_fhead ==
NULL)
11444 if (page_fhead ==
NULL)
11480 if (page_fhead ==
NULL)
11510 int idx_in_cache = -1;
11550 if (or_repr ==
NULL)
11557 for (i = 0; i < or_repr->
n_indexes; i++)
11570 if (root_page ==
NULL)
11579 if (root_header ==
NULL)
11585 bovf_vfid = root_header->
ovfid;
11606 if (or_repr !=
NULL)
int(* compare_func)(const void *, const void *)
static int file_numerable_add_page(THREAD_ENTRY *thread_p, PAGE_PTR page_fhead, const VPID *vpid)
int file_destroy(THREAD_ENTRY *thread_p, const VFID *vfid, bool is_temp)
int disk_reserve_sectors(THREAD_ENTRY *thread_p, DB_VOLPURPOSE purpose, VOLID volid_hint, int n_sectors, VSID *reserved_sectors)
static int file_full_table_extdata_dump(THREAD_ENTRY *thread_p, const FILE_EXTENSIBLE_DATA *extdata, bool *stop, void *args)
static int file_extdata_find_and_remove_item(THREAD_ENTRY *thread_p, FILE_EXTENSIBLE_DATA *extdata_first, PAGE_PTR page_first, const void *item, int(*compare_func)(const void *, const void *), bool ordered, void *item_pop, VPID *vpid_merged)
#define FILE_HEAD_ALLOC_MSG
#define PGBUF_PAGE_VPID_AS_ARGS(pg)
int file_temp_retire(THREAD_ENTRY *thread_p, const VFID *vfid)
int(* FILE_EXTDATA_ITEM_FUNC)(THREAD_ENTRY *thread_p, const void *data, int index, bool *stop, void *args)
STATIC_INLINE int file_table_dump(THREAD_ENTRY *thread_p, const FILE_HEADER *fhead, FILE *fp) __attribute__((ALWAYS_INLINE))
int file_numerable_find_nth(THREAD_ENTRY *thread_p, const VFID *vfid, int nth, bool auto_alloc, FILE_INIT_PAGE_FUNC f_init, void *f_init_args, VPID *vpid_nth)
int file_rv_partsect_clear(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
static int file_extdata_search_item(THREAD_ENTRY *thread_p, FILE_EXTENSIBLE_DATA **extdata, const void *item_to_find, int(*compare_func)(const void *, const void *), bool is_ordered, bool for_write, bool *found, int *position, PAGE_PTR *page_extdata)
int file_create(THREAD_ENTRY *thread_p, FILE_TYPE file_type, FILE_TABLESPACE *tablespace, FILE_DESCRIPTORS *des, bool is_temp, bool is_numerable, VFID *vfid)
int file_rv_fhead_sticky_page(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
#define FILE_RV_DEALLOC_RUN_POSTPONE
void log_append_redo_data(THREAD_ENTRY *thread_p, LOG_RCVINDEX rcvindex, LOG_DATA_ADDR *addr, int length, const void *data)
static int file_table_add_full_sector(THREAD_ENTRY *thread_p, PAGE_PTR page_fhead, const VSID *vsid)
STATIC_INLINE bool file_partsect_is_full(FILE_PARTIAL_SECTOR *partsect) __attribute__((ALWAYS_INLINE))
#define VFID_EQ(vfid_ptr1, vfid_ptr2)
static int file_tracker_unregister(THREAD_ENTRY *thread_p, const VFID *vfid)
#define FILE_USER_PAGE_IS_MARKED_DELETED(vpid)
#define BTID_AS_ARGS(btid)
void log_append_undoredo_data2(THREAD_ENTRY *thread_p, LOG_RCVINDEX rcvindex, const VFID *vfid, PAGE_PTR pgptr, PGLENGTH offset, int undo_length, int redo_length, const void *undo_data, const void *redo_data)
STATIC_INLINE void * file_extdata_end(const FILE_EXTENSIBLE_DATA *extdata) __attribute__((ALWAYS_INLINE))
#define FILE_TEMPCACHE_ENTRY_AS_ARGS(ent)
int file_init_temp_page_type(THREAD_ENTRY *thread_p, PAGE_PTR page, void *args)
#define DB_ALIGN_BELOW(offset, align)
STATIC_INLINE void file_log_extdata_set_next(THREAD_ENTRY *thread_p, const FILE_EXTENSIBLE_DATA *extdata, PAGE_PTR page, const VPID *vpid_next) __attribute__((ALWAYS_INLINE))
int file_spacedb(THREAD_ENTRY *thread_p, SPACEDB_FILES *spacedb)
STATIC_INLINE void file_tempcache_push_tran_file(THREAD_ENTRY *thread_p, FILE_TEMPCACHE_ENTRY *entry)
int file_rv_extdata_add(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
void log_append_undoredo_crumbs(THREAD_ENTRY *thread_p, LOG_RCVINDEX rcvindex, LOG_DATA_ADDR *addr, int num_undo_crumbs, int num_redo_crumbs, const LOG_CRUMB *undo_crumbs, const LOG_CRUMB *redo_crumbs)
STATIC_INLINE int file_tracker_get_and_protect(THREAD_ENTRY *thread_p, FILE_TYPE desired_type, FILE_TRACK_ITEM *item, OID *class_oid, bool *stop)
void pgbuf_log_new_page(THREAD_ENTRY *thread_p, PAGE_PTR page_new, int data_size, PAGE_TYPE ptype_new)
int file_descriptor_update(THREAD_ENTRY *thread_p, const VFID *vfid, void *des_new)
#define FILE_PERM_TEMP_STRING(is_temp)
const void * item_to_find
int file_dealloc(THREAD_ENTRY *thread_p, const VFID *vfid, const VPID *vpid, FILE_TYPE file_type_hint)
void pgbuf_dealloc_page(THREAD_ENTRY *thread_p, PAGE_PTR page_dealloc)
int file_rv_fhead_dealloc(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
#define pthread_mutex_init(a, b)
int bit64_count_trailing_ones(UINT64 i)
#define LOG_DATA_ADDR_INITIALIZER
void log_sysop_end_logical_compensate(THREAD_ENTRY *thread_p, LOG_LSA *undo_nxlsa)
#define SECTOR_FIRST_PAGEID(sid)
#define VPID_COPY(dest_ptr, src_ptr)
STATIC_INLINE INT16 file_extdata_remaining_capacity(const FILE_EXTENSIBLE_DATA *extdata) __attribute__((ALWAYS_INLINE))
static int file_temp_reset_user_pages(THREAD_ENTRY *thread_p, const VFID *vfid)
STATIC_INLINE int file_get_tempcache_entry_index(THREAD_ENTRY *thread_p)
int logtb_get_number_of_total_tran_indices(void)
int file_alloc_multiple(THREAD_ENTRY *thread_p, const VFID *vfid, FILE_INIT_PAGE_FUNC f_init, void *f_init_args, int npages, VPID *vpids_out)
#define FILE_PARTSECT_MSG(name)
int file_numerable_truncate(THREAD_ENTRY *thread_p, const VFID *vfid, DKNPAGES npages)
void log_sysop_start_atomic(THREAD_ENTRY *thread_p)
int file_rv_extdata_merge(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int file_tracker_load(THREAD_ENTRY *thread_p, const VFID *vfid)
#define FILE_HEADER_GET_FULL_FTAB(fh, fulltab)
void log_rv_dump_hexa(FILE *fp, int length, void *data)
BTREE_ROOT_HEADER * btree_get_root_header(THREAD_ENTRY *thread_p, PAGE_PTR page_ptr)
STATIC_INLINE void file_header_dump_descriptor(THREAD_ENTRY *thread_p, const FILE_HEADER *fhead, FILE *fp) __attribute__((ALWAYS_INLINE))
STATIC_INLINE void file_log_extdata_add(THREAD_ENTRY *thread_p, const FILE_EXTENSIBLE_DATA *extdata, PAGE_PTR page, int position, int count, const void *data) __attribute__((ALWAYS_INLINE))
int file_get_type(THREAD_ENTRY *thread_p, const VFID *vfid, FILE_TYPE *ftype_out)
int file_tracker_reuse_heap(THREAD_ENTRY *thread_p, const OID *class_oid, HFID *hfid_out)
FILE_TRACK_METADATA metadata
DISK_ISVALID file_check_vpid(THREAD_ENTRY *thread_p, const VFID *vfid, const VPID *vpid_lookup)
#define pthread_mutex_unlock(a)
STATIC_INLINE bool file_extdata_is_full(const FILE_EXTENSIBLE_DATA *extdata) __attribute__((ALWAYS_INLINE))
int file_rv_fhead_convert_user_to_ftab_page(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
#define pgbuf_unfix(thread_p, pgptr)
STATIC_INLINE void file_tempcache_lock(void)
int file_create_temp_numerable(THREAD_ENTRY *thread_p, int npages, VFID *vfid)
#define FILE_IS_NUMERABLE(fh)
#define SECTOR_LAST_PAGEID(sid)
int file_manager_init(void)
static int file_tempcache_init(void)
#define ASSERT_ERROR_AND_SET(error_code)
static int file_extdata_apply_funcs(THREAD_ENTRY *thread_p, FILE_EXTENSIBLE_DATA *extdata_in, FILE_EXTDATA_FUNC f_extdata, void *f_extdata_args, FILE_EXTDATA_ITEM_FUNC f_item, void *f_item_args, bool for_write, FILE_EXTENSIBLE_DATA **extdata_out, PAGE_PTR *page_out)
static int file_temp_alloc(THREAD_ENTRY *thread_p, PAGE_PTR page_fhead, FILE_ALLOC_TYPE alloc_type, VPID *vpid_alloc_out)
static int file_extdata_find_nth_vpid_and_skip_marked(THREAD_ENTRY *thread_p, const void *data, int index, bool *stop, void *args)
#define assert_release(e)
STATIC_INLINE void file_tempcache_free_entry_list(FILE_TEMPCACHE_ENTRY **list)
void pgbuf_set_dirty(THREAD_ENTRY *thread_p, PAGE_PTR pgptr, bool free_page)
FILE_TEMPCACHE_ENTRY ** tran_files
static int file_tracker_register_internal(THREAD_ENTRY *thread_p, PAGE_PTR page_track_head, const FILE_TRACK_ITEM *item)
int thread_get_current_entry_index(void)
#define VFID_AS_ARGS(vfidp)
int file_rv_partsect_set(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
STATIC_INLINE void file_extdata_append(FILE_EXTENSIBLE_DATA *extdata, const void *append_data) __attribute__((ALWAYS_INLINE))
#define FILE_TEMPCACHE_AS_ARGS
int lock_object(THREAD_ENTRY *thread_p, const OID *oid, const OID *class_oid, LOCK lock, int cond_flag)
void log_sysop_start(THREAD_ENTRY *thread_p)
int heap_dump_capacity(THREAD_ENTRY *thread_p, FILE *fp, const HFID *hfid)
#define FILE_USER_PAGE_MARK_DELETED(vpid)
#define FILE_FLAG_NUMERABLE
STATIC_INLINE void file_extdata_remove_at(FILE_EXTENSIBLE_DATA *extdata, int position, int count) __attribute__((ALWAYS_INLINE))
STATIC_INLINE void file_tempcache_dump(FILE *fp)
#define FILE_TRACK_ITEM_AS_ARGS(item)
#define OID_SET_NULL(oidp)
int(* FILE_EXTDATA_FUNC)(THREAD_ENTRY *thread_p, const FILE_EXTENSIBLE_DATA *extdata, bool *stop, void *args)
int(* FILE_MAP_PAGE_FUNC)(THREAD_ENTRY *thread_p, PAGE_PTR *page, bool *stop, void *args)
int disk_compare_vsids(const void *first, const void *second)
#define FILE_TEMPCACHE_ENTRY_MSG
int vacuum_is_file_dropped(THREAD_ENTRY *thread_p, bool *is_file_dropped, VFID *vfid, MVCCID mvccid)
#define VSID_IS_SECTOR_OF_VPID(vsid, vpid)
static int file_set_tde_algorithm(THREAD_ENTRY *thread_p, const VFID *vfid, TDE_ALGORITHM tde_algo)
STATIC_INLINE void file_partsect_clear_bit(FILE_PARTIAL_SECTOR *partsect, int offset) __attribute__((ALWAYS_INLINE))
void file_rv_dump_vfid_and_vpid(FILE *fp, int length, void *data)
#define LSA_AS_ARGS(lsa_ptr)
static int file_tracker_item_dump_capacity(THREAD_ENTRY *thread_p, PAGE_PTR page_of_item, FILE_EXTENSIBLE_DATA *extdata, int index_item, bool *stop, void *args)
PGBUF_LATCH_CONDITION latch_cond
static int file_extdata_find_nth_vpid(THREAD_ENTRY *thread_p, const FILE_EXTENSIBLE_DATA *extdata, bool *stop, void *args)
int file_get_sticky_first_page(THREAD_ENTRY *thread_p, const VFID *vfid, VPID *vpid_out)
#define FILE_HEADER_GET_USER_PAGE_FTAB(fh, pagetab)
static void file_set_tde_algorithm_internal(FILE_HEADER *fhead, TDE_ALGORITHM tde_algo)
int file_rv_user_page_unmark_delete_physical(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int(* FILE_TRACK_ITEM_FUNC)(THREAD_ENTRY *thread_p, PAGE_PTR page_of_item, FILE_EXTENSIBLE_DATA *extdata, int index_item, bool *stop, void *args)
STATIC_INLINE void * file_extdata_start(const FILE_EXTENSIBLE_DATA *extdata) __attribute__((ALWAYS_INLINE))
#define PTR_ALIGN(addr, boundary)
#define FILE_ALLOC_TYPE_STRING(alloc_type)
#define OID_AS_ARGS(oidp)
static bool file_tempcache_check_duplicate(THREAD_ENTRY *thread_p, FILE_TEMPCACHE_ENTRY *entry, bool is_numerable)
STATIC_INLINE int file_init_page_type_internal(THREAD_ENTRY *thread_p, PAGE_PTR page, PAGE_TYPE ptype, bool is_temp) __attribute__((ALWAYS_INLINE))
#define FILE_HEADER_ALIGNED_SIZE
int disk_unreserve_ordered_sectors(THREAD_ENTRY *thread_p, DB_VOLPURPOSE purpose, int nsects, VSID *vsids)
void log_sysop_end_logical_undo(THREAD_ENTRY *thread_p, LOG_RCVINDEX rcvindex, const VFID *vfid, int undo_size, const char *undo_data)
#define er_log_debug(...)
#define VPID_AS_ARGS(vpidp)
int file_rv_dealloc_on_undo(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
static TDE_ALGORITHM file_get_tde_algorithm_internal(const FILE_HEADER *fhead)
int file_dump(THREAD_ENTRY *thread_p, const VFID *vfid, FILE *fp)
static int file_extdata_find_not_full(THREAD_ENTRY *thread_p, FILE_EXTENSIBLE_DATA **extdata, PAGE_PTR *page_out, bool *found)
STATIC_INLINE void file_header_alloc(FILE_HEADER *fhead, FILE_ALLOC_TYPE alloc_type, bool was_empty, bool is_full) __attribute__((ALWAYS_INLINE))
#define FILE_FULL_PAGE_BITMAP
FILE_TEMPCACHE_ENTRY * free_entries
#define FILE_EXTDATA_MSG(name)
int file_create_ehash_dir(THREAD_ENTRY *thread_p, int npages, bool is_tmp, FILE_EHASH_DES *des_ehash, VFID *vfid)
static int file_perm_alloc(THREAD_ENTRY *thread_p, PAGE_PTR page_fhead, FILE_ALLOC_TYPE alloc_type, VPID *vpid_alloc_out)
STATIC_INLINE void * file_extdata_at(const FILE_EXTENSIBLE_DATA *extdata, int index) __attribute__((ALWAYS_INLINE))
static int file_user_page_table_item_dump(THREAD_ENTRY *thread_p, const void *data, int index, bool *stop, void *args)
static int file_user_page_table_extdata_dump(THREAD_ENTRY *thread_p, const FILE_EXTENSIBLE_DATA *extdata, bool *stop, void *args)
int file_rv_user_page_mark_delete(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int file_create_with_npages(THREAD_ENTRY *thread_p, FILE_TYPE file_type, int npages, FILE_DESCRIPTORS *des, VFID *vfid)
#define VFID_ISNULL(vfid_ptr)
struct file_tempcache FILE_TEMPCACHE
#define pgbuf_unfix_and_init(thread_p, pgptr)
static int file_table_collect_vsid(THREAD_ENTRY *thread_p, const void *item, int index_unused, bool *stop, void *args)
int file_rv_tracker_mark_heap_deleted_compensate_or_run_postpone(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int file_rv_extdata_set_next(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
void file_tempcache_drop_tran_temp_files(THREAD_ENTRY *thread_p)
DISK_ISVALID disk_check_sectors_are_reserved(THREAD_ENTRY *thread_p, VSID *vsids, int nsects)
STATIC_INLINE void file_log_extdata_remove(THREAD_ENTRY *thread_p, const FILE_EXTENSIBLE_DATA *extdata, PAGE_PTR page, int position, int count) __attribute__((ALWAYS_INLINE))
static int file_extdata_func_for_search_ordered(THREAD_ENTRY *thread_p, const FILE_EXTENSIBLE_DATA *extdata, bool *stop, void *args)
int file_tracker_interruptable_iterate(THREAD_ENTRY *thread_p, FILE_TYPE desired_ftype, VFID *vfid, OID *class_oid)
static int file_extdata_all_item_count(THREAD_ENTRY *thread_p, FILE_EXTENSIBLE_DATA *extdata, int *count)
int file_descriptor_get(THREAD_ENTRY *thread_p, const VFID *vfid, FILE_DESCRIPTORS *desc_out)
int btree_dump_capacity(THREAD_ENTRY *thread_p, FILE *fp, BTID *btid)
PAGE_TYPE pgbuf_get_page_ptype(THREAD_ENTRY *thread_p, PAGE_PTR pgptr)
int heap_get_class_tde_algorithm(THREAD_ENTRY *thread_p, const OID *class_oid, TDE_ALGORITHM *tde_algo)
int file_alloc_sticky_first_page(THREAD_ENTRY *thread_p, const VFID *vfid, FILE_INIT_PAGE_FUNC f_init, void *f_init_args, VPID *vpid_out, PAGE_PTR *page_out)
const char * tde_get_algorithm_name(TDE_ALGORITHM tde_algo)
#define SECTOR_FROM_PAGEID(pageid)
void er_set(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
#define FILE_HEAD_FULL_MSG
static int file_compare_track_items(const void *first, const void *second)
STATIC_INLINE void file_header_sanity_check(THREAD_ENTRY *thread_p, FILE_HEADER *fhead) __attribute__((ALWAYS_INLINE))
int file_rv_fhead_alloc(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int ncached_not_numerable
static int file_perm_dealloc(THREAD_ENTRY *thread_p, PAGE_PTR page_fhead, const VPID *vpid_dealloc, FILE_ALLOC_TYPE alloc_type)
bool pgbuf_check_page_ptype(THREAD_ENTRY *thread_p, PAGE_PTR pgptr, PAGE_TYPE ptype)
int file_get_num_user_pages(THREAD_ENTRY *thread_p, const VFID *vfid, int *n_user_pages_out)
static int file_perm_expand(THREAD_ENTRY *thread_p, PAGE_PTR page_fhead)
static int file_tracker_apply_to_file(THREAD_ENTRY *thread_p, const VFID *vfid, PGBUF_LATCH_MODE mode, FILE_TRACK_ITEM_FUNC func, void *args)
#define FILE_TABLESPACE_AS_ARGS(tabspace)
int prm_get_integer_value(PARAM_ID prm_id)
#define pgbuf_set_dirty_and_free(thread_p, pgptr)
int spacedb(UTIL_FUNCTION_ARG *arg)
LOG_LSA * pgbuf_get_lsa(PAGE_PTR pgptr)
int file_tracker_dump_all_btree_capacities(THREAD_ENTRY *thread_p, FILE *fp)
void file_rv_dump_extdata_set_next(FILE *fp, int ignore_length, void *data)
STATIC_INLINE void file_tempcache_cache_or_drop_entries(THREAD_ENTRY *thread_p, FILE_TEMPCACHE_ENTRY **entries)
static int file_rv_partsect_update(THREAD_ENTRY *thread_p, LOG_RCV *rcv, bool set)
int file_apply_tde_algorithm(THREAD_ENTRY *thread_p, const VFID *vfid, const TDE_ALGORITHM tde_algo)
#define ER_OUT_OF_VIRTUAL_MEMORY
void log_append_undo_data(THREAD_ENTRY *thread_p, LOG_RCVINDEX rcvindex, LOG_DATA_ADDR *addr, int length, const void *data)
static int file_partial_table_item_dump(THREAD_ENTRY *thread_p, const void *data, int index, bool *stop, void *args)
#define FILE_USER_PAGE_CLEAR_MARK_DELETED(vpid)
int heap_get_hfid_from_vfid(THREAD_ENTRY *thread_p, const VFID *vfid, HFID *hfid)
#define FILE_NUMERABLE_REGULAR_STRING(is_numerable)
static int file_table_append_full_sector_page(THREAD_ENTRY *thread_p, PAGE_PTR page_fhead, const VPID *vpid_new)
#define FILE_HEADER_GET_PART_FTAB(fh, parttab)
#define FILE_RV_DEALLOC_COMPENSATE
int xfile_apply_tde_to_class_files(THREAD_ENTRY *thread_p, const OID *class_oid)
static int file_tracker_item_dump_heap(THREAD_ENTRY *thread_p, PAGE_PTR page_of_item, FILE_EXTENSIBLE_DATA *extdata, int index_item, bool *stop, void *args)
STATIC_INLINE int file_tempcache_alloc_entry(FILE_TEMPCACHE_ENTRY **entry)
#define pgbuf_promote_read_latch(thread_p, pgptr_p, condition)
UINT64 bit64_clear(UINT64 i, int off)
int file_get_tde_algorithm(THREAD_ENTRY *thread_p, const VFID *vfid, PGBUF_LATCH_CONDITION fix_head_cond, TDE_ALGORITHM *tde_algo)
int file_tracker_dump_all_capacities(THREAD_ENTRY *thread_p, FILE *fp)
STATIC_INLINE int file_tempcache_get(THREAD_ENTRY *thread_p, FILE_TYPE ftype, bool numerable, FILE_TEMPCACHE_ENTRY **entry)
void lock_unlock_object(THREAD_ENTRY *thread_p, const OID *oid, const OID *class_oid, LOCK lock, bool force)
void log_append_compensate_with_undo_nxlsa(THREAD_ENTRY *thread_p, LOG_RCVINDEX rcvindex, const VPID *vpid, PGLENGTH offset, PAGE_PTR pgptr, int length, const void *data, LOG_TDES *tdes, const LOG_LSA *undo_nxlsa)
static enum scanner_mode mode
#define VPID_EQ(vpid_ptr1, vpid_ptr2)
STATIC_INLINE void file_header_update_mark_deleted(THREAD_ENTRY *thread_p, PAGE_PTR page_fhead, int delta) __attribute__((ALWAYS_INLINE))
STATIC_INLINE int file_header_copy(THREAD_ENTRY *thread_p, const VFID *vfid, FILE_HEADER *fhead_copy) __attribute__((ALWAYS_INLINE))
#define HFID_SET_NULL(hfid)
#define FILE_TEMPCACHE_MSG
STATIC_INLINE bool file_table_collector_has_page(FILE_FTAB_COLLECTOR *collector, VPID *vpid) __attribute__((ALWAYS_INLINE))
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)
STATIC_INLINE FILE_TEMPCACHE_ENTRY * file_tempcache_pop_tran_file(THREAD_ENTRY *thread_p, const VFID *vfid)
STATIC_INLINE void file_log_fhead_dealloc(THREAD_ENTRY *thread_p, PAGE_PTR page_fhead, FILE_ALLOC_TYPE alloc_type, bool is_empty, bool was_full) __attribute__((ALWAYS_INLINE))
static DISK_ISVALID file_table_check(THREAD_ENTRY *thread_p, const VFID *vfid, DISK_VOLMAP_CLONE *disk_map_clone)
static VPID file_Tracker_vpid
TDE_ALGORITHM pgbuf_get_tde_algorithm(PAGE_PTR pgptr)
#define heap_classrepr_free_and_init(class_repr, idxp)
FILE_TEMPCACHE_ENTRY * cached_not_numerable
STATIC_INLINE int file_partsect_pageid_to_offset(FILE_PARTIAL_SECTOR *partsect, PAGEID pageid) __attribute__((ALWAYS_INLINE))
#define FILE_PARTSECT_AS_ARGS(ps)
static void file_tempcache_final(void)
#define PGBUF_PAGE_MODIFY_MSG(name)
int file_alloc(THREAD_ENTRY *thread_p, const VFID *vfid, FILE_INIT_PAGE_FUNC f_init, void *f_init_args, VPID *vpid_out, PAGE_PTR *page_out)
void file_temp_preserve(THREAD_ENTRY *thread_p, const VFID *vfid)
FILE_PARTIAL_SECTOR * partsect_ftab
#define FILE_TRACK_ITEM_MSG
#define ER_PAGE_LATCH_PROMOTE_FAIL
STATIC_INLINE void file_extdata_insert_at(FILE_EXTENSIBLE_DATA *extdata, int position, int count, const void *data) __attribute__((ALWAYS_INLINE))
UINT64 bit64_set(UINT64 i, int off)
FILE_FTAB_COLLECTOR ftab_collector
int logtb_get_current_tran_index(void)
void log_append_run_postpone(THREAD_ENTRY *thread_p, LOG_RCVINDEX rcvindex, LOG_DATA_ADDR *addr, const VPID *rcv_vpid, int length, const void *data, const LOG_LSA *ref_lsa)
#define PGBUF_PAGE_MODIFY_ARGS(pg, prev_lsa)
STATIC_INLINE void file_extdata_update_item(THREAD_ENTRY *thread_p, PAGE_PTR page_extdata, const void *item_newval, int index_item, FILE_EXTENSIBLE_DATA *extdata) __attribute__((ALWAYS_INLINE))
static int file_tracker_item_dump_heap_capacity(THREAD_ENTRY *thread_p, PAGE_PTR page_of_item, FILE_EXTENSIBLE_DATA *extdata, int index_item, bool *stop, void *args)
bool LSA_ISNULL(const log_lsa *lsa_ptr)
int file_create_heap(THREAD_ENTRY *thread_p, bool reuse_oid, const OID *class_oid, VFID *vfid)
#define db_private_free_and_init(thrd, ptr)
static int file_compare_vpids(const void *first, const void *second)
#define FILE_FLAG_TEMPORARY
void log_append_undoredo_data(THREAD_ENTRY *thread_p, LOG_RCVINDEX rcvindex, LOG_DATA_ADDR *addr, int undo_length, int redo_length, const void *undo_data, const void *redo_data)
#define pgbuf_fix(thread_p, vpid, fetch_mode, requestmode, condition)
SPACEDB_FILES spacedb_temp
#define FILE_CACHE_LAST_FIND_NTH(fh)
static int file_tracker_init_page(THREAD_ENTRY *thread_p, PAGE_PTR page, void *args)
#define file_log(func, msg,...)
STATIC_INLINE void file_header_dealloc(FILE_HEADER *fhead, FILE_ALLOC_TYPE alloc_type, bool is_empty, bool was_full) __attribute__((ALWAYS_INLINE))
#define db_private_free(thrd, ptr)
STATIC_INLINE bool file_partsect_is_empty(FILE_PARTIAL_SECTOR *partsect) __attribute__((ALWAYS_INLINE))
#define db_private_alloc(thrd, size)
STATIC_INLINE bool file_extdata_can_merge(const FILE_EXTENSIBLE_DATA *extdata_src, const FILE_EXTENSIBLE_DATA *extdata_dest) __attribute__((ALWAYS_INLINE))
static int file_extdata_collect_ftab_pages(THREAD_ENTRY *thread_p, const FILE_EXTENSIBLE_DATA *extdata, bool *stop, void *args)
int file_create_temp(THREAD_ENTRY *thread_p, int npages, VFID *vfid)
int file_temp_retire_preserved(THREAD_ENTRY *thread_p, const VFID *vfid)
bool logtb_set_check_interrupt(THREAD_ENTRY *thread_p, bool flag)
#define CEIL_PTVDIV(dividend, divisor)
OR_CLASSREP * heap_classrepr_get(THREAD_ENTRY *thread_p, const OID *class_oid, RECDES *class_recdes, REPR_ID reprid, int *idx_incache)
VFID * heap_ovf_find_vfid(THREAD_ENTRY *thread_p, const HFID *hfid, VFID *ovf_vfid, bool docreate, PGBUF_LATCH_CONDITION latch_cond)
int count(int &result, const cub_regex_object ®, const std::string &src, const int position, const INTL_CODESET codeset)
STATIC_INLINE bool file_partsect_is_bit_set(FILE_PARTIAL_SECTOR *partsect, int offset) __attribute__((ALWAYS_INLINE))
static int file_tracker_item_spacedb(THREAD_ENTRY *thread_p, PAGE_PTR page_of_item, FILE_EXTENSIBLE_DATA *extdata, int index_item, bool *stop, void *args)
#define HFID_AS_ARGS(hfid)
void pgbuf_get_vpid(PAGE_PTR pgptr, VPID *vpid)
int file_rv_tracker_reuse_heap(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
#define VFID_COPY(vfid_ptr1, vfid_ptr2)
const char * file_type_to_string(FILE_TYPE fstruct_type)
void log_sysop_abort(THREAD_ENTRY *thread_p)
static int file_tracker_item_dump_btree_capacity(THREAD_ENTRY *thread_p, PAGE_PTR page_of_item, FILE_EXTENSIBLE_DATA *extdata, int index_item, bool *stop, void *args)
static VFID file_Tracker_vfid
void file_rv_dump_extdata_remove(FILE *fp, int length, void *data)
MVCCID logtb_get_current_mvccid(THREAD_ENTRY *thread_p)
STATIC_INLINE int file_table_collect_ftab_pages(THREAD_ENTRY *thread_p, PAGE_PTR page_fhead, bool collect_numerable, FILE_FTAB_COLLECTOR *collector_out) __attribute__((ALWAYS_INLINE))
int file_descriptor_dump(THREAD_ENTRY *thread_p, const VFID *vfid, FILE *fp)
int file_init_page_type(THREAD_ENTRY *thread_p, PAGE_PTR page, void *args)
void log_append_postpone(THREAD_ENTRY *thread_p, LOG_RCVINDEX rcvindex, LOG_DATA_ADDR *addr, int length, const void *data)
#define VPID_ISNULL(vpid_ptr)
STATIC_INLINE void file_tempcache_check_lock(void)
STATIC_INLINE INT16 file_extdata_item_count(const FILE_EXTENSIBLE_DATA *extdata) __attribute__((ALWAYS_INLINE))
void file_rv_dump_extdata_add(FILE *fp, int length, void *data)
STATIC_INLINE void perfmon_inc_stat(THREAD_ENTRY *thread_p, PERF_STAT_ID psid) __attribute__((ALWAYS_INLINE))
void file_postpone_destroy(THREAD_ENTRY *thread_p, const VFID *vfid)
LOG_TDES * LOG_FIND_CURRENT_TDES(THREAD_ENTRY *thread_p=NULL)
bool log_check_system_op_is_started(THREAD_ENTRY *thread_p)
int file_rv_perm_expand_undo(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int file_tracker_dump(THREAD_ENTRY *thread_p, FILE *fp)
STATIC_INLINE void file_partsect_set_bit(FILE_PARTIAL_SECTOR *partsect, int offset) __attribute__((ALWAYS_INLINE))
int file_rv_destroy(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
STATIC_INLINE int file_extdata_size(const FILE_EXTENSIBLE_DATA *extdata) __attribute__((ALWAYS_INLINE))
int file_rv_user_page_unmark_delete_logical(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
STATIC_INLINE bool file_partsect_alloc(FILE_PARTIAL_SECTOR *partsect, VPID *vpid_out, int *offset_out) __attribute__((ALWAYS_INLINE))
static void file_print_name_of_class(THREAD_ENTRY *thread_p, FILE *fp, const OID *class_oid_p)
static FILE_TEMPCACHE * file_Tempcache
#define FILE_TYPE_CAN_BE_NUMERABLE(ftype)
static int file_extdata_add_item_count(THREAD_ENTRY *thread_p, const FILE_EXTENSIBLE_DATA *extdata, bool *stop, void *args)
int file_create_ehash(THREAD_ENTRY *thread_p, int npages, bool is_tmp, FILE_EHASH_DES *des_ehash, VFID *vfid)
#define FILE_EMPTY_PAGE_BITMAP
STATIC_INLINE int file_extdata_max_size(const FILE_EXTENSIBLE_DATA *extdata) __attribute__((ALWAYS_INLINE))
#define FILE_IS_TEMPORARY(fh)
#define FILE_TABLESPACE_FOR_TEMP_NPAGES(tabspace, npages)
static int file_tracker_register(THREAD_ENTRY *thread_p, const VFID *vfid, FILE_TYPE ftype, FILE_TRACK_METADATA *metadata)
static int file_compare_vfids(const void *first, const void *second)
#define free_and_init(ptr)
STATIC_INLINE bool file_tempcache_put(THREAD_ENTRY *thread_p, FILE_TEMPCACHE_ENTRY *entry)
#define LOG_ISRESTARTED()
#define DB_ALIGN(offset, align)
static int file_full_table_item_dump(THREAD_ENTRY *thread_p, const void *data, int index, bool *stop, void *args)
static int file_table_move_partial_sectors_to_header(THREAD_ENTRY *thread_p, PAGE_PTR page_fhead, FILE_ALLOC_TYPE alloc_type, VPID *vpid_alloc_out)
#define VSID_FROM_VPID(vsid, vpid)
void heap_dump(THREAD_ENTRY *thread_p, FILE *fp, HFID *hfid, bool dump_records)
#define FILE_EXTDATA_HEADER_ALIGNED_SIZE
#define FILE_FLAG_ENCRYPTED_MASK
STATIC_INLINE void file_extdata_merge_unordered(const FILE_EXTENSIBLE_DATA *extdata_src, FILE_EXTENSIBLE_DATA *extdata_dest) __attribute__((ALWAYS_INLINE))
int file_rv_extdata_remove(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int btree_get_btid_from_file(THREAD_ENTRY *thread_p, const VFID *vfid, BTID *btid_out)
STATIC_INLINE void file_header_init(FILE_HEADER *fhead) __attribute__((ALWAYS_INLINE))
STATIC_INLINE void file_extdata_append_array(FILE_EXTENSIBLE_DATA *extdata, const void *append_data, INT16 count) __attribute__((ALWAYS_INLINE))
static int file_table_check_page_is_in_sectors(THREAD_ENTRY *thread_p, const void *data, int index, bool *stop, void *args)
void pgbuf_set_page_ptype(THREAD_ENTRY *thread_p, PAGE_PTR pgptr, PAGE_TYPE ptype)
bool prm_get_bool_value(PARAM_ID prm_id)
int file_rv_tracker_mark_heap_deleted(THREAD_ENTRY *thread_p, LOG_RCV *rcv, bool is_undo)
STATIC_INLINE int file_temp_retire_internal(THREAD_ENTRY *thread_p, const VFID *vfid, bool was_preserved) __attribute__((ALWAYS_INLINE))
#define FILE_EXTDATA_AS_ARGS(extdata)
static int file_partial_table_extdata_dump(THREAD_ENTRY *thread_p, const FILE_EXTENSIBLE_DATA *extdata, bool *stop, void *args)
void log_sysop_attach_to_outer(THREAD_ENTRY *thread_p)
void log_sysop_commit(THREAD_ENTRY *thread_p)
static int file_extdata_item_func_for_search(THREAD_ENTRY *thread_p, const void *item, int index, bool *stop, void *args)
static int file_sector_map_pages(THREAD_ENTRY *thread_p, const void *data, int index, bool *stop, void *args)
int file_get_tran_num_temp_files(THREAD_ENTRY *thread_p)
#define FILE_FLAG_ENCRYPTED_ARIA
STATIC_INLINE void file_tempcache_retire_entry(FILE_TEMPCACHE_ENTRY *entry)
STATIC_INLINE int file_table_collect_all_vsids(THREAD_ENTRY *thread_p, PAGE_PTR page_fhead, FILE_VSID_COLLECTOR *collector_out) __attribute__((ALWAYS_INLINE))
int file_rv_set_tde_algorithm(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
#define VSID_AS_ARGS(vsidp)
FILE_OVF_BTREE_DES btree_key_overflow
STATIC_INLINE int file_temp_set_type(THREAD_ENTRY *thread_p, VFID *vfid, FILE_TYPE ftype) __attribute__((ALWAYS_INLINE))
int file_rv_fhead_convert_ftab_to_user_page(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int file_create_query_area(THREAD_ENTRY *thread_p, VFID *vfid)
int file_rv_perm_expand_redo(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
static int file_tracker_item_reuse_heap(THREAD_ENTRY *thread_p, PAGE_PTR page_of_item, FILE_EXTENSIBLE_DATA *extdata, int index_item, bool *stop, void *args)
#define FILE_GET_HEADER_VPID(vfid, vpid)
STATIC_INLINE bool file_extdata_merge_pages(THREAD_ENTRY *thread_p, const FILE_EXTENSIBLE_DATA *extdata_src, const PAGE_PTR page_src, FILE_EXTENSIBLE_DATA *extdata_dest, PAGE_PTR page_dest, int(*compare_func)(const void *, const void *), bool ordered) __attribute__((ALWAYS_INLINE))
int file_rv_header_update_mark_deleted(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
static int file_tracker_item_mark_heap_deleted(THREAD_ENTRY *thread_p, PAGE_PTR page_of_item, FILE_EXTENSIBLE_DATA *extdata, int index_item, bool *stop, void *args)
#define pthread_mutex_lock(a)
STATIC_INLINE int file_create_temp_internal(THREAD_ENTRY *thread_p, int npages, FILE_TYPE ftype, bool is_numerable, VFID *vfid_out) __attribute__((ALWAYS_INLINE))
static int file_sector_map_dealloc(THREAD_ENTRY *thread_p, const void *data, int index, bool *stop, void *args)
#define FILE_FTAB_COLLECTOR_INITIALIZER
#define VSID_EQ(first, second)
#define FILE_TABLESPACE_MSG
bool pgbuf_has_any_waiters(PAGE_PTR pgptr)
PGBUF_LATCH_MODE latch_mode
void log_sysop_end_logical_run_postpone(THREAD_ENTRY *thread_p, LOG_LSA *posp_lsa)
#define FILE_TABLESPACE_FOR_PERM_NPAGES(tabspace, npages)
#define PGBUF_PAGE_LSA_AS_ARGS(pg)
FILE_TEMPCACHE_ENTRY * cached_numerable
int(* FILE_INIT_PAGE_FUNC)(THREAD_ENTRY *thread_p, PAGE_PTR page, void *args)
int file_tracker_create(THREAD_ENTRY *thread_p, VFID *vfid_tracker_out)
#define PGBUF_PAGE_STATE_MSG(name)
FILE_OVF_HEAP_DES heap_overflow
#define FILE_DESCRIPTORS_SIZE
STATIC_INLINE void file_extdata_merge_ordered(const FILE_EXTENSIBLE_DATA *extdata_src, FILE_EXTENSIBLE_DATA *extdata_dest, int(*compare_func)(const void *, const void *)) __attribute__((ALWAYS_INLINE))
int heap_get_indexinfo_of_btid(THREAD_ENTRY *thread_p, const OID *class_oid, const BTID *btid, BTREE_TYPE *type, int *num_attrs, ATTR_ID **attr_ids, int **attrs_prefix_length, char **btnamepp, int *func_index_col_id)
STATIC_INLINE void file_header_dump(THREAD_ENTRY *thread_p, const FILE_HEADER *fhead, FILE *fp) __attribute__((ALWAYS_INLINE))
STATIC_INLINE void file_log_fhead_alloc(THREAD_ENTRY *thread_p, PAGE_PTR page_fhead, FILE_ALLOC_TYPE alloc_type, bool was_empty, bool is_full) __attribute__((ALWAYS_INLINE))
void file_manager_final(void)
int file_rv_fhead_set_last_user_page_ftab(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int heap_get_class_info(THREAD_ENTRY *thread_p, const OID *class_oid, HFID *hfid_out, FILE_TYPE *ftype_out, char **classname_out)
#define FILE_GET_TRACKER_LOCK_MODE(file_type)
#define FILE_FLAG_ENCRYPTED_AES
int file_rv_tracker_unregister_undo(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
#define FILE_HEAD_ALLOC_AS_ARGS(fhead)
int heap_get_class_name(THREAD_ENTRY *thread_p, const OID *class_oid, char **class_name)
#define ER_TDE_CIPHER_IS_NOT_LOADED
static int file_rv_dealloc_internal(THREAD_ENTRY *thread_p, LOG_RCV *rcv, bool compensate_or_run_postpone)
#define FILE_PARTIAL_SECTOR_INITIALIZER
FILE_ALLOC_BITMAP page_bitmap
STATIC_INLINE bool file_extdata_is_empty(const FILE_EXTENSIBLE_DATA *extdata) __attribute__((ALWAYS_INLINE))
#define VPID_SET_NULL(vpid_ptr)
STATIC_INLINE void file_tempcache_unlock(void)
int file_tracker_dump_all_heap(THREAD_ENTRY *thread_p, FILE *fp, bool dump_records)
void pgbuf_set_tde_algorithm(THREAD_ENTRY *thread_p, PAGE_PTR pgptr, TDE_ALGORITHM tde_algo, bool skip_logging)
#define PGBUF_PAGE_STATE_ARGS(pg)
STATIC_INLINE void file_extdata_init(INT16 item_size, INT16 max_size, FILE_EXTENSIBLE_DATA *extdata) __attribute__((ALWAYS_INLINE))
static int file_tracker_map(THREAD_ENTRY *thread_p, PGBUF_LATCH_MODE latch_mode, FILE_TRACK_ITEM_FUNC func, void *args)
int file_is_temp(THREAD_ENTRY *thread_p, const VFID *vfid, bool *is_temp)
#define FILE_ALLOC_BITMAP_NBITS
FILE_TEMPCACHE_ENTRY * next
#define VFID_SET_NULL(vfid_ptr)
static int file_tracker_spacedb(THREAD_ENTRY *thread_p, SPACEDB_FILES *spacedb)
VPID * pgbuf_get_vpid_ptr(PAGE_PTR pgptr)
int util_bsearch(const void *key, const void *base, int n_elems, unsigned int sizeof_elem, int(*func_compare)(const void *, const void *), bool *out_found)
int file_tracker_dump_all_heap_capacities(THREAD_ENTRY *thread_p, FILE *fp)
#define DISK_SECTOR_NPAGES
static int file_tracker_item_dump(THREAD_ENTRY *thread_p, PAGE_PTR page_of_item, FILE_EXTENSIBLE_DATA *extdata, int index_item, bool *stop, void *args)
DISK_ISVALID file_tracker_check(THREAD_ENTRY *thread_p)
bool bit64_is_set(UINT64 i, int off)
#define ER_CANNOT_CHECK_FILE
static int file_file_map_set_tde_algorithm(THREAD_ENTRY *thread_p, PAGE_PTR *page, bool *stop, void *args)
#define pthread_mutex_destroy(a)
int file_rv_dealloc_on_postpone(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int file_map_pages(THREAD_ENTRY *thread_p, const VFID *vfid, PGBUF_LATCH_MODE latch_mode, PGBUF_LATCH_CONDITION latch_cond, FILE_MAP_PAGE_FUNC func, void *args)
#define FILE_HEAD_FULL_AS_ARGS(fhead)
static void file_extdata_find_ordered(const FILE_EXTENSIBLE_DATA *extdata, const void *item_to_find, int(*compare_func)(const void *, const void *), bool *found, int *position)