Hi Jan,

Considering your answer again, I'm wondering if all queries, even read-only 
ones, lock the collections they access? I thought that only transactions 
locked the collections and there was no need to lock otherwise, especially 
if the query is read-only?

Thanks,
Thomas

On Wednesday, April 5, 2017 at 2:30:04 PM UTC+8, Jan wrote:
>
> Hi Thomas,
>
> this should only happen when such queries dynamically access collections, 
> so that it is not clear at query start with collections will be accessed.
> This may be the case for graph traversals or for queries that invoke the 
> `DOCUMENT()` AQL function using runtime expressions or variables.
>
> Consider the following example:
>
> Query 1 (the read-only query) accesses collection A (which will be 
> read-locked when the query starts)
> Query 2 (some other write query) may now start and try to write-lock 
> collections B and A.
>
> Query 2 may succeed in getting the lock for B, but not for A (because 
> query 1 has got it).
>
> If Query 1 now dynamically needs to access collection B, then none of the 
> two queries would make any progress:
> - query 1 would need to wait for the lock on collection B (which is held 
> by query 2),
> - query 2 would need to wait for the lock on collection A (which is held 
> by query 1)
>
> This is when the deadlock detection starts and will abort one of the 
> queries. This can also be a read-only query.
> Deadlocks should not happen if all collections needed by a query can be 
> determined at query compile time. Then the locking order should be fully 
> deterministic and deadlock-free.
> But when collections are accessed dynamically, there can be no 
> deterministic locking order. 
> A workaround for avoiding deadlocks is to specify extra collections (those 
> that will be accessed dynamically) in a `WITH` clause at the beginning of 
> an AQL query, e.g.
>
>     WITH extracollection1, extracollection2
>     FOR doc IN collection 
>     ...
>
> Best regards
> Jan
>
>
>
> Am Mittwoch, 5. April 2017 04:59:53 UTC+2 schrieb Thomas Weiss:
>>
>> Hi there,
>>
>> I've just seen in my logs that requests have failed with the "deadlock 
>> detected (while executing)" message, but those requests were all read-only 
>> AQL queries. How can such requests be involved in a deadlock?
>>
>> Thanks,
>> Thomas
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"ArangoDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to