From 10353bb129c5ea216c5c768413375620142c9695 Mon Sep 17 00:00:00 2001 From: chrisparker126 Date: Fri, 25 Jun 2010 12:49:44 +0000 Subject: [PATCH] cachestrapper checks for physical presence of own cache files if they don't exist they are not saved p3distrib: don't refresh cache if file not written successfully git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@3204 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- libretroshare/src/dbase/cachestrapper.cc | 14 +++++++++++++- libretroshare/src/dbase/cachestrapper.h | 6 ++++++ libretroshare/src/services/p3distrib.cc | 18 ++++++++++++++---- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/libretroshare/src/dbase/cachestrapper.cc b/libretroshare/src/dbase/cachestrapper.cc index 307aa103a..6c95009d8 100644 --- a/libretroshare/src/dbase/cachestrapper.cc +++ b/libretroshare/src/dbase/cachestrapper.cc @@ -699,7 +699,18 @@ bool CacheStrapper::findCache(std::string hash, CacheData &data) const return false; } +bool CacheStrapper::CacheExist(CacheData& data){ + std::string filename = data.path + "/" + data.name; + FILE* file = NULL; + file = fopen(filename.c_str(), "r"); + + if(file == NULL) + return false; + + fclose(file); + return true; +} /***************************************************************************/ /****************************** CONFIGURATION HANDLING *********************/ @@ -746,7 +757,8 @@ std::list CacheStrapper::saveList(bool &cleanup) for(tit = ownTmp.begin(); tit != ownTmp.end(); tit++) { - ownCaches.push_back(tit->second); + if(CacheExist(tit->second)) + ownCaches.push_back(tit->second); } } diff --git a/libretroshare/src/dbase/cachestrapper.h b/libretroshare/src/dbase/cachestrapper.h index e394884af..6432ceb88 100644 --- a/libretroshare/src/dbase/cachestrapper.h +++ b/libretroshare/src/dbase/cachestrapper.h @@ -304,6 +304,12 @@ bool findCache(std::string hash, CacheData &data) const; void listCaches(std::ostream &out); void listPeerStatus(std::ostream &out); +/** + * Checks if the cache physically exist at path given + * @param data + * @return whether it exists or not + */ +bool CacheExist(CacheData& data); /* Config */ protected: diff --git a/libretroshare/src/services/p3distrib.cc b/libretroshare/src/services/p3distrib.cc index 008f54549..b64d0cf13 100644 --- a/libretroshare/src/services/p3distrib.cc +++ b/libretroshare/src/services/p3distrib.cc @@ -804,6 +804,8 @@ void p3GroupDistrib::locked_publishPendingMsgs() CacheData newCache; time_t now = time(NULL); + bool ok = true; // hass msg/cache file been written successfully + newCache.pid = mOwnId; newCache.cid.type = CacheSource::getCacheType(); newCache.cid.subid = locked_determineCacheSubId(); @@ -840,7 +842,10 @@ void p3GroupDistrib::locked_publishPendingMsgs() resave = true; } - store->SendItem(*it); /* deletes it */ + if(store->SendItem(*it)) /* deletes it */ + { + ok &= false; + } } /* Extract File Information from pqistore */ @@ -852,12 +857,13 @@ void p3GroupDistrib::locked_publishPendingMsgs() newCache.recvd = now; /* cleanup */ - mPendingPublish.clear(); + delete store; if(!RsDirUtil::renameFile(filenametmp,filename)) { std::ostringstream errlog; + ok &= false; #ifdef WIN32 errlog << "Error " << GetLastError() ; #else @@ -870,9 +876,13 @@ void p3GroupDistrib::locked_publishPendingMsgs() mLastPublishTime = now; /* push file to CacheSource */ - refreshCache(newCache); - if (resave) + if(ok){ + mPendingPublish.clear(); + refreshCache(newCache); + } + + if (ok && resave) { #ifdef DISTRIB_DEBUG std::cerr << "p3GroupDistrib::locked_publishPendingMsgs() Indicate Save Data Changed";