Назад к блогу

Волна откатов в PostgreSQL 19: как LLM-ревью и «Vulnpocalypse» меняют разработку СУБД

Волна откатов в PostgreSQL 19: как LLM-ревью и «Vulnpocalypse» меняют разработку СУБД

В цикле PostgreSQL 19 из-за архитектурных дефектов и волны проблем безопасности пришлось откатить порядка восьми–десяти крупных возможностей, причём хвост edge-case-ошибок стал выявляться заметно раньше и плотнее, чем в прошлых релизах. Разбор показывает, как устройство CommitFest и LLM-ассистированное ревью меняют соотношение между сложностью СУБД и скоростью её разработки — и почему это не повод считать релиз провальным.

В цикле PostgreSQL 19 из релиза выпало сразу несколько крупных возможностей — по разным оценкам, от восьми до десяти. Разбираем, что именно откатили и почему, как устроен процесс CommitFest, в котором такие решения принимаются, и как LLM-ассистированное ревью меняет баланс между сложностью системы и скоростью разработки.

Что именно откатили и почему

Конкретные откаченные возможности не называются — известно лишь, что было откачено «about 8 to 10 significant features, depending on how you count». Причины делятся на два слоя.

Первый — архитектурный. У части откаченных возможностей были значительные архитектурные дефекты, которые было бы трудно быстро исправить в бете. Сложность системы делает некоторые виды возможностей чрезвычайно трудными для корректной реализации, и в коде не хватает «строительных лесов» для их поддержки.

Второй — длинный хвост относительно безобидных проблем с edge case. Именно такие проблемы стало возможно находить гораздо быстрее благодаря LLM-ассистированному ревью кода.

Отдельный фактор — из-за волны проблем безопасности многие старшие разработчики оказались заняты с апреля (начало feature freeze для PostgreSQL 19) по август (последний на тот момент релиз безопасности) исправлением security issues. Это сократило обычное дополнительное ревью и тестирование в бета-периоде.

Автор считает, что PostgreSQL 19 всё ещё будет отличным релизом и будет очень надёжным после всей дополнительной проверки.

Почему сложность системы — это штраф на разработку

Автор описывает механику так: в PostgreSQL «всё работает со всем». Это часть привлекательности — можно сконструировать почти любую комбинацию контекстов и ожидать, что она заработает. Но это же накладывает значительный штраф на разработку возможностей, о котором все должны знать.

Абстрактный пример — некоторая возможность на уровне SQL-языка запросов. Вопрос не в том, работает ли она сама по себе, а в том, работает ли она во всех комбинациях: с доменами; с доменами над составным типом; где одно из полей тоже домен; где у домена есть ограничение not null; где один из столбцов был удалён и добавлен заново; где это часть отсоединённой и присоединённой заново секционированной таблицы с другим порядком столбцов; где это часть представления, вызываемого из security-definer функции из триггера.

Никто не может вручную протестировать или даже перечислить эти тестовые случаи. Но LLM-ассистированный фаззинг находит проблемы в таких комбинациях очень быстро — и именно поэтому хвост edge cases стал обнаруживаться раньше и плотнее, чем в прошлых циклах.

Как устроен CommitFest

CommitFest (CF) — это периодический перерыв в разработке PostgreSQL, посвящённый ревью и коммиту патчей, а не новой разработке. CF проводятся, чтобы вся работа для релиза получала относительно быструю обратную связь и не накапливалась к концу цикла.

В период CF контрибьюторов просят ревьюить и тестировать патчи, поданные другими. CommitFest Manager управляет списком. Патчи регистрируются в приложении CommitFest, которое разработчики используют для отслеживания статуса патча.

В цикле крупного релиза обычно пять CommitFest'ов: июль, сентябрь, ноябрь, январь и март. Мартовский — финальный; после него наступает feature freeze и начинается бета-период.

Участвовать может любой: подать патч, записаться на ревью или стать CommitFest Manager (хотя менеджеры обычно имеют некоторый опыт в сообществе). Патч в итоге либо коммитится, либо возвращается автору с обратной связью, либо отклоняется, если сообщество решит, что изменения бесполезны.

Проект PostgreSQL также участвует в программе Google Summer of Code; для интересующихся работой над связанным с PostgreSQL проектом есть страница Summer of Code, где можно получить информацию о проектах и участии.

Что из этого следует на практике

Откат восьми–десяти значительных возможностей — не признак кризиса процесса, а его работа. Механика здесь такая: длинный хвост edge cases стал находиться быстрее благодаря LLM-ассистированному ревью, а часть дефектов оказалась архитектурной и не поддавалась быстрому исправлению в бете. Параллельно Vulnpocalypse оттянул старших разработчиков на security-исправления, сократив дополнительное ревью и тестирование в бета-периоде.

Практический вывод для тех, кто планирует миграцию: релиз, из которого выпало много возможностей, но который прошёл усиленную проверку, стоит оценивать по тому, что в нём осталось. REPACK CONCURRENTLY, логическая репликация последовательностей и pg_plan_advice сохраняются — по словам автора, именно они делают релиз привлекательным.

Для тех, кто сам разрабатывает возможности под PostgreSQL: комбинаторный взрыв контекстов (домены, секционирование, представления, security-definer функции, триггеры) — это не крайние случаи, а нормальная поверхность тестирования. Ручного перебора здесь не хватит, и LLM-ассистированный фаззинг становится частью процесса, а не надстройкой.

Где смотреть в коде

Источники

Похожее