Skip to content

Commit 80f39c9

Browse files
addrman, refactor: combine two size functions
The functionality of the old size() is covered by the new Size() when no arguments are specified, so this does not change behavior. Co-authored-by: Martin Zumsande <mzumsande@gmail.com>
1 parent 4885d6f commit 80f39c9

File tree

7 files changed

+45
-61
lines changed

7 files changed

+45
-61
lines changed

src/addrdb.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ std::optional<bilingual_str> LoadAddrman(const NetGroupManager& netgroupman, con
191191
const auto path_addr{args.GetDataDirNet() / "peers.dat"};
192192
try {
193193
DeserializeFileDB(path_addr, *addrman, CLIENT_VERSION);
194-
LogPrintf("Loaded %i addresses from peers.dat %dms\n", addrman->size(), Ticks<std::chrono::milliseconds>(SteadyClock::now() - start));
194+
LogPrintf("Loaded %i addresses from peers.dat %dms\n", addrman->Size(), Ticks<std::chrono::milliseconds>(SteadyClock::now() - start));
195195
} catch (const DbNotFoundError&) {
196196
// Addrman can be in an inconsistent state after failure, reset it
197197
addrman = std::make_unique<AddrMan>(netgroupman, /*deterministic=*/false, /*consistency_check_ratio=*/check_addrman);

src/addrman.cpp

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1112,12 +1112,6 @@ int AddrManImpl::CheckAddrman() const
11121112
return 0;
11131113
}
11141114

1115-
size_t AddrManImpl::size() const
1116-
{
1117-
LOCK(cs); // TODO: Cache this in an atomic to avoid this overhead
1118-
return vRandom.size();
1119-
}
1120-
11211115
size_t AddrManImpl::Size(std::optional<Network> net, std::optional<bool> in_new) const
11221116
{
11231117
LOCK(cs);
@@ -1239,11 +1233,6 @@ template void AddrMan::Unserialize(CHashVerifier<CAutoFile>& s);
12391233
template void AddrMan::Unserialize(CDataStream& s);
12401234
template void AddrMan::Unserialize(CHashVerifier<CDataStream>& s);
12411235

1242-
size_t AddrMan::size() const
1243-
{
1244-
return m_impl->size();
1245-
}
1246-
12471236
size_t AddrMan::Size(std::optional<Network> net, std::optional<bool> in_new) const
12481237
{
12491238
return m_impl->Size(net, in_new);

src/addrman.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,17 +99,14 @@ class AddrMan
9999
template <typename Stream>
100100
void Unserialize(Stream& s_);
101101

102-
//! Return the number of (unique) addresses in all tables.
103-
size_t size() const;
104-
105102
/**
106103
* Return size information about addrman.
107104
*
108105
* @param[in] net Select addresses only from specified network (nullopt = all)
109106
* @param[in] in_new Select addresses only from one table (true = new, false = tried, nullopt = both)
110107
* @return Number of unique addresses that match specified options.
111108
*/
112-
size_t Size(std::optional<Network> net, std::optional<bool> in_new) const;
109+
size_t Size(std::optional<Network> net = {}, std::optional<bool> in_new = {}) const;
113110

114111
/**
115112
* Attempt to add one or more addresses to addrman's new table.

src/addrman_impl.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,6 @@ class AddrManImpl
112112
template <typename Stream>
113113
void Unserialize(Stream& s_) EXCLUSIVE_LOCKS_REQUIRED(!cs);
114114

115-
size_t size() const EXCLUSIVE_LOCKS_REQUIRED(!cs);
116-
117115
size_t Size(std::optional<Network> net, std::optional<bool> in_new) const EXCLUSIVE_LOCKS_REQUIRED(!cs);
118116

119117
bool Add(const std::vector<CAddress>& vAddr, const CNetAddr& source, std::chrono::seconds time_penalty)

src/net.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1399,7 +1399,7 @@ void CConnman::ThreadDNSAddressSeed()
13991399
if (gArgs.GetBoolArg("-forcednsseed", DEFAULT_FORCEDNSSEED)) {
14001400
// When -forcednsseed is provided, query all.
14011401
seeds_right_now = seeds.size();
1402-
} else if (addrman.size() == 0) {
1402+
} else if (addrman.Size() == 0) {
14031403
// If we have no known peers, query all.
14041404
// This will occur on the first run, or if peers.dat has been
14051405
// deleted.
@@ -1418,13 +1418,13 @@ void CConnman::ThreadDNSAddressSeed()
14181418
// * If we continue having problems, eventually query all the
14191419
// DNS seeds, and if that fails too, also try the fixed seeds.
14201420
// (done in ThreadOpenConnections)
1421-
const std::chrono::seconds seeds_wait_time = (addrman.size() >= DNSSEEDS_DELAY_PEER_THRESHOLD ? DNSSEEDS_DELAY_MANY_PEERS : DNSSEEDS_DELAY_FEW_PEERS);
1421+
const std::chrono::seconds seeds_wait_time = (addrman.Size() >= DNSSEEDS_DELAY_PEER_THRESHOLD ? DNSSEEDS_DELAY_MANY_PEERS : DNSSEEDS_DELAY_FEW_PEERS);
14221422

14231423
for (const std::string& seed : seeds) {
14241424
if (seeds_right_now == 0) {
14251425
seeds_right_now += DNSSEEDS_TO_QUERY_AT_ONCE;
14261426

1427-
if (addrman.size() > 0) {
1427+
if (addrman.Size() > 0) {
14281428
LogPrintf("Waiting %d seconds before querying DNS seeds.\n", seeds_wait_time.count());
14291429
std::chrono::seconds to_wait = seeds_wait_time;
14301430
while (to_wait.count() > 0) {
@@ -1504,7 +1504,7 @@ void CConnman::DumpAddresses()
15041504
DumpPeerAddresses(::gArgs, addrman);
15051505

15061506
LogPrint(BCLog::NET, "Flushed %d addresses to peers.dat %dms\n",
1507-
addrman.size(), Ticks<std::chrono::milliseconds>(SteadyClock::now() - start));
1507+
addrman.Size(), Ticks<std::chrono::milliseconds>(SteadyClock::now() - start));
15081508
}
15091509

15101510
void CConnman::ProcessAddrFetch()

src/test/addrman_tests.cpp

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -67,22 +67,22 @@ BOOST_AUTO_TEST_CASE(addrman_simple)
6767
CNetAddr source = ResolveIP("252.2.2.2");
6868

6969
// Test: Does Addrman respond correctly when empty.
70-
BOOST_CHECK_EQUAL(addrman->size(), 0U);
70+
BOOST_CHECK_EQUAL(addrman->Size(), 0U);
7171
auto addr_null = addrman->Select().first;
7272
BOOST_CHECK_EQUAL(addr_null.ToString(), "[::]:0");
7373

7474
// Test: Does Addrman::Add work as expected.
7575
CService addr1 = ResolveService("250.1.1.1", 8333);
7676
BOOST_CHECK(addrman->Add({CAddress(addr1, NODE_NONE)}, source));
77-
BOOST_CHECK_EQUAL(addrman->size(), 1U);
77+
BOOST_CHECK_EQUAL(addrman->Size(), 1U);
7878
auto addr_ret1 = addrman->Select().first;
7979
BOOST_CHECK_EQUAL(addr_ret1.ToString(), "250.1.1.1:8333");
8080

8181
// Test: Does IP address deduplication work correctly.
8282
// Expected dup IP should not be added.
8383
CService addr1_dup = ResolveService("250.1.1.1", 8333);
8484
BOOST_CHECK(!addrman->Add({CAddress(addr1_dup, NODE_NONE)}, source));
85-
BOOST_CHECK_EQUAL(addrman->size(), 1U);
85+
BOOST_CHECK_EQUAL(addrman->Size(), 1U);
8686

8787

8888
// Test: New table has one addr and we add a diff addr we should
@@ -93,15 +93,15 @@ BOOST_AUTO_TEST_CASE(addrman_simple)
9393

9494
CService addr2 = ResolveService("250.1.1.2", 8333);
9595
BOOST_CHECK(addrman->Add({CAddress(addr2, NODE_NONE)}, source));
96-
BOOST_CHECK(addrman->size() >= 1);
96+
BOOST_CHECK(addrman->Size() >= 1);
9797

9898
// Test: reset addrman and test AddrMan::Add multiple addresses works as expected
9999
addrman = std::make_unique<AddrMan>(EMPTY_NETGROUPMAN, DETERMINISTIC, GetCheckRatio(m_node));
100100
std::vector<CAddress> vAddr;
101101
vAddr.push_back(CAddress(ResolveService("250.1.1.3", 8333), NODE_NONE));
102102
vAddr.push_back(CAddress(ResolveService("250.1.1.4", 8333), NODE_NONE));
103103
BOOST_CHECK(addrman->Add(vAddr, source));
104-
BOOST_CHECK(addrman->size() >= 1);
104+
BOOST_CHECK(addrman->Size() >= 1);
105105
}
106106

107107
BOOST_AUTO_TEST_CASE(addrman_ports)
@@ -110,23 +110,23 @@ BOOST_AUTO_TEST_CASE(addrman_ports)
110110

111111
CNetAddr source = ResolveIP("252.2.2.2");
112112

113-
BOOST_CHECK_EQUAL(addrman->size(), 0U);
113+
BOOST_CHECK_EQUAL(addrman->Size(), 0U);
114114

115115
// Test 7; Addr with same IP but diff port does not replace existing addr.
116116
CService addr1 = ResolveService("250.1.1.1", 8333);
117117
BOOST_CHECK(addrman->Add({CAddress(addr1, NODE_NONE)}, source));
118-
BOOST_CHECK_EQUAL(addrman->size(), 1U);
118+
BOOST_CHECK_EQUAL(addrman->Size(), 1U);
119119

120120
CService addr1_port = ResolveService("250.1.1.1", 8334);
121121
BOOST_CHECK(addrman->Add({CAddress(addr1_port, NODE_NONE)}, source));
122-
BOOST_CHECK_EQUAL(addrman->size(), 2U);
122+
BOOST_CHECK_EQUAL(addrman->Size(), 2U);
123123
auto addr_ret2 = addrman->Select().first;
124124
BOOST_CHECK(addr_ret2.ToString() == "250.1.1.1:8333" || addr_ret2.ToString() == "250.1.1.1:8334");
125125

126126
// Test: Add same IP but diff port to tried table; this converts the entry with
127127
// the specified port to tried, but not the other.
128128
addrman->Good(CAddress(addr1_port, NODE_NONE));
129-
BOOST_CHECK_EQUAL(addrman->size(), 2U);
129+
BOOST_CHECK_EQUAL(addrman->Size(), 2U);
130130
bool newOnly = true;
131131
auto addr_ret3 = addrman->Select(newOnly).first;
132132
BOOST_CHECK_EQUAL(addr_ret3.ToString(), "250.1.1.1:8333");
@@ -142,22 +142,22 @@ BOOST_AUTO_TEST_CASE(addrman_select)
142142
// Test: Select from new with 1 addr in new.
143143
CService addr1 = ResolveService("250.1.1.1", 8333);
144144
BOOST_CHECK(addrman->Add({CAddress(addr1, NODE_NONE)}, source));
145-
BOOST_CHECK_EQUAL(addrman->size(), 1U);
145+
BOOST_CHECK_EQUAL(addrman->Size(), 1U);
146146

147147
bool newOnly = true;
148148
auto addr_ret1 = addrman->Select(newOnly).first;
149149
BOOST_CHECK_EQUAL(addr_ret1.ToString(), "250.1.1.1:8333");
150150

151151
// Test: move addr to tried, select from new expected nothing returned.
152152
BOOST_CHECK(addrman->Good(CAddress(addr1, NODE_NONE)));
153-
BOOST_CHECK_EQUAL(addrman->size(), 1U);
153+
BOOST_CHECK_EQUAL(addrman->Size(), 1U);
154154
auto addr_ret2 = addrman->Select(newOnly).first;
155155
BOOST_CHECK_EQUAL(addr_ret2.ToString(), "[::]:0");
156156

157157
auto addr_ret3 = addrman->Select().first;
158158
BOOST_CHECK_EQUAL(addr_ret3.ToString(), "250.1.1.1:8333");
159159

160-
BOOST_CHECK_EQUAL(addrman->size(), 1U);
160+
BOOST_CHECK_EQUAL(addrman->Size(), 1U);
161161

162162

163163
// Add three addresses to new table.
@@ -182,7 +182,7 @@ BOOST_AUTO_TEST_CASE(addrman_select)
182182
BOOST_CHECK(addrman->Good(CAddress(addr7, NODE_NONE)));
183183

184184
// Test: 6 addrs + 1 addr from last test = 7.
185-
BOOST_CHECK_EQUAL(addrman->size(), 7U);
185+
BOOST_CHECK_EQUAL(addrman->Size(), 7U);
186186

187187
// Test: Select pulls from new and tried regardless of port number.
188188
std::set<uint16_t> ports;
@@ -200,25 +200,25 @@ BOOST_AUTO_TEST_CASE(addrman_new_collisions)
200200

201201
uint32_t num_addrs{0};
202202

203-
BOOST_CHECK_EQUAL(addrman->size(), num_addrs);
203+
BOOST_CHECK_EQUAL(addrman->Size(), num_addrs);
204204

205205
while (num_addrs < 22) { // Magic number! 250.1.1.1 - 250.1.1.22 do not collide with deterministic key = 1
206206
CService addr = ResolveService("250.1.1." + ToString(++num_addrs));
207207
BOOST_CHECK(addrman->Add({CAddress(addr, NODE_NONE)}, source));
208208

209209
// Test: No collision in new table yet.
210-
BOOST_CHECK_EQUAL(addrman->size(), num_addrs);
210+
BOOST_CHECK_EQUAL(addrman->Size(), num_addrs);
211211
}
212212

213213
// Test: new table collision!
214214
CService addr1 = ResolveService("250.1.1." + ToString(++num_addrs));
215215
uint32_t collisions{1};
216216
BOOST_CHECK(addrman->Add({CAddress(addr1, NODE_NONE)}, source));
217-
BOOST_CHECK_EQUAL(addrman->size(), num_addrs - collisions);
217+
BOOST_CHECK_EQUAL(addrman->Size(), num_addrs - collisions);
218218

219219
CService addr2 = ResolveService("250.1.1." + ToString(++num_addrs));
220220
BOOST_CHECK(addrman->Add({CAddress(addr2, NODE_NONE)}, source));
221-
BOOST_CHECK_EQUAL(addrman->size(), num_addrs - collisions);
221+
BOOST_CHECK_EQUAL(addrman->Size(), num_addrs - collisions);
222222
}
223223

224224
BOOST_AUTO_TEST_CASE(addrman_new_multiplicity)
@@ -236,7 +236,7 @@ BOOST_AUTO_TEST_CASE(addrman_new_multiplicity)
236236
}
237237
AddressPosition addr_pos = addrman->FindAddressEntry(addr).value();
238238
BOOST_CHECK_EQUAL(addr_pos.multiplicity, 1U);
239-
BOOST_CHECK_EQUAL(addrman->size(), 1U);
239+
BOOST_CHECK_EQUAL(addrman->Size(), 1U);
240240

241241
// if nTime increases, an addr can occur in up to 8 buckets
242242
// The acceptance probability decreases exponentially with existing multiplicity -
@@ -250,7 +250,7 @@ BOOST_AUTO_TEST_CASE(addrman_new_multiplicity)
250250
AddressPosition addr_pos_multi = addrman->FindAddressEntry(addr).value();
251251
BOOST_CHECK_EQUAL(addr_pos_multi.multiplicity, 8U);
252252
// multiplicity doesn't affect size
253-
BOOST_CHECK_EQUAL(addrman->size(), 1U);
253+
BOOST_CHECK_EQUAL(addrman->Size(), 1U);
254254
}
255255

256256
BOOST_AUTO_TEST_CASE(addrman_tried_collisions)
@@ -261,7 +261,7 @@ BOOST_AUTO_TEST_CASE(addrman_tried_collisions)
261261

262262
uint32_t num_addrs{0};
263263

264-
BOOST_CHECK_EQUAL(addrman->size(), num_addrs);
264+
BOOST_CHECK_EQUAL(addrman->Size(), num_addrs);
265265

266266
while (num_addrs < 35) { // Magic number! 250.1.1.1 - 250.1.1.35 do not collide in tried with deterministic key = 1
267267
CService addr = ResolveService("250.1.1." + ToString(++num_addrs));
@@ -290,7 +290,7 @@ BOOST_AUTO_TEST_CASE(addrman_getaddr)
290290

291291
// Test: Sanity check, GetAddr should never return anything if addrman
292292
// is empty.
293-
BOOST_CHECK_EQUAL(addrman->size(), 0U);
293+
BOOST_CHECK_EQUAL(addrman->Size(), 0U);
294294
std::vector<CAddress> vAddr1 = addrman->GetAddr(/*max_addresses=*/0, /*max_pct=*/0, /*network=*/std::nullopt);
295295
BOOST_CHECK_EQUAL(vAddr1.size(), 0U);
296296

@@ -336,11 +336,11 @@ BOOST_AUTO_TEST_CASE(addrman_getaddr)
336336
}
337337
std::vector<CAddress> vAddr = addrman->GetAddr(/*max_addresses=*/2500, /*max_pct=*/23, /*network=*/std::nullopt);
338338

339-
size_t percent23 = (addrman->size() * 23) / 100;
339+
size_t percent23 = (addrman->Size() * 23) / 100;
340340
BOOST_CHECK_EQUAL(vAddr.size(), percent23);
341341
BOOST_CHECK_EQUAL(vAddr.size(), 461U);
342-
// (Addrman.size() < number of addresses added) due to address collisions.
343-
BOOST_CHECK_EQUAL(addrman->size(), 2006U);
342+
// (addrman.Size() < number of addresses added) due to address collisions.
343+
BOOST_CHECK_EQUAL(addrman->Size(), 2006U);
344344
}
345345

