Drizzled Public API Documentation

lock0lock.h
Go to the documentation of this file.
1 /*****************************************************************************
2 
3 Copyright (C) 1996, 2010, Innobase Oy. All Rights Reserved.
4 
5 This program is free software; you can redistribute it and/or modify it under
6 the terms of the GNU General Public License as published by the Free Software
7 Foundation; version 2 of the License.
8 
9 This program is distributed in the hope that it will be useful, but WITHOUT
10 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12 
13 You should have received a copy of the GNU General Public License along with
14 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
15 St, Fifth Floor, Boston, MA 02110-1301 USA
16 
17 *****************************************************************************/
18 
19 /**************************************************/
26 #pragma once
27 #ifndef lock0lock_h
28 #define lock0lock_h
29 
30 #include "univ.i"
31 #include "buf0types.h"
32 #include "trx0types.h"
33 #include "mtr0types.h"
34 #include "rem0types.h"
35 #include "dict0types.h"
36 #include "que0types.h"
37 #include "lock0types.h"
38 #include "read0types.h"
39 #include "hash0hash.h"
40 #include "ut0vec.h"
41 
42 #ifdef UNIV_DEBUG
43 extern ibool lock_print_waits;
44 #endif /* UNIV_DEBUG */
45 /* Buffer for storing information about the most recent deadlock error */
46 extern FILE* lock_latest_err_file;
47 
48 /*********************************************************************/
51 UNIV_INTERN
52 ulint
53 lock_get_size(void);
54 /*===============*/
55 /*********************************************************************/
57 UNIV_INTERN
58 void
60 /*============*/
61  ulint n_cells);
62 /*********************************************************************/
64 UNIV_INTERN
65 void
66 lock_sys_close(void);
67 /*================*/
68 /*********************************************************************/
72 UNIV_INLINE
73 trx_t*
75 /*=========================*/
76  const rec_t* rec,
77  dict_index_t* index,
78  const ulint* offsets);
79 /*********************************************************************/
82 UNIV_INLINE
83 ulint
85 /*=================*/
86  const buf_block_t* block);
87 /*************************************************************/
92 UNIV_INTERN
93 void
95 /*======================*/
96  const buf_block_t* block,
98  const buf_block_t* oblock);
100 /*************************************************************/
103 UNIV_INTERN
104 void
106 /*===================*/
107  const buf_block_t* new_block,
108  const buf_block_t* block,
109  const rec_t* rec);
111 /*************************************************************/
114 UNIV_INTERN
115 void
117 /*=====================*/
118  const buf_block_t* new_block,
119  const buf_block_t* block,
120  const rec_t* rec,
123  const rec_t* old_end);
128 /*************************************************************/
130 UNIV_INTERN
131 void
133 /*====================*/
134  const buf_block_t* right_block,
135  const buf_block_t* left_block);
136 /*************************************************************/
138 UNIV_INTERN
139 void
141 /*====================*/
142  const buf_block_t* right_block,
144  const rec_t* orig_succ,
148  const buf_block_t* left_block);
151 /*************************************************************/
158 UNIV_INTERN
159 void
161 /*===================*/
162  const buf_block_t* block,
163  const buf_block_t* root);
164 /*************************************************************/
167 UNIV_INTERN
168 void
170 /*=========================*/
171  const buf_block_t* new_block,
173  const buf_block_t* block);
175 /*************************************************************/
177 UNIV_INTERN
178 void
180 /*===================*/
181  const buf_block_t* right_block,
182  const buf_block_t* left_block);
183 /*************************************************************/
185 UNIV_INTERN
186 void
188 /*===================*/
189  const buf_block_t* left_block,
191  const rec_t* orig_pred,
194  const buf_block_t* right_block);
196 /*************************************************************/
199 UNIV_INTERN
200 void
202 /*=================================*/
203  const buf_block_t* heir_block,
205  const buf_block_t* block,
209  ulint heir_heap_no,
211  ulint heap_no);
213 /*************************************************************/
215 UNIV_INTERN
216 void
218 /*================*/
219  const buf_block_t* heir_block,
221  ulint heir_heap_no,
223  const buf_block_t* block);
225 /*************************************************************/
227 UNIV_INTERN
228 void
230 /*===============*/
231  const buf_block_t* block,
232  const rec_t* rec);
233 /*************************************************************/
235 UNIV_INTERN
236 void
238 /*===============*/
239  const buf_block_t* block,
240  const rec_t* rec);
241 /*********************************************************************/
248 UNIV_INTERN
249 void
251 /*===========================*/
252  const buf_block_t* block,
253  const rec_t* rec);
258 /*********************************************************************/
261 UNIV_INTERN
262 void
264 /*===============================*/
265  const buf_block_t* block,
266  const rec_t* rec,
268  const buf_block_t* donator);
273 /*********************************************************************/
276 UNIV_INTERN
277 ibool
279 /*========================*/
280  ulint space,
281  ulint page_no);
282 /*********************************************************************/
289 UNIV_INTERN
290 ulint
292 /*===========================*/
293  ulint flags,
295  const rec_t* rec,
296  buf_block_t* block,
297  dict_index_t* index,
298  que_thr_t* thr,
299  mtr_t* mtr,
300  ibool* inherit);
304 /*********************************************************************/
312 UNIV_INTERN
313 ulint
315 /*=================================*/
316  ulint flags,
318  const buf_block_t* block,
319  const rec_t* rec,
321  dict_index_t* index,
322  const ulint* offsets,
323  que_thr_t* thr);
324 /*********************************************************************/
328 UNIV_INTERN
329 ulint
331 /*===============================*/
332  ulint flags,
334  buf_block_t* block,
335  const rec_t* rec,
340  dict_index_t* index,
341  que_thr_t* thr,
342  mtr_t* mtr);
343 /*********************************************************************/
348 UNIV_INTERN
349 enum db_err
351 /*=============================*/
352  ulint flags,
354  const buf_block_t* block,
355  const rec_t* rec,
359  dict_index_t* index,
360  const ulint* offsets,
361  enum lock_mode mode,
366  ulint gap_mode,
368  que_thr_t* thr);
369 /*********************************************************************/
378 UNIV_INTERN
379 enum db_err
381 /*===============================*/
382  ulint flags,
384  const buf_block_t* block,
385  const rec_t* rec,
389  dict_index_t* index,
390  const ulint* offsets,
391  enum lock_mode mode,
396  ulint gap_mode,
398  que_thr_t* thr);
399 /*********************************************************************/
409 UNIV_INTERN
410 ulint
412 /*===================================*/
413  ulint flags,
415  const buf_block_t* block,
416  const rec_t* rec,
420  dict_index_t* index,
421  enum lock_mode mode,
426  ulint gap_mode,
428  que_thr_t* thr);
429 /*********************************************************************/
433 UNIV_INTERN
434 ibool
436 /*==========================*/
437  const rec_t* rec,
439  dict_index_t* index,
440  const ulint* offsets,
441  read_view_t* view);
442 /*********************************************************************/
452 UNIV_INTERN
453 ulint
455 /*========================*/
456  const rec_t* rec,
459  const read_view_t* view);
460 /*********************************************************************/
464 UNIV_INTERN
465 ulint
466 lock_table(
467 /*=======*/
468  ulint flags,
470  dict_table_t* table,
471  enum lock_mode mode,
472  que_thr_t* thr);
473 /*************************************************************/
477 UNIV_INTERN
478 void
480 /*============*/
481  trx_t* trx,
483  const buf_block_t* block,
484  const rec_t* rec,
485  enum lock_mode lock_mode);
486 /*********************************************************************/
489 UNIV_INTERN
490 void
492 /*====================*/
493  trx_t* trx);
494 /*********************************************************************/
497 UNIV_INTERN
498 void
500 /*============================*/
501  lock_t* lock);
503 /*********************************************************************/
508 UNIV_INTERN
509 void
511 /*=====================*/
512  dict_table_t* table,
514  ibool remove_also_table_sx_locks);
517 /*********************************************************************/
521 UNIV_INLINE
522 ulint
524 /*==========*/
525  ulint space,
526  ulint page_no)
527  __attribute__((const));
528 /*********************************************************************/
532 UNIV_INLINE
533 ulint
535 /*==========*/
536  ulint space,
537  ulint page_no);
539 /**********************************************************************/
544 UNIV_INTERN
545 ulint
547 /*==================*/
548  const lock_t* lock);
551 /*********************************************************************/
558 UNIV_INTERN
561 /*===============*/
562  trx_t* trx,
563  dict_table_t* dest,
564  enum lock_mode* mode);
565 /*********************************************************************/
571 UNIV_INTERN
572 ibool
574 /*====================*/
575  dict_table_t* table,
576  trx_t* trx);
577 /*********************************************************************/
580 UNIV_INTERN
581 ibool
583 /*=============*/
584  const lock_t* lock1,
585  const lock_t* lock2);
589 /*********************************************************************/
592 UNIV_INTERN
593 ibool
595 /*=====================*/
596  trx_id_t trx_id,
597  const rec_t* rec,
598  dict_index_t* index,
599  const ulint* offsets,
600  ibool has_kernel_mutex);
602 /*********************************************************************/
604 UNIV_INTERN
605 void
607 /*=============*/
608  FILE* file,
609  const lock_t* lock);
610 /*********************************************************************/
612 UNIV_INTERN
613 void
615 /*===========*/
616  FILE* file,
617  const lock_t* lock);
618 /*********************************************************************/
622 UNIV_INTERN
623 ibool
625 /*====================*/
626  FILE* file,
627  ibool nowait);
628 /*************************************************************************
629 Prints info of locks for each transaction. */
630 UNIV_INTERN
631 void
633 /*=============================*/
634  FILE* file);
635 /*********************************************************************/
639 UNIV_INTERN
640 ulint
642 /*=======================*/
643  const trx_t* trx);
644 /*******************************************************************/
647 UNIV_INTERN
648 ibool
650 /*=========================*/
651  const trx_t* trx);
652 /*******************************************************************/
654 UNIV_INTERN
655 void
657 /*=======================*/
658  trx_t* trx);
660 /*******************************************************************/
664 UNIV_INTERN
665 ulint
667 /*==========*/
668  const lock_t* lock);
670 /*******************************************************************/
673 UNIV_INTERN
674 trx_id_t
676 /*============*/
677  const lock_t* lock);
679 /*******************************************************************/
683 UNIV_INTERN
684 const char*
686 /*==============*/
687  const lock_t* lock);
689 /*******************************************************************/
693 UNIV_INTERN
694 const char*
696 /*==============*/
697  const lock_t* lock);
699 /*******************************************************************/
702 UNIV_INTERN
703 table_id_t
705 /*==============*/
706  const lock_t* lock);
708 /*******************************************************************/
712 UNIV_INTERN
713 const char*
715 /*================*/
716  const lock_t* lock);
718 /*******************************************************************/
721 UNIV_INTERN
722 const dict_index_t*
724 /*===============*/
725  const lock_t* lock);
727 /*******************************************************************/
731 UNIV_INTERN
732 const char*
734 /*====================*/
735  const lock_t* lock);
737 /*******************************************************************/
740 UNIV_INTERN
741 ulint
743 /*==================*/
744  const lock_t* lock);
746 /*******************************************************************/
749 UNIV_INTERN
750 ulint
752 /*=================*/
753  const lock_t* lock);
756 /* @{ */
757 #define LOCK_MODE_MASK 0xFUL
760 /* @{ */
761 #define LOCK_TABLE 16
762 #define LOCK_REC 32
763 #define LOCK_TYPE_MASK 0xF0UL
765 #if LOCK_MODE_MASK & LOCK_TYPE_MASK
766 # error "LOCK_MODE_MASK & LOCK_TYPE_MASK"
767 #endif
768 
769 #define LOCK_WAIT 256
773 /* Precise modes */
774 #define LOCK_ORDINARY 0
777 #define LOCK_GAP 512
784 #define LOCK_REC_NOT_GAP 1024
792 #define LOCK_INSERT_INTENTION 2048
800 #if (LOCK_WAIT|LOCK_GAP|LOCK_REC_NOT_GAP|LOCK_INSERT_INTENTION)&LOCK_MODE_MASK
801 # error
802 #endif
803 #if (LOCK_WAIT|LOCK_GAP|LOCK_REC_NOT_GAP|LOCK_INSERT_INTENTION)&LOCK_TYPE_MASK
804 # error
805 #endif
806 /* @} */
807 
809 typedef struct lock_op_struct lock_op_t;
811 struct lock_op_struct{
813  enum lock_mode mode;
814 };
815 
817 struct lock_sys_struct{
819 };
820 
822 extern lock_sys_t* lock_sys;
823 
824 
825 #ifndef UNIV_NONINL
826 #include "lock0lock.ic"
827 #endif
828 
829 #endif
UNIV_INTERN void lock_remove_all_on_table(dict_table_t *table, ibool remove_also_table_sx_locks)
Definition: lock0lock.cc:4212
UNIV_INTERN void lock_move_rec_list_end(const buf_block_t *new_block, const buf_block_t *block, const rec_t *rec)
Definition: lock0lock.cc:2656
UNIV_INTERN void lock_move_reorganize_page(const buf_block_t *block, const buf_block_t *oblock)
Definition: lock0lock.cc:2510
UNIV_INTERN void lock_update_merge_right(const buf_block_t *right_block, const rec_t *orig_succ, const buf_block_t *left_block)
Definition: lock0lock.cc:2883
UNIV_INTERN void lock_update_insert(const buf_block_t *block, const rec_t *rec)
Definition: lock0lock.cc:3129
UNIV_INTERN void lock_cancel_waiting_and_release(lock_t *lock)
Definition: lock0lock.cc:4127
UNIV_INTERN ulint lock_table(ulint flags, dict_table_t *table, enum lock_mode mode, que_thr_t *thr)
Definition: lock0lock.cc:3866
UNIV_INLINE ulint lock_rec_fold(ulint space, ulint page_no) __attribute__((const ))
UNIV_INTERN ibool lock_has_to_wait(const lock_t *lock1, const lock_t *lock2)
Definition: lock0lock.cc:983
enum lock_mode mode
Definition: lock0lock.h:840
UNIV_INTERN table_id_t lock_get_table_id(const lock_t *lock)
Definition: lock0lock.cc:5735
UNIV_INTERN ibool lock_is_table_exclusive(dict_table_t *table, trx_t *trx)
Definition: lock0lock.cc:717
UNIV_INTERN void lock_sys_close(void)
Definition: lock0lock.cc:583
UNIV_INTERN void lock_update_merge_left(const buf_block_t *left_block, const rec_t *orig_pred, const buf_block_t *right_block)
Definition: lock0lock.cc:2990
UNIV_INTERN const char * lock_get_type_str(const lock_t *lock)
Definition: lock0lock.cc:5696
UNIV_INTERN void lock_update_copy_and_discard(const buf_block_t *new_block, const buf_block_t *block)
Definition: lock0lock.cc:2945
UNIV_INTERN ulint lock_sec_rec_cons_read_sees(const rec_t *rec, const read_view_t *view)
Definition: lock0lock.cc:535
UNIV_INLINE ulint lock_rec_hash(ulint space, ulint page_no)
UNIV_INTERN void lock_release_autoinc_locks(trx_t *trx)
Definition: lock0lock.cc:5596
UNIV_INTERN ibool lock_rec_expl_exist_on_page(ulint space, ulint page_no)
Definition: lock0lock.cc:1168
UNIV_INLINE ulint lock_get_min_heap_no(const buf_block_t *block)
UNIV_INTERN ulint lock_clust_rec_modify_check_and_lock(ulint flags, const buf_block_t *block, const rec_t *rec, dict_index_t *index, const ulint *offsets, que_thr_t *thr)
Definition: lock0lock.cc:5227
lock_sys_t * lock_sys
Definition: lock0lock.cc:367
db_err
Definition: db0err.h:31
UNIV_INTERN void lock_update_split_left(const buf_block_t *right_block, const buf_block_t *left_block)
Definition: lock0lock.cc:2968
UNIV_INTERN const char * lock_get_table_name(const lock_t *lock)
Definition: lock0lock.cc:5752
UNIV_INTERN void lock_update_delete(const buf_block_t *block, const rec_t *rec)
Definition: lock0lock.cc:3162
UNIV_INTERN void lock_table_print(FILE *file, const lock_t *lock)
Definition: lock0lock.cc:4276
UNIV_INTERN enum db_err lock_sec_rec_read_check_and_lock(ulint flags, const buf_block_t *block, const rec_t *rec, dict_index_t *index, const ulint *offsets, enum lock_mode mode, ulint gap_mode, que_thr_t *thr)
Definition: lock0lock.cc:5361
UNIV_INTERN ibool lock_clust_rec_cons_read_sees(const rec_t *rec, dict_index_t *index, const ulint *offsets, read_view_t *view)
Definition: lock0lock.cc:500
UNIV_INTERN ulint lock_clust_rec_read_check_and_lock_alt(ulint flags, const buf_block_t *block, const rec_t *rec, dict_index_t *index, enum lock_mode mode, ulint gap_mode, que_thr_t *thr)
Definition: lock0lock.cc:5510
UNIV_INTERN void lock_release_off_kernel(trx_t *trx)
Definition: lock0lock.cc:4063
UNIV_INTERN void lock_rec_store_on_page_infimum(const buf_block_t *block, const rec_t *rec)
Definition: lock0lock.cc:3207
UNIV_INTERN void lock_rec_restore_from_page_infimum(const buf_block_t *block, const rec_t *rec, const buf_block_t *donator)
Definition: lock0lock.cc:3232
UNIV_INTERN enum db_err lock_clust_rec_read_check_and_lock(ulint flags, const buf_block_t *block, const rec_t *rec, dict_index_t *index, const ulint *offsets, enum lock_mode mode, ulint gap_mode, que_thr_t *thr)
Definition: lock0lock.cc:5440
UNIV_INTERN void lock_move_rec_list_start(const buf_block_t *new_block, const buf_block_t *block, const rec_t *rec, const rec_t *old_end)
Definition: lock0lock.cc:2747
UNIV_INTERN void lock_rec_print(FILE *file, const lock_t *lock)
Definition: lock0lock.cc:4315
UNIV_INTERN trx_id_t lock_get_trx_id(const lock_t *lock)
Definition: lock0lock.cc:5636
UNIV_INTERN void lock_update_root_raise(const buf_block_t *block, const buf_block_t *root)
Definition: lock0lock.cc:2925
UNIV_INTERN const dict_index_t * lock_rec_get_index(const lock_t *lock)
Definition: lock0lock.cc:5768
UNIV_INLINE trx_t * lock_clust_rec_some_has_impl(const rec_t *rec, dict_index_t *index, const ulint *offsets)
UNIV_INTERN ulint lock_rec_get_page_no(const lock_t *lock)
Definition: lock0lock.cc:5811
UNIV_INTERN void lock_update_discard(const buf_block_t *heir_block, ulint heir_heap_no, const buf_block_t *block)
Definition: lock0lock.cc:3066
UNIV_INTERN ulint lock_rec_insert_check_and_lock(ulint flags, const rec_t *rec, buf_block_t *block, dict_index_t *index, que_thr_t *thr, mtr_t *mtr, ibool *inherit)
Definition: lock0lock.cc:5054
ib_id_t trx_id_t
Definition: trx0types.h:85
UNIV_INTERN ibool lock_print_info_summary(FILE *file, ibool nowait)
Definition: lock0lock.cc:4446
UNIV_INTERN ulint lock_sec_rec_modify_check_and_lock(ulint flags, buf_block_t *block, const rec_t *rec, dict_index_t *index, que_thr_t *thr, mtr_t *mtr)
Definition: lock0lock.cc:5283
dict_table_t * table
Definition: lock0lock.h:839
UNIV_INTERN const char * lock_get_mode_str(const lock_t *lock)
Definition: lock0lock.cc:5649
UNIV_INTERN void lock_rec_unlock(trx_t *trx, const buf_block_t *block, const rec_t *rec, enum lock_mode lock_mode)
Definition: lock0lock.cc:4000
UNIV_INTERN ibool lock_trx_holds_autoinc_locks(const trx_t *trx)
Definition: lock0lock.cc:5583
hash_table_t * rec_hash
Definition: lock0lock.h:845
UNIV_INTERN ulint lock_rec_find_set_bit(const lock_t *lock)
Definition: lock0lock.cc:1057
UNIV_INTERN void lock_rec_reset_and_inherit_gap_locks(const buf_block_t *heir_block, const buf_block_t *block, ulint heir_heap_no, ulint heap_no)
Definition: lock0lock.cc:3040
UNIV_INTERN ulint lock_get_type(const lock_t *lock)
Definition: lock0lock.cc:5624
UNIV_INTERN dict_table_t * lock_get_src_table(trx_t *trx, dict_table_t *dest, enum lock_mode *mode)
Definition: lock0lock.cc:649
UNIV_INTERN void lock_sys_create(ulint n_cells)
Definition: lock0lock.cc:565
UNIV_INTERN ulint lock_rec_get_space_id(const lock_t *lock)
Definition: lock0lock.cc:5797
UNIV_INTERN void lock_update_split_right(const buf_block_t *right_block, const buf_block_t *left_block)
Definition: lock0lock.cc:2855
UNIV_INTERN const char * lock_rec_get_index_name(const lock_t *lock)
Definition: lock0lock.cc:5783
UNIV_INTERN ulint lock_number_of_rows_locked(const trx_t *trx)
Definition: lock0lock.cc:1621
UNIV_INTERN ibool lock_check_trx_id_sanity(trx_id_t trx_id, const rec_t *rec, dict_index_t *index, const ulint *offsets, ibool has_kernel_mutex)
Definition: lock0lock.cc:449
UNIV_INTERN void lock_print_info_all_transactions(FILE *file)
Definition: lock0lock.cc:4499
UNIV_INTERN ulint lock_get_size(void)
Definition: lock0lock.cc:601