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
// 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
st.Step();\r
}\r
\r
+ // delete threads that have no messages\r
+ m_db->Execute("DELETE FROM tblThread WHERE ThreadID IN (SELECT tblThread.ThreadID FROM tblThread LEFT JOIN tblThreadPost ON tblThread.ThreadID=tblThreadPost.ThreadID WHERE tblThreadPost.ThreadID IS NULL);");\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() end TestDBIntegrity returned "+dbres);\r
}\r
\r
\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
// 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
st.Step();\r
}\r
\r
+ m_db->Execute("COMMIT;");\r
+\r
m_log->debug("PeriodicDBMaintenance::Do6HourMaintenance");\r
}\r
\r
{\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
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
{\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