346346

@@ -681,7 +681,7 @@ BOOST_AUTO_TEST_CASE(remove_invalid)
681681
addrman->Add({new1, tried1, new2, tried2}, CNetAddr{});
682682
addrman->Good(tried1);
683683
addrman->Good(tried2);
684-
BOOST_REQUIRE_EQUAL(addrman->size(), 4);
684+
BOOST_REQUIRE_EQUAL(addrman->Size(), 4);
685685

686686
stream << *addrman;
687687

@@ -704,14 +704,14 @@ BOOST_AUTO_TEST_CASE(remove_invalid)
704704

705705
addrman = std::make_unique<AddrMan>(EMPTY_NETGROUPMAN, DETERMINISTIC, GetCheckRatio(m_node));
706706
stream >> *addrman;
707-
BOOST_CHECK_EQUAL(addrman->size(), 2);
707+
BOOST_CHECK_EQUAL(addrman->Size(), 2);
708708
}
709709

710710
BOOST_AUTO_TEST_CASE(addrman_selecttriedcollision)
711711
{
712712
auto addrman = std::make_unique<AddrMan>(EMPTY_NETGROUPMAN, DETERMINISTIC, GetCheckRatio(m_node));
713713

714-
BOOST_CHECK(addrman->size() == 0);
714+
BOOST_CHECK(addrman->Size() == 0);
715715

716716
// Empty addrman should return blank addrman info.
717717
BOOST_CHECK(addrman->SelectTriedCollision().first.ToString() == "[::]:0");
@@ -796,7 +796,7 @@ BOOST_AUTO_TEST_CASE(addrman_evictionworks)
796796
{
797797
auto addrman = std::make_unique<AddrMan>(EMPTY_NETGROUPMAN, DETERMINISTIC, GetCheckRatio(m_node));
798798

799-
BOOST_CHECK(addrman->size() == 0);
799+
BOOST_CHECK(addrman->Size() == 0);
800800

801801
// Empty addrman should return blank addrman info.
802802
BOOST_CHECK(addrman->SelectTriedCollision().first.ToString() == "[::]:0");
@@ -878,14 +878,14 @@ BOOST_AUTO_TEST_CASE(load_addrman)
878878
BOOST_CHECK(Lookup("252.5.1.1", source, 8333, false));
879879
std::vector<CAddress> addresses{CAddress(addr1, NODE_NONE), CAddress(addr2, NODE_NONE), CAddress(addr3, NODE_NONE)};
880880
BOOST_CHECK(addrman.Add(addresses, source));
881-
BOOST_CHECK(addrman.size() == 3);
881+
BOOST_CHECK(addrman.Size() == 3);
882882

883883
// Test that the de-serialization does not throw an exception.
884884
CDataStream ssPeers1 = AddrmanToStream(addrman);
885885
bool exceptionThrown = false;
886886
AddrMan addrman1{EMPTY_NETGROUPMAN, !DETERMINISTIC, GetCheckRatio(m_node)};
887887

888-
BOOST_CHECK(addrman1.size() == 0);
888+
BOOST_CHECK(addrman1.Size() == 0);
889889
try {
890890
unsigned char pchMsgTmp[4];
891891
ssPeers1 >> pchMsgTmp;
@@ -894,16 +894,16 @@ BOOST_AUTO_TEST_CASE(load_addrman)
894894
exceptionThrown = true;
895895
}
896896

897-
BOOST_CHECK(addrman1.size() == 3);
897+
BOOST_CHECK(addrman1.Size() == 3);
898898
BOOST_CHECK(exceptionThrown == false);
899899

900900
// Test that ReadFromStream creates an addrman with the correct number of addrs.
901901
CDataStream ssPeers2 = AddrmanToStream(addrman);
902902

903903
AddrMan addrman2{EMPTY_NETGROUPMAN, !DETERMINISTIC, GetCheckRatio(m_node)};
904-
BOOST_CHECK(addrman2.size() == 0);
904+
BOOST_CHECK(addrman2.Size() == 0);
905905
ReadFromStream(addrman2, ssPeers2);
906-
BOOST_CHECK(addrman2.size() == 3);
906+
BOOST_CHECK(addrman2.Size() == 3);
907907
}
908908

909909
// Produce a corrupt peers.dat that claims 20 addrs when it only has one addr.
@@ -939,7 +939,7 @@ BOOST_AUTO_TEST_CASE(load_addrman_corrupted)
939939
CDataStream ssPeers1 = MakeCorruptPeersDat();
940940
bool exceptionThrown = false;
941941
AddrMan addrman1{EMPTY_NETGROUPMAN, !DETERMINISTIC, GetCheckRatio(m_node)};
942-
BOOST_CHECK(addrman1.size() == 0);
942+
BOOST_CHECK(addrman1.Size() == 0);
943943
try {
944944
unsigned char pchMsgTmp[4];
945945
ssPeers1 >> pchMsgTmp;
@@ -948,14 +948,14 @@ BOOST_AUTO_TEST_CASE(load_addrman_corrupted)
948948
exceptionThrown = true;
949949
}
950950
// Even though de-serialization failed addrman is not left in a clean state.
951-
BOOST_CHECK(addrman1.size() == 1);
951+
BOOST_CHECK(addrman1.Size() == 1);
952952
BOOST_CHECK(exceptionThrown);
953953

954954
// Test that ReadFromStream fails if peers.dat is corrupt
955955
CDataStream ssPeers2 = MakeCorruptPeersDat();
956956

957957
AddrMan addrman2{EMPTY_NETGROUPMAN, !DETERMINISTIC, GetCheckRatio(m_node)};
958-
BOOST_CHECK(addrman2.size() == 0);
958+
BOOST_CHECK(addrman2.Size() == 0);
959959
BOOST_CHECK_THROW(ReadFromStream(addrman2, ssPeers2), std::ios_base::failure);
960960
}
961961

@@ -969,7 +969,7 @@ BOOST_AUTO_TEST_CASE(addrman_update_address)
969969
const auto start_time{Now<NodeSeconds>() - 10000s};
970970
addr.nTime = start_time;
971971
BOOST_CHECK(addrman->Add({addr}, source));
972-
BOOST_CHECK_EQUAL(addrman->size(), 1U);
972+
BOOST_CHECK_EQUAL(addrman->Size(), 1U);
973973

974974
// Updating an addrman entry with a different port doesn't change it
975975
CAddress addr_diff_port{CAddress(ResolveService("250.1.1.1", 8334), NODE_NONE)};

0 commit comments

Comments
 (0)