private static boolean isRetryable(final WriteRequest writeRequest) { if (writeRequest.getType() == UPDATE || writeRequest.getType() == REPLACE) { return !((UpdateRequest) writeRequest).isMulti(); } else if (writeRequest.getType() == DELETE) { return !((DeleteRequest) writeRequest).isMulti(); } return true; }
@Override protected BsonDocument getAsWriteCommand(final ByteBufferBsonOutput bsonOutput, final int firstDocumentPosition) { List<ByteBufBsonDocument> documents = ByteBufBsonDocument.createList(bsonOutput, firstDocumentPosition); BsonDocument updateDocument = new BsonDocument("q", documents.get(0)).append("u", documents.get(1)); if (updateRequest.isMulti()) { updateDocument.append("multi", BsonBoolean.TRUE); } if (updateRequest.isUpsert()) { updateDocument.append("upsert", BsonBoolean.TRUE); } return getBaseCommandDocument("update").append("updates", new BsonArray(singletonList(updateDocument))); }
@Override protected EncodingMetadata encodeMessageBodyWithMetadata(final BsonOutput bsonOutput) { bsonOutput.writeInt32(0); // reserved bsonOutput.writeCString(getCollectionName()); int flags = 0; if (updateRequest.isUpsert()) { flags |= 1; } if (updateRequest.isMulti()) { flags |= 2; } bsonOutput.writeInt32(flags); int firstDocumentStartPosition = bsonOutput.getPosition(); addDocument(updateRequest.getFilter(), bsonOutput, new NoOpFieldNameValidator()); if (updateRequest.getType() == REPLACE) { addDocument(updateRequest.getUpdate(), bsonOutput, new CollectibleDocumentFieldNameValidator()); } else { int bufferPosition = bsonOutput.getPosition(); addDocument(updateRequest.getUpdate(), bsonOutput, new UpdateFieldNameValidator()); if (bsonOutput.getPosition() == bufferPosition + 5) { throw new IllegalArgumentException("Invalid BSON document for an update"); } } return new EncodingMetadata(firstDocumentStartPosition); }
private static boolean isRetryable(final WriteRequest writeRequest) { if (writeRequest.getType() == UPDATE || writeRequest.getType() == REPLACE) { return !((UpdateRequest) writeRequest).isMulti(); } else if (writeRequest.getType() == DELETE) { return !((DeleteRequest) writeRequest).isMulti(); } return true; }
@Override protected BsonDocument getAsWriteCommand(final ByteBufferBsonOutput bsonOutput, final int firstDocumentPosition) { List<ByteBufBsonDocument> documents = ByteBufBsonDocument.createList(bsonOutput, firstDocumentPosition); BsonDocument updateDocument = new BsonDocument("q", documents.get(0)).append("u", documents.get(1)); if (updateRequest.isMulti()) { updateDocument.append("multi", BsonBoolean.TRUE); } if (updateRequest.isUpsert()) { updateDocument.append("upsert", BsonBoolean.TRUE); } return getBaseCommandDocument("update").append("updates", new BsonArray(singletonList(updateDocument))); }
@Override protected EncodingMetadata encodeMessageBodyWithMetadata(final BsonOutput bsonOutput) { bsonOutput.writeInt32(0); // reserved bsonOutput.writeCString(getCollectionName()); int flags = 0; if (updateRequest.isUpsert()) { flags |= 1; } if (updateRequest.isMulti()) { flags |= 2; } bsonOutput.writeInt32(flags); int firstDocumentStartPosition = bsonOutput.getPosition(); addDocument(updateRequest.getFilter(), bsonOutput, new NoOpFieldNameValidator()); if (updateRequest.getType() == REPLACE) { addDocument(updateRequest.getUpdate(), bsonOutput, new CollectibleDocumentFieldNameValidator()); } else { int bufferPosition = bsonOutput.getPosition(); addDocument(updateRequest.getUpdate(), bsonOutput, new UpdateFieldNameValidator()); if (bsonOutput.getPosition() == bufferPosition + 5) { throw new IllegalArgumentException("Invalid BSON document for an update"); } } return new EncodingMetadata(firstDocumentStartPosition); }