Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 14627] ファイルの概要

このコミットは、Goプロジェクトのビルドダッシュボード(misc/dashboard)における変更です。具体的には、NetBSDプラットフォームでのビルド失敗が頻繁に発生し、その信頼性が低い(flakyである)ため、これらの失敗に関するメール通知を停止するように修正されています。これにより、開発者が信頼性の低い通知に煩わされることなく、より重要なビルド問題に集中できるようになります。

コミット

commit a257c753ac151d654d40258f11fdcda5dba7f779
Author: Brad Fitzpatrick <bradfitz@golang.org>
Date:   Wed Dec 12 11:33:03 2012 -0800

    misc/dashboard: don't email about netbsd failures
    
    Too flaky.
    
    R=iant, rsc
    CC=golang-dev
    https://golang.org/cl/6925056

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/a257c753ac151d654d40258f11fdcda5dba7f779

元コミット内容

misc/dashboard: don't email about netbsd failures

Too flaky.

R=iant, rsc
CC=golang-dev
https://golang.org/cl/6925056

変更の背景

Goプロジェクトは、様々なプラットフォームでのビルドの健全性を継続的に監視するために、ビルドダッシュボード(build.golang.org)を運用しています。このダッシュボードは、各コミットが様々な環境でビルドおよびテストに成功するかどうかを追跡し、失敗した場合には関係者に通知する機能を持っています。

しかし、特定の環境、特にNetBSDプラットフォームでは、ビルドやテストが不安定で、一貫性のない結果を出す「flaky(フレイキー)」な状態が頻繁に発生していました。これは、実際のコードのバグではなく、環境設定、リソースの競合、タイミングの問題など、様々な要因によって引き起こされる一時的な失敗を指します。

このようなflakyな失敗が頻繁に通知されると、開発者は本当に修正が必要な問題と、無視しても良い一時的な問題とを区別するのが難しくなります。結果として、通知の「ノイズ」が増え、重要なビルド失敗が見過ごされるリスクが高まります。このコミットは、この問題を解決し、開発者の生産性を向上させるために、NetBSDのflakyなビルド失敗に関するメール通知を停止することを目的としています。

前提知識の解説

  • Go ビルドダッシュボード (build.golang.org): Go言語の公式ビルドシステムであり、継続的インテグレーション (CI) の中心的な役割を担っています。世界中の様々なアーキテクチャ、オペレーティングシステム、Goのバージョンで、Goのソースコードがビルドされ、テストが実行されます。その結果はウェブインターフェースで公開され、開発者はGoの健全性をリアルタイムで確認できます。ビルドが失敗した場合、設定に応じてメール通知が送信されます。
  • Flaky Tests/Builds (フレイキーなテスト/ビルド): 「Flaky」とは、同じコードベースに対して、同じテストまたはビルドプロセスを複数回実行したときに、成功と失敗が不規則に混在する状態を指します。これは、テストやビルドが非決定論的であることを意味し、環境依存性、並行処理の問題、外部サービスへの依存、リソースの競合、または単なるタイミングの問題など、様々な原因によって引き起こされます。Flakyなテストは、開発者が実際のバグと一時的な問題を区別することを困難にし、CI/CDパイプラインの信頼性を損ないます。
  • NetBSD: Unix系オペレーティングシステムの一つで、非常に移植性が高いことで知られています。多くの異なるハードウェアアーキテクチャで動作します。Goプロジェクトは、幅広いプラットフォームでの互換性を保証するため、NetBSDを含む多様なOSでビルドとテストを行っています。
  • App Engine (Google App Engine): Googleが提供するPaaS (Platform as a Service) で、ウェブアプリケーションやモバイルバックエンドを構築・ホストするためのプラットフォームです。Goのビルドダッシュボードは、Google App Engine上で動作していることが示唆されています(appengine.Contextの使用から)。

技術的詳細

