Although record_block has support for setting sizes (as well as a row size hint) the recordset class doesn't make use of this. In practice this means it will fail if a single row is associated with a D message of more than 4MB in size.
The APIs around this probably also need a bit of looking at. It would be nice to be able to recycle the record_block instances as well so we don't need to allocate new ones all the time.