getsentry / getsentry/XcodeBuildMCP

Test-products retention is unbounded in practice (100 bundles / 3 days, no config knob) — can fill a disk

Đang mở
#524 1 bình luận 2 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
TypeScript
Star
6.4k
Fork
319
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

**Version:** 2.7.0

## Problem

Each `test_sim` / `test_*` run stages a full `.xctestproducts` bundle (a `Binaries/` copy of the built test products) under `~/Library/Developer/XcodeBuildMCP/workspaces//test-products/`. In one of the repos I work on, each bundle is **~6.6 GB**.

`pruneManagedTestProductsDirectory` only removes bundles that are either:
- older than **3 days** (`TEST_PRODUCTS_MAX_AGE_MS`), or
- in excess of **100** retained (`TEST_PRODUCTS_MAX_COUNT`),

and the sweep only runs while the server is active (1h cooldown). At ~6.6 GB/bundle that permits roughly **660 GB** before count-based GC ever triggers. In practice, 20 runs over two days silently consumed **66 GB** and contributed to filling my disk.

## Root cause

These limits are hardcoded in `utils/test-products-lifecycle.js`:

```js
const TEST_PRODUCTS_MAX_AGE_MS = 3 * 24 * 60 * 60 * 1e3;
const TEST_PRODUCTS_MAX_COUNT = 100;
```

and the caller in `utils/workspace-filesystem-lifecycle.js` only ever passes `maxAgeMs` (the log max-age, also 3 days) — never `maxCount`. There is no env/config surface to tune count, age, or a total-size cap, unlike `XCODEBUILDMCP_DERIVED_DATA_PATH` for derived data.

## Request

Expose retention controls, e.g.:
- `XCODEBUILDMCP_TEST_PRODUCTS_MAX_COUNT`
- `XCODEBUILDMCP_TEST_PRODUCTS_MAX_AGE`
- `XCODEBUILDMCP_TEST_PRODUCTS_MAX_TOTAL_BYTES`

and/or lower the defaults given bundles are multi-GB (e.g. keep only the newest N per workspace). A total-size budget would be the most robust guard against filling the disk between the age/count thresholds.

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Hướng nghiên cứu

Start by reading utils/test-products-lifecycle.js, including pruneManagedTestProductsDirectory and its TEST_PRODUCTS_MAX_AGE_MS and TEST_PRODUCTS_MAX_COUNT constants, then trace the caller in utils/workspace-filesystem-lifecycle.js. Determine how retention settings should be exposed and how total-size or count/age limits should interact; done means configurable cleanup prevents the documented disk-growth scenario and existing lifecycle behavior remains covered.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
typescript
Lĩnh vực
tooling
Loại issue
Tính năng
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Sôi nổi
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
48/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.