apache/seatunnel

MongoDB connector closeCurrentSplit() masks real errors with NullPointerException

Open

#10,999 创建于 2026年6月3日

在 GitHub 查看
 (2 评论) (0 反应) (1 负责人)Java (1,432 fork)batch import
bughelp wanted

仓库指标

Star
 (6,897 star)
PR 合并指标
 (平均合并 23天) (30 天内合并 98 个 PR)

描述

Summary

If the MongoDB source connector fails to create a cursor (due to connection, auth, or query error), the closeCurrentSplit() method in MongodbReader.java always throws a NullPointerException, masking the root MongoDB error. This affects jobs where parallelism > 1 or where only a single small split is generated. The outcome is that the real error never appears in logs—only the masking NPE.

Steps to Reproduce

  • Use SeaTunnel 2.3.13
  • Configure a MongoDB source with Zeta engine, parallelism > 1
  • Have a small collection or cause a MongoDB connection/query failure
  • Observe the stack trace:
java.lang.NullPointerException at org.apache.seatunnel.shade.com.google.common.base.Preconditions.checkNotNull(Preconditions.java:877)
  at org.apache.seatunnel.connectors.seatunnel.mongodb.source.reader.MongodbReader.closeCurrentSplit(MongodbReader.java:153)
  at org.apache.seatunnel.connectors.seatunnel.mongodb.source.reader.MongodbReader.pollNext(MongodbReader.java:104)

Impact

  • Users and deployers see an NPE and cannot diagnose the actual MongoDB connector problem.
  • Real database issues are hidden, causing confusion and unnecessary debug time.

Recommended Fix

Add a null check before attempting to close the cursor:

private void closeCurrentSplit() {
    if (cursor != null) {
        cursor.close();
        cursor = null;
    }
}

Additional Notes

Several downstream mitigations are helpful (force parallelism=1, set split-size high, run schema discovery before job submission) but do not address the issue for all cases.

A connector-side fix is required to allow real MongoDB errors to surface and avoid masking them with a NullPointerException.

贡献者指南