protected void addTxnNumberToCommand(final ServerDescription serverDescription, final ConnectionDescription connectionDescription, final BsonDocument commandDocument, final SessionContext sessionContext) { if (isRetryableWrite(isRetryWrites(), getWriteConcern(), serverDescription, connectionDescription, sessionContext)) { commandDocument.put("txnNumber", new BsonInt64(sessionContext.advanceTransactionNumber())); } }
public static BulkWriteBatch createBulkWriteBatch(final MongoNamespace namespace, final ServerDescription serverDescription, final ConnectionDescription connectionDescription, final boolean ordered, final WriteConcern writeConcern, final Boolean bypassDocumentValidation, final boolean retryWrites, final List<? extends WriteRequest> writeRequests, final SessionContext sessionContext) { if (sessionContext.hasSession() && !sessionContext.isImplicitSession() && !sessionContext.hasActiveTransaction() && !writeConcern.isAcknowledged()) { throw new MongoClientException("Unacknowledged writes are not supported when using an explicit session"); } boolean canRetryWrites = isRetryableWrite(retryWrites, writeConcern, serverDescription, connectionDescription, sessionContext); List<WriteRequestWithIndex> writeRequestsWithIndex = new ArrayList<WriteRequestWithIndex>(); boolean writeRequestsAreRetryable = true; for (int i = 0; i < writeRequests.size(); i++) { WriteRequest writeRequest = writeRequests.get(i); writeRequestsAreRetryable = writeRequestsAreRetryable && isRetryable(writeRequest); writeRequestsWithIndex.add(new WriteRequestWithIndex(writeRequest, i)); } if (canRetryWrites && !writeRequestsAreRetryable) { canRetryWrites = false; LOGGER.debug("retryWrites set but one or more writeRequests do not support retryable writes"); } return new BulkWriteBatch(namespace, connectionDescription, ordered, writeConcern, bypassDocumentValidation, canRetryWrites, new BulkWriteBatchCombiner(connectionDescription.getServerAddress(), ordered, writeConcern), writeRequestsWithIndex, sessionContext); }
@Override public BulkWriteResult call(final ConnectionSource source, final Connection connection) { if (!isRetryableWrite(retryWrites, writeConcern, source.getServerDescription(), connection.getDescription(), binding.getSessionContext())) { return checkMongoWriteConcernWithResponseException(connection); } else { try { retryBatch.addResult(executeCommand(connection, retryBatch, binding)); } catch (Throwable t) { return checkMongoWriteConcernWithResponseException(connection); } return executeBulkWriteBatch(binding, connection, retryBatch.getNextBatch()); } }
@Override public void call(final AsyncConnectionSource source, final AsyncConnection connection, final Throwable t) { if (t != null) { callback.onResult(null, originalError); } else { final ConnectionReleasingWrappedCallback<BulkWriteResult> releasingCallback = new ConnectionReleasingWrappedCallback<BulkWriteResult>(callback, source, connection); if (!isRetryableWrite(retryWrites, writeConcern, source.getServerDescription(), connection.getDescription(), binding.getSessionContext())) { checkMongoWriteConcernWithResponseException(connection, releasingCallback); } else { executeCommandAsync(binding, connection, retryBatch, releasingCallback, new SingleResultCallback<BsonDocument>() { @Override public void onResult(final BsonDocument result, final Throwable t) { if (t != null) { checkMongoWriteConcernWithResponseException(connection, releasingCallback); } else { getCommandCallback(binding, connection, retryBatch, true, true, releasingCallback) .onResult(result, null); } } }); } } }
protected void addTxnNumberToCommand(final ServerDescription serverDescription, final ConnectionDescription connectionDescription, final BsonDocument commandDocument, final SessionContext sessionContext) { if (isRetryableWrite(isRetryWrites(), getWriteConcern(), serverDescription, connectionDescription, sessionContext)) { commandDocument.put("txnNumber", new BsonInt64(sessionContext.advanceTransactionNumber())); } }
public static BulkWriteBatch createBulkWriteBatch(final MongoNamespace namespace, final ServerDescription serverDescription, final ConnectionDescription connectionDescription, final boolean ordered, final WriteConcern writeConcern, final Boolean bypassDocumentValidation, final boolean retryWrites, final List<? extends WriteRequest> writeRequests, final SessionContext sessionContext) { if (sessionContext.hasSession() && !sessionContext.isImplicitSession() && !sessionContext.hasActiveTransaction() && !writeConcern.isAcknowledged()) { throw new MongoClientException("Unacknowledged writes are not supported when using an explicit session"); } boolean canRetryWrites = isRetryableWrite(retryWrites, writeConcern, serverDescription, connectionDescription, sessionContext); List<WriteRequestWithIndex> writeRequestsWithIndex = new ArrayList<WriteRequestWithIndex>(); boolean writeRequestsAreRetryable = true; for (int i = 0; i < writeRequests.size(); i++) { WriteRequest writeRequest = writeRequests.get(i); writeRequestsAreRetryable = writeRequestsAreRetryable && isRetryable(writeRequest); writeRequestsWithIndex.add(new WriteRequestWithIndex(writeRequest, i)); } if (canRetryWrites && !writeRequestsAreRetryable) { canRetryWrites = false; LOGGER.debug("retryWrites set but one or more writeRequests do not support retryable writes"); } return new BulkWriteBatch(namespace, connectionDescription, ordered, writeConcern, bypassDocumentValidation, canRetryWrites, new BulkWriteBatchCombiner(connectionDescription.getServerAddress(), ordered, writeConcern), writeRequestsWithIndex, sessionContext); }
@Override public BulkWriteResult call(final ConnectionSource source, final Connection connection) { if (!isRetryableWrite(retryWrites, writeConcern, source.getServerDescription(), connection.getDescription(), binding.getSessionContext())) { return checkMongoWriteConcernWithResponseException(connection); } else { try { retryBatch.addResult(executeCommand(connection, retryBatch, binding)); } catch (Throwable t) { return checkMongoWriteConcernWithResponseException(connection); } return executeBulkWriteBatch(binding, connection, retryBatch.getNextBatch()); } }
@Override public void call(final AsyncConnectionSource source, final AsyncConnection connection, final Throwable t) { if (t != null) { callback.onResult(null, originalError); } else { final ConnectionReleasingWrappedCallback<BulkWriteResult> releasingCallback = new ConnectionReleasingWrappedCallback<BulkWriteResult>(callback, source, connection); if (!isRetryableWrite(retryWrites, writeConcern, source.getServerDescription(), connection.getDescription(), binding.getSessionContext())) { checkMongoWriteConcernWithResponseException(connection, releasingCallback); } else { executeCommandAsync(binding, connection, retryBatch, releasingCallback, new SingleResultCallback<BsonDocument>() { @Override public void onResult(final BsonDocument result, final Throwable t) { if (t != null) { checkMongoWriteConcernWithResponseException(connection, releasingCallback); } else { getCommandCallback(binding, connection, retryBatch, true, true, releasingCallback) .onResult(result, null); } } }); } } }