[elephant-devel] Re: Updated version of last Postmodern patch bundle
Ian Eslick
eslick at media.mit.edu
Wed Mar 19 16:57:02 UTC 2008
To clarify my bad language...
1) It's possible I currently miss an ensure-transaction on some path
while writing the index
2) I'd love to see a test that reproduced the current deadlock, even
if it ran a long time
3) Indexed slot access should become simpler - less potential for
deadlock than before
Ian
On Mar 19, 2008, at 12:26 PM, Ian Eslick wrote:
> Slot access to indexed slots are somewhat hairy at present.
>
> I think they are much simpler in the unstable branch and so deadlock
> may be less of an issue in the past. Deadlock is certainly likely
> to happen if the set of operations to update an indexed slot is not
> wrapped in a transaction. I was careful to add ensure-transaction
> wrappers around everything so that would be the case, but it's
> certainly possible I missed some path.
>
> I'd love to see a reproducible deadlock test, even if it had to run
> for awhile.
>
> Cheers,
> Ian
>
> On Mar 19, 2008, at 12:17 PM, Alex Mizrahi wrote:
>> ??>> theoretically we could get a deadlock, but it only happens if
>> ??>> application updates object in different order, and this can be
>> ??>> avoided.
>>
>> LPP> Note that concurrent writes to an indexed slot will currently
>> have
>> LPP> a pretty high chance of inducing a deadlock. Try the new test
>> suite.
>> LPP> In general it seems to be a tough bet relying on this.
>>
>> aha, so you mean we need retries anyway?
>> i did not look into tests source code and thought that you're
>> provoking them
>> in "traditional" way.
>>
>> if simple slot writes provoke deadlocks that is not OK IMHO.
>> PostgreSQL
>> documentation
>> (http://www.postgresql.org/docs/8.1/static/explicit-locking.html#LOCKING-DEADLOCKS
>> )
>> mentions several resasons why deadlocking can happen, and it
>> doesn't look
>> like we are triggering one of them explicitly.
>> so chances are this can be fixed via some modifications of the code.
>>
>> as far as i know deadlocks are much worse than conflicts
>> performance-wise --
>> because they are detected by the timer, something like once a
>> second, unlike
>> conflicts that are detected immidiately -- and we should try making
>> them
>> impossible in working course of operations.
>>
>> if you have an idea how our code can trigger situation as described
>> in pgsql
>> manual please drop a note.
>>
>> ??>> also, we have a race condition in update-or-insert
>> implementation, but
>> ??>> this could be avoided either via savepoints,
>>
>> LPP> But SPs are just a way to have more fine-grained retries, so
>> it's
>> LPP> not really different from retrying the whole txn...
>>
>> no, for our purposes savepoints just alter error handling policy of
>> pgsql.
>> such retries can be implemented in a stored procedure code, totally
>> transparent from lisp side,
>> or in db-postmodern code, totally transparent from application.
>>
>> retries due to conflicts are totally different -- whole txn retry
>> must be
>> triggered according to txn semantics, it cannot be done
>> transparently, and
>> application can be impacted if it's code is not side-effect-less.
>>
>> ??>> or via locking.
>>
>> LPP> pgsql automatically locks, doesn't it?
>>
>> implicitly it obtains only "minimal" locks. knowing semantics of
>> operations,
>> we can explicitly deman stricter locking, and this way avoid
>> deadlocks or
>> race conditions.
>> e.g. braindead solution -- before writing, lock whole table so
>> nobody can
>> write concurrently (but still can read) -- this way we can be sure
>> that
>> there will be no race conditions, but this will also have
>> considerable
>> performance impact.
>> probably there is some better way to do this.. maybe SELECT FOR
>> UPDATE will
>> do.. but first i need to investigate what really happens there
>>
>>
>>
>> _______________________________________________
>> elephant-devel site list
>> elephant-devel at common-lisp.net
>> http://common-lisp.net/mailman/listinfo/elephant-devel
>
> _______________________________________________
> 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