From 9fbcaa5b9a6b3bfe762f5bb34951fbf7f99ecc1b Mon Sep 17 00:00:00 2001 From: Rider Linden Date: Mon, 29 Feb 2016 12:58:50 -0800 Subject: [PATCH 1/8] MAINT-5693: Request server bake even if we think we are about to request a stale version. The receiver should know if it will throw out the results. Added some additional logging to help track what's going on. --- indra/newview/llappearancemgr.cpp | 87 ++++++++++++++++--------------- indra/newview/llvoavatar.cpp | 1 + 2 files changed, 46 insertions(+), 42 deletions(-) diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index ec0b7c9a8e..963317affd 100755 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -3371,6 +3371,32 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro() { BoolSetter inFlight(mIsServerBakeOutstanding); + if (!gAgent.getRegion()) + { + LL_WARNS("Avatar") << "Region not set, cannot request server appearance update" << LL_ENDL; + return; + } + if (gAgent.getRegion()->getCentralBakeVersion() == 0) + { + LL_WARNS("Avatar") << "Region does not support baking" << LL_ENDL; + return; + } + + std::string url = gAgent.getRegion()->getCapability("UpdateAvatarAppearance"); + if (url.empty()) + { + LL_WARNS("Agent") << "Could not retrieve region capability \"UpdateAvatarAppearance\"" << LL_ENDL; + return; + } + + //---------------- + if (gAgentAvatarp->isEditingAppearance()) + { + LL_WARNS("Avatar") << "Avatar editing appearance, not sending request." << LL_ENDL; + // don't send out appearance updates if in appearance editing mode + return; + } + do { #if 0 @@ -3379,54 +3405,31 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro() LL_WARNS("Avatar") << "START: Server Bake request #" << r_count << "!" << LL_ENDL; #endif - // If we have already received an update for this or higher cof version, ignore. + // If we have already received an update for this or higher cof version, + // put a warning in the log but request anyway. S32 cofVersion = getCOFVersion(); S32 lastRcv = gAgentAvatarp->mLastUpdateReceivedCOFVersion; S32 lastReq = gAgentAvatarp->mLastUpdateRequestCOFVersion; mNewServerBakeRequested = false; - //---------------- - // move out of coroutine - if (!gAgent.getRegion()) - { - LL_WARNS("Avatar") << "Region not set, cannot request server appearance update" << LL_ENDL; - return; - } - if (gAgent.getRegion()->getCentralBakeVersion() == 0) - { - LL_WARNS("Avatar") << "Region does not support baking" << LL_ENDL; - } - std::string url = gAgent.getRegion()->getCapability("UpdateAvatarAppearance"); - if (url.empty()) - { - LL_WARNS("Agent") << "Could not retrieve region capability \"UpdateAvatarAppearance\"" << LL_ENDL; - } + LL_INFOS("Avatar") << "Requesting COF version " << cofVersion << + " (Last Received:" << lastRcv << ")" << + " (Last Requested:" << lastReq << ")" << LL_ENDL; - //---------------- - if (gAgentAvatarp->isEditingAppearance()) - { - LL_WARNS("Avatar") << "Avatar editing appearance, not sending request." << LL_ENDL; - // don't send out appearance updates if in appearance editing mode - return; - } - - LL_DEBUGS("Avatar") << "COF version=" << cofVersion << - " last_rcv=" << lastRcv << - " last_req=" << lastReq << LL_ENDL; - - if (cofVersion < lastRcv) - { - LL_WARNS("Avatar") << "Have already received update for cof version " << lastRcv - << " will not request for " << cofVersion << LL_ENDL; - return; - } - if (lastReq >= cofVersion) - { - LL_WARNS("Avatar") << "Request already in flight for cof version " << lastReq - << " will not request for " << cofVersion << LL_ENDL; - return; - } + if ((cofVersion != LLViewerInventoryCategory::VERSION_UNKNOWN)) + { + if (cofVersion < lastRcv) + { + LL_WARNS("Avatar") << "Have already received update for cof version " << lastRcv + << " but re-requesting for " << cofVersion << LL_ENDL; + } + if (lastReq >= cofVersion) + { + LL_WARNS("Avatar") << "Request already in flight for cof version " << lastReq + << " re-requesting for " << cofVersion << LL_ENDL; + } + } // Actually send the request. LL_DEBUGS("Avatar") << "Will send request for cof_version " << cofVersion << LL_ENDL; @@ -3496,7 +3499,7 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro() #endif // if someone requested a server bake before the previous one was finished - // repeate the process. + // repeat the process. if (mNewServerBakeRequested) { LL_WARNS("Avatar") << "New bake request received while processing previous one. Re-requesting." << LL_ENDL; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 0f5add3891..17722e31ca 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -7432,6 +7432,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) } // No backsies zone - if we get here, the message should be valid and usable, will be processed. + LL_INFOS("Avatar") << "Processing appearance message version " << this_update_cof_version << LL_ENDL; // Note: // RequestAgentUpdateAppearanceResponder::onRequestRequested() From 217f10f122ba72bcab7b91e3954669e184471fb9 Mon Sep 17 00:00:00 2001 From: Rider Linden Date: Tue, 1 Mar 2016 12:13:18 -0800 Subject: [PATCH 2/8] MAINT-5693: Do not rerequest old bakes. If a stale bake is received for processing do not processes it (Only allow newer appearances to process... never older) --- indra/newview/llappearancemgr.cpp | 8 +++++--- indra/newview/llvoavatar.cpp | 9 +++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 963317affd..ec859b8709 100755 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -3422,12 +3422,14 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro() if (cofVersion < lastRcv) { LL_WARNS("Avatar") << "Have already received update for cof version " << lastRcv - << " but re-requesting for " << cofVersion << LL_ENDL; + << " ignoring request for " << cofVersion << LL_ENDL; + return; } - if (lastReq >= cofVersion) + if (lastReq > cofVersion) { LL_WARNS("Avatar") << "Request already in flight for cof version " << lastReq - << " re-requesting for " << cofVersion << LL_ENDL; + << " ignoring request for " << cofVersion << LL_ENDL; + return; } } diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 17722e31ca..62ee1a6424 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -7356,6 +7356,7 @@ bool resolve_appearance_version(const LLAppearanceMessageContents& contents, S32 //----------------------------------------------------------------------------- void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) { + static S32 largestCOFSeen(LLViewerInventoryCategory::VERSION_UNKNOWN); LL_DEBUGS("Avatar") << "starts" << LL_ENDL; bool enable_verbose_dumps = gSavedSettings.getBOOL("DebugAvatarAppearanceMessage"); @@ -7393,6 +7394,14 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) S32 this_update_cof_version = contents.mCOFVersion; S32 last_update_request_cof_version = mLastUpdateRequestCOFVersion; + if (largestCOFSeen > this_update_cof_version) + { + LL_WARNS("Avatar") << "Already processed appearance for COF version " << + largestCOFSeen << ", discarding appearance with COF " << this_update_cof_version << LL_ENDL; + return; + } + largestCOFSeen = this_update_cof_version; + if( isSelf() ) { LL_DEBUGS("Avatar") << "this_update_cof_version " << this_update_cof_version From 919a11031bc29a86c8a0ebde8e2a315fd7b3abdf Mon Sep 17 00:00:00 2001 From: Rider Linden Date: Tue, 1 Mar 2016 15:46:08 -0800 Subject: [PATCH 3/8] MAINT-5693: Allow stale requests --- indra/newview/llappearancemgr.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index ec859b8709..76b7ea5ccc 100755 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -3422,14 +3422,12 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro() if (cofVersion < lastRcv) { LL_WARNS("Avatar") << "Have already received update for cof version " << lastRcv - << " ignoring request for " << cofVersion << LL_ENDL; - return; + << " but requesting for " << cofVersion << LL_ENDL; } if (lastReq > cofVersion) { LL_WARNS("Avatar") << "Request already in flight for cof version " << lastReq - << " ignoring request for " << cofVersion << LL_ENDL; - return; + << " but requesting for " << cofVersion << LL_ENDL; } } From 52517126399a07839c9b78faed90dc7c09285329 Mon Sep 17 00:00:00 2001 From: Rider Linden Date: Wed, 2 Mar 2016 11:28:55 -0800 Subject: [PATCH 4/8] MAINT-6182: When building the list of pathfinding characters throw away any entries that are undefined. --- indra/newview/llpathfindingcharacterlist.cpp | 26 +++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/indra/newview/llpathfindingcharacterlist.cpp b/indra/newview/llpathfindingcharacterlist.cpp index 12340cebfa..d63daaa59b 100755 --- a/indra/newview/llpathfindingcharacterlist.cpp +++ b/indra/newview/llpathfindingcharacterlist.cpp @@ -40,14 +40,14 @@ //--------------------------------------------------------------------------- LLPathfindingCharacterList::LLPathfindingCharacterList() - : LLPathfindingObjectList() + : LLPathfindingObjectList() { } LLPathfindingCharacterList::LLPathfindingCharacterList(const LLSD& pCharacterListData) - : LLPathfindingObjectList() + : LLPathfindingObjectList() { - parseCharacterListData(pCharacterListData); + parseCharacterListData(pCharacterListData); } LLPathfindingCharacterList::~LLPathfindingCharacterList() @@ -56,14 +56,16 @@ LLPathfindingCharacterList::~LLPathfindingCharacterList() void LLPathfindingCharacterList::parseCharacterListData(const LLSD& pCharacterListData) { - LLPathfindingObjectMap &objectMap = getObjectMap(); + LLPathfindingObjectMap &objectMap = getObjectMap(); - for (LLSD::map_const_iterator characterDataIter = pCharacterListData.beginMap(); - characterDataIter != pCharacterListData.endMap(); ++characterDataIter) - { - const std::string& uuid(characterDataIter->first); - const LLSD& characterData = characterDataIter->second; - LLPathfindingObjectPtr character(new LLPathfindingCharacter(uuid, characterData)); - objectMap.insert(std::pair(uuid, character)); - } + for (LLSD::map_const_iterator characterDataIter = pCharacterListData.beginMap(); + characterDataIter != pCharacterListData.endMap(); ++characterDataIter) + { + if (characterDataIter->second.isUndefined()) + continue; + const std::string& uuid(characterDataIter->first); + const LLSD& characterData = characterDataIter->second; + LLPathfindingObjectPtr character(new LLPathfindingCharacter(uuid, characterData)); + objectMap.insert(std::pair(uuid, character)); + } } From a2bdba7aa245e412e0cd120eb10c76df1598104c Mon Sep 17 00:00:00 2001 From: Rider Linden Date: Wed, 2 Mar 2016 12:06:19 -0800 Subject: [PATCH 5/8] MAINT-5693: Only force forward progression of COF version for your own Avatar --- indra/newview/llvoavatar.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 62ee1a6424..69709f2bc9 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -7356,7 +7356,7 @@ bool resolve_appearance_version(const LLAppearanceMessageContents& contents, S32 //----------------------------------------------------------------------------- void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) { - static S32 largestCOFSeen(LLViewerInventoryCategory::VERSION_UNKNOWN); + static S32 largestSelfCOFSeen(LLViewerInventoryCategory::VERSION_UNKNOWN); LL_DEBUGS("Avatar") << "starts" << LL_ENDL; bool enable_verbose_dumps = gSavedSettings.getBOOL("DebugAvatarAppearanceMessage"); @@ -7394,19 +7394,26 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) S32 this_update_cof_version = contents.mCOFVersion; S32 last_update_request_cof_version = mLastUpdateRequestCOFVersion; - if (largestCOFSeen > this_update_cof_version) + if (largestSelfCOFSeen > this_update_cof_version) { - LL_WARNS("Avatar") << "Already processed appearance for COF version " << - largestCOFSeen << ", discarding appearance with COF " << this_update_cof_version << LL_ENDL; - return; + LL_WARNS("Avatar") << "****BUG WOULD HAVE HAPPENED****" << + largestSelfCOFSeen << " > " << this_update_cof_version << LL_ENDL; } - largestCOFSeen = this_update_cof_version; if( isSelf() ) { LL_DEBUGS("Avatar") << "this_update_cof_version " << this_update_cof_version << " last_update_request_cof_version " << last_update_request_cof_version << " my_cof_version " << LLAppearanceMgr::instance().getCOFVersion() << LL_ENDL; + + if (largestSelfCOFSeen > this_update_cof_version) + { + LL_WARNS("Avatar") << "Already processed appearance for COF version " << + largestSelfCOFSeen << ", discarding appearance with COF " << this_update_cof_version << LL_ENDL; + return; + } + largestSelfCOFSeen = this_update_cof_version; + } else { From a407cb784266802317fe299baa792166e3128293 Mon Sep 17 00:00:00 2001 From: Rider Linden Date: Wed, 2 Mar 2016 13:45:32 -0800 Subject: [PATCH 6/8] MAINT-5693: Didn't remove a stray debug comment. --- indra/newview/llvoavatar.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 69709f2bc9..845bc85a96 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -7394,12 +7394,6 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) S32 this_update_cof_version = contents.mCOFVersion; S32 last_update_request_cof_version = mLastUpdateRequestCOFVersion; - if (largestSelfCOFSeen > this_update_cof_version) - { - LL_WARNS("Avatar") << "****BUG WOULD HAVE HAPPENED****" << - largestSelfCOFSeen << " > " << this_update_cof_version << LL_ENDL; - } - if( isSelf() ) { LL_DEBUGS("Avatar") << "this_update_cof_version " << this_update_cof_version From 3b790524865dc7a61496ee8ba90520d8be7cadf1 Mon Sep 17 00:00:00 2001 From: Rider Linden Date: Thu, 3 Mar 2016 10:15:47 -0800 Subject: [PATCH 7/8] MAINT-5693: Move avatar update into the AIS coprocedure pool. --- indra/newview/llappearancemgr.cpp | 188 +++++++++++++----------------- indra/newview/llappearancemgr.h | 5 +- 2 files changed, 84 insertions(+), 109 deletions(-) diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 76b7ea5ccc..a2ab32a09e 100755 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -3354,23 +3354,12 @@ LLSD LLAppearanceMgr::dumpCOF() const void LLAppearanceMgr::requestServerAppearanceUpdate() { - if (!mIsServerBakeOutstanding) - { - LLCoros::instance().launch("LLAppearanceMgr::serverAppearanceUpdateCoro", - boost::bind(&LLAppearanceMgr::serverAppearanceUpdateCoro, this)); - } - else - { - LL_WARNS("Avatar") << "Server bake request would overlap outstanding request " << - " requesting new bake when ready." << LL_ENDL; - mNewServerBakeRequested = true; - } + LLCoprocedureManager::CoProcedure_t proc = boost::bind(&LLAppearanceMgr::serverAppearanceUpdateCoro, this, _1); + LLCoprocedureManager::instance().enqueueCoprocedure("AIS", "LLAppearanceMgr::serverAppearanceUpdateCoro", proc); } -void LLAppearanceMgr::serverAppearanceUpdateCoro() +void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &httpAdapter) { - BoolSetter inFlight(mIsServerBakeOutstanding); - if (!gAgent.getRegion()) { LL_WARNS("Avatar") << "Region not set, cannot request server appearance update" << LL_ENDL; @@ -3397,114 +3386,103 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro() return; } - do - { #if 0 - static int reqcount = 0; - int r_count = ++reqcount; - LL_WARNS("Avatar") << "START: Server Bake request #" << r_count << "!" << LL_ENDL; + static int reqcount = 0; + int r_count = ++reqcount; + LL_WARNS("Avatar") << "START: Server Bake request #" << r_count << "!" << LL_ENDL; #endif - // If we have already received an update for this or higher cof version, - // put a warning in the log but request anyway. - S32 cofVersion = getCOFVersion(); - S32 lastRcv = gAgentAvatarp->mLastUpdateReceivedCOFVersion; - S32 lastReq = gAgentAvatarp->mLastUpdateRequestCOFVersion; + // If we have already received an update for this or higher cof version, + // put a warning in the log but request anyway. + S32 cofVersion = getCOFVersion(); + S32 lastRcv = gAgentAvatarp->mLastUpdateReceivedCOFVersion; + S32 lastReq = gAgentAvatarp->mLastUpdateRequestCOFVersion; - mNewServerBakeRequested = false; + LL_INFOS("Avatar") << "Requesting COF version " << cofVersion << + " (Last Received:" << lastRcv << ")" << + " (Last Requested:" << lastReq << ")" << LL_ENDL; - LL_INFOS("Avatar") << "Requesting COF version " << cofVersion << - " (Last Received:" << lastRcv << ")" << - " (Last Requested:" << lastReq << ")" << LL_ENDL; - - if ((cofVersion != LLViewerInventoryCategory::VERSION_UNKNOWN)) - { - if (cofVersion < lastRcv) - { - LL_WARNS("Avatar") << "Have already received update for cof version " << lastRcv - << " but requesting for " << cofVersion << LL_ENDL; - } - if (lastReq > cofVersion) - { - LL_WARNS("Avatar") << "Request already in flight for cof version " << lastReq - << " but requesting for " << cofVersion << LL_ENDL; - } - } - - // Actually send the request. - LL_DEBUGS("Avatar") << "Will send request for cof_version " << cofVersion << LL_ENDL; - - LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter( - "UpdateAvatarAppearance", gAgent.getAgentPolicy())); - - S32 reqCofVersion = cofVersion; - if (gSavedSettings.getBOOL("DebugForceAppearanceRequestFailure")) + if ((cofVersion != LLViewerInventoryCategory::VERSION_UNKNOWN)) + { + if (cofVersion < lastRcv) { - reqCofVersion += 999; - LL_WARNS("Avatar") << "Forcing version failure on COF Baking" << LL_ENDL; + LL_WARNS("Avatar") << "Have already received update for cof version " << lastRcv + << " but requesting for " << cofVersion << LL_ENDL; + } + if (lastReq > cofVersion) + { + LL_WARNS("Avatar") << "Request already in flight for cof version " << lastReq + << " but requesting for " << cofVersion << LL_ENDL; + } + } + + // Actually send the request. + LL_DEBUGS("Avatar") << "Will send request for cof_version " << cofVersion << LL_ENDL; + +// LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter( +// "UpdateAvatarAppearance", gAgent.getAgentPolicy())); + + S32 reqCofVersion = cofVersion; + if (gSavedSettings.getBOOL("DebugForceAppearanceRequestFailure")) + { + reqCofVersion += 999; + LL_WARNS("Avatar") << "Forcing version failure on COF Baking" << LL_ENDL; + } + + do + { + LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest()); + + LLSD postData; + if (gSavedSettings.getBOOL("DebugAvatarExperimentalServerAppearanceUpdate")) + { + postData = dumpCOF(); + } + else + { + postData["cof_version"] = reqCofVersion; } - do + gAgentAvatarp->mLastUpdateRequestCOFVersion = reqCofVersion; + + LLSD result = httpAdapter->postAndSuspend(httpRequest, url, postData); + + LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS]; + LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults); + + if (!status || !result["success"].asBoolean()) { - LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest()); + std::string message = (result.has("error")) ? result["error"].asString() : status.toString(); + LL_WARNS("Avatar") << "Appearance Failure. server responded with \"" << message << "\"" << LL_ENDL; - LLSD postData; - if (gSavedSettings.getBOOL("DebugAvatarExperimentalServerAppearanceUpdate")) + // We may have requested a bake for a stale COF (especially if the inventory + // is still updating. If that is the case re send the request with the + // corrected COF version. (This may also be the case if the viewer is running + // on multiple machines. + if (result.has("expected")) { - postData = dumpCOF(); - } - else - { - postData["cof_version"] = reqCofVersion; - } + reqCofVersion = result["expected"].asInteger(); - gAgentAvatarp->mLastUpdateRequestCOFVersion = reqCofVersion; - - LLSD result = httpAdapter->postAndSuspend(httpRequest, url, postData); - - LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS]; - LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults); - - if (!status || !result["success"].asBoolean()) - { - std::string message = (result.has("error")) ? result["error"].asString() : status.toString(); - LL_WARNS("Avatar") << "Appearance Failure. server responded with \"" << message << "\"" << LL_ENDL; - - // We may have requested a bake for a stale COF (especially if the inventory - // is still updating. If that is the case re send the request with the - // corrected COF version. (This may also be the case if the viewer is running - // on multiple machines. - if (result.has("expected")) - { - reqCofVersion = result["expected"].asInteger(); - - LL_WARNS("Avatar") << "Will Retry with expected COF value of " << reqCofVersion << LL_ENDL; - continue; - } - - break; - } - - LL_DEBUGS("Avatar") << "succeeded" << LL_ENDL; - if (gSavedSettings.getBOOL("DebugAvatarAppearanceMessage")) - { - dump_sequential_xml(gAgentAvatarp->getFullname() + "_appearance_request_ok", result); + LL_WARNS("Avatar") << "Will Retry with expected COF value of " << reqCofVersion << LL_ENDL; + continue; } break; - } while (true); + } + + LL_DEBUGS("Avatar") << "succeeded" << LL_ENDL; + if (gSavedSettings.getBOOL("DebugAvatarAppearanceMessage")) + { + dump_sequential_xml(gAgentAvatarp->getFullname() + "_appearance_request_ok", result); + } + + break; + } while (true); #if 0 - LL_WARNS("Avatar") << "END: Server Bake request #" << r_count << "!" << LL_ENDL; + LL_WARNS("Avatar") << "END: Server Bake request #" << r_count << "!" << LL_ENDL; #endif - // if someone requested a server bake before the previous one was finished - // repeat the process. - if (mNewServerBakeRequested) - { - LL_WARNS("Avatar") << "New bake request received while processing previous one. Re-requesting." << LL_ENDL; - } - } while (mNewServerBakeRequested); } /*static*/ @@ -3872,9 +3850,7 @@ LLAppearanceMgr::LLAppearanceMgr(): mOutfitLocked(false), mInFlightCounter(0), mInFlightTimer(), - mIsInUpdateAppearanceFromCOF(false), - mIsServerBakeOutstanding(false), - mNewServerBakeRequested(false) + mIsInUpdateAppearanceFromCOF(false) { LLOutfitObserver& outfit_observer = LLOutfitObserver::instance(); // unlock outfit on save operation completed diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index ebe564c3ea..b97f9018c0 100755 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -34,6 +34,7 @@ #include "llinventorymodel.h" #include "llinventoryobserver.h" #include "llviewerinventory.h" +#include "llcorehttputil.h" class LLWearableHoldingPattern; class LLInventoryCallback; @@ -227,7 +228,7 @@ public: private: - void serverAppearanceUpdateCoro(); + void serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &httpAdapter); static void debugAppearanceUpdateCOF(const LLSD& content); std::string mAppearanceServiceURL; @@ -254,8 +255,6 @@ private: bool mAttachmentInvLinkEnabled; bool mOutfitIsDirty; bool mIsInUpdateAppearanceFromCOF; // to detect recursive calls. - bool mIsServerBakeOutstanding; // A server texture bake has been sent to the server and we are waiting on a response. - bool mNewServerBakeRequested; // A server texture bake has been requested, but there is already one outstanding. /** * Lock for blocking operations on outfit until server reply or timeout exceed From 6a20679c683f8da7888e7569a6e3f96eb6ba7a15 Mon Sep 17 00:00:00 2001 From: Rider Linden Date: Thu, 3 Mar 2016 11:56:19 -0800 Subject: [PATCH 8/8] MAINT-5693: Make COF Version from AIS authoritive. Ask until we get it. --- indra/newview/llappearancemgr.cpp | 35 ++++++++++++++++++------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index a2ab32a09e..99dcb80a4a 100755 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -3419,20 +3419,25 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAd // Actually send the request. LL_DEBUGS("Avatar") << "Will send request for cof_version " << cofVersion << LL_ENDL; -// LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter( -// "UpdateAvatarAppearance", gAgent.getAgentPolicy())); - - S32 reqCofVersion = cofVersion; - if (gSavedSettings.getBOOL("DebugForceAppearanceRequestFailure")) - { - reqCofVersion += 999; - LL_WARNS("Avatar") << "Forcing version failure on COF Baking" << LL_ENDL; - } +// LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter( +// "UpdateAvatarAppearance", gAgent.getAgentPolicy())); + bool bRetry; do { + bRetry = false; LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest()); + S32 reqCofVersion = getCOFVersion(); // Treat COF version (gets set by AISAPI as authoritative, + // not what the bake request tells us to use). + if (gSavedSettings.getBOOL("DebugForceAppearanceRequestFailure")) + { + reqCofVersion += 999; + LL_WARNS("Avatar") << "Forcing version failure on COF Baking" << LL_ENDL; + } + + LL_INFOS() << "Requesting bake for COF version " << reqCofVersion << LL_ENDL; + LLSD postData; if (gSavedSettings.getBOOL("DebugAvatarExperimentalServerAppearanceUpdate")) { @@ -3461,13 +3466,14 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAd // on multiple machines. if (result.has("expected")) { - reqCofVersion = result["expected"].asInteger(); + S32 expectedCofVersion = result["expected"].asInteger(); + bRetry = true; + // Wait for a 1/2 second before trying again. Just to keep from asking too quickly. + llcoro::suspendUntilTimeout(0.5); - LL_WARNS("Avatar") << "Will Retry with expected COF value of " << reqCofVersion << LL_ENDL; + LL_WARNS("Avatar") << "Server expected " << expectedCofVersion << " as COF version" << LL_ENDL; continue; } - - break; } LL_DEBUGS("Avatar") << "succeeded" << LL_ENDL; @@ -3476,8 +3482,7 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAd dump_sequential_xml(gAgentAvatarp->getFullname() + "_appearance_request_ok", result); } - break; - } while (true); + } while (bRetry); #if 0 LL_WARNS("Avatar") << "END: Server Bake request #" << r_count << "!" << LL_ENDL;