Oracle: first use of a new graph from two pools at once can fail with ORA-00054
Los mantenedores suelen responder en 1 día
Ya se ha fusionado un pull request relacionado.
- #201 de @jasperblues — fusionado
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 56/100
Línea de trabajo
Start with GraphTables and OracleGraph.ensuring, then read tests/integration/sql/test_graph_tables_on_first_use.py and the linked Drivine TypeScript issue #365 for the concurrent initialization design. Reproduce first use with two separate Oracle pools; add coverage showing both callers proceed and the tables are created once. The issue leaves the fix dependent on what #365 settles.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
What happens: on Oracle, two pools (or processes) that make a new graph's tables at the same moment can fail with ORA-00054 (a TM lock held by another session), not wait. The first-connection ensure (GraphTables, #184, running OracleGraph.ensuring) tolerates ORA-00955 (the object exists) but not ORA-00054, which a second session's DDL gets while the first holds the table's lock.
Seen in the TypeScript library's CI, whose Oracle block is the same design: liberation-data/drivine#365's test "should make the tables once when connections, pools and an object manager first use them together" failed with ORA-00054 … ORA-06512: at line 32. drivine-python's tests (tests/integration/sql/test_graph_tables_on_first_use.py) run concurrent first use within one pool only, where GraphTables' lock serialises it, so they don't reach this.
Expected: first use from separate pools or processes at once makes the tables once and every caller proceeds, as Postgres does with its advisory lock.
A fix: set DDL_LOCK_TIMEOUT for the block (and reset it), or treat ORA-00054 as another session making the tables and check again. Add a test with two separate pools at once on Oracle. Follow whatever liberation-data/drivine#365 settles on.
- Lenguaje dominante
- Python
- Estrellas
- 1
- Forks
- 0
- Merge medio
- 1 h 29 min
- PR fusionados (30 d)
- 136
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de liberation-data/drivine-python
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
liberation-data/drivine-python#250 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
liberation-data/drivine-python#209 ·
Los mantenedores suelen responder en 1 día
-
CI: three Oracle-only tests in test_cypher_compiled.py never run, as -k oracle doesn't select themAbierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
liberation-data/drivine-python#178 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
liberation-data/drivine-python#297 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
liberation-data/drivine-python#295 ·
Los mantenedores suelen responder en 1 día
Todos los issues de liberation-data/drivine-python
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
vllm-project/vllm#64845 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
dekobon/big-code-analysis#1729 ·
Los mantenedores suelen responder en 1 día
-
Add `openai_safety_identifier`, the replacement for the `user` field that `openai_user` sendsAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
pydantic/pydantic-ai#12091 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100