122
117
trx_rsegf_set_nth_undo(rsegf, i, FIL_NULL, mtr);
125
/* Add the rollback segment info to the free slot in the trx system
128
trx_sysf_rseg_set_space(sys_header, *slot_no, space, mtr);
129
trx_sysf_rseg_set_page_no(sys_header, *slot_no, page_no, mtr);
120
/* Add the rollback segment info to the free slot in
121
the trx system header */
123
sys_header = trx_sysf_get(mtr);
125
trx_sysf_rseg_set_space(sys_header, rseg_slot_no, space, mtr);
126
trx_sysf_rseg_set_page_no(sys_header, rseg_slot_no, page_no, mtr);
191
188
ulint page_no, /*!< in: page number of the segment header */
192
189
mtr_t* mtr) /*!< in: mtr */
193
fil_addr_t node_addr;
194
194
trx_rsegf_t* rseg_header;
196
195
trx_ulogf_t* undo_log_hdr;
197
fil_addr_t node_addr;
198
196
ulint sum_of_undo_sizes;
201
198
ut_ad(mutex_own(&kernel_mutex));
203
rseg = mem_alloc(sizeof(trx_rseg_t));
200
rseg = mem_zalloc(sizeof(trx_rseg_t));
206
203
rseg->space = space;
207
204
rseg->zip_size = zip_size;
208
205
rseg->page_no = page_no;
210
mutex_create(&rseg->mutex, SYNC_RSEG);
207
mutex_create(rseg_mutex_key, &rseg->mutex, SYNC_RSEG);
212
209
UT_LIST_ADD_LAST(rseg_list, trx_sys->rseg_list, rseg);
253
/*********************************************************************//**
254
Creates the memory copies for rollback segments and initializes the
250
/********************************************************************
251
Creates the memory copies for the rollback segments and initializes the
255
252
rseg list and array in trx_sys at a database startup. */
258
trx_rseg_list_and_array_init(
259
/*=========================*/
255
trx_rseg_create_instance(
256
/*=====================*/
260
257
trx_sysf_t* sys_header, /*!< in: trx system header */
261
258
mtr_t* mtr) /*!< in: mtr */
267
UT_LIST_INIT(trx_sys->rseg_list);
269
trx_sys->rseg_history_len = 0;
271
262
for (i = 0; i < TRX_SYS_N_RSEGS; i++) {
273
265
page_no = trx_sysf_rseg_get_page_no(sys_header, i, mtr);
275
267
if (page_no == FIL_NULL) {
277
268
trx_sys_set_nth_rseg(trx_sys, i, NULL);
272
trx_rseg_t* rseg = NULL;
274
ut_a(!trx_rseg_get_on_id(i));
281
276
space = trx_sysf_rseg_get_space(sys_header, i, mtr);
283
278
zip_size = space ? fil_space_get_zip_size(space) : 0;
285
trx_rseg_mem_create(i, space, zip_size, page_no, mtr);
280
rseg = trx_rseg_mem_create(
281
i, space, zip_size, page_no, mtr);
288
/*********************************************************************
289
Creates a rollback segment.
290
@return pointer to new rollback segment if create successful */
293
trx_rseg_create(void)
294
/*=================*/
298
trx_rseg_t* rseg = NULL;
302
/* To obey the latching order, acquire the file space
303
x-latch before the kernel mutex. */
304
mtr_x_lock(fil_space_get_latch(TRX_SYS_SPACE, NULL), &mtr);
306
mutex_enter(&kernel_mutex);
308
slot_no = trx_sysf_rseg_find_free(&mtr);
310
if (slot_no != ULINT_UNDEFINED) {
314
trx_sysf_t* sys_header;
316
page_no = trx_rseg_header_create(
317
TRX_SYS_SPACE, 0, ULINT_MAX, slot_no, &mtr);
319
ut_a(page_no != FIL_NULL);
321
ut_ad(!trx_rseg_get_on_id(slot_no));
323
sys_header = trx_sysf_get(&mtr);
325
space = trx_sysf_rseg_get_space(sys_header, slot_no, &mtr);
327
zip_size = space ? fil_space_get_zip_size(space) : 0;
329
rseg = trx_rseg_mem_create(
330
slot_no, space, zip_size, page_no, &mtr);
333
mutex_exit(&kernel_mutex);
339
/********************************************************************
340
Initialize the rollback instance list. */
343
trx_rseg_list_and_array_init(
344
/*=========================*/
345
trx_sysf_t* sys_header, /* in: trx system header */
346
mtr_t* mtr) /* in: mtr */
348
UT_LIST_INIT(trx_sys->rseg_list);
350
trx_sys->rseg_history_len = 0;
352
trx_rseg_create_instance(sys_header, mtr);