Andy Melnikov (nponeccop) wrote,
Andy Melnikov
nponeccop

Победили долго мучивший баг

У нас в системе были какие-то подземные стуки, которые мы лечили всякими подпорками и заплатками на протяжении полугода. Сегодня выяснилось, что был баг в функции поэлементной записи (большого) массива в файл, приводивший к тому, что процесс завершался до записи последних нескольких элементов, т.к. мы не ждали события finish.

После исправления оказалось, что даже сама функция записи содержала заплатки для обхода этого бага.
exports.write = function (fh, buf, serializeElement)
{
        function writeBunch()
        {
                while (buf.length > 0)
                {
                        if (!fh.write(serializeElement(buf.shift())))
                        {
                                return
                        }
                }
                fh.end()
        }    

        var q = Q.defer()

        fh
        .on('drain', writeBunch)
        .once('open', writeBunch)
        .once('finish', function ()
        {
                fh.removeListener('drain', writeBunch)
                q.resolve()
        })

        return q.promise
}
Вроде правильный вариант выглядит просто, а столько багов было разных в этом месте, пиздец. Теперь будем вырезать воркараунды, разбросанные по системе.
Tags: все пидарасы а я
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 2 comments