Browse Source

Merge pull request #6984

e495ed5 add documentation for exluding whitelistes peer from maxuploadtarget (Jonas Schnelli)
5760749 [docs] rename reducetraffic.md to reduce-traffic.md (Jonas Schnelli)
d61fcff don't enforce maxuploadtargets disconnect for whitelisted peers (Jonas Schnelli)
0.13
Gregory Maxwell 9 years ago
parent
commit
9ffc687288
No known key found for this signature in database
GPG Key ID: EAB5AF94D9E9ABE7
  1. 7
      doc/reduce-traffic.md
  2. 3
      doc/release-notes.md
  3. 33
      qa/rpc-tests/maxuploadtarget.py
  4. 3
      src/main.cpp

7
doc/reducetraffic.md → doc/reduce-traffic.md

@ -1,7 +1,7 @@
Reduce Traffic Reduce Traffic
============== ==============
Some node operators need to deal with bandwith caps imposed by their ISPs. Some node operators need to deal with bandwidth caps imposed by their ISPs.
By default, bitcoin-core allows up to 125 connections to different peers, 8 of By default, bitcoin-core allows up to 125 connections to different peers, 8 of
which are outbound. You can therefore, have at most 117 inbound connections. which are outbound. You can therefore, have at most 117 inbound connections.
@ -22,6 +22,9 @@ Keep in mind that new nodes require other nodes that are willing to serve
historic blocks. **The recommended minimum is 144 blocks per day (max. 144MB historic blocks. **The recommended minimum is 144 blocks per day (max. 144MB
per day)** per day)**
Whitelisted peers will never be disconnected, although their traffic counts for
calculating the target.
## 2. Disable "listening" (`-listen=0`) ## 2. Disable "listening" (`-listen=0`)
Disabling listening will result in fewer nodes connected (remember the maximum of 8 Disabling listening will result in fewer nodes connected (remember the maximum of 8
@ -30,6 +33,6 @@ blocks and transactions to fewer nodes.
## 3. Reduce maximum connections (`-maxconnections=<num>`) ## 3. Reduce maximum connections (`-maxconnections=<num>`)
Reducing the maximum connected nodes to a miniumum could be desirable if traffic Reducing the maximum connected nodes to a minimum could be desirable if traffic
limits are tiny. Keep in mind that bitcoin's trustless model works best if you are limits are tiny. Keep in mind that bitcoin's trustless model works best if you are
connected to a handful of nodes. connected to a handful of nodes.

3
doc/release-notes.md

@ -184,6 +184,9 @@ This option can be specified in MiB per day and is turned off by default
(`-maxuploadtarget=0`). (`-maxuploadtarget=0`).
The recommended minimum is 144 * MAX_BLOCK_SIZE (currently 144MB) per day. The recommended minimum is 144 * MAX_BLOCK_SIZE (currently 144MB) per day.
Whitelisted peers will never be disconnected, although their traffic counts for
calculating the target.
A more detailed documentation about keeping traffic low can be found in A more detailed documentation about keeping traffic low can be found in
[/doc/reducetraffic.md](/doc/reducetraffic.md). [/doc/reducetraffic.md](/doc/reducetraffic.md).

33
qa/rpc-tests/maxuploadtarget.py

@ -245,5 +245,38 @@ class MaxUploadTest(BitcoinTestFramework):
[c.disconnect_node() for c in connections] [c.disconnect_node() for c in connections]
#stop and start node 0 with 1MB maxuploadtarget, whitelist 127.0.0.1
print "Restarting nodes with -whitelist=127.0.0.1"
stop_node(self.nodes[0], 0)
self.nodes[0] = start_node(0, self.options.tmpdir, ["-debug", "-whitelist=127.0.0.1", "-maxuploadtarget=1", "-blockmaxsize=999000"])
#recreate/reconnect 3 test nodes
test_nodes = []
connections = []
for i in xrange(3):
test_nodes.append(TestNode())
connections.append(NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], test_nodes[i]))
test_nodes[i].add_connection(connections[i])
NetworkThread().start() # Start up network handling in another thread
[x.wait_for_verack() for x in test_nodes]
#retrieve 20 blocks which should be enough to break the 1MB limit
getdata_request.inv = [CInv(2, big_new_block)]
for i in xrange(20):
test_nodes[1].send_message(getdata_request)
test_nodes[1].sync_with_ping()
assert_equal(test_nodes[1].block_receive_map[big_new_block], i+1)
getdata_request.inv = [CInv(2, big_old_block)]
test_nodes[1].send_message(getdata_request)
test_nodes[1].wait_for_disconnect()
assert_equal(len(self.nodes[0].getpeerinfo()), 3) #node is still connected because of the whitelist
print "Peer 1 still connected after trying to download old block (whitelisted)"
[c.disconnect_node() for c in connections]
if __name__ == '__main__': if __name__ == '__main__':
MaxUploadTest().main() MaxUploadTest().main()

3
src/main.cpp

@ -3867,8 +3867,9 @@ void static ProcessGetData(CNode* pfrom, const Consensus::Params& consensusParam
} }
} }
// disconnect node in case we have reached the outbound limit for serving historical blocks // disconnect node in case we have reached the outbound limit for serving historical blocks
// never disconnect whitelisted nodes
static const int nOneWeek = 7 * 24 * 60 * 60; // assume > 1 week = historical static const int nOneWeek = 7 * 24 * 60 * 60; // assume > 1 week = historical
if (send && CNode::OutboundTargetReached(true) && ( ((pindexBestHeader != NULL) && (pindexBestHeader->GetBlockTime() - mi->second->GetBlockTime() > nOneWeek)) || inv.type == MSG_FILTERED_BLOCK) ) if (send && CNode::OutboundTargetReached(true) && ( ((pindexBestHeader != NULL) && (pindexBestHeader->GetBlockTime() - mi->second->GetBlockTime() > nOneWeek)) || inv.type == MSG_FILTERED_BLOCK) && !pfrom->fWhitelisted)
{ {
LogPrint("net", "historical block serving limit reached, disconnect peer=%d\n", pfrom->GetId()); LogPrint("net", "historical block serving limit reached, disconnect peer=%d\n", pfrom->GetId());

Loading…
Cancel
Save