private CommandTransformer<BsonDocument, AsyncBatchCursor<T>> asyncTransformer(final AsyncConnectionSource source, final AsyncConnection connection) { return new CommandTransformer<BsonDocument, AsyncBatchCursor<T>>() { @Override public AsyncBatchCursor<T> apply(final BsonDocument result, final ServerAddress serverAddress) { return cursorDocumentToAsyncBatchCursor(result.getDocument("cursor"), decoder, source, connection, batchSize); } }; }
private BsonDocument getCursorDocument(final BsonDocument cursorDocument) { return cursorDocument.getDocument("cursor"); }
@Override public BatchCursor<T> apply(final BsonDocument result, final ServerAddress serverAddress) { return cursorDocumentToBatchCursor(result.getDocument("cursor"), decoder, source, batchSize); } };
@Override public AsyncBatchCursor<T> apply(final BsonDocument result, final ServerAddress serverAddress) { return cursorDocumentToAsyncBatchCursor(result.getDocument("cursor"), decoder, source, connection, batchSize); } };
private static int getInputCount(final BsonDocument result) { return result.getDocument("counts").getNumber("input").intValue(); }
private static int getOutputCount(final BsonDocument result) { return result.getDocument("counts").getNumber("output").intValue(); }
private static Date getLastWriteDate(final BsonDocument isMasterResult) { if (!isMasterResult.containsKey("lastWrite")) { return null; } return new Date(isMasterResult.getDocument("lastWrite").getDateTime("lastWriteDate").getValue()); }
private static int getEmitCount(final BsonDocument result) { return result.getDocument("counts").getNumber("emit").intValue(); }
@SuppressWarnings("unchecked") @Override public T apply(final BsonDocument result, final ServerAddress serverAddress) { if (hasWriteConcernError(result)) { throw new MongoWriteConcernException( createWriteConcernError(result.getDocument("writeConcernError")), createWriteConcernResult(result.getDocument("lastErrorObject", new BsonDocument())), serverAddress); } if (!result.isDocument("value")) { return null; } return BsonDocumentWrapperHelper.toDocument(result.getDocument("value", null)); } };
public static MongoWriteConcernException createWriteConcernException(final BsonDocument result, final ServerAddress serverAddress) { return new MongoWriteConcernException(createWriteConcernError(result.getDocument("writeConcernError")), WriteConcernResult.acknowledged(0, false, null), serverAddress); }
@Override public <TDocument> BsonDocument toBsonDocument(final Class<TDocument> tDocumentClass, final CodecRegistry codecRegistry) { BsonDocument document = new BsonDocument(); for (Bson update : updates) { BsonDocument rendered = update.toBsonDocument(tDocumentClass, codecRegistry); for (Map.Entry<String, BsonValue> element : rendered.entrySet()) { if (document.containsKey(element.getKey())) { BsonDocument currentOperatorDocument = (BsonDocument) element.getValue(); BsonDocument existingOperatorDocument = document.getDocument(element.getKey()); for (Map.Entry<String, BsonValue> currentOperationDocumentElements : currentOperatorDocument.entrySet()) { existingOperatorDocument.append(currentOperationDocumentElements.getKey(), currentOperationDocumentElements.getValue()); } } else { document.append(element.getKey(), element.getValue()); } } } return document; }
private void initFromCommandResult(final BsonDocument getMoreCommandResultDocument) { QueryResult<T> queryResult = getMoreCursorDocumentToQueryResult(getMoreCommandResultDocument.getDocument("cursor"), connectionSource.getServerDescription().getAddress()); initFromQueryResult(queryResult); }
public static MongoException createSpecialException(final BsonDocument response, final ServerAddress serverAddress, final String errorMessageFieldName) { if (response == null) { return null; } int errorCode = getErrorCode(response); String errorMessage = getErrorMessage(response, errorMessageFieldName); if (ErrorCategory.fromErrorCode(errorCode) == ErrorCategory.EXECUTION_TIMEOUT) { return new MongoExecutionTimeoutException(errorCode, errorMessage); } else if (errorMessage.contains("not master or secondary") || errorMessage.contains("node is recovering") || RECOVERING_CODES.contains(errorCode)) { return new MongoNodeIsRecoveringException(response, serverAddress); } else if (errorMessage.contains("not master") || NOT_MASTER_CODES.contains(errorCode)) { return new MongoNotPrimaryException(response, serverAddress); } else if (response.containsKey("writeConcernError")) { return createSpecialException(response.getDocument("writeConcernError"), serverAddress, "errmsg"); } else { return null; } }
private QueryResult<T> documentToQueryResult(final BsonDocument result, final ServerAddress serverAddress) { QueryResult<T> queryResult; if (isExplain()) { T decodedDocument = decoder.decode(new BsonDocumentReader(result), DecoderContext.builder().build()); queryResult = new QueryResult<T>(getNamespace(), Collections.singletonList(decodedDocument), 0, serverAddress); } else { queryResult = cursorDocumentToQueryResult(result.getDocument("cursor"), serverAddress); } return queryResult; }
@SuppressWarnings("unchecked") private static List<BulkWriteError> getWriteErrors(final BsonDocument result) { List<BulkWriteError> writeErrors = new ArrayList<BulkWriteError>(); BsonArray writeErrorsDocuments = (BsonArray) result.get("writeErrors"); if (writeErrorsDocuments != null) { for (BsonValue cur : writeErrorsDocuments) { BsonDocument curDocument = (BsonDocument) cur; writeErrors.add(new BulkWriteError(curDocument.getNumber("code").intValue(), curDocument.getString("errmsg").getValue(), curDocument.getDocument("errInfo", new BsonDocument()), curDocument.getNumber("index").intValue())); } } return writeErrors; }
@SuppressWarnings("unchecked") private List<BulkWriteError> getWriteErrors(final BsonDocument result) { List<BulkWriteError> writeErrors = new ArrayList<BulkWriteError>(); BsonArray writeErrorsDocuments = (BsonArray) result.get("writeErrors"); if (writeErrorsDocuments != null) { for (BsonValue cur : writeErrorsDocuments) { BsonDocument curDocument = (BsonDocument) cur; writeErrors.add(new BulkWriteError(curDocument.getNumber("code").intValue(), curDocument.getString("errmsg").getValue(), curDocument.getDocument("errInfo", new BsonDocument()), curDocument.getNumber("index").intValue())); } } return writeErrors; }
private QueryResult<T> createQueryResult(final BsonDocument result, final ConnectionDescription description) { if (!isInline(description) || result.containsKey(CURSOR)) { return cursorDocumentToQueryResult(result.getDocument(CURSOR), description.getServerAddress()); } else { return new QueryResult<T>(namespace, BsonDocumentWrapperHelper.<T>toList(result, RESULT), 0L, description.getServerAddress()); } }
BsonDocument getCommandDocument(final ByteBufferBsonOutput bsonOutput) { ByteBufBsonDocument byteBufBsonDocument = ByteBufBsonDocument.createOne(bsonOutput, getEncodingMetadata().getFirstDocumentPosition()); BsonDocument commandBsonDocument; if (useOpMsg() && containsPayload()) { commandBsonDocument = byteBufBsonDocument.toBsonDocument(); int payloadStartPosition = getEncodingMetadata().getFirstDocumentPosition() + byteBufBsonDocument.getSizeInBytes() + 1 // payload type + 4 // payload size + payload.getPayloadName().getBytes(Charset.forName("UTF-8")).length + 1; // null-terminated UTF-8 payload name commandBsonDocument.append(payload.getPayloadName(), new BsonArray(ByteBufBsonDocument.createList(bsonOutput, payloadStartPosition))); } else { commandBsonDocument = byteBufBsonDocument; } if (commandBsonDocument.containsKey("$query")) { commandBsonDocument = commandBsonDocument.getDocument("$query"); } return commandBsonDocument; }
public static WriteConcernError createWriteConcernError(final BsonDocument writeConcernErrorDocument) { return new WriteConcernError(writeConcernErrorDocument.getNumber("code").intValue(), writeConcernErrorDocument.getString("codeName", new BsonString("")).getValue(), writeConcernErrorDocument.getString("errmsg").getValue(), writeConcernErrorDocument.getDocument("errInfo", new BsonDocument())); }
@Override public GridFSFile decode(final BsonReader reader, final DecoderContext decoderContext) { BsonDocument bsonDocument = bsonDocumentCodec.decode(reader, decoderContext); BsonValue id = bsonDocument.get("_id"); String filename = bsonDocument.get("filename", new BsonString("")).asString().getValue(); long length = bsonDocument.getNumber("length").longValue(); int chunkSize = bsonDocument.getNumber("chunkSize").intValue(); Date uploadDate = new Date(bsonDocument.getDateTime("uploadDate").getValue()); String md5 = bsonDocument.containsKey("md5") ? bsonDocument.getString("md5").getValue() : null; BsonDocument metadataBsonDocument = bsonDocument.getDocument("metadata", new BsonDocument()); Document optionalMetadata = asDocumentOrNull(metadataBsonDocument); for (String key : VALID_FIELDS) { bsonDocument.remove(key); } Document deprecatedExtraElements = asDocumentOrNull(bsonDocument); return new GridFSFile(id, filename, length, chunkSize, uploadDate, md5, optionalMetadata, deprecatedExtraElements); }