diff options
author | Jonathan Reams <jbreams@mongodb.com> | 2018-06-29 12:35:20 -0400 |
---|---|---|
committer | Jonathan Reams <jbreams@mongodb.com> | 2018-07-31 16:35:29 -0400 |
commit | 78dec3622268ad27bb855eda4c6a4ed345412fd9 (patch) | |
tree | b0578a4cab5c7d403fcde568cf573ebfa21e698a /src/mongo/db/auth/user_set.h | |
parent | 7a09ca856a0589ff2fd2170c0a669600beeff5a0 (diff) | |
download | mongo-78dec3622268ad27bb855eda4c6a4ed345412fd9.tar.gz |
SERVER-35890 refactor User cache into InvalidatingLRUCache and UserHandle
Diffstat (limited to 'src/mongo/db/auth/user_set.h')
-rw-r--r-- | src/mongo/db/auth/user_set.h | 40 |
1 files changed, 14 insertions, 26 deletions
diff --git a/src/mongo/db/auth/user_set.h b/src/mongo/db/auth/user_set.h index 9ad0ab03202..3b1472c6c8f 100644 --- a/src/mongo/db/auth/user_set.h +++ b/src/mongo/db/auth/user_set.h @@ -35,7 +35,7 @@ #include "mongo/db/auth/authorization_manager.h" #include "mongo/db/auth/user.h" #include "mongo/db/auth/user_name.h" - +#include "mongo/stdx/list.h" namespace mongo { @@ -48,16 +48,14 @@ class UserSet { MONGO_DISALLOW_COPYING(UserSet); public: - typedef std::vector<User*>::const_iterator iterator; + using iterator = stdx::list<UserHandle>::iterator; + using const_iterator = stdx::list<UserHandle>::const_iterator; - UserSet(); - ~UserSet(); + UserSet() = default; /** * Adds a User to the UserSet. * - * The UserSet does not take ownership of the User. - * * As there can only be one user per database in the UserSet, if a User already exists for * the new User's database, the old user will be removed from the set and returned. It is * the caller's responsibility to then release that user. If no user already exists for the @@ -65,64 +63,54 @@ public: * * Invalidates any outstanding iterators or NameIterators. */ - User* add(User* user); + void add(UserHandle user); /** * Replaces the user at "it" with "replacement." Does not take ownership of the User. * Returns a pointer to the old user referenced by "it". Does _not_ invalidate "iterator" * instances. */ - User* replaceAt(iterator it, User* replacement); + void replaceAt(iterator it, UserHandle replacement); /** * Removes the user at "it", and returns a pointer to it. After this call, "it" remains * valid. It will either equal "end()", or refer to some user between the values of "it" * and "end()" before this call was made. */ - User* removeAt(iterator it); + void removeAt(iterator it); /** * Removes the User whose authentication credentials came from dbname, and returns that * user. It is the caller's responsibility to then release that user back to the * authorizationManger. If no user exists for the given database, returns NULL; */ - User* removeByDBName(StringData dbname); + void removeByDBName(StringData dbname); // Returns the User with the given name, or NULL if not found. // Ownership of the returned User remains with the UserSet. The pointer // returned is only guaranteed to remain valid until the next non-const method is called // on the UserSet. - User* lookup(const UserName& name) const; + UserHandle lookup(const UserName& name) const; // Gets the user whose authentication credentials came from dbname, or NULL if none // exist. There should be at most one such user. - User* lookupByDBName(StringData dbname) const; + UserHandle lookupByDBName(StringData dbname) const; // Gets an iterator over the names of the users stored in the set. The iterator is // valid until the next non-const method is called on the UserSet. UserNameIterator getNames() const; - iterator begin() const { + iterator begin() { return _users.begin(); } - iterator end() const { - return _usersEnd; + iterator end() { + return _users.end(); } private: - typedef std::vector<User*>::iterator mutable_iterator; - - mutable_iterator mbegin() { - return _users.begin(); - } - mutable_iterator mend() { - return _usersEnd; - } - // The UserSet maintains ownership of the Users in it, and is responsible for // returning them to the AuthorizationManager when done with them. - std::vector<User*> _users; - std::vector<User*>::iterator _usersEnd; + stdx::list<UserHandle> _users; }; } // namespace mongo |