summaryrefslogtreecommitdiff
path: root/indra/llcorehttp
AgeCommit message (Collapse)Author
2012-06-16Implement metrics collection for Linux. Next: Mac OS X.Monty Brandenberg
2012-06-16First round of basic tuning work (shorter sleeps, larger BufferArray blocks).Monty Brandenberg
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-15Fix for linux/mac builds.Monty Brandenberg
2012-06-15Ported example (freestanding) program to drive API & generate performance ↵Monty Brandenberg
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-14LLMutex recursive lock, global & per-request tracing, simple GET request, ↵Monty Brandenberg
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-12Really need to figure out the 'static const' problem on Windows.Monty Brandenberg
For now, workaround...
2012-06-12HTTP Proxy, PUT & POST, unit tests and refactoring.Monty Brandenberg
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-12Convert _refcounted.h over to using LLAtomic32<>.Monty Brandenberg
Beware of bad documentation. operator--(int) does not return what the header claimed it did.
2012-06-11Bring in the testrunner/http server scaffold for better integration testing.Monty Brandenberg
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-11Convert BufferArray interfaces to void * (not char *). ↵Monty Brandenberg
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-11Refactoring of the request completion thread and removal of ↵Monty Brandenberg
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-11Unit test fixups. Mac/Linux detect memory leak due to llwarns, try/catch ↵Monty Brandenberg
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-08Implemented HTTP retry for requests. Went in rather easily whichMonty Brandenberg
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-06I am getting really bad about adding files. For preceding commit.Monty Brandenberg
2012-06-06Policy + caching fixes + https support + POST workingMonty Brandenberg
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-05Format/data type mismatch lead to a 'Range: bytes=0-0' header which gave me ↵Monty Brandenberg
1 byte of data. Shouldn't be making that kind of mistake.
2012-06-05Faster spin in worker thread when doing I/O and a priority bump needed when ↵Monty Brandenberg
fixing priorities.
2012-06-02Stupid windows tricks.Monty Brandenberg
2012-06-02More platform fixes for linux/mac.Monty Brandenberg
2012-06-01Do some work on BufferArray to make it a bit less naive aboutMonty Brandenberg
chunking data. Remove the stateful use of a seek pointer so that shared read is possible (though maybe not interesting).
2012-06-01Platform fixups Linux: unused variables, make error strings constant.Monty Brandenberg
2012-06-01Platform fixups: typedef for priority_queue, more specific comparator functor.Monty Brandenberg
2012-06-01Missed two instances of priority typed as 'float'. Became anMonty Brandenberg
excuse to go through an use a typedef for priority and policy class id.
2012-06-01Delete a file, edit cmakelists.txt.Monty Brandenberg
2012-06-01Major steps towards implementing the policy component.Monty Brandenberg
Identified and reacted to the priority inversion problem we have in texturefetch. Includes the introduction of a priority_queue for the requests that are ready. Start some parameterization in anticipation of having policy_class everywhere. Removed _assert.h which isn't really needed in indra codebase. Implemented async setPriority request (which I hope I can get rid of eventually along with all priorities in this library). Converted to using unsigned int for priority rather than float. Implemented POST and did groundwork for PUT.
2012-05-23Integrate llcorehttp library into lltexturefetch design.Monty Brandenberg
This is the first functional viewer pass with the HTTP work of the texture fetch code performed by the llcorehttp library. Not exactly a 'drop-in' replacement but a work-alike with some changes (e.g. handler notification in consumer thread versus responder notification in worker thread). This also includes some temporary changes in the priority scheme to prevent the kind of priority inversion found in VWR-28996. Scheme used here does provide liveness if not optimal responsiveness or order-of-operation. The llcorehttp library at this point is far from optimally performing. Its worker thread is making relatively poor use of cycles it gets and it doesn't idle or sleep intelligently yet. This early integration step helps shake out the interfaces, implementation niceties will be covered soon.
2012-05-09Added correct libcurl initialization to the unit tests which makes Windows ↵Monty Brandenberg
builds reliable. It's the right thing to do and introduced a scoped version for convenience in tests.
2012-05-09Try to get some more correct curl init into the unit testing.Monty Brandenberg
2012-05-08Unit test still giving me issues on the local windows system. Seems to be a ↵Monty Brandenberg
hard stall while allocating the first easy handle in a descent of the global initiailization code but that doesn't seem to be a problem on TC machines. Perhaps the static linking is creating multiple data copies. More work needed.
2012-05-08Okay, got Mac building with Boost 1.48. Unit tests needed NULL pointerMonty Brandenberg
defenses in the delete functions of the allocation support. General boost library renaming again. Linux builds in TC though it shouldn't based on what Boost.cmake lookes like...
2012-05-07Build llcorehttp as part of a viewer dependency with unit tests. This requiredMonty Brandenberg
boost::thread and the easiest path to that was to go with the 1.48 Boost release in the 3P tree (eliminating a fork for a modified 1.45 packaging). One unit test, the most important one, is failing in test_httprequest but that can be attended to later. This test issues a GET to http://localhost:2/ and that is hitting the wire but the libcurl plumbing isn't delivering the failure, only the eventual timeout. An unexpected change in behavior.
2012-04-26Bring llcorehttp into the compile and link phases. Windows looks okay ↵Monty Brandenberg
though it's a dead library so far.
2012-04-25Another fix for Mac warnings. Uninitialized auto check. Not anMonty Brandenberg
actual problem but this will quiet the compiler.
2012-04-25Build tweak for linux which has the same boost/unused variableMonty Brandenberg
problem as Mac.
2012-04-25Get Mac building. Unused variable in boost and missing returnMonty Brandenberg
value which wasn't caught in other environments.
2012-04-23Okay, imported the core-http library and got it compiling suspiciously easily.Monty Brandenberg
The unit/integration tests don't work yet as I'm still battling cmake/autobuild as usual but first milestone passed.