Slight changes to error handling during RtcomEventLogger insertions to better handle...
[qwerkisync] / DBBackends / RtcomEventLogger.cpp
index aac4790..20daa23 100644 (file)
@@ -54,7 +54,7 @@ QDebug operator<<(QDebug, GList &);
 QDebug operator<<(QDebug, QList<RTComElAttachment*> &);
 
 RtcomEventLogger::RtcomEventLogger(const Settings &settings) :
-       m_Settings(settings), mk_DBPath("/.rtcom-eventlogger/el-v1.db")
+       m_Settings(settings)
 {
        RTComEl *el(rtcom_el_new());
        if(NULL != el)
@@ -77,7 +77,7 @@ RtcomEventLogger::RtcomEventLogger(const Settings &settings) :
 }
 
 RtcomEventLogger::RtcomEventLogger(const Settings &settings, const EventTypes::RtcomEvent &event) :
-       m_Settings(settings), mk_DBPath("/.rtcom-eventlogger/el-v1.db")
+       m_Settings(settings)
 {
 }
 
@@ -276,13 +276,13 @@ void RtcomEventLogger::Insert(EventTypes::iEvent &event, const NumberToNameLooku
                        // Add the event
                        QDateTime startTime(QDateTime::currentDateTimeUtc());
                        int newEventID(-1);
+                       int currentBackoffInMillisecs(5);
                        while(((newEventID = rtcom_el_add_event_full(el, revent, rheaders, rattachments, &error)) == -1)
-                                 && startTime.msecsTo(QDateTime::currentDateTimeUtc()) < 1000)
+                                 && startTime.msecsTo(QDateTime::currentDateTimeUtc()) < 10000)
                        {
                                if(error != NULL)
                                {
                                        qDebug() << "err: " << error->message;
-                                       qDebug() << *revent << "\n";
                                        g_error_free(error);
                                        error = NULL;
                                }
@@ -292,18 +292,24 @@ void RtcomEventLogger::Insert(EventTypes::iEvent &event, const NumberToNameLooku
                                mutex.lock();
 
                                QWaitCondition waitCondition;
-                               waitCondition.wait(&mutex, 5);
+                               waitCondition.wait(&mutex, currentBackoffInMillisecs);
 
                                mutex.unlock();
+
+                               // Exponential backoff...
+                               currentBackoffInMillisecs *= 2;
                        }
 
                        if(-1 == newEventID)
                        {
+                               qDebug() << "Unable to insert event due to error.";
+                               qDebug() << *revent << "\n";
+                       }
+                       else
+                       {
                                qDebug() << "new id: " << newEventID;
                                InsertedIDs().append(newEventID);
                        }
-                       else
-                               qDebug() << "Unable to insert event due to error.";
 
                        // Release the attachments
                        g_list_foreach (rattachments, (GFunc) rtcom_el_free_attachment, NULL);
@@ -340,10 +346,10 @@ void RtcomEventLogger::ClearInsertedIDs()
 void RtcomEventLogger::Reindex()
 {
        // Set up the database connection...
-       QSqlDatabase db(QSqlDatabase::addDatabase( "QSQLITE" ));
+       QSqlDatabase db(QSqlDatabase::addDatabase("QSQLITE"));
 
-       db.setDatabaseName( QDir::homePath() + mk_DBPath );
-       if ( ! db.open() )
+       db.setDatabaseName(CurrentSettings().DBPath());
+       if(!db.open())
        {
                throw std::runtime_error("Cannot open database: Unable to establish database connection");
        }