📰 Topics

なんとなく使っていたSQLiteのロック周りについて理解を深めました。
Atlassian Cloud版とSlack連携で強化された機能も試してみました。

Table of Contents

書いたこと

なし。

学んだこと

【SQLite】ロックについて

仕事でSQLiteを使ったプロダクトがたまにSQLITE_BUSYエラーを吐いていたので調べてみました。
以下のサイトが非常に分かりやすかったです😄 (6年前なので古くなっている情報はあるかもしれません)

特に重要だと感じたポイントをまとめてみます。

操作による影響と条件

操作 sqlite3ファイル sqlite3-journalファイル 開始に必要な条件
読みこみ READ コミット中ではない
書き込み WRITE 書き込み中/コミット中ではない
コミット WRITE READ/DELETE 読みこみ中ではない

開始条件を満たさない場合は待機が必要で、その時間が一定時間を越えるとSQLITE_BUSYエラーになります。

暗黙的なトランザクション開始とコミットのタイミング

操作 オートコミット有効 オートコミット無効
トランザクション開始 書き込み処理の直前 書き込み処理の直前
コミット 書き込み処理の直後 I/U/D/R/S 以外のSQL実行直前

明示的にBEGIN/COMMITした場合はそちらが優先されます。

ロックのタイミング

トランザクション分離レベルがデフォルトだとDEFERREDになるようです。
トランザクション開始後にはじめて更新SQL文が発行されたタイミングでロックがかかる(他の書き込み処理を待機させる)。

今回のケースでは..

エラーとなっていたのは書き込み処理のSQLでした。

書き込み処理に必要な開始条件は『書き込み中/コミット中ではない』ことです。
つまり、別のSQLによる同DB(ファイル)への更新処理に時間がかかっている..ということです。

ところが、同じ時間帯に書き込み処理はありませんでした。
このことから、問題は『書き込み処理のロック』ではなく『コミットのロック』.. すなわち『時間のかかる読みこみ処理』ではないかと推測しています。

読んだこと/聴いたこと

【イベント参加レポート】Builders Box ON AIR #1 レガシーコードからの脱却

豪華なメンバで開催された初めてのイベントについてまとめられたレポート。
とても現実的で興味深い話が紹介されています。

TDDで得られるのは、20分ごとにフィードバックをくれるエンジニアがそばにいる体験

これとても分かります。
テストは動作確認以上に、最適な設計へ導いてくれるレビュアーだと常々思っています。

テストが書きにくい場合、大抵インタフェースや設計に問題があります。
インタフェースはツールやライブラリの使いやすさ、設計は保守性に影響します。

良い組織を作るために w/ yunon_phys

組織作りについて、とても現実的な為になる話がされています。

試したこと

【Atlassian】Jira/ConfluenceとSlackの連携

Jira CloudとConfluence Cloudについて、Slackとの連携を試してみました。

気に入った機能を簡潔にピックアップします。

JiraやConfluenceで特定のイベントが発生したときSlackへ通知する

最も重要な機能はやはりこれですね!
JiraやConfluenceのPluginを使わなくても、各自でSlack通知設定できます👍

SlackにJiraの課題番号を含めるとプレビューが表示される

JUMEAUX-15の不具合を確認してもらえますか?のようにSlackメッセージが課題番号を含むと、そのpreviewがSlack投稿の下に表示されます。
しかもそこから直接課題を操作できます。

  • ウォッチ
  • 担当割り当て
  • トランジション
  • コメント

もちろんリンク(URL)を貼り付けてもプレビューは表示されます。

SlackにConfluenceのリンクを含めるとプレビューが表示される

URLのコンテンツを展開してプレビュー表示するのはSlackの標準機能ですね。
それがConfluenceにも適応されます。

タイトルやスペース、最終更新者/最終更新日を別途記載する必要がなくてGOODです。
残念ながら、こちらはSlackから直接操作できないようです。

Confluenceのコメントに返信する

ConfluenceでコメントがつけられたときSlack通知するようにしている場合、通知の投稿から直接コメントに返信することができます。
Confluenceを開いてコメントを書く手間が省けます。

Jiraの課題を作成する機能

/jira create タイトルでSlackからJiraの課題を作成できます。

ただし、その後にSlack上でプロジェクトや課題タイプなどを指定しなければいけません。
指定できない項目がほとんどなため、Jira本体から作成した方が早いケースも多いでしょう。

以下のような利用シーンが考えられます。

  • スマートフォンなどSlackで簡潔させた方が早い場合
  • 細かい情報入力が不要な場合
  • Slackで議論の流れを記録したい場合

このあたりはChatOpsの落とし所をどこに持ってくるか..という深い話かなと。

あるChannelから一度目の作成はプロジェクトや課題タイプを指定する必要があるため少し面倒ですが、2回目以降はデフォルト値が設定されるのでスムーズに使えそうですね。

調べたこと

【WSL】wslコマンドやUbuntu立ち上げでエラーになる

こんなエラーです。

Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x800701bc
Error: 0x800701bc WSL 2 ???????????? ??????????????????????? https://aka.ms/wsl2kernel ?????????
Press any key to continue...

WSL2のLinuxカーネルを更新したらなおりました。

整備したこと

【IDEA】IdeaVimのvim-highlighedyankプラグインエミュレーション

8月末のリリースで追加されたエミュレーション機能です。
yankした範囲をvisual feedbackしてくれます。

.ideavimrcには以下の設定をします。

set highlightedyank

Visualモードを使わなくても分かりやすいです😄

今週のリリース

Jumeaux v2.5.0

POSTリクエストでrawを指定できるようになった

content-typeを指定せずにPOSTするデータを流し込めるようになりました。
以前はapplication/jsonx-www-form-urlencodedしか指定できなかったです。

その他

土日は創の軌跡に時間を奪われてしまっているため、インプット/アウトプットが減りますね..。
まあこれは物事の優先順位です😅