mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
moved p3distrib loading to background thread.
* Added Cache Queues to p3distrib. * Created p3ThreadedService class. * added code to launch these threads. * debug code to see loading. Seems to be far too many called to gpg->verifySignature()... to look at. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@3998 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
1f9395058c
commit
71798f4e8a
@ -2843,6 +2843,21 @@ int RsServer::StartupRetroShare()
|
|||||||
mBitDht->start();
|
mBitDht->start();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// startup the p3distrib threads (for cache loading).
|
||||||
|
#ifndef MINIMAL_LIBRS
|
||||||
|
mForums->start();
|
||||||
|
mChannels->start();
|
||||||
|
|
||||||
|
#ifdef RS_USE_BLOGS
|
||||||
|
mBlogs->start();
|
||||||
|
#endif
|
||||||
|
#endif // MINIMAL_LIBRS
|
||||||
|
|
||||||
|
/**************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// create loopback device, and add to pqisslgrp.
|
// create loopback device, and add to pqisslgrp.
|
||||||
|
|
||||||
SearchModule *mod = new SearchModule();
|
SearchModule *mod = new SearchModule();
|
||||||
|
@ -47,9 +47,11 @@
|
|||||||
|
|
||||||
/*****
|
/*****
|
||||||
* #define DISTRIB_DEBUG 1
|
* #define DISTRIB_DEBUG 1
|
||||||
|
* #define DISTRIB_THREAD_DEBUG 1
|
||||||
****/
|
****/
|
||||||
|
|
||||||
//#define DISTRIB_DEBUG 1
|
//#define DISTRIB_DEBUG 1
|
||||||
|
#define DISTRIB_THREAD_DEBUG 1
|
||||||
|
|
||||||
RSA *extractPublicKey(RsTlvSecurityKey &key);
|
RSA *extractPublicKey(RsTlvSecurityKey &key);
|
||||||
RSA *extractPrivateKey(RsTlvSecurityKey &key);
|
RSA *extractPrivateKey(RsTlvSecurityKey &key);
|
||||||
@ -66,7 +68,7 @@ p3GroupDistrib::p3GroupDistrib(uint16_t subtype,
|
|||||||
|
|
||||||
:CacheSource(subtype, true, cs, sourcedir),
|
:CacheSource(subtype, true, cs, sourcedir),
|
||||||
CacheStore(subtype, true, cs, cft, storedir),
|
CacheStore(subtype, true, cs, cft, storedir),
|
||||||
p3Config(configId), p3Service(subtype),
|
p3Config(configId), p3ThreadedService(subtype),
|
||||||
mStorePeriod(storePeriod),
|
mStorePeriod(storePeriod),
|
||||||
mPubPeriod(pubPeriod),
|
mPubPeriod(pubPeriod),
|
||||||
mLastPublishTime(0),
|
mLastPublishTime(0),
|
||||||
@ -160,6 +162,123 @@ int p3GroupDistrib::tick()
|
|||||||
/***************************************************************************************/
|
/***************************************************************************************/
|
||||||
/***************************************************************************************/
|
/***************************************************************************************/
|
||||||
|
|
||||||
|
int p3GroupDistrib::loadCache(const CacheData &data)
|
||||||
|
{
|
||||||
|
#ifdef DISTRIB_DEBUG
|
||||||
|
std::cerr << "p3GroupDistrib::loadCache()";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
{
|
||||||
|
RsStackMutex stack(distribMtx);
|
||||||
|
|
||||||
|
#ifdef DISTRIB_THREAD_DEBUG
|
||||||
|
std::cerr << "p3GroupDistrib::loadCache() Storing PendingRemoteCache";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
/* store the cache file for later processing */
|
||||||
|
mPendingRemoteCache.push_back(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.size > 0)
|
||||||
|
{
|
||||||
|
CacheStore::lockData(); /***** LOCK ****/
|
||||||
|
locked_storeCacheEntry(data);
|
||||||
|
CacheStore::unlockData(); /***** UNLOCK ****/
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool p3GroupDistrib::loadLocalCache(const CacheData &data)
|
||||||
|
{
|
||||||
|
#ifdef DISTRIB_DEBUG
|
||||||
|
std::cerr << "p3GroupDistrib::loadLocalCache()";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
{
|
||||||
|
RsStackMutex stack(distribMtx);
|
||||||
|
|
||||||
|
#ifdef DISTRIB_THREAD_DEBUG
|
||||||
|
std::cerr << "p3GroupDistrib::loadCache() Storing PendingLocalCache";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* store the cache file for later processing */
|
||||||
|
mPendingLocalCache.push_back(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.size > 0)
|
||||||
|
{
|
||||||
|
refreshCache(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* From RsThread */
|
||||||
|
void p3GroupDistrib::run() /* called once the thread is started */
|
||||||
|
{
|
||||||
|
|
||||||
|
#ifdef DISTRIB_THREAD_DEBUG
|
||||||
|
std::cerr << "p3GroupDistrib::run()";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
/* */
|
||||||
|
CacheData cache;
|
||||||
|
bool validCache = false;
|
||||||
|
bool isLocal = false;
|
||||||
|
{
|
||||||
|
RsStackMutex stack(distribMtx);
|
||||||
|
|
||||||
|
if (mPendingLocalCache.size() > 0)
|
||||||
|
{
|
||||||
|
cache = mPendingLocalCache.front();
|
||||||
|
mPendingLocalCache.pop_front();
|
||||||
|
validCache = true;
|
||||||
|
isLocal = true;
|
||||||
|
|
||||||
|
#ifdef DISTRIB_THREAD_DEBUG
|
||||||
|
std::cerr << "p3GroupDistrib::run() found pendingLocalCache";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (mPendingRemoteCache.size() > 0)
|
||||||
|
{
|
||||||
|
cache = mPendingRemoteCache.front();
|
||||||
|
mPendingRemoteCache.pop_front();
|
||||||
|
validCache = true;
|
||||||
|
isLocal = false;
|
||||||
|
|
||||||
|
#ifdef DISTRIB_THREAD_DEBUG
|
||||||
|
std::cerr << "p3GroupDistrib::run() found pendingRemoteCache";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (validCache)
|
||||||
|
{
|
||||||
|
loadAnyCache(cache, isLocal);
|
||||||
|
usleep(1000);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int p3GroupDistrib::loadAnyCache(const CacheData &data, bool local)
|
int p3GroupDistrib::loadAnyCache(const CacheData &data, bool local)
|
||||||
{
|
{
|
||||||
/* if subtype = 1 -> FileGroup, else -> FileMsgs */
|
/* if subtype = 1 -> FileGroup, else -> FileMsgs */
|
||||||
@ -185,43 +304,6 @@ int p3GroupDistrib::loadAnyCache(const CacheData &data, bool local)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int p3GroupDistrib::loadCache(const CacheData &data)
|
|
||||||
{
|
|
||||||
#ifdef DISTRIB_DEBUG
|
|
||||||
std::cerr << "p3GroupDistrib::loadCache()";
|
|
||||||
std::cerr << std::endl;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
loadAnyCache(data, false);
|
|
||||||
|
|
||||||
if (data.size > 0)
|
|
||||||
{
|
|
||||||
CacheStore::lockData(); /***** LOCK ****/
|
|
||||||
locked_storeCacheEntry(data);
|
|
||||||
CacheStore::unlockData(); /***** UNLOCK ****/
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool p3GroupDistrib::loadLocalCache(const CacheData &data)
|
|
||||||
{
|
|
||||||
#ifdef DISTRIB_DEBUG
|
|
||||||
std::cerr << "p3GroupDistrib::loadLocalCache()";
|
|
||||||
std::cerr << std::endl;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
loadAnyCache(data, true);
|
|
||||||
|
|
||||||
if (data.size > 0)
|
|
||||||
{
|
|
||||||
refreshCache(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************************/
|
/***************************************************************************************/
|
||||||
/***************************************************************************************/
|
/***************************************************************************************/
|
||||||
/********************** load Cache Files ***************************************/
|
/********************** load Cache Files ***************************************/
|
||||||
|
@ -247,7 +247,7 @@ const uint32_t GRP_UNSUBSCRIBED = 0x0006;
|
|||||||
* Group id is the public admin keys id
|
* Group id is the public admin keys id
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
class p3GroupDistrib: public CacheSource, public CacheStore, public p3Config, public p3Service
|
class p3GroupDistrib: public CacheSource, public CacheStore, public p3Config, public p3ThreadedService
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -268,8 +268,16 @@ class p3GroupDistrib: public CacheSource, public CacheStore, public p3Config, pu
|
|||||||
virtual bool loadLocalCache(const CacheData &data); /// overloaded from Cache Source
|
virtual bool loadLocalCache(const CacheData &data); /// overloaded from Cache Source
|
||||||
virtual int loadCache(const CacheData &data); /// overloaded from Cache Store
|
virtual int loadCache(const CacheData &data); /// overloaded from Cache Store
|
||||||
|
|
||||||
|
|
||||||
|
/* From RsThread */
|
||||||
|
virtual void run(); /* called once the thread is started */
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
/* these lists are filled by the overloaded fns... then cleared by the thread */
|
||||||
|
std::list<CacheData> mPendingLocalCache;
|
||||||
|
std::list<CacheData> mPendingRemoteCache;
|
||||||
|
|
||||||
/* top level load */
|
/* top level load */
|
||||||
int loadAnyCache(const CacheData &data, bool local);
|
int loadAnyCache(const CacheData &data, bool local);
|
||||||
|
|
||||||
|
@ -125,14 +125,12 @@ virtual RsRawItem * send()
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
|
|
||||||
class p3ThreadedService: public p3Service, public RsThread
|
class p3ThreadedService: public p3Service, public RsThread
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
p3ThreadedService(RsSerialiser *rss, uint32_t type)
|
p3ThreadedService(uint16_t type)
|
||||||
:p3Service(rss, type) { return; }
|
:p3Service(type) { return; }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -142,8 +140,6 @@ virtual ~p3ThreadedService() { return; }
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#endif // P3_GENERIC_SERVICE_HEADER
|
#endif // P3_GENERIC_SERVICE_HEADER
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user