本文整理汇总了C++中Transaction::Begin方法的典型用法代码示例。如果您正苦于以下问题:C++ Transaction::Begin方法的具体用法?C++ Transaction::Begin怎么用?C++ Transaction::Begin使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Transaction
的用法示例。
在下文中一共展示了Transaction::Begin方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Push
bool LogCache::Push(uint64_t paxosID, ByteString value, bool commit)
{
ByteArray<128> buf;
Transaction* transaction;
Log_Trace("Storing paxosID %" PRIu64 " with length %d", paxosID, value.length);
transaction = RLOG->GetTransaction();
if (!transaction->IsActive())
transaction->Begin();
WriteRoundID(buf, paxosID);
table->Set(transaction, buf, value);
// delete old
if ((int64_t)(paxosID - logCacheSize) >= 0)
{
paxosID -= logCacheSize;
WriteRoundID(buf, paxosID);
table->Delete(transaction, buf);
}
if (commit)
transaction->Commit();
return true;
}
示例2: DeleteOldRounds
void LogCache::DeleteOldRounds(uint64_t paxosID)
{
Cursor cursor;
ByteArray<128> buf;
DynArray<128> key;
DynArray<128> value;
Transaction* transaction;
transaction = RLOG->GetTransaction();
transaction->Begin();
WriteRoundID(buf, paxosID);
table->Iterate(transaction, cursor);
if (!cursor.Start(buf))
{
cursor.Close();
transaction->Rollback();
return;
}
while (cursor.Prev(key, value))
{
if (key.length > sizeof("@@pround:") - 1 &&
strncmp(key.buffer, "@@pround:", sizeof("@@pround:") - 1) == 0)
cursor.Delete();
else
break;
}
cursor.Close();
transaction->Commit();
}
示例3: BeginTransaction
Transaction* AspEventHandler::BeginTransaction(int loopindex) {
Lock();
// compute txid
ForLoopInfo* f = current_for_;
assert(f != NULL && f->is_parallel());
TXID txid = f->GetTXID(loopindex);
Transaction* tx = new Transaction();
// register the transaction
txlist_.push_back(tx);
tx->Begin(txid);
Unlock();
return tx;
}
示例4: DatabaseSetTest
int DatabaseSetTest(TestConfig& conf)
{
int numTest;
Table* table;
Transaction* tx;
bool ret;
int limit = 16*KB;
int sum;
char lacKee[20];
if (DatabaseSetup())
{
//Log_Message("Cannot initialize database!", 1);
return 1;
}
table = database.GetTable("keyspace");
if (!table)
{
//Log_Message("Cannot initialize table!", 1);
return 1;
}
tx = NULL;
tx = new Transaction(table);
tx->Begin();
sum = 0;
numTest = conf.datasetTotal / conf.valueSize;
for (int i = 0; i < numTest; i++)
{
//## if (conf.rndkey)
//## GenRandomString(conf.key, conf.keySize);
//## else
conf.key.append("key");
snprintf(lacKee, sizeof(lacKee), "%d", conf.padding.length());
conf.key.append(lacKee);
conf.key.append(conf.padding.c_str());
snprintf(lacKee, sizeof(lacKee), "%d", i);
conf.key.append(lacKee);
// conf.key.Writef("key%B:%d", conf.padding.length, conf.padding.buffer, i);
ret = table->Set(tx, conf.key.c_str(), conf.value.c_str());
if (!ret)
{
//Log_Message("Test failed, ret = %s (%s failed after %d)", ret ? "true" : "false", conf.typeString, i);
return 1;
}
sum += conf.keySize + conf.valueSize;
if (sum > limit)
{
tx->Commit();
tx->Begin();
sum = 0;
}
}
tx->Commit();
return 0;
}
示例5: DatabaseSetTest
int DatabaseSetTest(TestConfig& conf)
{
int numTest;
Stopwatch sw;
Table* table;
Transaction* tx;
bool ret;
int limit = 16*KB;
int sum;
if (conf.argc < 5)
{
Log_Message("\n\tusage: %s <keySize> <valueSize>", conf.typeString);
return 1;
}
Log_SetTrace(true);
if (DatabaseSetup())
{
Log_Message("Cannot initialize database!", 1);
return 1;
}
table = database.GetTable("keyspace");
if (!table)
{
Log_Message("Cannot initialize table!", 1);
return 1;
}
conf.SetKeySize(atoi(conf.argv[3]));
conf.SetValueSize(atoi(conf.argv[4]));
Log_Message("Test type = %s, keySize = %d, valueSize = %d",
conf.typeString, conf.keySize, conf.valueSize);
tx = NULL;
tx = new Transaction(table);
sw.Start();
tx->Begin();
sw.Stop();
sum = 0;
numTest = conf.datasetTotal / conf.valueSize;
for (int i = 0; i < numTest; i++)
{
if (conf.rndkey)
GenRandomString(conf.key, conf.keySize);
else
conf.key.Writef("key%B:%d", conf.padding.length, conf.padding.buffer, i);
sw.Start();
ret = table->Set(tx, conf.key, conf.value);
sw.Stop();
if (!ret)
{
Log_Message("Test failed, ret = %s (%s failed after %d)", ret ? "true" : "false", conf.typeString, i);
return 1;
}
sum += conf.keySize + conf.valueSize;
if (sum > limit)
{
sw.Start();
tx->Commit();
sw.Stop();
double mbps = sum / (sw.elapsed / 1000.0) / 1000000;
Log_Message("num = %d, elapsed = %ld, thruput = %lf MB/s", i, sw.elapsed, mbps);
sw.Reset();
sw.Start();
tx->Begin();
sw.Stop();
sum = 0;
}
}
sw.Start();
tx->Commit();
sw.Stop();
double mbps = (conf.valueSize + conf.keySize) * numTest / (sw.elapsed / 1000.0) / 1000000;
Log_Message("Test succeeded, %s/sec = %lf (num = %d, elapsed = %ld, thruput = %lf MB/s)", conf.typeString, numTest / (sw.elapsed / 1000.0), numTest, sw.elapsed, mbps);
return 0;
}