Commit Graph

206 Commits (5eef65e99476b716985eeccfbbcdafdfb664cb1a)

Author SHA1 Message Date
William Todd Stinson 67bc42a80a Pull and merge from ssh://hg@bitbucket.org/lindenlab/viewer-beta. 2012-11-20 16:20:40 -08:00
William Todd Stinson c9044c03b3 Pull and merge from ssh://hg@bitbucket.org/lindenlab/viewer-beta. 2012-11-09 18:51:23 -08:00
William Todd Stinson 9da9b2d84b Pull and merge from ssh://stinson@hg.lindenlab.com/richard/viewer-chui/. 2012-10-17 14:32:29 -07:00
Oz Linden 1709952adb pull back 3.4.1-beta6 fixes 2012-10-10 21:40:10 -04:00
Dave Parks 374f20edf0 Fix non-thread-safe refcounting of LLHTTPClient::Responder and fix out-of-order deletion of LLTextureFetch on shutdown 2012-10-03 14:30:21 -05:00
Monty Brandenberg 4091e47cf2 DRTVWR-209 Merge of viewer-development with SH-3316 drano-http code.
cmake and other files didn't get moved over, do it by hand.
2012-09-08 18:56:43 -04:00
Monty Brandenberg 09cd2a4b1a DRTVWR-209 Additional merge of viewer-development with SH-3316 drano-http code.
Restore original deleteRequest/removeRequest implementation removing
a small race.  Remove a short-lived additional timeout scheme on requests
which really isn't appropriate as originally implemented as we can have
very long-lived requests on big regions.
2012-09-07 15:08:12 -04:00
Monty Brandenberg 04e8d074b2 DRTVWR-209 Merge of viewer-development with SH-3316 drano-http code.
This was yet another refresh from v-d because of significant changes
to lltexturefetch that would not have been resolvable by casual
application of any merge tool.  There are still a few questions
outstanding but this is the initial, optimistic merge.
2012-09-07 12:53:07 -04:00
Monty Brandenberg 67553c99f6 Pointless edit to tickle TC/codeticket. 2012-08-21 14:02:53 -04:00
Monty Brandenberg 7bee4b58ff SH-3325 texture load slow on some machines
This doesn't really address 3325 directly but it is the result of research
done while hunting it down.  First, this is a thread safety improvement for
canceled requests that have gone into resource wait state.  I don't think
we've seen a failure there but there was a window.  It also cleans the
resource wait queue earlier which lets us do less work and get requests
more quickly into llcorehttp by bypassing the resource wait state.  With
this, I finally feel comfortable about rundown of requests.
2012-08-21 12:28:51 -04:00
Monty Brandenberg 4b86f8983a SH-3329 Cached scene loads slower than same scene with cleared cache.
A/B comparison with original code showed the newer issuing lower-priority
requests of the cache reader and some other minor changes.  Brought them
into agreement (this is cargo-cult programming).  Made the HTTP resource
semaphore an atomic int for rigorous correctness across threads.  I
swear I'm going to tear down this code someday.
2012-08-19 18:51:21 -04:00
Monty Brandenberg 9de14fe45b SH-3327 HTTP transfers not showing up in texture console 'net tot tex' value.
Dropped an argument during integration which made the total byte count read
lower than expected.  Everything else is fine, however.
2012-08-17 12:33:12 -04:00
Aura Linden efdcf045b0 Merged in from viewer-development. 2012-08-17 08:07:15 -07:00
Oz Linden 97106c2dea merge changes for DRTVWR-194 2012-08-15 17:07:10 -04:00
Monty Brandenberg f5e35cbc53 Merge from viewer-development. 2012-08-13 12:09:04 -04:00
Monty Brandenberg fdb2ae8335 Merge of viewer-development (3.4.1). 2012-08-03 11:57:51 -04:00
Brad Payne (Vir Linden) 58d5e223b8 merge 2012-07-30 15:02:02 -04:00
Monty Brandenberg 3f032e33f2 SH-3280 Better init/shutdown functionality for llcorehttp by llappviewer
Isolate llcorehttp initialization into a utility class (LLAppCoreHttp)
that provides glue between app and library (sets up policies, handles
notifications).  Introduce 'TextureFetchConcurrency' debug setting to
provide some field control when absolutely necessary.
2012-07-19 13:41:18 -04:00
Monty Brandenberg c9f5bc7cae SH-3189 Improve naive data structures
Move releaseHttpWaiters() to commonUpdate from doWork.
More appropriate home for it.  Have deleteOK() defer deletion
of anything in WAIT_HTTP_RESOURCE2 state to keep pointers valid
for the releaseHttpWaiters() method.  It will then transition
canceled operations to SEND_HTTP_REQ where they can be deleted.
2012-07-17 11:24:52 -04:00
Monty Brandenberg d238341afa SH-3189 Remove/improve naive data structures
When releasing HTTP waiters, avoid unnecessary sort activity.
For Content-Type in responses, let libcurl do the work and removed
my parsing of headers.  Drop Content-Encoding as libcurl will deal
with that.  If anyone is interested, they can parse.
2012-07-16 11:53:04 -04:00
Xiaohong Bao 0cbeee19d7 fix for SH-3137: delay to issue new http fetching requests if http connection failure happens 2012-07-11 16:09:07 -06:00
Monty Brandenberg bc72acbfd2 SH-3244 Syscall avoidance in HttpRequest::update() method
Well, achieved that by doing work in bulk when needed.  But
turned into some additional things.  Change timebase from
mS to uS as, well, things are headed that way.  Implement
an HttpReplyQueue::fetchAll method (advertised one, hadn't
implemented it).
2012-07-10 18:50:21 -04:00
Monty Brandenberg a5ba9c0eb3 SH-3276 Handle 416 status back from texture fetches as okay.
A 416 will just mean there's no more data and whatever we have
is complete.
2012-07-10 16:56:38 -04:00
Monty Brandenberg d6cbe006d3 Take body size as the reply size when Content-Range header isn't available. 2012-07-09 17:29:21 -04:00
Monty Brandenberg b3659f2eba Safe implementation of the HTTP resource waiter release method.
Doesn't use sets or maps and so there's no ordering assumption to
be violated when priorities are changed.  Should also be faster.
Still want to get rid of the ancillary list, however...
2012-07-09 17:04:07 -04:00
Monty Brandenberg 348db20b92 SH-3187 Issue smarter 'Range' requests for textures.
First, try to issue ranged GETs that are always at least partially
satisfiable.  This will keep Varnish-type caches from simply sending
back 200/full asset responses to unsatisfiable requests.  Implement
awareness of Content-Range headers as well.  Currently they're not
coming back but they will be someday.
2012-07-09 11:47:47 -04:00
Xiaohong Bao d99e867284 fix for MAINT-1201: 404 errors appear in the log when opening the world map 2012-07-06 16:36:12 -06:00
Xiaohong Bao 82dbdfea70 Automated merge with https://bitbucket.org/VirLinden/drano 2012-07-06 14:58:35 -06:00
Xiaohong Bao e40d9081c6 fix for SH-3234: Map tile fetching broken in drano build 2012-07-06 14:57:35 -06:00
Monty Brandenberg 2d7b7de203 More integration work for texture fetch timeouts.
The fetch state machine received a new timeout during the WAIT_HTTP_REQ
state.  For the integration, rather than jump the state to done, we issue
a request cancel and let the notification plumbing do the rest without
any race conditions or special-case logic.
2012-07-03 13:06:46 -04:00
Monty Brandenberg 8e5197a71b Merge 3.3.3 release with Drano HTTP library at 3.3.0
Big delta was converting the new texture debugger support code
to the new library.  Viewer manifest should probably get an eyeball
before release.
2012-07-02 18:06:22 -04:00
Dave Parks db5d1b851a merge 2012-06-28 13:50:35 -05:00
Xiaohong Bao 0730b24d7c fix merge conflicts: v-r to drano 2012-06-26 22:27:24 -06:00
Brad Payne (Vir Linden) 74d4f8af01 v-r to drano merge conflicts wip 2012-06-26 16:43:58 -04:00
Monty Brandenberg 5ff1758b63 SH-3177, SH-3180 std::iostream and LLSD serialization for BufferArray objects.
Seems to be working correctly.  Not certain this is the fastest possible way
to provide a std::streambuf interface but it's visually acceptable.
2012-06-22 14:41:08 -04:00
Monty Brandenberg a066bc1994 SH-3181 More interface options for API. Also includes returned headers.
Only thing interesting in this changeset is the discovery that a sleep
in the fake HTTP server ties up tests.  Need to thread that or fail on
client disconnect or something to speed that up and make it usable for
bigger test scenarios.  But good enough for now...
2012-06-20 18:43:28 -04:00
Monty Brandenberg 6b4fe9fadc When a Content-Range header is received, make available the full triplet of <offset, length, fulllength>. 2012-06-19 17:12:20 -04:00
Monty Brandenberg 1cf8e785ba Tidy Texture Console, add cache & resource wait stats, issue stats line to log on exit.
With much trial-and-error, cleaned up the banner on the texture console and made everything
mostly fit.  Added global cache read, cache write and resource wait count events to the
console display to show if cache is working.  On clean exit, emit a log line to report
stats to log file (intended for automated tests, maybe):
LLTextureFetch::endThread: CacheReads:  2618, CacheWrites:  117, ResWaits:  0, TotalHTTPReq:  117
2012-06-18 18:38:24 -04:00
Monty Brandenberg b08125a587 LLMutex recursive lock, global & per-request tracing, simple GET request, LLProxy support, HttpOptions starting to work, HTTP resource waiting fixed.
Non-LLThread-based threads need to do some registration or LLMutex locks taken out in these
threads will not work as expected (SH-3154).  We'll get a better solution later, this fixes
some things for now.  Tracing of operations now supported.  Global and per-request (via
HttpOptions) tracing levels of [0..3].  The 2 and 3 levels use libcurl's VERBOSE mode
combined with CURLOPT_DEBUGFUNCTION to stream high levels of detail into the log.  *Very*
laggy but useful.  Simple GET request supported (no Range: header).  Really just a
degenrate case of a ranged get but supplied an API anyway.  Global option to use the
LLProxy interface to setup CURL handles for either socks5 or http proxy usage.  This
isn't really the most encapsulated way to do this but a better solution will have to
come later.  The wantHeaders and tracing options are now supported in HttpOptions giving
per-request controls.  Big refactoring of the HTTP resource waiter in lltexturefetch.
What I was doing before wasn't correct.  Instead, I'm implementing the resource wait
after the Semaphore model (though not using system semaphores).  So instead of having
a sequence like:  SEND_HTTP_REQ -> WAIT_HTTP_RESOURCE -> SEND_HTTP_REQ, we now
do WAIT_HTTP_RESOURCE -> WAIT_HTTP_RESOURCE2 (actual wait) -> SEND_HTTP_REQ.  Works
well but the prioritized filling of the corehttp library needs some performance
work later.
2012-06-14 16:31:48 -04:00
Monty Brandenberg 682ae001cf Restore original priority scheme of LOW/HIGH.
The NORMAL range doesn't do any sleeping at all and so we'll
spin the core harder than we already are.  Bring all idlers
into the same range.
2012-06-13 11:46:38 -04:00
Xiaohong Bao 0d80aced24 for SH-3073: implement a fast cache system for texture fetching 2012-06-12 17:01:48 -06:00
Monty Brandenberg 89187229dd Refactoring of the request completion thread and removal of 206/content-range hack in xport.
Retry/response handling is decided in policy so moved that there.  Removed special case
206-without-content-range response in transport.  Have this sitation recognizable in the
API and let callers deal with it as needed.
2012-06-11 15:28:06 -04:00
Brad Payne (Vir Linden) 5700ba737d avatar metrics - cleanup, removed unused fields 2012-06-11 11:00:38 -04:00
Monty Brandenberg 28a04400b4 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.
2012-06-08 20:21:54 -04:00
Brad Payne (Vir Linden) 9f000e4b34 SH-3153 FIX 2012-06-08 15:49:11 -04:00
Monty Brandenberg cab68bb04e First efforts at getting the texture cache working. This is
now avoiding doing HTTP fetches for read data.  Not certain it's
completely correct but the difference is already significant.
2012-06-07 18:10:32 -04:00
Monty Brandenberg 196e1d46bd Lock/Mutex fixes, documentation, new resource wait state, dtor cleanups
Went through all the code and tried to document lock and thread usage
in the module.  There's a huge comment block introducing all of this
at the beginning and I believe it's correct (though not quite complete).
Keep it updated, people.  Added a new state, WAIT_HTTP_RESOURCE, that's
sort of a side-state of SEND_HTTP_REQ.  If we hit a high-water mark
for HTTP requests, the extra are shunted to the new state once.  Once
levels fall to a low-water mark, we run through a wait list of UUIDs,
sort the valid ones by priority and release them for service.  This
keeps the HTTP layer busy while leaving the active queue shallow enough
that requests can still be re-prioritzed cheaply.  Priority model
changed.  The new state uses the PRIORITY_LOW mask, the old users
of _LOW are now at PRIORITY_NORMAL and sleepers woken up after an
external event are kicked off at PRIORITY_HIGH.  This combination
along with the new state should avoid priority inversion and keep
things running without resorting to an infinite pipeline.  New
state displays as "HTW" with green text in the texture console.
Request cancelation and worker run-down should now be more
correct but this edge case may need more attention.
2012-06-07 17:46:22 -04:00
Monty Brandenberg 05af16a23a Policy + caching fixes + https support + POST working
Implemented first global policy definitions to support SSL CA certificate configuration
to support https: operations.  Fixed HTTP 206 status handling to match what is currently
being done by grid services and to lay a foundation for fixes that will be a response
to ER-1824.  More libcurl CURLOPT options set on easy handles to do peer verification
in the traditional way.  HTTP POST working and now reporting asset metrics back to
grid for the viewer's asset system.  This uses LLSD so that is also showing as compatible
with the new library.
2012-06-06 13:52:38 -04:00
Monty Brandenberg 9a11a2946f Faster spin in worker thread when doing I/O and a priority bump needed when fixing priorities. 2012-06-05 12:06:42 -04:00
Monty Brandenberg 3da3b00084 Merge 2012-06-01 21:50:47 -04:00