diff --git a/libretroshare/src/gxs/rsgenexchange.cc b/libretroshare/src/gxs/rsgenexchange.cc index d34383ab9..d8db817d7 100644 --- a/libretroshare/src/gxs/rsgenexchange.cc +++ b/libretroshare/src/gxs/rsgenexchange.cc @@ -263,7 +263,19 @@ void RsGenExchange::tick() if( (mNetService && (mNetService->msgAutoSync() || mNetService->grpAutoSync())) && (mLastClean + MSG_CLEANUP_PERIOD < now) ) { - RsGxsCleanUp(mDataStore,this,1).clean(mNextGroupToCheck); // no need to lock here, because all access below (RsGenExchange, RsDataStore) are properly mutexed + GxsMsgReq msgs_to_delete; + std::vector grps_to_delete; + + RsGxsCleanUp(mDataStore,this,1).clean(mNextGroupToCheck,grps_to_delete,msgs_to_delete); // no need to lock here, because all access below (RsGenExchange, RsDataStore) are properly mutexed + + uint32_t token1=0; + deleteMsgs(token1,msgs_to_delete); + + for(auto& grpId: grps_to_delete) + { + uint32_t token2=0; + deleteGroup(token2,grpId); + } RS_STACK_MUTEX(mGenMtx) ; mLastClean = now; diff --git a/libretroshare/src/gxs/rsgxsutil.cc b/libretroshare/src/gxs/rsgxsutil.cc index 4895ea25d..d2d6fbb05 100644 --- a/libretroshare/src/gxs/rsgxsutil.cc +++ b/libretroshare/src/gxs/rsgxsutil.cc @@ -52,13 +52,12 @@ RsGxsCleanUp::RsGxsCleanUp(RsGeneralDataService* const dataService, RsGenExchang { } -bool RsGxsCleanUp::clean(RsGxsGroupId& next_group_to_check) +bool RsGxsCleanUp::clean(RsGxsGroupId& next_group_to_check,std::vector& grps_to_delete,GxsMsgReq& messages_to_delete) { RsGxsGrpMetaTemporaryMap grpMetaMap; mDs->retrieveGxsGrpMetaData(grpMetaMap); rstime_t now = time(NULL); - std::vector grps_to_delete; #ifdef DEBUG_GXSUTIL uint16_t service_type = mGenExchangeClient->serviceType() ; @@ -108,8 +107,6 @@ bool RsGxsCleanUp::clean(RsGxsGroupId& next_group_to_check) #ifdef DEBUG_GXSUTIL GXSUTIL_DEBUG() << " Cleaning up group message for group ID " << grpId << std::endl; #endif - GxsMsgReq messages_to_delete; - uint32_t store_period = mGenExchangeClient->getStoragePeriod(grpId) ; for(; mit != result.end(); ++mit) @@ -151,7 +148,6 @@ bool RsGxsCleanUp::clean(RsGxsGroupId& next_group_to_check) if( remove ) { messages_to_delete[grpId].insert(meta->mMsgId); - #ifdef DEBUG_GXSUTIL std::cerr << " Scheduling for removal." << std::endl; #endif @@ -163,8 +159,6 @@ bool RsGxsCleanUp::clean(RsGxsGroupId& next_group_to_check) //delete meta; } } - - mDs->removeMsgs(messages_to_delete); } ++it; @@ -195,8 +189,6 @@ bool RsGxsCleanUp::clean(RsGxsGroupId& next_group_to_check) } } - mDs->removeGroups(grps_to_delete); - return full_round; } diff --git a/libretroshare/src/gxs/rsgxsutil.h b/libretroshare/src/gxs/rsgxsutil.h index 26f3c10b3..2b79112d1 100644 --- a/libretroshare/src/gxs/rsgxsutil.h +++ b/libretroshare/src/gxs/rsgxsutil.h @@ -143,7 +143,7 @@ public: * Deletion will process by chunk size * @return true if no more messages to delete, false otherwise */ - bool clean(RsGxsGroupId &last_checked_group); + bool clean(RsGxsGroupId& next_group_to_check,std::vector& grps_to_delete,GxsMsgReq& messages_to_delete); private: diff --git a/libretroshare/src/services/p3gxschannels.cc b/libretroshare/src/services/p3gxschannels.cc index 2381bed9e..1556380e2 100644 --- a/libretroshare/src/services/p3gxschannels.cc +++ b/libretroshare/src/services/p3gxschannels.cc @@ -452,7 +452,9 @@ void p3GxsChannels::service_tick() bool p3GxsChannels::service_checkIfGroupIsStillUsed(const RsGxsGrpMetaData& meta) { +#ifdef GXSFORUMS_CHANNELS std::cerr << "p3gxsChannels: Checking unused channel: called by GxsCleaning." << std::endl; +#endif // request all group infos at once @@ -463,14 +465,18 @@ bool p3GxsChannels::service_checkIfGroupIsStillUsed(const RsGxsGrpMetaData& meta auto it = mKnownChannels.find(meta.mGroupId); bool unknown_channel = it == mKnownChannels.end(); +#ifdef GXSFORUMS_CHANNELS std::cerr << " Channel " << meta.mGroupId ; +#endif if(unknown_channel) { // This case should normally not happen. It does because this channel was never registered since it may // arrived before this code was here +#ifdef GXSFORUMS_CHANNELS std::cerr << ". Not known yet. Adding current time as new TS." << std::endl; +#endif mKnownChannels[meta.mGroupId] = now; IndicateConfigChanged(); @@ -481,16 +487,22 @@ bool p3GxsChannels::service_checkIfGroupIsStillUsed(const RsGxsGrpMetaData& meta bool used_by_friends = (now < it->second + CHANNEL_UNUSED_BY_FRIENDS_DELAY); bool subscribed = static_cast(meta.mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_SUBSCRIBED); +#ifdef GXSFORUMS_CHANNELS std::cerr << ". subscribed: " << subscribed << ", used_by_friends: " << used_by_friends << " last TS: " << now - it->second << " secs ago (" << (now-it->second)/86400 << " days)"; +#endif if(!subscribed && !used_by_friends) { +#ifdef GXSFORUMS_CHANNELS std::cerr << ". Scheduling for deletion" << std::endl; +#endif return false; } else { +#ifdef GXSFORUMS_CHANNELS std::cerr << ". Keeping!" << std::endl; +#endif return true; } } diff --git a/libretroshare/src/services/p3gxscircles.cc b/libretroshare/src/services/p3gxscircles.cc index 842998078..437966ee1 100644 --- a/libretroshare/src/services/p3gxscircles.cc +++ b/libretroshare/src/services/p3gxscircles.cc @@ -49,7 +49,7 @@ /*static*/ const std::string RsGxsCircles::CIRCLE_URL_ID_FIELD = "circleId"; /*static*/ const std::string RsGxsCircles::CIRCLE_URL_DATA_FIELD = "circleData"; -static const uint32_t CIRCLES_UNUSED_BY_FRIENDS_DELAY = 7*86400 ; // 7 days ...O... +static const uint32_t CIRCLES_UNUSED_BY_FRIENDS_DELAY = 60*86400 ; // 60 days ...O... RsGxsCircles::~RsGxsCircles() = default; RsGxsCircleMsg::~RsGxsCircleMsg() = default; @@ -1733,7 +1733,9 @@ void p3GxsCircles::addCircleIdToList(const RsGxsCircleId &circleId, uint32_t cir bool p3GxsCircles::service_checkIfGroupIsStillUsed(const RsGxsGrpMetaData& meta) { +#ifdef GXSFORUMS_CHANNELS std::cerr << "p3gxsChannels: Checking unused circles: called by GxsCleaning." << std::endl; +#endif // request all group infos at once @@ -1744,14 +1746,18 @@ bool p3GxsCircles::service_checkIfGroupIsStillUsed(const RsGxsGrpMetaData& meta) auto it = mKnownCircles.find(meta.mGroupId); bool unknown_posted = (it == mKnownCircles.end()); +#ifdef GXSFORUMS_CHANNELS std::cerr << " Circle " << meta.mGroupId ; +#endif if(unknown_posted) { // This case should normally not happen. It does because this board was never registered since it may // arrived before this code was here +#ifdef GXSFORUMS_CHANNELS std::cerr << ". Not known yet. Adding current time as new TS." << std::endl; +#endif mKnownCircles[meta.mGroupId] = now; IndicateConfigChanged(); @@ -1766,12 +1772,16 @@ bool p3GxsCircles::service_checkIfGroupIsStillUsed(const RsGxsGrpMetaData& meta) if(!subscribed && !used_by_friends) { +#ifdef GXSFORUMS_CHANNELS std::cerr << ". Scheduling for deletion" << std::endl; +#endif return false; } else { +#ifdef GXSFORUMS_CHANNELS std::cerr << ". Keeping!" << std::endl; +#endif return true; } } diff --git a/libretroshare/src/services/p3gxsforums.cc b/libretroshare/src/services/p3gxsforums.cc index 7ea188b9d..6a47d65d0 100644 --- a/libretroshare/src/services/p3gxsforums.cc +++ b/libretroshare/src/services/p3gxsforums.cc @@ -48,7 +48,7 @@ RsGxsForums *rsGxsForums = NULL; #define FORUM_TESTEVENT_DUMMYDATA 0x0001 #define DUMMYDATA_PERIOD 60 // long enough for some RsIdentities to be generated. -#define FORUM_UNUSED_BY_FRIENDS_DELAY (2*5*86400) // unused forums are deleted after 2 months +#define FORUM_UNUSED_BY_FRIENDS_DELAY (2*30*86400) // unused forums are deleted after 2 months /********************************************************************************/ /******************* Startup / Tick ******************************************/ @@ -407,7 +407,9 @@ void p3GxsForums::service_tick() bool p3GxsForums::service_checkIfGroupIsStillUsed(const RsGxsGrpMetaData& meta) { +#ifdef GXSFORUMS_DEBUG std::cerr << "p3gxsForums: Checking unused forums: called by GxsCleaning." << std::endl; +#endif // request all group infos at once @@ -418,14 +420,18 @@ bool p3GxsForums::service_checkIfGroupIsStillUsed(const RsGxsGrpMetaData& meta) auto it = mKnownForums.find(meta.mGroupId); bool unknown_forum = it == mKnownForums.end(); +#ifdef GXSFORUMS_DEBUG std::cerr << " Forum " << meta.mGroupId ; +#endif if(unknown_forum) { // This case should normally not happen. It does because this forum was never registered since it may // arrived before this code was here +#ifdef GXSFORUMS_DEBUG std::cerr << ". Not known yet. Adding current time as new TS." << std::endl; +#endif mKnownForums[meta.mGroupId] = now; IndicateConfigChanged(); @@ -436,16 +442,22 @@ bool p3GxsForums::service_checkIfGroupIsStillUsed(const RsGxsGrpMetaData& meta) bool used_by_friends = (now < it->second + FORUM_UNUSED_BY_FRIENDS_DELAY); bool subscribed = static_cast(meta.mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_SUBSCRIBED); +#ifdef GXSFORUMS_DEBUG std::cerr << ". subscribed: " << subscribed << ", used_by_friends: " << used_by_friends << " last TS: " << now - it->second << " secs ago (" << (now-it->second)/86400 << " days)"; +#endif if(!subscribed && !used_by_friends) { +#ifdef GXSFORUMS_DEBUG std::cerr << ". Scheduling for deletion" << std::endl; +#endif return false; } else { +#ifdef GXSFORUMS_DEBUG std::cerr << ". Keeping!" << std::endl; +#endif return true; } } diff --git a/libretroshare/src/services/p3postbase.cc b/libretroshare/src/services/p3postbase.cc index deb5a88d5..6eb4a9b8e 100644 --- a/libretroshare/src/services/p3postbase.cc +++ b/libretroshare/src/services/p3postbase.cc @@ -910,7 +910,9 @@ public: bool p3PostBase::service_checkIfGroupIsStillUsed(const RsGxsGrpMetaData& meta) { +#ifdef GXSFORUMS_CHANNELS std::cerr << "p3gxsChannels: Checking unused board: called by GxsCleaning." << std::endl; +#endif // request all group infos at once @@ -921,14 +923,18 @@ bool p3PostBase::service_checkIfGroupIsStillUsed(const RsGxsGrpMetaData& meta) auto it = mKnownPosted.find(meta.mGroupId); bool unknown_posted = (it == mKnownPosted.end()); +#ifdef GXSFORUMS_CHANNELS std::cerr << " Board " << meta.mGroupId ; +#endif if(unknown_posted) { // This case should normally not happen. It does because this board was never registered since it may // arrived before this code was here +#ifdef GXSFORUMS_CHANNELS std::cerr << ". Not known yet. Adding current time as new TS." << std::endl; +#endif mKnownPosted[meta.mGroupId] = now; IndicateConfigChanged(); @@ -943,12 +949,16 @@ bool p3PostBase::service_checkIfGroupIsStillUsed(const RsGxsGrpMetaData& meta) if(!subscribed && !used_by_friends) { +#ifdef GXSFORUMS_CHANNELS std::cerr << ". Scheduling for deletion" << std::endl; +#endif return false; } else { +#ifdef GXSFORUMS_CHANNELS std::cerr << ". Keeping!" << std::endl; +#endif return true; } }