FloorplanService::downloadFile | path: /tmp/workspace/88414/88414.jpg, error: {"errno":-110,"code":"
Fix Plan: FloorplanService::downloadFile ETIMEDOUT (errno -110, syscall read)
Changes#
cupixworks: applications/agents/packages/cupix-tesla-floorplan-agent/src/floorplan-service.ts#
- What:
downloadFileWithHeader내부의request.get(...)기반 다운로드 본문을@agents/base의downloadFile(url, path, headers)호출로 교체한다. 메서드의 외부 시그니처와 호출 지점은 그대로 두고, 다음 흐름을 유지한다:setErrorCode(ErrorCode.Agent.FailedToDownloadOriginalFiles)보존cupixAuth.checkToken()선행 호출 보존headers미지정 시{ 'X-CUPIX-AUTH': cupixAuth.accessToken }기본값 적용 (현재 분기 그대로)- 다운로드 실패 시
cupixAuth.handleError(err)로 변환해 reject (현재 동작 보존) - 시작/완료 debug 로그 (
FloorplanService::downloadFile | start ...,... | complete path: ..., size: ...) 유지 - 실패 시 error 로그 형식
FloorplanService::downloadFile | path: %s, error: %s(cluster fingerprint 보존을 위해 메시지 형식을 그대로 유지)
- What (import 정리): 파일 상단 import에서
* as request from 'request'제거하고,@agents/base에서downloadFile을 추가로 import. 이미 존재하는uploadFileimport에 콤마로 합친다. - Why: RCA(
### 즉시 조치 (Critical)) — 현재request.get호출은timeout옵션이 없어 OS TCP read timeout(~15분)까지 워커를 점유한 뒤 ETIMEDOUT으로 종료된다.@agents/base.downloadFile은REQUEST_TIMEOUT_MS = 60000+RETRYABLE_CODES(ETIMEDOUT 포함) + exponential backoff 재시도를 내장하므로, 마이그레이션만으로 본 클러스터의 근본 원인을 제거하고 develop의uploadFile패턴(TSLA-13233)과 일관성을 맞춘다. - Lines: 약 1-12(import) 및 237-276(
downloadFileWithHeader본문). 라인 수 net 변경량 ≤ 30라인.
Acceptance Criteria#
-
applications/agents/packages/cupix-tesla-floorplan-agent/src/floorplan-service.ts안에서request.get(검색 결과 0건. - 동일 파일 안에서
from 'request'또는from "request"import 0건 (* as request from 'request'import 삭제 확인). -
@agents/baseimport 라인에downloadFile이 포함된다 (uploadFile와 함께). -
downloadFileWithHeader메서드 본문에서@agents/base의downloadFile(url, path, headers)호출이 1회 존재한다. -
cupixAuth.checkToken()호출과cupixAuth.handleError(...)를 통한 에러 변환 흐름이 보존된다 (메서드 안에서 두 호출 모두 존재). -
headers === undefined일 때{ 'X-CUPIX-AUTH': cupixAuth.accessToken }기본값을 적용하는 분기가 유지된다. -
floorplan-service.ts:51(run),:76-80,:92-95의this.downloadFileWithHeader(...)두 호출 지점은 변경되지 않는다 (외부 호출 시그니처 보존). -
pnpm exec eslint applications/agents/packages/cupix-tesla-floorplan-agent/src/floorplan-service.ts결과 신규 lint 에러 0건.
Tests#
- 기존 테스트: floorplan-agent 패키지에는
floorplan-service단위 테스트가 존재하지 않음 (spec/,*.spec.ts,*.test.ts부재 확인). 본 변경에 신규 테스트는 추가하지 않는다 — 기능 동작은 develop 트리에서 이미 사용 중인@agents/base.downloadFile(episode 68df229b에서 추가된 100% coverage 유틸)에 위임된다. - Lint:
cd applications/agents && pnpm exec eslint packages/cupix-tesla-floorplan-agent/src/floorplan-service.ts - Typecheck:
cd applications/agents/packages/cupix-tesla-floorplan-agent && pnpm typecheck(best-effort — 과거 episode 68df229b에서 monorepotsc --build가 pre-existing 에러로 실패한 사례가 있음).