mirror of
https://github.com/vectorize-io/hindsight.git
synced 2026-09-14 19:31:49 +08:00
perf/profiling-env
1 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
d39a2ca618 |
feat(oracle): unify migrations under Alembic with dialect dispatcher (#1330)
* feat(oracle): unify migrations under Alembic with dialect dispatcher
Oracle DDL was a 636-line idempotent file (`migrations_oracle.py`) outside
Alembic, which meant no version tracking, no per-tenant version table, and
schema drift every time a PG migration was added without a corresponding
Oracle change. This unifies both backends behind a single Alembic tree.
- New `alembic/_dialect.py::run_for_dialect(pg=, oracle=)` helper. Each
migration declares `_pg_upgrade` / `_oracle_upgrade` and dispatches based
on the live connection's dialect.
- `alembic/env.py` is dialect-aware: PG keeps the existing search_path /
read-write session setup; Oracle uses `ALTER SESSION SET CURRENT_SCHEMA`
and `DDL_LOCK_TIMEOUT`.
- `alembic/script.py.mako` scaffolds the new pattern by default.
- All 59 existing PG migrations refactored mechanically — bodies moved into
`_pg_upgrade` / `_pg_downgrade`, top-level dispatchers added.
- New `o1a2b3c4d5e6_oracle_baseline` migration brings a fresh Oracle 23ai
database to the current schema in one step (PG = no-op). Drops the legacy
partition-conversion / dedup / `observation_sources` backfill since those
only existed for pre-baseline Oracle installs we explicitly are not
supporting.
- `OracleBackend.run_migrations()` now goes through the unified Alembic
pipeline; `migrations.py` skips the PG-specific advisory lock + pgvector
setup when the URL is Oracle.
- `migrations_oracle.py` deleted; tests updated to use `run_migrations()`.
- New `tests/test_migration_shape.py` lint fails CI if any migration omits
`run_for_dialect` — keeps drift from re-emerging.
- CLAUDE.md updated with the new template and dialect-asymmetry guidance.
* ci: run client integration tests against Oracle on oracle-tests label
Adds test-python-client-oracle and test-typescript-client-oracle. These
mirror the existing test-python-client / test-typescript-client jobs but
spin up Oracle 23ai as a service container and point the API server at it
via HINDSIGHT_API_DATABASE_BACKEND=oracle + DATABASE_URL.
Why a new job instead of matrixing the existing one: Oracle Free's image
takes ~2min to start and is network-heavy, so we don't want to pay that
cost on every PR — only when oracle-tests is opted in via the PR label,
matching the existing test-api-oracle gate.
Why client tests, not unit tests: the unit suite already runs against
both backends via the abstraction layer. Only the client tests exercise
full HTTP round-trips with real serialized payloads, so they catch API
changes that work on PG but break on Oracle (or vice versa) in ways the
abstraction can't see.
* refactor(oracle): tighten feature requirements and dedup is_oracle_url
- Move is_oracle_url to db_url.py and import from there in env.py and
migrations.py — was duplicated in both.
- Type-annotate _configure_pg_session / _configure_oracle_session params
(Engine, Connection); ty checks pass.
- Update the Oracle baseline comment around vector + text index creation
to make the hard requirement explicit: VECTOR + CTXSYS must be
available, the migration fails hard if either is missing. The
swallow-only-ORA-00955 behavior was already correct; the previous
comment misleadingly called it "best-effort".
* chore(openclaw): apply pending prettier reformat to keep verify-generated-files green
Three formatting-only changes prettier wants to make. They've been stale
on main; CI's verify-generated-files runs lint with LINT_ALL=1 (vs the
"only changed integrations" local default), which surfaces them on every
unrelated PR. Folding them in here so this PR can land.
* fix(retain): plumb ops through handle_document_tracking
Line 312 of fact_storage.py references ``ops`` without ``handle_document_tracking``
declaring it as a parameter — straight NameError on every retain that walks
the upsert path. Bug landed on main in
|