仕様かバグかわからずで質問になってしまい恐縮なのですが、当日マニュアル には
初期化処理の実行 POST /initialize(最大 60 秒)
整合性チェック (数秒~数十秒)
負荷走行(60 秒)
とあり、 初期化処理と整合性はそれぞれでタイムアウトが設けられているように見えるのですが、実装は以下のようにInitializeRequestTimeout でタイムアウトを設定したctxがValidationScenarioに渡されていて整合性チェックの完了まで含めて60秒のタイムアウトが設定されていそうに見えます。
|
// 初期化処理を行うが、初期化処理を正しく実行しているかをチェックする。 |
|
// 初期化処理自体は `main.DefaultInitializeRequestTimeout` 秒以内に終了する必要がある。 |
|
func (s *Scenario) Prepare(ctx context.Context, step *isucandar.BenchmarkStep) error { |
|
err := s.LoadInitialData() |
|
if err != nil { |
|
return err |
|
} |
|
|
|
ctx, cancel := context.WithTimeout(ctx, s.Option.InitializeRequestTimeout) |
|
defer cancel() |
|
|
|
report := TimeReporter("初期化処理", s.Option) |
|
defer report() |
|
|
|
agent, err := s.Option.NewAgent(true) |
|
if err != nil { |
|
return failure.NewError(ErrCannotCreateNewAgent, err) |
|
} |
|
|
|
// 管理者ユーザーをシナリオに登録しておき、マスターデータ更新で利用する。 |
|
// 管理者 ID は決め打ちで1が入る。 |
|
s.AdminUser = &AdminUser{ |
|
ID: LoginAdminID, |
|
Password: LoginAdminPassword, |
|
} |
|
s.MasterVersion = "1" |
|
|
|
err = s.DoInitialize(ctx, step, agent) |
|
if err != nil { |
|
return err |
|
} |
|
|
|
// 検証シナリオを1回まわす |
|
if err := s.ValidationScenario(ctx, step); err != nil { |
|
ContestantLogger.Println("整合性チェックに失敗しました") |
|
return err |
|
} |
|
|
この状態だとinitializeが60秒以内にレスポンスを返しても、60秒ぎりぎりだと整合性チェック中にタイムアウトになってしまうことがあるのではないかと思っていますが、意図した挙動でしょうか
仕様かバグかわからずで質問になってしまい恐縮なのですが、当日マニュアル には
とあり、 初期化処理と整合性はそれぞれでタイムアウトが設けられているように見えるのですが、実装は以下のように
InitializeRequestTimeoutでタイムアウトを設定したctxがValidationScenarioに渡されていて整合性チェックの完了まで含めて60秒のタイムアウトが設定されていそうに見えます。isucon12-final/benchmarker/scenario.go
Lines 38 to 75 in d31d92c
この状態だとinitializeが60秒以内にレスポンスを返しても、60秒ぎりぎりだと整合性チェック中にタイムアウトになってしまうことがあるのではないかと思っていますが、意図した挙動でしょうか