コード例 #1
0
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);
}
コード例 #2
0
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);

}
コード例 #3
0
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);
}
コード例 #4
0
//--------------------------------------------------------------------------//
//	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);
	}
}
コード例 #5
0
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);
}
コード例 #6
0
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);
}