Re: [Glass] Why session locking is necessary for Seaside?

Mariano Martinez Peck <[email protected]>
Newsgroups gmane.comp.lang.smalltalk.squeak.seaside
Message-ID <CAA+-=mUbSx3abSVpxqQhQ2uAQYArAdrjWTV1oQ0Un0tH2HCLYw@mail.gmail.com>
On Tue, Mar 21, 2017 at 5:57 PM, Dale Henrichs via Glass <
[email protected]> wrote:

>
>
> On 03/21/2017 12:25 PM, Mariano Martinez Peck via Glass wrote:
>
> Hi,
>
> I was reading this old post from Dale [1] which explains the topic very
> nice. After having watched the #seasideProcessRequestWithRetry:resultBlock:
>  and WASession >> handle:   and the post, I have some questions.
>
> On one paragraph you said:
>
> *"Object locking as a technique for avoiding commit conflicts shares the
> ‘retry on failure’ model of WATally, so it isn’t necessarily superior to
> ‘retry on commit failure’. It is a superior technique, if you need to
> protect logical updates where a physical conflict cannot be guaranteed
> (i.e., updates to different portions of an object graph).*
> *"*
>
> *And that's EXACTLY what I was wondering... why the commit failure
> (conflicts) / abort / retry would NOT be enough for sessions and avoid the
> lock?  *Is that because of that sentence "* if you need to protect
> logical updates where a physical conflict cannot be guaranteed"  *
> So that's the case for Seaside sessions? It's not safe to update (without
> conflict) different parts of the session subgraph ?
>
> The primary reason for the Seaside session object lock is that Seaside
> itself had (and presumably still has) a mutex on the session object that
> only allows Pharo-based Seaside to handle one request at a time in a single
> vm.
>


I wonder if that's still the case on latest Seaside. Do you have a clue
where I can check myself?



> The session object lock emulates the in-vm mutex semantics for multi-gem
> GemStone and guarantees logical consistency for the session state.
>

I am intrigued about the ORIGINAL needs of such a need. Because as Pharo
and GemStone and too it makes me wonder if the lock would be needed on
GemStone.



> Unfortunately it is not enough to rely conflicts to guarantee logical
> consistency.
>

Do you have more details about this? An example maybe?



>
>
> This is sad, because many many many requests would be read-only to what
> the session matters (unless there is something obvious I am not seeing?)
> and in that case, the requests WOULD be able to be parallelized on
> different Gems.
>
> On the other hand, if you know that you have read-only requests, you could
> arrange for a pool of seaside gems to be serving read-only requests by
> putting the gems behind a different ip address, disabling the session lock
> altogether and unconditionally aborting after finishing request processing
> (this is roughly the equivalent of what Johan is doing with his pool of
> REST gems -- I think). I suppose you could embed something in the http
> request itself to tell the server to process a read only request as well...
> that way your entire pool of seaside gems could alternate between server
> session-based requests and session-less requests ...
>
>
>
I just analyzed this carefully, and I cannot guarantee my requests are
fully read only ahahahahhaha.


> I know Johan recommends session affinity [2] and I understand why. It's
> just that I would prefer to be able to have multiple requests to the same
> session in parallel in different gems. At least those that wouldn't fail
> due to a commit conflict on the session.
>
> This does bring up a question that I haven't thought about before:
>
>   How does an Ajax request "bypass" the session mutex in a Pharo-based
> Seaside vm?
>
>
Does it?




> Dale
>
> _______________________________________________
> Glass mailing list
> [email protected]
> http://lists.gemtalksystems.com/mailman/listinfo/glass
>
>


-- 
Mariano
http://marianopeck.wordpress.com

_______________________________________________
seaside mailing list
[email protected]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.