Skip to content

Derive default-catalog product ids deterministically (issue #34) - #37

Open
aleksUIX wants to merge 1 commit into
IABTechLab:mainfrom
aleksUIX:fix/deterministic-default-catalog-ids
Open

Derive default-catalog product ids deterministically (issue #34)#37
aleksUIX wants to merge 1 commit into
IABTechLab:mainfrom
aleksUIX:fix/deterministic-default-catalog-ids

Conversation

@aleksUIX

Copy link
Copy Markdown
Contributor

Problem

The last live piece of #34 observation 1. In default (non-CSV) mode, build_static_product_catalog mints prod-{uuid4().hex[:8]} ids at build time, and the catalog cache is per process. Any deployment with more than one process reproduces the reported symptom: GET /products served by worker A returns ids that GET /products/{id} on worker B has never seen, so the lookup 404s. The repo's own image runs uvicorn --workers 2 (infra/docker/Dockerfile:82), and a restart between list and get does the same thing. The CSV-mode side of this was already fixed in v2.2.2 by reading ids from the CSV.

Change

Derive each id with uuid5(NAMESPACE_URL, "ad-seller-product:{name}") instead of uuid4. Ids keep the exact prod-[0-9a-f]{8} shape pinned by test_default_mode_ids_stay_uuid_shaped_and_stable, stay unique per product, and are now identical in every process and across restarts.

Adds test_default_mode_ids_survive_cache_reset: rebuilds the catalog after reset_catalog_cache() (the single-process proxy for a second worker) and asserts the id set is unchanged, plus uniqueness across the 13 configs.

Verification

Ran the catalog build in two separate Python processes: identical id sets, all shape-conformant, 13 unique ids. The new test passes; note the full suite needs the iab-agentic-primitives dependency, which public clones cannot currently install.

…b#34)

build_static_product_catalog minted prod-{uuid4} ids per process, so any
multi-worker deployment (the shipped Dockerfile runs uvicorn --workers 2)
or a restart between GET /products and GET /products/{id} could 404 on an
id the server itself had just returned. This is the surviving kernel of
issue IABTechLab#34 observation 1; the CSV-mode side was fixed in v2.2.2.

Derive ids with uuid5 over the config name instead: same prod-[0-9a-f]{8}
shape, unique per product, identical in every process. Adds a regression
test that rebuilds the catalog after a cache reset (the single-process
proxy for a second worker) and asserts the id set is unchanged.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant