summaryrefslogtreecommitdiff
path: root/src/mongo/db/auth/user_set.h
diff options
context:
space:
mode:
authorJonathan Reams <jbreams@mongodb.com>2018-06-29 12:35:20 -0400
committerJonathan Reams <jbreams@mongodb.com>2018-07-31 16:35:29 -0400
commit78dec3622268ad27bb855eda4c6a4ed345412fd9 (patch)
treeb0578a4cab5c7d403fcde568cf573ebfa21e698a /src/mongo/db/auth/user_set.h
parent7a09ca856a0589ff2fd2170c0a669600beeff5a0 (diff)
downloadmongo-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.h40
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