MojErr MojDbKind::subKinds(MojVector<MojObject>& kindsOut, const MojDbKind* parent) { if (!m_supers.empty() && parent != m_supers[0]) return MojErrNone; if (!m_builtin) { MojErr err = kindsOut.push(m_obj); MojErrCheck(err); } for (KindVec::ConstIterator i = m_subs.begin(); i != m_subs.end(); ++i) { MojErr err = (*i)->subKinds(kindsOut, this); MojErrCheck(err); } return MojErrNone; }
MojErr MojThreadTest::basicTest() { MojVector<MojThreadT> threads; MojThreadTestArgs args; for (int i = 0; i < MojTestNumThreads; ++i) { MojThreadT thread = MojInvalidThread; MojErr err = MojThreadCreate(thread, MojThreadTestFn, &args); MojTestErrCheck(err); MojTestAssert(thread != MojInvalidThread); err = threads.push(thread); MojTestErrCheck(err); } { MojThreadGuard guard(args.m_mutex); while (args.m_counter < (MojTestNumThreads * MojTestNumIterations)) { MojErr err = args.m_countCond.wait(args.m_mutex); MojErrCheck(err); } MojTestAssert(args.m_counter == (MojTestNumThreads * MojTestNumIterations)); MojTestAssert(args.m_atomicCounter == (MojTestNumThreads * MojTestNumIterations)); guard.unlock(); MojErr err = MojSleep(MojMillisecs(500)); MojTestErrCheck(err); guard.lock(); args.m_wait = false; err = args.m_waitCond.broadcast(); MojTestErrCheck(err); } for (MojVector<MojThreadT>::ConstIterator i = threads.begin(); i != threads.end(); ++i) { MojErr threadErr = MojErrNone; MojErr err = MojThreadJoin(*i, threadErr); MojTestErrCheck(err); MojTestErrCheck(threadErr); } MojTestAssert(args.m_counter == 0); MojTestAssert(args.m_atomicCounter == 0); return MojErrNone; }
MojErr MojDbKind::updateIndexes(const MojObject* newObj, const MojObject* oldObj, const MojDbReq& req, MojDbOp op, MojVector<MojDbKind*>& kindVec, MojInt32& idxcount) { MojErr err = kindVec.push(this); MojErrCheck(err); // update supers for (KindVec::ConstIterator i = m_supers.begin(); i != m_supers.end(); ++i) { if (kindVec.find((*i), 0) == MojInvalidIndex) { err = (*i)->updateIndexes(newObj, oldObj, req, op, kindVec, idxcount); MojErrCheck(err); } else { return MojErrNone; } } err = updateOwnIndexes(newObj, oldObj, req, idxcount); MojErrCheck(err); return MojErrNone; }
/** * testShardCreateAndRemoveWithRecords * * - create 3 new shards * - add records to 1st and 2nd shard * - remove shard 1 * - verify existance of shard 1 * - verify records of shard 2 * - remove shard 2 * - verify existance of shard 2 * - verify records of shard 3 (== 0) * - remove shard 3 * - verify existance of shard 3 */ MojErr MojDbShardManagerTest::testShardCreateAndRemoveWithRecords (MojDb& db) { MojDbShardEngine* p_eng = db.shardEngine(); MojTestAssert(p_eng); MojDbShardInfo shard1, shard2; MojVector<MojUInt32> arrShardIds; MojUInt32 count; //--------------------------------------------------------------- // test shard 1 //--------------------------------------------------------------- MojErr err = createShardObjects1(db, shard1); MojErrCheck(err); //verify number of records for shard 1 (shard is active) err = verifyRecords(_T("TestShard1:1"), db, shard1, count); MojTestErrCheck(err); MojTestAssert(count == 1); //err = db.shardEngine()->purgeShardObjects(1); //MojTestErrCheck(err); //remove shard 1 arrShardIds.push(shard1.id); err = p_eng->removeShardObjects(arrShardIds); MojErrCheck(err); //verify number of records for shard 1 err = verifyRecords(_T("TestShard1:1"), db, shard1, count); MojErrCheck(err); MojTestAssert(count == 0); //verify existance of shard 1 err = verifyShardExistance(db, shard1); MojErrCheck(err); //--------------------------------------------------------------- // test shard 2 //--------------------------------------------------------------- err = createShardObjects2(db, shard2); MojErrCheck(err); //verify number of records for shard 1 (shard is active) err = verifyRecords(_T("TestShard1:1"), db, shard2, count); MojTestErrCheck(err); MojTestAssert(count == 1); err = verifyRecords(_T("TestShard2:1"), db, shard2, count); MojTestErrCheck(err); MojTestAssert(count == 1); err = verifyRecords(_T("TestShard3:1"), db, shard2, count); MojTestErrCheck(err); MojTestAssert(count == 1); //remove shard 1 arrShardIds.push(shard2.id); err = p_eng->removeShardObjects(arrShardIds); MojErrCheck(err); //verify number of records for shard 1 err = verifyRecords(_T("TestShard1:1"), db, shard2, count); MojErrCheck(err); MojTestAssert(count == 0); err = verifyRecords(_T("TestShard2:1"), db, shard2, count); MojErrCheck(err); MojTestAssert(count == 0); err = verifyRecords(_T("TestShard3:1"), db, shard2, count); MojErrCheck(err); MojTestAssert(count == 0); //verify existance of shard 1 err = verifyShardExistance(db, shard2); MojErrCheck(err); return MojErrNone; }