[PEAK] Re: Trellis-fork

Sergey Schetinin maluke at gmail.com
Tue Jun 23 05:32:21 EDT 2009


Oh yeah, one more thing. We could try to use deadlock-breaking and
given that automatic retries are OK with Trellis, it would work. But
lets just not do that. :)

On 2009-06-23, Sergey Schetinin <maluke at gmail.com> wrote:
> Next thing I want to do it introduce thread safety. There's some code
>  to help do that in Trellis already, but I plan to remove that
>  implement a very simple model. If I am not mistaken, Phillip planned
>  for cells to have locks in their manager attribute, so that
>  ctrl.lock(cell) uses that just like other managers, calling __enter__
>  / __exit__. For locks that acquires and releases them so, given
>  ctrl.lock is called in all appropriate places the access to cells is
>  synchronous.
>
>  The problem with this is that if different cells have different locks
>  as their managers the deadlocks are very likely. There's no way of
>  telling what cells will be used in a transaction and in what order so
>  two concurrent transactions are very likely to get into a deadlock.
>
>  If all cells have the same lock as their manager there are no
>  deadlocks, but the whole ctrl.lock() business is pointless as there's
>  only one lock to acquire and release.
>
>  Another possible case is when there are two or more sets of cells that
>  form disjoint networks. All cells in each of these sets would have the
>  same lock. This way there's a guarantee of no deadlocks, but the only
>  reason to use locks in this case is if there will be concurrent
>  transactions on the same cell network.
>
>  I think the best tradeoff for now is a GIL-like solution -- just
>  disable all this cell.manager / ctrl.lock stuff and just hold the
>  global lock in ctrl._process. This doesn't support the last case
>  described above, but let's first have an actual use case for that and
>  see how it could be supported then. One simple solution that could
>  work for that is to have a controller per cell group / network with
>  its own lock.
>
>  Another problem is how cells store their values -- they change them
>  in-place and log that for undo. The problem is that if that cell is
>  accessed from another thread, and from *outside* a transaction the
>  changed value will be seen -- that's not good at all. For example see
>  _ReadValue.get_value implementation:
>
>     def get_value(self):
>         if ctrl.active:
>             # if atomic, make sure we're locked and consistent
>             used(self)
>         return self._value
>
>  If not atomic there's no guarantee of getting valid value which isn't
>  easily resolved.
>
>  One way to fix that is to store changes in a different attribute and
>  read that only if inside transaction. A development of this approach
>  is to let the controller store all of cell values. This also makes way
>  for properly concurrent transactions without locking because the
>  controller can store the consistent data snapshot in one location and
>  let the transactions work on a copy. Each transaction would get its
>  own copy so there's no need to lock at this point. At commit time
>  however the changes need to be merged, and because all of value
>  storage is handled by controller it can verify at this point if other
>  transactions changed any inputs used by this transaction since it
>  started. (For more on this see
>  http://code.google.com/p/trellis-fork/wiki/Transactions ) Reads from
>  outside transactions would just get a value from the latest committed
>  snapshot.
>
>  The unknown in this approach is how fast is it for single threaded
>  applications. I don't see any reasons for it too especially slow, but
>  it could be a bit slower than current implementation. It might be
>  faster too though. If anyone could work on performance measuring for
>  Trellis I'd really appreciate that.
>
>  Also, one more thing to mention in regards to thread safety -- even
>  with the GIL-like fix in place the controller has to be thread-local
>  because even while there's only one concurrent transaction possible
>  not all operations on controller are transactional: ctrl.active checks
>  in other threads will happen outside transactions and need to return
>  False.
>
>
>  On 2009-06-22, Sergey Schetinin <maluke at gmail.com> wrote:
>  > I've just brought the ForkChanges page up to date.
>  >  http://code.google.com/p/trellis-fork/wiki/ForkChanges
>  >
>  >  Any feedback on changes (also the "future changes" section) is welcome.
>  >
>  >
>  >  Also the "Transaction" page have grown into a quite long overview of
>  >  what's similar between Trellis rules and concurrent transactions and
>  >  some ideas on how Trellis could evolve. Still incomplete, but about
>  >  2/3 done, I think. If you see any mistakes in terminology or factual
>  >  errors, please report.
>  >
>  > http://code.google.com/p/trellis-fork/wiki/Transactions
>  >
>  >
>  >
>  >
>  >
>  > On 2009-06-17, Sergey Schetinin <maluke at gmail.com> wrote:
>  >  > On 2009-06-12, Sergey Schetinin <maluke at gmail.com> wrote:
>  >  >  > This is a thread for trellis-fork updates and discussion. At least it
>  >  >  >  should suffice at first.
>  >  >  >
>  >  >  >  http://code.google.com/p/trellis-fork/
>  >  >  >  http://pypi.python.org/pypi/Trellis-fork
>  >  >
>  >  >
>  >  > I've already finished quite a lot of work and test finally pass (had
>  >  >  to make a few edits, see commit log) and the changes to the code
>  >  >  structure are bigger than I imagined at first, but I'm quite happy
>  >  >  with the state of things overall.
>  >  >
>  >  >  Anyway, I'll work on it some more before reporting on the progress, so
>  >  >  if you want to watch the changes as they happen see
>  >  >  http://code.google.com/p/trellis-fork/updates/list
>  >  >  or the rss feed: http://code.google.com/feeds/p/trellis-fork/updates/basic
>  >  >
>  >  >  The actual reason for this email is that I want to get some feedback
>  >  >  on an article I started to write, explaining the use of transactions
>  >  >  in Trellis, it's work in progress, but it's something I think that can
>  >  >  help a lot with understanding Trellis.
>  >  >
>  >  >  http://code.google.com/p/trellis-fork/wiki/Transactions
>  >  >  Does it help?
>  >  >  Should it be more verbose or the maybe the opposite?
>  >  >  Any factual mistakes, typos, hints on structure, things to mention etc?
>  >  >
>  >  >
>  >  >
>  >  >
>  >  >  --
>  >  >  Best Regards,
>  >  >  Sergey Schetinin
>  >  >
>  >  >  http://s3bk.com/ -- S3 Backup
>  >  >  http://word-to-html.com/ -- Word to HTML Converter
>  >  >
>  >
>  >
>  >  --
>  >  Best Regards,
>  >  Sergey Schetinin
>  >
>  >  http://s3bk.com/ -- S3 Backup
>  >  http://word-to-html.com/ -- Word to HTML Converter
>  >
>
>
>
> --
>
> Best Regards,
>  Sergey Schetinin
>
>  http://s3bk.com/ -- S3 Backup
>  http://word-to-html.com/ -- Word to HTML Converter
>


-- 
Best Regards,
Sergey Schetinin

http://s3bk.com/ -- S3 Backup
http://word-to-html.com/ -- Word to HTML Converter


More information about the PEAK mailing list