Class MongoDBConnection

    • Field Detail

      • RANDOM

        protected static final Random RANDOM
      • coll

        protected final com.mongodb.client.MongoCollection<org.bson.Document> coll
      • idKey

        protected final String idKey
        The key to use to store the id in the database.
      • useCustomId

        protected final boolean useCustomId
        True if we don't use MongoDB's native "_id" key to store the id.
      • sequenceLeft

        protected long sequenceLeft
        Number of values still available in the in-memory sequence.
      • sequenceLastValue

        protected long sequenceLastValue
        Last value or randomized value used from the in-memory sequence.

        When used as a randomized sequence, this value (and the rest of the next block) may only be used after a successful update of the in-database version for the next task needing a randomized value.

      • clientSession

        protected com.mongodb.client.ClientSession clientSession
      • transactionStarted

        protected boolean transactionStarted
      • RETRY_TIMESLOT

        protected static final Duration RETRY_TIMESLOT
      • RETRY_THRESHOLD

        protected static final Duration RETRY_THRESHOLD
      • LOCK_FIELDS

        protected static final org.bson.conversions.Bson LOCK_FIELDS
      • UNSET_LOCK_UPDATE

        protected static final org.bson.conversions.Bson UNSET_LOCK_UPDATE
    • Constructor Detail

    • Method Detail

      • close

        public void close()
        Description copied from interface: DBSConnection
        Closes this connection.
      • initRepository

        protected void initRepository​(MongoDBRepositoryDescriptor descriptor)
        Initializes the MongoDB repository
        Parameters:
        descriptor - the MongoDB repository descriptor
        Since:
        11.1
      • getNextSequenceId

        protected long getNextSequenceId()
      • updateSequence

        protected long updateSequence()
        Allocates a new sequence block. The database contains the last value from the last block.
      • tryUpdateRandomizedSequence

        protected Long tryUpdateRandomizedSequence()
        Updates the randomized sequence, using xorshift.
      • updateRandomizedSequence

        protected long updateRandomizedSequence()
      • randomInitialSeed

        protected long randomInitialSeed()
        Initial seed generation.
      • xorshift

        protected long xorshift​(long n,
                                long times)
        Iterated version of xorshift.
      • generateNewId

        public String generateNewId()
        Description copied from interface: DBSConnection
        Generates a new id for a document.
        Returns:
        the new id
      • createState

        public void createState​(State state)
        Description copied from interface: DBSConnection
        Creates a document.
        Parameters:
        state - the document state
      • createStates

        public void createStates​(List<State> states)
        Description copied from interface: DBSConnection
        Creates documents.
        Parameters:
        states - the document states
      • readState

        public State readState​(String id)
        Description copied from interface: DBSConnection
        Reads the state of a document.
        Parameters:
        id - the document id
        Returns:
        the document state, or null if not found
      • readPartialState

        public State readPartialState​(String id,
                                      Collection<String> keys)
        Description copied from interface: DBSConnection
        Reads the partial state of a document.
        Parameters:
        id - the document id
        keys - the keys to read
        Returns:
        the document partial state, or null if not found
      • readStates

        public List<State> readStates​(List<String> ids)
        Description copied from interface: DBSConnection
        Reads the states of several documents.

        The returned states may be in a different order than the ids.

        Parameters:
        ids - the document ids
        Returns:
        the document states, an element by be null if not found
      • deleteStates

        public void deleteStates​(Set<String> ids)
        Description copied from interface: DBSConnection
        Deletes a set of document.
        Parameters:
        ids - the document ids
      • readChildState

        public State readChildState​(String parentId,
                                    String name,
                                    Set<String> ignored)
        Description copied from interface: DBSConnection
        Reads the state of a child document.
        Parameters:
        parentId - the parent document id
        name - the name of the child
        ignored - a set of document ids that should not be considered
        Returns:
        the state of the child document, or null if not found
      • newQueryException

        protected NuxeoException newQueryException​(String message,
                                                   com.mongodb.MongoException cause,
                                                   org.bson.conversions.Bson filter)
      • newQueryTimeout

        protected NuxeoException newQueryTimeout​(com.mongodb.MongoException cause,
                                                 org.bson.conversions.Bson filter)
      • newQueryTimeoutClient

        protected NuxeoException newQueryTimeoutClient​(com.mongodb.MongoException cause,
                                                       org.bson.conversions.Bson filter)
      • newQueryFailure

        protected NuxeoException newQueryFailure​(com.mongodb.MongoException cause,
                                                 org.bson.conversions.Bson filter)
      • logQuery

        protected void logQuery​(String id,
                                org.bson.conversions.Bson fields)
      • logQuery

        protected void logQuery​(org.bson.conversions.Bson filter,
                                org.bson.conversions.Bson fields)
      • logQuery

        protected void logQuery​(org.bson.conversions.Bson query,
                                org.bson.conversions.Bson fields,
                                org.bson.conversions.Bson orderBy,
                                int limit,
                                int offset)
      • hasChild

        public boolean hasChild​(String parentId,
                                String name,
                                Set<String> ignored)
        Description copied from interface: DBSConnection
        Checks if a document has a child with the given name
        Parameters:
        parentId - the parent document id
        name - the name of the child
        ignored - a set of document ids that should not be considered
        Returns:
        true if the child exists, false if not
      • getChildQuery

        protected org.bson.Document getChildQuery​(String parentId,
                                                  String name,
                                                  Set<String> ignored)
      • addIgnoredIds

        protected void addIgnoredIds​(org.bson.Document filter,
                                     Set<String> ignored)
      • queryKeyValue

        public List<State> queryKeyValue​(String key,
                                         Object value,
                                         Set<String> ignored)
        Description copied from interface: DBSConnection
        Queries the repository for documents having key = value.
        Parameters:
        key - the key
        value - the value
        ignored - a set of document ids that should not be considered
        Returns:
        the document states matching the query
      • queryKeyValue

        public List<State> queryKeyValue​(String key1,
                                         Object value1,
                                         String key2,
                                         Object value2,
                                         Set<String> ignored)
        Description copied from interface: DBSConnection
        Queries the repository for documents having key1 = value1 and key2 = value2.
        Parameters:
        key1 - the first key
        value1 - the first value
        key2 - the second key
        value2 - the second value
        ignored - a set of document ids that should not be considered
        Returns:
        the document states matching the query
      • queryKeyValueWithOperator

        public List<State> queryKeyValueWithOperator​(String key1,
                                                     Object value1,
                                                     String key2,
                                                     DBSConnection.DBSQueryOperator operator,
                                                     Object value2,
                                                     Set<String> ignored)
        Description copied from interface: DBSConnection
        Queries the repository for documents having key1 = value1 and key2 ${operator} value2.
        Parameters:
        key1 - the first key
        value1 - the first value
        key2 - the second key
        operator - the operator to apply between key2 and value2
        value2 - the second value
        ignored - a set of document ids that should not be considered
        Returns:
        the document states matching the query
      • getDescendants

        public Stream<State> getDescendants​(String rootId,
                                            Set<String> keys)
        Description copied from interface: DBSConnection
        Returns a stream of descendants from a given root document, in no particular order. This does not include information about the root document itself.

        THE STREAM MUST BE CLOSED WHEN DONE to release resources.

        Parameters:
        rootId - the root document id
        keys - what to collect about the descendants in addition to their ids
        Returns:
        a stream of States; THE STREAM MUST BE CLOSED WHEN DONE
      • getDescendants

        public Stream<State> getDescendants​(String rootId,
                                            Set<String> keys,
                                            int limit)
        Description copied from interface: DBSConnection
        Returns a stream of descendants from a given root document, in no particular order. This does not include information about the root document itself.

        THE STREAM MUST BE CLOSED WHEN DONE to release resources.

        Parameters:
        rootId - the root document id
        keys - what to collect about the descendants in addition to their ids
        limit - the maximum number of descendants to return
        Returns:
        a stream of States; THE STREAM MUST BE CLOSED WHEN DONE
      • queryKeyValuePresence

        public boolean queryKeyValuePresence​(String key,
                                             String value,
                                             Set<String> ignored)
        Description copied from interface: DBSConnection
        Queries the repository to check if there are documents having key = value.
        Parameters:
        key - the key
        value - the value
        ignored - a set of document ids that should not be considered
        Returns:
        true if the query matches at least one document, false if the query matches nothing
      • exists

        protected boolean exists​(org.bson.conversions.Bson filter)
      • exists

        protected boolean exists​(org.bson.conversions.Bson filter,
                                 org.bson.conversions.Bson projection)
      • findOne

        protected State findOne​(org.bson.conversions.Bson filter)
      • findOne

        protected State findOne​(org.bson.conversions.Bson filter,
                                org.bson.conversions.Bson projection)
      • findAll

        protected List<State> findAll​(org.bson.conversions.Bson filter)
      • stream

        protected Stream<State> stream​(org.bson.conversions.Bson filter)
      • stream

        protected Stream<State> stream​(org.bson.conversions.Bson filter,
                                       org.bson.conversions.Bson projection)
      • stream

        protected Stream<State> stream​(org.bson.conversions.Bson filter,
                                       org.bson.conversions.Bson projection,
                                       int limit)
        Logs, runs request and constructs a closeable Stream on top of MongoCursor.

        We should rely on this method, because it correctly handles cursor closed state.

        Note: Looping on FindIterable or MongoIterable could lead to cursor leaks. This is also the case on some call to MongoIterable.first().

        Returns:
        a closeable Stream instance linked to MongoCursor
      • justPresenceField

        protected org.bson.Document justPresenceField()
      • queryAndFetch

        public PartialList<Map<String,​Serializable>> queryAndFetch​(DBSExpressionEvaluator evaluator,
                                                                         OrderByClause orderByClause,
                                                                         boolean distinctDocuments,
                                                                         int limit,
                                                                         int offset,
                                                                         int countUpTo)
        Description copied from interface: DBSConnection
        Queries the repository for documents matching a NXQL query, and returns a projection of the documents.
        Parameters:
        evaluator - the map-based evaluator for the query
        orderByClause - an ORDER BY clause
        distinctDocuments - true if the projection should return a maximum of one row per document
        limit - the limit on the number of documents to return
        offset - the offset in the list of documents to return
        countUpTo - if -1, count the total size without offset/limit.
        If 0, don't count the total size, set it to -1 .
        If n, count the total number if there are less than n documents otherwise set the total size to -2.
        Returns:
        a partial list of maps containing the NXQL projections requested, and the total size according to countUpTo
      • scroll

        public ScrollResult<String> scroll​(DBSExpressionEvaluator evaluator,
                                           int batchSize,
                                           int keepAliveSeconds)
        Description copied from interface: DBSConnection
        Executes the given query and returns the first batch of results containing id of documents, next batch must be requested within the keepAliveSeconds delay.
      • addPrincipals

        protected void addPrincipals​(org.bson.Document query,
                                     Set<String> principals)
      • getLock

        public Lock getLock​(String id)
        Description copied from interface: LockManager
        Gets the lock on a document.

        If the document does not exist, null is returned.

        Parameters:
        id - the document id
        Returns:
        the existing lock, or null when there is no lock
      • setLock

        public Lock setLock​(String id,
                            Lock lock)
        Description copied from interface: LockManager
        Sets a lock on a document.

        If the document is already locked, returns its existing lock status (there is no re-locking, LockManager.removeLock(java.lang.String, java.lang.String) must be called first).

        Parameters:
        id - the document id
        lock - the lock to set
        Returns:
        null if locking succeeded, or the existing lock if locking failed
      • removeLock

        public Lock removeLock​(String id,
                               String owner)
        Description copied from interface: LockManager
        Removes the lock from a document.

        The previous lock is returned.

        If owner is null then the lock is unconditionally removed.

        If owner is not null, it must match the existing lock owner for the lock to be removed. If it doesn't match, the returned lock will return true for Lock.getFailed().

        Parameters:
        id - the document id
        owner - the owner to check, or null for no check
        Returns:
        the previous lock (may be null), with a failed flag if locking failed
      • insertOne

        protected void insertOne​(org.bson.Document document)
      • insertMany

        protected void insertMany​(List<org.bson.Document> documents)
      • updateMany

        protected com.mongodb.client.result.UpdateResult updateMany​(org.bson.conversions.Bson filter,
                                                                    org.bson.conversions.Bson update)
      • deleteMany

        protected com.mongodb.client.result.DeleteResult deleteMany​(org.bson.conversions.Bson filter)
      • find

        protected com.mongodb.client.FindIterable<org.bson.Document> find​(org.bson.conversions.Bson filter)
      • getMaxTimeMs

        protected long getMaxTimeMs()
      • countDocuments

        protected long countDocuments​(org.bson.conversions.Bson filter)
      • countDocuments

        protected long countDocuments​(org.bson.conversions.Bson filter,
                                      com.mongodb.client.model.CountOptions options)