Про отмену операций в Firebird (#2)

Привет всем.

Некоторое время назад, при прогоне тестов (с использованием пула подключений) на FB3, увидел интересный эффект — отмена операций в одном тесте может прерывать выполнение операций в следующем тесте.

Поставил я у себя в голове галочку, что на FB2.5 такого не было, и забил на эту проблему.

А сейчас вот увидел аналогичную проблему в рамках одного теста и на FB2.5 — мы вроде как хотим отменить Execute, а внезапно отменяется Commit:

[THR:010600] [test] RemoteFB__Connector::ConnectToDatabase ...OK
[THR:010600] [test] RemoteFB__Connector::StartTransaction ...OK
[THR:010600] [test] RemoteFB__Connector::StmtAllocate ...OK
[THR:010600] [test] RemoteFB__Connector::StmtPrepare ...OK
[THR:010600] [test] Run thread
[THR:004068] [thread] Execute command
[THR:010600] [test] Wait 1 sec
[THR:010600] [test] Cancel
[THR:010600] [test] Wait Thread
[THR:004068] [thread] RemoteFB__Connector::StmtExecute ...OK
[THR:010600] [test] Thread was stopped
[THR:010600] ERROR: [test] We wait the cancel exception!
[THR:010600] [test] RemoteFB__Connector::StmtDrop ...OK
[THR:010600] [test] RemoteFB__Connector::Commit ... FAILED
[THR:010600] ERROR: [RemoteFB.WORK.Cancel.01.StmtExecute.ptype__lazy_send] [Firebird] Операция была отменена.

Лопата в том, что:

1. Провайдер (и его собственный FB-клиент), отдает серверу Cancel-команду пока выполняется Execute. Про это было в предыдущем опусе со следующим примером.

2. В конце концов, тест (поток 010600) сначала выполняет Cancel, а потом Commit.

Вот такая вот засада с этим Cancel, которая (по факту) делает эту фичу бестолковой игрушкой. Сделанной для галочки.

2 комментария

hvlad  on 26 сентября, 2016

Дима, галочек в чужом глазу не устал считать ?
Детсад-жеж, противно тебя читать

Dmitry Kovalenko  on 27 сентября, 2016

Надо же как-то компенсировать аналогичную реакцию на исходный код FB.

Нет, не устал. Стараюсь больше одной в день не считать.

Сегодня, наверное, пропущу.

Я и так вчера перенапрягся 🙂

Leave a Comment