summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Parks <davep@lindenlab.com>2011-07-12 17:31:25 -0500
committerDave Parks <davep@lindenlab.com>2011-07-12 17:31:25 -0500
commit104748b59af2ff15b44c910340daffe9180e74f7 (patch)
treeea17c71e97adc40bf01447fa6a685b8d278dd2e7
parent5a767e4cebed49a3a2934b21fd2f265a245828f4 (diff)
SH-1125 Retry when failing to get seed capability.
-rw-r--r--indra/newview/llviewerregion.cpp34
-rw-r--r--indra/newview/llviewerregion.h2
2 files changed, 26 insertions, 10 deletions
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 8bb38e3e46..9c6c62053b 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -186,8 +186,8 @@ class BaseCapabilitiesComplete : public LLHTTPClient::Responder
{
LOG_CLASS(BaseCapabilitiesComplete);
public:
- BaseCapabilitiesComplete(LLViewerRegion* region)
- : mRegion(region)
+ BaseCapabilitiesComplete(LLViewerRegion* region, S32 retry = 0)
+ : mRegion(region), mRetry(retry)
{ }
virtual ~BaseCapabilitiesComplete()
{
@@ -206,9 +206,24 @@ public:
{
LL_WARNS2("AppInit", "Capabilities") << statusNum << ": " << reason << LL_ENDL;
- if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
+ const S32 MAX_RETRIES = 5;
+
+ if (mRetry < MAX_RETRIES)
{
- LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
+ std::string url = mRegion->getCapability("Seed");
+
+ mRetry++;
+
+ llinfos << "retry " << mRetry << " posting to seed " << url << llendl;
+
+ mRegion->setSeedCapability(url, mRetry);
+ }
+ else
+ {
+ if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
+ {
+ LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
+ }
}
}
@@ -242,14 +257,15 @@ public:
}
static boost::intrusive_ptr<BaseCapabilitiesComplete> build(
- LLViewerRegion* region)
+ LLViewerRegion* region, S32 retry)
{
return boost::intrusive_ptr<BaseCapabilitiesComplete>(
- new BaseCapabilitiesComplete(region));
+ new BaseCapabilitiesComplete(region, retry));
}
private:
LLViewerRegion* mRegion;
+ S32 mRetry;
};
@@ -1476,9 +1492,9 @@ void LLViewerRegion::unpackRegionHandshake()
msg->sendReliable(host);
}
-void LLViewerRegion::setSeedCapability(const std::string& url)
+void LLViewerRegion::setSeedCapability(const std::string& url, S32 retry)
{
- if (getCapability("Seed") == url)
+ if (retry == 0 && getCapability("Seed") == url)
{
// llwarns << "Ignoring duplicate seed capability" << llendl;
return;
@@ -1568,7 +1584,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
llinfos << "posting to seed " << url << llendl;
- mImpl->mHttpResponderPtr = BaseCapabilitiesComplete::build(this) ;
+ mImpl->mHttpResponderPtr = BaseCapabilitiesComplete::build(this, retry) ;
LLHTTPClient::post(url, capabilityNames, mImpl->mHttpResponderPtr);
}
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index 00252b8897..0176969cea 100644
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -230,7 +230,7 @@ public:
const LLHTTPClient::ResponderPtr getHttpResponderPtr() const;
// Get/set named capability URLs for this region.
- void setSeedCapability(const std::string& url);
+ void setSeedCapability(const std::string& url, S32 retry = 0);
void setCapability(const std::string& name, const std::string& url);
// implements LLCapabilityProvider
virtual std::string getCapability(const std::string& name) const;