Hello,
just for clarity, "table is full" was the edge case which consisted of very narrow index, slightly too low MAX_ROWS specification and lots of rows. In 4.1 and earlier versions MySQL was using 4-byte data pointers by default, and to bypass that one has to specify maximum rows and average row size. The specifications we had were good for data area, but bad for index area, which was a function of max_rows and index width.
As index was very very narrow, a 2-byte internal index area pointer was picked, which allowed just 64k 1024-byte blocks (thats right, total 64M for indexing per table), which restricted us to ~8 million rows per table. Of course, that was way above the one million we specified :)
This is quite unpopular situation (I've never seen anyone hit that before, except on our sites :) - and if we had any other additional index on that table or had wider field or more fields in it, the index pointer would be 4 or 6 bytes, thus allowing bazillion rows.
Now, the bad part was that we saw this before, and we knew what causes this, and still didn't change definition (or simply remove it, we run 5.0 for ES, and it doesn't need this specification, this is legacy thing).
Still, no need to believe that we ran out of diskspace.
BR,