public O2MSyncDataLoader getPendingDataLoader() { O2MSyncDataLoader loader = null; Document document = syncEventDoc.findOneAndUpdate( Filters.and(Filters.eq(SyncAttrs.STATUS, SyncStatus.PENDING), Filters.eq(SyncAttrs.EVENT_TYPE, String.valueOf(EventType.System))), Updates.set(SyncAttrs.STATUS, SyncStatus.IN_PROGRESS), new FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER) .projection(Projections.include(SyncAttrs.SOURCE_DB_NAME, SyncAttrs.SOURCE_USER_NAME))); if (document != null && !document.isEmpty()) { Object interval = document.get(SyncAttrs.INTERVAL); String appName = document.getString(SyncAttrs.APPLICATION_NAME); if(interval!=null && interval instanceof Long){ loader = new O2MSyncDataLoader((Long)interval, appName); }else{ loader = new O2MSyncDataLoader(120000, appName); } loader.setEventId(document.getObjectId(SyncAttrs.ID)); loader.setDbName(document.getString(SyncAttrs.SOURCE_DB_NAME)); loader.setDbUserName(document.getString(SyncAttrs.SOURCE_USER_NAME)); loader.setStatus(document.getString(SyncAttrs.STATUS)); } return loader; }
protected final FluentFuture<Optional<T>> doModify( final Constraints.ConstraintHost criteria, final Constraints.Constraint update, final FindOneAndUpdateOptions options) { checkNotNull(criteria, "criteria"); checkNotNull(update, "update"); return submit(new Callable<Optional<T>>() { @Override public Optional<T> call() throws Exception { @Nullable T result = collection().findOneAndUpdate( convertToBson(criteria), convertToBson(update), options); return Optional.fromNullable(result); } }); }
protected final FluentFuture<Integer> doUpdateFirst( final Constraints.ConstraintHost criteria, final Constraints.Constraint update, final FindOneAndUpdateOptions options ) { checkNotNull(criteria, "criteria"); checkNotNull(update, "update"); checkNotNull(options, "options"); return submit(new Callable<Integer>() { @Override public Integer call() { T result = collection().findOneAndUpdate( convertToBson(criteria), convertToBson(update), options); return result == null ? 0 : 1; } }); }
@Override public Optional<T> peek() { final Bson peekQuery = QueryUtil.generatePeekQuery(defaultHeartbeatExpirationMillis); final Document update = new Document(); update.put("heartbeat", new Date()); update.put("status", OkraStatus.PROCESSING.name()); final FindOneAndUpdateOptions options = new FindOneAndUpdateOptions(); options.returnDocument(ReturnDocument.AFTER); final Document document = client .getDatabase(getDatabase()) .getCollection(getCollection()) .findOneAndUpdate(peekQuery, new Document("$set", update), options); if (document == null) { return Optional.empty(); } return Optional.ofNullable(serializer.fromDocument(scheduleItemClass, document)); }
@Test public void updatePojoTest() { Bson update = combine(set("user", "Jim"), set("action", Action.DELETE), // unfortunately at this point we need to provide a non generic class, so the codec is able to determine all types // remember: type erasure makes it impossible to retrieve type argument values at runtime // @todo provide a mechanism to generate non-generic class on the fly. Is that even possible ? // set("listOfPolymorphicTypes", buildNonGenericClassOnTheFly(Arrays.asList(new A(123), new B(456f)), List.class, Type.class), set("listOfPolymorphicTypes", new PolymorphicTypeList(Arrays.asList(new A(123), new B(456f)))), currentDate("creationDate"), currentTimestamp("_id")); FindOneAndUpdateOptions findOptions = new FindOneAndUpdateOptions(); findOptions.upsert(true); findOptions.returnDocument(ReturnDocument.AFTER); MongoCollection<Pojo> pojoMongoCollection = mongoClient.getDatabase("test").getCollection("documents").withDocumentClass(Pojo.class); Pojo pojo = pojoMongoCollection.findOneAndUpdate(Filters.and(Filters.lt(DBCollection.ID_FIELD_NAME, 0), Filters.gt(DBCollection.ID_FIELD_NAME, 0)), update, findOptions); assertNotNull(pojo.id); }
@Override public TDocument findOneAndUpdate(Bson filter, Bson arg1, FindOneAndUpdateOptions arg2) { OperationMetric metric = null; if (MongoLogger.GATHERER.isEnabled()) { List<String> keyValuePairs = MongoUtilities.getKeyValuePairs(filter); keyValuePairs.add("update"); keyValuePairs.add(CacheUtilities.safeToString(arg1)); String operationName = "Mongo : " + getNamespace().getCollectionName() + " : findOneAndUpdate " + MongoUtilities.filterParameters(filter).toString(); metric = startMetric(operationName, keyValuePairs); if (MongoLogger.isRequestSizeMeasured()) { metric.setProperty(CommonMetricProperties.REQUEST_SIZE_BYTES, Integer.toString(measureDocumentSize(arg1))); } addWriteConcern(metric); addReadConcernAndPreference(metric); } TDocument retVal = collection.findOneAndUpdate(filter, arg1, arg2); stopMetric(metric, measureDocumentSizeIfResultSizeEnabled(retVal)); return retVal; }
@Override public Long getNextIdGen(Long interval) { Document realUpdate = getIncUpdateObject(getUpdateObject(interval)); FindOneAndUpdateOptions options = new FindOneAndUpdateOptions() .upsert(true) .returnDocument(ReturnDocument.AFTER); Document ret = getIdGenCollection().findOneAndUpdate(getQueryObject(), realUpdate, options); if (ret == null) return null; Boolean valid = (Boolean) ret.get(VALID); if (valid != null && !valid) { throw RaptureExceptionFactory.create(HttpURLConnection.HTTP_BAD_REQUEST, mongoMsgCatalog.getMessage("IdGenerator")); } return (Long) ret.get(SEQ); }
@Override public void updateRow(String rowId, Map<String, Object> recordValues) { String key = getKey(rowId); // stupid key is row id plus "l/" prepended // to it MongoCollection<Document> collection = MongoDBFactory.getCollection(instanceName, tableName); Document query = new Document(); query.put(KEY, key); Document toPut = new Document(); toPut.put(KEY, key); toPut.put(ROWID, rowId); toPut.put(EPOCH, EpochManager.nextEpoch(collection)); toPut.putAll(recordValues); FindOneAndUpdateOptions options = new FindOneAndUpdateOptions().upsert(true).returnDocument(ReturnDocument.AFTER); @SuppressWarnings("unused") Document ret = collection.findOneAndUpdate(query, new Document($SET, toPut), options); }
@Override public boolean insertRecord(LockConfiguration lockConfiguration) { Bson update = combine( setOnInsert(LOCK_UNTIL, Date.from(lockConfiguration.getLockAtMostUntil())), setOnInsert(LOCKED_AT, now()), setOnInsert(LOCKED_BY, hostname) ); try { Document result = getCollection().findOneAndUpdate( eq(ID, lockConfiguration.getName()), update, new FindOneAndUpdateOptions().upsert(true) ); return result == null; } catch (MongoCommandException e) { if (e.getErrorCode() == 11000) { // duplicate key // this should not normally happen, but it happened once in tests return false; } else { throw e; } } }
@ExtDirectMethod(ExtDirectMethodType.FORM_POST) public ExtDirectFormPostResult resetRequest( @RequestParam("email") String emailOrLoginName) { String token = UUID.randomUUID().toString(); User user = this.mongoDb.getCollection(User.class).findOneAndUpdate( Filters.and( Filters.or(Filters.eq(CUser.email, emailOrLoginName), Filters.eq(CUser.loginName, emailOrLoginName)), Filters.eq(CUser.deleted, false)), Updates.combine( Updates.set(CUser.passwordResetTokenValidUntil, Date.from(ZonedDateTime.now(ZoneOffset.UTC).plusHours(4) .toInstant())), Updates.set(CUser.passwordResetToken, token)), new FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER) .upsert(false)); if (user != null) { this.mailService.sendPasswortResetEmail(user); } return new ExtDirectFormPostResult(); }
/** * Saves a set of {@link ProtectedRegion} for the specified world to database. * * @param world The name of the world * @param set The {@link Set} of regions * @throws StorageException Thrown if something goes wrong during database query */ public void saveAll(final String world, Set<ProtectedRegion> set) throws StorageException { MongoCollection<ProcessingProtectedRegion> collection = getCollection(); final AtomicReference<Throwable> lastError = new AtomicReference<>(); final CountDownLatch waiter = new CountDownLatch(set.size()); for (final ProtectedRegion region : set) { if (listener != null) listener.beforeDatabaseUpdate(world, region); collection.findOneAndUpdate( Filters.and(Filters.eq("name", region.getId()), Filters.eq("world", world)), new Document("$set", new ProcessingProtectedRegion(region, world)), new FindOneAndUpdateOptions().upsert(true).returnDocument(ReturnDocument.AFTER), OperationResultCallback.create(lastError, waiter, new UpdateCallback(world)) ); } ConcurrentUtils.safeAwait(waiter); Throwable realLastError = lastError.get(); if (realLastError != null) throw new StorageException("An error occurred while saving or updating in MongoDB.", realLastError); }
@Override public io.vertx.ext.mongo.MongoClient findOneAndUpdateWithOptions(String collection, JsonObject query, JsonObject update, FindOptions findOptions, UpdateOptions updateOptions, Handler<AsyncResult<JsonObject>> resultHandler) { requireNonNull(collection, "collection cannot be null"); requireNonNull(query, "query cannot be null"); requireNonNull(update, "update cannot be null"); requireNonNull(findOptions, "find options cannot be null"); requireNonNull(updateOptions, "update options cannot be null"); requireNonNull(resultHandler, "resultHandler cannot be null"); JsonObject encodedQuery = encodeKeyWhenUseObjectId(query); Bson bquery = wrap(encodedQuery); Bson bupdate = wrap(update); FindOneAndUpdateOptions foauOptions = new FindOneAndUpdateOptions(); foauOptions.sort(wrap(findOptions.getSort())); foauOptions.projection(wrap(findOptions.getFields())); foauOptions.upsert(updateOptions.isUpsert()); foauOptions.returnDocument(updateOptions.isReturningNewDocument() ? ReturnDocument.AFTER : ReturnDocument.BEFORE); MongoCollection<JsonObject> coll = getCollection(collection); coll.findOneAndUpdate(bquery, bupdate, foauOptions, wrapCallback(resultHandler)); return this; }
@Override public Optional<T> reschedule(final T item) { validateReschedule(item); final Document query = new Document(); query.put("_id", new ObjectId(item.getId())); query.put("heartbeat", DateUtil.toDate(item.getHeartbeat())); final Document setDoc = new Document(); setDoc.put("heartbeat", null); setDoc.put("runDate", DateUtil.toDate(item.getRunDate())); setDoc.put("status", OkraStatus.PENDING.name()); final Document update = new Document(); update.put("$set", setDoc); final FindOneAndUpdateOptions options = new FindOneAndUpdateOptions(); options.returnDocument(ReturnDocument.AFTER); final Document document = client .getDatabase(getDatabase()) .getCollection(getCollection()) .findOneAndUpdate(query, update, options); if (document == null) { return Optional.empty(); } return Optional.ofNullable(serializer.fromDocument(scheduleItemClass, document)); }
@Override public Optional<T> heartbeatAndUpdateCustomAttrs(final T item, final Map<String, Object> attrs) { validateHeartbeat(item); final Document query = new Document(); query.put("_id", new ObjectId(item.getId())); query.put("status", OkraStatus.PROCESSING.name()); query.put("heartbeat", DateUtil.toDate(item.getHeartbeat())); final Document update = new Document(); update.put("$set", new Document("heartbeat", new Date())); if (attrs != null && !attrs.isEmpty()) { attrs.forEach((key, value) -> update.append("$set", new Document(key, value))); } final FindOneAndUpdateOptions options = new FindOneAndUpdateOptions(); options.returnDocument(ReturnDocument.AFTER); final Document result = client .getDatabase(getDatabase()) .getCollection(getCollection()) .findOneAndUpdate(query, update, options); if (result == null) { return Optional.empty(); } return Optional.ofNullable(serializer.fromDocument(scheduleItemClass, result)); }
public SyncEvent getPendingEvent(List<String> eventTypes) { return syncEvents.findOneAndUpdate( Filters.and(Filters.eq(SyncAttrs.STATUS, SyncStatus.PENDING), Filters.in(SyncAttrs.EVENT_TYPE, eventTypes)), Updates.set(SyncAttrs.STATUS, SyncStatus.IN_PROGRESS), new FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER)); }
public SyncNode getFailedNode(long lastPingTime) { SyncNode failedNode = syncNodeMapping.findOneAndUpdate( Filters.and(Filters.lte(SyncAttrs.LAST_PING_TIME, lastPingTime), Filters.eq(SyncAttrs.LIFE_CYCLE, SyncConfig.INSTANCE.getDbProperty(SyncConstants.LIFE))), Updates.set(SyncAttrs.LAST_PING_TIME, System.currentTimeMillis()), new FindOneAndUpdateOptions().upsert(false).returnDocument(ReturnDocument.BEFORE)); if (failedNode != null && failedNode.getFailureTime() == 0) { syncNodeMapping.findOneAndUpdate(Filters.eq(SyncAttrs.ID, failedNode.getId()), Updates.set(SyncAttrs.FAILURE_TIME, failedNode.getLastPingTime())); } return failedNode; }
public MngToOrclSyncWriter(BlockingQueue<Document> dataBuffer, MongoToOracleMap map, SyncMarker marker, CountDownLatch latch, boolean isRestrictedSyncEnabled, ObjectId eventId) { super(); this.dataBuffer = dataBuffer; this.map = map; this.marker = marker; this.latch = latch; this.isRestrictedSyncEnabled = isRestrictedSyncEnabled; this.eventId = eventId; this.options = new FindOneAndUpdateOptions(); options.returnDocument(ReturnDocument.BEFORE); }
public String createNewLotCodeForTransportation() { Document updateLotCode = collection.findOneAndUpdate(exists("lotConfiguration.lastInsertionTransportation"), new Document("$inc", new Document("lotConfiguration.lastInsertionTransportation", 1)), new FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER)); LaboratoryConfiguration laboratoryConfiguration = LaboratoryConfiguration.deserialize(updateLotCode.toJson()); return laboratoryConfiguration.getLotConfiguration().getLastInsertionTransportation().toString(); }
public String createNewLotCodeForExam() { Document updateLotCode = collection.findOneAndUpdate(exists("lotConfiguration.lastInsertionExam"), new Document("$inc", new Document("lotConfiguration.lastInsertionExam", 1)), new FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER)); LaboratoryConfiguration laboratoryConfiguration = LaboratoryConfiguration.deserialize(updateLotCode.toJson()); return laboratoryConfiguration.getLotConfiguration().getLastInsertionExam().toString(); }
@Override public <T> T update(T t) { MongoModel mongoModel = (MongoModel) t; Document document = mongoModel.toDocument(); MongoCollection<Document> collection = database.getCollection(t.getClass().getSimpleName()); BasicDBObject query = new BasicDBObject(MongoModel.OID, mongoModel.getObjectId()); collection.findOneAndUpdate(query, new Document("$set", document), (new FindOneAndUpdateOptions()).upsert(true)); return t; }
@Override public FindOneAndUpdateOptions toFindOneAndUpdateOptions() { final FindOneAndUpdateOptions options = new FindOneAndUpdateOptions(); options.bypassDocumentValidation(!validateDocuments); setMaxTime(options); setProjection(options); options.returnDocument(ret); setSort(options); options.upsert(upsert); return options; }
@Test public void findOneAndUpdate() { insertOneWithBulk(); Assert.assertNotNull(coll.findOneAndUpdate(Filters.eq("name", "DELETEME"), new Document("$set", new Document("name", "UDPATED")))); Assert.assertNotNull(coll.findOneAndUpdate(Filters.eq("name", "UDPATED"), new Document("$set", new Document("name", "AGAIN")), new FindOneAndUpdateOptions())); coll.deleteMany(Filters.eq("name", "AGAIN")); }
@Override public void put(String key, String value) { MongoCollection<Document> collection = getCollection(); Document query = new Document(KEY, key); Document toPut = new Document($SET, new Document(KEY, key).append(VALUE, value)); FindOneAndUpdateOptions options = new FindOneAndUpdateOptions().upsert(true).returnDocument(ReturnDocument.BEFORE); Document result = collection.findOneAndUpdate(query, toPut, options); if (needsFolderHandling && result == null) { dirRepo.registerParentage(key); } }
private void saveDocument(String key, String column, Object val) { registerKey(key); MongoCollection<Document> collection = getCollection(key); Document dbkey = new Document(ROWKEY, key).append(COLKEY, column); Document dbval = new Document($SET, new Document(ROWKEY, key).append(COLKEY, column).append(VALKEY, val)); FindOneAndUpdateOptions options = new FindOneAndUpdateOptions().upsert(true).returnDocument(ReturnDocument.AFTER); try { @SuppressWarnings("unused") Document ret = collection.findOneAndUpdate(dbkey, dbval, options); } catch (MongoException me) { throw RaptureExceptionFactory.create(HttpURLConnection.HTTP_INTERNAL_ERROR, new ExceptionToString(me)); } }
/** * Returns the next epoch available and advances the counter. Guaranteed to * be unique for the given collection. If the epoch document does not * already exist a new one is created and the first epoch returned will be * 1L. * * @param collection * - the MongoCollection to the get next epoch for * @return Long - a unique epoch value for this collection */ public static Long nextEpoch(final MongoCollection<Document> collection) { final FindOneAndUpdateOptions options = new FindOneAndUpdateOptions().upsert(true).returnDocument(ReturnDocument.AFTER); MongoRetryWrapper<Long> wrapper = new MongoRetryWrapper<Long>() { public Long action(FindIterable<Document> cursor) { Document ret = collection.findOneAndUpdate(getEpochQueryObject(), getIncUpdateObject(getUpdateObject()), options); return (Long) ret.get(SEQ); } }; return wrapper.doAction(); }
@Override public Observable<TDocument> findOneAndUpdate(final Bson filter, final Bson update, final FindOneAndUpdateOptions options) { return RxObservables.create(Observables.observe(new Block<SingleResultCallback<TDocument>>() { @Override public void apply(final SingleResultCallback<TDocument> callback) { wrapped.findOneAndUpdate(filter, update, options, callback); } }), observableAdapter); }
@ExtDirectMethod public void sendPassordResetEmail(String userId) { String token = UUID.randomUUID().toString(); User user = this.mongoDb.getCollection(User.class).findOneAndUpdate( Filters.eq(CUser.id, userId), Updates.combine( Updates.set(CUser.passwordResetTokenValidUntil, Date.from(ZonedDateTime.now(ZoneOffset.UTC).plusHours(4) .toInstant())), Updates.set(CUser.passwordResetToken, token)), new FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER)); this.mailService.sendPasswortResetEmail(user); }
@Override public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { Map<String, Object> result = new HashMap<>(); result.put("success", true); MongoUserDetails userDetails = (MongoUserDetails) authentication.getPrincipal(); if (userDetails != null) { User user; if (!userDetails.isPreAuth()) { user = this.mongoDb.getCollection(User.class).findOneAndUpdate( Filters.eq(CUser.id, userDetails.getUserDbId()), Updates.set(CUser.lastAccess, new Date()), new FindOneAndUpdateOptions() .returnDocument(ReturnDocument.AFTER)); } else { user = this.mongoDb.getCollection(User.class) .find(Filters.eq(CUser.id, userDetails.getUserDbId())).first(); } result.put(SecurityService.AUTH_USER, new UserDetailDto(userDetails, user, CsrfController.getCsrfToken(request))); } response.setCharacterEncoding("UTF-8"); response.getWriter().print(this.objectMapper.writeValueAsString(result)); response.getWriter().flush(); }
@Override public Publisher<TDocument> findOneAndUpdate(final Bson filter, final Bson update, final FindOneAndUpdateOptions options) { return new ObservableToPublisher<TDocument>(observe(new Block<SingleResultCallback<TDocument>>() { @Override public void apply(final SingleResultCallback<TDocument> callback) { wrapped.findOneAndUpdate(filter, update, options, callback); } })); }
@Override public Publisher<TDocument> findOneAndUpdate(final ClientSession clientSession, final Bson filter, final Bson update, final FindOneAndUpdateOptions options) { return new ObservableToPublisher<TDocument>(observe(new Block<SingleResultCallback<TDocument>>() { @Override public void apply(final SingleResultCallback<TDocument> callback) { wrapped.findOneAndUpdate(clientSession, filter, update, options, callback); } })); }
public void setEncryptedPassword(ObjectId id , byte[] pass) { connectionInfo.findOneAndUpdate( Filters.and(Filters.eq(String.valueOf(ConnectionInfoAttributes._id), id)), Updates.set(String.valueOf(ConnectionInfoAttributes.password), pass), new FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER)); }
public SyncNode getNodeDetails(SyncNode nodeMapper) { Bson filter = Filters.eq(SyncAttrs.UUID, nodeMapper.getUUID()); logger.info("Getting node with filter " + filter); return syncNodeMapping.findOneAndUpdate(filter, Updates.unset(SyncAttrs.FAILURE_TIME), new FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER)); }
public void saveFlow(FlowEntity flowEntity) { if (flowEntity.getId() == null) { Integer nextId; Document lastFlow = collection.find() .projection(new Document("flow_id", 1)) .sort(new Document("flow_id", -1)) .limit(1) .first(); if (lastFlow == null) { nextId = 1; } else { nextId = lastFlow.getInteger("flow_id") + 1; } flowEntity.setId(nextId); } Document filter = new Document() .append("flow_id", flowEntity.getId()); List<Document> conditionList = flowEntity.getConditionList() .stream() .map(conditionEntity -> new Document() .append("dev_id", conditionEntity.getDevId()) .append("dev_type", conditionEntity.getDevType()) .append("type", conditionEntity.getType()) .append("parameter", conditionEntity.getParameter())) .collect(Collectors.toList()); List<Document> actionList = flowEntity.getActionList() .stream() .map(conditionEntity -> new Document() .append("dev_id", conditionEntity.getDevId()) .append("dev_type", conditionEntity.getDevType()) .append("type", conditionEntity.getType()) .append("parameter", conditionEntity.getParameter())) .collect(Collectors.toList()); Document entityDocument = new Document() .append("$set", new Document() .append("flow_id", flowEntity.getId()) .append("name", flowEntity.getName()) .append("order_num", flowEntity.getOrderNum()) .append("conditions", conditionList) .append("actions", actionList) ); FindOneAndUpdateOptions options = new FindOneAndUpdateOptions() .returnDocument(ReturnDocument.AFTER) .upsert(true); collection.findOneAndUpdate(filter, entityDocument, options); }
private void setSort(final FindOneAndUpdateOptions options) { if(sort != null) { options.sort(sort); } }
private void setProjection(final FindOneAndUpdateOptions options) { if(projection != null) { options.projection(projection); } }
private void setMaxTime(final FindOneAndUpdateOptions options) { if(maxTime != null) { options.maxTime(maxTime.getLeft(), maxTime.getRight()); } }
@Override public void invalidate() { Document invalidator = getInvalidator(); getIdGenCollection().findOneAndUpdate(getQueryObject(), invalidator, new FindOneAndUpdateOptions().upsert(true)); }
public void makeValid() { Document invalidator = getRevalidator(); getIdGenCollection().findOneAndUpdate(getQueryObject(), invalidator, new FindOneAndUpdateOptions().upsert(true)); }