Skip to content

Commit 22edc81

Browse files
committed
Revert "fix(unconfirmed): guard Reader status overwrite during RAC archive transitions"
This reverts commit a79f8a3cca2cf4d72cd060bb607fa088ca848f59.
1 parent 9ffb1a0 commit 22edc81

4 files changed

Lines changed: 19 additions & 9 deletions

File tree

UPSTREAM-CHANGES.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ Multi-thread redo log processing for Oracle RAC.
3737
| 1a2d316b | LOB INSERT preserved from phantom undo in streaming | Transaction.cpp | [#10](https://github.com/rophy/olr/issues/10) |
3838
| ddf6bc04 | skip truncated URP null bitmap instead of abort | OpCode0504.cpp ||
3939
| 7cbd0580 | decode ROWID column type (type# 69) | Builder.cpp, SysCol.h, BuilderJson.* | [#15](https://github.com/rophy/olr/issues/15) |
40-
|| Reader status overwrite race during RAC archive transitions | Reader.cpp | [#14](https://github.com/rophy/olr/issues/14) |
4140

4241
**Upstream PR candidates:** All — these are correctness fixes
4342

src/reader/Reader.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -752,8 +752,7 @@ namespace OpenLogReplicator {
752752
{
753753
contextSet(CONTEXT::MUTEX, REASON::READER_SLEEP2);
754754
std::unique_lock const lck(mtx);
755-
if (status == STATUS::READ)
756-
status = STATUS::SLEEPING;
755+
status = STATUS::SLEEPING;
757756
condParserSleeping.notify_all();
758757
}
759758
contextSet(CONTEXT::CPU);

tests/KNOWN-LIMITATIONS.md

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -230,14 +230,26 @@ no output for the scenario.
230230

231231
---
232232

233-
## L10. ~~OLR Crash on RAC LOB + Log Switch~~ (FIXED)
233+
## L10. OLR Crash on RAC LOB + Log Switch
234234

235-
**Fixed** by guarding Reader status overwrite at `Reader.cpp:755` — only set
236-
`STATUS::SLEEPING` if status is still `STATUS::READ`, preserving `CHECK`/`UPDATE`
237-
set by other threads during the READ loop.
235+
OLR crashes with a null pointer dereference in `Reader.cpp:111` when
236+
processing heavy LOB operations spanning multiple log switches on RAC.
237+
238+
**Evidence — test output (2026-03-16):**
239+
240+
```
241+
Reader.cpp:111:21: runtime error: load of null pointer of type 'uint8_t'
242+
```
243+
244+
Occurs when advancing to a new archive log sequence on thread 2 during
245+
`rac-lob-log-switch` scenario (40 LOB inserts + 10 updates + 10 deletes
246+
across both nodes).
238247

239248
**Tracked:** [rophy/olr#14](https://github.com/rophy/olr/issues/14)
240249

250+
**Test handling:** `rac-lob-log-switch` scenario cannot be used until bug is
251+
fixed.
252+
241253
---
242254

243255
## L11. OLR Does Not Support Invisible Columns
@@ -293,6 +305,6 @@ applies at DB creation, not pre-built).
293305
|----|------------|-------|---------------|
294306
| L8 | ROWID column (type# 69) not decoded | [#15](https://github.com/rophy/olr/issues/15) | `rowid-column` |
295307
| L9 | IOT not discovered in metadata | [#16](https://github.com/rophy/olr/issues/16) | `iot-table` |
296-
| ~~L10~~ | ~~RAC LOB + log switch null pointer crash~~ **(FIXED)** | [#14](https://github.com/rophy/olr/issues/14) | |
308+
| L10 | RAC LOB + log switch null pointer crash | [#14](https://github.com/rophy/olr/issues/14) | `rac-lob-log-switch` |
297309
| L11 | Invisible columns not tracked |||
298310
| L12 | US7ASCII charset corruption | [#2](https://github.com/rophy/olr/issues/2) | `multibyte-passthrough` (@TAG) |

tests/sql/TEST-COVERAGE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ All limitations reference entries in [`KNOWN-LIMITATIONS.md`](KNOWN-LIMITATIONS.
9191
| US7ASCII charset | OLR charset bug ([#2](https://github.com/rophy/olr/issues/2)) | L12 |
9292
| Invisible columns | No property flag in SysCol | L11 |
9393
| IOT | OLR doesn't discover IOTs in metadata | L9 |
94-
| ~~RAC LOB + log switch~~ | ~~OLR crash~~ **(FIXED)** ([#14](https://github.com/rophy/olr/issues/14)) | ~~L10~~ |
94+
| RAC LOB + log switch | OLR crash ([#14](https://github.com/rophy/olr/issues/14)) | L10 |
9595

9696
> **Note:** DDL scenarios (`@DDL` marker) are validated in redo-log regression tests (LogMiner comparison)
9797
> but **not** in Debezium twin-test. The Debezium OLR adapter does not support mid-stream

0 commit comments

Comments
 (0)