Bug #47573 | MySQL Cluster : Internal blob read buffer not always freed correctly | ||
---|---|---|---|
Submitted: | 23 Sep 2009 23:18 | Modified: | 25 Sep 2009 6:36 |
Reporter: | Frazer Clement | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Cluster: Cluster (NDB) storage engine | Severity: | S2 (Serious) |
Version: | mysql-5.1-telco-6.2 | OS: | Any |
Assigned to: | Frazer Clement | CPU Architecture: | Any |
[23 Sep 2009 23:18]
Frazer Clement
[24 Sep 2009 14:22]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/84514 3004 Frazer Clement 2009-09-24 Bug#47573 MySQL Cluster : Internal blob read buffer not always freed correctly. Fix buffer release code and rename some vars to aid understanding modified: sql/ha_ndbcluster.cc sql/ha_ndbcluster.h
[24 Sep 2009 15:19]
Frazer Clement
Pushed to 6.2.19, 6.3.27, 7.0.8, 7.1.0
[25 Sep 2009 6:36]
Jon Stephens
Documented bugfix in the NDB-6.2.19, 6.3.27, and 7.0.8 changelogs, as follows: NDBCLUSTER uses a dynamically-allocated buffer to store BLOB or TEXT column data that is read from rows in MySQL Cluster tables. When an instance of the NDBCLUSTER table handler was recycled (this can happen due to table definition cache pressure or to operations such as FLUSH TABLES or ALTER TABLE), if the last row read contained blobs of zero length, the buffer was not freed, even though the reference to it was lost. This resulted in a memory leak. For example, consider the table defined and populated as shown here: CREATE TABLE t (a INT PRIMARY KEY, b LONGTEXT) ENGINE=NDB; INSERT INTO t VALUES (1, REPEAT('F', 20000)); INSERT INTO t VALUES (2, ''); Now execute repeatedly a SELECT on this table, such that the zero-length BLOB row is last, followed by a FLUSH TABLES (which forces the handler object to be re-used), as shown here: SELECT a, length(b) FROM bl ORDER BY a; FLUSH TABLES; This resulted in a memory leak proportional to the size of the stored BLOB value each time these two statements were executed. Closed.
[30 Sep 2009 8:13]
Bugs System
Pushed into 5.1.37-ndb-6.2.19 (revid:frazer@mysql.com-20090929142503-sst6g3fs0vx9fgil) (version source revid:frazer@mysql.com-20090924142210-nbui9h1hmitwnwai) (merge vers: 5.1.37-ndb-6.2.19) (pib:11)
[30 Sep 2009 8:13]
Bugs System
Pushed into 5.1.37-ndb-6.3.28 (revid:jonas@mysql.com-20090930070741-13u316s7s2l7e1ej) (version source revid:frazer@mysql.com-20090924145421-nu2r7o4sx8imfgfc) (merge vers: 5.1.37-ndb-6.3.27) (pib:11)
[30 Sep 2009 8:14]
Bugs System
Pushed into 5.1.37-ndb-7.0.9 (revid:jonas@mysql.com-20090930075942-1q6asjcp0gaeynmj) (version source revid:frazer@mysql.com-20090924150728-6timxf5546dgg7hs) (merge vers: 5.1.37-ndb-7.0.8) (pib:11)
[30 Sep 2009 8:15]
Bugs System
Pushed into 5.1.35-ndb-7.1.0 (revid:jonas@mysql.com-20090930080049-1c8a8cio9qgvhq35) (version source revid:frazer@mysql.com-20090924150932-93344wrj807ngz09) (merge vers: 5.1.35-ndb-7.1.0) (pib:11)