Skip to content

ベンチマーカーで初期化処理と整合性チェックのタイムアウトが共有されている #12

Description

@theoremoon

仕様かバグかわからずで質問になってしまい恐縮なのですが、当日マニュアル には

初期化処理の実行 POST /initialize(最大 60 秒)
整合性チェック (数秒~数十秒)
負荷走行(60 秒)

とあり、 初期化処理と整合性はそれぞれでタイムアウトが設けられているように見えるのですが、実装は以下のようにInitializeRequestTimeout でタイムアウトを設定したctxValidationScenarioに渡されていて整合性チェックの完了まで含めて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秒ぎりぎりだと整合性チェック中にタイムアウトになってしまうことがあるのではないかと思っていますが、意図した挙動でしょうか

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions