Skip to content

Commit 9c89c42

Browse files
committed
Try to fix tests and also change by project hints
to CPart pointers.
1 parent 5330be8 commit 9c89c42

File tree

5 files changed

+103
-50
lines changed

5 files changed

+103
-50
lines changed

src/neuralnet/superblock.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -559,9 +559,9 @@ Superblock Superblock::FromConvergence(
559559
//
560560
for (const auto& part_pair : stats.Convergence.ConvergedManifestPartPtrsMap) {
561561
const std::string& project_name = part_pair.first;
562-
const CSerializeData& part_data = part_pair.second->data;
562+
const CSplitBlob::CPart* part_data_ptr = part_pair.second;
563563

564-
projects.SetHint(project_name, part_data);
564+
projects.SetHint(project_name, part_data_ptr);
565565
}
566566

567567
return superblock;
@@ -954,7 +954,7 @@ void Superblock::ProjectIndex::Add(std::string name, const ProjectStats& stats)
954954

955955
void Superblock::ProjectIndex::SetHint(
956956
const std::string& name,
957-
const CSerializeData& part_data)
957+
const CSplitBlob::CPart* part_data_ptr)
958958
{
959959
auto iter = std::lower_bound(
960960
m_projects.begin(),
@@ -966,7 +966,7 @@ void Superblock::ProjectIndex::SetHint(
966966
return;
967967
}
968968

969-
const uint256 part_hash = Hash(part_data.begin(), part_data.end());
969+
const uint256 part_hash = Hash(part_data_ptr->data.begin(), part_data_ptr->data.end());
970970
iter->second.m_convergence_hint = part_hash.GetUint64() >> 32;
971971

972972
m_converged_by_project = true;

src/neuralnet/superblock.h

+1-11
Original file line numberDiff line numberDiff line change
@@ -1087,7 +1087,7 @@ class Superblock
10871087
//!
10881088
//! \param part_data The convergence part to create the hint from.
10891089
//!
1090-
void SetHint(const std::string& name, const CSerializeData& part_data);
1090+
void SetHint(const std::string& name, const CSplitBlob::CPart *part_data_ptr);
10911091

10921092
//!
10931093
//! \brief Serialize the object to the provided stream.
@@ -1576,16 +1576,6 @@ struct ConvergedScraperStats
15761576
// SB Hash and Convergence stored will be the LATER one.
15771577

15781578
PastConvergences[nReducedContentHash] = std::make_pair(NewFormatSuperblock.GetHash(), Convergence);
1579-
1580-
/*
1581-
if (PastConvergences.find(nReducedContentHash) != PastConvergences.end())
1582-
{
1583-
PastConvergences.erase(nReducedContentHash);
1584-
}
1585-
1586-
PastConvergences.emplace(std::make_pair(nReducedContentHash, Convergence));
1587-
*/
1588-
15891579
}
15901580
}
15911581

src/scraper/fwd.h

-2
Original file line numberDiff line numberDiff line change
@@ -226,8 +226,6 @@ struct ConvergedManifest
226226

227227
std::shared_ptr<CScraperManifest> CScraperConvergedManifest_ptr;
228228

229-
// mConvergedManifestParts ConvergedManifestPartsMap;
230-
231229
mConvergedManifestPart_ptrs ConvergedManifestPartPtrsMap;
232230

233231
// Used when convergence is at the manifest level (normal)

src/scraper/scraper.cpp

+26-21
Original file line numberDiff line numberDiff line change
@@ -5745,9 +5745,9 @@ UniValue testnewsb(const UniValue& params, bool fHelp)
57455745
for (const auto& part_pair : RandomPastConvergedManifest.ConvergedManifestPartPtrsMap)
57465746
{
57475747
const std::string& project_name = part_pair.first;
5748-
const CSerializeData& part_data = part_pair.second->data;
5748+
const CSplitBlob::CPart* part_data_ptr = part_pair.second;
57495749

5750-
projects.SetHint(project_name, part_data); // This also sets m_converged_by_project to true.
5750+
projects.SetHint(project_name, part_data_ptr); // This also sets m_converged_by_project to true.
57515751
}
57525752
}
57535753
else
@@ -5804,14 +5804,8 @@ UniValue scraperreport(const UniValue& params, bool fHelp)
58045804

58055805
uint64_t manifest_map_size = 0;
58065806
uint64_t parts_map_size = 0;
5807-
uint64_t current_convergence_publishing_scrapers = 0;
5808-
uint64_t current_convergence_part_pointer_map_size = 0;
5809-
uint64_t past_convergence_map_size = 0;
5810-
uint64_t total_past_convergences_part_pointer_maps_size = 0;
5811-
uint64_t total_past_convergences_part_unique_pointer_maps_size = 0;
5812-
int64_t part_objects_reduced = 0;
58135807

5814-
std::set<uint256> global_cache_unique_parts;
5808+
std::set<CSplitBlob::CPart*> global_cache_unique_parts;
58155809

58165810
{
58175811
LOCK(CScraperManifest::cs_mapManifest);
@@ -5835,6 +5829,11 @@ UniValue scraperreport(const UniValue& params, bool fHelp)
58355829

58365830
if (ConvergedScraperStatsCache.NewFormatSuperblock.WellFormed())
58375831
{
5832+
uint64_t current_convergence_publishing_scrapers = 0;
5833+
uint64_t current_convergence_part_pointer_map_size = 0;
5834+
uint64_t past_convergence_map_size = 0;
5835+
int64_t part_objects_reduced = 0;
5836+
58385837
current_convergence_publishing_scrapers =
58395838
ConvergedScraperStatsCache.Convergence.vIncludedScrapers.size()
58405839
+ ConvergedScraperStatsCache.Convergence.vExcludedScrapers.size();
@@ -5845,32 +5844,36 @@ UniValue scraperreport(const UniValue& params, bool fHelp)
58455844
past_convergence_map_size =
58465845
ConvergedScraperStatsCache.PastConvergences.size();
58475846

5848-
// This next section will form a set of hashs from the pointers in the global cache
5847+
// This next section will form a set of unique pointers in the global cache
58495848
// and also add the pointers up arithmetically. The difference is the efficiency gain
58505849
// from using pointers rather than copies into the global cache.
58515850
for (const auto& iter : ConvergedScraperStatsCache.Convergence.ConvergedManifestPartPtrsMap)
58525851
{
5853-
global_cache_unique_parts.insert(iter.second->hash);
5852+
global_cache_unique_parts.insert(iter.second);
58545853
}
58555854

5855+
uint64_t total_convergences_part_pointer_maps_size = current_convergence_part_pointer_map_size;
5856+
58565857
for (const auto& iter : ConvergedScraperStatsCache.PastConvergences)
58575858
{
58585859
for (const auto& iter2 : iter.second.second.ConvergedManifestPartPtrsMap)
58595860
{
5860-
global_cache_unique_parts.insert(iter2.second->hash);
5861+
global_cache_unique_parts.insert(iter2.second);
58615862
}
58625863

5863-
total_past_convergences_part_pointer_maps_size +=
5864+
total_convergences_part_pointer_maps_size +=
58645865
iter.second.second.ConvergedManifestPartPtrsMap.size();
58655866
}
58665867

5867-
total_past_convergences_part_unique_pointer_maps_size = global_cache_unique_parts.size();
5868+
uint64_t total_convergences_part_unique_pointer_maps_size = 0;
58685869

5869-
part_objects_reduced = total_past_convergences_part_pointer_maps_size
5870-
- total_past_convergences_part_unique_pointer_maps_size;
5870+
total_convergences_part_unique_pointer_maps_size = global_cache_unique_parts.size();
58715871

5872+
part_objects_reduced = total_convergences_part_pointer_maps_size
5873+
- total_convergences_part_unique_pointer_maps_size;
58725874

5873-
converged_scraper_stats_cache.pushKV("current_convergence_included_scrapers",
5875+
5876+
converged_scraper_stats_cache.pushKV("current_convergence_publishing_scrapers",
58745877
current_convergence_publishing_scrapers);
58755878

58765879
converged_scraper_stats_cache.pushKV("current_convergence_part_pointer_map_size",
@@ -5879,11 +5882,13 @@ UniValue scraperreport(const UniValue& params, bool fHelp)
58795882
converged_scraper_stats_cache.pushKV("past_convergence_map_size",
58805883
past_convergence_map_size);
58815884

5882-
converged_scraper_stats_cache.pushKV("total_past_convergences_part_pointer_maps_size",
5883-
total_past_convergences_part_pointer_maps_size);
5885+
converged_scraper_stats_cache.pushKV("total_convergences_part_pointer_maps_size",
5886+
total_convergences_part_pointer_maps_size);
5887+
5888+
converged_scraper_stats_cache.pushKV("total_convergences_part_unique_pointer_maps_size",
5889+
total_convergences_part_unique_pointer_maps_size);
58845890

5885-
converged_scraper_stats_cache.pushKV("total_past_convergences_part_unique_pointer_maps_size",
5886-
total_past_convergences_part_unique_pointer_maps_size);
5891+
converged_scraper_stats_cache.pushKV("part_objects_reduced", part_objects_reduced);
58875892
}
58885893
}
58895894

src/test/neuralnet/superblock_tests.cpp

+72-12
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "base58.h"
22
#include "compat/endian.h"
33
#include "neuralnet/superblock.h"
4+
#include "scraper_net.h"
45
#include "streams.h"
56

67
#include <array>
@@ -432,22 +433,46 @@ ConvergedScraperStats GetTestConvergence(
432433
// Add a verified beacons project part. Technically, this is the second
433434
// part for a manifest (offset 1). We skipped adding the beacon list part.
434435
//
435-
CDataStream verified_beacons_part(SER_NETWORK, PROTOCOL_VERSION);
436-
verified_beacons_part
436+
CDataStream verified_beacons_part_data(SER_NETWORK, PROTOCOL_VERSION);
437+
verified_beacons_part_data
437438
<< ScraperPendingBeaconMap {
438439
*stats.mVerifiedMap.begin(),
439440
*++stats.mVerifiedMap.begin(),
440441
};
441442

442-
convergence.Convergence.ConvergedManifestPartsMap.emplace(
443-
"VerifiedBeacons",
444-
CSerializeData(verified_beacons_part.begin() , verified_beacons_part.end()));
443+
CSplitBlob::CPart verified_beacons_part(Hash(verified_beacons_part_data.begin(),
444+
verified_beacons_part_data.end()));
445+
446+
verified_beacons_part.data = CSerializeData(verified_beacons_part_data.begin() , verified_beacons_part_data.end());
447+
448+
//auto verified_beacons_part_ptr = std::make_shared<CSplitBlob::CPart>(verified_beacons_part);
449+
450+
convergence.Convergence.ConvergedManifestPartPtrsMap.emplace("VerifiedBeacons",
451+
&verified_beacons_part);
452+
453+
CDataStream project_1_part_data(SER_NETWORK, PROTOCOL_VERSION);
454+
project_1_part_data << "foo";
455+
456+
CSplitBlob::CPart project_1_part(Hash(project_1_part_data.begin(), project_1_part_data.end()));
457+
project_1_part.data = CSerializeData(project_1_part_data.begin(), project_1_part_data.end());
458+
459+
//auto project_1_part_ptr = std::make_shared<CSplitBlob::CPart>(project_1_part);
460+
461+
462+
CDataStream project_2_part_data(SER_NETWORK, PROTOCOL_VERSION);
463+
project_2_part_data << "fi";
464+
465+
CSplitBlob::CPart project_2_part(Hash(project_2_part_data.begin(), project_2_part_data.end()));
466+
project_2_part.data = CSerializeData(project_2_part_data.begin(), project_2_part_data.end());
467+
468+
//auto project_2_part_ptr = std::make_shared<CSplitBlob::CPart>(project_2_part);
469+
445470

446471
// Add some project parts with the same names as the projects in the stats.
447-
// The part data doesn't matter, so we just add empty containers.
472+
// The part data pointers don't matter, so we just add nullptrs.
448473
//
449-
convergence.Convergence.ConvergedManifestPartsMap.emplace("project_1", CSerializeData());
450-
convergence.Convergence.ConvergedManifestPartsMap.emplace("project_2", CSerializeData());
474+
convergence.Convergence.ConvergedManifestPartPtrsMap.emplace("project_1", &project_1_part);
475+
convergence.Convergence.ConvergedManifestPartPtrsMap.emplace("project_2", &project_2_part);
451476

452477
return convergence;
453478
}
@@ -847,7 +872,16 @@ BOOST_AUTO_TEST_CASE(it_checks_whether_it_was_created_from_fallback_convergence)
847872
BOOST_CHECK(superblock.ConvergedByProject() == false);
848873

849874
superblock.m_projects.Add("project_name", NN::Superblock::ProjectStats());
850-
superblock.m_projects.SetHint("project_name", CSerializeData());
875+
876+
CDataStream project_part_stream(SER_NETWORK, PROTOCOL_VERSION);
877+
project_part_stream << "";
878+
879+
CSerializeData project_part_data(project_part_stream.begin(), project_part_stream.end());
880+
881+
CSplitBlob::CPart project_part(Hash(project_part_data.begin(),project_part_data.end()));
882+
project_part.data = project_part_data;
883+
884+
superblock.m_projects.SetHint("project_name", &project_part);
851885

852886
BOOST_CHECK(superblock.ConvergedByProject() == true);
853887
}
@@ -1613,7 +1647,16 @@ BOOST_AUTO_TEST_CASE(it_sets_a_project_part_convergence_hint)
16131647
NN::Superblock::ProjectIndex projects;
16141648

16151649
projects.Add("project_name", NN::Superblock::ProjectStats());
1616-
projects.SetHint("project_name", CSerializeData());
1650+
1651+
CDataStream project_part_stream(SER_NETWORK, PROTOCOL_VERSION);
1652+
project_part_stream << "";
1653+
1654+
CSerializeData project_part_data(project_part_stream.begin(), project_part_stream.end());
1655+
1656+
CSplitBlob::CPart project_part(Hash(project_part_data.begin(),project_part_data.end()));
1657+
project_part.data = project_part_data;
1658+
1659+
projects.SetHint("project_name", &project_part);
16171660

16181661
BOOST_CHECK(projects.m_converged_by_project == true);
16191662

@@ -1804,8 +1847,25 @@ BOOST_AUTO_TEST_CASE(it_serializes_to_a_stream_for_fallback_convergences)
18041847
projects.Add("project_1", NN::Superblock::ProjectStats(1, 2, 3));
18051848
projects.Add("project_2", NN::Superblock::ProjectStats(1, 2, 3));
18061849

1807-
projects.SetHint("project_1", CSerializeData());
1808-
projects.SetHint("project_2", CSerializeData());
1850+
CDataStream project_1_part_stream(SER_NETWORK, PROTOCOL_VERSION);
1851+
project_1_part_stream << "foo";
1852+
1853+
CSerializeData project_1_part_data(project_1_part_stream.begin(), project_1_part_stream.end());
1854+
1855+
CSplitBlob::CPart project_1_part(Hash(project_1_part_data.begin(),project_1_part_data.end()));
1856+
project_1_part.data = project_1_part_data;
1857+
1858+
projects.SetHint("project_1", &project_1_part);
1859+
1860+
CDataStream project_2_part_stream(SER_NETWORK, PROTOCOL_VERSION);
1861+
project_2_part_stream << "fi";
1862+
1863+
CSerializeData project_2_part_data(project_2_part_stream.begin(), project_2_part_stream.end());
1864+
1865+
CSplitBlob::CPart project_2_part(Hash(project_2_part_data.begin(),project_2_part_data.end()));
1866+
project_2_part.data = project_2_part_data;
1867+
1868+
projects.SetHint("project_2", &project_2_part);
18091869

18101870
BOOST_CHECK(GetSerializeSize(projects, SER_NETWORK, 1) == expected.size());
18111871

0 commit comments

Comments
 (0)