BUG#15787 - MySQL crashes when archive table exceeds 2GB
Max compressed file size was calculated incorretly causing server crash on INSERT. With this patch we use proper max file size provided by zlib. Affects 5.0 only.
This commit is contained in:
parent
491e471fb3
commit
717c8fe98e
19
mysql-test/r/archive-big.result
Normal file
19
mysql-test/r/archive-big.result
Normal file
@ -0,0 +1,19 @@
|
||||
CREATE TABLE t1(a BLOB) ENGINE=ARCHIVE;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
25
mysql-test/t/archive-big.test
Normal file
25
mysql-test/t/archive-big.test
Normal file
File diff suppressed because one or more lines are too long
@ -205,7 +205,7 @@ bool archive_db_init()
|
||||
else
|
||||
{
|
||||
zoffset_size= 2 << ((zlibCompileFlags() >> 6) & 3);
|
||||
switch (sizeof(z_off_t)) {
|
||||
switch (zoffset_size) {
|
||||
case 2:
|
||||
max_zfile_size= INT_MAX16;
|
||||
break;
|
||||
@ -676,6 +676,7 @@ int ha_archive::real_write_row(byte *buf, gzFile writer)
|
||||
total_row_length+= ((Field_blob*) table->field[*ptr])->get_length();
|
||||
if (share->approx_file_size > max_zfile_size - total_row_length)
|
||||
{
|
||||
gzflush(writer, Z_SYNC_FLUSH);
|
||||
info(HA_STATUS_TIME);
|
||||
share->approx_file_size= (ulong) data_file_length;
|
||||
if (share->approx_file_size > max_zfile_size - total_row_length)
|
||||
|
Loading…
x
Reference in New Issue
Block a user