Чти двухвазные транзакции, там всё расписано.  В товём случае это просто отлуп 
такой транзакции, по какой причине она на одном из серверов обломлась неважно.

Ты про 2pc в общем случае или же в случае ФБ?

Я о том, что некоторые DSQL запросы тоже могут возвращать lock conflict, но это никаким образом не влияет на состояние транзакции - изменения произведенные этим запросом конечно откатятся по сэйвпойнту, но изменения из предыдущих запросов в той же транзакции остаются и никто не мешает мне сделать commit. Теперь если lock conflict случается только на одном сервере, то на другом изменения остаются. И единственная возможность - это инициировать откат транзакции из приложения, поскольку сервер не в курсе, что у нас отлуп транзакции.

Каким образом может получится lock conflict только на одном сервере? Например если два приложения одновременно стартуют транзакцию и запросы на сервера приходят от приложений в разной последовательности...

Если ты дальше настаиваешь на формулировке "чти двухфазные транзакции", то мне ничего не остается, как попробовать создать тебе пример, когда твой подход не работает. Возможно ты прав, я только спросил насколько такой подход правильный...

Роман

Ответить