#!!! notice !!!
# Any small change to this file in the main branch
# should be done or reviewed by the maintainer!
-diff -ruN a/storage/innobase/fil/fil0fil.c b/storage/innobase/fil/fil0fil.c
---- a/storage/innobase/fil/fil0fil.c 2010-12-04 15:55:21.358513751 +0900
-+++ b/storage/innobase/fil/fil0fil.c 2010-12-04 15:55:58.243481131 +0900
-@@ -4800,9 +4800,9 @@
+--- a/storage/innobase/fil/fil0fil.c
++++ b/storage/innobase/fil/fil0fil.c
+@@ -731,7 +731,7 @@
+ ut_a(space->purpose != FIL_LOG);
+ ut_a(!trx_sys_sys_space(space->id));
+
+- if (size_bytes < FIL_IBD_FILE_INITIAL_SIZE * UNIV_PAGE_SIZE) {
++ if (size_bytes < FIL_IBD_FILE_INITIAL_SIZE * (lint)UNIV_PAGE_SIZE) {
+ fprintf(stderr,
+ "InnoDB: Error: the size of single-table"
+ " tablespace file %s\n"
+@@ -4169,7 +4169,7 @@
+
+ size = (((ib_int64_t)size_high) << 32) + (ib_int64_t)size_low;
+ #ifndef UNIV_HOTBACKUP
+- if (size < FIL_IBD_FILE_INITIAL_SIZE * UNIV_PAGE_SIZE) {
++ if (size < FIL_IBD_FILE_INITIAL_SIZE * (lint)UNIV_PAGE_SIZE) {
+ fprintf(stderr,
+ "InnoDB: Error: the size of single-table tablespace"
+ " file %s\n"
+@@ -4189,7 +4189,7 @@
+ /* Align the memory for file i/o if we might have O_DIRECT set */
+ page = ut_align(buf2, UNIV_PAGE_SIZE);
+
+- if (size >= FIL_IBD_FILE_INITIAL_SIZE * UNIV_PAGE_SIZE) {
++ if (size >= FIL_IBD_FILE_INITIAL_SIZE * (lint)UNIV_PAGE_SIZE) {
+ success = os_file_read(file, page, 0, 0, UNIV_PAGE_SIZE);
+
+ /* We have to read the tablespace id from the file */
+@@ -5167,9 +5167,9 @@
ut_ad(ut_is_2pow(zip_size));
ut_ad(buf);
ut_ad(len > 0);
+//#if (1 << UNIV_PAGE_SIZE_SHIFT) != UNIV_PAGE_SIZE
+//# error "(1 << UNIV_PAGE_SIZE_SHIFT) != UNIV_PAGE_SIZE"
+//#endif
- ut_ad(fil_validate());
+ ut_ad(fil_validate_skip());
#ifndef UNIV_HOTBACKUP
# ifndef UNIV_LOG_DEBUG
-diff -ruN a/storage/innobase/fsp/fsp0fsp.c b/storage/innobase/fsp/fsp0fsp.c
---- a/storage/innobase/fsp/fsp0fsp.c 2010-12-04 15:52:23.411513754 +0900
-+++ b/storage/innobase/fsp/fsp0fsp.c 2010-12-04 15:55:58.244514273 +0900
-@@ -657,15 +657,16 @@
+--- a/storage/innobase/fsp/fsp0fsp.c
++++ b/storage/innobase/fsp/fsp0fsp.c
+@@ -595,16 +595,18 @@
+ 0 for uncompressed pages */
ulint offset) /*!< in: page offset */
{
- #ifndef DOXYGEN /* Doxygen gets confused of these */
+-#ifndef DOXYGEN /* Doxygen gets confused of these */
-# if UNIV_PAGE_SIZE <= XDES_ARR_OFFSET \
- + (UNIV_PAGE_SIZE / FSP_EXTENT_SIZE) * XDES_SIZE
-# error
-# endif
+-# if PAGE_ZIP_MIN_SIZE <= XDES_ARR_OFFSET \
+- + (PAGE_ZIP_MIN_SIZE / FSP_EXTENT_SIZE) * XDES_SIZE
+-# error
+-# endif
+-#endif /* !DOXYGEN */
++//#ifndef DOXYGEN /* Doxygen gets confused of these */
+//# if UNIV_PAGE_SIZE <= XDES_ARR_OFFSET
+// + (UNIV_PAGE_SIZE / FSP_EXTENT_SIZE) * XDES_SIZE
+//# error
+//# endif
- # if PAGE_ZIP_MIN_SIZE <= XDES_ARR_OFFSET \
- + (PAGE_ZIP_MIN_SIZE / FSP_EXTENT_SIZE) * XDES_SIZE
- # error
- # endif
- #endif /* !DOXYGEN */
++//# if PAGE_ZIP_MIN_SIZE <= XDES_ARR_OFFSET
++// + (PAGE_ZIP_MIN_SIZE / FSP_EXTENT_SIZE) * XDES_SIZE
++//# error
++//# endif
++//#endif /* !DOXYGEN */
+ ut_a(UNIV_PAGE_SIZE > XDES_ARR_OFFSET + (UNIV_PAGE_SIZE / FSP_EXTENT_SIZE) * XDES_SIZE);
++ ut_a(PAGE_ZIP_MIN_SIZE > XDES_ARR_OFFSET + (PAGE_ZIP_MIN_SIZE / FSP_EXTENT_SIZE) * XDES_SIZE);
ut_ad(ut_is_2pow(zip_size));
if (!zip_size) {
-@@ -1464,12 +1465,12 @@
+@@ -1403,12 +1405,12 @@
mtr);
xdes_init(descr, mtr);
if (UNIV_UNLIKELY(init_xdes)) {
-diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
---- a/storage/innobase/handler/ha_innodb.cc 2010-12-04 15:55:21.367482924 +0900
-+++ b/storage/innobase/handler/ha_innodb.cc 2010-12-04 15:55:58.248549631 +0900
+--- a/storage/innobase/handler/ha_innodb.cc
++++ b/storage/innobase/handler/ha_innodb.cc
@@ -148,6 +148,9 @@
static ulong innobase_write_io_threads;
static long innobase_buffer_pool_instances = 1;
static my_bool innobase_thread_concurrency_timer_based;
static long long innobase_buffer_pool_size, innobase_log_file_size;
-@@ -2269,6 +2272,62 @@
+@@ -2352,6 +2355,65 @@
}
- #endif /* UNIV_DEBUG */
+ #endif /* DBUG_OFF */
+ srv_page_size = 0;
+ srv_page_size_shift = 0;
+
+ if (!srv_page_size_shift) {
+ fprintf(stderr,
-+ "InnoDB: Error: %lu is not valid value for innodb_page_size.\n",
++ "InnoDB: Error: %lu is not a valid value for innodb_page_size.\n"
++ "InnoDB: Error: Valid values are 4096, 8192, and 16384 (default=16384).\n",
+ innobase_page_size);
+ goto error;
+ }
+
+ if (!srv_log_block_size) {
+ fprintf(stderr,
-+ "InnoDB: Error: %lu is not valid value for innodb_log_block_size.\n",
++ "InnoDB: Error: %lu is not a valid value for innodb_log_block_size.\n"
++ "InnoDB: Error: A valid value for innodb_log_block_size is\n"
++ "InnoDB: Error: a power of 2 from 512 to 16384.\n",
+ innobase_log_block_size);
+ goto error;
+ }
#ifndef MYSQL_SERVER
innodb_overwrite_relay_log_info = FALSE;
#endif
-@@ -7212,9 +7271,9 @@
+@@ -7289,9 +7351,9 @@
| DICT_TF_COMPACT
| DICT_TF_FORMAT_ZIP
<< DICT_TF_FORMAT_SHIFT;
}
}
-@@ -11332,6 +11391,16 @@
+@@ -11552,6 +11614,16 @@
"#### Attention: The checksum is not compatible for normal or disabled version! ####",
NULL, NULL, FALSE);
static MYSQL_SYSVAR_STR(data_home_dir, innobase_data_home_dir,
PLUGIN_VAR_READONLY,
"The common part for InnoDB table spaces.",
-@@ -11839,6 +11908,8 @@
- NULL, NULL, 0, 0, 1, 0);
+@@ -12118,6 +12190,8 @@
+ NULL, NULL, 0, &corrupt_table_action_typelib);
static struct st_mysql_sys_var* innobase_system_variables[]= {
+ MYSQL_SYSVAR(page_size),
MYSQL_SYSVAR(additional_mem_pool_size),
MYSQL_SYSVAR(autoextend_increment),
MYSQL_SYSVAR(buffer_pool_size),
-diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h
---- a/storage/innobase/include/buf0buf.h 2010-12-04 15:55:21.375482937 +0900
-+++ b/storage/innobase/include/buf0buf.h 2010-12-04 15:55:58.258469088 +0900
-@@ -1602,7 +1602,7 @@
+--- a/storage/innobase/include/buf0buf.h
++++ b/storage/innobase/include/buf0buf.h
+@@ -1725,7 +1725,7 @@
time_t last_printout_time;
/*!< when buf_print_io was last time
called */
/*!< Statistics of buddy system,
indexed by block size */
buf_pool_stat_t stat; /*!< current statistics */
-@@ -1698,7 +1698,7 @@
- /* @{ */
+@@ -1823,7 +1823,7 @@
UT_LIST_BASE_NODE_T(buf_page_t) zip_clean;
/*!< unmodified compressed pages */
+ #endif /* UNIV_DEBUG || UNIV_BUF_DEBUG */
- UT_LIST_BASE_NODE_T(buf_page_t) zip_free[BUF_BUDDY_SIZES];
+ UT_LIST_BASE_NODE_T(buf_page_t) zip_free[BUF_BUDDY_SIZES_MAX];
/*!< buddy free lists */
buf_page_t watch[BUF_POOL_WATCH_SIZE];
-@@ -1706,9 +1706,9 @@
+@@ -1831,9 +1831,9 @@
pool watches. Protected by
buf_pool->mutex. */
#if BUF_BUDDY_LOW > PAGE_ZIP_MIN_SIZE
# error "BUF_BUDDY_LOW > PAGE_ZIP_MIN_SIZE"
#endif
-diff -ruN a/storage/innobase/include/buf0types.h b/storage/innobase/include/buf0types.h
---- a/storage/innobase/include/buf0types.h 2010-11-03 07:01:13.000000000 +0900
-+++ b/storage/innobase/include/buf0types.h 2010-12-04 15:55:58.259482590 +0900
-@@ -72,6 +72,7 @@
- buddy system; must be at least
- sizeof(buf_page_t) */
+--- a/storage/innobase/include/buf0types.h
++++ b/storage/innobase/include/buf0types.h
+@@ -70,12 +70,13 @@
+ #define BUF_BUDDY_LOW (1 << BUF_BUDDY_LOW_SHIFT)
+
#define BUF_BUDDY_SIZES (UNIV_PAGE_SIZE_SHIFT - BUF_BUDDY_LOW_SHIFT)
+#define BUF_BUDDY_SIZES_MAX (UNIV_PAGE_SIZE_SHIFT_MAX - BUF_BUDDY_LOW_SHIFT)
/*!< number of buddy sizes */
/** twice the maximum block size of the buddy system;
-diff -ruN a/storage/innobase/include/log0log.h b/storage/innobase/include/log0log.h
---- a/storage/innobase/include/log0log.h 2010-11-03 07:01:13.000000000 +0900
-+++ b/storage/innobase/include/log0log.h 2010-12-09 18:16:47.737728305 +0900
+ the underlying memory is aligned by this amount:
+ this must be equal to UNIV_PAGE_SIZE */
+-#define BUF_BUDDY_HIGH (BUF_BUDDY_LOW << BUF_BUDDY_SIZES)
++#define BUF_BUDDY_HIGH ((ulint)BUF_BUDDY_LOW << BUF_BUDDY_SIZES)
+ /* @} */
+
+ #endif
+--- a/storage/innobase/include/fsp0types.h
++++ b/storage/innobase/include/fsp0types.h
+@@ -42,7 +42,7 @@
+ /* @} */
+
+ /** File space extent size (one megabyte) in pages */
+-#define FSP_EXTENT_SIZE (1 << (20 - UNIV_PAGE_SIZE_SHIFT))
++#define FSP_EXTENT_SIZE ((ulint)1 << (20 - UNIV_PAGE_SIZE_SHIFT))
+
+ /** On a page of any file segment, data may be put starting from this
+ offset */
+--- a/storage/innobase/include/log0log.h
++++ b/storage/innobase/include/log0log.h
@@ -672,6 +672,9 @@
when mysqld is first time started
on the restored database, it can
#define LOG_FILE_ARCH_COMPLETED OS_FILE_LOG_BLOCK_SIZE
/* this 4-byte field is TRUE when
the writing of an archived log file
-diff -ruN a/storage/innobase/include/mtr0log.ic b/storage/innobase/include/mtr0log.ic
---- a/storage/innobase/include/mtr0log.ic 2010-12-04 15:37:50.590551517 +0900
-+++ b/storage/innobase/include/mtr0log.ic 2010-12-04 15:55:58.260482404 +0900
+--- a/storage/innobase/include/mtr0log.ic
++++ b/storage/innobase/include/mtr0log.ic
@@ -203,7 +203,7 @@
system tablespace */
if ((space == TRX_SYS_SPACE
if (trx_doublewrite_buf_is_being_created) {
/* Do nothing: we only come to this branch in an
InnoDB database creation. We do not redo log
-diff -ruN a/storage/innobase/include/os0file.h b/storage/innobase/include/os0file.h
---- a/storage/innobase/include/os0file.h 2010-12-09 18:16:02.323727427 +0900
-+++ b/storage/innobase/include/os0file.h 2010-12-09 18:16:47.738694194 +0900
+--- a/storage/innobase/include/os0file.h
++++ b/storage/innobase/include/os0file.h
@@ -101,7 +101,7 @@
if this fails for a log block, then it is equivalent to a media failure in the
log. */
#ifdef UNIV_PFS_IO
/* Keys to register InnoDB I/O with performance schema */
extern mysql_pfs_key_t innodb_file_data_key;
-diff -ruN a/storage/innobase/include/page0types.h b/storage/innobase/include/page0types.h
---- a/storage/innobase/include/page0types.h 2010-11-03 07:01:13.000000000 +0900
-+++ b/storage/innobase/include/page0types.h 2010-12-04 15:55:58.261483930 +0900
+--- a/storage/innobase/include/page0types.h
++++ b/storage/innobase/include/page0types.h
@@ -56,8 +56,9 @@
/** Number of supported compressed page sizes */
/**********************************************************************//**
Write the "deleted" flag of a record on a compressed page. The flag must
-diff -ruN a/storage/innobase/include/trx0sys.h b/storage/innobase/include/trx0sys.h
---- a/storage/innobase/include/trx0sys.h 2010-12-04 15:37:50.593480594 +0900
-+++ b/storage/innobase/include/trx0sys.h 2010-12-04 15:55:58.262549554 +0900
-@@ -521,9 +521,9 @@
+--- a/storage/innobase/include/trx0sys.h
++++ b/storage/innobase/include/trx0sys.h
+@@ -526,9 +526,9 @@
/** Contents of TRX_SYS_MYSQL_LOG_MAGIC_N_FLD */
#define TRX_SYS_MYSQL_LOG_MAGIC_N 873422344
/** The offset of the MySQL replication info in the trx system header;
this contains the same fields as TRX_SYS_MYSQL_LOG_INFO below */
#define TRX_SYS_MYSQL_MASTER_LOG_INFO (UNIV_PAGE_SIZE - 2000)
-diff -ruN a/storage/innobase/include/univ.i b/storage/innobase/include/univ.i
---- a/storage/innobase/include/univ.i 2010-11-03 07:01:13.000000000 +0900
-+++ b/storage/innobase/include/univ.i 2010-12-04 15:55:58.263549721 +0900
-@@ -292,9 +292,13 @@
+--- a/storage/innobase/include/univ.i
++++ b/storage/innobase/include/univ.i
+@@ -313,9 +313,13 @@
*/
/* The 2-logarithm of UNIV_PAGE_SIZE: */
/* Maximum number of parallel threads in a parallelized operation */
#define UNIV_MAX_PARALLELISM 32
-@@ -401,7 +405,7 @@
+@@ -434,7 +438,7 @@
stored part of the field in the tablespace. The length field then
contains the sum of the following flag and the locally stored len. */
/* Some macros to improve branch prediction and reduce cache misses */
#if defined(__GNUC__) && (__GNUC__ > 2) && ! defined(__INTEL_COMPILER)
-@@ -504,4 +508,6 @@
+@@ -537,4 +541,6 @@
UNIV_MEM_ALLOC(addr, size); \
} while (0)
+extern ulint srv_page_size_shift;
+extern ulint srv_page_size;
#endif
-diff -ruN a/storage/innobase/log/log0log.c b/storage/innobase/log/log0log.c
---- a/storage/innobase/log/log0log.c 2010-12-03 15:18:48.899986203 +0900
-+++ b/storage/innobase/log/log0log.c 2010-12-04 15:55:58.266551567 +0900
-@@ -603,7 +603,9 @@
+--- a/storage/innobase/log/log0log.c
++++ b/storage/innobase/log/log0log.c
+@@ -604,7 +604,9 @@
offset = (gr_lsn_size_offset + difference) % group_size;
/* fprintf(stderr,
"Offset is %lu gr_lsn_offset is %lu difference is %lu\n",
-@@ -1200,6 +1202,9 @@
+@@ -1201,6 +1203,9 @@
/* Wipe over possible label of ibbackup --restore */
memcpy(buf + LOG_FILE_WAS_CREATED_BY_HOT_BACKUP, " ", 4);
dest_offset = nth_file * group->file_size;
#ifdef UNIV_DEBUG
-@@ -1793,9 +1798,7 @@
+@@ -1797,9 +1802,7 @@
ulint i;
ut_ad(mutex_own(&(log_sys->mutex)));
buf = group->checkpoint_buf;
-@@ -1809,6 +1812,7 @@
+@@ -1813,6 +1816,7 @@
mach_write_to_4(buf + LOG_CHECKPOINT_LOG_BUF_SIZE, log_sys->buf_size);
#ifdef UNIV_LOG_ARCHIVE
if (log_sys->archiving_state == LOG_ARCH_OFF) {
archived_lsn = IB_ULONGLONG_MAX;
} else {
-@@ -1822,7 +1826,9 @@
+@@ -1826,7 +1830,9 @@
mach_write_to_8(buf + LOG_CHECKPOINT_ARCHIVED_LSN, archived_lsn);
#else /* UNIV_LOG_ARCHIVE */
#endif /* UNIV_LOG_ARCHIVE */
for (i = 0; i < LOG_MAX_N_GROUPS; i++) {
-diff -ruN a/storage/innobase/log/log0recv.c b/storage/innobase/log/log0recv.c
---- a/storage/innobase/log/log0recv.c 2010-12-03 17:32:15.638986405 +0900
-+++ b/storage/innobase/log/log0recv.c 2010-12-04 15:55:58.269550689 +0900
+--- a/storage/innobase/log/log0recv.c
++++ b/storage/innobase/log/log0recv.c
@@ -712,8 +712,22 @@
group->lsn = mach_read_from_8(
ib_uint64_t checkpoint_lsn;
ib_uint64_t checkpoint_no;
ib_uint64_t old_scanned_lsn;
-@@ -3056,6 +3071,20 @@
+@@ -3056,6 +3071,21 @@
log_hdr_buf, max_cp_group);
}
+ if (log_hdr_log_block_size != srv_log_block_size) {
+ fprintf(stderr,
+ "InnoDB: Error: The block size of ib_logfile (%lu) "
-+ "is not equal to innodb_log_block_size.\n",
++ "is not equal to innodb_log_block_size.\n"
++ "InnoDB: Error: Suggestion - Recreate log files.\n",
+ log_hdr_log_block_size);
+ return(DB_ERROR);
+ }
#ifdef UNIV_LOG_ARCHIVE
group = UT_LIST_GET_FIRST(log_sys->log_groups);
-diff -ruN a/storage/innobase/page/page0zip.c b/storage/innobase/page/page0zip.c
---- a/storage/innobase/page/page0zip.c 2010-12-04 15:52:23.484482786 +0900
-+++ b/storage/innobase/page/page0zip.c 2010-12-04 15:55:58.274551431 +0900
+--- a/storage/innobase/page/page0zip.c
++++ b/storage/innobase/page/page0zip.c
@@ -49,7 +49,7 @@
#ifndef UNIV_HOTBACKUP
#endif /* !UNIV_HOTBACKUP */
/* Please refer to ../include/page0zip.ic for a description of the
-diff -ruN a/storage/innobase/row/row0merge.c b/storage/innobase/row/row0merge.c
---- a/storage/innobase/row/row0merge.c 2010-12-04 15:52:23.490513562 +0900
-+++ b/storage/innobase/row/row0merge.c 2010-12-04 15:55:58.277550562 +0900
+--- a/storage/innobase/row/row0merge.c
++++ b/storage/innobase/row/row0merge.c
@@ -97,7 +97,7 @@
row_merge_block_t. Thus, it must be able to hold one merge record,
whose maximum size is the same as the minimum size of
/** @brief Merge record in row_merge_block_t.
-diff -ruN a/storage/innobase/srv/srv0srv.c b/storage/innobase/srv/srv0srv.c
---- a/storage/innobase/srv/srv0srv.c 2010-12-04 15:55:21.384486344 +0900
-+++ b/storage/innobase/srv/srv0srv.c 2010-12-04 15:55:58.282550845 +0900
-@@ -239,6 +239,13 @@
- UNIV_INTERN ulint srv_n_read_io_threads = ULINT_MAX;
- UNIV_INTERN ulint srv_n_write_io_threads = ULINT_MAX;
+--- a/storage/innobase/srv/srv0srv.c
++++ b/storage/innobase/srv/srv0srv.c
+@@ -236,6 +236,14 @@
+ /* Switch to enable random read ahead. */
+ UNIV_INTERN my_bool srv_random_read_ahead = FALSE;
++
+/* The universal page size of the database */
+UNIV_INTERN ulint srv_page_size_shift = 0;
+UNIV_INTERN ulint srv_page_size = 0;
/* User settable value of the number of pages that must be present
in the buffer cache and accessed sequentially for InnoDB to trigger a
readahead request. */
-diff -ruN a/storage/innobase/srv/srv0start.c b/storage/innobase/srv/srv0start.c
---- a/storage/innobase/srv/srv0start.c 2010-12-04 15:52:23.502513556 +0900
-+++ b/storage/innobase/srv/srv0start.c 2010-12-04 15:55:58.285550583 +0900
-@@ -1521,10 +1521,12 @@
+--- a/storage/innobase/srv/srv0start.c
++++ b/storage/innobase/srv/srv0start.c
+@@ -1582,11 +1582,13 @@
}
#endif /* UNIV_LOG_ARCHIVE */
+ if (sizeof(ulint) == 4
+ && srv_n_log_files * srv_log_file_size
+ >= ((ulint)1 << (32 - UNIV_PAGE_SIZE_SHIFT))) {
+ ut_print_timestamp(stderr);
fprintf(stderr,
- "InnoDB: Error: combined size of log files"
+ " InnoDB: Error: combined size of log files"
- " must be < 4 GB\n");
+ " must be < 4 GB on 32-bit systems\n");
return(DB_ERROR);
}
-@@ -1533,7 +1535,7 @@
+@@ -1595,7 +1597,7 @@
for (i = 0; i < srv_n_data_files; i++) {
#ifndef __WIN__
- if (sizeof(off_t) < 5 && srv_data_file_sizes[i] >= 262144) {
+ if (sizeof(off_t) < 5 && srv_data_file_sizes[i] >= ((ulint)1 << (32 - UNIV_PAGE_SIZE_SHIFT))) {
+ ut_print_timestamp(stderr);
fprintf(stderr,
- "InnoDB: Error: file size must be < 4 GB"
- " with this MySQL binary\n"
+ " InnoDB: Error: file size must be < 4 GB"