Loading include/keycache.h +4 −1 Original line number Diff line number Diff line Loading @@ -88,12 +88,13 @@ typedef struct st_key_cache ulong param_division_limit; /* min. percentage of warm blocks */ ulong param_age_threshold; /* determines when hot block is downgraded */ /* Statistics variables */ /* Statistics variables. These are reset in reset_key_cache_counters(). */ ulong global_blocks_changed; /* number of currently dirty blocks */ ulong global_cache_w_requests;/* number of write requests (write hits) */ ulong global_cache_write; /* number of writes from the cache to files */ ulong global_cache_r_requests;/* number of read requests (read hits) */ ulong global_cache_read; /* number of reads from files to the cache */ int blocks; /* max number of blocks in the cache */ my_bool in_init; /* Set to 1 in MySQL during init/resize */ } KEY_CACHE; Loading Loading @@ -132,5 +133,7 @@ extern my_bool multi_key_cache_set(const byte *key, uint length, KEY_CACHE *key_cache); extern void multi_key_cache_change(KEY_CACHE *old_data, KEY_CACHE *new_data); extern int reset_key_cache_counters(const char *name, KEY_CACHE *key_cache); C_MODE_END #endif /* _keycache_h */ innobase/dict/dict0crea.c +11 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,17 @@ dict_create_sys_tables_tuple( dfield_set_data(dfield, ptr, 8); /* 7: MIX_LEN --------------------------*/ /* Track corruption reported on mailing list Jan 14, 2005 */ if (table->mix_len != 0 && table->mix_len != 0x80000000) { fprintf(stderr, "InnoDB: Error: mix_len is %lu in table %s\n", (ulong)table->mix_len, table->name); mem_analyze_corruption((byte*)&(table->mix_len)); ut_error; } dfield = dtuple_get_nth_field(entry, 5); ptr = mem_heap_alloc(heap, 4); Loading innobase/dict/dict0dict.c +6 −2 Original line number Diff line number Diff line Loading @@ -2895,9 +2895,9 @@ dict_create_foreign_constraints_low( constraint_name = NULL; if (ptr1 < ptr2) { /* The user has specified a constraint name. Pick it so /* The user may have specified a constraint name. Pick it so that we can store 'databasename/constraintname' as the id of the id of the constraint to system tables. */ of the constraint to system tables. */ ptr = ptr1; ptr = dict_accept(ptr, "CONSTRAINT", &success); Loading Loading @@ -2934,6 +2934,10 @@ dict_create_foreign_constraints_low( ptr = dict_accept(ptr, "FOREIGN", &success); if (!success) { goto loop; } if (!isspace(*ptr)) { goto loop; } Loading innobase/dict/dict0load.c +17 −0 Original line number Diff line number Diff line Loading @@ -729,6 +729,7 @@ dict_load_table( ulint space; ulint n_cols; ulint err; ulint mix_len; mtr_t mtr; #ifdef UNIV_SYNC_DEBUG Loading Loading @@ -775,6 +776,22 @@ dict_load_table( return(NULL); } /* Track a corruption bug reported on the MySQL mailing list Jan 14, 2005: mix_len had a value different from 0 */ field = rec_get_nth_field(rec, 7, &len); ut_a(len == 4); mix_len = mach_read_from_4(field); if (mix_len != 0 && mix_len != 0x80000000) { ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: table %s has a nonsensical mix len %lu\n", name, (ulong)mix_len); } #if MYSQL_VERSION_ID < 50300 /* Starting from MySQL 5.0.3, the high-order bit of MIX_LEN is the "compact format" flag. */ Loading innobase/fil/fil0fil.c +53 −24 Original line number Diff line number Diff line Loading @@ -477,28 +477,33 @@ fil_node_open_file( ut_a(node->n_pending == 0); ut_a(node->open == FALSE); /* printf("Opening file %s\n", node->name); */ if (space->purpose == FIL_LOG) { node->handle = os_file_create(node->name, OS_FILE_OPEN, OS_FILE_AIO, OS_LOG_FILE, &ret); } else if (node->is_raw_disk) { node->handle = os_file_create(node->name, OS_FILE_OPEN_RAW, OS_FILE_AIO, OS_DATA_FILE, &ret); } else { node->handle = os_file_create(node->name, OS_FILE_OPEN, OS_FILE_AIO, OS_DATA_FILE, &ret); } ut_a(ret); if (node->size == 0) { /* It must be a single-table tablespace and we do not know the size of the file yet. First we open the file in the normal mode, no async I/O here, for simplicity. Then do some checks, and close the file again. NOTE that we could not use the simple file read function os_file_read() in Windows to read from a file opened for async I/O! */ node->handle = os_file_create_simple_no_error_handling( node->name, OS_FILE_OPEN, OS_FILE_READ_ONLY, &success); if (!success) { /* The following call prints an error message */ os_file_get_last_error(TRUE); node->open = TRUE; ut_print_timestamp(stderr); system->n_open++; fprintf(stderr, " InnoDB: Fatal error: cannot open %s\n." "InnoDB: Have you deleted .ibd files under a running mysqld server?\n", node->name); ut_a(0); } if (node->size == 0) { ut_a(space->purpose != FIL_LOG); ut_a(space->id != 0); os_file_get_size(node->handle, &size_low, &size_high); Loading @@ -508,11 +513,6 @@ fil_node_open_file( node->size = (ulint) (size_bytes / UNIV_PAGE_SIZE); #else /* It must be a single-table tablespace and we do not know the size of the file yet */ ut_a(space->id != 0); if (size_bytes < FIL_IBD_FILE_INITIAL_SIZE * UNIV_PAGE_SIZE) { fprintf(stderr, "InnoDB: Error: the size of single-table tablespace file %s\n" Loading @@ -536,6 +536,10 @@ fil_node_open_file( ut_free(buf2); /* Close the file now that we have read the space id from it */ os_file_close(node->handle); if (space_id == ULINT_UNDEFINED || space_id == 0) { fprintf(stderr, "InnoDB: Error: tablespace id %lu in file %s is not sensible\n", Loading Loading @@ -563,6 +567,30 @@ fil_node_open_file( space->size += node->size; } /* printf("Opening file %s\n", node->name); */ /* Open the file for reading and writing, in Windows normally in the unbuffered async I/O mode, though global variables may make os_file_create() to fall back to the normal file I/O mode. */ if (space->purpose == FIL_LOG) { node->handle = os_file_create(node->name, OS_FILE_OPEN, OS_FILE_AIO, OS_LOG_FILE, &ret); } else if (node->is_raw_disk) { node->handle = os_file_create(node->name, OS_FILE_OPEN_RAW, OS_FILE_AIO, OS_DATA_FILE, &ret); } else { node->handle = os_file_create(node->name, OS_FILE_OPEN, OS_FILE_AIO, OS_DATA_FILE, &ret); } ut_a(ret); node->open = TRUE; system->n_open++; if (space->purpose == FIL_TABLESPACE && space->id != 0) { /* Put the node to the LRU list */ UT_LIST_ADD_FIRST(LRU, system->LRU, node); Loading Loading @@ -4111,7 +4139,8 @@ fil_flush_file_spaces( space = UT_LIST_GET_FIRST(system->space_list); while (space) { if (space->purpose == purpose) { if (space->purpose == purpose && !space->is_being_deleted) { space->n_pending_flushes++; /* prevent dropping of the space while we are flushing */ Loading Loading
include/keycache.h +4 −1 Original line number Diff line number Diff line Loading @@ -88,12 +88,13 @@ typedef struct st_key_cache ulong param_division_limit; /* min. percentage of warm blocks */ ulong param_age_threshold; /* determines when hot block is downgraded */ /* Statistics variables */ /* Statistics variables. These are reset in reset_key_cache_counters(). */ ulong global_blocks_changed; /* number of currently dirty blocks */ ulong global_cache_w_requests;/* number of write requests (write hits) */ ulong global_cache_write; /* number of writes from the cache to files */ ulong global_cache_r_requests;/* number of read requests (read hits) */ ulong global_cache_read; /* number of reads from files to the cache */ int blocks; /* max number of blocks in the cache */ my_bool in_init; /* Set to 1 in MySQL during init/resize */ } KEY_CACHE; Loading Loading @@ -132,5 +133,7 @@ extern my_bool multi_key_cache_set(const byte *key, uint length, KEY_CACHE *key_cache); extern void multi_key_cache_change(KEY_CACHE *old_data, KEY_CACHE *new_data); extern int reset_key_cache_counters(const char *name, KEY_CACHE *key_cache); C_MODE_END #endif /* _keycache_h */
innobase/dict/dict0crea.c +11 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,17 @@ dict_create_sys_tables_tuple( dfield_set_data(dfield, ptr, 8); /* 7: MIX_LEN --------------------------*/ /* Track corruption reported on mailing list Jan 14, 2005 */ if (table->mix_len != 0 && table->mix_len != 0x80000000) { fprintf(stderr, "InnoDB: Error: mix_len is %lu in table %s\n", (ulong)table->mix_len, table->name); mem_analyze_corruption((byte*)&(table->mix_len)); ut_error; } dfield = dtuple_get_nth_field(entry, 5); ptr = mem_heap_alloc(heap, 4); Loading
innobase/dict/dict0dict.c +6 −2 Original line number Diff line number Diff line Loading @@ -2895,9 +2895,9 @@ dict_create_foreign_constraints_low( constraint_name = NULL; if (ptr1 < ptr2) { /* The user has specified a constraint name. Pick it so /* The user may have specified a constraint name. Pick it so that we can store 'databasename/constraintname' as the id of the id of the constraint to system tables. */ of the constraint to system tables. */ ptr = ptr1; ptr = dict_accept(ptr, "CONSTRAINT", &success); Loading Loading @@ -2934,6 +2934,10 @@ dict_create_foreign_constraints_low( ptr = dict_accept(ptr, "FOREIGN", &success); if (!success) { goto loop; } if (!isspace(*ptr)) { goto loop; } Loading
innobase/dict/dict0load.c +17 −0 Original line number Diff line number Diff line Loading @@ -729,6 +729,7 @@ dict_load_table( ulint space; ulint n_cols; ulint err; ulint mix_len; mtr_t mtr; #ifdef UNIV_SYNC_DEBUG Loading Loading @@ -775,6 +776,22 @@ dict_load_table( return(NULL); } /* Track a corruption bug reported on the MySQL mailing list Jan 14, 2005: mix_len had a value different from 0 */ field = rec_get_nth_field(rec, 7, &len); ut_a(len == 4); mix_len = mach_read_from_4(field); if (mix_len != 0 && mix_len != 0x80000000) { ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: table %s has a nonsensical mix len %lu\n", name, (ulong)mix_len); } #if MYSQL_VERSION_ID < 50300 /* Starting from MySQL 5.0.3, the high-order bit of MIX_LEN is the "compact format" flag. */ Loading
innobase/fil/fil0fil.c +53 −24 Original line number Diff line number Diff line Loading @@ -477,28 +477,33 @@ fil_node_open_file( ut_a(node->n_pending == 0); ut_a(node->open == FALSE); /* printf("Opening file %s\n", node->name); */ if (space->purpose == FIL_LOG) { node->handle = os_file_create(node->name, OS_FILE_OPEN, OS_FILE_AIO, OS_LOG_FILE, &ret); } else if (node->is_raw_disk) { node->handle = os_file_create(node->name, OS_FILE_OPEN_RAW, OS_FILE_AIO, OS_DATA_FILE, &ret); } else { node->handle = os_file_create(node->name, OS_FILE_OPEN, OS_FILE_AIO, OS_DATA_FILE, &ret); } ut_a(ret); if (node->size == 0) { /* It must be a single-table tablespace and we do not know the size of the file yet. First we open the file in the normal mode, no async I/O here, for simplicity. Then do some checks, and close the file again. NOTE that we could not use the simple file read function os_file_read() in Windows to read from a file opened for async I/O! */ node->handle = os_file_create_simple_no_error_handling( node->name, OS_FILE_OPEN, OS_FILE_READ_ONLY, &success); if (!success) { /* The following call prints an error message */ os_file_get_last_error(TRUE); node->open = TRUE; ut_print_timestamp(stderr); system->n_open++; fprintf(stderr, " InnoDB: Fatal error: cannot open %s\n." "InnoDB: Have you deleted .ibd files under a running mysqld server?\n", node->name); ut_a(0); } if (node->size == 0) { ut_a(space->purpose != FIL_LOG); ut_a(space->id != 0); os_file_get_size(node->handle, &size_low, &size_high); Loading @@ -508,11 +513,6 @@ fil_node_open_file( node->size = (ulint) (size_bytes / UNIV_PAGE_SIZE); #else /* It must be a single-table tablespace and we do not know the size of the file yet */ ut_a(space->id != 0); if (size_bytes < FIL_IBD_FILE_INITIAL_SIZE * UNIV_PAGE_SIZE) { fprintf(stderr, "InnoDB: Error: the size of single-table tablespace file %s\n" Loading @@ -536,6 +536,10 @@ fil_node_open_file( ut_free(buf2); /* Close the file now that we have read the space id from it */ os_file_close(node->handle); if (space_id == ULINT_UNDEFINED || space_id == 0) { fprintf(stderr, "InnoDB: Error: tablespace id %lu in file %s is not sensible\n", Loading Loading @@ -563,6 +567,30 @@ fil_node_open_file( space->size += node->size; } /* printf("Opening file %s\n", node->name); */ /* Open the file for reading and writing, in Windows normally in the unbuffered async I/O mode, though global variables may make os_file_create() to fall back to the normal file I/O mode. */ if (space->purpose == FIL_LOG) { node->handle = os_file_create(node->name, OS_FILE_OPEN, OS_FILE_AIO, OS_LOG_FILE, &ret); } else if (node->is_raw_disk) { node->handle = os_file_create(node->name, OS_FILE_OPEN_RAW, OS_FILE_AIO, OS_DATA_FILE, &ret); } else { node->handle = os_file_create(node->name, OS_FILE_OPEN, OS_FILE_AIO, OS_DATA_FILE, &ret); } ut_a(ret); node->open = TRUE; system->n_open++; if (space->purpose == FIL_TABLESPACE && space->id != 0) { /* Put the node to the LRU list */ UT_LIST_ADD_FIRST(LRU, system->LRU, node); Loading Loading @@ -4111,7 +4139,8 @@ fil_flush_file_spaces( space = UT_LIST_GET_FIRST(system->space_list); while (space) { if (space->purpose == purpose) { if (space->purpose == purpose && !space->is_being_deleted) { space->n_pending_flushes++; /* prevent dropping of the space while we are flushing */ Loading