summaryrefslogtreecommitdiff
path: root/indra/llcorehttp/_httppolicy.h
diff options
context:
space:
mode:
authorMonty Brandenberg <monty@lindenlab.com>2012-06-08 20:21:54 -0400
committerMonty Brandenberg <monty@lindenlab.com>2012-06-08 20:21:54 -0400
commit28a04400b4160dd34166483ddcf0c12637bcc363 (patch)
treee43ca202df6ed9bc8cbcc4a97d354e4798b7aa62 /indra/llcorehttp/_httppolicy.h
parent1e3d05329f2e823191c7c91926bee5ec9e5dc4d7 (diff)
Implemented HTTP retry for requests. Went in rather easily which
surprised me. Added a retry queue similar to ready queue to the policy object which is sorted by retry time. Currently do five retries (after the initial try) delayed by .25, .5, 1, 2 and 5 seconds. Removed the retry logic from the lltexturefetch module. Upped the waiting time in the unit test for the retries. People won't like this but tough, need tests.
Diffstat (limited to 'indra/llcorehttp/_httppolicy.h')
-rw-r--r--indra/llcorehttp/_httppolicy.h19
1 files changed, 16 insertions, 3 deletions
diff --git a/indra/llcorehttp/_httppolicy.h b/indra/llcorehttp/_httppolicy.h
index 425079ec63..6f18264f3d 100644
--- a/indra/llcorehttp/_httppolicy.h
+++ b/indra/llcorehttp/_httppolicy.h
@@ -31,6 +31,7 @@
#include "httprequest.h"
#include "_httpservice.h"
#include "_httpreadyqueue.h"
+#include "_httpretryqueue.h"
#include "_httppolicyglobal.h"
@@ -67,6 +68,14 @@ public:
/// additional references will be added.)
void addOp(HttpOpRequest *);
+ /// Similar to addOp, used when a caller wants to retry a
+ /// request that has failed. It's placed on a special retry
+ /// queue but ordered by retry time not priority. Otherwise,
+ /// handling is the same and retried operations are considered
+ /// before new ones but that doesn't guarantee completion
+ /// order.
+ void retryOp(HttpOpRequest *);
+
// Shadows HttpService's method
bool changePriority(HttpHandle handle, HttpRequest::priority_t priority);
@@ -77,10 +86,14 @@ public:
return mGlobalOptions;
}
-
protected:
- int mReadyInClass[HttpRequest::POLICY_CLASS_LIMIT];
- HttpReadyQueue mReadyQueue[HttpRequest::POLICY_CLASS_LIMIT];
+ struct State
+ {
+ HttpReadyQueue mReadyQueue;
+ HttpRetryQueue mRetryQueue;
+ };
+
+ State mState[HttpRequest::POLICY_CLASS_LIMIT];
HttpService * mService; // Naked pointer, not refcounted, not owner
HttpPolicyGlobal mGlobalOptions;