Request pull from peers when GXS group is created

This commit is contained in:
Gioacchino Mazzurco 2021-03-13 22:39:59 +01:00
parent a374f1dc6b
commit a7f1e94cea
No known key found for this signature in database
GPG Key ID: A1FBCA3872E87051
3 changed files with 37 additions and 20 deletions

View File

@ -41,6 +41,7 @@
#include "rsserver/p3face.h"
#include "retroshare/rsevents.h"
#include "util/radix64.h"
#include "util/cxx17retrocompat.h"
#define PUB_GRP_MASK 0x000f
#define RESTR_GRP_MASK 0x00f0
@ -2723,7 +2724,8 @@ bool RsGenExchange::checkKeys(const RsTlvSecurityKeySet& keySet)
void RsGenExchange::publishGrps()
{
std::list<RsGxsGroupId> groups_to_subscribe ;
bool atLeastOneGroupCreatedSuccessfully = false;
std::list<RsGxsGroupId> groups_to_subscribe;
{
RS_STACK_MUTEX(mGenMtx) ;
@ -2954,6 +2956,8 @@ void RsGenExchange::publishGrps()
// add to published to allow acknowledgement
toNotify.insert(std::make_pair(token, GrpNote(true,ggps.mIsUpdate,grpId)));
atLeastOneGroupCreatedSuccessfully = true;
}
}
@ -2972,9 +2976,14 @@ void RsGenExchange::publishGrps()
// This is done off-mutex to avoid possible cross deadlocks with the net service.
if(mNetService!=NULL)
for(std::list<RsGxsGroupId>::const_iterator it(groups_to_subscribe.begin());it!=groups_to_subscribe.end();++it)
mNetService->subscribeStatusChanged((*it),true) ;
if(mNetService != nullptr)
{
for(auto& grpId : std::as_const(groups_to_subscribe))
mNetService->subscribeStatusChanged(grpId, true);
if(atLeastOneGroupCreatedSuccessfully)
mNetService->requestPull();
}
}
uint32_t RsGenExchange::generatePublicToken()

View File

@ -250,6 +250,14 @@ public:
void threadTick() override; /// @see RsTickingThread
/// @see RsNetworkExchangeService
void pullFromPeers(std::set<RsPeerId> peers = std::set<RsPeerId>()) override;
/// @see RsNetworkExchangeService
std::error_condition requestPull(
std::set<RsPeerId> peers = std::set<RsPeerId>() ) override;
private:
/*!
@ -462,22 +470,6 @@ private:
void checkDistantSyncState();
/**
* @brief Pull new stuff from peers
* @param peers peers to pull from, if empty all available peers are pulled
*/
void pullFromPeers(std::set<RsPeerId> peers = std::set<RsPeerId>());
/**
* @brief request online peers to pull updates from our node ASAP
* @param peers peers to which request pull from, if empty all available
* peers are requested to pull
* @return success or error details
* TODO: should this be exposed via RsNetworkExchangeService?
*/
std::error_condition requestPull(
std::set<RsPeerId> peers = std::set<RsPeerId>() );
void syncGrpStatistics();
void addGroupItemToList(NxsTransaction*& tr,
const RsGxsGroupId& grpId, uint32_t& transN,

View File

@ -325,4 +325,20 @@ public:
return RsReputationLevel::NEUTRAL;
}
}
/**
* @brief Pull new stuff from peers
* @param peers peers to pull from, if empty all available peers are pulled
*/
virtual void pullFromPeers(
std::set<RsPeerId> peers = std::set<RsPeerId>() ) = 0;
/**
* @brief request online peers to pull updates from our node ASAP
* @param peers peers to which request pull from, if empty all available
* peers are requested to pull
* @return success or error details
*/
virtual std::error_condition requestPull(
std::set<RsPeerId> peers = std::set<RsPeerId>() ) = 0;
};