Below is the list of changes that have just been committed into a local
6.0 repository of cpowers. When cpowers does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2007-11-15 16:42:01-06:00, chris@stripped +4 -0
Bug#32413, "Memory usage not constrained by falcon_record_memory_max, assertion failure"
- Added testcase to exercise falcon_record_memory_max and out-of-memory condition
- Added out-of-memory exception handling to Table::databaseFetch()
mysql-test/suite/falcon/r/falcon_bug_32413.result@stripped, 2007-11-15 16:41:59-06:00, chris@stripped +56 -0
New testcase for falcon_record_memory_max
mysql-test/suite/falcon/r/falcon_bug_32413.result@stripped, 2007-11-15 16:41:59-06:00, chris@stripped +0 -0
mysql-test/suite/falcon/t/falcon_bug_32413.test@stripped, 2007-11-15 16:41:59-06:00, chris@stripped +86 -0
New testcase for falcon_record_memory_max
mysql-test/suite/falcon/t/falcon_bug_32413.test@stripped, 2007-11-15 16:41:59-06:00, chris@stripped +0 -0
storage/falcon/MemMgr.cpp@stripped, 2007-11-15 16:41:59-06:00, chris@stripped +1 -2
Minor formatting
storage/falcon/Table.cpp@stripped, 2007-11-15 16:41:59-06:00, chris@stripped +7 -0
Handle out of memory exception in Table::databaseFetch()
diff -Nrup a/mysql-test/suite/falcon/r/falcon_bug_32413.result b/mysql-test/suite/falcon/r/falcon_bug_32413.result
--- /dev/null Wed Dec 31 16:00:00 196900
+++ b/mysql-test/suite/falcon/r/falcon_bug_32413.result 2007-11-15 16:41:59 -06:00
@@ -0,0 +1,56 @@
+*** Bug #32413 ***
+SET @@storage_engine = 'Falcon';
+DROP TABLE IF EXISTS t1;
+SET GLOBAL falcon_record_memory_max=32*1024*1024;
+CREATE TABLE t1 ( a INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT, c VARCHAR(200), d VARCHAR(1000), INDEX (b,c), INDEX (d) ) ENGINE=FALCON;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF'));
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+ERROR HY000: Got error 305 'record memory is exhausted' from Falcon
+SET GLOBAL falcon_record_memory_max=256*1024*1024;
+CREATE TABLE t2 ( a INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT, c VARCHAR(200), d VARCHAR(1000), INDEX (b,c), INDEX (d) ) ENGINE=FALCON;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF'));
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+SELECT count(*) from t1;
+count(*)
+262144
+SELECT count(*) from t2;
+count(*)
+524288
+DROP TABLE t1;
+DROP TABLE t2;
diff -Nrup a/mysql-test/suite/falcon/t/falcon_bug_32413.test b/mysql-test/suite/falcon/t/falcon_bug_32413.test
--- /dev/null Wed Dec 31 16:00:00 196900
+++ b/mysql-test/suite/falcon/t/falcon_bug_32413.test 2007-11-15 16:41:59 -06:00
@@ -0,0 +1,86 @@
+#
+# Bug #32413: Memory usage not constrained by falcon_record_memory_max, assertion failure
+#
+--echo *** Bug #32413 ***
+
+# ----------------------------------------------------- #
+# --- Initialisation --- #
+# ----------------------------------------------------- #
+let $engine = 'Falcon';
+eval SET @@storage_engine = $engine;
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+# ----------------------------------------------------- #
+# --- Test --- #
+# ----------------------------------------------------- #
+
+# Set a very low record cache size
+SET GLOBAL falcon_record_memory_max=32*1024*1024;
+
+CREATE TABLE t1 ( a INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT, c VARCHAR(200), d VARCHAR(1000), INDEX (b,c), INDEX (d) ) ENGINE=FALCON;# Force record cache out-of-memory condition
+
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF'));
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+--error 1296
+INSERT INTO t1 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t1;
+
+# Try again with sufficient record cache
+
+SET GLOBAL falcon_record_memory_max=256*1024*1024;
+
+CREATE TABLE t2 ( a INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT, c VARCHAR(200), d VARCHAR(1000), INDEX (b,c), INDEX (d) ) ENGINE=FALCON;# Force record cache out-of-memory condition
+
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF'));
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+INSERT INTO t2 SELECT NULL, 12345, SHA('12345'), CONCAT(SHA('12345'),SHA('ABCDEF')) FROM t2;
+
+# ----------------------------------------------------- #
+# --- Check --- #
+# ----------------------------------------------------- #
+
+SELECT count(*) from t1;
+SELECT count(*) from t2;
+
+# ----------------------------------------------------- #
+# --- Final cleanup --- #
+# ----------------------------------------------------- #
+DROP TABLE t1;
+DROP TABLE t2;
diff -Nrup a/storage/falcon/MemMgr.cpp b/storage/falcon/MemMgr.cpp
--- a/storage/falcon/MemMgr.cpp 2007-11-15 13:30:11 -06:00
+++ b/storage/falcon/MemMgr.cpp 2007-11-15 16:41:59 -06:00
@@ -236,8 +236,7 @@ void MemMgrSetMaxRecordMember (long long
memControl.addPool(&recordManager);
//memControl.addPool(&recordObjectManager);
}
-
- memControl.setMaxSize(size);
+ memControl.setMaxSize(size);
}
MemMgr* MemMgrGetFixedPool (int id)
diff -Nrup a/storage/falcon/Table.cpp b/storage/falcon/Table.cpp
--- a/storage/falcon/Table.cpp 2007-11-14 14:25:20 -06:00
+++ b/storage/falcon/Table.cpp 2007-11-15 16:41:59 -06:00
@@ -640,6 +640,13 @@ Record* Table::databaseFetch(int32 recor
recordNumber, (const char*) schemaName, (const char*) name,
exception.getText());
+ switch (exception.getSqlcode())
+ {
+ case OUT_OF_MEMORY_ERROR:
+ case OUT_OF_RECORD_MEMORY_ERROR:
+ throw;
+ }
+
return NULL;
}
| Thread |
|---|
| • bk commit into 6.0 tree (chris:1.2680) BUG#32413 | cpowers | 15 Nov |