[rucksack-devel] Conflicting Transactions: New overwrite old?
Jochen Schmidt
js at crispylogics.com
Tue Jun 16 20:28:08 UTC 2009
Hello,
I'm over the code of rucksack trying to implement concurrent
transactions. I've one problem I do not seem to understand if what
rucksack does is actually wrong or if its just a brain fart of me:
Rucksack uses an in memory cache to hold objects. untouched (clean)
objects are hold directly in the cache until some transaction tries to
modify it. Such modifications can occur by setting a slot on an
persistent instance or by writing to persistent-data objects using
PERSISTENT-DATA-WRITE. Both are the same - first the in memory object
gets modified and then a call to CACHE-TOUCH-OBJECT moves the object
out of the "clean objects cache" and marks it as "dirty object".
The interesting thing is that CACHE-TOUCH-OBJECT also checks if there
is a conflict with another active transaction about this object. If
there is an older transaction which also modified the object, a
TRANSACTION-CONFLICT is signalled. So far so good - so the newer
transaction should handle it by retrying later. The problem is that
the newer transaction already MODIFIED the in memory object that is
hold by the older transaction. The problem occurs with both - newer
transaction who got the object from the clean objects cache or newer
transactions who got the object from an older transaction via FIND-
OBJECT-VERSION.
I see two solutions to this problem:
1) Do not reuse uncommited objects
Either by using cloned objects for modification or by always loading
fresh objects from disk before modification.
2) Do the FIND-CONFLICTING-TRANSACTION check before any modification
occurs.
I somewhat lean to the second solution, but I still hope that its all
just a brain fart of me ;-)
Actually I think the same was reported by Леонид Новиков
in his mail about multi-transactions and his modifications.
ciao,
Jochen
--
Jochen Schmidt
CRISPYLOGICS
Uhlandstr. 9, 90408 Nuremberg
Fon +49 (0)911 517 999 82
Fax +49 (0)911 517 999 83
mailto:(format nil "~(~36r@~36r.~36r~)" 870180 1680085828711918828
16438) http://www.crispylogics.com
More information about the rucksack-devel
mailing list