summaryrefslogtreecommitdiff
path: root/indra/newview/llmeshrepository.cpp
AgeCommit message (Collapse)Author
2014-01-09SH-4667 HTTP Viewer reports network error instead of a misnamed joint on ↵Monty Brandenberg
mesh upload Tried to add consistent mesh upload retries in the HTTP work but a combination of bad status choices in the upload service and the one-shot nature of the upload capabilities means that status information can be lost. For now, retain the wonderful manual retry logic. At some future point, we might fix the services or add application-level retry.
2013-12-06SH-4645 Viewer hangs on exit after cancelling a mesh upload.Monty Brandenberg
Problem involved a 3-way livelock between the main, upload and decomposition threads. Viewer is shutting down but an upload is in the 'generate hulls' state. Main thread asks upload request to discard and spins waiting for it to finish. Upload thread is in generateHulls spinning waiting for the decomposition thread to process a mesh request. Decomposition thread is sleeping waiting for main thread to deliver work that upload thread has asked the decomposition thread to do.
2013-10-04Merge. Pull in viewer-release after 3.6.7 release.Monty Brandenberg
2013-09-27Up the transfer timeout of small meshes to 120S. This matchesMonty Brandenberg
the change made for MAINT-2347. Large transfers are still 10 minutes. Add/update to-do list and add some more info to the FAQ in the Readme.
2013-09-24SH-3690 SH-4505 Cleanup pass through code.Monty Brandenberg
Start using DNS cache in legacy LLCurl code. Go to 15 seconds particularly as we're using threaded resolver at this point. Documentation cleanup. Add libcurl status checking and logging for curl_easy_setopt() operations that fail. Shouldn't happen and we'll just continue anyway but there's info in the logs to track these down now. Cleaned up logic around FASTTIMER enable defines used to evaluate pipeline stalls in main thread. Removed long-standing thread race around caps strings and URL construction. Not a significant risk but refactoring the code to get rid of them removed one huge eyesore. It can be made even slicker if desired (see notes).
2013-09-20Move from std::queue to std::list which has betterMonty Brandenberg
behavior and swap() as well. Should probably do this for the other queues at some point.
2013-09-20Used a c++11 feature unintentionally. Use a moreMonty Brandenberg
traditional swap-less object transfer.
2013-09-19SH-4516 Fix a subset of thread races in llmeshrepositoryMonty Brandenberg
Much earlier identified some thread races including two on mskininfoq and mdecompositionq. I actually hit one in testing the other day so I'm fixing them now. Put them under the mMutex lock and use the mutex in such a way that main thread stalls are not added.
2013-09-12SH-4489 New debug/dev settings for control over new mesh behaviorMonty Brandenberg
While giving myself a full project code review, found a bug in the MeshUseGetMesh1 setting. Mostly defaulted to old configuration but used the GetMesh2 caps which would have been a huge DoS resource sink. Did some documentation maintenance as well while I was in there. More for the to-do list, etc.
2013-09-11SH-4490 More 'humane' error code presentation from llcorehttp callersMonty Brandenberg
Added toTerseString() conversion on HttpStatus to generate a string that's more descriptive than the hex value of the HttpStatus value but still forms a short, searchable token (e.g. "Http_503" or "Core_7"). Using this throughout the viewer now, no live cases of toHex(), I believe.
2013-09-11SH-4489 New debug/dev settings for control over new mesh behaviorMonty Brandenberg
Added 'MeshUseGetMesh1' and 'MeshUseHttpRetryAfter' debug settings to control mesh transport behavior. First forces the use of the legacy mesh fetch style with high concurrency and connection churn. The second, on by default, honors Retry-After values if they are reasonable. If off or unreasonable, internal delay times are used.
2013-09-06SH-4478 Corrected/updated error handling for all retrieval operations.Monty Brandenberg
In case of HTTP errors or parsing/processing errors, fail the fetch request rather than do a retry spin. Add logging for all such failure paths. Added a development/debug flag to create probabilistic failures to test these modes and general error recovery by higher-level layers.
2013-08-29Document the fast timer testing apparatus a bit.Monty Brandenberg
2013-08-29Merge. Pull in monty/viewer-drano-metrics. This will likely beMonty Brandenberg
the last time and that repo can soon be abandoned (QA function only).
2013-08-28Add conditional LLFastTimer blocks to stallable main thread methodsMonty Brandenberg
2013-08-15SH-4410 Internal Documentation. Update and correct the mutex/dataMonty Brandenberg
lists to reflect current. Describe the functional flow of things for a single LOD request. Put together to-do list for follow on work. Knock down the low/high water limits for GetMesh a bit, 100/200 too high, 75/150 should be better, vis-a-vis pathological failures.
2013-08-07Create separate high/low water level limits for GetMesh andMonty Brandenberg
GetMesh2 capabilities. They should be independent now.
2013-08-06SH-4411 Thread/mutex rework between main and worker threadMonty Brandenberg
Have the ::notifyLoadedMeshes() method doing correct locking and stall avoidance at the same time. This method now does lazy mutex lock acquisition (trylock()) and if it fails on either, it gives up and comes back later. Capture the maximum number of sequential failures and report this at the end of the run in the log. (So far, with big mesh regions, I've only seen 1s and 2s.) Locking/mutex requirements sorted in other locations as well. LLMutex gets trylock() method as well as new LLMutexTrylock scoped locking class. Clean up some documentation, more to do.
2013-08-05Added some simple counters to the mesh repository code and thenMonty Brandenberg
added a Mesh status line to the texture fetch console. Mesh is often in competition with textures and so the mesh information seems appropriate there. Do get a nice feel for progress and you definitely see when the throttles kick in.
2013-08-05Change the setting for GetMesh2 meshes to Mesh2MaxConcurrentRequests.Monty Brandenberg
While linking GetMesh2 to the old setting was simpler from a user point-of-view, they really shouldn't be linked and the old one will go away. This one may be renamed to AssetMaxConcurrentRequests or something similar if we get to the mesh/texture unification step.
2013-07-30SH-4371 Reduce 22mS inter-connection latency.Monty Brandenberg
This really extended into the client-side request throttling. Moved this from llmeshrepository (which doesn't really want to do connection management) into llcorehttp. It's now a class option with configurable rate. This still isn't the right thing to do as it creates coupling between viewer and services. When we get to pipelining, this notion becomes invalid.
2013-07-29SH-4368 Adjust upload timeout parameters for slow networks.Monty Brandenberg
Generally sorted the mesh timeout parameters for maximum transport time (staying with default 30 for connect). 60S for normal meshes, 600S for large. Also documented default option values in httpoptions.h. Useful to have these. In the future, the timeouts might go into standard llsd options where they can be tracked a bit more.
2013-07-25SH-4365 SH-4367 Conversion of mesh uploaders to llcorehttp.Monty Brandenberg
With this checkin, legacy LLCurl is out of the mesh code. Uploaders and responders are converted and functioning. Logging has been cleaned up throughout the code to use the macro form with tag/subtag capability. DEBUGS-level logging added for some upload path milestones. Better error information flow from failed responses to viewer alert boxes but I'd really, really like to do better here. Mesh upload problems are completely opaque as a user. Minor cleanups (removed dead members, method signatures tidied, less data conversion). Could almost call this complete, will likely have platform cleanups, however.
2013-07-18Merge. Refresh from viewer-release.Monty Brandenberg
2013-07-18Merge. Refresh from viewer-release.Monty Brandenberg
2013-07-18SH-4325 Viewer working mixed grid with GetMesh and GetMesh2 capsMonty Brandenberg
Viewer modified for preference for GetMesh2 caps. When found, uses this cap and uses 1/4 the connection concurrency specified by MeshMaxConcurrentRequests. Also uses a modified calculation for high/low water feeding into the llcorehttp library.
2013-06-28SH-4312 Clumsy configuration coordination between mesh and corehttpMonty Brandenberg
Taught llappcorehttp to register signals on the settings values that chagne behavior. Have initialization and settings changes sweep through settings and change them. Dynamic changes are tried but have no effect (produce a warning message) as dynamic settings still aren't supported but the plumbing is now connected. Just need to change llcorehttp. Bounced the 'teleport started' signal around and it ended up back where it started with some cleanup. This is making me less angry...
2013-06-28Merge with viewer-bear which was just merged with viewer-releasecallum_linden
2013-06-27SH-4311 Get highwater limiting of requests into llhttpcore working.Monty Brandenberg
Fixed the logic and have it covering all five types of requests now with validation via an assert (when enabled). Should keep things working smoothly and avoid floods of 503s when in debug modes. Also started a round of file-level documentation detailing thread usage and mutex coverage. More to do, more to describe. But the high- water stuff is functioning correctly.
2013-06-27SH-4310/BUG-2810/MAINT-2794 Better status checking and error logging in ↵Monty Brandenberg
Mesh code. Pay correct attention to status codes coming back from services. Generate better and consistent error messages when problems arise. There's more to do in error handling, need a way to cleanly fail all request types, only have that for LOD at this point. Do better keeping the HTTP pipeline between the low and high water marks. This was made challenging because the outer most code couldn't really see what's going on internally (whose actions are delayed in a worker thread). More to do here, the debug-like requests don't honor limits, that will come later. Made retry counts available from llcorehttp which can be used by the throttle-anticipating logic to advance the count. It helps but it reinforces the coupling between viewer and server which I do not like.
2013-06-20SH-4257 Preparation for a new cap grant: GetMesh2Monty Brandenberg
Mesh repo is using three policy classes now: one for large objects, one for GetMesh2 regions, one for GetMesh regions. It's also detecting the presence of the cap and using the correct class. Class initialization cleaned up significantly in llappcorehttp using data-directed code. Pulled in the changes to HttpHeader done for sunshine-internal then did a refactoring pass on the header callback which now uses a unified approach to clean up and deliver header information to all interested parties. Added support for using Retry-After header information on 503 retries.
2013-06-19Fixups for the transplant of the HttpHeader changes from sunshine.Monty Brandenberg
2013-06-18Occlusion culling overhaul.Dave Parks
2013-06-03Fix buildsimon
2013-05-30Merge. Pull in viewer-release reflecting new release structure.Monty Brandenberg
2013-05-29Merge downstream codesimon
2013-05-21BUG-2432: Crashfix. Don't call map::erase when the iterator is not valid.Oz Linden
2013-05-02SH-4161 Integrate cpu metrics into LLDeadmanTimer and then metrics viewerMonty Brandenberg
Normalize deadman timer's args on U64/F64. Internals remain the same. Modify mesh to collect and output enhanced CPU metrics.
2013-05-02SH-4161 Integrate cpu metrics into LLDeadmanTimer and then metrics viewerMonty Brandenberg
Integrated as a ctor-time option to LLDeadmanTimer and have mesh use this mode for the stats I'm gathering.
2013-04-24Fix crash discovered during other testing. Reviewed by Kellysimon
2013-04-18SH-4090 Metrics for mesh load time - cleanup after davep reviewMonty Brandenberg
One of the metrics calls was running in an LLCurl-owned thread doing responder invocation. Deleted that invocation and will do with the other safe ones. Added a boost signal on the TeleportStarted message which is now used to restart the metrics timer. I think I'd like to move the metric blob into a free- standing entity later...
2013-04-17SH-4090 Integrating deadman timer with mesh repo downloads.Monty Brandenberg
Timer interface violated my design rules and I paid for it with clumsiness and silent errors. Cleaned it up mainly removing the evil default values. Found better integration points in the mesh downloader and it's producing fairly consistent numbers on the MeshTest2 test region (about 5500 downloads, ~90 seconds, +/- 10 seconds). Will review with davep and do an early timer stop on teleport which invalidates a timing sequence.
2013-06-19SH-4252 Add second policy class for large mesh asset downloadsMonty Brandenberg
Added second mesh class as well as an asset upload class. Refactored initialization to use less code and more data to cleanly get http started. Modified mesh to use the new http class for large requests (>2MB for now). Added additional timeout setting to llcorehttp to distinguish connection timeout from transport timeout and are now using transport timeout values for large asset downloads that may need more time.
2013-06-07Mostly cleanup. A chunk of comment code nobody needs. DereferenceMonty Brandenberg
after delete, erase() on end() iterator, a few more like that. Killed a dead variable.
2013-06-03Merge. Refresh from viewer-release merged with in-progress work.Monty Brandenberg
2013-06-03SH-4184 Conversion to llcorehttp. Remove unneeded responderMonty Brandenberg
classes (moved to Handlers).
2013-05-30Merge. Pull viewer-release to get the new version scheme changes.Monty Brandenberg
2013-05-08SH-4139 Convert http downloaders and responders to llcorehttp patternsMonty Brandenberg
Conversion was mostly trivial. Did some refactoring in the conversion of Responders to Handlers which eliminated 5X code replication. More will be done especially as this is extended to deal with the various possible combinations of 200/206/416 status for ranged gets. There are a lot of thread races in the existing code, that is going to need some real attention. And the scheduling/liveness logic in the thread management bounces around from thread to thread wasting a lot of time and using expensive synchronization. Much can be done here. But the result is that the 8 connections in the Mesh corehttp class now perform as did the 32 connections of the original. And that 32 actually looks like it could bleed to over 64. So, progress...
2013-05-07SH-4162 Merge metrics repo into this branch and integrateMonty Brandenberg
Pull cpu-based metrics into llcorehttp work to enable A/B testing. Simple merge.
2013-05-07SH-4139 Convert http downloaders and responders to llcorehttp patternsMonty Brandenberg
First version running with all five downloaders converted. Not certain all are functional yet and the whole thing is slow but it is running.