CUBRID Engine  latest
file_io.h
Go to the documentation of this file.
1 /*
2  * Copyright 2008 Search Solution Corporation
3  * Copyright 2016 CUBRID Corporation
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 
20 /*
21  * file_io.h - I/O module at server
22  *
23  */
24 
25 #ifndef _FILE_IO_H_
26 #define _FILE_IO_H_
27 
28 #ident "$Id$"
29 
30 #include "config.h"
31 #include "dbtype_def.h"
32 #include "log_lsa.hpp"
33 #include "lz4.h"
34 #include "memory_hash.h"
35 #include "porting.h"
36 #include "porting_inline.hpp"
37 #include "release_string.h"
38 #include "storage_common.h"
39 #include "thread_compat.hpp"
40 
41 #include <stdio.h>
42 #include <time.h>
43 
44 #define NULL_VOLDES (-1) /* Value of a null (invalid) vol descriptor */
45 
46 #define FILEIO_INITIAL_BACKUP_UNITS 0
47 #define FILEIO_NO_BACKUP_UNITS -1
48 
49 /* Note: this value must be at least as large as PATH_MAX */
50 #define FILEIO_MAX_USER_RESPONSE_SIZE 2000
51 
52 #if defined(WINDOWS)
53 #define S_ISDIR(mode) ((mode) & _S_IFDIR)
54 #define S_ISREG(mode) ((mode) & _S_IFREG)
55 #endif /* WINDOWS */
56 
57 #define FILEIO_FIRST_BACKUP_VOL_INFO 0
58 #define FILEIO_SECOND_BACKUP_VOL_INFO 1
59 #define FILEIO_BACKUP_NUM_THREADS_AUTO 0
60 #define FILEIO_BACKUP_SLEEP_MSECS_AUTO 0
61 
62 /* FILEIO_PAGE_FLAG (pflag in FILEIO_PAGE_RESERVED) */
63 #define FILEIO_PAGE_FLAG_ENCRYPTED_AES 0x1
64 #define FILEIO_PAGE_FLAG_ENCRYPTED_ARIA 0x2
65 
66 #define FILEIO_PAGE_FLAG_ENCRYPTED_MASK 0x3
67 
68 #if defined(WINDOWS)
69 #define STR_PATH_SEPARATOR "\\"
70 #else /* WINDOWS */
71 #define STR_PATH_SEPARATOR "/"
72 #endif /* WINDOWS */
73 
74 #define PEEK true /* Peek volume label pointer */
75 #define ALLOC_COPY false /* alloc and copy volume label */
76 
77 /* If the last character of path string is PATH_SEPARATOR, don't append PATH_SEPARATOR */
78 #define FILEIO_PATH_SEPARATOR(path) \
79  (path[strlen(path) - 1] == PATH_SEPARATOR ? "" : STR_PATH_SEPARATOR)
80 
81 /* Definitions of some log archive and backup names */
82 #define FILEIO_SUFFIX_LOGACTIVE "_lgat"
83 #define FILEIO_SUFFIX_LOGARCHIVE "_lgar"
84 #define FILEIO_SUFFIX_TMP_LOGARCHIVE "_lgar_t"
85 #define FILEIO_SUFFIX_LOGINFO "_lginf"
86 #define FILEIO_SUFFIX_BACKUP "_bk"
87 #define FILEIO_SUFFIX_BACKUP_VOLINFO "_bkvinf"
88 #define FILEIO_VOLEXT_PREFIX "_x"
89 #define FILEIO_VOLTMP_PREFIX "_t"
90 #define FILEIO_VOLINFO_SUFFIX "_vinf"
91 #define FILEIO_VOLLOCK_SUFFIX "__lock"
92 #define FILEIO_SUFFIX_DWB "_dwb"
93 #define FILEIO_SUFFIX_KEYS "_keys"
94 #define FILEIO_MAX_SUFFIX_LENGTH 7
95 
96 typedef enum
97 {
98  FILEIO_BACKUP_FULL_LEVEL = 0, /* Full backup */
99  FILEIO_BACKUP_BIG_INCREMENT_LEVEL, /* Backup since last full backup */
100  FILEIO_BACKUP_SMALL_INCREMENT_LEVEL, /* Backup since last INCRBIG */
101  FILEIO_BACKUP_UNDEFINED_LEVEL /* Undefined (must be highest ordinal value) */
103 
104 typedef enum
105 {
107  FILEIO_ZIP_LZO1X_METHOD, /* LZO1X - Unsupported */
110  FILEIO_ZIP_UNDEFINED_METHOD /* Undefined (must be highest ordinal value) */
112 
113 typedef enum
114 {
117  FILEIO_ZIP_UNDEFINED_LEVEL, /* Undefined (must be highest ordinal value) */
120 
121 typedef enum
122 {
127 
128 typedef enum
129 {
137 
138 typedef enum
139 {
140  FILEIO_ERROR_INTERRUPT, /* error/interrupt */
141  FILEIO_READ, /* access device for read */
142  FILEIO_WRITE /* access device for write */
143 } FILEIO_TYPE;
144 
145 typedef enum
146 {
147  FILEIO_BACKUP_WRITE, /* access backup device for write */
148  FILEIO_BACKUP_READ /* access backup device for read */
150 
151 typedef enum
152 {
157 
158 typedef enum
159 {
163 
164 typedef enum
165 {
166  FILEIO_WRITE_DEFAULT_WRITE, /* default write mode does compensate write including sync */
169 
170 /* Reserved area of FILEIO_PAGE */
173 {
174  LOG_LSA lsa; /* Log Sequence number of page, Page recovery stuff */
175  INT32 pageid; /* Page identifier */
176  INT16 volid; /* Volume identifier where the page reside */
177  unsigned char ptype; /* Page type */
178  unsigned char pflag;
179  INT32 p_reserve_1;
180  INT32 p_reserve_2; /* unused - Reserved field */
181  INT64 tde_nonce; /* tde nonce. atomic counter for temp pages, lsa for perm pages */
182 };
183 
186 {
187  LOG_LSA lsa; /* duplication of prv.lsa */
188 };
189 
190 /* The FILEIO_PAGE */
191 typedef struct fileio_page FILEIO_PAGE;
193 {
194  FILEIO_PAGE_RESERVED prv; /* System page area. Reserved */
195  char page[1]; /* The user page area */
196 
197  // You cannot directly access prv2 like page_ptr.prv2, since it does not point to the real location */
198  FILEIO_PAGE_WATERMARK prv2; /* system page area. It should be located at the end of page. */
199 };
200 
203 {
204  return (FILEIO_PAGE_WATERMARK *) (((char *) io_page) + (page_size - sizeof (FILEIO_PAGE_WATERMARK)));
205 }
206 
207 STATIC_INLINE void
209 {
210  LSA_SET_NULL (&io_page->prv.lsa);
211 
212  FILEIO_PAGE_WATERMARK *prv2 = fileio_get_page_watermark_pos (io_page, page_size);
213  LSA_SET_NULL (&prv2->lsa);
214 }
215 
216 STATIC_INLINE void
218 {
219  LSA_SET_NULL (&io_page->prv.lsa);
220 
221  FILEIO_PAGE_WATERMARK *prv2 = fileio_get_page_watermark_pos (io_page, page_size);
222 
223  LSA_SET_NULL (&prv2->lsa);
224 }
225 
226 STATIC_INLINE void
228 {
229  LSA_COPY (&io_page->prv.lsa, lsa);
230 
231  FILEIO_PAGE_WATERMARK *prv2 = fileio_get_page_watermark_pos (io_page, page_size);
232 
233  LSA_COPY (&prv2->lsa, lsa);
234 }
235 
236 STATIC_INLINE int
238 {
239  FILEIO_PAGE_WATERMARK *prv2 = fileio_get_page_watermark_pos (io_page, page_size);
240 
241  return (LSA_EQ (&io_page->prv.lsa, &prv2->lsa));
242 }
243 
246 {
247  PAGEID iopageid; /* Identifier of page to buffer */
248  INT32 dummy; /* Dummy field for 8byte align */
249  FILEIO_PAGE iopage; /* The content of the page */
250  PAGEID iopageid_dup; /* Copy of pageid for redundant checking during restore. Note: that the offset of this
251  * field cannot be used, because the size of an iopage is not know until run-time.
252  * Take care when trying to access this value. */
253 };
254 
255 /*
256  * During incremental restores, this structure helps keep track of
257  * which pages have already been restored, so we do not overwrite newer
258  * pages from an earlier backup.
259  */
262 {
264  int vol_id;
265  int size;
266  unsigned char *bitmap;
267 };
268 
271 {
274 };
275 
278 {
279  INT64 at_time;
281 };
282 
283 /* Backup header */
284 
287 {
288  PAGEID iopageid; /* Must be the same as start of an FILEIO_BACKUP_PAGE NOTE: a union would be better. */
289  char magic[CUBRID_MAGIC_MAX_LENGTH]; /* Magic value for file/magic Unix utility */
290  float db_compatibility; /* Compatibility of the database against the current release of CUBRID */
291  int bk_hdr_version; /* For future compatibility checking */
292  INT64 db_creation; /* Database creation time */
293  INT64 start_time; /* Time of backup start */
294  INT64 end_time; /* Time of backup end */
295  char db_release[REL_MAX_RELEASE_LENGTH]; /* CUBRID Release */
296  char db_fullname[PATH_MAX]; /* Fullname of backed up database. Really more than one byte */
297  PGLENGTH db_iopagesize; /* Size of database pages */
298  FILEIO_BACKUP_LEVEL level; /* Backup level: one of the following level 0: Full backup, every database page that
299  * has been allocated. level 1: All database pages that have changed since last level 0
300  * backup level 2: All database pages that have changed since last level 0 or 1. */
301  LOG_LSA start_lsa; /* A page with a LSA greater than this value is going to be backed up. */
302  LOG_LSA chkpt_lsa; /* LSA for next incremental backup */
303 
304  /* remember lsa's for every backup level */
305  int unit_num; /* Part # of removable backup vol, count from 1 */
306  int bkup_iosize; /* Buffered io size when backup was taken */
308 
309  /* Backward chain to preceding backup volume. */
310  char db_prec_bkvolname[PATH_MAX];
311 
312  /* Forward chain to next backup volume. Note not implemented yet. */
313  char db_next_bkvolname[PATH_MAX];
314 
315  int bkpagesize; /* size of backup page */
316  FILEIO_ZIP_METHOD zip_method; /* compression method */
317  FILEIO_ZIP_LEVEL zip_level; /* compression level */
319 };
320 
321 /* Shouldn't this structure should use int and such? */
324 {
325  char loc_db_fullname[PATH_MAX]; /* Fullname specified in the database-loc-file */
326  char log_path[PATH_MAX]; /* for restore */
327  LOG_LSA last_chkpt_lsa; /* The chkpt_lsa of the highest level backup volume in the restore session. */
328  int vdes; /* Open descriptor of backup device */
329  const char *vlabel; /* Pointer to current backup device name */
330  char name[PATH_MAX]; /* Name of the current backup volume: either a file, or a raw device. */
331 
332  /* Original source location to backup (restore) volumes. Can be a directory or raw device. Used for mult. volumes. */
333  char current_path[PATH_MAX];
334 
335  int dtype; /* Set to the type (dir, file, dev) */
336  INT64 iosize; /* Optimal I/O pagesize for backup device */
337  INT64 count; /* Number of current buffered bytes */
338  INT64 voltotalio; /* Total number of bytes that have been either read or written (current volume) */
339  INT64 alltotalio; /* total for all volumes */
340  char *buffer; /* Pointer to the buffer */
341  char *ptr; /* Pointer to the first buffered byte when reading and pointer to the next byte to
342  * buffer when writing */
343  FILEIO_BACKUP_HEADER *bkuphdr; /* pointer to header information */
344 };
345 
348 {
349  FILEIO_BACKUP_LEVEL level; /* Backup level: one of the following level 0: Full backup, every database page that
350  * has been allocated. level 1: All database pages that have changed since last level 0
351  * backup level 2: All database pages that have changed since last level 0 or 1. */
352  LOG_LSA lsa; /* A page with a LSA greater than this value is going to be backed up. */
353  int vdes; /* Open file descriptor of device name for writing purposes */
354  VOLID volid; /* Identifier of volume to backup/restore */
355  INT64 nbytes; /* Number of bytes of file */
356  const char *vlabel; /* Pointer to file name to backup */
357 #if (__WORDSIZE == 32)
358  int dummy; /* Dummy field for 8byte align */
359 #endif
360  FILEIO_BACKUP_PAGE *area; /* Area to read/write the page */
361 };
362 
365 {
366  int buf_len; /* compressed block size */
367  char buf[1]; /* data block */
368 };
369 
372 {
373  int buf_size; /* allocated block size */
374  FILEIO_ZIP_PAGE zip_page; /* zip page */
375 };
376 
377 typedef struct fileio_node FILEIO_NODE;
379 {
380  struct fileio_node *prev;
381  struct fileio_node *next;
382  int pageid;
383  bool writeable;
384  ssize_t nread;
385  FILEIO_BACKUP_PAGE *area; /* Area to read/write the page */
386  FILEIO_ZIP_INFO *zip_info; /* Zip info containing area to compress/decompress the page */
387 };
388 
389 typedef struct fileio_queue FILEIO_QUEUE;
391 {
392  int size;
396 };
397 
400 {
401 #if defined(SERVER_MODE)
402  pthread_mutex_t mtx;
403  pthread_cond_t rcv; /* condition variable of read_thread */
404  pthread_cond_t wcv; /* condition variable of write_thread */
405 #endif /* SERVER_MODE */
406 
408 
409  int num_threads; /* number of read threads plus one write thread */
410  int act_r_threads; /* number of activated read threads */
411  int end_r_threads; /* number of ended read threads */
412 
413  int pageid;
415 
417  int errid;
418 
421 
424 
426 };
427 
430 {
432  FILEIO_BACKUP_BUFFER bkup; /* Buffering area for backup device */
433  FILEIO_BACKUP_DB_BUFFER dbfile; /* Buffer area for database files */
434  FILEIO_THREAD_INFO read_thread_info; /* read-threads info */
435  FILE *verbose_fp; /* Backupdb/Restoredb status msg */
436  int sleep_msecs; /* sleep internval in msecs */
437 };
438 
439 typedef struct token_bucket TOKEN_BUCKET;
441 {
442  pthread_mutex_t token_mutex;
443  int tokens; /* shared tokens between all lines */
444  int token_consumed; /* TODO: Remove me? This seems to server no true purpose. */
445 
446  pthread_cond_t waiter_cond;
447 };
448 
449 typedef struct flush_stats FLUSH_STATS;
451 {
452  unsigned int num_log_pages;
453  unsigned int num_pages;
454  unsigned int num_tokens;
455 };
456 
457 extern int fileio_open (const char *vlabel, int flags, int mode);
458 extern void fileio_close (int vdes);
459 extern int fileio_format (THREAD_ENTRY * thread_p, const char *db_fullname, const char *vlabel, VOLID volid,
460  DKNPAGES npages, bool sweep_clean, bool dolock, bool dosync, size_t page_size,
461  int kbytes_to_be_written_per_sec, bool reuse_file);
462 #if !defined (CS_MODE)
463 extern int fileio_expand_to (THREAD_ENTRY * threda_p, VOLID volid, DKNPAGES npages_toadd, DB_VOLTYPE voltype);
464 #endif /* not CS_MODE */
465 extern void *fileio_initialize_pages (THREAD_ENTRY * thread_p, int vdes, FILEIO_PAGE * io_pgptr, DKNPAGES start_pageid,
466  DKNPAGES npages, size_t page_size, int kbytes_to_be_written_per_sec);
467 extern void fileio_initialize_res (THREAD_ENTRY * thread_p, FILEIO_PAGE * io_page, PGLENGTH page_size);
468 #if defined (ENABLE_UNUSED_FUNCTION)
469 extern DKNPAGES fileio_truncate (VOLID volid, DKNPAGES npages_to_resize);
470 #endif
471 extern void fileio_unformat (THREAD_ENTRY * thread_p, const char *vlabel);
472 extern void fileio_unformat_and_rename (THREAD_ENTRY * thread_p, const char *vlabel, const char *new_vlabel);
473 extern int fileio_copy_volume (THREAD_ENTRY * thread_p, int from_vdes, DKNPAGES npages, const char *to_vlabel,
474  VOLID to_volid, bool reset_recvinfo);
475 extern int fileio_reset_volume (THREAD_ENTRY * thread_p, int vdes, const char *vlabel, DKNPAGES npages,
476  const LOG_LSA * reset_lsa);
477 extern int fileio_mount (THREAD_ENTRY * thread_p, const char *db_fullname, const char *vlabel, VOLID volid,
478  int lockwait, bool dosync);
479 extern void fileio_dismount (THREAD_ENTRY * thread_p, int vdes);
480 extern void fileio_dismount_without_fsync (THREAD_ENTRY * thread_p, int vdes);
481 extern void fileio_dismount_all (THREAD_ENTRY * thread_p);
482 extern void *fileio_read (THREAD_ENTRY * thread_p, int vol_fd, void *io_page_p, PAGEID page_id, size_t page_size);
483 extern void *fileio_write_or_add_to_dwb (THREAD_ENTRY * thread_p, int vol_fd, FILEIO_PAGE * io_page_p, PAGEID page_id,
484  size_t page_size);
485 extern void *fileio_write (THREAD_ENTRY * thread_p, int vol_fd, void *io_page_p, PAGEID page_id, size_t page_size,
486  FILEIO_WRITE_MODE write_mode);
487 extern void *fileio_read_pages (THREAD_ENTRY * thread_p, int vol_fd, char *io_pages_p, PAGEID page_id, int num_pages,
488  size_t page_size);
489 extern void *fileio_write_pages (THREAD_ENTRY * thread_p, int vol_fd, char *io_pages_p, PAGEID page_id, int num_pages,
490  size_t page_size, FILEIO_WRITE_MODE write_mode);
491 extern void *fileio_writev (THREAD_ENTRY * thread_p, int vdes, void **arrayof_io_pgptr, PAGEID start_pageid,
492  DKNPAGES npages, size_t page_size);
493 extern int fileio_synchronize (THREAD_ENTRY * thread_p, int vdes, const char *vlabel,
494  FILEIO_SYNC_OPTION check_sync_dwb);
495 extern int fileio_synchronize_all (THREAD_ENTRY * thread_p, bool include_log);
496 #if defined (ENABLE_UNUSED_FUNCTION)
497 extern void *fileio_read_user_area (THREAD_ENTRY * thread_p, int vdes, PAGEID pageid, off_t start_offset, size_t nbytes,
498  void *area);
499 extern void *fileio_write_user_area (THREAD_ENTRY * thread_p, int vdes, PAGEID pageid, off_t start_offset, int nbytes,
500  void *area);
501 #endif
502 extern bool fileio_is_volume_exist_and_file (const char *vlabel);
503 extern DKNPAGES fileio_get_number_of_volume_pages (int vdes, size_t page_size);
504 extern char *fileio_get_volume_label (VOLID volid, bool is_peek);
505 extern char *fileio_get_volume_label_by_fd (int vol_fd, bool is_peek);
506 extern VOLID fileio_find_volume_id_with_label (THREAD_ENTRY * thread_p, const char *vlabel);
507 extern bool fileio_is_temp_volume (THREAD_ENTRY * thread_p, VOLID volid);
508 extern bool fileio_is_permanent_volume_descriptor (THREAD_ENTRY * thread_p, int vol_fd);
512 
514 extern bool fileio_map_mounted (THREAD_ENTRY * thread_p, bool (*fun) (THREAD_ENTRY * thread_p, VOLID volid, void *args),
515  void *args);
516 extern int fileio_get_number_of_partition_free_pages (const char *path, size_t page_size); /* remove me */
517 extern DKNSECTS fileio_get_number_of_partition_free_sectors (const char *path_p);
518 extern const char *fileio_rename (VOLID volid, const char *old_vlabel, const char *new_vlabel);
519 extern bool fileio_is_volume_exist (const char *vlabel);
520 extern int fileio_find_volume_descriptor_with_label (const char *vol_label_p);
521 extern int fileio_get_max_name (const char *path, long int *filename_max, long int *pathname_max);
522 extern const char *fileio_get_base_file_name (const char *fullname);
523 extern char *fileio_get_directory_path (char *path, const char *fullname);
524 extern int fileio_get_volume_max_suffix (void);
525 extern void fileio_make_volume_info_name (char *volinfo_name, const char *db_fullname);
526 extern void fileio_make_volume_ext_name (char *volext_fullname, const char *ext_path, const char *ext_name,
527  VOLID volid);
528 extern void fileio_make_volume_ext_given_name (char *volext_fullname, const char *ext_path, const char *ext_name);
529 extern void fileio_make_volume_temp_name (char *voltmp_fullname, const char *tmp_path, const char *tmp_name,
530  VOLID volid);
531 extern void fileio_make_log_active_name (char *logactive_name, const char *log_path, const char *dbname);
532 extern void fileio_make_temp_log_files_from_backup (char *temp_log_name, VOLID volid, FILEIO_BACKUP_LEVEL level,
533  const char *base_log_name);
534 extern void fileio_make_log_archive_name (char *logarchive_name, const char *log_path, const char *dbname, int arvnum);
535 extern void fileio_make_removed_log_archive_name (char *logarchive_name, const char *log_path, const char *dbname);
536 extern void fileio_make_log_archive_temp_name (char *log_archive_temp_name_p, const char *log_path_p,
537  const char *db_name_p);
538 extern void fileio_make_log_info_name (char *loginfo_name, const char *log_path, const char *dbname);
539 extern void fileio_make_backup_volume_info_name (char *backup_volinfo_name, const char *backinfo_path,
540  const char *dbname);
541 extern void fileio_make_backup_name (char *backup_name, const char *nopath_volname, const char *backup_path,
542  FILEIO_BACKUP_LEVEL level, int unit_num);
543 extern void fileio_make_dwb_name (char *dwb_name_p, const char *dwb_path_p, const char *db_name_p);
544 extern void fileio_make_keys_name (char *keys_name_p, const char *db_name_p);
545 extern void fileio_make_keys_name_given_path (char *keys_name_p, const char *keys_path_p, const char *db_name_p);
546 #ifdef UNSTABLE_TDE_FOR_REPLICATION_LOG
547 extern void fileio_make_ha_sock_name (char *sock_path_p, const char *base_path_p, const char *sock_name_p);
548 #endif /* UNSTABLE_TDE_FOR_REPLICATION_LOG */
549 extern void fileio_remove_all_backup (THREAD_ENTRY * thread_p, int level);
550 extern FILEIO_BACKUP_SESSION *fileio_initialize_backup (const char *db_fullname, const char *backup_destination,
552  const char *verbose_file_path, int num_threads,
553  int sleep_msecs);
554 extern FILEIO_BACKUP_SESSION *fileio_start_backup (THREAD_ENTRY * thread_p, const char *db_fullname,
555  INT64 * db_creation, FILEIO_BACKUP_LEVEL backup_level,
556  LOG_LSA * backup_start_lsa, LOG_LSA * backup_ckpt_lsa,
557  FILEIO_BACKUP_RECORD_INFO * all_levels_info,
558  FILEIO_BACKUP_SESSION * session, FILEIO_ZIP_METHOD zip_method,
559  FILEIO_ZIP_LEVEL zip_level);
561 extern void fileio_abort_backup (THREAD_ENTRY * thread_p, FILEIO_BACKUP_SESSION * session, bool does_unformat_bk);
562 extern int fileio_backup_volume (THREAD_ENTRY * thread_p, FILEIO_BACKUP_SESSION * session, const char *from_vlabel,
563  VOLID from_volid, PAGEID last_page, bool only_updated_pages);
564 extern FILEIO_BACKUP_SESSION *fileio_start_restore (THREAD_ENTRY * thread_p, const char *db_fullname,
565  char *backup_source, INT64 match_dbcreation,
566  PGLENGTH * db_iopagesize, float *db_compatibility,
568  bool authenticate, INT64 match_bkupcreation,
569  const char *restore_verbose_file_path, bool newvolpath);
570 extern int fileio_finish_restore (THREAD_ENTRY * thread_p, FILEIO_BACKUP_SESSION * session);
571 extern void fileio_abort_restore (THREAD_ENTRY * thread_p, FILEIO_BACKUP_SESSION * session);
572 extern int fileio_list_restore (THREAD_ENTRY * thread_p, const char *db_fullname, char *backup_source,
573  FILEIO_BACKUP_LEVEL level, bool newvolpath);
574 extern int fileio_get_backup_volume (THREAD_ENTRY * thread_p, const char *db_fullname, const char *logpath,
575  const char *user_backuppath, int try_level, char *from_volbackup);
576 extern int fileio_get_next_restore_file (THREAD_ENTRY * thread_p, FILEIO_BACKUP_SESSION * session, char *filename,
577  VOLID * volid);
578 extern int fileio_restore_volume (THREAD_ENTRY * thread_p, FILEIO_BACKUP_SESSION * session, char *to_vlabel,
579  char *verbose_to_vlabel, char *prev_vlabel, FILEIO_RESTORE_PAGE_BITMAP * page_bitmap,
580  bool remember_pages);
581 extern int fileio_skip_restore_volume (THREAD_ENTRY * thread_p, FILEIO_BACKUP_SESSION * session);
582 extern const char *fileio_get_zip_method_string (FILEIO_ZIP_METHOD zip_method);
583 extern const char *fileio_get_zip_level_string (FILEIO_ZIP_LEVEL zip_level);
584 
585 
586 extern int fileio_read_backup_info_entries (FILE * fp, int which_bkvinf);
587 extern int fileio_write_backup_info_entries (FILE * fp, int which_bkvinf);
588 extern const char *fileio_get_backup_info_volume_name (FILEIO_BACKUP_LEVEL level, int unit_num, int which_bkvinf);
589 extern int fileio_add_volume_to_backup_info (const char *name, FILEIO_BACKUP_LEVEL level, int unit_num,
590  int which_bkvinf);
591 extern int fileio_clear_backup_info_level (int level, bool dealloc, int which_bkvinf);
592 extern void fileio_finalize_backup_info (int which_bkvinf);
593 
595  const char *prompt, char *response, const char *failure_prompt, int range_low,
596  int range_high, const char *secondary_prompt, int reprompt_value);
597 
598 #if !defined(WINDOWS)
599 extern FILEIO_LOCKF_TYPE fileio_lock_la_log_path (const char *db_fullname, const char *lock_path, int vdes,
600  int *last_deleted_arv_num);
601 extern FILEIO_LOCKF_TYPE fileio_lock_la_dbname (int *lockf_vdes, char *db_name, char *log_path);
602 extern FILEIO_LOCKF_TYPE fileio_unlock_la_dbname (int *lockf_vdes, char *db_name, bool clear_owner);
603 extern int fileio_symlink (const char *src, const char *dest, int overwrite);
604 extern int fileio_set_permission (const char *vlabel);
605 #endif /* !WINDOWS */
606 
607 #if defined(SERVER_MODE)
608 int fileio_os_sysconf (void);
609 #endif /* SERVER_MODE */
610 
611 /* flush control related */
612 extern int fileio_flush_control_initialize (void);
613 extern void fileio_flush_control_finalize (void);
614 
615 /* flush token management */
616 extern int fileio_flush_control_add_tokens (THREAD_ENTRY * thread_p, INT64 diff_usec, int *token_gen,
617  int *token_consumed);
618 
620 extern FILEIO_RESTORE_PAGE_BITMAP *fileio_page_bitmap_create (int vol_id, int total_pages);
622  int vol_id);
626 extern int fileio_set_page_checksum (THREAD_ENTRY * thread_p, FILEIO_PAGE * io_page);
627 extern int fileio_page_check_corruption (THREAD_ENTRY * thread_p, FILEIO_PAGE * io_page, bool * is_page_corrupted);
628 extern void fileio_page_hexa_dump (const char *data, int length);
629 extern bool fileio_is_formatted_page (THREAD_ENTRY * thread_p, const char *io_page);
630 #endif /* _FILE_IO_H_ */
STATIC_INLINE FILEIO_PAGE_WATERMARK * fileio_get_page_watermark_pos(FILEIO_PAGE *io_page, PGLENGTH page_size)
Definition: file_io.h:202
FILEIO_ZIP_INFO * zip_info
Definition: file_io.h:386
int page_size
Definition: unloaddb.c:52
void fileio_make_volume_temp_name(char *voltmp_fullname, const char *tmp_path, const char *tmp_name, VOLID volid)
Definition: file_io.c:5690
FILEIO_BACKUP_SESSION * fileio_initialize_backup(const char *db_fullname, const char *backup_destination, FILEIO_BACKUP_SESSION *session, FILEIO_BACKUP_LEVEL level, const char *verbose_file_path, int num_threads, int sleep_msecs)
Definition: file_io.c:6729
int pageid
Definition: file_io.h:382
pthread_mutex_t token_mutex
Definition: file_io.h:442
int fileio_request_user_response(THREAD_ENTRY *thread_p, FILEIO_REMOTE_PROMPT_TYPE prompt_id, const char *prompt, char *response, const char *failure_prompt, int range_low, int range_high, const char *secondary_prompt, int reprompt_value)
Definition: file_io.c:11304
bool only_updated_pages
Definition: file_io.h:419
int fileio_flush_control_initialize(void)
Definition: file_io.c:658
int fileio_list_restore(THREAD_ENTRY *thread_p, const char *db_fullname, char *backup_source, FILEIO_BACKUP_LEVEL level, bool newvolpath)
Definition: file_io.c:9703
void * fileio_initialize_pages(THREAD_ENTRY *thread_p, int vdes, FILEIO_PAGE *io_pgptr, DKNPAGES start_pageid, DKNPAGES npages, size_t page_size, int kbytes_to_be_written_per_sec)
Definition: file_io.c:1864
void * fileio_read(THREAD_ENTRY *thread_p, int vol_fd, void *io_page_p, PAGEID page_id, size_t page_size)
Definition: file_io.c:3950
int token_consumed
Definition: file_io.h:444
FILEIO_PAGE_WATERMARK prv2
Definition: file_io.h:198
bool LSA_EQ(const log_lsa *plsa1, const log_lsa *plsa2)
Definition: log_lsa.hpp:160
unsigned char * bitmap
Definition: file_io.h:266
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)
Definition: file_io.c:4227
int fileio_read_backup_info_entries(FILE *fp, int which_bkvinf)
Definition: file_io.c:11065
void fileio_page_bitmap_list_init(FILEIO_RESTORE_PAGE_BITMAP_LIST *page_bitmap_list)
Definition: file_io.c:11601
bool fileio_map_mounted(THREAD_ENTRY *thread_p, bool(*fun)(THREAD_ENTRY *thread_p, VOLID volid, void *args), void *args)
void LSA_COPY(log_lsa *plsa1, const log_lsa *plsa2)
Definition: log_lsa.hpp:139
PAGEID DKNPAGES
VOLID fileio_find_previous_temp_volume(THREAD_ENTRY *thread_p, VOLID volid)
Definition: file_io.c:6458
void fileio_unformat(THREAD_ENTRY *thread_p, const char *vlabel)
Definition: file_io.c:2721
bool fileio_is_temp_volume(THREAD_ENTRY *thread_p, VOLID volid)
Definition: file_io.c:6358
bool writeable
Definition: file_io.h:383
FILEIO_REMOTE_PROMPT_TYPE
Definition: file_io.h:128
int fileio_skip_restore_volume(THREAD_ENTRY *thread_p, FILEIO_BACKUP_SESSION *session)
Definition: file_io.c:10559
void fileio_make_log_archive_name(char *logarchive_name, const char *log_path, const char *dbname, int arvnum)
Definition: file_io.c:5758
unsigned char ptype
Definition: file_io.h:177
void fileio_page_bitmap_list_add(FILEIO_RESTORE_PAGE_BITMAP_LIST *page_bitmap_list, FILEIO_RESTORE_PAGE_BITMAP *page_bitmap)
Definition: file_io.c:11684
const char * fileio_get_zip_method_string(FILEIO_ZIP_METHOD zip_method)
Definition: file_io.c:10747
char * fileio_get_volume_label_by_fd(int vol_fd, bool is_peek)
Definition: file_io.c:6254
const char * vlabel
Definition: file_io.h:329
STATIC_INLINE void fileio_init_lsa_of_page(FILEIO_PAGE *io_page, PGLENGTH page_size)
Definition: file_io.h:208
int fileio_mount(THREAD_ENTRY *thread_p, const char *db_fullname, const char *vlabel, VOLID volid, int lockwait, bool dosync)
Definition: file_io.c:2957
#define REL_MAX_RELEASE_LENGTH
INT16 VOLID
int fileio_flush_control_add_tokens(THREAD_ENTRY *thread_p, INT64 diff_usec, int *token_gen, int *token_consumed)
Definition: file_io.c:819
const char * fileio_get_zip_level_string(FILEIO_ZIP_LEVEL zip_level)
Definition: file_io.c:10774
int buf_size
Definition: file_io.h:373
bool fileio_is_volume_exist(const char *vlabel)
Definition: file_io.c:5094
unsigned int num_tokens
Definition: file_io.h:454
int fileio_find_volume_descriptor_with_label(const char *vol_label_p)
Definition: file_io.c:6544
void fileio_make_volume_info_name(char *volinfo_name, const char *db_fullname)
Definition: file_io.c:5636
int fileio_get_number_of_partition_free_pages(const char *path, size_t page_size)
Definition: file_io.c:4937
STATIC_INLINE void fileio_reset_page_lsa(FILEIO_PAGE *io_page, PGLENGTH page_size)
Definition: file_io.h:217
FILEIO_RESTORE_PAGE_BITMAP * head
Definition: file_io.h:272
void fileio_make_keys_name_given_path(char *keys_name_p, const char *keys_path_p, const char *db_name_p)
Definition: file_io.c:5914
ssize_t nread
Definition: file_io.h:384
void * fileio_write_or_add_to_dwb(THREAD_ENTRY *thread_p, int vol_fd, FILEIO_PAGE *io_page_p, PAGEID page_id, size_t page_size)
Definition: file_io.c:4024
int fileio_restore_volume(THREAD_ENTRY *thread_p, FILEIO_BACKUP_SESSION *session, char *to_vlabel, char *verbose_to_vlabel, char *prev_vlabel, FILEIO_RESTORE_PAGE_BITMAP *page_bitmap, bool remember_pages)
Definition: file_io.c:10235
FILEIO_BACKUP_HEADER * bkuphdr
Definition: file_io.h:343
void fileio_make_backup_volume_info_name(char *backup_volinfo_name, const char *backinfo_path, const char *dbname)
Definition: file_io.c:5833
int fileio_set_permission(const char *vlabel)
Definition: file_io.c:2002
DKNSECTS fileio_get_number_of_partition_free_sectors(const char *path_p)
Definition: file_io.c:5003
int fileio_expand_to(THREAD_ENTRY *threda_p, VOLID volid, DKNPAGES npages_toadd, DB_VOLTYPE voltype)
Definition: file_io.c:2512
unsigned int num_pages
Definition: file_io.h:453
int fileio_finish_restore(THREAD_ENTRY *thread_p, FILEIO_BACKUP_SESSION *session)
Definition: file_io.c:9683
struct fileio_node * next
Definition: file_io.h:381
FILEIO_BACKUP_PAGE * area
Definition: file_io.h:360
void THREAD_ENTRY
FILEIO_WRITE_MODE
Definition: file_io.h:164
void fileio_make_volume_ext_name(char *volext_fullname, const char *ext_path, const char *ext_name, VOLID volid)
Definition: file_io.c:5654
FILEIO_RESTORE_PAGE_BITMAP * fileio_page_bitmap_list_find(FILEIO_RESTORE_PAGE_BITMAP_LIST *page_bitmap_list, int vol_id)
Definition: file_io.c:11653
void fileio_finalize_backup_info(int which_bkvinf)
Definition: file_io.c:11143
int size
Definition: file_io.h:265
char * fileio_get_directory_path(char *path, const char *fullname)
Definition: file_io.c:5567
VOLID fileio_find_next_perm_volume(THREAD_ENTRY *thread_p, VOLID volid)
Definition: file_io.c:6410
int fileio_synchronize_all(THREAD_ENTRY *thread_p, bool include_log)
Definition: file_io.c:4618
int fileio_get_next_restore_file(THREAD_ENTRY *thread_p, FILEIO_BACKUP_SESSION *session, char *filename, VOLID *volid)
Definition: file_io.c:9960
void fileio_make_keys_name(char *keys_name_p, const char *db_name_p)
Definition: file_io.c:5897
void fileio_make_log_active_name(char *logactive_name, const char *log_path, const char *dbname)
Definition: file_io.c:5707
void fileio_page_bitmap_list_destroy(FILEIO_RESTORE_PAGE_BITMAP_LIST *page_bitmap_list)
Definition: file_io.c:11726
const char * fileio_rename(VOLID volid, const char *old_vlabel, const char *new_vlabel)
Definition: file_io.c:5070
FILEIO_ZIP_LEVEL
Definition: file_io.h:113
#define STATIC_INLINE
void fileio_close(int vdes)
Definition: file_io.c:2078
#define CUBRID_MAGIC_MAX_LENGTH
FILEIO_RESTORE_PAGE_BITMAP * fileio_page_bitmap_create(int vol_id, int total_pages)
Definition: file_io.c:11615
int tokens
Definition: file_io.h:443
void fileio_make_temp_log_files_from_backup(char *temp_log_name, VOLID volid, FILEIO_BACKUP_LEVEL level, const char *base_log_name)
Definition: file_io.c:5726
const char * vlabel
Definition: file_io.h:356
void fileio_abort_restore(THREAD_ENTRY *thread_p, FILEIO_BACKUP_SESSION *session)
Definition: file_io.c:8980
int fileio_synchronize(THREAD_ENTRY *thread_p, int vdes, const char *vlabel, FILEIO_SYNC_OPTION check_sync_dwb)
Definition: file_io.c:4441
const char * fileio_get_backup_info_volume_name(FILEIO_BACKUP_LEVEL level, int unit_num, int which_bkvinf)
Definition: file_io.c:11118
void fileio_page_hexa_dump(const char *data, int length)
Definition: file_io.c:3597
static enum scanner_mode mode
FILEIO_NODE * tail
Definition: file_io.h:394
FILE * verbose_fp
Definition: file_io.h:435
unsigned int num_log_pages
Definition: file_io.h:452
FILEIO_TYPE io_type
Definition: file_io.h:416
int fileio_set_page_checksum(THREAD_ENTRY *thread_p, FILEIO_PAGE *io_page)
void fileio_make_dwb_name(char *dwb_name_p, const char *dwb_path_p, const char *db_name_p)
Definition: file_io.c:5881
int fileio_page_check_corruption(THREAD_ENTRY *thread_p, FILEIO_PAGE *io_page, bool *is_page_corrupted)
Definition: file_io.c:11831
bool fileio_is_formatted_page(THREAD_ENTRY *thread_p, const char *io_page)
Definition: file_io.c:11841
FILEIO_LOCKF_TYPE
Definition: file_io.h:151
FILEIO_LOCKF_TYPE fileio_lock_la_dbname(int *lockf_vdes, char *db_name, char *log_path)
Definition: file_io.c:1545
FILEIO_ZIP_PAGE zip_page
Definition: file_io.h:374
FILEIO_RESTORE_PAGE_BITMAP * tail
Definition: file_io.h:273
void fileio_abort_backup(THREAD_ENTRY *thread_p, FILEIO_BACKUP_SESSION *session, bool does_unformat_bk)
Definition: file_io.c:7052
DKNPAGES fileio_get_number_of_volume_pages(int vdes, size_t page_size)
Definition: file_io.c:4918
static char * dbname
STATIC_INLINE void fileio_set_page_lsa(FILEIO_PAGE *io_page, const LOG_LSA *lsa, PGLENGTH page_size)
Definition: file_io.h:227
float db_compatibility
Definition: file_io.h:290
FILEIO_BACKUP_SESSION * fileio_start_backup(THREAD_ENTRY *thread_p, const char *db_fullname, INT64 *db_creation, FILEIO_BACKUP_LEVEL backup_level, LOG_LSA *backup_start_lsa, LOG_LSA *backup_ckpt_lsa, FILEIO_BACKUP_RECORD_INFO *all_levels_info, FILEIO_BACKUP_SESSION *session, FILEIO_ZIP_METHOD zip_method, FILEIO_ZIP_LEVEL zip_level)
Definition: file_io.c:7155
FILEIO_BACKUP_LEVEL level
Definition: file_io.h:298
struct fileio_page_watermark FILEIO_PAGE_WATERMARK
Definition: file_io.h:184
FILEIO_BACKUP_LEVEL level
Definition: file_io.h:349
pthread_cond_t waiter_cond
Definition: file_io.h:446
VOLID fileio_find_previous_perm_volume(THREAD_ENTRY *thread_p, VOLID volid)
Definition: file_io.c:6434
unsigned char pflag
Definition: file_io.h:178
FILEIO_SYNC_OPTION
Definition: file_io.h:158
void fileio_flush_control_finalize(void)
Definition: file_io.c:702
LOG_LSA last_chkpt_lsa
Definition: file_io.h:327
char * db_name
char * fileio_get_volume_label(VOLID volid, bool is_peek)
Definition: file_io.c:6182
int fileio_open(const char *vlabel, int flags, int mode)
Definition: file_io.c:1957
FILEIO_ZIP_LEVEL zip_level
Definition: file_io.h:317
void fileio_make_log_archive_temp_name(char *log_archive_temp_name_p, const char *log_path_p, const char *db_name_p)
Definition: file_io.c:5793
const char * fileio_get_base_file_name(const char *fullname)
Definition: file_io.c:5533
int fileio_reset_volume(THREAD_ENTRY *thread_p, int vdes, const char *vlabel, DKNPAGES npages, const LOG_LSA *reset_lsa)
Definition: file_io.c:2903
FILEIO_BACKUP_VOL_TYPE
Definition: file_io.h:121
void fileio_dismount_all(THREAD_ENTRY *thread_p)
Definition: file_io.c:3374
void fileio_remove_all_backup(THREAD_ENTRY *thread_p, int level)
Definition: file_io.c:7446
FILEIO_BACKUP_DB_BUFFER dbfile
Definition: file_io.h:433
FILEIO_BACKUP_TYPE
Definition: file_io.h:145
int fileio_clear_backup_info_level(int level, bool dealloc, int which_bkvinf)
Definition: file_io.c:11245
PGLENGTH db_iopagesize
Definition: file_io.h:297
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)
Definition: file_io.c:4314
void * fileio_writev(THREAD_ENTRY *thread_p, int vdes, void **arrayof_io_pgptr, PAGEID start_pageid, DKNPAGES npages, size_t page_size)
Definition: file_io.c:4412
int fileio_symlink(const char *src, const char *dest, int overwrite)
Definition: file_io.c:11503
FILEIO_PAGE iopage
Definition: file_io.h:249
DB_VOLTYPE
Definition: dbtype_def.h:192
int fileio_get_volume_descriptor(VOLID volid)
Definition: file_io.c:6488
bool fileio_is_permanent_volume_descriptor(THREAD_ENTRY *thread_p, int vol_fd)
Definition: file_io.c:6387
INT16 PGLENGTH
FILEIO_NODE * free_list
Definition: file_io.h:395
int fileio_backup_volume(THREAD_ENTRY *thread_p, FILEIO_BACKUP_SESSION *session, const char *from_vlabel, VOLID from_volid, PAGEID last_page, bool only_updated_pages)
Definition: file_io.c:8215
void LSA_SET_NULL(log_lsa *lsa_ptr)
Definition: log_lsa.hpp:146
void fileio_make_log_info_name(char *loginfo_name, const char *log_path, const char *dbname)
Definition: file_io.c:5815
FILEIO_BACKUP_SESSION * fileio_finish_backup(THREAD_ENTRY *thread_p, FILEIO_BACKUP_SESSION *session)
Definition: file_io.c:7336
FILEIO_BACKUP_TYPE type
Definition: file_io.h:431
FILEIO_THREAD_INFO read_thread_info
Definition: file_io.h:434
FILEIO_TYPE
Definition: file_io.h:138
int fileio_copy_volume(THREAD_ENTRY *thread_p, int from_vdes, DKNPAGES npages, const char *to_vlabel, VOLID to_volid, bool reset_recvinfo)
Definition: file_io.c:2809
int fileio_write_backup_info_entries(FILE *fp, int which_bkvinf)
Definition: file_io.c:11030
int fileio_get_volume_max_suffix(void)
Definition: file_io.c:5604
void fileio_make_removed_log_archive_name(char *logarchive_name, const char *log_path, const char *dbname)
Definition: file_io.c:5777
void fileio_make_backup_name(char *backup_name, const char *nopath_volname, const char *backup_path, FILEIO_BACKUP_LEVEL level, int unit_num)
Definition: file_io.c:5853
struct fileio_node * prev
Definition: file_io.h:380
FILEIO_BACKUP_PAGE * area
Definition: file_io.h:385
bool fileio_is_volume_exist_and_file(const char *vlabel)
Definition: file_io.c:5132
STATIC_INLINE int fileio_is_page_sane(FILEIO_PAGE *io_page, PGLENGTH page_size)
Definition: file_io.h:237
void fileio_dismount_without_fsync(THREAD_ENTRY *thread_p, int vdes)
Definition: file_io.c:3170
FILEIO_BACKUP_BUFFER bkup
Definition: file_io.h:432
int fileio_format(THREAD_ENTRY *thread_p, const char *db_fullname, const char *vlabel, VOLID volid, DKNPAGES npages, bool sweep_clean, bool dolock, bool dosync, size_t page_size, int kbytes_to_be_written_per_sec, bool reuse_file)
Definition: file_io.c:2314
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)
Definition: file_io.c:9846
int vol_id
Definition: file_io.h:264
FILEIO_NODE * head
Definition: file_io.h:393
INT32 PAGEID
int fileio_get_max_name(const char *path, long int *filename_max, long int *pathname_max)
Definition: file_io.c:5459
void fileio_unformat_and_rename(THREAD_ENTRY *thread_p, const char *vlabel, const char *new_vlabel)
Definition: file_io.c:2736
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)
Definition: file_io.c:4150
FILEIO_PAGE_RESERVED prv
Definition: file_io.h:194
FILEIO_LOCKF_TYPE fileio_lock_la_log_path(const char *db_fullname, const char *lock_path, int vdes, int *last_deleted_arv_num)
Definition: file_io.c:1392
SECTID DKNSECTS
FILEIO_LOCKF_TYPE fileio_unlock_la_dbname(int *lockf_vdes, char *db_name, bool clear_owner)
Definition: file_io.c:1691
FILEIO_BACKUP_LEVEL
Definition: file_io.h:96
FILEIO_QUEUE io_queue
Definition: file_io.h:425
void fileio_dismount(THREAD_ENTRY *thread_p, int vdes)
Definition: file_io.c:3134
FILEIO_ZIP_METHOD
Definition: file_io.h:104
FILEIO_BACKUP_SESSION * fileio_start_restore(THREAD_ENTRY *thread_p, const char *db_fullname, char *backup_source, INT64 match_dbcreation, PGLENGTH *db_iopagesize, float *db_compatibility, FILEIO_BACKUP_SESSION *session, FILEIO_BACKUP_LEVEL level, bool authenticate, INT64 match_bkupcreation, const char *restore_verbose_file_path, bool newvolpath)
Definition: file_io.c:9264
VOLID fileio_find_volume_id_with_label(THREAD_ENTRY *thread_p, const char *vlabel)
Definition: file_io.c:6319
FILEIO_ZIP_METHOD zip_method
Definition: file_io.h:316
FILEIO_RESTORE_PAGE_BITMAP * next
Definition: file_io.h:263
int fileio_add_volume_to_backup_info(const char *name, FILEIO_BACKUP_LEVEL level, int unit_num, int which_bkvinf)
Definition: file_io.c:10954
void fileio_initialize_res(THREAD_ENTRY *thread_p, FILEIO_PAGE *io_page, PGLENGTH page_size)
Definition: file_io.c:11577
PAGEID iopageid_dup
Definition: file_io.h:250
void fileio_make_volume_ext_given_name(char *volext_fullname, const char *ext_path, const char *ext_name)
Definition: file_io.c:5672