fixed: the way AppDb works (pg_conn and Connect method)

git-svn-id: svn://ttmath.org/publicrep/cmslu/trunk@482 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
Tomasz Sowa 2009-01-27 18:43:44 +00:00
parent 406cb4a619
commit a48766871d
4 changed files with 37 additions and 36 deletions

View File

@ -49,20 +49,24 @@ void Db::Connect()
pg_conn = PQconnectdb(buf.str().c_str()); pg_conn = PQconnectdb(buf.str().c_str());
if( !pg_conn ) if( pg_conn )
{ log << log3 << "Db: Socket: " << PQsocket(pg_conn) << logend;
log << log1 << "Db: Fatal error during connecting" << logend;
return; // warning! pg_conn can be not null but there cannnot be a connection established
// use PQstatus(pg_conn) to check whether the connection works fine
} }
void Db::SetDbParameters()
{
if( PQsetClientEncoding(pg_conn, "LATIN2") == -1 ) if( PQsetClientEncoding(pg_conn, "LATIN2") == -1 )
log << log1 << "Db: Can't set the proper client encoding" << logend; log << log1 << "Db: Can't set the proper client encoding" << logend;
log << log3 << "Db: Socket: " << PQsocket(pg_conn) << logend;
} }
void Db::Close() void Db::Close()
{ {
if( pg_conn ) if( pg_conn )
@ -75,38 +79,34 @@ void Db::Close()
void Db::AssertConnection() void Db::AssertConnection()
{ {
bool was_connection = true;
if( !pg_conn ) if( !pg_conn )
{ {
log << log1 << "Db: Trying to connect into the database..."; was_connection = false;
Connect(); Connect();
}
if( !pg_conn ) else
// logend from Connect() if( PQstatus(pg_conn) != CONNECTION_OK )
throw Error(Error::db_fatal_error_during_connecting); {
log << log2 << "Db: connection to the database is lost, trying to recover" << logend;
log << log1 << "ok" << logend; was_connection = false;
PQreset(pg_conn);
} }
if( PQstatus(pg_conn) != CONNECTION_OK ) if( pg_conn && PQstatus(pg_conn) == CONNECTION_OK )
{ {
log << log2 << "Db: connection into the database is lost, trying to recover..." << logend; if( was_connection == false )
PQreset(pg_conn); log << log2 << "Db: Connection to the database works fine" << logend;
if( PQstatus(pg_conn) != CONNECTION_OK ) SetDbParameters();
{
log << log2 << "no" << logend;
throw Error(Error::db_fatal_error_during_connecting);
} }
else else
{ {
log << log2 << "ok" << logend; log << log1 << "Db: Connection to db server cannot be established" << logend;
throw Error(Error::db_fatal_error_during_connecting);
if( PQsetClientEncoding(pg_conn, "LATIN2") == -1 )
log << log1 << "Db: Can't set the proper client encoding" << logend;
log << log3 << "Db: Socket: " << PQsocket(pg_conn) << logend;
}
} }
} }

View File

@ -70,14 +70,18 @@ public:
PGconn * GetPGconn(); PGconn * GetPGconn();
virtual void Connect();
protected: protected:
PGconn * pg_conn; PGconn * pg_conn;
std::string db_database, db_user, db_pass; std::string db_database, db_user, db_pass;
bool close_at_end; bool close_at_end;
void Connect(); void SetDbParameters();
void Close(); void Close();
void AssertConnection(); void AssertConnection();
std::string Escape(const std::string & s); std::string Escape(const std::string & s);
std::string Escape(const char * s); std::string Escape(const char * s);

View File

@ -55,9 +55,6 @@ void print_syntax()
int main(int argv, char ** argc) int main(int argv, char ** argc)
{ {
RequestController req_controller; RequestController req_controller;

View File

@ -34,6 +34,7 @@ void RequestController::Close()
bool RequestController::Init() bool RequestController::Init()
{ {
const char * sock = data.fcgi_socket.c_str(); const char * sock = data.fcgi_socket.c_str();
@ -95,7 +96,6 @@ bool RequestController::Init()
dup2(s, 0); dup2(s, 0);
// //
data.dirs.ReadDirs(); data.dirs.ReadDirs();
data.users.ReadUsers(); data.users.ReadUsers();
data.groups.ReadGroups(); data.groups.ReadGroups();