[Bug] [com/dtstack/chunjun/connector/oraclelogminer/listener/LogMinerConnection.java] 缓存过期,无法找到undoLog,实际存在
- 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
Assessment
This issue has not been assessed yet.