use of com.eightkdata.mongowp.messages.request.QueryMessage.QueryOption in project torodb by torodb.
the class AbstractMongoOplogReader method queryGte.
@Override
public MongoCursor<OplogOperation> queryGte(OpTime lastFetchedOpTime) throws MongoException {
BsonDocument query = DefaultBsonValues.newDocument("ts", DefaultBsonValues.newDocument("$gte", lastFetchedOpTime.getTimestamp()));
EnumSet<QueryOption> flags = EnumSet.of(QueryOption.AWAIT_DATA, QueryOption.TAILABLE_CURSOR);
return query(query, flags, NATURAL_ORDER_SORT);
}
use of com.eightkdata.mongowp.messages.request.QueryMessage.QueryOption in project torodb by torodb.
the class AbstractMongoOplogReader method getFirstOrLastOp.
private OplogOperation getFirstOrLastOp(boolean first) throws OplogStartMissingException, OplogOperationUnsupported, MongoException {
Preconditions.checkState(!isClosed(), "You have to connect this client before");
BsonDocument query = DefaultBsonValues.EMPTY_DOC;
BsonDocument orderBy = first ? NATURAL_ORDER_SORT : INVERSE_ORDER_SORT;
EnumSet<QueryOption> flags = EnumSet.of(QueryOption.SLAVE_OK);
BsonDocument doc;
MongoConnection connection = consumeConnection();
try {
MongoCursor<BsonDocument> cursor = connection.query(DATABASE, COLLECTION, query, 0, 1, new QueryOptions(flags), orderBy, null);
try {
Batch<BsonDocument> batch = cursor.fetchBatch();
try {
if (!batch.hasNext()) {
throw new OplogStartMissingException(getSyncSource());
}
doc = batch.next();
} finally {
batch.close();
}
} finally {
cursor.close();
}
try {
return OplogOperationParser.fromBson(doc);
} catch (BadValueException | TypesMismatchException | NoSuchKeyException ex) {
throw new OplogOperationUnsupported(doc, ex);
}
} finally {
releaseConnection(connection);
}
}
use of com.eightkdata.mongowp.messages.request.QueryMessage.QueryOption in project torodb by torodb.
the class TransactionalDbCloner method cloneCollection.
private void cloneCollection(String toDb, MongoConnection remoteConnection, WriteMongodTransaction transaction, CloneOptions opts, String collection, CollectionOptions collOptions) throws MongoException, CloningException {
String fromDb = opts.getDbToClone();
LOGGER.info("Cloning {}.{} into {}.{}", fromDb, collection, toDb, collection);
//TODO: enable exhaust?
EnumSet<QueryOption> queryFlags = EnumSet.of(QueryOption.NO_CURSOR_TIMEOUT);
if (opts.isSlaveOk()) {
queryFlags.add(QueryOption.SLAVE_OK);
}
MongoCursor<BsonDocument> cursor = remoteConnection.query(opts.getDbToClone(), collection, null, 0, 0, new QueryOptions(queryFlags), null, null);
while (!cursor.hasNext()) {
List<? extends BsonDocument> docsToInsert = cursor.fetchBatch().asList();
Status<InsertResult> insertResult = transaction.execute(new Request(toDb, null, true, null), InsertCommand.INSTANCE, new InsertArgument.Builder(collection).addDocuments(docsToInsert).setWriteConcern(WriteConcern.fsync()).setOrdered(true).build());
if (!insertResult.isOk() || insertResult.getResult().getN() != docsToInsert.size()) {
throw new CloningException("Error while inserting a cloned document");
}
}
}
use of com.eightkdata.mongowp.messages.request.QueryMessage.QueryOption in project torodb by torodb.
the class AbstractMongoOplogReader method between.
@Override
public MongoCursor<OplogOperation> between(OpTime from, boolean includeFrom, OpTime to, boolean includeTo) throws MongoException {
BsonArrayBuilder conditions = new BsonArrayBuilder();
conditions.add(DefaultBsonValues.newDocument("ts", DefaultBsonValues.newDocument(includeFrom ? "$gte" : "$gt", from.getTimestamp())));
conditions.add(DefaultBsonValues.newDocument("ts", DefaultBsonValues.newDocument(includeTo ? "$lte" : "$lt", to.getTimestamp())));
EnumSet<QueryOption> flags = EnumSet.noneOf(QueryOption.class);
return query(DefaultBsonValues.newDocument("$and", conditions.build()), flags, NATURAL_ORDER_SORT);
}
Aggregations