|
MySQL.RU - Webboard
Вернуться
Отваливается сервер (mysql++) (Якорь) 13/04/2009 - 09:35:21
Re: Отваливается сервер (mysql++) (Якорь) 13/04/2009 - 18:16:42
> Original message text:
> From: Якорь - 13/04/2009 - 09:35:21
> Subject:Отваливается сервер (mysql++)
> -----------------
> Помогите, кто чем может... :)
> Вот такая ситуация, работает сервер, когда к серверу обращается клиент, я проверяю нижеследующим образом зарегестрирован ли он в базе. Все работает замечательно 24х7 но наступают выходные и к серверу никто не обращается. В понедельник эта ф-я начинает сообщать, что "unknown client id", то есть мол к серверу зацепился, а записей 0. Перезапуск моего кода - лечит ситуацию. Проверено не раз. Такое впечатление, что connection впал в прострацию - говорит, что соединен, и возвращает пустые ответы. Никто в похожие ситуации не попадал - куда смотреть?
>
> #include <mysql++.h>
> #include <boost/date_time/posix_time/posix_time.hpp>
> #include "server_config.hpp"
> #include "sql.hpp"
> sql* sql::instance() {
> static sql* retval;
> lock lk(sql_mutex);
> if(!retval) retval = new sql;
> return retval;
> }
> bool sql::check_if_enabled(long long int id) {
> lock lk(sql_mutex);
> bool result = false;
> try {
> if(!conn_.connected()) connect();
> mysqlpp::Query query = conn_.query();
> query << "select enabled from customer where id = " << id;
> mysqlpp::StoreQueryResult ares = query.store();
> if(ares.num_rows() > 1) {
> std::cerr << "strange client id - more than 1: " << id << std::endl;
> result = false;
> }
> if(ares.num_rows() == 0) {
> std::cerr << "unknown client id" << id << std::endl;
> result = false;
> }
> if(ares.num_rows() == 1) {
> result = boost::lexical_cast<bool>(ares[0]["enabled"]);
> }
> }
> catch(const mysqlpp::Exception& er) {
> std::cerr << "error: " << er.what() << std::endl;
> result = true;
> }
> catch(std::exception& e) {
> result = true;
> std::cerr << "error: " << e.what() << std::endl;
> }
> return result;
> }
> sql::sql():
> conn_(false) {
> connect();
> }
> boost::mutex sql::sql_mutex;
> void sql::connect() {
> if(!conn_.connect(configuration::instance()->database().c_str(),
> "127.0.0.1",
> configuration::instance()->user_name().c_str(),
> configuration::instance()->password().c_str())) {
> std::cerr << "Failed to connect to mysql server\n";
> }
> }
>
>
From: Якорь - 13/04/2009 - 18:16:42
Subject:Отваливается сервер (mysql++)
-----------------
Всем привет - наполовину разобрался сам. Просто уходит по тайм-ауту. Беда в том что, connected() не сбрасывается. Теперь вопрос как правильно реализовать reinit после тайм-аута.
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
35370
|
|