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 (문서 갱신 필요)

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