List:MySQL++« Previous MessageNext Message »
From:Manuel Jung Date:June 6 2007 11:23am
Subject:RE: Stay connected with DB
View as plain text  
Hi,
Seems opt_reconnect helped me. Ill wait some more days and see if it does,
what i want.
If not Ill try another solution mentioned here.
Greetings
Manuel Jung

> Thanks for sharing your Macros; Ill try than tommorow (always have to wait
> a night to test, if it works or not...)
> What about the mysqlpp::Connection::opt_reconnect? What does it acutally
> do? It was mentioned in an earlier thread of this mailing list and im
> trying it this night.
> Greetings
> Manuel Jung
> 
>> Here are the macros I use.  If they word-wrapped too badly, let me know
>> and I'll send as an attachment.
>> 
>> I first started using CHECK_CONNECTION which does a ping.  I think this
>> will help keep alive, but if you are inactive for too long the server
>> may disconnect you, depending on the server settings.
>> 
>> To get around the disconnect issue, the BEGIN_TRY_SQL has a little for
>> loop the tries 2 times in case of failure.  This fixed our problem when
>> the connection was dropped by the server.  I was already using the
>> macros for exception handling, to I only had to make macro changes to
>> apply the loop.
>> 
>> HTH,
>> jmw
>> 
>> // helper macros
>> #define CHECK_CONNECTION \
>> if ( m_conn == 0 || !m_conn->connected() )\
>> {\
>> if( m_conn ) \
>> m_conn->ping(); \
>> if ( m_conn == 0 || !m_conn->connected() )\
>> throw new KEPException( loadStr(
>> IDS_DB_NOT_CONNECTED ).c_str(), m_conn->errnum()  );\
>> }
>> 
>> // added retry logic
>> #define BEGIN_TRY_SQL for ( int sqlTries = 0; sqlTries < 2; sqlTries ++
>> ) try {
>> 
>> #define END_TRY_SQL( functionName )\
>> break; \
>> }\
>> catch (const mysqlpp::BadQuery& er) \
>> {\
>> int sqlErr = m_conn->errnum();\
>> if ( sqlErr != CR_SERVER_LOST ) {\
>> throw new KEPException( loadStrPrintf(
>> IDS_DB_QUERY_ERROR, functionName, er.what() ).c_str(), m_conn->errnum()
>> );\
>> } else {\
>> LOG4CPLUS_INFO( m_logger, "Lost connection in "
>> << functionName << " retrying" ); }\
>> }\
>> catch (const mysqlpp::BadConversion& er) \
>> {\
>> throw new KEPException( loadStrPrintf(
>> IDS_DB_CONVERSION_ERROR, functionName, er.what(), er.retrieved,
>> er.actual_size ).c_str(), m_conn->errnum() );\
>> }\
>> catch (const mysqlpp::Exception& er) \
>> {\
>> throw new KEPException( loadStrPrintf( IDS_DB_ERROR,
>> functionName, er.what() ).c_str(), m_conn->errnum() );\
>> }
>> 
>> -----Original Message-----
>> From: Manuel Jung [mailto:gzahl@stripped]
>> Sent: Tuesday, June 05, 2007 6:53 AM
>> To: plusplus@stripped
>> Subject: Stay connected with DB
>> 
>> Hi,
>> 
>> My application should stay connected with the Mysql Server or
>> reconnected on diconnect. It stays connected for a day or so, but always
>> after a night (where probably not querys where started) the connections
>> are lost.
>> Im trying to use Connection::ping for possibly reconnect, before i start
>> some MySQL Work, but it doesn't help. I also create a new query object
>> after pinging. (Query objects are just alive for a short time in my
>> application).
>> 
>> What is the preferred solution to keep connections alive or reconnect
>> them automaticly?
>> 
>> Kind Regards
>> Manuel Jung
>>

Thread
Stay connected with DBManuel Jung5 Jun
  • RE: Stay connected with DBJim Wallace5 Jun
    • RE: Stay connected with DBgary clark5 Jun
      • Re: Stay connected with DBWarren Young5 Jun
        • Re: Stay connected with DBgary clark5 Jun
  • RE: Stay connected with DBManuel Jung5 Jun
  • Re: Stay connected with DBWarren Young5 Jun
    • RE: Stay connected with DBreid.madsen5 Jun
      • Re: Stay connected with DBWarren Young5 Jun
        • Re: Stay connected with DBWarren Young5 Jun
        • RE: Stay connected with DBreid.madsen5 Jun
  • RE: Stay connected with DBManuel Jung6 Jun