このコミットは、Goビルドダッシュボードの通知ロジックを修正しています。具体的には、misc/dashboard/app/build/notify.goファイルに以下の変更が加えられました。

  1. failIgnore マップの導入: failIgnoreという名前のmap[string]bool型のグローバル変数が追加されました。このマップは、メール通知を無視すべきビルダの名前をキーとして持ち、値はtrueに設定されます。 現在のところ、以下のNetBSDビルダがこのマップに追加されています。

    • netbsd-386-bsiegert
    • netbsd-amd64-bsiegert これらのビルダは、NetBSD上で動作する32ビット(i386)および64ビット(amd64)アーキテクチャのビルダであり、bsiegertはおそらくそのビルダを管理している人物の名前または識別子です。
  2. notifyOnFailure 関数の変更: notifyOnFailure関数は、ビルドが失敗した際に通知を送信するかどうかを決定する主要な関数です。この関数は、引数として現在のコンテキスト(appengine.Context)、コミット情報(*Commit)、およびビルダの名前(builder string)を受け取ります。 変更後、この関数の冒頭に以下のチェックが追加されました。

    if failIgnore[builder] {
        return
    }
    

    これは、現在のビルダの名前がfailIgnoreマップに存在するかどうかを確認します。もし存在する場合(つまり、そのビルダが無視リストに含まれている場合)、関数はすぐにreturnし、それ以降の通知ロジック(メール送信など)は実行されません。

この変更により、netbsd-386-bsiegertnetbsd-amd64-bsiegertのビルダでビルドが失敗しても、それに関するメール通知は送信されなくなります。これは、これらのビルダが「flaky」であるという認識に基づいています。

コアとなるコードの変更箇所

diff --git a/misc/dashboard/app/build/notify.go b/misc/dashboard/app/build/notify.go
index afcc7b2db5..0eadb909f3 100644
--- a/misc/dashboard/app/build/notify.go
+++ b/misc/dashboard/app/build/notify.go
@@ -21,6 +21,13 @@ const (
 	domain     = "build.golang.org"
 )

+// failIgnore is a set of builders that we don't email about because
+// they're too flaky.
+var failIgnore = map[string]bool{
+	"netbsd-386-bsiegert":   true,
+	"netbsd-amd64-bsiegert": true,
+}
+
 // notifyOnFailure checks whether the supplied Commit or the subsequent
 // Commit (if present) breaks the build for this builder.
 // If either of those commits break the build an email notification is sent
