OC, If you create a new OSC, you will have no snapshot cache (I may be wrong on this), so it is the expected behaviour.
I never create new OSC in my apps, why are you creating OSC like this ? The only real case I see is large report generations in background thread and even for this batching fetches do a good job. If your fetches are long, check your database indexes. Regards, Samuel > Le 17 août 2024 à 08:48, ocs--- via Webobjects-dev > <webobjects-dev@lists.apple.com> a écrit : > > Hi there, > > (I've solved the locks — were caused by a stray background thread which I've > completely forgot of; and Samuel — yes, it was related to logging. D'oh.) > > Now it works all right and reliably, but I observe very strange behaviour: > with the separate OSC, the direct action is, in average, considerably slower; > and the culprit seems are DB roundtrips. I hope I am missing something > completely obvious again... > > When I create my local EC for my direct action this way: > > === > if (!sharedosc) sharedosc=new EOObjectStoreCoordinator() > localec=ERXEC.newEditingContext(sharedosc) > === > > almost each time the fault created through this EC is accessed, there's a DB > roundtrip. On the other hand, if I create it this way (without any other > change) > > === > if (!sharedosc) sharedosc=EOEditingContext.defaultParentObjectStore() > localec=ERXEC.newEditingContext(sharedosc) > === > > there are no roundtrips at all. > > I would understand the first fetch in the separate OSC, but subsequently, it > should just use snapshots like the default root store does, should it not? > What am I missing? > > Thanks, > OC > >> On 16. 8. 2024, at 18:14, ocs--- via Webobjects-dev >> <webobjects-dev@lists.apple.com <mailto:webobjects-dev@lists.apple.com>> >> wrote: >> >> Hi there, >> >> I've got a direct action, which sometimes needs to get an object with a >> known PK, for which I use faultWithPrimaryKeyValue. Works well for years, >> but lately the fetches went longer, so I decided to allow it to use a >> separate OSC not to clash with the normal database requests. >> >> The result is weird: >> - sometimes, faultWithPrimaryKeyValue in the dedicated OSC is lightning >> fast, as presumed >> - sometimes though, it never ends?!? :-O >> >> It does not lock once and then stay locked, the cases are intermittent. >> Also, it never locks when I test myself at my development machine; happens >> on the deployment site only, sigh. I have also reasons to believe that the >> DA does not deadlock with another thread (essentially since at the moment of >> the first lock, nothing at all ran in parallel). >> >> The code looks like this: >> === >> static sharedosc >> WOActionResults someAction() { >> try { >> boolean oscpolicy=ERXProperties.booleanForKey('ActionSpecificOSC') >> def localec, osc >> ... ... >> for (... a couple of times ...) { >> ... >> if (some-condition-which-says-I-need-to-fetch) { >> if (!localec) { >> if (oscpolicy && !sharedosc) sharedosc=new >> ERXObjectStoreCoordinator(true) >> >> (localec=ERXEC.newEditingContext(sharedosc?:EOEditingContext.defaultParentObjectStore())).lock() >> // 1 >> } >> log "/TEMP will fetch in $localec..." // 2 >> eo=EOUtilities.faultWithPrimaryKeyValue(localec ,'DBAuction', >> Integer.valueOf(map.eoprimarykey)) >> log "/TEMP ... did fetch in $localec" >> } >> ... >> } >> ... ... >> if (localec) localec.dispose() >> } catch (exc) { >> some-log-which-never-happens-thus-I-know-the-above-never-threw >> } >> } >> === >> >> When ActionSpecificOSC is off, it never ever locks. When it is on though, >> occasionally the “will fetch” log marked // 2 is the very last thing which >> the appropriate worker thread ever does. In other (intermittent) cases it >> all works well. >> >> Aside of moving the localec.dispose to finally, which would be safer, but in >> this case irrelevant for no exception ever happens, can you perhaps see a >> possible culprit? >> >> Side question: originally, my // 1 line looked like >> (localec=ERXEC.newEditingContext(osc)).lock(). Far as I can say, should work >> precisely same way as the above, but did not: when the osc was null, I've >> got an invalid EC with a null rootObjectStore. What the H.?!? >> >> Thanks and all the best, >> OC >> >> _______________________________________________ >> Do not post admin requests to the list. They will be ignored. >> Webobjects-dev mailing list (Webobjects-dev@lists.apple.com >> <mailto:Webobjects-dev@lists.apple.com>) >> Help/Unsubscribe/Update your Subscription: >> https://lists.apple.com/mailman/options/webobjects-dev/ocs%40ocs.cz >> >> This email sent to o...@ocs.cz > > _______________________________________________ > 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: > https://lists.apple.com/mailman/options/webobjects-dev/samuel%40samkar.com > > This email sent to sam...@samkar.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: https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com