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
This commit is contained in:
chrisparker126 2010-06-25 12:49:44 +00:00
parent 73bfabd733
commit 10353bb129
3 changed files with 33 additions and 5 deletions

View File

@ -699,7 +699,18 @@ bool CacheStrapper::findCache(std::string hash, CacheData &data) const
return false; 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 *********************/ /****************************** CONFIGURATION HANDLING *********************/
@ -746,6 +757,7 @@ std::list<RsItem *> CacheStrapper::saveList(bool &cleanup)
for(tit = ownTmp.begin(); tit != ownTmp.end(); tit++) for(tit = ownTmp.begin(); tit != ownTmp.end(); tit++)
{ {
if(CacheExist(tit->second))
ownCaches.push_back(tit->second); ownCaches.push_back(tit->second);
} }
} }

View File

@ -304,6 +304,12 @@ bool findCache(std::string hash, CacheData &data) const;
void listCaches(std::ostream &out); void listCaches(std::ostream &out);
void listPeerStatus(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 */ /* Config */
protected: protected:

View File

@ -804,6 +804,8 @@ void p3GroupDistrib::locked_publishPendingMsgs()
CacheData newCache; CacheData newCache;
time_t now = time(NULL); time_t now = time(NULL);
bool ok = true; // hass msg/cache file been written successfully
newCache.pid = mOwnId; newCache.pid = mOwnId;
newCache.cid.type = CacheSource::getCacheType(); newCache.cid.type = CacheSource::getCacheType();
newCache.cid.subid = locked_determineCacheSubId(); newCache.cid.subid = locked_determineCacheSubId();
@ -840,7 +842,10 @@ void p3GroupDistrib::locked_publishPendingMsgs()
resave = true; resave = true;
} }
store->SendItem(*it); /* deletes it */ if(store->SendItem(*it)) /* deletes it */
{
ok &= false;
}
} }
/* Extract File Information from pqistore */ /* Extract File Information from pqistore */
@ -852,12 +857,13 @@ void p3GroupDistrib::locked_publishPendingMsgs()
newCache.recvd = now; newCache.recvd = now;
/* cleanup */ /* cleanup */
mPendingPublish.clear();
delete store; delete store;
if(!RsDirUtil::renameFile(filenametmp,filename)) if(!RsDirUtil::renameFile(filenametmp,filename))
{ {
std::ostringstream errlog; std::ostringstream errlog;
ok &= false;
#ifdef WIN32 #ifdef WIN32
errlog << "Error " << GetLastError() ; errlog << "Error " << GetLastError() ;
#else #else
@ -870,9 +876,13 @@ void p3GroupDistrib::locked_publishPendingMsgs()
mLastPublishTime = now; mLastPublishTime = now;
/* push file to CacheSource */ /* push file to CacheSource */
refreshCache(newCache);
if (resave) if(ok){
mPendingPublish.clear();
refreshCache(newCache);
}
if (ok && resave)
{ {
#ifdef DISTRIB_DEBUG #ifdef DISTRIB_DEBUG
std::cerr << "p3GroupDistrib::locked_publishPendingMsgs() Indicate Save Data Changed"; std::cerr << "p3GroupDistrib::locked_publishPendingMsgs() Indicate Save Data Changed";