[elephant-devel] class indexing txn problems

Ian Eslick eslick at media.mit.edu
Tue Mar 11 15:18:46 UTC 2008


I did this earlier with an asynchronous threaded dataflow package I  
wrote on top of elephant and it worked great.  For the internal  
problem that Alex outlines, it just shouldn't happen and I know how to  
work around it.  However, it would be good to have a general extension  
allowing users to rollback non-db side effects on an abort.

Perhaps this could be a simple extension to the with-transaction  
syntax?  :on-abort sym|expr :on-commit sym|expr.  Lambda expressions  
would be compiled, symbols could refer to external functions much like  
we handle keys on indexed-btrees.  It would be nice to have a more  
automated way of catching side effects though, but I think it's  
impractical.

(Actually my little process components package allows you to define  
and use a set of lisp variables visible to a body expression.  The  
package rewrote the body expression so that all side effected lisp  
variables were cached and only saved on a commit - function calls  
outside the body had to be handled explicitly though).

Anyone want to bite?  It's a great little addition to Elephant and  
shouldn't be too much work, at least once you understand all the  
subtleties of the transaction macros and methods.  I can help if you  
get stuck.

Henrik, want to add a ticket if no one decides to do this in the near  
term?

Ian

On Mar 11, 2008, at 10:52 AM, Henrik Hjelte wrote:

> On Tue, Mar 11, 2008 at 11:18 AM, Alex Mizrahi  
> <killerstorm at newmail.ru> wrote:
>
>> find-inverted-index does two things: creates DB object representing  
>> index
>> and caches it.
>> then transaction is aborted -- all DB changes are effectively wiped.
>> but we still have references to DB object in %index-cache, and  
>> accessing
>> it's slots produces errors:
>
> A quick idea:
> Can't elephant keep a list of lambda forms to be executed at commit
> and perhaps a list of lambda forms to be executed at abort. Then
> instead of directly caching it, you can make a lambda form that does
> the caching, and push it to the list of commit actions. This will
> defer execution of it to a safer time.
>
> /Henrik
> _______________________________________________
> elephant-devel site list
> elephant-devel at common-lisp.net
> http://common-lisp.net/mailman/listinfo/elephant-devel




More information about the elephant-devel mailing list