Beispiel #1
0
static PyObject *_mysql_thread_safe(
	PyObject *self,
	PyObject *unused) {

	check_server_init(NULL);
	return PyInt_FromLong((long)mysql_thread_safe());
}
Beispiel #2
0
void
mysql_poolinit(void)
{
    pthread_t	pthread[THREADS];
    db_config	dbc;
    int		i;

    strlcpy(dbc.host, dbhost, strlen(dbhost) + 1);
    strlcpy(dbc.user, dbuser, strlen(dbuser) + 1);
    strlcpy(dbc.pass, dbpass, strlen(dbpass) + 1);
    strlcpy(dbc.name, dbname, strlen(dbname) + 1);

    dbc.port = 0;
    dbc.socket = NULL;

    if (!mysql_thread_safe()) {
        vbprintf("Using own threaded pool with %d mysql threads\n", THREADS);
    } else {
        vbprintf("Using threaded mysql connection pool of %d threads\n", THREADS);
    }

    vbprintf("DB Connections: %d, Threads: %d\n",
             CONPOOL, THREADS);

    //Pre - init
    for (i = 0; i < CONPOOL; i++) {
        dbm[i].db = mysql_conn(dbm[i].db, &dbc);
        pthread_mutex_init(&dbm[i].lock, NULL);
    }
    vbprintf("MySQL init done.\n");
}
Beispiel #3
0
/* NOTE: Insure that mysql_conn->lock is set on function entry */
static int _create_db(char *db_name, mysql_db_info_t *db_info)
{
	char create_line[50];
	MYSQL *mysql_db = NULL;
	int rc = SLURM_ERROR;

	MYSQL *db_ptr = NULL;
	char *db_host = NULL;

	while (rc == SLURM_ERROR) {
		rc = SLURM_SUCCESS;
		if (!(mysql_db = mysql_init(mysql_db)))
			fatal("mysql_init failed: %s", mysql_error(mysql_db));

		db_host = db_info->host;
		db_ptr = mysql_real_connect(mysql_db,
					    db_host, db_info->user,
					    db_info->pass, NULL,
					    db_info->port, NULL, 0);

		if (!db_ptr && db_info->backup) {
			info("Connection failed to host = %s "
			     "user = %s port = %u",
			     db_host, db_info->user,
			     db_info->port);
			db_host = db_info->backup;
			db_ptr = mysql_real_connect(mysql_db, db_host,
						    db_info->user,
						    db_info->pass, NULL,
						    db_info->port, NULL, 0);
		}

		if (db_ptr) {
			snprintf(create_line, sizeof(create_line),
				 "create database %s", db_name);
			if (mysql_query(mysql_db, create_line)) {
				fatal("mysql_real_query failed: %d %s\n%s",
				      mysql_errno(mysql_db),
				      mysql_error(mysql_db), create_line);
			}
			if (mysql_thread_safe())
				mysql_thread_end();
			mysql_close(mysql_db);
		} else {
			info("Connection failed to host = %s "
			     "user = %s port = %u",
			     db_host, db_info->user,
			     db_info->port);
			error("mysql_real_connect failed: %d %s",
			      mysql_errno(mysql_db),
			      mysql_error(mysql_db));
			rc = SLURM_ERROR;
		}
		if (rc == SLURM_ERROR)
			sleep(3);
	}
	return rc;
}
DatabaseWorkerPool<T>::DatabaseWorkerPool()
	: _queue(new ProducerConsumerQueue<SQLOperation*>()),
	_async_threads(0), _synch_threads(0)
{
	WPFatal(mysql_thread_safe(), "Used MySQL library isn't thread-safe.");
	WPFatal(mysql_get_client_version() >= MIN_MYSQL_CLIENT_VERSION, "TrinityCore does not support MySQL versions below 5.1");
	WPFatal(mysql_get_client_version() == MYSQL_VERSION_ID, "Used MySQL library version (%s) does not match the version used to compile TrinityCore (%s).",
		mysql_get_client_info(), MYSQL_SERVER_VERSION);
}
Beispiel #5
0
DatabaseWorkerPool::DatabaseWorkerPool() :
m_queue(new ACE_Activation_Queue(new ACE_Message_Queue<ACE_MT_SYNCH>)),
m_connections(0)
{
    m_infoString = "";

    mysql_library_init(-1, NULL, NULL);
    WPFatal (mysql_thread_safe(), "Used MySQL library isn't thread-safe.");
}
Beispiel #6
0
				Thread () {
				
					//	This whole implementation depends on
					//	multiple threads hitting MySQL at the
					//	same time, so if it's not thread safe
					//	just bail out at once.
					if (!mysql_thread_safe()) throw std::runtime_error(not_thread_safe);
				
					if (mysql_thread_init()!=0) throw std::runtime_error(thread_init_failed);
				
				}
Beispiel #7
0
extern int mysql_db_close_db_connection(mysql_conn_t *mysql_conn)
{
	slurm_mutex_lock(&mysql_conn->lock);
	if (mysql_conn && mysql_conn->db_conn) {
		if (mysql_thread_safe())
			mysql_thread_end();
		mysql_close(mysql_conn->db_conn);
		mysql_conn->db_conn = NULL;
	}
	slurm_mutex_unlock(&mysql_conn->lock);
	return SLURM_SUCCESS;
}
DatabaseMysql::DatabaseMysql()
{
	// before first connection
	if (db_count++ == 0)
	{
		// Mysql Library Init
		mysql_library_init(-1, nullptr, nullptr);

		if (!mysql_thread_safe())
			poco_bugcheck_msg("FATAL ERROR: Used MySQL library isn't thread-safe.");
	}
}
int sqlthreadinit(void)
{
	if(!mysql_thread_safe())
	{
		printf("mysql not thread safe\n");
		return -1;
	}
	if(mysql_thread_init())
	{
		printf("sqlthreadinit: out of memory\n");
		return -1;
	}
	return 0;
}
Beispiel #10
0
DatabaseMysql::DatabaseMysql() : Database(), mMysql(0)
{
    // before first connection
    if (db_count++ == 0)
    {
        // Mysql Library Init
        mysql_library_init(-1, NULL, NULL);

        if (!mysql_thread_safe())
        {
            sLog.outError("FATAL ERROR: Used MySQL library isn't thread-safe.");
            exit(1);
        }
    }
}
DatabaseMysql::DatabaseMysql()
{
    // before first connection
    if (db_count++ == 0)
    {
        // Mysql Library Init
        mysql_library_init(-1, nullptr, nullptr);

        if (!mysql_thread_safe())
        {
            sLog.outError("FATAL ERROR: Used MySQL library isn't thread-safe.");
            Log::WaitBeforeContinueIfNeed();
            exit(1);
        }
    }
}
Beispiel #12
0
//-------------------------------------------------------------------------------------
bool DBUtil::initThread(const std::string& dbinterfaceName)
{
	DBInterfaceInfo* pDBInfo = g_kbeSrvConfig.dbInterface(dbinterfaceName);
	if (strcmp(pDBInfo->db_type, "mysql") == 0)
	{
		if (!mysql_thread_safe()) 
		{
			KBE_ASSERT(false);
		}
		else
		{
			mysql_thread_init();
		}
	}
	
	return true;
}
Beispiel #13
0
//-------------------------------------------------------------------------------------
bool DBUtil::initThread()
{
	ENGINE_COMPONENT_INFO& dbcfg = g_kbeSrvConfig.getDBMgr();
	if(strcmp(dbcfg.db_type, "mysql") == 0)
	{
		if (!mysql_thread_safe()) 
		{
			KBE_ASSERT(false);
		}
		else
		{
			mysql_thread_init();
		}
	}

	return true;
}
MySqlThreadResPool::MySqlThreadResPool( FvWorkerThreadManager& threadMgr,
										FvNetNub& nub,
									    int numConnections,
										int maxSpaceDataSize,
								        const FvDBConfigConnection& connInfo,
                                        const FvEntityDefs& entityDefs,
                                        bool shouldLockDB )
	: m_kThreadPool( threadMgr, numConnections - 1 ), m_kThreadDataPool(),
	m_kFreeThreadData(),
	m_kMainThreadData( connInfo, maxSpaceDataSize, entityDefs ),
	m_kDBLock( m_kMainThreadData.m_kConnection, connInfo.GenerateLockName(),
			shouldLockDB ),
	m_kNub( nub ),
	m_uiOPCount( 0 ), m_uiOPDurationTotal( 0 ), m_uiResetTimeStamp( Timestamp() )
{
	int numThreads = m_kThreadPool.GetNumFreeThreads();
	FV_ASSERT( (numThreads == 0) || ((numThreads > 0) && mysql_thread_safe()) );

	struct InitMySqlTask : public FvWorkerThread::ITask
	{
		virtual void Run()	{	mysql_thread_init();	}
		virtual void OnRunComplete() {}
	} initMySqlTask;
	while ( m_kThreadPool.DoTask( initMySqlTask ) ) {}
	m_kThreadPool.WaitForAllTasks();

	m_kThreadDataPool.container.reserve( numThreads );
	for ( int i = 0; i < numThreads; ++i )
	{
		m_kThreadDataPool.container.push_back(
			new MySqlThreadData( connInfo, maxSpaceDataSize, entityDefs ) );
	}

	m_kFreeThreadData = m_kThreadDataPool.container;

	m_kKeepAliveTimerID = m_kNub.RegisterTimer( 1800000000, this );
}
Beispiel #15
0
int main(int argc, const char *argv[])
{
	MYSQL *dbc=NULL;
	long i=0,err=0;

	srand48((unsigned long)1);
	time_t timestart=0,timenow=0;

	unsigned int counter=0;
	counter=0;
	char shortquery[1024]={0};
	char *longquery=NULL;
	longquery=NULL;
	char *c=NULL;
	/* my_init(); */
	if (!(dbc = mysql_init(NULL)))
	{
		printf("mysql_init\n");
		dbc=NULL;
		goto threadexit;
	}
	else
	{
		if (!mysql_real_connect(dbc,host,username,password,database,port, NULL, CLIENT_FOUND_ROWS|CLIENT_MULTI_STATEMENTS|CLIENT_MULTI_RESULTS))
		{
			printf("mysql_real_connect failed: %s (%d)", mysql_error(dbc),mysql_errno(dbc));
			dbc=NULL;
			goto threadexit;
		}
	}

	printf("running initializations..\n");
	client_version=mysql_get_client_version();
	server_version=mysql_get_server_version(dbc);
	printf("client version=%lu\n",client_version);
	printf("server version=%lu\n",server_version);
	if((client_version/10000) < (server_version/10000))
	{
		printf("incompatible client and server version!  please upgrade client library!\n");
		goto threadexit;
	}

	if (!mysql_thread_safe())
	{
		printf("non-threadsafe client detected!  please rebuild and link with libmysql_r!\n");
	}

	c=shortquery;
	c+=sprintf(c,"%s","drop table if exists t1");
	db_query(dbc,shortquery,1);

	c=shortquery;
	c+=sprintf(c,"%s","create table t1(id int)");
	db_query(dbc,shortquery,1);

	mysql_close(dbc);

	printf("about to spawn %d threads\n",NUMTHREADS);
	for (i=0;i<NUMTHREADS;i++)
	{
		err=pthread_create(&pthreads[i], NULL, worker_thread, (void *)i);
		if(err!=0)
		{
			printf("error spawning thread %lu, pthread_create returned %lu\n",(unsigned long)i,(unsigned long)err);
		}
		printf(".");
	}
	printf("\n");
	printf("completed spawning new database worker threads\n");

	printf("testcase is now running, so watch for server crash\n");

	timestart=time(NULL);
	timenow=time(NULL);
	for(i=0;(timenow-timestart) < TESTTIME;timenow=time(NULL))
	{
		usleep(1000*1000);
		printf("queries: %09lu\n",num_queries);
	}
	threaddone=1;

	printf("waiting for worker threads to finish...\n");

	for (i=0;i<NUMTHREADS;i++)
	{
		pthread_join(pthreads[i], NULL);
	}

	exit(0);
threadexit:
	exit(-1);
}
Beispiel #16
0
bool libraryThreadSafe()
{
    return mysql_thread_safe() == 1;
}
bool
BackupRestore::init()
{

  if (!m_restore && !m_restore_meta)
    return true;

  m_ndb = new Ndb();

  if (m_ndb == NULL)
    return false;
  
  // Turn off table name completion
  m_ndb->useFullyQualifiedNames(false);

  m_ndb->init(1024);
  if (m_ndb->waitUntilReady(30) != 0)
  {
    ndbout << "Failed to connect to ndb!!" << endl;
    return false;
  }
  ndbout << "Connected to ndb!!" << endl;

#if USE_MYSQL
  if(use_mysql) 
  {
    if ( mysql_thread_safe() == 0 ) 
    {
      ndbout << "Not thread safe mysql library..." << endl;
      exit(-1);
    }
    
    ndbout << "Connecting to MySQL..." <<endl;
    
    /**
     * nwe param:
     *  port
     *  host
     *  user
     */
    bool returnValue = true;
    mysql_init(&mysql);
    {
      int portNo = 3306;
      if ( mysql_real_connect(&mysql,
			      ga_host,
			      ga_user,
			      ga_password,
			      ga_database,
			      ga_port,
::			      ga_socket,
			      0) == NULL ) 
      {
	ndbout_c("Connect failed: %s", mysql_error(&mysql));
	returnValue = false;
      }
      mysql.reconnect= 1;
      ndbout << "Connected to MySQL!!!" <<endl;
    }

    /*  if(returnValue){
	mysql_set_server_option(&mysql, MYSQL_OPTION_MULTI_STATEMENTS_ON);
	}
    */
    return returnValue;
  }
#endif

  if (m_callback) {
    delete [] m_callback;
    m_callback = 0;
  }

  m_callback = new restore_callback_t[m_parallelism];

  if (m_callback == 0)
  {
    ndbout << "Failed to allocate callback structs" << endl;
    return false;
  }

  m_free_callback = m_callback;
  for (int i= 0; i < m_parallelism; i++) {
    m_callback[i].restore = this;
    m_callback[i].connection = 0;
    m_callback[i].retries = 0;
    if (i > 0)
      m_callback[i-1].next = &(m_callback[i]);
  }
  m_callback[m_parallelism-1].next = 0;

  return true;
  
}
Beispiel #18
0
int processDB(char *db_file,char *user,char *passwd,char *database)
{
    MYSQL *pMySQL = NULL;
    sqlite3 *pSqlite = NULL;

    tableName tableNameArray[60];

    threadFunctionParameter tfp;

    int num_table = 0;

    int i = 0;

    int ret = 0;

    memset(tableNameArray,0,sizeof(tableNameArray));
    memset(&tfp,0,sizeof(threadFunctionParameter));

    if(strlen(db_file) <= 0 || strlen(user) <= 0 || 
        strlen(passwd) <= 0 || strlen(database) <= 0) {
        printf("function processDB parameter error.\n");
        ret = -1;
        goto END;
    }

    printf("version = %s\n", sqlite3_libversion());
    printf("sqlite3_threadsafe = %d \n", sqlite3_threadsafe());
    printf("mysql_thread_safe() = %d\n",mysql_thread_safe());

    pMySQL = mysql_init(NULL);
    if (pMySQL == NULL) {
        printf("call mysql_init error.error = %s\n",mysql_error(pMySQL));
        ret = -1;
        goto END;
    }

    if (!mysql_real_connect(pMySQL,"localhost",user,passwd,database,0,NULL,0)) {
        printf("call mysql_real_connect error.error = %s\n",mysql_error(pMySQL));
        ret = -2;
        goto END;
    }
    mysql_set_character_set(pMySQL, "utf8");

    ret = sqlite3_open(db_file, &pSqlite);
    if(ret != SQLITE_OK) {
        printf("call sqlite3_open error.error = %s\n",sqlite3_errmsg(pSqlite));
        ret = -3;
        goto END;
    }

    ret = getListTables(pMySQL,tableNameArray);
    if(ret < 0) {
        printf("call getListTables error.\n");
        ret = -4;
        goto END;
    }

    num_table = ret;
    tfp.first = pMySQL;
    tfp.second = pSqlite;
    for(i = 0; i < num_table; i++) {
        memcpy(&tfp.table,&(tableNameArray[i]),sizeof(tableName));
        ret = processOneTable(&tfp);
        if(ret < 0) {
            printf("call getListTables error.\n");
            ret = -4;
            goto END;
        }
    }

END:
    if(pSqlite != NULL) {
        sqlite3_close(pSqlite);
        pSqlite = NULL;
    }
    if(pMySQL != NULL) {
        mysql_close(pMySQL);
        pMySQL = NULL;
    }
    return ret;
}
Beispiel #19
0
int main(int argc, char *argv[]) {

	struct IdDocIDmapFormat *IdDocIDmap;


	time_t now = time(NULL);

	char query[512];
	char url[201];
	//selecter fra db
	char mysql_query [2048];
        static MYSQL demo_db;
	int i, pages;	
	unsigned int DocID;
	int total;

        MYSQL_RES *mysqlres; /* To be used to fetch information into */
        MYSQL_ROW mysqlrow;

      	if (argc < 3) {
//                printf("Dette programet slår opp ekte DocID for pi. \n\n\tUsage: ./PiToWWWDocID UrlToDocID_folder sql_table");
                printf("Dette programet slår opp ekte DocID for pi. \n\n\tUsage: ./PiToWWWDocID UrlToDocID_db sql_table\n");
		printf("\nMerk: Navn på index-fil er det samme som UrlToDocID_db + '.index'\n");
               exit(0);
        }

        char *UrlToDocIDdb = argv[1];
        char *table = argv[2];


 	#ifdef WITH_THREAD
                my_init();
                if (mysql_thread_safe() == 0) {
                        printf("The MYSQL client is'en compiled at thread safe! This will broboble crash.\n");
                }
        #endif


	mysql_init(&demo_db);

        if(!mysql_real_connect(&demo_db, "web1.jayde.boitho.com", "boitho", "G7J7v5L5Y7", "boithoweb", 3306, NULL, 0)){
                printf(mysql_error(&demo_db));
                exit(1);
        }


	char		db_index[strlen(UrlToDocIDdb)+7];
	sprintf(db_index, "%s.index", UrlToDocIDdb);
	urldocid_data	*data = urldocid_search_init(db_index, UrlToDocIDdb);


	sprintf(mysql_query, "select id,url from %s WHERE WWWDocID is NULL OR WWWDocID='0' limit 10",table);

	total = 0;
	while (1) {

        	if(mysql_real_query(&demo_db, mysql_query, strlen(mysql_query))){ /* Make query */
        	        printf(mysql_error(&demo_db));
        	        //return(1);
        	        pthread_exit((void *)1); /* exit with status */
        	}

        	mysqlres=mysql_store_result(&demo_db); /* Download result from server */
		_configdatanr = (int)mysql_num_rows(mysqlres);

		if (_configdatanr == 0) {
			break;
		}

		#ifdef DEBUG
		printf("nrofrows %i\n",_configdatanr);
		#endif

		if ((IdDocIDmap = malloc(sizeof(struct IdDocIDmapFormat) * _configdatanr)) == NULL) {
			perror("malloc IdDocIDmap");
			exit(1);
		}	
		pages=0;



        	while ((mysqlrow=mysql_fetch_row(mysqlres)) != NULL) { /* Get a row from the results */

			strscpy(url,mysqlrow[1],sizeof(url));
			url_normalization(url,sizeof(url));

			#ifdef DEBUG
			printf("url \"%s\"\n",url);
			#endif

               		if (!getDocIDFromUrl(data, url, &DocID)) {
                	        printf("Unable to find docId.\n\tMain \"%s\"\n\tIndex \"%s\"\n",UrlToDocIDdb, db_index);              
				

				//DocID = 0;
				DocID = PIStartDOCID + atou(mysqlrow[0]);


	                } else {
	                        //look up rank for docid
	                }

			IdDocIDmap[pages].id = atou(mysqlrow[0]);
			IdDocIDmap[pages].DocID = DocID;
 	
			#ifdef DEBUG
        	        printf("\tid %s, WWWDocID %u,url \"%s\"\n",mysqlrow[0],DocID,url);
			#endif

			if ((total % 1000) == 0) {
				printf("total %i\n",total);
			}

			++pages;
			++total;
		}


		for (i=0;i<pages;i++) {
			#ifdef DEBUG
			printf("id %u => DocID %u\n",IdDocIDmap[i].id,IdDocIDmap[i].DocID);
			#endif
			snprintf(query,sizeof(query),"update LOW_PRIORITY %s set WWWDocID=%u where id=%u",table,IdDocIDmap[i].DocID,IdDocIDmap[i].id);

			#ifdef DEBUG
			printf("query \"%s\"\n",query);
			#endif
			mysql_real_query(&demo_db, query, strlen(query));
		}	

		free(IdDocIDmap);

		mysql_free_result(mysqlres);

	}

	mysql_close(&demo_db);
	urldocid_search_exit(data);

	printf("did lookup %i\n",total);
}
Beispiel #20
0
bool MyDriver::IsThreadSafe()
{
	return (mysql_thread_safe() != 0);
}
Beispiel #21
0
static PyObject* wsql_thread_safe(PyObject *self)
{

    CHECK_SERVER(NULL);
    return PyLong_FromLong((long)mysql_thread_safe());
}
Beispiel #22
0
int main (int argc, char *argv[]) {

	int     sockfd, newsockfd;
	socklen_t clilen;
	struct sockaddr_in cli_addr, serv_addr;

	printf("struct SiderFormat %i\n",sizeof(struct SiderFormat));
	
	#ifdef WITH_THREAD
	pthread_t chld_thr;
	#endif

	int searchport = TCP_PORT;

        extern char *optarg;
        extern int optind, opterr, optopt;
        char c;
        while ((c=getopt(argc,argv,"p:"))!=-1) {
                switch (c) {
                        case 'p':
                                searchport = atoi(optarg);
                                printf("will use port %i\n",searchport);
                                break;
                        default:
                                exit(1);
                }

        }
        --optind;


	#ifdef WITH_THREAD
		printf("starting whth thread\n");
		my_init();
		if (mysql_thread_safe() == 0) {
			printf("The MYSQL client is'en compiled at thread safe! This will broboble crash.\n");
		}
	#else
		printf("starting single thread version\n");
	#endif


	//setter opp socket
        if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
                fprintf(stderr,"server: can't open stream socket\n"), exit(0);




        memset((char *) &serv_addr, 0, sizeof(serv_addr));
        serv_addr.sin_family = AF_INET;
        serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
        serv_addr.sin_port = htons(searchport);



        //seter at sokket kan rebrukes
        int yes=1;
        if (setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) {
            perror("setsockopt");
            exit(1);
        }

        if(bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
                fprintf(stderr,"server: can't bind local address\n"), exit(0);

        /* set the level of thread concurrency we desire */
        //thr_setconcurrency(5);

        listen(sockfd, 5);

        for(;;)
        {
                clilen = sizeof(cli_addr);
                newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);

                if(newsockfd < 0) {
                        //fprintf(stderr,"server: accept error\n"), exit(0);
                        fprintf(stderr,"server: accept error\n");
                }
                else {

                        #ifdef WITH_THREAD
                        /* create a new thread to process the incomming request */
                                //thr_create(NULL, 0, do_chld, (void *) newsockfd, THR_DETACHED, &chld_thr);
				printf("creating thread\n");
                                pthread_create(&chld_thr, NULL, issueAdd, (void *) newsockfd);
                                /* the server is now free to accept another socket request */
                        #else
                                //do_chld((void *) newsockfd);
				issueAdd((void *) newsockfd);

                        #endif
                }

        }


	return(0);


}