Anzeige
Anzeige

Más contenido relacionado

Similar a 20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разработчика.pdf(20)

Último(20)

Anzeige

20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разработчика.pdf

  1. www.postgrespro.ru СООБЩЕСТВО POSTGRESQL И ИНСТРУМЕНТЫ РАЗРАБОТЧИКА Hacking PostgreSQL 03.03.2016
  2. 2 Содержание 1.Как устроено международное сообщество PostgreSQL 2.Как написать патч (от Proposal до Commit'а) 3.Инструменты разработчика 4.Как сделать ревью
  3. 3 Сообщество PostgreSQL • The PostgreSQL Global Development Group (PGDG) – Основная команда – core team – Коммитеры – committers – (Основные) разработчики – (Major) contributors • Компании-спонсоры (Postgres Professional, EnterpriseDB, 2ndQuadrant, Cybertec, CitusDB...)
  4. 4 Core team ● Josh Berkus, USA ● Peter Eisentraut, USA ● Magnus Hagander, Sweden ● Tom Lane, USA ● Bruce Momjian, USA ● Dave Page, United Kingdom
  5. 5 Open source • Распространяется свободно • Лицензия PostgreSQL License – похожа на BSD • Исходный код PostgreSQL доступен на Github • Документация в открытом доступе на официальном сайте – Содержит разделы и для DBA, и для разработчиков
  6. 6 Конференции и встречи • PGCon в Оттаве (в середине июня) • PGConf.eu (в конце октября) • PGConf.ru (в начале февраля) • Множество локальных PGConf и PGDay (в течение года) • #PostgreSQLRussia Meetup (каждый месяц) • Семинары Postgres Professional
  7. 7 Mailing lists (листы рассылки) • pgsql-hackers – основной лист для общения разработчиков • pgsql-bugs • pgsql-general • pgsql-perfomance • pgsql-novice • И так далее...
  8. 8 Как отправить себе письмо? (1) 1. Перейти по ссылке 2. Выбрать в списке Task пункт Browse The Message Archives, тыкнуть Go 3. Ввести имя рассылки (pgsql-hackers) в поле Mailing List, тыкнуть Choose List 4. Ввести собственный почтовый адрес, тыкнуть Choose Address 5. Напомнить себе пароль 1. Открыть ссылку из письма 2. Подтвердить команду отправки письма с паролем 3. Найти пароль
  9. 9 Как отправить себе письмо? (2) 6. Залогиниться, найти в архиве нужное письмо, используя ссылки в полях Archive, Thread и т. д.:
  10. 10 Как отправить себе письмо? (3) 7. Нажать Mail this message to внизу страницы с открытым письмом:
  11. 11 Правила хорошего тона в листах рассылки • Отдельное письмо для новой темы • Используйте теги и пометки – PROPOSAL, WIP (Work In Progress), POC (Proof Of Concept), PATCH • Отвечайте в рассылку или “Ответить всем” • Цитируйте
  12. 12 Правила хорошего тона в листах рассылки • Используйте подпись, если работаете в компании Hi, hackers! Bla­bla­bla. ­­ Anastasia Lubennikova Postgres Professional: http://www.postgrespro.com The Russian Postgres Company
  13. 13 Правила хорошего тона в листах рассылки • Пишите ответ в конце письма A: Because it reverses the logical flow of conversation. Q: Why is top posting frowned upon? A: Top­posting. Q: What is the most annoying thing on usenet and in email?
  14. 14 Цикл разработки • Создание ветки для новой версии • Commitfests (с июля по март) • Feature Freeze (середина апреля) • Alpha-версия • Тестирование и доработка • Beta-версия (середина июня) • Выпуск новой версии PostgreSQL (середина октября)
  15. 15 Commitfests • Разработчик выкладывает патчи • Получает обратную связь от Reviewers • Автор дорабатывает патч • Reviewer отмечает патч как готовый для коммита • Коммитер добавляет патч в репозиторий
  16. 16 Где найти материалы? • Документация • Feature Matrix • Архивы листов рассылок • Wiki PostgreSQL • Блоги о PostgreSQL • Книги • Видео докладов с конференций • README и комментарии к коду
  17. 17 Патч
  18. 18 Как написать патч • Идея • Proposal (предложение) • Обсуждение • Разработка • Ревью • Принятый патч
  19. 19 Идея • Есть ли готовые решения? • Это задача из TODO? • Предыдущие обсуждения в hackers? • Аналоги в других системах? • Документация и README • Исходный код
  20. 20 Proposal • Идея, use case • Измеримые результаты • Необходимые изменения – например, новый синтаксис • Ссылки на: – прошлые обсуждения в hackers – академические статьи • Вопросы
  21. 21 Обсуждение • Кто-то уже работает над этим • Подводные камни • Вопросы реализации • Предложения • Это слишком сложно внедрить • Это никому не нужно =( Защищайте свою идею!
  22. 22 Обсуждение
  23. 23 Разработка • Код • Отладка • Тесты – regression tests – concurrency tests – обратная совместимость • Code style • Документация
  24. 24 С чего начать ● Поискать по названию функции ● Включить подробный лог: • set log_min_messages to debug5; ● Выполнить запрос ● Найти место в коде, где вызываются эти сообщения ● Исследовать код вокруг
  25. 25 Код
  26. 26 Отладочный вывод • elog elog(LOG,“Server msg”); elog(NOTICE,“Client expected msg”); elog(WARNING,“Client unexpected msg”); elog(ERROR, “Abort transaction”); ● PL/pgSQL: RAISE DEBUG ● print.c, outfuncs.c ● Assert Assert(some_ptr != NULL);
  27. 27 Отладка • Logfile • Gdb – select pg_backend_pid(); pg_backend_pid ­­­­­­­­­­­­­­­­ 5140 (1 row) – sudo gdb ­p 5140
  28. 28 Regression tests • Regression tests – make check – vi src/test/regress/regression.diffs • Добавить новый – src/test/regress/sql/new.sql – src/test/regress/expected/new.out – src/test/regress/serial_schedule – src/test/regress/parallel_schedule
  29. 29 pgbench • pgbench • pgbench ­i [option...] [dbname] • pgbench [option...] [dbname] • pgbench ­f filename [option...] [dbname]
  30. 30 Buildfarm • PostgreSQL Buildfarm • Только после коммита
  31. 31 Dataset • Sample Databases • Встроенные функции – random(); – generate_series(start, stop, step); CREATE TABLE test (id integer, b box); INSERT INTO test SELECT x, point(random(), random()) FROM generate_series(1,10) as x;
  32. 32 generate_series() ● Как генерировать распределения – Uniform distribution (continuous) – Normal distribution – Exponential distribution ● PostgreSQL generate_series() Tricks ● insert into tbl select p1, p2 from generate_series(1,2) as p1, lateral generate_series(1, 10) as p2;
  33. 33 Настройки • postgresql.conf – SHOW config_file; – SHOW ALL; – select * from pg_settings; • ? – timing – x
  34. 34 Настройки • Planner configuration – SET enable_indexscan=false; – SET enable_mergejoin=false; • EXPLAIN – explain (analyze, buffers) table t; – explain (analyze, verbose) table t; – explain (analyze, format xml) table t;
  35. 35 Code style • Выравнивание Tab'ами • Tab-size = 4 • Без концевых пробелов • {} на отдельной строке • Перенос длинных строк • Объявления переменных в начале блока
  36. 36 Code style • Комментарии /*­­­­­­­­­­­­­­­­­­­­­­­ * (___/) комментарий * (='.'=) со сложным * (")_(") форматированием *­­­­­­­­­­­­­­­­­­­­­­­ */ • src/tools/pgindent
  37. 37 Документация • Комментарии – объяснить “зачем”, а не “как” – упомянуть зависимости • README – обзор раздела кода • Документация – примеры – предупреждения
  38. 38 Патч • Новое письмо в hackers. – Ссылка на прошлое обсуждение – Описание ситуации – На какой коммит оно ложится – Тесты и результаты – Документация • Прикрепить патч на коммитфест
  39. 39
  40. 40 Git ● Working with Git git clone git://git.postgresql.org/git/postgresql.git cd postgresql git branch my_branch git checkout my_branch $EDITOR git add git commit ­a git diff ­­patience master my_branch | filterdiff ­­format=context > ../my­cool­ feature.patch
  41. 41 Git ● Ежедневная работа с Git ● Шпаргалка ● Поиск коммита по изменениям – git log ­S 'vacuum'
  42. 42 IDE / Текстовый редактор ● Vim. Filestyle ● Emacs. src/tools/editors ● Sublime Text. Trailing Spaces ● KDevelop ● Eclipse ● Doxygen* *только web-интерфейс к коду
  43. 43 ./configure ● Installation Procedure CFLAGS='­O0' CFLAGS='­O2' или ./configure ­­prefix=$WORKSPACE_PATH/postgres_bin/ ­­enable­debug ­­enable­cassert ­­enable­depend
  44. 44 Переменные окружения PATH=”$WORKSPACE_PATH/postgres_bin/bin” LD_LIBRARY_PATH= ”$WORKSPACE_PATH/postgres_bin/lib” PGDATA=”$WORKSPACE_PATH/postgres_data”
  45. 45 make ● make ­j4 ­s ● make install ● make clean ● make distclean
  46. 46 Установка ● Installation guide ./configure // не забывайте флаги make ­j4 make check // временная установка и тесты su #make install #adduser postgres #mkdir $WORKSPACE_PATH/postgres_data #chown postgres $WORKSPACE_PATH/postgres_data
  47. 47 Установка initdb ­D $WORKSPACE_PATH/postgres_data pg_ctl ­D $WORKSPACE_PATH/postgres_data ­l logfile start createdb test psql test
  48. 48 Серверные утилиты ● initdb – Создание нового кластера баз данных PostgreSQL ● pg_ctl – Инициализация, запуск, останов и управление сервером PostgreSQL ● pg_controldata – Вывод свойств, установленных командой initdb ● pg_upgrade – Обновление мажорной версии PostgreSQL
  49. 49 Клиентские утилиты ● psql – Интерактивный терминал ● pg_config – Информация по конфигурационным параметрам развёрнутого кластера – BINDIR = /home/anastasia/projects/postgresql_bin/bin – CONFIGURE = '­­enable­debug' 'CFLAGS=­O0' '­­enable­ depend' '­­enable­cassert' '­­ prefix=/home/anastasia/projects/postgresql_bin/' – CFLAGS = ­Wall ­Wmissing­prototypes ­Wpointer­arith ­Wdeclaration­after­statement ­Wendif­labels ­Wmissing­ format­attribute ­Wformat­security ­fno­strict­aliasing ­fwrapv ­fexcess­precision=standard ­g ­O0
  50. 50 Нам очень нужны ревьюеры!
  51. 51 Ревью патча (1) ● diff format context? ● Накладывается на мастер? ● Содержит комментарии, документацию, тесты? ● Соответствует принятому стилю?
  52. 52 Шпаргалка ревьюера (1) ● You've accidentally removed an empty line here. ● Space removed by mistake. ● A few of the lines here are over 80 chars. ● I think this should be explained with a better comment. ● The { brace here should be on the next line. ● Needs 1 more tab so that "15" lines up with the other numbers.
  53. 53 Шпаргалка ревьюера (2) ● Unfortunately there are several merge conflicts between your patch and this commit. Could you rebase the patch.
  54. 54 Ревью патча (2) ● Компилируется? – --enable-cassert – --enable-debug – CFLAGS=O2 ● Собирается? ● Проходит все регрессионные тесты? – make check
  55. 55 Ревью патча (3) ● Действительно нужен? ● Синтаксис соответствует SQL стандартам или аналогам в других БД? ● Работает как заявлено? ● Вы можете это сломать? ● Что-то непонятно из комментариев? ● Что-то стало медленнее?
  56. 56 Метод пристального взгляда ● Посмотреть на код, взаимодействующий с патчем
  57. 57 Примеры хороших ревью ● Ревью кода, стиля и документации ● Ревью функциональности ● Ревью реализации алгоритма ● Ревью производительности
  58. 58 Домашнее задание ● Прочитать Developer FAQ ● Подписаться на pgsql-hackers ● Выбрать патч с текущего коммитфеста и сделать его review
  59. 59 Что можно взять на ревью? ● ● Bugfix для tsvector: [patch] ● Bugfix для pgbench: [patch] ● Пара патчей к jsonb: [1], [2] ● Патч INCLUDING для B-tree: [patch]
  60. 60 Продолжение следует... ● В следующий раз: – Как написать расширение – Как добавить новый тип данных
  61. www.postgrespro.ru СПАСИБО ЗА ВНИМАНИЕ! ВОПРОСЫ? Hacking PostgreSQL 03.03.2016 hacking@postgrespro.ru
Anzeige