What to do with a MagmaCommitError
Hernán Morales Durand
hernan.morales at gmail.com
Thu Jun 4 06:42:49 UTC 2009
2009/6/3 Chris Muller <asqueaker at gmail.com>
> Thanks for the great questions.
>
> > Now I have a Debugger with a MagmaCommitError. As you can see from the
> > attachement, the User2 session still has a transaction,
>
> The attachment shows the "transactionLevel" as 0, meaning the session
> is not in a transaction. The 'transaction' instance variable always
> has a MaTransaction instance which is just a single per session to
> manage the readSet (for changed-detection). It is completely private.
>
> so I have some
> > questions:
> >
> > -Is this transaction invalid in some way? I've observed some possibly
> > relevant protocol here (#restore? #changedObjects?)
>
> MaTransaction is completely private. Access with caution.
>
> > -Supposing that it's appropiate to reapply User2 changes, do I have the
> > chance to do it from the Debugger?
>
> Magma guards its internal state, you may restart at the point your
> application issued the #commit, but be sure to check the session
> transactionLevel, you may need to manually send #begin to the session
> first if the application code doesn't..
>
> Likewise, if your application issued #commit: [ ... ] and your
> session is at transactionLevel 0, then of course you can just restart
> from there..
Thanks for the explanations Chris. I tried to restart but the commitNumber
of the session in the debugger was nil, and when the session wanted to
reconnect and validate in #validateCommitNumber another MNU was raised. This
is expected for this kind of situation?
>
>
> > -If the Debugger isn't useful at this stage, how to apply the User2
> changes?
>
> A session that experiences a commit-conflict is no longer in a
> transaction, but the local changes can still be committed. However,
> the state of the local model is now "merged" with updates from other
> users. The MagmaCommitConflictError (Exception) has a
> MaFailedCommitResult, which has a collection of the objects that, in
> particular, the application may wish to review, they are the ones
> User2 changes now overlay the local changes.
>
> If the application wishes to continue committing the local changes, it
> may issue a #begin followed by a commit. I must admit, it seems
> unnecessary to require the application to do this.. I don't think
> that would be difficult, hmm..
>
> Or, the application may issue an #abort to cancel all local changes,
> refresh all contents from the repository and start over.
>
> - Chris
>
Hernan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/magma/attachments/20090604/cc0aeb51/attachment.htm
More information about the Magma
mailing list