transactions

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

transactions

mmimica
I have spent some time trying to use Magma properly, hoping that some things that weren't clear at the beginning will eventually come clear. But one thing I still don't get: transactions. I understand transaction semantics in RDMS, but what does it mean in magma?

What is the difference between modifying an object inside and outside transaction? This two code snippets don't show any difference.

session := ...
model := session root model.
model firstName: 'foo'.
session begin.
model lastName: 'bar'.
session commit.

session := ...
model := session root model.
session begin.
model firstName: 'foo'.
model lastName: 'bar'.
session commit.


They both commit both firstName and lastName properties, so I don't see any use of opening and ending a transaction. Couldn't there just be a commit message, so that you are always in a transaction, as that is how it apparently works?


--
Milan Mimica
http://sparklet.sf.net

_______________________________________________
Magma mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/magma
Reply | Threaded
Open this post in threaded view
|

Re: transactions

Chris Muller-3
In magma, #begin performs an implicit #refresh, not an implicit #abort.

See:

  http://wiki.squeak.org/squeak/2636



On Mon, Dec 19, 2011 at 11:00 AM, Milan Mimica <[hidden email]> wrote:

> I have spent some time trying to use Magma properly, hoping that some things
> that weren't clear at the beginning will eventually come clear. But one
> thing I still don't get: transactions. I understand transaction semantics in
> RDMS, but what does it mean in magma?
>
> What is the difference between modifying an object inside and outside
> transaction? This two code snippets don't show any difference.
>
> session := ...
> model := session root model.
> model firstName: 'foo'.
> session begin.
> model lastName: 'bar'.
> session commit.
>
> session := ...
> model := session root model.
> session begin.
> model firstName: 'foo'.
> model lastName: 'bar'.
> session commit.
>
>
> They both commit both firstName and lastName properties, so I don't see any
> use of opening and ending a transaction. Couldn't there just be a commit
> message, so that you are always in a transaction, as that is how it
> apparently works?
>
>
> --
> Milan Mimica
> http://sparklet.sf.net
>
> _______________________________________________
> Magma mailing list
> [hidden email]
> http://lists.squeakfoundation.org/mailman/listinfo/magma
>
_______________________________________________
Magma mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/magma
Reply | Threaded
Open this post in threaded view
|

Re: transactions

Chris Muller-3
Milan, I don't know if you saw this one too,

    http://wiki.squeak.org/squeak/5605

which mentions staying in a transaction all the time as one of a few
possible-strategies for committing.

It used to be (a long time ago) that long transactions were a
challenge due to getting disconnected from the server whenever there
was too much commit-activity (by the other clients) accumulated
against against the session.  The accumulated changes are cached in
memory on the server so unresponsive sessions must eventually be
trimmed.

But that could be frustrating for the client because, sometimes the
user just had to do a _lot_ of work, and so it was all the worse to
not be able to commit that work.  The solution was to make
transactions be able to span session connections.  Now transactions
can be weeks long, if desired.

If a session disconnects with a transaction open (e.g., save and exit
the image -- time to board the plane), the image can be restarted and
work inside the transaction resumed later.  When the session is
reconnected, the users work is all still there in the image, but any
other objects which were changed in the meantime must be refreshed to
their current state -- so it's necessary to review.  BTW, this the
reason there can sometimes be a pause after reconnecting a
long-disconnected session (the refresh), but its precisely what the
system should do -- preserve the persistent state of my saved image
and let me commit it later, when I'm good and done.

So, leaving a transaction open is now a totally viable option and can
be a fine way to go, depending on the application.

 - Chris


On Mon, Dec 19, 2011 at 12:55 PM, Chris Muller <[hidden email]> wrote:

