i was thinking the same - alternatively: - do whatever is you are doing in a background thread - switch on concurrent request handling, as i presume that it is actually the request that is blocking, not the DB as unless your are using something like m$ access (eeek!) then i would imagine your DB can actually do more than one thing at once - if you are using m$ access, change it if you can, or resign if you can't - re-work locking strategy to force an optimistic locking failure if more than one update goes through - even if that involves sticking a dummy attribute in that just increments with each transaction
what you are suggesting feels a bit like sticking some pedals on a car because the engine keeps stalling - probably best to fix the engine :-) simon On 6 December 2010 13:52, r...@synapticstorm.com <r...@synapticstorm.com>wrote: > Hi Patrick, > > Couldn't you just use WOLongResponse so that it keeps the first connection > alive until it responds? > > Regards, > > Rob. > > On 6 Dec 2010, at 13:09, Patrick Middleton wrote: > > > I have an app doing something superficially like web services which is > sessionless and accessed via DirectActions. Because of other activity in > the database sometimes, database i/o can block for several minutes. When > this happens the Apache WebObjects adaptor's loadbalancing features come > into play, and redirect the request it sent to an apparently unresponsive > instance to a different instance, which may in turn block on database i/o. > The caller's browser waits several minutes and then receives an "no > instance available" page. When the other activity in the database clears > an, if the request caused a database update, that update can be applied > multiple times because of each instance attempting to process the request. > If the first update changes the database in a way that prevents the other > updates from succeeding, they might report "update failed", and if the > database i/o hold up was only a few minutes, that page can be returned to > the caller -- a page saying that the update failed, when in fact the update > succeeded but the caller won't get to see that page. > > > > What I thought about doing, and have largely done, is announce and listen > for activity via multicast datagrams. If an instance receives a request via > a direct action and I don't want it to be redirected via the load balancer, > enough information is broadcast such that other instances waiting for > requests will be able to tell that another instance should already be > processing it, and then generate a response (without blocking on database > i/o) to the effect that database congestion may be in progress, that their > request is being processed, any database updates may or may not be committed > but will be committed at most once. > > > > But what constitutes "enough information"? The WebObjects adaptor adds a > header "x-webobjects-request-id" (aka REQUEST_ID_HEADER, in config.h) to a > received request before writing it to an instance (this header is not > "leaked back" to the client) and this appears to be unique: 24 chars long > corresponding to three hexstrings of 32-bit numbers, being the time at which > some initialization code was called in the process (httpd), the process > identifier (of httpd), and a unique sequence counter defended by a lock. > The point at which this header is added means that a redirected request > will have the same x-webobjects-request-id header. > > > > And so to the subject line of this message: "x-webobjects-request-id > lacking uniqueness?" Of those 24 chars, the first 16 are effectively fixed > whenever httpd starts, and I appear to be seeing values being reused for the > last 8. I'd guess that either the shared memory or the locking isn't > working as expected. > > > > Anybody else seeing this? > > > > --- > > Regards Patrick > > OneStep Solutions (Research) LLP > > www.onestep.co.uk > > > > > > > > This email, including any attachments, is confidential and intended > solely for the person or organisation to whom it is addressed. If you are > not the intended recipient you must not disseminate, distribute or copy any > part of this email nor take any action in reliance on it. > > > > If you have received this in error please notify the sender immediately > by email or phone +44 (0)1702 426400 and delete this email and any > attachments from your system. > > > > Email transmission cannot be guaranteed to be secure or error-free as > information could be intercepted, corrupted, lost, destroyed, arrive late or > incomplete, or contain viruses. The sender therefore does not accept > liability for any errors or omissions in the contents of this message which > arise as a result of email transmission. If verification is required please > request a hard-copy version. > > > > OneStep Solutions LLP is registered in England and Wales under > registration number OC337173 and has its registered office at 457 > Southchurch Road, Southend-on-Sea, Essex SS1 2PH. > > _______________________________________________ > > Do not post admin requests to the list. They will be ignored. > > Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) > > Help/Unsubscribe/Update your Subscription: > > > http://lists.apple.com/mailman/options/webobjects-dev/rob%40synapticstorm.com > > > > This email sent to r...@synapticstorm.com > > _______________________________________________ > Do not post admin requests to the list. They will be ignored. > Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) > Help/Unsubscribe/Update your Subscription: > > http://lists.apple.com/mailman/options/webobjects-dev/simon%40potwells.co.uk > > This email sent to si...@potwells.co.uk >
_______________________________________________ Do not post admin requests to the list. They will be ignored. Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com