DTStack / DTStack/chunjun

[Bug] [com/dtstack/chunjun/connector/oraclelogminer/listener/LogMinerConnection.java] 缓存过期,无法找到undoLog,实际存在

Open
#1,790 6 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Java
Stars
4.1k
Forks
1.7k
PR merge metrics
No merged PRs in 30d

Description

### Search before asking

- [X] I had searched in the [issues](https://github.com/DTStack/chunjun/issues) and found no similar issues.

### What happened

com/dtstack/chunjun/connector/oraclelogminer/listener/LogMinerConnection.java
该类的 public boolean hasNext(BigInteger endScn, String endRowid)方法中的一段代码逻辑有问题。
` if (endScn != null && rowId != null) {
if (scn.compareTo(endScn) > 0) {
return false;
}
if (scn.compareTo(endScn) == 0 && rowId.equals(endRowid)) {
return false;
}
}`

首先同一事务下,scn和rowid并不是唯一id,不能用于边界筛选。在执行rollback逻辑的时候,如果TransactionManager的缓存失效,会导致undolog永远也无法找到!因为原逻辑是在递归查找的时候看到scn和rowid相等就返回,但这条数据并不是earliestResolveOperateForRollback上次用于回滚的记录(同一条记录在一个事务内被修改了多次回滚了多次)。

### What you expected to happen

zz

### How to reproduce

v$logmnr_contents是否有字段是递增不重复的?如果用,才能解决这个问题,但是对这玩意也不太熟,网上查了rs_id貌似满足这个条件

### Anything else

_No response_

### Version

master

### Are you willing to submit PR?

- [X] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://www.apache.org/foundation/policies/conduct)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.