⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ndb_async2.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 2 页
字号:
 *   ChangedTime *   Location *   BranchExecuted */voidstart_T4(Ndb * pNDB, ThreadData * td, int async){  DEBUG3("T4(%.*s, %.2d): - Starting", SUBSCRIBER_NUMBER_LENGTH, 	 td->transactionData.number, 	 td->transactionData.server_id);    NdbConnection * pCON = 0;  while((pCON = startTransaction(pNDB, td)) == 0){    CHECK_ALLOWED_ERROR("T4-1: startTransaction", td, pNDB->getNdbError());    NdbSleep_MilliSleep(10);  }    NdbOperation *MyOp= pCON->getNdbOperation(SUBSCRIBER_TABLE);  CHECK_NULL(MyOp, "T4-1: getNdbOperation", td,	     pCON->getNdbError());    MyOp->interpretedUpdateTuple();  MyOp->equal(IND_SUBSCRIBER_NUMBER, 	      td->transactionData.number);  MyOp->getValue(IND_SUBSCRIBER_LOCATION, 		 (char *)&td->transactionData.location);  MyOp->getValue(IND_SUBSCRIBER_CHANGED_BY, 		 td->transactionData.changed_by);  MyOp->getValue(IND_SUBSCRIBER_CHANGED_TIME, 		 td->transactionData.changed_time);  MyOp->getValue(IND_SUBSCRIBER_GROUP,		 (char *)&td->transactionData.group_id);  MyOp->getValue(IND_SUBSCRIBER_SESSIONS,		 (char *)&td->transactionData.sessions);   MyOp->incValue(IND_SUBSCRIBER_SESSIONS, 		 (uint32)td->transactionData.server_bit);  stat_async = async;  if (async == 1) {    pCON->executeAsynchPrepare( NoCommit , T4_Callback_1, td);  } else {    int result = pCON->execute( NoCommit );    T4_Callback_1(result, pCON, (void*)td);    return;  }//if}voidT4_Callback_1(int result, NdbConnection * pCON, void * threadData){  ThreadData * td = (ThreadData *)threadData;    if (result == -1) {    CHECK_ALLOWED_ERROR("T4-1: execute", td, pCON->getNdbError());    td->pNDB->closeTransaction(pCON);    start_T4(td->pNDB, td, stat_async);    return;  }//if    DEBUG3("T4(%.*s, %.2d): - Callback 1", 	 SUBSCRIBER_NUMBER_LENGTH, 	 td->transactionData.number, 	 td->transactionData.server_id);  NdbOperation * MyOp = pCON->getNdbOperation(GROUP_TABLE);  CHECK_NULL(MyOp, "T4-2: getNdbOperation", td,	     pCON->getNdbError());    MyOp->readTuple();  MyOp->equal(IND_GROUP_ID,	      (char*)&td->transactionData.group_id);  MyOp->getValue(IND_GROUP_ALLOW_INSERT, 		 (char *)&td->transactionData.permission);  if (stat_async == 1) {    pCON->executeAsynchPrepare( NoCommit , T4_Callback_2, td);  } else {    int result = pCON->execute( NoCommit );    T4_Callback_2(result, pCON, (void*)td);    return;  }//if}voidT4_Callback_2(int result, NdbConnection * pCON, void * threadData){  ThreadData * td = (ThreadData *)threadData;    if (result == -1) {    CHECK_ALLOWED_ERROR("T4-2: execute", td, pCON->getNdbError());    td->pNDB->closeTransaction(pCON);    start_T4(td->pNDB, td, stat_async);    return;  }//if  Uint32 permission = td->transactionData.permission;  Uint32 sessions   = td->transactionData.sessions;  Uint32 server_bit = td->transactionData.server_bit;    if(((permission & server_bit) == server_bit) &&     ((sessions   & server_bit) == 0)){        memcpy(td->transactionData.suffix,	   &td->transactionData.number[SFX_START],	   SUBSCRIBER_NUMBER_SUFFIX_LENGTH);        DEBUG5("T4(%.*s, %.2d): - Callback 2 - inserting(%.*s)", 	   SUBSCRIBER_NUMBER_LENGTH, 	   td->transactionData.number, 	   td->transactionData.server_id,	   SUBSCRIBER_NUMBER_SUFFIX_LENGTH, 	   td->transactionData.suffix);        /* Operation 3 */        NdbOperation * MyOp = pCON->getNdbOperation(SESSION_TABLE);    CHECK_NULL(MyOp, "T4-3: getNdbOperation", td,	       pCON->getNdbError());        MyOp->insertTuple();    MyOp->equal(IND_SESSION_SUBSCRIBER,		(char*)td->transactionData.number);    MyOp->equal(IND_SESSION_SERVER,		(char*)&td->transactionData.server_id);    MyOp->setValue(SESSION_DATA, 		   (char *)td->transactionData.session_details);    /* Operation 4 */        /* Operation 5 */    MyOp = pCON->getNdbOperation(SERVER_TABLE);    CHECK_NULL(MyOp, "T4-5: getNdbOperation", td,	       pCON->getNdbError());        MyOp->interpretedUpdateTuple();    MyOp->equal(IND_SERVER_ID,		(char*)&td->transactionData.server_id);    MyOp->equal(IND_SERVER_SUBSCRIBER_SUFFIX,		(char*)td->transactionData.suffix);    MyOp->incValue(IND_SERVER_INSERTS, (uint32)1);    td->transactionData.branchExecuted = 1;  } else {    td->transactionData.branchExecuted = 0;    DEBUG5("T4(%.*s, %.2d): - Callback 2 - %s %s",	   SUBSCRIBER_NUMBER_LENGTH, 	   td->transactionData.number, 	   td->transactionData.server_id,	   ((permission & server_bit) ? 	    "permission - " : "no permission - "),	   ((sessions   & server_bit) ? 	    "in session - " : "no in session - "));  }    if(!td->transactionData.do_rollback && td->transactionData.branchExecuted){    if (stat_async == 1) {      pCON->executeAsynchPrepare( Commit , T4_Callback_3, td);    } else {      int result = pCON->execute( Commit );      T4_Callback_3(result, pCON, (void*)td);      return;    }//if  } else {    if (stat_async == 1) {      pCON->executeAsynchPrepare( Rollback , T4_Callback_3, td);    } else {      int result = pCON->execute( Rollback );      T4_Callback_3(result, pCON, (void*)td);      return;    }//if  }}voidT4_Callback_3(int result, NdbConnection * pCON, void * threadData){  ThreadData * td = (ThreadData *)threadData;    if (result == -1) {    CHECK_ALLOWED_ERROR("T4-3: Commit", td, pCON->getNdbError());    td->pNDB->closeTransaction(pCON);    start_T4(td->pNDB, td, stat_async);    return;  }//if    DEBUG3("T4(%.*s, %.2d): - Completing", 	 SUBSCRIBER_NUMBER_LENGTH, 	 td->transactionData.number, 	 td->transactionData.server_id);  td->pNDB->closeTransaction(pCON);  complete_T4(td);}/** * Transaction 5 - T5 *  * Delete session * * Input: *   SubscriberNumber *   ServerId *   ServerBit *   DoRollback * Output: *   ChangedBy *   ChangedTime *   Location *   BranchExecuted */voidstart_T5(Ndb * pNDB, ThreadData * td, int async){  DEBUG3("T5(%.*s, %.2d): - Starting", SUBSCRIBER_NUMBER_LENGTH, 	 td->transactionData.number, 	 td->transactionData.server_id);  NdbConnection * pCON = 0;  while((pCON = startTransaction(pNDB, td)) == 0){    CHECK_ALLOWED_ERROR("T5-1: startTransaction", td, pNDB->getNdbError());    NdbSleep_MilliSleep(10);  }    NdbOperation * MyOp= pCON->getNdbOperation(SUBSCRIBER_TABLE);  CHECK_NULL(MyOp, "T5-1: getNdbOperation", td,	     pCON->getNdbError());    MyOp->interpretedUpdateTuple();  MyOp->equal(IND_SUBSCRIBER_NUMBER, 	      td->transactionData.number);  MyOp->getValue(IND_SUBSCRIBER_LOCATION, 		 (char *)&td->transactionData.location);  MyOp->getValue(IND_SUBSCRIBER_CHANGED_BY, 		 td->transactionData.changed_by);  MyOp->getValue(IND_SUBSCRIBER_CHANGED_TIME, 		 td->transactionData.changed_time);  MyOp->getValue(IND_SUBSCRIBER_GROUP,		 (char *)&td->transactionData.group_id);  MyOp->getValue(IND_SUBSCRIBER_SESSIONS,		 (char *)&td->transactionData.sessions);  MyOp->subValue(IND_SUBSCRIBER_SESSIONS, 		 (uint32)td->transactionData.server_bit);  stat_async = async;  if (async == 1) {    pCON->executeAsynchPrepare( NoCommit , T5_Callback_1, td);  } else {    int result = pCON->execute( NoCommit );    T5_Callback_1(result, pCON, (void*)td);    return;  }//if}voidT5_Callback_1(int result, NdbConnection * pCON, void * threadData){  ThreadData * td = (ThreadData *)threadData;    if (result == -1) {    CHECK_ALLOWED_ERROR("T5-1: execute", td, pCON->getNdbError());    td->pNDB->closeTransaction(pCON);    start_T5(td->pNDB, td, stat_async);    return;  }//if  DEBUG3("T5(%.*s, %.2d): - Callback 1", 	 SUBSCRIBER_NUMBER_LENGTH, 	 td->transactionData.number, 	 td->transactionData.server_id);    NdbOperation * MyOp = pCON->getNdbOperation(GROUP_TABLE);  CHECK_NULL(MyOp, "T5-2: getNdbOperation", td,	     pCON->getNdbError());    MyOp->readTuple();  MyOp->equal(IND_GROUP_ID,	      (char*)&td->transactionData.group_id);  MyOp->getValue(IND_GROUP_ALLOW_DELETE, 		 (char *)&td->transactionData.permission);  if (stat_async == 1) {    pCON->executeAsynchPrepare( NoCommit , T5_Callback_2, td);  } else {    int result = pCON->execute( NoCommit );    T5_Callback_2(result, pCON, (void*)td);    return;  }//if}voidT5_Callback_2(int result, NdbConnection * pCON, void * threadData){  ThreadData * td = (ThreadData *)threadData;    if (result == -1) {    CHECK_ALLOWED_ERROR("T5-2: execute", td, pCON->getNdbError());    td->pNDB->closeTransaction(pCON);    start_T5(td->pNDB, td, stat_async);    return;  }//if  Uint32 permission = td->transactionData.permission;  Uint32 sessions   = td->transactionData.sessions;  Uint32 server_bit = td->transactionData.server_bit;  if(((permission & server_bit) == server_bit) &&     ((sessions   & server_bit) == server_bit)){        memcpy(td->transactionData.suffix,	   &td->transactionData.number[SFX_START],	   SUBSCRIBER_NUMBER_SUFFIX_LENGTH);        DEBUG5("T5(%.*s, %.2d): - Callback 2 - deleting(%.*s)", 	   SUBSCRIBER_NUMBER_LENGTH, 	   td->transactionData.number, 	   td->transactionData.server_id,	   SUBSCRIBER_NUMBER_SUFFIX_LENGTH, 	   td->transactionData.suffix);        /* Operation 3 */    NdbOperation * MyOp = pCON->getNdbOperation(SESSION_TABLE);    CHECK_NULL(MyOp, "T5-3: getNdbOperation", td,	       pCON->getNdbError());        MyOp->deleteTuple();    MyOp->equal(IND_SESSION_SUBSCRIBER,		(char*)td->transactionData.number);    MyOp->equal(IND_SESSION_SERVER,		(char*)&td->transactionData.server_id);    /* Operation 4 */        /* Operation 5 */    MyOp = pCON->getNdbOperation(SERVER_TABLE);    CHECK_NULL(MyOp, "T5-5: getNdbOperation", td,	       pCON->getNdbError());        MyOp->interpretedUpdateTuple();    MyOp->equal(IND_SERVER_ID,		(char*)&td->transactionData.server_id);    MyOp->equal(IND_SERVER_SUBSCRIBER_SUFFIX,		(char*)td->transactionData.suffix);    MyOp->incValue(IND_SERVER_DELETES, (uint32)1);    td->transactionData.branchExecuted = 1;  } else {    td->transactionData.branchExecuted = 0;    DEBUG5("T5(%.*s, %.2d): - Callback 2 - no delete - %s %s", 	   SUBSCRIBER_NUMBER_LENGTH, 	   td->transactionData.number, 	   td->transactionData.server_id,	   ((permission & server_bit) ? 	    "permission - " : "no permission - "),	   ((sessions   & server_bit) ? 	    "in session - " : "no in session - "));  }    if(!td->transactionData.do_rollback && td->transactionData.branchExecuted){    if (stat_async == 1) {      pCON->executeAsynchPrepare( Commit , T5_Callback_3, td);    } else {      int result = pCON->execute( Commit );      T5_Callback_3(result, pCON, (void*)td);      return;    }//if  } else {    if (stat_async == 1) {      pCON->executeAsynchPrepare( Rollback , T5_Callback_3, td);    } else {      int result = pCON->execute( Rollback );      T5_Callback_3(result, pCON, (void*)td);      return;    }//if  }}voidT5_Callback_3(int result, NdbConnection * pCON, void * threadData){  ThreadData * td = (ThreadData *)threadData;    if (result == -1) {    CHECK_ALLOWED_ERROR("T5-3: Commit", td, pCON->getNdbError());    td->pNDB->closeTransaction(pCON);    start_T5(td->pNDB, td, stat_async);    return;  }//if    DEBUG3("T5(%.*s, %.2d): - Completing", 	 SUBSCRIBER_NUMBER_LENGTH, 	 td->transactionData.number, 	 td->transactionData.server_id);    td->pNDB->closeTransaction(pCON);  complete_T5(td);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -