We need to truncate file before we write to avoid having old dangling data

This commit is contained in:
Ai Lin Chia
2017-10-12 11:33:52 +02:00
parent 454cf12dc2
commit 5f28d2eddc

@ -47,15 +47,15 @@ struct DocDeleteFileItem {
};
struct DocDeleteDocItem {
DocDeleteDocItem(const std::string &key, std::ofstream &lastPosFile, int64_t lastPos)
DocDeleteDocItem(const std::string &key, const char* lastPosFilename, int64_t lastPos)
: m_key(key)
, m_lastPosFile(lastPosFile)
, m_lastPosFilename(lastPosFilename)
, m_lastPos(lastPos)
, m_xmlDoc(new XmlDoc()) {
}
std::string m_key;
std::ofstream &m_lastPosFile;
const char *m_lastPosFilename;
int64_t m_lastPos;
XmlDoc *m_xmlDoc;
};
@ -210,8 +210,8 @@ static void removePendingDoc(DocDeleteDocItem *docItem) {
}
if (it == s_pendingDocItems.begin()) {
docItem->m_lastPosFile.seekp(0);
docItem->m_lastPosFile << docItem->m_lastPos << "|" << docItem->m_key << std::endl;
std::ofstream lastPosFile(docItem->m_lastPosFilename, std::ofstream::out|std::ofstream::trunc);
lastPosFile << docItem->m_lastPos << "|" << docItem->m_key << std::endl;
}
s_pendingDocItems.erase(it);
@ -225,7 +225,6 @@ void DocDelete::processFile(void *item) {
// start processing file
std::ifstream file(fileItem->m_tmpFilename);
std::ofstream lastPosFile(fileItem->m_lastPosFilename, std::ofstream::out|std::ofstream::trunc);
bool isInterrupted = false;
@ -259,7 +258,7 @@ void DocDelete::processFile(void *item) {
if (foundLastPos) {
logTrace(g_conf.m_logTraceDocDelete, "Processing key='%s'", key.c_str());
DocDeleteDocItem *docItem = new DocDeleteDocItem(key, lastPosFile, currentFilePos);
DocDeleteDocItem *docItem = new DocDeleteDocItem(key, fileItem->m_lastPosFilename, currentFilePos);
if (fileItem->m_isDocDeleteUrl) {
SpiderRequest sreq;