apache/seatunnel

MongoDB connector closeCurrentSplit() masks real errors with NullPointerException

Open

#10.999 aperta il 3 giu 2026

Vedi su GitHub
 (2 commenti) (0 reazioni) (1 assegnatario)Java (1432 fork)batch import
bughelp wanted

Metriche repository

Star
 (6897 star)
Metriche merge PR
 (Merge medio 23g) (98 PR mergiate in 30 g)

Descrizione

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.

Guida contributor