Commit baa3008
committed
Skip :returning_id logging spec on Oracle 23.26 (cursor_sharing=force OCI8 deadlock)
The "does not raise NoMethodError for :returning_id Symbol when logging"
example reliably hangs against Oracle Database 23.26.1.0.0 + ruby-oci8
because the adapter's default `ALTER SESSION SET CURSOR_SHARING = FORCE`
rewrites the IN literal to `:"SYS_B_0"` while the example issues
`RETURNING "ID" INTO :returning_id`. The two-bind shape sends the OCI
piecewise (DATA_AT_EXEC) protocol out of sync: the server enters
`SQL*Net more data from client` while ruby-oci8 stays in
`OCIStmtExecute -> nttfprd -> read()`, producing a half-duplex deadlock
that wedges the rest of the suite.
Diagnosis was confirmed via:
- v$session: ORACLE_ENHANCED session waiting on
`SQL*Net more data from client`, blocking_session NULL, no row
locks held.
- macOS `sample` of the rspec PID: main thread stuck in
oci8_stmt_execute -> OCIStmtExecute -> kpuexec -> ... -> nttfprd ->
read.
- v$parameter: cursor_sharing=EXACT system-wide, but session-level
FORCE applied by oracle_enhanced_adapter.rb:843.
The hang is unrelated to PR #2615 (primary_key_trigger). It exposes a
pre-existing OCI8 / cursor_sharing=force x RETURNING INTO issue that
needs a separate fix; tracked in #2619.1 parent d965525 commit baa3008
1 file changed
Lines changed: 1 addition & 0 deletions
Lines changed: 1 addition & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
318 | 318 | | |
319 | 319 | | |
320 | 320 | | |
| 321 | + | |
321 | 322 | | |
322 | 323 | | |
323 | 324 | | |
| |||
0 commit comments