Bug #74387 TFBuffer::validate() const: Assertion `(p->m_bytes & 3) == 0\' failed
Submitted: 14 Oct 2014 21:18 Modified: 11 Nov 2014 13:33
Reporter: Mauritz Sundell Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Cluster: Cluster (NDB) storage engine Severity:S3 (Non-critical)
Version:7.3.7 OS:Any
Assigned to: CPU Architecture:Any

[14 Oct 2014 21:18] Mauritz Sundell
Description:
During testing of 7.3.7 release ndb.ndb_blob_big failed for ubuntu14.04-x86-32bit cluster-community deb on an assert (see below).

The assert is faulty since it implies that writes to tcp transporter socket always will be in units of 4 bytes which is not guaranteed (although very common).

mysqld-debug: /export/home/pb2/build/sb_0-13403650-1412862484.75/mysql-cluster-gpl-7.3.7/storage/ndb/src/ndbapi/trp_buffer.cpp:77: void TFBuffer::validate() const: Assertion `(p->m_bytes & 3) == 0' failed.
14:59:19 UTC - mysqld got signal 6 ;

How to repeat:
Run several parallel instances of ndb.ndb_blob_big, not easy to repeat.

To see that writev will not always send even 4 bytes, add an assert((nBytesSent % 4) == 0) after call to my_socket_writev in TCP_Transporter.cpp and run:
 ./mtr --mem --para=4 ndb_blob_big ndb_blob_big ndb_blob_big ndb_blob_big.

Suggested fix:
Remove assert.
[11 Nov 2014 13:33] Jon Stephens
Thank you for your bug report. This issue has been committed to our source repository of that product and will be incorporated into the next release.

Fixed in NDB 7.3.8. Affects debug builds only; nothing to document. Closed.

If necessary, you can access the source repository and build the latest available version, including the bug fix. More information about accessing the source trees is available at

    http://dev.mysql.com/doc/en/installing-source.html