Про отмену операций в 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, которая (по факту) делает эту фичу бестолковой игрушкой. Сделанной для галочки.
hvlad on 26 сентября, 2016
Дима, галочек в чужом глазу не устал считать ?
Детсад-жеж, противно тебя читать