Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
© 2021 NTT DATA Corporation
PostgreSQL初心者がパッチを提案してからコミットされるまで
2021年2月2日 第20回PostgreSQLアンカンファレンス@オンライン
株式会社NTTデータ 技術開発本部
加藤...
© 2021 NTT DATA Corporation 2
自己紹介
⚫ 名前
‒ 加藤 慎也 @ShinyaKato_
⚫ 所属
‒ 株式会社NTTデータ 技術開発本部
⚫ 経歴
‒ 入社1年目社員
‒ PostgreSQL歴2ヶ月
‒ 大学...
© 2021 NTT DATA Corporation 3
YouTubeチャンネル “NTT DATA Tech”
技術取り組み、活用情報を中心にお届けします
https://www.youtube.com/NTTDATATech
© 2021 NTT DATA Corporation 4
PostgreSQL初心者が
パッチを提案してからコミットされるまで
© 2021 NTT DATA Corporation 5
モチベーション
⚫ OSSコミッターが多数在籍する部署に配属
⚫ PostgreSQLのコア開発者になりたい!
⚫ まずは、簡単なパッチ開発に取り組もう!
⚫ カーソルに関するコマンド...
© 2021 NTT DATA Corporation 6
タブ補完とは?
⚫ Tabキー押すことで入力内容を補完する機能
⚫ 例えば、ALTER SYSTEMのタブ補完を確認
=# ALTER SYSTEM
RESET SET
=# ALTE...
© 2021 NTT DATA Corporation 7
タブ補完がどのような仕組みで動いているかを確認
⚫ タブ補完のソースコードを探す
⚫ git grep “tab” -- “src/” でtabを含むコードを探してみる
‒ datab...
© 2021 NTT DATA Corporation 8
タブ補完のソースコードを読み解く
前半部分にはマクロとして
様々なクエリが記述されている
後半部分にはタブ補完の条件
と補完内容が記述されている
© 2021 NTT DATA Corporation 9
CLOSEのタブ補完の挙動はどうなっているか?
⚫ CLOSEとは?
‒ CLOSEは、開いたカーソルに関連するリソースを解放します。カーソルが閉じられた後は、
そのカーソルに対する操...
© 2021 NTT DATA Corporation 10
実装を始める前に…
⚫ 定義済カーソル一覧を表示する方法を知りたい
‒ CLOSEのドキュメントより、
‒ pg_cursorsシステムビューを問い合わせることにより利用可能なすべて...
© 2021 NTT DATA Corporation 11
実装
1. CLOSEが入力されたときの挙動を記述
2. 定義済カーソル一覧を表示するクエリのマクロを記述
© 2021 NTT DATA Corporation 12
動作確認
⚫ PostgreSQLリビルドし、動作確認
=# BEGIN;
BEGIN
=*# DECLARE cur CURSOR FOR SELECT
* FROM pg_cla...
© 2021 NTT DATA Corporation 13
パッチの作成
⚫ パッチ作成
$ git diff > fix_tab_complete_close_fetch_move.patch
© 2021 NTT DATA Corporation 14
メーリングリストに投稿
⚫ パッチを添付してpgsql-hackers@postgresql.org宛に送信
© 2021 NTT DATA Corporation 15
1月のCommitfestsへの登録
⚫ 1月のCommitfestsのページでパッチを登録
‒ https://commitfest.postgresql.org/31/
© 2021 NTT DATA Corporation 16
レビュー結果
1. パッチを適用しようとしたら、whitespace warningsが出る
2. カーソル一覧を表示するクエリの修正
3. コメントの修正
4. DECLARE文の...
© 2021 NTT DATA Corporation 17
1.パッチを適用しようとしたら、whitespace warnings が出る
⚫ whitespace warnings
‒ 行末のスペースや、タブ文字が直後に続くスペースがあると...
© 2021 NTT DATA Corporation 18
2.カーソル一覧を表示するクエリの修正(1/2)
⚫ quote_ident() :必要な場合、適切な引用符を付けて返す関数
⚫ substring() :部分文字列を取り出す関数
...
© 2021 NTT DATA Corporation 19
2.カーソル一覧を表示するクエリの修正(2/2)
⚫ 引用符付きでカーソルを定義したときも適切にカーソル名が補完される
=*# DECLARE “CUR” CURSOR FOR
SE...
© 2021 NTT DATA Corporation 20
3.コメントの修正
⚫ 英語の文法の問題(A, B, and C)
⚫ 指摘通りに修正
/*
- * Complete FETCH with one of ABSOLUTE, BAC...
© 2021 NTT DATA Corporation 21
4.DECLARE文のタブ補完もこの機会にやっておくのはどうか?
⚫ DECLAREのドキュメントより
‒ DECLARE name [ BINARY ] [ INSENSITIVE...
© 2021 NTT DATA Corporation 22
コミット
© 2021 NTT DATA Corporation 23
コミット
© 2021 NTT DATA Corporation 24
(時間があれば)デモ
© 2021 NTT DATA Corporation 25
まとめ
⚫ PostgreSQLのコア開発者になる第一歩として
CLOSE、FETCH、MOVEのタブ補完機能を向上させるパッチを作成した
⚫ 無事コミットされた
⚫ 所感
‒ Po...
© 2021 NTT DATA Corporation
その他、記載されている会社名、商品名、又はサービス名は、
各社の登録商標又は商標です。
Prochain SlideShare
Chargement dans…5
×

PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)

PostgreSQL初心者がパッチを提案してからコミットされるまで
(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)

2021年2月2日

株式会社NTTデータ
技術開発本部 先進コンピューティング技術センタ
加藤 慎也

  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)

  1. 1. © 2021 NTT DATA Corporation PostgreSQL初心者がパッチを提案してからコミットされるまで 2021年2月2日 第20回PostgreSQLアンカンファレンス@オンライン 株式会社NTTデータ 技術開発本部 加藤 慎也
  2. 2. © 2021 NTT DATA Corporation 2 自己紹介 ⚫ 名前 ‒ 加藤 慎也 @ShinyaKato_ ⚫ 所属 ‒ 株式会社NTTデータ 技術開発本部 ⚫ 経歴 ‒ 入社1年目社員 ‒ PostgreSQL歴2ヶ月 ‒ 大学時代は、DB系の研究をしてたがRDBに関してはほぼ初心者 (SQLもロクに書いたことがない…)
  3. 3. © 2021 NTT DATA Corporation 3 YouTubeチャンネル “NTT DATA Tech” 技術取り組み、活用情報を中心にお届けします https://www.youtube.com/NTTDATATech
  4. 4. © 2021 NTT DATA Corporation 4 PostgreSQL初心者が パッチを提案してからコミットされるまで
  5. 5. © 2021 NTT DATA Corporation 5 モチベーション ⚫ OSSコミッターが多数在籍する部署に配属 ⚫ PostgreSQLのコア開発者になりたい! ⚫ まずは、簡単なパッチ開発に取り組もう! ⚫ カーソルに関するコマンドのタブ補完を改善するパッチの作成 ‒ CLOSE、FETCH、MOVEのタブ補完が期待通り動作しない ‒ 期待通り動作するようにパッチを作成する ‒ タブ補完として、定義済カーソルの名前一覧+ALLを表示する ‒ ※CLOSEを中心に紹介します
  6. 6. © 2021 NTT DATA Corporation 6 タブ補完とは? ⚫ Tabキー押すことで入力内容を補完する機能 ⚫ 例えば、ALTER SYSTEMのタブ補完を確認 =# ALTER SYSTEM RESET SET =# ALTER SYSTEM SET Display all 315 possibilities? (y or n) all log_parser_stats allow_system_table_mods log_planner_stats application_name log_replication_commands archive_cleanup_command log_rotation_age archive_command log_rotation_size archive_mode log_statement archive_timeout log_statement_sample_rate … タブキーを押すと、 入力内容が補完される
  7. 7. © 2021 NTT DATA Corporation 7 タブ補完がどのような仕組みで動いているかを確認 ⚫ タブ補完のソースコードを探す ⚫ git grep “tab” -- “src/” でtabを含むコードを探してみる ‒ databaseやtableばかりが大量に引っかかって諦める ⚫ 大人しくディレクトリをたどってみる ‒ backendではないからbinにいってみよう ‒ おっ、psqlというディレクトリがある ‒ tab-complete.cがある!多分これだ!
  8. 8. © 2021 NTT DATA Corporation 8 タブ補完のソースコードを読み解く 前半部分にはマクロとして 様々なクエリが記述されている 後半部分にはタブ補完の条件 と補完内容が記述されている
  9. 9. © 2021 NTT DATA Corporation 9 CLOSEのタブ補完の挙動はどうなっているか? ⚫ CLOSEとは? ‒ CLOSEは、開いたカーソルに関連するリソースを解放します。カーソルが閉じられた後は、 そのカーソルに対する操作はできません。カーソルは必要がなくなった時点で閉じるべき です。 ‒ https://www.postgresql.jp/document/12/html/sql-close.html ⚫ 動かしてみる =# BEGIN; BEGIN =*# DECLARE cur CURSOR FOR SELECT * FROM pg_class; DECLARE CURSOR =*# CL CLOSE CLUSTER =*# CLOSE タブを押しても 定義済みカーソルが表示されない
  10. 10. © 2021 NTT DATA Corporation 10 実装を始める前に… ⚫ 定義済カーソル一覧を表示する方法を知りたい ‒ CLOSEのドキュメントより、 ‒ pg_cursorsシステムビューを問い合わせることにより利用可能なすべてのカーソルを確認すること ができます。 =# BEGIN; BEGIN =*# DECLARE cur1 CURSOR FOR SELECT * FROM pg_class; DECLARE CURSOR =*# DECLARE cur2 CURSOR FOR SELECT * FROM pg_class; DECLARE CURSOR =*# SELECT name FROM pg_cursors; name ------ cur1 cur2 (2 rows)
  11. 11. © 2021 NTT DATA Corporation 11 実装 1. CLOSEが入力されたときの挙動を記述 2. 定義済カーソル一覧を表示するクエリのマクロを記述
  12. 12. © 2021 NTT DATA Corporation 12 動作確認 ⚫ PostgreSQLリビルドし、動作確認 =# BEGIN; BEGIN =*# DECLARE cur CURSOR FOR SELECT * FROM pg_class; DECLARE CURSOR =*# CLOSE 修正前 修正後 =# BEGIN; BEGIN =*# DECLARE cur CURSOR FOR SELECT * FROM pg_class; DECLARE CURSOR =*# CLOSE ALL cur ALLと 定義済カーソルが補完される 補完されない
  13. 13. © 2021 NTT DATA Corporation 13 パッチの作成 ⚫ パッチ作成 $ git diff > fix_tab_complete_close_fetch_move.patch
  14. 14. © 2021 NTT DATA Corporation 14 メーリングリストに投稿 ⚫ パッチを添付してpgsql-hackers@postgresql.org宛に送信
  15. 15. © 2021 NTT DATA Corporation 15 1月のCommitfestsへの登録 ⚫ 1月のCommitfestsのページでパッチを登録 ‒ https://commitfest.postgresql.org/31/
  16. 16. © 2021 NTT DATA Corporation 16 レビュー結果 1. パッチを適用しようとしたら、whitespace warningsが出る 2. カーソル一覧を表示するクエリの修正 3. コメントの修正 4. DECLARE文のタブ補完もこの機会にやっておくのはどうか?
  17. 17. © 2021 NTT DATA Corporation 17 1.パッチを適用しようとしたら、whitespace warnings が出る ⚫ whitespace warnings ‒ 行末のスペースや、タブ文字が直後に続くスペースがあると出る警告 ⚫ PostgreSQLのコーディング規約 ‒ タブを4カラムとするスペーシングを使用し、現在はタブを保存しています(つまりタブをス ペースに展開しません) ‒ https://www.postgresql.jp/document/12/html/source-format.html ⚫ pgindentを使用してwhitespaceを削除 ‒ コードを整形してくれるツール When I applied the patch, I got the following whitespace warnings: $ git apply ~/patches/fix_tab_complete_close_fetch_move.patch … warning: squelched 19 whitespace errors warning: 24 lines add whitespace errors. I recommend you checking whitespaces or running pgindent.
  18. 18. © 2021 NTT DATA Corporation 18 2.カーソル一覧を表示するクエリの修正(1/2) ⚫ quote_ident() :必要な場合、適切な引用符を付けて返す関数 ⚫ substring() :部分文字列を取り出す関数 ⚫ %d :これまでに入力された文字列の長さ ⚫ %s :これまでに入力された文字列 +#define Query_for_list_of_cursors ¥ +" SELECT name FROM pg_cursors"¥ This query should be the following? " SELECT pg_catalog.quote_ident(name) "¥ " FROM pg_catalog.pg_cursors "¥ " WHERE substring(pg_catalog.quote_ident(name),1,%d)='%s'"
  19. 19. © 2021 NTT DATA Corporation 19 2.カーソル一覧を表示するクエリの修正(2/2) ⚫ 引用符付きでカーソルを定義したときも適切にカーソル名が補完される =*# DECLARE “CUR” CURSOR FOR SELECT * FROM pg_class; DECLARE CURSOR =*# CLOSE ALL CUR =*# CLOSE CUR; 2021-01-29 14:35:44.803 JST [47872] ERROR: cursor "cur" does not exist 2021-01-29 14:35:44.803 JST [47872] STATEMENT: close CUR; ERROR: cursor "cur" does not exist 修正前 修正後 =*# DECLARE “CUR” CURSOR FOR SELECT * FROM pg_class; DECLARE CURSOR =*# CLOSE “CUR” ALL postgres=*# CLOSE "CUR"; CLOSE CURSOR 引用符付きで補完 引用符無しで補完
  20. 20. © 2021 NTT DATA Corporation 20 3.コメントの修正 ⚫ 英語の文法の問題(A, B, and C) ⚫ 指摘通りに修正 /* - * Complete FETCH with one of ABSOLUTE, BACKWARD, FORWARD, RELATIVE, ALL, - * NEXT, PRIOR, FIRST, LAST + * Complete FETCH with a list of cursors and one of ABSOLUTE, BACKWARD, FORWARD, RELATIVE, ALL, + * NEXT, PRIOR, FIRST, LAST, FROM, IN */ Maybe I think the commend should say: + * Complete FETCH with one of ABSOLUTE, BACKWARD, FORWARD, RELATIVE, ALL, + * NEXT, PRIOR, FIRST, LAST, FROM, IN, and a list of cursors
  21. 21. © 2021 NTT DATA Corporation 21 4.DECLARE文のタブ補完もこの機会にやっておくのはどうか? ⚫ DECLAREのドキュメントより ‒ DECLARE name [ BINARY ] [ INSENSITIVE ] [ [ NO ] SCROLL ] CURSOR [ { WITH | WITHOUT } HOLD ] FOR query ⚫ 複数のオプションを指定したときに、うまくタブ補完が動かない ‒ DECLARE name ‒ BINARY, INSENSITIVE, SCROLL, NO SCROLL, CURSORを補完 ‒ DECLARE name BINARY ‒ 何も補完されない ⚫ これを修正したパッチをレビュワーの澤田さんに作って頂きました
  22. 22. © 2021 NTT DATA Corporation 22 コミット
  23. 23. © 2021 NTT DATA Corporation 23 コミット
  24. 24. © 2021 NTT DATA Corporation 24 (時間があれば)デモ
  25. 25. © 2021 NTT DATA Corporation 25 まとめ ⚫ PostgreSQLのコア開発者になる第一歩として CLOSE、FETCH、MOVEのタブ補完機能を向上させるパッチを作成した ⚫ 無事コミットされた ⚫ 所感 ‒ PostgreSQLコミュニティの開発フローが最初はよくわからなかった ‒ 12月にパッチ投稿→誰もレビューしてくれない… ‒ 1月になってCommitfestsが始まると、すぐにレビューされた ‒ 軽微なパッチなのですぐにコミットされると思いきや、意外と時間がかかった ‒ 関連事項の調査など ‒ パッチ作成以外の仕事をしていると、いつの間にか議論が進んでいてコミットされていた ‒ whitespace warningsのような初歩的なミスを指摘されるのが申し訳なかった ‒ コミュニティには優しい方々が多い ‒ パッチ作成は大変だったが今後も取り組んでいきたい
  26. 26. © 2021 NTT DATA Corporation その他、記載されている会社名、商品名、又はサービス名は、 各社の登録商標又は商標です。

×