]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Implement periodic cleanup function
authorFrancesco Chemolli <kinkie@squid-cache.org>
Tue, 1 Sep 2015 15:54:09 +0000 (17:54 +0200)
committerFrancesco Chemolli <kinkie@squid-cache.org>
Tue, 1 Sep 2015 15:54:09 +0000 (17:54 +0200)
src/auth/User.h
src/auth/UserNameCache.cc
src/auth/UserNameCache.h

index 6af51cad1614b68f5d227f46d12fbdad17843a2e..e080e5ca0bddb1af8827664c2b19e103e86317ce 100644 (file)
@@ -26,6 +26,7 @@ namespace Auth
 {
 
 class Config;
+class UserNameCache;
 
 /**
  *  \ingroup AuthAPI
index ba28ae4643dfa04348ef6db8dd714f39586e0b7b..892f33a9f4aa6087ff63000a382974860d7e17b3 100644 (file)
@@ -7,15 +7,23 @@
  */
 
 #include "squid.h"
+#include "Debug.h"
+#include "event.h"
 #include "SquidConfig.h"
 #include "SquidTime.h"
-#include "UserNameCache.h"
-
-#include <algorithm>
+#include "auth/UserNameCache.h"
 
 namespace Auth {
 
-User::Pointer
+UserNameCache::UserNameCache(const char *name) :
+    cachename(name)
+{
+    static std::string eventName("User Cache cleanup: ");
+    eventName.append(name);
+    eventAdd(eventName.c_str(), &UserNameCache::cleanup, this, ::Config.authenticateGCInterval, 1);
+}
+
+Auth::User::Pointer
 UserNameCache::lookup(const SBuf &userKey)
 {
     auto p = store_.find(userKey);
@@ -37,14 +45,16 @@ UserNameCache::size()
 }
 
 void
-UserNameCache::cleanup(void *)
+UserNameCache::cleanup(void *me)
 {
+    // me is this in disguise
+    UserNameCache *self = static_cast<UserNameCache *>(me);
     // cache entries with expiretime <= expirationTime are to be evicted
     const time_t expirationTime =  current_time.tv_sec - ::Config.authenticateTTL;
-    const auto end = store_.end();
-    for (auto i = store_.begin(); i != end; ++i) {
+    const auto end = self->store_.end();
+    for (auto i = self->store_.begin(); i != end; ++i) {
         if (i->second->expiretime <= expirationTime)
-            store_.erase(i);
+            self->store_.erase(i);
     }
 }
 
index 86274ca6ed7980c9f51e2445b1ae4234b4c2af8a..d40dda9f9b707bebdefea86c894545fd7213ca44 100644 (file)
@@ -10,7 +10,7 @@
 #define SQUID_USERNAMECACHE_H_
 
 #include "SBufAlgos.h"
-#include "User.h"
+#include "auth/User.h"
 
 #include <unordered_map>
 
@@ -20,25 +20,28 @@ class UserNameCache
 {
 private:
     /// key is Uer::userKey(), mapped value is User::Pointer
-    typedef std::unordered_map<SBuf, User::Pointer> StoreType;
+    typedef std::unordered_map<SBuf, Auth::User::Pointer> StoreType;
 
 public:
     UserNameCache() = delete;
-    explicit UserNameCache(const char *name) : cachename(name) {}
+    explicit UserNameCache(const char *name);
 
     ~UserNameCache() = default;
     UserNameCache(const UserNameCache& ) = delete;
     UserNameCache& operator=(const UserNameCache&) = delete;
 
     /// obtain pointer to user if present, or Pointer(nullptr) if not
-    User::Pointer lookup(const SBuf &userKey);
+    Auth::User::Pointer lookup(const SBuf &userKey);
 
     void reset();
 
     size_t size();
 
-    /// periodic cleanup function, removes timed-out entries.
-    void cleanup(void *);
+    /** periodic cleanup function, removes timed-out entries
+     *
+     * Must be static to support EVH interface. Argument is this
+     */
+    static void cleanup(void *);
 
 private:
     StoreType store_;