version 0.3.29
[fms.git] / src / dbmaintenancethread.cpp
index ae4dc88..e9f03e0 100644 (file)
@@ -22,32 +22,25 @@ DBMaintenanceThread::DBMaintenanceThread()
        m_last1day=Poco::Timestamp();\r
        m_last1day-=Poco::Timespan(0,23,51,0,0);\r
 \r
-       m_deletemessagesolderthan=180;\r
-       std::string tempval="180";\r
-       Option::Instance()->Get("DeleteMessagesOlderThan",tempval);\r
-       StringFunctions::Convert(tempval,m_deletemessagesolderthan);\r
 \r
-       m_messagedownloadmaxdaysbackward=5;\r
-       tempval="5";\r
-       Option::Instance()->Get("MessageDownloadMaxDaysBackward",tempval);\r
-       StringFunctions::Convert(tempval,m_messagedownloadmaxdaysbackward);\r
 \r
 }\r
 \r
 \r
 void DBMaintenanceThread::Do10MinuteMaintenance()\r
 {\r
-       std::string ll="";\r
-       Option::Instance()->Get("LogLevel",ll);\r
+       Option option(m_db);\r
+       std::string ll("");\r
+       option.Get("LogLevel",ll);\r
 \r
        // TODO - remove after corruption issue fixed\r
        if(ll=="8")\r
        {\r
-               std::string dbres=TestDBIntegrity();\r
+               std::string dbres=TestDBIntegrity(m_db);\r
                m_log->trace("DBMaintenanceThread::Do10MinuteMaintenance() start TestDBIntegrity returned "+dbres);\r
        }\r
 \r
-       ThreadBuilder tb;\r
+       ThreadBuilder tb(m_db);\r
        SQLite3DB::Statement boardst=m_db->Prepare("SELECT BoardID FROM tblBoard WHERE Forum='true';");\r
        // select messages for a board that aren't in a thread\r
        SQLite3DB::Statement selectst=m_db->Prepare("SELECT tblMessage.MessageID FROM tblMessage \\r
@@ -84,7 +77,7 @@ void DBMaintenanceThread::Do10MinuteMaintenance()
        // TODO - remove after corruption issue fixed\r
        if(ll=="8")\r
        {\r
-               std::string dbres=TestDBIntegrity();\r
+               std::string dbres=TestDBIntegrity(m_db);\r
                m_log->trace("DBMaintenanceThread::Do10MinuteMaintenance() middle TestDBIntegrity returned "+dbres);\r
        }\r
 \r
@@ -110,7 +103,7 @@ void DBMaintenanceThread::Do10MinuteMaintenance()
        // TODO - remove after corruption issue fixed\r
        if(ll=="8")\r
        {\r
-               std::string dbres=TestDBIntegrity();\r
+               std::string dbres=TestDBIntegrity(m_db);\r
                m_log->trace("DBMaintenanceThread::Do10MinuteMaintenance() end TestDBIntegrity returned "+dbres);\r
        }\r
 \r
@@ -125,6 +118,8 @@ void DBMaintenanceThread::Do30MinuteMaintenance()
 \r
 void DBMaintenanceThread::Do1HourMaintenance()\r
 {\r
+\r
+       m_db->Execute("BEGIN;");\r
        // recalculate all trust levels - this is CPU instensive\r
        // do 1 identity at a time as doing it with 1 UPDATE statement locks that database for the duration\r
        SQLite3DB::Statement st=m_db->Prepare("SELECT TargetIdentityID,PeerMessageTrust,PeerTrustListTrust FROM vwCalculatedPeerTrust;");\r
@@ -182,12 +177,16 @@ void DBMaintenanceThread::Do1HourMaintenance()
        // insert all identities not in trust list already\r
        m_db->Execute("INSERT INTO tblIdentityTrust(LocalIdentityID,IdentityID) SELECT LocalIdentityID,IdentityID FROM tblLocalIdentity,tblIdentity WHERE LocalIdentityID || '_' || IdentityID NOT IN (SELECT LocalIdentityID || '_' || IdentityID FROM tblIdentityTrust);");\r
 \r
+       m_db->Execute("COMMIT;");\r
+\r
        m_log->debug("PeriodicDBMaintenance::Do1HourMaintenance");\r
 }\r
 \r
 void DBMaintenanceThread::Do6HourMaintenance()\r
 {\r
 \r
+       m_db->Execute("BEGIN;");\r
+\r
        // if we remove a board and the reply boardid is still set to it, we need to replace it with a boardid that does exist\r
        SQLite3DB::Statement st=m_db->Prepare("SELECT MessageID FROM tblMessage WHERE ReplyBoardID NOT IN (SELECT BoardID FROM tblBoard);");\r
        SQLite3DB::Statement st2=m_db->Prepare("SELECT BoardID FROM tblMessageBoard WHERE MessageID=?;");\r
@@ -216,6 +215,8 @@ void DBMaintenanceThread::Do6HourMaintenance()
                st.Step();\r
        }\r
 \r
+       m_db->Execute("COMMIT;");\r
+\r
        m_log->debug("PeriodicDBMaintenance::Do6HourMaintenance");\r
 }\r
 \r
@@ -223,6 +224,8 @@ void DBMaintenanceThread::Do1DayMaintenance()
 {\r
        Poco::DateTime date;\r
 \r
+       m_db->Execute("BEGIN;");\r
+\r
        // delete all puzzles 2 or more days old\r
        date=Poco::Timestamp();\r
        date-=Poco::Timespan(2,0,0,0,0);\r
@@ -352,6 +355,8 @@ void DBMaintenanceThread::Do1DayMaintenance()
        m_db->Execute("DELETE FROM tblIdentityTrust WHERE LocalIdentityID NOT IN (SELECT LocalIdentityID FROM tblLocalIdentity);");\r
        m_db->Execute("DELETE FROM tblIdentityTrust WHERE IdentityID NOT IN (SELECT IdentityID FROM tblIdentity);");\r
 \r
+       m_db->Execute("COMMIT;");\r
+\r
        m_log->debug("PeriodicDBMaintenance::Do1DayMaintenance");\r
 \r
 }\r
@@ -360,6 +365,21 @@ void DBMaintenanceThread::run()
 {\r
        m_log->debug("DBMaintenanceThread::run thread started.");\r
 \r
+       LoadDatabase();\r
+       Option option(m_db);\r
+       std::string tempval("");\r
+\r
+       m_deletemessagesolderthan=180;\r
+       tempval="180";\r
+       option.Get("DeleteMessagesOlderThan",tempval);\r
+       StringFunctions::Convert(tempval,m_deletemessagesolderthan);\r
+\r
+       m_messagedownloadmaxdaysbackward=5;\r
+       tempval="5";\r
+       option.Get("MessageDownloadMaxDaysBackward",tempval);\r
+       StringFunctions::Convert(tempval,m_messagedownloadmaxdaysbackward);\r
+\r
+\r
        Poco::DateTime now;\r
        int i=0;\r
 \r