Commit Graph

23348 Commits (bc72acbfd2410e01946375bcfa29cf37a7c01c17)

Author SHA1 Message Date
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 1c3af2658e SH-3192 Fix Boost 1.48.0 libraries to support Debug builds on Windows.
Tweaked the boost source as per Boost issue #6185 using 1.49.0 sources
and this picks up the new build.  Debug viewer builds and runs.
2012-07-10 13:29:24 -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 398d78a773 Rework the 'sleep' logic in the test HTTP server so that the
30-second hang doesn't break subsequent tests.  Did this by
introducing threads into the HTTP server as I can't find the magic
to detect that my client has gone away.
2012-07-09 13:28:50 -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
Monty Brandenberg f5f51d3cda SH-3185 Fill in some FIXME/TODO cases
Also added some comments and changed the callback userdata argument
to be an HttpOpRequest rather than a libcurl handle.  Less code,
less clutter.
2012-07-07 19:35:32 -04:00
Monty Brandenberg 70e976d1a8 Odd that this was accepted by VS2010. It clearly wasn't right. 2012-07-06 19:17:23 -04:00
Monty Brandenberg d2af82aafc Experiment with ignoring priority in the library. Let upper layers
sort things out or use policy classes (eventually) to arrange low
and high priority traffic.  Subjectively, I think this works better
in practice (as I haven't implemented a dynamic priority setter yet).
2012-07-06 19:14:42 -04:00
Monty Brandenberg f37b90df50 SH-3222 Slow loading textures on Lag Me 1
Think I have found the major factor that causes the Linksys WRT54G V5 to
fall over in testing scenarios:  DNS.  For some historical reason, we're
trying to use libcurl without any DNS caching.  My implementation echoed
that and implemented it correctly and I was seeing a DNS request per request
on the wire.  The existing implementation tries to do that and has bugs
because it is clearing caching DNS data querying only once every few
seconds.  Once I started emulating the bug, comms through the WRT became
much, much more reliable.
2012-07-06 18:09:17 -04:00
Monty Brandenberg adce38800a Example program needs to set Accept: header to talk to Caps router. 2012-07-04 23:30:58 -04:00
Monty Brandenberg e38a676c08 Add CURLE_SEND_ERROR and CURLE_RECV_ERROR to the set of retryable errors.
Data problems after connections are established should be retried as well.
Extend to appropriate libcurl codes.  Also allow our connectivity to drop
to as low as a single connection when trying to recover.
2012-07-03 19:22:24 -04: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 7997a9c4e5 Dos-to-unix line ending conversion. 2012-07-02 18:08:36 -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
Monty Brandenberg e8b0088d1a SH-3184/SH-3221 More work on cleanup with better unit test work and more aggressive shutdown of a thread.
Some additional work let me enable a memory check for the clean shutdown case and
generally do a better job on other interfaces.  Request queue waiters now awake
on shutdown and don't sleep once the queue is turned off.  Much better semantically
for how this will be used.
2012-06-26 12:28:58 -04:00
Monty Brandenberg e172ec84fa SH-3184/SH-3221 Improve cleanup, destructor, thread termination, etc. logic in library.
With this commit, the cleanup paths should be production quality.  Unit tests have been
expanded to include cases requiring thread termination and cleanup by the worker thread.
Special operation/request added to support the unit tests.  Thread interface expanded
to include a very aggressive cancel() method that does not do cleanup but prevents the
thread from accessing objects that will be destroyed.
2012-06-23 23:33:50 -04:00
Monty Brandenberg bc7d5b24d1 This sets down the groundwork for dynamic policy classes.
Groundwork is used for the default class which currently represents
texture fetching.  Class options implemented from API user into
HttpLibcurl.  Policy layer is going to start doing some traffic
shaping like work to solve problems with consumer-grade gear.
Need to have dynamic aspects to policies and that starts now...
2012-06-22 19:13:50 -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 ed55eec8e3 Always another platform build fix. Mac this time. 2012-06-22 12:44:54 -04:00
Monty Brandenberg ed5db30654 Preparing for better shutdown/cleanup logic. 2012-06-21 21:32:33 -04:00
Monty Brandenberg eed28348f2 Compiler warning fix on linux. 2012-06-21 20:02:24 -04:00
Monty Brandenberg 4da93b6ad9 SH-3177 Add streambuf/iostream adapters to BufferArray object.
Initial version that should have enough of the plumbing to produce
a working adapter.  Memory test is showing 8 bytes held after one
of the tests so I'm going to revisit that later.  But basic
functionality is there going by the unit tests.
2012-06-21 19:45:40 -04:00
Oz Linden 90547ff411 Added tag 3.3.3-release for changeset 6428242e124b 2012-06-21 16:44:04 -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 a50944e078 Cleanup: move magic nubmers to new _httpinternal.h header file. 2012-06-19 17:01:02 -04:00
Monty Brandenberg f0353abe76 Implement timeout and retry count options for requests.
Pretty straightforward.  Still don't like how I'm managing
the options block.  Struct?  Accessors?  Can't decide.  But
the options now speed up the unit test runs even as I add
tests.
2012-06-19 15:43:29 -04:00
Oz Linden 1d23a8600c Added tag 3.3.3-beta3 for changeset 4b3c68199a86 2012-06-18 22:15:33 -04:00
Oz Linden ba01c76e1f tag merge of DRTVWR-169 2012-06-18 22:12:15 -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
Nat Goodspeed 84536935eb MAINT-1144: Update with relevant apr_suite fix. 2012-06-18 16:14:30 -04:00
Nat Goodspeed 667ca78b49 MAINT-1144: Update to apr_suite containing relevant fix. 2012-06-18 12:57:55 -04:00
Monty Brandenberg 46662a3010 Move dtors for refcounted objects to protected access. 2012-06-18 11:16:58 -04:00
Monty Brandenberg 252c297bcc Add metrics gathering utils for Mac OS X. All platforms have useful numbers now. 2012-06-16 19:03:31 -04:00
Monty Brandenberg b27bb47f3a Implement metrics collection for Linux. Next: Mac OS X. 2012-06-16 21:51:02 +00:00
Monty Brandenberg 6193ee6a33 First round of basic tuning work (shorter sleeps, larger BufferArray blocks).
Beefed up the metrics gathering in http_texture_load to get memory sizes and
cpu consumption on windows (still need to implement that on Mac & linux).
Ran runs with various idle loops with sleeps from 20 ms down to pure spinning,
varied Block allocation size from 1504 to 2^20 bytes.  2ms/2ms/65540 appears
to be a good spot under the test conditions (Win7, danu grid, client in Boston).
2012-06-16 15:50:48 -04:00
Monty Brandenberg 57575339bb Fix for linux/mac builds. 2012-06-15 13:42:13 -04:00
Monty Brandenberg 888e2587e5 Ported example (freestanding) program to drive API & generate performance numbers.
This is a command-line utility to pull content down from a service through
the llcorehttp library to produce timings and resource footprints.
2012-06-15 13:05: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
Monty Brandenberg c71e808a36 Really need to figure out the 'static const' problem on Windows.
For now, workaround...
2012-06-12 19:46:19 -04:00
Monty Brandenberg 7adeb39237 HTTP Proxy, PUT & POST, unit tests and refactoring.
Implemented/modified PUT & POST to not used chunked encoding for the request.
Made the unit test much happier and probably a better thing for the pipeline.
Have a cheesy static & dynamic proxy capability using both local options and
a way to wire into LLProxy in llmessages.  Not a clean thing but it will get
the proxy path working with both socks5 & http proxies.  Refactoring to get
rid of unneeded library handler and unified an HttpStatus return for all
requests.  Big batch of code removed as a result of that and more is possible
as well as some syscall avoidance with a bit more work.  Boosted the unit
tests for simple PUT & POST test which revealed the test harness does *not*
like chunked encoding so we'll avoid it for now (and don't really need it
in any of our schemes).
2012-06-12 17:42:33 -04:00
Monty Brandenberg 24e16e1632 Convert _refcounted.h over to using LLAtomic32<>.
Beware of bad documentation.  operator--(int) does not return what
the header claimed it did.
2012-06-12 12:41:09 -04:00
Monty Brandenberg 75242eab8f Bring in the testrunner/http server scaffold for better integration testing.
This brings in a copy of llmessage's llsdmessage testing server.  We run
a mocked HTTP service to handle requests and the integration tests run
against it by picking up the LL_TEST_PORT environment variable when running.
Add some checks and output to produce useful info when run in the wrong
environment and when bad status is received.  Later will add a dead port
as well so we can test that rather than use 'localhost:2'.
2012-06-11 19:06:52 -04:00
Monty Brandenberg 267ab5b417 Convert BufferArray interfaces to void * (not char *). HttpRequest::update() honor time limit.
Generally, opaque data operations are expected to be over 'void *' and have
now converted interfaces to do that.  Update() method honors millisecond limit to dwell
time.  Might want to homologate the millis/uSecs mix later....
2012-06-11 17:47:04 -04: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
Monty Brandenberg f4a59854c5 Unit test fixups. Mac/Linux detect memory leak due to llwarns, try/catch cleanup.
Our logging holds on to a changing bit of memory between operations and the memory
leak detection I'm using senses this and complains.  So, for now, disable the
final memory check on Mac & Linux, leave it active on Windows.  Solve this for
real some other day.  Add try/catch blocks to do cleanup in unit tests that go
wrong so that we don't get a cascade of assertion failures when subsequent tests
find singletons still alive.
2012-06-11 12:24:54 -04:00
Oz Linden c931c74fdb Added tag 3.3.3-beta2 for changeset fdcc08a4f20a 2012-06-09 08:19:14 -04:00