38 #ifndef UNIV_HOTBACKUP
44 mtr_memo_slot_release(
62 if (UNIV_LIKELY(
object != NULL)) {
63 if (type <= MTR_MEMO_BUF_FIX) {
65 }
else if (type == MTR_MEMO_S_LOCK) {
68 }
else if (type != MTR_MEMO_X_LOCK) {
69 ut_ad(type == MTR_MEMO_MODIFY);
70 ut_ad(mtr_memo_contains(mtr,
object,
71 MTR_MEMO_PAGE_X_FIX));
96 ut_ad(mtr->magic_n == MTR_MAGIC_N);
97 ut_ad(mtr->state == MTR_COMMITTING);
107 mtr_memo_slot_release(mtr, slot);
115 mtr_memo_slot_note_modification(
121 ut_ad(mtr->magic_n == MTR_MAGIC_N);
122 ut_ad(mtr->modifications);
124 if (slot->
object != NULL && slot->
type == MTR_MEMO_PAGE_X_FIX) {
143 mtr_memo_note_modifications(
151 ut_ad(mtr->magic_n == MTR_MAGIC_N);
152 ut_ad(mtr->state == MTR_COMMITTING);
164 mtr_memo_slot_note_modification(mtr, slot);
172 mtr_log_reserve_and_write(
187 if (mtr->n_log_recs > 1) {
190 *first_data = (byte)((ulint)*first_data
194 if (mlog->
heap == NULL) {
211 if (mtr->log_mode == MTR_LOG_ALL) {
215 while (block != NULL) {
221 ut_ad(mtr->log_mode == MTR_LOG_NONE);
235 if (mtr->modifications) {
236 mtr_memo_note_modifications(mtr);
252 ut_ad(mtr->magic_n == MTR_MAGIC_N);
253 ut_ad(mtr->state == MTR_ACTIVE);
255 ut_d(mtr->state = MTR_COMMITTING);
257 #ifndef UNIV_HOTBACKUP
259 ut_ad(!recv_no_log_write);
261 if (mtr->modifications && mtr->n_log_recs) {
262 mtr_log_reserve_and_write(mtr);
265 mtr_memo_pop_all(mtr);
268 ut_d(mtr->state = MTR_COMMITTED);
273 #ifndef UNIV_HOTBACKUP
290 ut_ad(mtr->magic_n == MTR_MAGIC_N);
291 ut_ad(mtr->state == MTR_ACTIVE);
296 ut_ad(offset >= savepoint);
298 while (offset > savepoint) {
308 mtr_memo_slot_release(mtr, slot);
327 ut_ad(mtr->magic_n == MTR_MAGIC_N);
328 ut_ad(mtr->state == MTR_ACTIVE);
340 if (
object == slot->
object && type == slot->
type) {
345 ut_ad(!(mtr->modifications
346 && slot->
type == MTR_MEMO_PAGE_X_FIX));
348 mtr_memo_slot_release(mtr, slot);
369 ut_ad(mtr->state == MTR_ACTIVE);
370 ut_ad(mtr_memo_contains_page(mtr, ptr, MTR_MEMO_PAGE_S_FIX)
371 || mtr_memo_contains_page(mtr, ptr, MTR_MEMO_PAGE_X_FIX));
383 # ifndef UNIV_HOTBACKUP
389 mtr_memo_contains_page(
407 "Mini-transaction handle: memo size %lu bytes"
408 " log size %lu bytes\n",
UNIV_INLINE ulint dyn_array_get_data_size(dyn_array_t *arr)
UNIV_INLINE dyn_block_t * dyn_array_get_next_block(dyn_array_t *arr, dyn_block_t *block)
UNIV_INTERN void mtr_rollback_to_savepoint(mtr_t *mtr, ulint savepoint)
UNIV_INLINE byte * dyn_block_get_data(dyn_block_t *block)
#define log_flush_order_mutex_own()
UNIV_INLINE ulint dyn_block_get_used(dyn_block_t *block)
#define log_flush_order_mutex_enter()
UNIV_INLINE void mlog_catenate_ulint(mtr_t *mtr, ulint val, ulint type)
UNIV_INTERN void mtr_commit(mtr_t *mtr) __attribute__((nonnull))
UNIV_INTERN ulint mtr_read_ulint(const byte *ptr, ulint type, mtr_t *mtr)
UNIV_INLINE void * dyn_array_get_element(dyn_array_t *arr, ulint pos)
#define MLOG_MULTI_REC_END
UNIV_INLINE ib_uint64_t log_reserve_and_write_fast(const void *str, ulint len, ib_uint64_t *start_lsn)
UNIV_INTERN ib_uint64_t log_reserve_and_open(ulint len)
UNIV_INTERN void mtr_memo_release(mtr_t *mtr, void *object, ulint type)
UNIV_INTERN ib_uint64_t log_close(void)
UNIV_INLINE void buf_flush_note_modification(buf_block_t *block, mtr_t *mtr)
#define log_flush_order_mutex_exit()
UNIV_INLINE void buf_page_release(buf_block_t *block, ulint rw_latch)
UNIV_INLINE ulint mach_read_from_4(const byte *b) __attribute__((nonnull
UNIV_INTERN buf_block_t * buf_block_align(const byte *ptr)
#define MLOG_SINGLE_REC_FLAG
UNIV_INLINE void log_release(void)
UNIV_INLINE ulint mach_read_from_1(const byte *b) __attribute__((nonnull
UNIV_INLINE void dyn_array_free(dyn_array_t *arr)
UNIV_INLINE ulint mach_read_from_2(const byte *b) __attribute__((nonnull
UNIV_INTERN void log_write_low(byte *str, ulint str_len)
A block in a dynamically allocated array. NOTE! Do not access the fields of the struct directly: the ...