Commit Graph

22527 Commits (c71e808a36adef2ced44caa03a668296a2e962ca)

Author SHA1 Message Date
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
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
Monty Brandenberg 1e3d05329f Automated merge with ssh://hg.lindenlab.com/monty/viewer-drano-http 2012-06-08 13:00:28 -04:00
Monty Brandenberg 014dd3db02 Automated merge with ssh://hg.lindenlab.com/monty/viewer-drano-http 2012-06-08 17:00:01 +00:00
Monty Brandenberg 58afdc2285 Automated merge with ssh://hg.lindenlab.com/monty/viewer-drano-http 2012-06-08 12:57:55 -04:00
Monty Brandenberg 841a447e55 Limit libcurl's DNS resolution to IPV4 addresses for now. Callers
who want to try IPV6 can still override at will using CURLOPT_IPRESOLVE.
2012-06-08 16:12:52 +00: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 96b2430d8d I am getting really bad about adding files. For preceding commit. 2012-06-06 14:18:44 -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 6c6d1c8338 Format/data type mismatch lead to a 'Range: bytes=0-0' header which gave me 1 byte of data.
Shouldn't be making that kind of mistake.
2012-06-05 16:49:39 -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 3a9c182d7f Stupid windows tricks. 2012-06-02 02:22:07 +00:00
Monty Brandenberg c7d5b0dced More platform fixes for linux/mac. 2012-06-02 02:09:33 +00:00
Monty Brandenberg 3da3b00084 Merge 2012-06-01 21:50:47 -04:00
Monty Brandenberg 4155301015 Do some work on BufferArray to make it a bit less naive about
chunking data.  Remove the stateful use of a seek pointer so
that shared read is possible (though maybe not interesting).
2012-06-01 21:30:45 -04:00
Monty Brandenberg fe5c1683f0 Another float/int issue and move the POST priority in line with
what normal requests do...
2012-06-01 20:49:00 -04:00
Monty Brandenberg fb5a29c069 Platform fixups Linux: unused variables, make error strings constant. 2012-06-01 23:06:24 +00:00
Monty Brandenberg 640798bb99 Platform fixups: typedef for priority_queue, more specific comparator functor. 2012-06-01 18:18:53 -04:00
Monty Brandenberg 7b9da4eeda Missed two instances of priority typed as 'float'. Became an
excuse to go through an use a typedef for priority and policy class id.
2012-06-01 17:23:51 -04:00
Monty Brandenberg f67084337c Delete a file, edit cmakelists.txt. 2012-06-01 16:24:02 -04:00
Monty Brandenberg b8edacd0bb Major steps towards implementing the policy component.
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-06-01 14:07:34 -04:00
Monty Brandenberg 8fc350125c Integrate llcorehttp library into lltexturefetch design.
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-23 19:12:09 -04:00
Monty Brandenberg 30d72b041f Added correct libcurl initialization to the unit tests which makes Windows builds reliable.
It's the right thing to do and introduced a scoped version for convenience in tests.
2012-05-09 10:23:02 -04:00
Monty Brandenberg 7a9acdc68a Try to get some more correct curl init into the unit testing. 2012-05-09 07:06:15 -07:00
Monty Brandenberg 2f496ecaee Add more boost libs to the lib copy and manifest. 2012-05-09 06:49:18 -07:00
Monty Brandenberg e1a978bbcf And more boost library work. 2012-05-08 13:39:06 -07:00
Monty Brandenberg c5be6d0b92 Okay, needed full version numbers. 2012-05-08 13:15:42 -07:00
Monty Brandenberg b7d3ae7dce More linux work. Think I found the stager. 2012-05-08 12:17:37 -07:00
Monty Brandenberg cc878fed1b Now trying to get linux working. libllcommon is picking up .so
boost libraries when we tend to want statics.  Try to work around
that for the moment.
2012-05-08 11:32:46 -07:00
Monty Brandenberg 239e072bfc Unit test still giving me issues on the local windows system. Seems to be a 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-08 12:27:24 -04:00
Monty Brandenberg 7caef4bc6c Okay, got Mac building with Boost 1.48. Unit tests needed NULL pointer
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-08 10:38:08 -04:00
Monty Brandenberg 74d59e7128 Build llcorehttp as part of a viewer dependency with unit tests. This required
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-05-07 15:16:31 -04:00
Monty Brandenberg 438a6431e4 Bring llcorehttp into the compile and link phases. Windows looks okay though it's a dead library so far. 2012-04-26 11:35:07 -04:00
Monty Brandenberg a54e9c3795 Another fix for Mac warnings. Uninitialized auto check. Not an
actual problem but this will quiet the compiler.
2012-04-25 15:47:30 -04:00
Monty Brandenberg a33bec1e5e Build tweak for linux which has the same boost/unused variable
problem as Mac.
2012-04-25 14:43:31 -04:00
Monty Brandenberg 88bc54192f Get Mac building. Unused variable in boost and missing return
value which wasn't caught in other environments.
2012-04-25 13:18:27 -04:00
Monty Brandenberg c09669da92 And forgot the .cmake library file. 2012-04-23 16:20:45 -04:00
Monty Brandenberg 5611cb6d47 Okay, imported the core-http library and got it compiling suspiciously easily.
The unit/integration tests don't work yet as I'm still battling cmake/autobuild
as usual but first milestone passed.
2012-04-23 16:19:39 -04:00
Oz Linden b187aeb8f1 Added tag 3.3.0-release for changeset 5e8d2662f38a 2012-03-21 12:14:36 -04:00
Oz Linden 77df887b65 Added tag viewer-release-candidate for changeset 5e8d2662f38a 2012-03-13 16:04:27 -04:00
Oz Linden 9ce394a484 Added tag DRTVWR-119, 3.3.0-beta1 for changeset d5f263687f43 2012-03-11 08:06:37 -04:00
Oz Linden 9f704b61ad merge beta tags 2012-03-11 08:06:22 -04:00
Oz Linden 3210b0922e pull back release tags for 3.2.8 2012-03-07 12:11:11 -05:00