mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 03:52:49 +01:00
merge bitcoin#18968: noban precludes maxuploadtarget disconnects
This commit is contained in:
parent
8806c7baeb
commit
91d800dce3
@ -23,7 +23,7 @@ longer serving historic blocks (blocks older than one week).
|
|||||||
Keep in mind that new nodes require other nodes that are willing to serve
|
Keep in mind that new nodes require other nodes that are willing to serve
|
||||||
historic blocks.
|
historic blocks.
|
||||||
|
|
||||||
Whitelisted peers will never be disconnected, although their traffic counts for
|
Peers with the `noban` permission will never be disconnected, although their traffic counts for
|
||||||
calculating the target.
|
calculating the target.
|
||||||
|
|
||||||
## 2. Disable "listening" (`-listen=0`)
|
## 2. Disable "listening" (`-listen=0`)
|
||||||
|
@ -578,7 +578,7 @@ void SetupServerArgs(NodeContext& node)
|
|||||||
argsman.AddArg("-maxreceivebuffer=<n>", strprintf("Maximum per-connection receive buffer, <n>*1000 bytes (default: %u)", DEFAULT_MAXRECEIVEBUFFER), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-maxreceivebuffer=<n>", strprintf("Maximum per-connection receive buffer, <n>*1000 bytes (default: %u)", DEFAULT_MAXRECEIVEBUFFER), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-maxsendbuffer=<n>", strprintf("Maximum per-connection send buffer, <n>*1000 bytes (default: %u)", DEFAULT_MAXSENDBUFFER), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-maxsendbuffer=<n>", strprintf("Maximum per-connection send buffer, <n>*1000 bytes (default: %u)", DEFAULT_MAXSENDBUFFER), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-maxtimeadjustment", strprintf("Maximum allowed median peer time offset adjustment. Local perspective of time may be influenced by peers forward or backward by this amount. (default: %u seconds)", DEFAULT_MAX_TIME_ADJUSTMENT), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-maxtimeadjustment", strprintf("Maximum allowed median peer time offset adjustment. Local perspective of time may be influenced by peers forward or backward by this amount. (default: %u seconds)", DEFAULT_MAX_TIME_ADJUSTMENT), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-maxuploadtarget=<n>", strprintf("Tries to keep outbound traffic under the given target (in MiB per 24h), 0 = no limit (default: %d)", DEFAULT_MAX_UPLOAD_TARGET), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-maxuploadtarget=<n>", strprintf("Tries to keep outbound traffic under the given target (in MiB per 24h). Limit does not apply to peers with 'noban' permission. 0 = no limit (default: %d)", DEFAULT_MAX_UPLOAD_TARGET), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-onion=<ip:port>", "Use separate SOCKS5 proxy to reach peers via Tor hidden services, set -noonion to disable (default: -proxy)", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-onion=<ip:port>", "Use separate SOCKS5 proxy to reach peers via Tor hidden services, set -noonion to disable (default: -proxy)", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-onlynet=<net>", "Make outgoing connections only through network <net> (ipv4, ipv6 or onion). Incoming connections are not affected by this option. This option can be specified multiple times to allow multiple networks.", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-onlynet=<net>", "Make outgoing connections only through network <net> (ipv4, ipv6 or onion). Incoming connections are not affected by this option. This option can be specified multiple times to allow multiple networks.", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
argsman.AddArg("-peerblockfilters", strprintf("Serve compact block filters to peers per BIP 157 (default: %u)", DEFAULT_PEERBLOCKFILTERS), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
argsman.AddArg("-peerblockfilters", strprintf("Serve compact block filters to peers per BIP 157 (default: %u)", DEFAULT_PEERBLOCKFILTERS), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
|
@ -3686,7 +3686,7 @@ void CConnman::RecordBytesSent(uint64_t bytes)
|
|||||||
nMaxOutboundTotalBytesSentInCycle = 0;
|
nMaxOutboundTotalBytesSentInCycle = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO, exclude whitebind peers
|
// TODO, exclude peers with noban permission
|
||||||
nMaxOutboundTotalBytesSentInCycle += bytes;
|
nMaxOutboundTotalBytesSentInCycle += bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1892,9 +1892,11 @@ void static ProcessGetBlockData(CNode& pfrom, const CChainParams& chainparams, c
|
|||||||
}
|
}
|
||||||
const CNetMsgMaker msgMaker(pfrom.GetSendVersion());
|
const CNetMsgMaker msgMaker(pfrom.GetSendVersion());
|
||||||
// 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
|
if (send &&
|
||||||
if (send && connman.OutboundTargetReached(true) && ( ((pindexBestHeader != nullptr) && (pindexBestHeader->GetBlockTime() - pindex->GetBlockTime() > HISTORICAL_BLOCK_AGE)) || inv.type == MSG_FILTERED_BLOCK) && !pfrom.HasPermission(PF_NOBAN))
|
connman.OutboundTargetReached(true) &&
|
||||||
{
|
(((pindexBestHeader != nullptr) && (pindexBestHeader->GetBlockTime() - pindex->GetBlockTime() > HISTORICAL_BLOCK_AGE)) || inv.type == MSG_FILTERED_BLOCK) &&
|
||||||
|
!pfrom.HasPermission(PF_NOBAN) // never disconnect nodes with the noban permission
|
||||||
|
) {
|
||||||
LogPrint(BCLog::NET, "historical block serving limit reached, disconnect peer=%d\n", pfrom.GetId());
|
LogPrint(BCLog::NET, "historical block serving limit reached, disconnect peer=%d\n", pfrom.GetId());
|
||||||
|
|
||||||
//disconnect node
|
//disconnect node
|
||||||
|
@ -144,8 +144,7 @@ class MaxUploadTest(BitcoinTestFramework):
|
|||||||
self.nodes[0].disconnect_p2ps()
|
self.nodes[0].disconnect_p2ps()
|
||||||
|
|
||||||
self.log.info("Restarting node 0 with noban permission and 1MB maxuploadtarget")
|
self.log.info("Restarting node 0 with noban permission and 1MB maxuploadtarget")
|
||||||
self.stop_node(0)
|
self.restart_node(0, ["-whitelist=noban@127.0.0.1", "-maxuploadtarget=1", "-blockmaxsize=999000", "-maxtipage="+str(2*60*60*24*7), "-mocktime="+str(current_mocktime)])
|
||||||
self.start_node(0, ["-whitelist=noban@127.0.0.1", "-maxuploadtarget=1", "-blockmaxsize=999000", "-maxtipage="+str(2*60*60*24*7), "-mocktime="+str(current_mocktime)])
|
|
||||||
|
|
||||||
# Reconnect to self.nodes[0]
|
# Reconnect to self.nodes[0]
|
||||||
self.nodes[0].add_p2p_connection(TestP2PConn())
|
self.nodes[0].add_p2p_connection(TestP2PConn())
|
||||||
@ -158,9 +157,9 @@ class MaxUploadTest(BitcoinTestFramework):
|
|||||||
|
|
||||||
getdata_request.inv = [CInv(MSG_BLOCK, big_old_block)]
|
getdata_request.inv = [CInv(MSG_BLOCK, big_old_block)]
|
||||||
self.nodes[0].p2p.send_and_ping(getdata_request)
|
self.nodes[0].p2p.send_and_ping(getdata_request)
|
||||||
assert_equal(len(self.nodes[0].getpeerinfo()), 1) #node is still connected because of the whitelist
|
assert_equal(len(self.nodes[0].getpeerinfo()), 1) #node is still connected because of the noban permission
|
||||||
|
|
||||||
self.log.info("Peer still connected after trying to download old block (whitelisted)")
|
self.log.info("Peer still connected after trying to download old block (noban permission)")
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
MaxUploadTest().main()
|
MaxUploadTest().main()
|
||||||
|
Loading…
Reference in New Issue
Block a user