void CRUTableSyncTaskExecutor::Init() { inherited::Init(); CRUTableSyncTask *pParentTask = (CRUTableSyncTask *)GetParentTask(); RUASSERT(NULL != pParentTask); CRUTbl &tbl = pParentTask->GetTable(); if (FALSE == tbl.IsIncEpochNeeded()) { ResetHasWork(); return; } tableName_ = tbl.GetFullName(); // Decides whether the table needs a long lock,and set the table attribute // prepare the sql text and update the ddol cache object PrepareCatApi(); SetState(EX_INC_EPOCH); }
void CRUTableSyncTaskExecutor::Epilogue() { CRUTableSyncTask *pParentTask = (CRUTableSyncTask *)GetParentTask(); RUASSERT(NULL != pParentTask); CRUTbl &tbl = pParentTask->GetTable(); if (TRUE == tbl.IsIncEpochNeeded()) { if (TRUE == tbl.IsLongLockNeeded()) { BeginTransaction(); tbl.ExecuteReadProtectedOpen(); CommitTransaction(); } if (TRUE == tbl.IsLogRPOpenPending()) { // The above condition is false only in case of // a non involved incremental mv.We do not need to lock the logs // because we rely on the ddl locks tbl.ReleaseLogReadProtectedOpen(); } } SetState(EX_COMPLETE); }
void CRUEmpCheckTaskExecutor::Init() { inherited::Init(); CRUEmpCheckTask *pParentTask = (CRUEmpCheckTask *)GetParentTask(); RUASSERT(NULL != pParentTask); CRUTbl &tbl = pParentTask->GetTable(); pEmpCheck_ = new CRUEmpCheck(tbl.GetEmpCheckVector()); // We are interested only in the the records that are logged // BEFORE the epoch increment, so we place an upper bound TInt32 upperBound; if (TRUE == tbl.IsInvolvedMV()) { // The check happens before the epoch increment upperBound = tbl.GetCurrentEpoch(); } else { // The check happens after the epoch increment upperBound = tbl.GetCurrentEpoch()-1; } pEmpCheck_->ComposeSQL(tbl, upperBound); SetState(EX_CHECK); }
//--------------------------------------------------------------------------// // CRULockEquivSetTaskExecutor::SetTimestampToAllTbls() //--------------------------------------------------------------------------// void CRULockEquivSetTaskExecutor::SetTimestampToAllTbls(TInt64 ts) { CRULockEquivSetTask *pParentTask = (CRULockEquivSetTask *)GetParentTask(); RUASSERT(NULL != pParentTask); CRUTblList &tblList = pParentTask->GetTableList(); DSListPosition pos = tblList.GetHeadPosition(); while (NULL != pos) { CRUTbl *pTbl = tblList.GetNext(pos); pTbl->SetTimestamp(ts); } }
void CRUTableSyncTaskExecutor::PrepareCatApi() { CRUTableSyncTask *pParentTask = (CRUTableSyncTask *)GetParentTask(); RUASSERT(NULL != pParentTask); CRUTbl &tbl = pParentTask->GetTable(); tbl.IncrementCurrentEpoch(FALSE); CDSString catApiText = tbl.GetIncEpochCatApiText(); syncTableDynamicContainer_.SetStatementText (INC_EPOCH,catApiText); }
void CRULockEquivSetTaskExecutor::Work() { CRULockEquivSetTask *pParentTask = (CRULockEquivSetTask *)GetParentTask(); RUASSERT(NULL != pParentTask); TESTPOINT(CRUGlobals::TESTPOINT173); // We open transaction here because we might do an Invalidate opens // sql statement and also we need to make get current time sql statement // that requires a transaction BeginTransaction(); FreezeAllTables(pParentTask); SetTimestampToAllTbls(CRUGlobals::GetCurrentTimestamp()); CommitTransaction(); TESTPOINT(CRUGlobals::TESTPOINT174); SetState(EX_COMPLETE); }