dbgenerator.c

来自「MySQL数据库开发源码 值得一看哦」· C语言 代码 · 共 544 行 · 第 1/2 页

C
544
字号
/* Copyright (C) 2003 MySQL AB   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2 of the License, or   (at your option) any later version.   This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with this program; if not, write to the Free Software   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA *//**************************************************************** I N C L U D E D   F I L E S                                  ****************************************************************/#include <ndb_global.h>#include "dbGenerator.h"/**************************************************************** L O C A L   C O N S T A N T S                                ****************************************************************//**************************************************************** L O C A L   D A T A   S T R U C T U R E S                    ****************************************************************//**************************************************************** L O C A L   F U N C T I O N S                                ****************************************************************/static void getRandomSubscriberNumber(SubscriberNumber number);static void getRandomServerId(ServerId *serverId);static void getRandomChangedBy(ChangedBy changedBy);static void getRandomChangedTime(ChangedTime changedTime);static void clearTransaction(TransactionDefinition *trans);static void initGeneratorStatistics(GeneratorStatistics *gen);static void doOneTransaction(UserHandle *uh, GeneratorStatistics *gen);static void doTransaction_T1(UserHandle *uh, GeneratorStatistics *gen);static void doTransaction_T2(UserHandle *uh, GeneratorStatistics *gen);static void doTransaction_T3(UserHandle *uh, GeneratorStatistics *gen);static void doTransaction_T4(UserHandle *uh, GeneratorStatistics *gen);static void doTransaction_T5(UserHandle *uh, GeneratorStatistics *gen);/**************************************************************** L O C A L   D A T A                                          ****************************************************************/static SequenceValues transactionDefinition[] = {   {25, 1},   {25, 2},   {20, 3},   {15, 4},   {15, 5},   {0,  0}};static SequenceValues rollbackDefinition[] = {   {98, 0},   {2 , 1},   {0,  0}};static int maxsize = 0;/**************************************************************** P U B L I C   D A T A                                        ****************************************************************//******************************************************************************************************************************** L O C A L   F U N C T I O N S   C O D E   S E C T I O N      ********************************************************************************************************************************/static void getRandomSubscriberNumber(SubscriberNumber number){   uint32 tmp;   char sbuf[SUBSCRIBER_NUMBER_LENGTH + 1];   tmp = myRandom48(NO_OF_SUBSCRIBERS);   sprintf(sbuf, "%.*d", SUBSCRIBER_NUMBER_LENGTH, tmp);   memcpy(number, sbuf, SUBSCRIBER_NUMBER_LENGTH);}static void getRandomServerId(ServerId *serverId){   *serverId = myRandom48(NO_OF_SERVERS);}static void getRandomChangedBy(ChangedBy changedBy){   memset(changedBy, myRandom48(26)+'A', CHANGED_BY_LENGTH);   changedBy[CHANGED_BY_LENGTH] = 0;}static void getRandomChangedTime(ChangedTime changedTime){   memset(changedTime, myRandom48(26)+'A', CHANGED_TIME_LENGTH);   changedTime[CHANGED_TIME_LENGTH] = 0;}static void clearTransaction(TransactionDefinition *trans){   trans->benchTime        = 0.0;   trans->count            = 0;   trans->branchExecuted   = 0;   trans->rollbackExecuted = 0;}static int listFull(SessionList *list){   return(list->numberInList == SESSION_LIST_LENGTH);}static int listEmpty(SessionList *list){   return(list->numberInList == 0);}static void insertSession(SessionList     *list,                           SubscriberNumber number,                          ServerId         serverId){   SessionElement *e;   if( listFull(list) ) return;   e = &list->list[list->writeIndex];   strcpy(e->subscriberNumber, number);   e->serverId = serverId;   list->writeIndex = (list->writeIndex + 1) % SESSION_LIST_LENGTH;   list->numberInList++;if( list->numberInList > maxsize )maxsize = list->numberInList;}static SessionElement *getNextSession(SessionList *list){   if( listEmpty(list) ) return(0);   return(&list->list[list->readIndex]);}static void deleteSession(SessionList *list){   if( listEmpty(list) ) return;   list->readIndex = (list->readIndex + 1) % SESSION_LIST_LENGTH;   list->numberInList--;}static void initGeneratorStatistics(GeneratorStatistics *gen){   int i;   if( initSequence(&gen->transactionSequence,                    transactionDefinition) != 0 ) {      printf("could not set the transaction types\n");      exit(0);   }   if( initSequence(&gen->rollbackSequenceT4,                    rollbackDefinition) != 0 ) {      printf("could not set the rollback sequence\n");      exit(0);   }   if( initSequence(&gen->rollbackSequenceT5,                    rollbackDefinition) != 0 ) {      printf("could not set the rollback sequence\n");      exit(0);   }   for(i = 0; i < NUM_TRANSACTION_TYPES; i++ )      clearTransaction(&gen->transactions[i]);   gen->totalTransactions = 0;   gen->activeSessions.numberInList = 0;   gen->activeSessions.readIndex    = 0;   gen->activeSessions.writeIndex   = 0;}static void doOneTransaction(UserHandle *uh, GeneratorStatistics *gen){   unsigned int transactionType;   transactionType = getNextRandom(&gen->transactionSequence);   switch(transactionType) {      case 1:         doTransaction_T1(uh, gen);         break;      case 2:         doTransaction_T2(uh, gen);         break;      case 3:         doTransaction_T3(uh, gen);         break;      case 4:         doTransaction_T4(uh, gen);         break;      case 5:         doTransaction_T5(uh, gen);         break;      default:         printf("Unknown transaction type: %d\n", transactionType);   }   gen->totalTransactions++;}static void doTransaction_T1(UserHandle *uh, GeneratorStatistics *gen){   SubscriberNumber number;   Location         new_location;   ChangedBy        changed_by;    ChangedTime      changed_time;   double start_time;   double end_time;   double transaction_time;   unsigned int tid = 0;   /*----------------*/   /* Init arguments */   /*----------------*/   getRandomSubscriberNumber(number);   getRandomChangedBy(changed_by);   getRandomChangedTime(changed_time);   new_location = changed_by[0];   /*-----------------*/   /* Run transaction */   /*-----------------*/   start_time = userGetTimeSync();   userTransaction_T1(uh,                      number,                      new_location,                      changed_by,                      changed_time);   end_time = userGetTimeSync();   /*-------------------*/   /* Update Statistics */   /*-------------------*/   transaction_time = end_time - start_time;   gen->transactions[tid].benchTime += transaction_time;   gen->transactions[tid].count++;}static void doTransaction_T2(UserHandle *uh, GeneratorStatistics *gen){   SubscriberNumber number;   Location         new_location;   ChangedBy        changed_by;    ChangedTime      changed_time;   SubscriberName   subscriberName;   double start_time;   double end_time;   double transaction_time;

⌨️ 快捷键说明

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