summaryrefslogtreecommitdiff
path: root/indra/llmessage/llexperiencecache.h
diff options
context:
space:
mode:
authorRider Linden <rider@lindenlab.com>2015-09-01 16:13:52 -0700
committerRider Linden <rider@lindenlab.com>2015-09-01 16:13:52 -0700
commit96e343b49b0b5a0951ffab0beb2e1d09c37bbdc5 (patch)
tree2a4c332f6c476dff900baed36af879700254fbe0 /indra/llmessage/llexperiencecache.h
parent4b3269c94d8b68c977598d2444ae04f7e1f9062c (diff)
MAINT-5575: Convert the Experience cache into a coro based singleton.
--HG-- branch : MAINT-5575
Diffstat (limited to 'indra/llmessage/llexperiencecache.h')
-rw-r--r--indra/llmessage/llexperiencecache.h99
1 files changed, 58 insertions, 41 deletions
diff --git a/indra/llmessage/llexperiencecache.h b/indra/llmessage/llexperiencecache.h
index 8da038a8c3..937225a80a 100644
--- a/indra/llmessage/llexperiencecache.h
+++ b/indra/llmessage/llexperiencecache.h
@@ -31,7 +31,9 @@
#include "linden_common.h"
#include "llsingleton.h"
+#include "llframetimer.h"
#include "llsd.h"
+#include "llcorehttputil.h"
#include <boost/signals2.hpp>
#include <boost/function.hpp>
@@ -44,8 +46,11 @@ class LLExperienceCache: public LLSingleton < LLExperienceCache >
friend class LLSingleton < LLExperienceCache > ;
public:
+ typedef boost::function<std::string(const std::string &)> CapabilityQuery_t;
typedef boost::function<void(const LLSD &)> Callback_t;
+ void cleanup();
+
void erase(const LLUUID& key);
bool fetch(const LLUUID& key, bool refresh = false);
void insert(const LLSD& experience_data);
@@ -54,7 +59,39 @@ public:
// If name information is in cache, callback will be called immediately.
void get(const LLUUID& key, Callback_t slot);
+ bool isRequestPending(const LLUUID& public_key);
+
+ void setCapabilityQuery(CapabilityQuery_t queryfn);
+
+ static const std::string NAME; // "name"
+ static const std::string EXPERIENCE_ID; // "public_id"
+ static const std::string AGENT_ID; // "agent_id"
+ static const std::string GROUP_ID; // "group_id"
+ static const std::string PROPERTIES; // "properties"
+ static const std::string EXPIRES; // "expiration"
+ static const std::string DESCRIPTION; // "description"
+ static const std::string QUOTA; // "quota"
+ static const std::string MATURITY; // "maturity"
+ static const std::string METADATA; // "extended_metadata"
+ static const std::string SLURL; // "slurl"
+
+ static const std::string MISSING; // "DoesNotExist"
+
+ // should be in sync with experience-api/experiences/models.py
+ static const int PROPERTY_INVALID; // 1 << 0
+ static const int PROPERTY_PRIVILEGED; // 1 << 3
+ static const int PROPERTY_GRID; // 1 << 4
+ static const int PROPERTY_PRIVATE; // 1 << 5
+ static const int PROPERTY_DISABLED; // 1 << 6
+ static const int PROPERTY_SUSPENDED; // 1 << 7
+
private:
+ LLExperienceCache();
+ virtual ~LLExperienceCache();
+
+ virtual void initSingleton();
+
+
// Callback types for get()
typedef boost::signals2::signal < void(const LLSD &) > callback_signal_t;
typedef boost::shared_ptr<callback_signal_t> signal_ptr;
@@ -64,63 +101,43 @@ private:
typedef std::map<LLUUID, signal_ptr> signal_map_t;
typedef std::map<LLUUID, LLSD> cache_t;
- typedef std::set<LLUUID> ask_queue_t;
-
-
+ typedef std::set<LLUUID> RequestQueue_t;
+ typedef std::map<LLUUID, F64> PendingQueue_t;
+
//--------------------------------------------
static const std::string PRIVATE_KEY; // "private_id"
- static const std::string MISSING; // "DoesNotExist"
-
- static const std::string AGENT_ID; // "agent_id"
- static const std::string GROUP_ID; // "group_id"
- static const std::string EXPERIENCE_ID; // "public_id"
- static const std::string NAME; // "name"
- static const std::string PROPERTIES; // "properties"
- static const std::string EXPIRES; // "expiration"
- static const std::string DESCRIPTION; // "description"
- static const std::string QUOTA; // "quota"
- static const std::string MATURITY; // "maturity"
- static const std::string METADATA; // "extended_metadata"
- static const std::string SLURL; // "slurl"
-
- // should be in sync with experience-api/experiences/models.py
- static const int PROPERTY_INVALID; // 1 << 0
- static const int PROPERTY_PRIVILEGED; // 1 << 3
- static const int PROPERTY_GRID; // 1 << 4
- static const int PROPERTY_PRIVATE; // 1 << 5
- static const int PROPERTY_DISABLED; // 1 << 6
- static const int PROPERTY_SUSPENDED; // 1 << 7
// default values
static const F64 DEFAULT_EXPIRATION; // 600.0
static const S32 DEFAULT_QUOTA; // 128 this is megabytes
//--------------------------------------------
- LLExperienceCache();
- virtual ~LLExperienceCache();
-
- void exportFile(std::ostream& ostr) const;
- void importFile(std::istream& istr);
-
-//--------------------------------------------
void processExperience(const LLUUID& public_key, const LLSD& experience);
//--------------------------------------------
- cache_t sCache;
- signal_map_t sSignalMap;
- ask_queue_t sAskQueue;
-
+ cache_t mCache;
+ signal_map_t mSignalMap;
+ RequestQueue_t mRequestQueue;
+ PendingQueue_t mPendingQueue;
+
+ LLFrameTimer mRequestTimer;
+ LLFrameTimer mEraseExpiredTimer; // Periodically clean out expired entries from the cache
+ CapabilityQuery_t mCapability;
+ std::string mCacheFileName;
+ bool mShutdown;
+
+ void idleCoro();
void eraseExpired();
-
- void setLookupURL(const std::string& lookup_url);
- bool hasLookupURL();
+ void requestExperiencesCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &, std::string, RequestQueue_t);
+ void requestExperiences();
void setMaximumLookups(int maximumLookups);
- void idle();
- void bootstrap(const LLSD& legacyKeys, int initialExpiration);
-
+ void bootstrap(const LLSD& legacyKeys, int initialExpiration);
+ void exportFile(std::ostream& ostr) const;
+ void importFile(std::istream& istr);
+ //
const cache_t& getCached();
// maps an experience private key to the experience id