@@ -30,6 +37,10 @@ const (
 // This must be run in a datastore transaction, and the provided *Commit must
 // have been retrieved from the datastore within that transaction.
 func notifyOnFailure(c appengine.Context, com *Commit, builder string) error {
+	if failIgnore[builder] {
+		return
+	}
+
 	// TODO(adg): implement notifications for packages
 	if com.PackagePath != "" {
 		return nil

コアとなるコードの解説

変更はmisc/dashboard/app/build/notify.goファイルに集中しています。

  1. failIgnore 変数の定義:

    // failIgnore is a set of builders that we don't email about because
    // they're too flaky.
    var failIgnore = map[string]bool{
    	"netbsd-386-bsiegert":   true,
    	"netbsd-amd64-bsiegert": true,
    }
    

    このコードブロックでは、failIgnoreという名前のマップが宣言され、初期化されています。マップのキーは文字列(ビルダの名前)で、値はブール値です。ここでは、"netbsd-386-bsiegert""netbsd-amd64-bsiegert"という2つのNetBSDビルダがtrueに設定されています。Goのマップでは、キーが存在するかどうかを効率的にチェックできるため、これは特定のビルダを「無視リスト」として機能させるための一般的なパターンです。コメントにもあるように、これらのビルダは「flakyすぎる」ため、メール通知の対象外とされています。

  2. notifyOnFailure 関数内の条件分岐:

    func notifyOnFailure(c appengine.Context, com *Commit, builder string) error {
    	if failIgnore[builder] {
    		return
    	}
    	// ... 既存の通知ロジック ...
    }
    

    notifyOnFailure関数は、ビルド失敗時に呼び出される主要な関数です。この関数の冒頭で、引数として渡されたbuilder(現在のビルダの名前)がfailIgnoreマップに存在するかどうかがチェックされます。

    • failIgnore[builder]は、builderというキーがマップに存在し、その値がtrueであればtrueを返します。
    • もしfailIgnore[builder]trueであれば、returnステートメントが実行され、関数はそこで終了します。これにより、このビルダに関する通知処理はスキップされ、メールは送信されません。
    • failIgnore[builder]false(キーが存在しないか、値がfalseの場合)であれば、条件は満たされず、関数は通常の通知ロジックに進みます。

このシンプルな変更により、特定のflakyなビルダからの過剰な通知が抑制され、開発者のワークフローが改善されます。

関連リンク

参考にした情報源リンク

  • Goのコミットメッセージと差分
  • Goのビルドダッシュボードに関する一般的な知識
  • Flaky testsの概念に関するソフトウェアエンジニアリングの知識
  • Google App Engineの基本的な概念
  • NetBSDオペレーティングシステムに関する一般的な知識
  • Go言語のマップと条件分岐に関する知識# [インデックス 14627] ファイルの概要

このコミットは、Goプロジェクトのビルドダッシュボード(misc/dashboard)における変更です。具体的には、NetBSDプラットフォームでのビルド失敗が頻繁に発生し、その信頼性が低い(flakyである)ため、これらの失敗に関するメール通知を停止するように修正されています。これにより、開発者が信頼性の低い通知に煩わされることなく、より重要なビルド問題に集中できるようになります。

コミット

commit a257c753ac151d654d40258f11fdcda5dba7f779
Author: Brad Fitzpatrick <bradfitz@golang.org>
Date:   Wed Dec 12 11:33:03 2012 -0800

    misc/dashboard: don't email about netbsd failures
    
    Too flaky.
    
    R=iant, rsc
    CC=golang-dev
    https://golang.org/cl/6925056

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/a257c753ac151d654d40258f11fdcda5dba7f779

元コミット内容

misc/dashboard: don't email about netbsd failures

Too flaky.

R=iant, rsc
CC=golang-dev
https://golang.org/cl/6925056

変更の背景

Goプロジェクトは、様々なプラットフォームでのビルドの健全性を継続的に監視するために、ビルドダッシュボード(build.golang.org)を運用しています。このダッシュボードは、各コミットが様々な環境でビルドおよびテストに成功するかどうかを追跡し、失敗した場合には関係者に通知する機能を持っています。

しかし、特定の環境、特にNetBSDプラットフォームでは、ビルドやテストが不安定で、一貫性のない結果を出す「flaky(フレイキー)」な状態が頻繁に発生していました。これは、実際のコードのバグではなく、環境設定、リソースの競合、タイミングの問題など、様々な要因によって引き起こされる一時的な失敗を指します。

このようなflakyな失敗が頻繁に通知されると、開発者は本当に修正が必要な問題と、無視しても良い一時的な問題とを区別するのが難しくなります。結果として、通知の「ノイズ」が増え、重要なビルド失敗が見過ごされるリスクが高まります。このコミットは、この問題を解決し、開発者の生産性を向上させるために、NetBSDのflakyなビルド失敗に関するメール通知を停止することを目的としています。

前提知識の解説

  • Go ビルドダッシュボード (build.golang.org): Go言語の公式ビルドシステムであり、継続的インテグレーション (CI) の中心的な役割を担っています。世界中の様々なアーキテクチャ、オペレーティングシステム、Goのバージョンで、Goのソースコードがビルドされ、テストが実行されます。その結果はウェブインターフェースで公開され、開発者はGoの健全性をリアルタイムで確認できます。ビルドが失敗した場合、設定に応じてメール通知が送信されます。
  • Flaky Tests/Builds (フレイキーなテスト/ビルド): 「Flaky」とは、同じコードベースに対して、同じテストまたはビルドプロセスを複数回実行したときに、成功と失敗が不規則に混在する状態を指します。これは、テストやビルドが非決定論的であることを意味し、環境依存性、並行処理の問題、外部サービスへの依存、リソースの競合、または単なるタイミングの問題など、様々な原因によって引き起こされます。Flakyなテストは、開発者が実際のバグと一時的な問題を区別することを困難にし、CI/CDパイプラインの信頼性を損ないます。
  • NetBSD: Unix系オペレーティングシステムの一つで、非常に移植性が高いことで知られています。多くの異なるハードウェアアーキテクチャで動作します。Goプロジェクトは、幅広いプラットフォームでの互換性を保証するため、NetBSDを含む多様なOSでビルドとテストを行っています。
  • App Engine (Google App Engine): Googleが提供するPaaS (Platform as a Service) で、ウェブアプリケーションやモバイルバックエンドを構築・ホストするためのプラットフォームです。Goのビルドダッシュボードは、Google App Engine上で動作していることが示唆されています(appengine.Contextの使用から)。

技術的詳細

このコミットは、Goビルドダッシュボードの通知ロジックを修正しています。具体的には、misc/dashboard/app/build/notify.goファイルに以下の変更が加えられました。

  1. failIgnore マップの導入: failIgnoreという名前のmap[string]bool型のグローバル変数が追加されました。このマップは、メール通知を無視すべきビルダの名前をキーとして持ち、値はtrueに設定されます。 現在のところ、以下のNetBSDビルダがこのマップに追加されています。

    • netbsd-386-bsiegert
    • netbsd-amd64-bsiegert これらのビルダは、NetBSD上で動作する32ビット(i386)および64ビット(amd64)アーキテクチャのビルダであり、bsiegertはおそらくそのビルダを管理している人物の名前または識別子です。
  2. notifyOnFailure 関数の変更: notifyOnFailure関数は、ビルドが失敗した際に通知を送信するかどうかを決定する主要な関数です。この関数は、引数として現在のコンテキスト(appengine.Context)、コミット情報(*Commit)、およびビルダの名前(builder string)を受け取ります。 変更後、この関数の冒頭に以下のチェックが追加されました。

    if failIgnore[builder] {
        return
    }
    

    これは、現在のビルダの名前がfailIgnoreマップに存在するかどうかを確認します。もし存在する場合(つまり、そのビルダが無視リストに含まれている場合)、関数はすぐにreturnし、それ以降の通知ロジック(メール送信など)は実行されません。

この変更により、netbsd-386-bsiegertnetbsd-amd64-bsiegertのビルダでビルドが失敗しても、それに関するメール通知は送信されなくなります。これは、これらのビルダが「flaky」であるという認識に基づいています。

コアとなるコードの変更箇所

diff --git a/misc/dashboard/app/build/notify.go b/misc/dashboard/app/build/notify.go
index afcc7b2db5..0eadb909f3 100644
--- a/misc/dashboard/app/build/notify.go
+++ b/misc/dashboard/app/build/notify.go
@@ -21,6 +21,13 @@ const (
 	domain     = "build.golang.org"
 )

+// failIgnore is a set of builders that we don't email about because
+// they're too flaky.
+var failIgnore = map[string]bool{
+	"netbsd-386-bsiegert":   true,
+	"netbsd-amd64-bsiegert": true,
+}
+
 // notifyOnFailure checks whether the supplied Commit or the subsequent
 // Commit (if present) breaks the build for this builder.
 // If either of those commits break the build an email notification is sent
@@ -30,6 +37,10 @@ const (
 // This must be run in a datastore transaction, and the provided *Commit must
 // have been retrieved from the datastore within that transaction.
 func notifyOnFailure(c appengine.Context, com *Commit, builder string) error {
+	if failIgnore[builder] {
+		return
+	}
+
 	// TODO(adg): implement notifications for packages
 	if com.PackagePath != "" {
 		return nil

コアとなるコードの解説

変更はmisc/dashboard/app/build/notify.goファイルに集中しています。

  1. failIgnore 変数の定義:

    // failIgnore is a set of builders that we don't email about because
    // they're too flaky.
    var failIgnore = map[string]bool{
    	"netbsd-386-bsiegert":   true,
    	"netbsd-amd64-bsiegert": true,
    }
    

    このコードブロックでは、failIgnoreという名前のマップが宣言され、初期化されています。マップのキーは文字列(ビルダの名前)で、値はブール値です。ここでは、"netbsd-386-bsiegert""netbsd-amd64-bsiegert"という2つのNetBSDビルダがtrueに設定されています。Goのマップでは、キーが存在するかどうかを効率的にチェックできるため、これは特定のビルダを「無視リスト」として機能させるための一般的なパターンです。コメントにもあるように、これらのビルダは「flakyすぎる」ため、メール通知の対象外とされています。

  2. notifyOnFailure 関数内の条件分岐:

    func notifyOnFailure(c appengine.Context, com *Commit, builder string) error {
    	if failIgnore[builder] {
    		return
    	}
    	// ... 既存の通知ロジック ...
    }
    

    notifyOnFailure関数は、ビルド失敗時に呼び出される主要な関数です。この関数の冒頭で、引数として渡されたbuilder(現在のビルダの名前)がfailIgnoreマップに存在するかどうかがチェックされます。

    • failIgnore[builder]は、builderというキーがマップに存在し、その値がtrueであればtrueを返します。
    • もしfailIgnore[builder]trueであれば、returnステートメントが実行され、関数はそこで終了します。これにより、このビルダに関する通知処理はスキップされ、メールは送信されません。
    • failIgnore[builder]false(キーが存在しないか、値がfalseの場合)であれば、条件は満たされず、関数は通常の通知ロジックに進みます。

このシンプルな変更により、特定のflakyなビルダからの過剰な通知が抑制され、開発者のワークフローが改善されます。

関連リンク

参考にした情報源リンク

  • Goのコミットメッセージと差分
  • Goのビルドダッシュボードに関する一般的な知識
  • Flaky testsの概念に関するソフトウェアエンジニアリングの知識
  • Google App Engineの基本的な概念
  • NetBSDオペレーティングシステムに関する一般的な知識
  • Go言語のマップと条件分岐に関する知識