> In magma, #begin performs an implicit #refresh, not an implicit #abort.
>
> See:
>
>  http://wiki.squeak.org/squeak/2636
>
>
>
> On Mon, Dec 19, 2011 at 11:00 AM, Milan Mimica <[hidden email]> wrote:
>> I have spent some time trying to use Magma properly, hoping that some things
>> that weren't clear at the beginning will eventually come clear. But one
>> thing I still don't get: transactions. I understand transaction semantics in
>> RDMS, but what does it mean in magma?
>>
>> What is the difference between modifying an object inside and outside
>> transaction? This two code snippets don't show any difference.
>>
>> session := ...
>> model := session root model.
>> model firstName: 'foo'.
>> session begin.
>> model lastName: 'bar'.
>> session commit.
>>
>> session := ...
>> model := session root model.
>> session begin.
>> model firstName: 'foo'.
>> model lastName: 'bar'.
>> session commit.
>>
>>
>> They both commit both firstName and lastName properties, so I don't see any
>> use of opening and ending a transaction. Couldn't there just be a commit
>> message, so that you are always in a transaction, as that is how it
>> apparently works?
>>
>>
>> --
>> Milan Mimica
>> http://sparklet.sf.net
>>
>> _______________________________________________
>> Magma mailing list
>> [hidden email]
>> http://lists.squeakfoundation.org/mailman/listinfo/magma
>>
_______________________________________________
Magma mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/magma
Reply | Threaded
Open this post in threaded view
|

Re: transactions

mmimica
Yes I have read the whole wiki several times I think, thanks for writing it. Magma would be virtually useless without it. I think I'll go with staying in a transaction all the time and see where it gets me.


On 20 December 2011 03:11, Chris Muller <[hidden email]> wrote:
Milan, I don't know if you saw this one too,

   http://wiki.squeak.org/squeak/5605

which mentions staying in a transaction all the time as one of a few
possible-strategies for committing.

It used to be (a long time ago) that long transactions were a
challenge due to getting disconnected from the server whenever there
was too much commit-activity (by the other clients) accumulated
against against the session.  The accumulated changes are cached in
memory on the server so unresponsive sessions must eventually be
trimmed.

But that could be frustrating for the client because, sometimes the
user just had to do a _lot_ of work, and so it was all the worse to
not be able to commit that work.  The solution was to make
transactions be able to span session connections.  Now transactions
can be weeks long, if desired.

If a session disconnects with a transaction open (e.g., save and exit
the image -- time to board the plane), the image can be restarted and
work inside the transaction resumed later.  When the session is
reconnected, the users work is all still there in the image, but any
other objects which were changed in the meantime must be refreshed to
their current state -- so it's necessary to review.  BTW, this the
reason there can sometimes be a pause after reconnecting a
long-disconnected session (the refresh), but its precisely what the
system should do -- preserve the persistent state of my saved image
and let me commit it later, when I'm good and done.

So, leaving a transaction open is now a totally viable option and can
be a fine way to go, depending on the application.

 - Chris


On Mon, Dec 19, 2011 at 12:55 PM, Chris Muller <[hidden email]> wrote:
> In magma, #begin performs an implicit #refresh, not an implicit #abort.
>
> See:
>
>  http://wiki.squeak.org/squeak/2636
>
>
>
> On Mon, Dec 19, 2011 at 11:00 AM, Milan Mimica <[hidden email]> wrote:
>> I have spent some time trying to use Magma properly, hoping that some things
>> that weren't clear at the beginning will eventually come clear. But one
>> thing I still don't get: transactions. I understand transaction semantics in
>> RDMS, but what does it mean in magma?
>>
>> What is the difference between modifying an object inside and outside
>> transaction? This two code snippets don't show any difference.
>>
>> session := ...
>> model := session root model.
>> model firstName: 'foo'.
>> session begin.
>> model lastName: 'bar'.
>> session commit.
>>
>> session := ...
>> model := session root model.
>> session begin.
>> model firstName: 'foo'.
>> model lastName: 'bar'.
>> session commit.
>>
>>
>> They both commit both firstName and lastName properties, so I don't see any
>> use of opening and ending a transaction. Couldn't there just be a commit
>> message, so that you are always in a transaction, as that is how it
>> apparently works?
>>
>>
>> --
>> Milan Mimica
>> http://sparklet.sf.net
>>
>> _______________________________________________
>> Magma mailing list
>> [hidden email]
>> http://lists.squeakfoundation.org/mailman/listinfo/magma
>>



--
Milan Mimica
http://sparklet.sf.net

_______________________________________________
Magma mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/magma