Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 отличить LOCK CONFLICT от DEADLOCK-а  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30037

Здравствуйте, ВСЕ!

Вопрос наверное больше разработчикам,
но мож кто из уважаемого сообщества
тоже уже сталкивался с подобной задачей.

Собственно, как отличить одно от другого?
(имея на руках статус-вектор)

Засада в том, что при банальном конфликте
сервер помимо isc_lock_conflict непременно
пихает в статус-вектор ещё и isc_deadlock.

Как быть?

--
Регардсы и прочее

Posted via ActualForum NNTP Server 1.5

12 апр 19, 16:31    [21860691]     Ответить | Цитировать Сообщить модератору
 Re: отличить LOCK CONFLICT от DEADLOCK-а  [new]
hvlad
Member

Откуда:
Сообщений: 10405
Мимопроходящий
сервер помимо isc_lock_conflict непременно
пихает в статус-вектор ещё и isc_deadlock.
Покажи пример такого статуса, мне кажется что там не может быть обоих кодов одновременно
12 апр 19, 17:16    [21860720]     Ответить | Цитировать Сообщить модератору
 Re: отличить LOCK CONFLICT от DEADLOCK-а  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30037

12.04.2019 17:16, hvlad пишет:
> Покажи пример такого статуса, мне кажется что там не может быть обоих кодов одновременно

всегда оно там.
из двух разных коннектов апдейтим одну запись.
не коммитим.
имеем:

1 335544336
1 335544451
1 335544878
4 21807171

Posted via ActualForum NNTP Server 1.5

12 апр 19, 17:36    [21860738]     Ответить | Цитировать Сообщить модератору
 Re: отличить LOCK CONFLICT от DEADLOCK-а  [new]
hvlad
Member

Откуда:
Сообщений: 10405
Мимопроходящий,

тут у тебя:
isc_deadlock,
isc_update_conflict,
isc_concurrent_transaction

от чего ты хочешь это отличить ?

По идее, достаточно опираться на наличие isc_update_conflict
12 апр 19, 17:53    [21860753]     Ответить | Цитировать Сообщить модератору
 Re: отличить LOCK CONFLICT от DEADLOCK-а  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30037

12.04.2019 17:53, hvlad пишет:
> от чего ты хочешь это отличить ?

от настоящего DEADLOCK-а я хочу это отличить.

> По идее, достаточно опираться на наличие isc_update_conflict

поясни, плс.

Posted via ActualForum NNTP Server 1.5

12 апр 19, 17:57    [21860761]     Ответить | Цитировать Сообщить модератору
 Re: отличить LOCK CONFLICT от DEADLOCK-а  [new]
hvlad
Member

Откуда:
Сообщений: 10405
Мимопроходящий
> от чего ты хочешь это отличить ?

от настоящего DEADLOCK-а я хочу это отличить.
А что ты называешь настоящим дедлоком ?


Мимопроходящий
> По идее, достаточно опираться на наличие isc_update_conflict

поясни, плс.
В вышеприведенном статус-векторе isc_deadlock можно игнорировать.
isc_update_conflict говорит о наличии конфликта обновления\удаления
12 апр 19, 18:05    [21860771]     Ответить | Цитировать Сообщить модератору
 Re: отличить LOCK CONFLICT от DEADLOCK-а  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30037

12.04.2019 18:05, hvlad пишет:
> А что ты называешь настоящим дедлоком ?

естественно 2 WAIT-транзакции, которые взамно наступили на одну пару граблей идя к ним окольными путями.

> В вышеприведенном статус-векторе isc_deadlock можно игнорировать.

это понятно.
ещё со времён IB5.X сервер пихал isc_deadlock куда ни попадя.

> isc_update_conflict говорит о наличии конфликта обновления\удаления

существует ещё и isc_lock_conflict (не в этом случае).
и опять таки, в присутствии isc_deadlock.

Posted via ActualForum NNTP Server 1.5

12 апр 19, 18:28    [21860794]     Ответить | Цитировать Сообщить модератору
 Re: отличить LOCK CONFLICT от DEADLOCK-а  [new]
hvlad
Member

Откуда:
Сообщений: 10405
Мимопроходящий,

isc_update_conflict возвращается когда кто-то обновил\удалил запись, которую мы хотим обновить удалить,
и успел закоммититься.

Если же конкурент активен, то, в зависимости от значения нашего лок-таймаута, возвращается
- isc_deadlock, если таймаут -1 ("бесконечное ожидание")
- isc_lock_conflict, если таймаут 0
- isc_lock_timeout, если таймаут > 0
12 апр 19, 18:53    [21860820]     Ответить | Цитировать Сообщить модератору
 Re: отличить LOCK CONFLICT от DEADLOCK-а  [new]
hvlad
Member

Откуда:
Сообщений: 10405
Мимопроходящий
isc_lock_conflict (не в этом случае).
и опять таки, в присутствии isc_deadlock.
Никогда не видел и не думаю, что увижу
12 апр 19, 18:54    [21860822]     Ответить | Цитировать Сообщить модератору
 Re: отличить LOCK CONFLICT от DEADLOCK-а  [new]
hvlad
Member

Откуда:
Сообщений: 10405
hvlad
isc_update_conflict возвращается когда кто-то обновил\удалил запись, которую мы хотим обновить удалить,
и успел закоммититься.
Похоже поспешил, не все ветки кода просмотрел.
Есть случаи, когда isc_update_conflict возвращается независимо от состояния конкурента.
12 апр 19, 19:00    [21860825]     Ответить | Цитировать Сообщить модератору
 Re: отличить LOCK CONFLICT от DEADLOCK-а  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30037

у меня в логах от 1.5 присутствуют комбинации:

isc_deadlock
isc_update_conflict

и

isc_lock_conflict
isc_deadlock
isc_update_conflict

именно в такой последовательности.

Posted via ActualForum NNTP Server 1.5

15 апр 19, 11:47    [21862200]     Ответить | Цитировать Сообщить модератору
 Re: отличить LOCK CONFLICT от DEADLOCK-а  [new]
hvlad
Member

Откуда:
Сообщений: 10405
Мимопроходящий,

что такое 1.5 ?
15 апр 19, 12:39    [21862316]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить