Skip to content

[perf] create_instance 기본값이 --wait 로 빌드 완료까지 MCP 응답을 동기 블로킹 #2

Description

@jisung-02

요약

create_instance 의 기본값(no_wait=false)이 --wait 플래그를 붙여 OpenStack 빌드가 완료될 때까지 MCP 응답을 블로킹합니다. 빌드는 수십초~수분 소요되며, stdio 서버는 단일 클라이언트이므로 빌드 한 번이 전체 세션을 멈춥니다.

문제

// internal/openstack/instances.go:202-204
if !opts.NoWait {
    args = append(args, "--wait")
}
// internal/openstack/instances.go:218
runAuditedOpenStackJSON(ctx, 5*time.Minute, ...)   // ← 타임아웃 5분

기본값(NoWait=false)으로 생성 시 실제 argv:

server create --image i --flavor f --network n -f json --wait x

재현 / 증거

실행 검증 (TestPerf3):

PERF-3: 기본 create_instance 인자 = server create --image i --flavor f --network n -f json --wait x
PERF-3 결론: --wait 기본값 -> OpenStack 빌드 완료까지 MCP 응답 블로킹 (수십초~분, 타임아웃 5분)

영향

  • OpenStack 이미지 빌드(수십초~수분) 동안 MCP 클라이언트가 아무 도구도 못 쓰고 대기
  • stdio 단일 클라이언트 → 빌드 한 번이 세션 전체 중단
  • 타임아웃 5분 초과 시 사용자에게 불투명한 실패

제안 수정

기본값을 비동기로 전환:

// 기본을 no_wait=true 로 (또는 NoWait 필드의 의미를 반전해 Wait 옵션으로)
args := []string{"server", "create", "--image", opts.Image, ...}
if opts.Wait {   // ← opt-in 으로 변경
    args = append(args, "--wait")
}

필요시 별도 폴링 도구(예: 진행률 확인용 get_instance)로 상태 추적을 클라이언트에 위임.

영향받는 코드

  • internal/openstack/instances.go:202-204, 216-224
  • internal/tools/instances.go:26-34 (입력 스키마 NoWait)
  • README.md:36-37 (문서 갱신 필요)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions