'CockroachDB C++ transaction retry issue
I'm trying to run the basic C++ example, basically:
void executeTx(
pqxx::connection *c, function<void (pqxx::dbtransaction *tx)> fn) {
pqxx::work tx(*c);
while (true) {
try {
pqxx::subtransaction s(tx, "cockroach_restart");
fn(&s);
s.commit();
break;
} catch (const pqxx::pqxx_exception& e) {
// Swallow "transaction restart" errors; the transaction will be retried.
// Unfortunately libpqxx doesn't give us access to the error code, so we
// do string matching to identify retryable errors.
if (string(e.base().what()).find("restart transaction:") == string::npos) {
throw;
}
}
}
tx.commit();
}
However, transactions never get retried correctly, I'm getting this error:
current transaction is aborted, commands ignored until end of transaction block
Looks like the top level transaction pqxx::work tx(*c); gets poisoned? The second iteration of the loop always fails
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
