not found cpc files
RCA: not found cpc files
Overview#
What Happened#
2026-04-21 07:12 UTC에 cupixworks-capture-3dreconstruction-instance 서비스에서 capture 683836 (team: burkecgi)의 3D reconstruction job 1026180이 약 46분간 densemapper를 실행한 후 .cpc 파일이 생성되지 않아 실패했다. Densemapper는 6개 cluster 모두에서 fusion 결과 vertex 수가 극히 적거나 0이었고, radiusFiltering()이 남은 vertex를 전부 제거하여 모든 point cloud가 None으로 처리되었다.
Quick Facts#
| Field | Value |
|---|---|
| exception.class | Error |
| exception.message | not found cpc files |
| top_frame | ThreeDReconstruction.checkPointcloudFiles (app.cjs:8329) |
| env | production, us-west-2 |
| capture.id | 683836 |
| job.id | 1026180 |
| team.domain | burkecgi |
| densemapper_version | 2.8.0 (build 99aeb8ec6d, 2026-04-08) |
Affected Teams#
| Team / Domain | Error Count | Impact |
|---|---|---|
| burkecgi | 1 | capture 683836의 3D reconstruction 실패, 자동 retry (job 1026181) 발생 |
Timeline#
- 06:26:10 UTC — Job 1026180 시작, capture 683836 로드 (2 videos, 7 clusters)
- 06:26:19 UTC — densemapper 실행 시작 (perspective mode, 242 perspective images, 0 pano)
- 06:26:25 UTC — cluster info parsing 실패:
Error - failed to parse cluster info. - 'prop' - 06:34:05 UTC — Insta360 OneRS 미지원 firmware 감지 (v2.0.11_build3), camera info 추출 실패
- 06:36:01 UTC — 6개 cluster에 pano 할당 완료 (총 896 panos), 모두 outdoor capture 감지
- 07:05:32-07:11:59 UTC — 6개 cluster fusion 완료, 모든 cluster에서
pointcloud is None - 07:12:02.641 UTC —
checkPointcloudFiles: result 디렉토리에.cpc파일 없음 (log.json만 존재) - 07:12:02.642 UTC —
Error: not found cpc filesthrow, error code AGT1000 설정 - 07:12:03 UTC — 서비스 강제 종료 (10초 타이머)
- 07:20:20 UTC — Retry job 1026181 시작 (다른 호스트에서)
Error Log#
Error: not found cpc files
at ThreeDReconstruction.checkPointcloudFiles (/tmp/agent/dist/app.cjs:8329:15)
at ThreeDReconstruction.run (:8143:11)
at ThreeDReconstruction.init (:8093:7)
Impact#
- Service:
cupixworks-capture-3dreconstruction-instance - Team: burkecgi
- 발생 횟수: 1 (이 클러스터), 최근 14일간 동일 에러 21건
- 최초 발생: 2026-04-21T07:12:02.642Z
- 최근 발생: 2026-04-21T07:12:02.642Z
Root Cause Summary#
Densemapper 2.8.0이 Insta360 OneRS 카메라의 미지원 firmware (v2.0.11_build3)로 촬영된 outdoor capture를 처리할 때, 비디오에서 camera info 추출에 실패하고 timestamp 손상(jumped/perturbed frames)이 발생했다. 이로 인해 depth estimation 품질이 극히 낮아져 6개 cluster 모두에서 fusion 결과 vertex 수가 0~114개에 불과했고, radiusFiltering()이 이들을 모두 noise로 판단하여 제거했다. 모든 point cloud가 None이 되어 .cpc 파일이 생성되지 않았으며, checkPointcloudFiles에서 .cpc 파일 부재를 감지하고 에러를 throw했다.
Technical Analysis#
Code Path#
- Entry point:
three-d-reconstruction-service.ts:57—init()호출 run()메서드에서 job 로드 → 비디오 다운로드 → densemapper 실행 → checkPointcloudFiles 순서로 진행
private runThreeDReconstruction = async (cpCapture: CPCapture): Promise<void> => {
// ...
try {
await this.threeDReconstructorManager.execute({
domain: teamDomain,
// ... params
});
const pointcloudDirPath = path.join(Constants.DefaultWorkspacePath, `${teamDomain}.${cpCapture.id}_result`);
await cpCapture.setPointcloudDirPath(pointcloudDirPath);
} catch (error: any) {
// densemapper 실행 자체가 실패하면 여기서 catch
throw new Error(`Failed to execute densemapper...`);
}
};
Densemapper 프로세스는 exit code 0으로 정상 종료했다 (execute() end. elapsed: 2727.88). 그러나 .cpc 파일을 생성하지 못한 채 종료한 것이 핵심 문제이다. Densemapper는 내부적으로 각 cluster fusion 결과가 None이면 .cpc 파일을 건너뛰고 _log.json만 생성한다.
- Failure point:
three-d-reconstruction-service.ts:330-338—checkPointcloudFiles
private checkPointcloudFiles = async (cpCapture: CPCapture): Promise<void> => {
logger.debug('ThreeDReconstruction::checkPointcloudFiles | begin');
const fileList = await CPUtils.getFiles(cpCapture.pointCloudDirPath);
const cpcFileList = fileList.filter(filePath => path.extname(filePath) === '.cpc' && !filePath.includes('mesh'));
if (cpcFileList.length < 1) {
logger.warn('ThreeDReconstruction::checkPointcloudFiles | not found cpc files');
throw new Error('not found cpc files');
}
// ...
};
pointCloudDirPath는 /tmp/workspace/burkecgi.683836_result로 설정되어 있었고 (line 318에서 densemapper 실행 후 override), 이 디렉토리에는 6개의 _log.json 파일만 존재했다. .cpc 파일이 0개이므로 line 337에서 에러가 throw되었다.
Log Evidence#
Datadog에서 사용한 주요 쿼리:
service:cupixworks-capture-3dreconstruction-instance @job.id:1026180
에러 직전 warn 로그 (1ms 차이):
2026-04-21T07:12:02.641Z [warn] ThreeDReconstruction::checkPointcloudFiles | not found cpc files
2026-04-21T07:12:02.642Z [error] not found cpc files
Debug 로그에서 확인된 result 디렉토리 내용:
[
"/tmp/workspace/burkecgi.683836_result/burkecgi.683836_1289501_log.json",
"/tmp/workspace/burkecgi.683836_result/burkecgi.683836_1289890_log.json",
"/tmp/workspace/burkecgi.683836_result/burkecgi.683836_1289891_log.json",
"/tmp/workspace/burkecgi.683836_result/burkecgi.683836_1289892_log.json",
"/tmp/workspace/burkecgi.683836_result/burkecgi.683836_1289893_log.json",
"/tmp/workspace/burkecgi.683836_result/burkecgi.683836_1289894_log.json"
]
Densemapper debug 로그에서 확인된 각 cluster fusion 결과:
cluster[1289501] fusion elapsed: 41.19s, total vertices: 21, radiusFiltering removed: 21 → pointcloud is None
cluster[1289891] fusion elapsed: 47.95s, total vertices: 3, radiusFiltering removed: 3 → pointcloud is None
cluster[1289890] fusion elapsed: 33.11s, total vertices: 0 → pointcloud is None
cluster[1289892] fusion elapsed: 39.06s, total vertices: 10, radiusFiltering removed: 10 → pointcloud is None
cluster[1289894] fusion elapsed: 63.74s, total vertices: 114, radiusFiltering removed: 114 → pointcloud is None
cluster[1289893] fusion elapsed: 35.22s, total vertices: 0 → pointcloud is None
카메라 관련 에러 로그:
2026-04-21T06:34:05Z Unsupported firmware version detected - Camera: Insta360 OneRS, version: v2.0.11_build3
2026-04-21T06:34:05Z Failed to get valid capture stats
2026-04-21T06:34:05Z Failed to get camera info from video. skip adding camera info
비디오 timestamp 문제:
jumped frames: 10, perturbed frames: 88 (out of 910 total)
최근 14일간 동일 에러 빈도:
service:cupixworks-capture-3dreconstruction-instance "not found cpc files" status:error
→ 21건 (평균 ~1.5건/일)
Hypotheses Considered#
| # | Hypothesis | Evidence for | Evidence against | Verdict |
|---|---|---|---|---|
| H1 | 미지원 카메라 firmware로 인한 depth estimation 품질 저하 | debug 로그: "Unsupported firmware version v2.0.11_build3", "Failed to get camera info from video", jumped frames 10개 + perturbed frames 88개, 6개 cluster 모두 vertex 수 극히 낮음 (0~114) | — | Confirmed |
| H2 | Densemapper 실행 자체가 실패하여 .cpc 미생성 |
— | densemapper exit code 0, "execute() end. elapsed: 2727.88" 정상 완료 로그 확인. runThreeDReconstruction에서 에러 미발생 |
Rejected |
| H3 | result 디렉토리 경로 불일치로 .cpc 파일을 다른 위치에서 찾음 |
— | debug 로그에서 checkPointcloudFiles가 올바른 경로 /tmp/workspace/burkecgi.683836_result를 조회했고, 해당 디렉토리에 6개 _log.json 파일이 실제로 존재 확인 |
Rejected |
| H4 | Outdoor capture의 depth_max_distance 설정이 부적절하여 point cloud 품질 저하 | debug 로그: 6개 cluster 모두 outdoor 감지, depth_max_distance 10.0m 적용. Outdoor occupancy ratio가 높은 cluster (1.0)에서도 vertex 0개 |
다른 outdoor capture에서 정상 동작하는 사례가 있을 수 있으므로 이것만으로는 단독 원인이 아님 | Contributing factor |
Fix Recommendation#
즉시 조치 (Critical)#
- 이 에러는 densemapper가 유효한 point cloud를 생성하지 못한 입력 데이터 품질 문제이다. 현재
checkPointcloudFiles(three-d-reconstruction-service.ts:335-337)에서.cpc파일이 없으면 무조건 에러를 throw하는데, 이 에러 레벨을error에서warn으로 낮추는 것을 검토해야 한다. Densemapper가 정상 종료(exit 0)했으나 결과물이 없는 경우는 입력 데이터 품질 문제이지 시스템 버그가 아니다. _log.json파일에 각 cluster별 실패 원인(vertex 수, filtering 결과)이 기록되어 있으므로,checkCpcLogJsonFile에서 이 정보를 먼저 파싱하여 실패 원인을 API에 기록하면 디버깅이 용이해진다.
단기 개선 (1주 이내)#
checkPointcloudFiles에서.cpc파일이 없을 때_log.json파일의 내용을 분석하여, "모든 cluster에서 pointcloud is None" 등 구체적인 실패 원인을 에러 메시지에 포함시킨다.- Densemapper가 미지원 카메라 firmware를 감지했을 때 early warning을 API에 전달하여, 사용자에게 "지원되지 않는 카메라 버전" 안내를 표시할 수 있도록 한다.
장기 개선 (재발 방지)#
- Insta360 OneRS firmware v2.0.11_build3 지원을 densemapper 알고리즘 팀에 요청한다.
- 최근 14일간 21건 발생하는 반복 에러이므로, 입력 데이터 품질에 따른 예상 실패를 시스템 에러와 분리하는 에러 분류 체계를 도입한다 (예:
DATA_QUALITY_ERRORvsSYSTEM_ERROR). - Outdoor capture에서
radiusFiltering의 threshold를 조정하거나 adaptive filtering을 적용하여 vertex 보존율을 개선한다.
Monitoring#
- 에러 빈도 추적 쿼리:
service:cupixworks-capture-3dreconstruction-instance "not found cpc files" status:error
- 카메라 firmware별 실패율 모니터링 (미지원 firmware 버전 감지 시 알림):
service:cupixworks-capture-3dreconstruction-instance "Unsupported firmware version"
- Cluster fusion에서 vertex 0인 비율이 높은 capture 모니터링:
service:cupixworks-capture-3dreconstruction-instance "pointcloud is None"
Risk Assessment#
- Risk level: low
- 예상 복잡도: standard — 에러 자체는 입력 데이터 품질 문제로 인한 예상 가능한 실패이며, 시스템 버그가 아니다. 로그 레벨 조정과 에러 메시지 개선은 agent 코드 수정으로 가능하지만, 근본적인 카메라 호환성/알고리즘 개선은 densemapper 팀과의 협업이 필요하다.