Uploaded image for project: 'Java Driver'
  1. Java Driver
  2. JAVA-2928

Detect if transactions are not supported by the server

    XMLWordPrintable

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Major - P3
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 3.11.0
    • Component/s: Transaction Management
    • Labels:
      None

      Description

      When running:

      ClientSession clientSession = mongoClient.startSession();
      clientSession.startTransaction();
      collection.insertOne(clientSession, Document.parse("{_id: 1, a: 1}"));
      collection.insertOne(clientSession, Document.parse("{_id: 2, a: 1}"));
      clientSession.commitTransaction();
      clientSession.close();
      

      Against a 3.6 replicaset or sharded cluster the user gets the following error:

      Exception in thread "main" com.mongodb.MongoCommandException: Command failed with error 40415 (Location40415): 'BSON field 'insert.startTransaction' is an unknown field.' on server localhost:27017. The full response is { "operationTime" : { "$timestamp" : { "t" : 1534322289, "i" : 4 } }, "ok" : 0.0, "errmsg" : "BSON field 'insert.startTransaction' is an unknown field.", "code" : 40415, "codeName" : "Location40415", "$clusterTime" : { "clusterTime" : { "$timestamp" : { "t" : 1534322289, "i" : 4 } }, "signature" : { "hash" : { "$binary" : "AAAAAAAAAAAAAAAAAAAAAAAAAAA=", "$type" : "00" }, "keyId" : { "$numberLong" : "0" } } } }
      

      Its quite unclear as to what the cause of the actual issue is.

      For other scenarios the errors are much clearer:

      • Single Node: com.mongodb.MongoClientException: Sessions are not supported by the MongoDB cluster to which this client is connected
      • Sharded cluster: com.mongodb.MongoCommandException: Command failed with error 50841 (Location50841): 'Multi-document transactions cannot be run in a sharded cluster.'

      The spec states:

      startTransaction SHOULD report an error if the driver can detect that transactions are not supported by the deployment.

      A wire check would allow for clearer error messages for users trying to use transactions on an older server.

        Attachments

          Activity

            People

            • Votes:
              1 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: