You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-07-29 08:21:15 +03:00
MCOL-5263 Add support to ROLLBACK when PP were restarted.
DMLProc starts ROLLBACK when SELECT part of UPDATE fails b/c EM facility in PP were restarted. Unfortunately this ROLLBACK stuck if EM/PP are not yet available. DMLProc must have a t/o with re-try doing ROLLBACK.
This commit is contained in:
@ -37,6 +37,8 @@
|
||||
#include "we_ddlcommandclient.h"
|
||||
#include "oamcache.h"
|
||||
#include "liboamcpp.h"
|
||||
#include "resourcemanager.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace WriteEngine;
|
||||
using namespace dmlpackage;
|
||||
@ -370,7 +372,7 @@ DMLPackageProcessor::DMLResult CommandPackageProcessor::processPackage(
|
||||
int weRc = 0;
|
||||
|
||||
// version rollback, Bulkrollback
|
||||
weRc = rollBackTransaction(uniqueId, txnid, fSessionID, errorMsg);
|
||||
weRc = tryToRollBackTransaction(uniqueId, txnid, fSessionID, errorMsg);
|
||||
|
||||
if (weRc == 0)
|
||||
{
|
||||
@ -413,7 +415,7 @@ DMLPackageProcessor::DMLResult CommandPackageProcessor::processPackage(
|
||||
{
|
||||
std::string errorMsg("");
|
||||
logging::logCommand(cpackage.get_SessionID(), txnid.id, "ROLLBACK;");
|
||||
int weRc = rollBackTransaction(uniqueId, txnid, fSessionID, errorMsg);
|
||||
int weRc = tryToRollBackTransaction(uniqueId, txnid, fSessionID, errorMsg);
|
||||
|
||||
if (weRc != 0)
|
||||
{
|
||||
|
@ -266,6 +266,27 @@ int DMLPackageProcessor::commitTransaction(uint64_t uniqueId, BRM::TxnID txnID)
|
||||
return rc;
|
||||
}
|
||||
|
||||
// Tries to rollback transaction, if network error tries one more time
|
||||
// MCOL-5263.
|
||||
int32_t DMLPackageProcessor::tryToRollBackTransaction(uint64_t uniqueId, BRM::TxnID txnID, uint32_t sessionID,
|
||||
string& errorMsg)
|
||||
{
|
||||
auto weRc = rollBackTransaction(uniqueId, txnID, sessionID, errorMsg);
|
||||
if (weRc)
|
||||
{
|
||||
weRc = rollBackTransaction(uniqueId, txnID, sessionID, errorMsg);
|
||||
if (weRc == 0)
|
||||
{
|
||||
// Setup connection in WE with PS.
|
||||
joblist::ResourceManager* rm = joblist::ResourceManager::instance(true);
|
||||
joblist::DistributedEngineComm* fEc = joblist::DistributedEngineComm::instance(rm);
|
||||
weRc = fEc->Setup();
|
||||
}
|
||||
}
|
||||
|
||||
return weRc;
|
||||
}
|
||||
|
||||
int DMLPackageProcessor::rollBackTransaction(uint64_t uniqueId, BRM::TxnID txnID, uint32_t sessionID,
|
||||
std::string& errorMsg)
|
||||
{
|
||||
|
@ -249,6 +249,9 @@ class DMLPackageProcessor
|
||||
EXPORT int rollBackTransaction(uint64_t uniqueId, BRM::TxnID txnID, uint32_t sessionID,
|
||||
std::string& errorMsg);
|
||||
|
||||
EXPORT int32_t tryToRollBackTransaction(uint64_t uniqueId, BRM::TxnID txnID, uint32_t sessionID,
|
||||
std::string& errorMsg);
|
||||
|
||||
EXPORT int rollBackBatchAutoOnTransaction(uint64_t uniqueId, BRM::TxnID txnID, uint32_t sessionID,
|
||||
const uint32_t tableOid, std::string& errorMsg);
|
||||
/**
|
||||
|
Reference in New Issue
Block a user