CUBRID Engine  latest
file_manager.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_manager.h - interface for file manager
22  */
23 
24 #ifndef _FILE_MANAGER_H_
25 #define _FILE_MANAGER_H_
26 
27 #ident "$Id$"
28 
29 #include "config.h"
30 
31 #include "storage_common.h"
32 #include "disk_manager.h"
33 #include "log_manager.h"
34 #include "oid.h"
35 #include "page_buffer.h"
36 #include "tde.h"
37 
38 typedef enum
39 {
55 } FILE_TYPE;
56 
57 /* Set a vfid with values of volid and fileid */
58 #define VFID_SET(vfid_ptr, volid_value, fileid_value) \
59  do { \
60  (vfid_ptr)->volid = (volid_value); \
61  (vfid_ptr)->fileid = (fileid_value); \
62  } while (0)
63 
64 /* Set the vpid to an invalid one */
65 #define VFID_SET_NULL(vfid_ptr) \
66  VFID_SET (vfid_ptr, NULL_VOLID, NULL_FILEID)
67 
68 /* Copy a vfid1 with the values of another vfid2 */
69 #define VFID_COPY(vfid_ptr1, vfid_ptr2) \
70  *(vfid_ptr1) = *(vfid_ptr2)
71 
72 #define VFID_ISNULL(vfid_ptr) \
73  ((vfid_ptr)->fileid == NULL_FILEID)
74 
75 #define VFID_EQ(vfid_ptr1, vfid_ptr2) \
76  ((vfid_ptr1) == (vfid_ptr2) \
77  || ((vfid_ptr1)->fileid == (vfid_ptr2)->fileid \
78  && (vfid_ptr1)->volid == (vfid_ptr2)->volid))
79 
80 /* Heap file descriptor */
83 {
86 };
87 
88 /* Overflow heap file descriptor */
91 {
94 };
95 
96 /* Btree file descriptor */
99 {
101  int attr_id;
102 };
103 
104 /* Overflow key file descriptor */
107 {
110 };
111 
112 /* Extensible Hash file descriptor */
115 {
117  int attr_id;
118 };
119 
120 /* Vacuum data file descriptor */
123 {
125 };
126 
127 /* note: if you change file descriptors size, make sure to change disk compatibility version too! */
128 #define FILE_DESCRIPTORS_SIZE 64
131 {
135  FILE_OVF_BTREE_DES btree_key_overflow; /* TODO: rename FILE_OVF_BTREE_DES */
138  char dummy_align[FILE_DESCRIPTORS_SIZE];
139 };
140 
141 /* FILE_TABLESPACE: defines the space usage and extensions for files */
144 {
149 };
150 
151 typedef int (*FILE_INIT_PAGE_FUNC) (THREAD_ENTRY * thread_p, PAGE_PTR page, void *args);
152 typedef int (*FILE_MAP_PAGE_FUNC) (THREAD_ENTRY * thread_p, PAGE_PTR * page, bool * stop, void *args);
153 
154 extern int file_manager_init (void);
155 extern void file_manager_final (void);
156 
157 extern int file_create (THREAD_ENTRY * thread_p, FILE_TYPE file_type, FILE_TABLESPACE * tablespace,
158  FILE_DESCRIPTORS * des, bool is_temp, bool is_numerable, VFID * vfid);
159 extern int file_create_with_npages (THREAD_ENTRY * thread_p, FILE_TYPE file_type, int npages, FILE_DESCRIPTORS * des,
160  VFID * vfid);
161 extern int file_create_heap (THREAD_ENTRY * thread_p, bool reuse_oid, const OID * class_oid, VFID * vfid);
162 extern int file_create_temp (THREAD_ENTRY * thread_p, int npages, VFID * vfid);
163 extern int file_create_temp_numerable (THREAD_ENTRY * thread_p, int npages, VFID * vfid);
164 extern int file_create_query_area (THREAD_ENTRY * thread_p, VFID * vfid);
165 extern int file_create_ehash (THREAD_ENTRY * thread_p, int npages, bool is_tmp, FILE_EHASH_DES * des_ehash,
166  VFID * vfid);
167 extern int file_create_ehash_dir (THREAD_ENTRY * thread_p, int npages, bool is_tmp, FILE_EHASH_DES * des_ehash,
168  VFID * vfid);
169 
170 extern void file_postpone_destroy (THREAD_ENTRY * thread_p, const VFID * vfid);
171 extern int file_destroy (THREAD_ENTRY * thread_p, const VFID * vfid, bool is_temp);
172 extern int file_temp_retire (THREAD_ENTRY * thread_p, const VFID * vfid);
173 extern int file_temp_retire_preserved (THREAD_ENTRY * thread_p, const VFID * vfid);
174 
175 extern int file_init_page_type (THREAD_ENTRY * thread_p, PAGE_PTR page, void *args);
176 extern int file_init_temp_page_type (THREAD_ENTRY * thread_p, PAGE_PTR page, void *args);
177 extern int file_alloc (THREAD_ENTRY * thread_p, const VFID * vfid, FILE_INIT_PAGE_FUNC f_init, void *f_init_args,
178  VPID * vpid_out, PAGE_PTR * page_out);
179 extern int file_alloc_multiple (THREAD_ENTRY * thread_p, const VFID * vfid, FILE_INIT_PAGE_FUNC f_init,
180  void *f_init_args, int npages, VPID * vpids_out);
181 extern int file_alloc_sticky_first_page (THREAD_ENTRY * thread_p, const VFID * vfid, FILE_INIT_PAGE_FUNC f_init,
182  void *f_init_args, VPID * vpid_out, PAGE_PTR * page_out);
183 extern int file_get_sticky_first_page (THREAD_ENTRY * thread_p, const VFID * vfid, VPID * vpid_out);
184 extern int file_rv_set_tde_algorithm (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
185 extern int file_get_tde_algorithm (THREAD_ENTRY * thread_p, const VFID * vfid, PGBUF_LATCH_CONDITION fix_head_cond,
186  TDE_ALGORITHM * tde_algo);
187 extern int file_apply_tde_algorithm (THREAD_ENTRY * thread_p, const VFID * vfid, const TDE_ALGORITHM tde_algo);
188 extern int file_dealloc (THREAD_ENTRY * thread_p, const VFID * vfid, const VPID * vpid, FILE_TYPE file_type_hint);
189 
190 extern int file_get_num_user_pages (THREAD_ENTRY * thread_p, const VFID * vfid, int *n_user_pages_out);
191 extern DISK_ISVALID file_check_vpid (THREAD_ENTRY * thread_p, const VFID * vfid, const VPID * vpid_lookup);
192 extern int file_get_type (THREAD_ENTRY * thread_p, const VFID * vfid, FILE_TYPE * ftype_out);
193 extern int file_is_temp (THREAD_ENTRY * thread_p, const VFID * vfid, bool * is_temp);
194 extern int file_map_pages (THREAD_ENTRY * thread_p, const VFID * vfid, PGBUF_LATCH_MODE latch_mode,
195  PGBUF_LATCH_CONDITION latch_cond, FILE_MAP_PAGE_FUNC func, void *args);
196 extern int file_dump (THREAD_ENTRY * thread_p, const VFID * vfid, FILE * fp);
197 extern int file_spacedb (THREAD_ENTRY * thread_p, SPACEDB_FILES * spacedb);
198 
199 extern int file_numerable_find_nth (THREAD_ENTRY * thread_p, const VFID * vfid, int nth, bool auto_alloc,
200  FILE_INIT_PAGE_FUNC f_init, void *f_init_args, VPID * vpid_nth);
201 extern int file_numerable_truncate (THREAD_ENTRY * thread_p, const VFID * vfid, DKNPAGES npages);
202 
203 extern void file_tempcache_drop_tran_temp_files (THREAD_ENTRY * thread_p);
204 
205 extern void file_temp_preserve (THREAD_ENTRY * thread_p, const VFID * vfid);
206 extern int file_get_tran_num_temp_files (THREAD_ENTRY * thread_p);
207 
208 extern int file_tracker_create (THREAD_ENTRY * thread_p, VFID * vfid_tracker_out);
209 extern int file_tracker_load (THREAD_ENTRY * thread_p, const VFID * vfid);
210 extern int file_tracker_reuse_heap (THREAD_ENTRY * thread_p, const OID * class_oid, HFID * hfid_out);
211 extern int file_tracker_interruptable_iterate (THREAD_ENTRY * thread_p, FILE_TYPE desired_ftype, VFID * vfid,
212  OID * class_oid);
213 extern DISK_ISVALID file_tracker_check (THREAD_ENTRY * thread_p);
214 extern int file_tracker_dump (THREAD_ENTRY * thread_p, FILE * fp);
215 extern int file_tracker_dump_all_capacities (THREAD_ENTRY * thread_p, FILE * fp);
216 extern int file_tracker_dump_all_heap (THREAD_ENTRY * thread_p, FILE * fp, bool dump_records);
217 extern int file_tracker_dump_all_heap_capacities (THREAD_ENTRY * thread_p, FILE * fp);
218 extern int file_tracker_dump_all_btree_capacities (THREAD_ENTRY * thread_p, FILE * fp);
219 #if defined (SA_MODE)
220 extern int file_tracker_reclaim_marked_deleted (THREAD_ENTRY * thread_p);
221 #endif /* SA_MODE */
222 
223 extern int file_descriptor_get (THREAD_ENTRY * thread_p, const VFID * vfid, FILE_DESCRIPTORS * desc_out);
224 extern int file_descriptor_update (THREAD_ENTRY * thread_p, const VFID * vfid, void *des_new);
225 extern int file_descriptor_dump (THREAD_ENTRY * thread_p, const VFID * vfid, FILE * fp);
226 
227 extern const char *file_type_to_string (FILE_TYPE fstruct_type);
228 
229 /* Recovery stuff */
230 extern int file_rv_destroy (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
231 extern int file_rv_perm_expand_redo (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
232 extern int file_rv_perm_expand_undo (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
233 extern int file_rv_partsect_set (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
234 extern int file_rv_partsect_clear (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
235 extern int file_rv_extdata_set_next (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
236 extern int file_rv_extdata_add (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
237 extern int file_rv_extdata_remove (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
238 extern int file_rv_fhead_set_last_user_page_ftab (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
239 extern int file_rv_fhead_alloc (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
240 extern int file_rv_fhead_dealloc (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
241 extern int file_rv_fhead_convert_ftab_to_user_page (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
242 extern int file_rv_fhead_convert_user_to_ftab_page (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
243 extern int file_rv_user_page_mark_delete (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
244 extern int file_rv_user_page_unmark_delete_logical (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
245 extern int file_rv_user_page_unmark_delete_physical (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
246 extern int file_rv_extdata_merge (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
247 extern int file_rv_dealloc_on_undo (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
248 extern int file_rv_dealloc_on_postpone (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
249 extern int file_rv_header_update_mark_deleted (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
250 extern int file_rv_fhead_sticky_page (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
251 extern int file_rv_tracker_unregister_undo (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
252 extern int file_rv_tracker_mark_heap_deleted (THREAD_ENTRY * thread_p, LOG_RCV * rcv, bool is_undo);
254 extern int file_rv_tracker_reuse_heap (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
255 
256 /* Recovery dump stuff */
257 extern void file_rv_dump_vfid_and_vpid (FILE * fp, int length, void *data);
258 extern void file_rv_dump_extdata_set_next (FILE * fp, int length, void *data);
259 extern void file_rv_dump_extdata_add (FILE * fp, int length, void *data);
260 extern void file_rv_dump_extdata_remove (FILE * fp, int length, void *data);
261 #endif /* _FILE_MANAGER_H_ */
int file_numerable_truncate(THREAD_ENTRY *thread_p, const VFID *vfid, DKNPAGES npages)
char * PAGE_PTR
DISK_ISVALID file_tracker_check(THREAD_ENTRY *thread_p)
int file_get_num_user_pages(THREAD_ENTRY *thread_p, const VFID *vfid, int *n_user_pages_out)
int file_create_temp(THREAD_ENTRY *thread_p, int npages, VFID *vfid)
int file_rv_tracker_unregister_undo(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
FILE_BTREE_DES btree
Definition: file_manager.h:134
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)
int file_create_ehash_dir(THREAD_ENTRY *thread_p, int npages, bool is_tmp, FILE_EHASH_DES *des_ehash, VFID *vfid)
int file_rv_fhead_convert_user_to_ftab_page(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int file_rv_extdata_set_next(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
PAGEID DKNPAGES
int file_rv_extdata_add(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int file_rv_fhead_set_last_user_page_ftab(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int file_get_sticky_first_page(THREAD_ENTRY *thread_p, const VFID *vfid, VPID *vpid_out)
FILE_TYPE
Definition: file_manager.h:38
int file_manager_init(void)
int file_tracker_reuse_heap(THREAD_ENTRY *thread_p, const OID *class_oid, HFID *hfid_out)
int file_rv_user_page_mark_delete(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
void file_rv_dump_vfid_and_vpid(FILE *fp, int length, void *data)
int file_temp_retire_preserved(THREAD_ENTRY *thread_p, const VFID *vfid)
int(* FILE_MAP_PAGE_FUNC)(THREAD_ENTRY *thread_p, PAGE_PTR *page, bool *stop, void *args)
Definition: file_manager.h:152
void file_rv_dump_extdata_remove(FILE *fp, int length, void *data)
int file_dump(THREAD_ENTRY *thread_p, const VFID *vfid, FILE *fp)
int file_tracker_dump_all_capacities(THREAD_ENTRY *thread_p, FILE *fp)
int file_get_type(THREAD_ENTRY *thread_p, const VFID *vfid, FILE_TYPE *ftype_out)
int file_tracker_dump(THREAD_ENTRY *thread_p, FILE *fp)
int file_create_ehash(THREAD_ENTRY *thread_p, int npages, bool is_tmp, FILE_EHASH_DES *des_ehash, VFID *vfid)
int file_apply_tde_algorithm(THREAD_ENTRY *thread_p, const VFID *vfid, const TDE_ALGORITHM tde_algo)
int file_rv_user_page_unmark_delete_physical(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
void THREAD_ENTRY
int file_rv_dealloc_on_postpone(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int file_destroy(THREAD_ENTRY *thread_p, const VFID *vfid, bool is_temp)
TDE_ALGORITHM
Definition: tde.h:71
int file_rv_perm_expand_redo(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int spacedb(UTIL_FUNCTION_ARG *arg)
Definition: util_cs.c:844
int file_rv_partsect_set(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
PGBUF_LATCH_MODE
Definition: page_buffer.h:176
int file_get_tde_algorithm(THREAD_ENTRY *thread_p, const VFID *vfid, PGBUF_LATCH_CONDITION fix_head_cond, TDE_ALGORITHM *tde_algo)
FILE_VACUUM_DATA_DES vacuum_data
Definition: file_manager.h:137
PGBUF_LATCH_CONDITION
Definition: page_buffer.h:185
int file_rv_destroy(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)
int file_rv_tracker_mark_heap_deleted_compensate_or_run_postpone(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
void file_tempcache_drop_tran_temp_files(THREAD_ENTRY *thread_p)
int file_dealloc(THREAD_ENTRY *thread_p, const VFID *vfid, const VPID *vpid, FILE_TYPE file_type_hint)
int file_tracker_interruptable_iterate(THREAD_ENTRY *thread_p, FILE_TYPE desired_ftype, VFID *vfid, OID *class_oid)
int file_rv_extdata_remove(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int file_init_page_type(THREAD_ENTRY *thread_p, PAGE_PTR page, void *args)
int file_tracker_dump_all_heap_capacities(THREAD_ENTRY *thread_p, FILE *fp)
DISK_ISVALID file_check_vpid(THREAD_ENTRY *thread_p, const VFID *vfid, const VPID *vpid_lookup)
int file_tracker_dump_all_btree_capacities(THREAD_ENTRY *thread_p, FILE *fp)
int file_rv_set_tde_algorithm(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int file_temp_retire(THREAD_ENTRY *thread_p, const VFID *vfid)
int file_rv_fhead_alloc(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int file_rv_fhead_sticky_page(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
void file_rv_dump_extdata_set_next(FILE *fp, int length, void *data)
FILE_HEAP_DES heap
Definition: file_manager.h:132
int file_tracker_create(THREAD_ENTRY *thread_p, VFID *vfid_tracker_out)
int file_init_temp_page_type(THREAD_ENTRY *thread_p, PAGE_PTR page, void *args)
int file_rv_user_page_unmark_delete_logical(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
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)
const char * file_type_to_string(FILE_TYPE fstruct_type)
int file_create_query_area(THREAD_ENTRY *thread_p, VFID *vfid)
int file_rv_dealloc_on_undo(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int file_tracker_load(THREAD_ENTRY *thread_p, const VFID *vfid)
void file_postpone_destroy(THREAD_ENTRY *thread_p, const VFID *vfid)
int file_rv_perm_expand_undo(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int file_rv_tracker_mark_heap_deleted(THREAD_ENTRY *thread_p, LOG_RCV *rcv, bool is_undo)
int file_create_temp_numerable(THREAD_ENTRY *thread_p, int npages, VFID *vfid)
int file_rv_tracker_reuse_heap(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
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)
FILE_EHASH_DES ehash
Definition: file_manager.h:136
int file_tracker_dump_all_heap(THREAD_ENTRY *thread_p, FILE *fp, bool dump_records)
int file_rv_header_update_mark_deleted(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int file_rv_partsect_clear(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
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_create_heap(THREAD_ENTRY *thread_p, bool reuse_oid, const OID *class_oid, VFID *vfid)
void file_rv_dump_extdata_add(FILE *fp, int length, void *data)
FILE_OVF_BTREE_DES btree_key_overflow
Definition: file_manager.h:135
void file_manager_final(void)
Definition: file_manager.c:869
int file_descriptor_update(THREAD_ENTRY *thread_p, const VFID *vfid, void *des_new)
int(* FILE_INIT_PAGE_FUNC)(THREAD_ENTRY *thread_p, PAGE_PTR page, void *args)
Definition: file_manager.h:151
FILE_OVF_HEAP_DES heap_overflow
Definition: file_manager.h:133
#define FILE_DESCRIPTORS_SIZE
Definition: file_manager.h:128
int file_descriptor_dump(THREAD_ENTRY *thread_p, const VFID *vfid, FILE *fp)
int file_rv_extdata_merge(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int file_spacedb(THREAD_ENTRY *thread_p, SPACEDB_FILES *spacedb)
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)
int file_get_tran_num_temp_files(THREAD_ENTRY *thread_p)
DISK_ISVALID
Definition: disk_manager.h:53
int file_rv_fhead_convert_ftab_to_user_page(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
int file_descriptor_get(THREAD_ENTRY *thread_p, const VFID *vfid, FILE_DESCRIPTORS *desc_out)
int file_rv_fhead_dealloc(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
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_is_temp(THREAD_ENTRY *thread_p, const VFID *vfid, bool *is_temp)