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
void *rseg_buf= mem_zalloc(sizeof(trx_rseg_t));
201
rseg = static_cast<trx_rseg_t *>(rseg_buf);
206
204
rseg->space = space;
207
205
rseg->zip_size = zip_size;
208
206
rseg->page_no = page_no;
210
mutex_create(&rseg->mutex, SYNC_RSEG);
208
mutex_create(rseg_mutex_key, &rseg->mutex, SYNC_RSEG);
212
210
UT_LIST_ADD_LAST(rseg_list, trx_sys->rseg_list, rseg);
253
/*********************************************************************//**
254
Creates the memory copies for rollback segments and initializes the
251
/********************************************************************
252
Creates the memory copies for the rollback segments and initializes the
255
253
rseg list and array in trx_sys at a database startup. */
258
trx_rseg_list_and_array_init(
259
/*=========================*/
256
trx_rseg_create_instance(
257
/*=====================*/
260
258
trx_sysf_t* sys_header, /*!< in: trx system header */
261
259
mtr_t* mtr) /*!< in: mtr */
267
UT_LIST_INIT(trx_sys->rseg_list);
269
trx_sys->rseg_history_len = 0;
271
263
for (i = 0; i < TRX_SYS_N_RSEGS; i++) {
273
266
page_no = trx_sysf_rseg_get_page_no(sys_header, i, mtr);
275
268
if (page_no == FIL_NULL) {
277
269
trx_sys_set_nth_rseg(trx_sys, i, NULL);
273
trx_rseg_t* rseg = NULL;
275
ut_a(!trx_rseg_get_on_id(i));
281
277
space = trx_sysf_rseg_get_space(sys_header, i, mtr);
283
279
zip_size = space ? fil_space_get_zip_size(space) : 0;
285
trx_rseg_mem_create(i, space, zip_size, page_no, mtr);
281
rseg = trx_rseg_mem_create(
282
i, space, zip_size, page_no, mtr);
289
/*********************************************************************
290
Creates a rollback segment.
291
@return pointer to new rollback segment if create successful */
294
trx_rseg_create(void)
295
/*=================*/
299
trx_rseg_t* rseg = NULL;
303
/* To obey the latching order, acquire the file space
304
x-latch before the kernel mutex. */
305
mtr_x_lock(fil_space_get_latch(TRX_SYS_SPACE, NULL), &mtr);
307
mutex_enter(&kernel_mutex);
309
slot_no = trx_sysf_rseg_find_free(&mtr);
311
if (slot_no != ULINT_UNDEFINED) {
315
trx_sysf_t* sys_header;
317
page_no = trx_rseg_header_create(
318
TRX_SYS_SPACE, 0, ULINT_MAX, slot_no, &mtr);
320
ut_a(page_no != FIL_NULL);
322
ut_ad(!trx_rseg_get_on_id(slot_no));
324
sys_header = trx_sysf_get(&mtr);
326
space = trx_sysf_rseg_get_space(sys_header, slot_no, &mtr);
328
zip_size = space ? fil_space_get_zip_size(space) : 0;
330
rseg = trx_rseg_mem_create(
331
slot_no, space, zip_size, page_no, &mtr);
334
mutex_exit(&kernel_mutex);
340
/********************************************************************
341
Initialize the rollback instance list. */
344
trx_rseg_list_and_array_init(
345
/*=========================*/
346
trx_sysf_t* sys_header, /* in: trx system header */
347
mtr_t* mtr) /* in: mtr */
349
UT_LIST_INIT(trx_sys->rseg_list);
351
trx_sys->rseg_history_len = 0;
353
trx_rseg_create_instance(sys_header, mtr);