protocol: fix syncing from peers being too choosy about peers
This commit is contained in:
parent
441ed9f2fe
commit
0da09ede86
|
@ -1723,7 +1723,7 @@ skip:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
const uint32_t local_stripe = tools::get_pruning_stripe(m_core.get_blockchain_pruning_seed());
|
const uint32_t local_stripe = tools::get_pruning_stripe(m_core.get_blockchain_pruning_seed());
|
||||||
if (m_sync_pruned_blocks && peer_stripe == local_stripe)
|
if (m_sync_pruned_blocks && local_stripe && next_stripe != local_stripe)
|
||||||
{
|
{
|
||||||
MDEBUG(context << "We can sync pruned blocks off this peer, not dropping");
|
MDEBUG(context << "We can sync pruned blocks off this peer, not dropping");
|
||||||
return false;
|
return false;
|
||||||
|
@ -1836,7 +1836,7 @@ skip:
|
||||||
next_block_height = next_needed_height;
|
next_block_height = next_needed_height;
|
||||||
else
|
else
|
||||||
next_block_height = context.m_last_response_height - context.m_needed_objects.size() + 1;
|
next_block_height = context.m_last_response_height - context.m_needed_objects.size() + 1;
|
||||||
bool stripe_proceed_main = ((m_sync_pruned_blocks && peer_stripe == local_stripe) || add_stripe == 0 || peer_stripe == 0 || add_stripe == peer_stripe) && (next_block_height < bc_height + BLOCK_QUEUE_FORCE_DOWNLOAD_NEAR_BLOCKS || next_needed_height < bc_height + BLOCK_QUEUE_FORCE_DOWNLOAD_NEAR_BLOCKS);
|
bool stripe_proceed_main = ((m_sync_pruned_blocks && local_stripe && add_stripe != local_stripe) || add_stripe == 0 || peer_stripe == 0 || add_stripe == peer_stripe) && (next_block_height < bc_height + BLOCK_QUEUE_FORCE_DOWNLOAD_NEAR_BLOCKS || next_needed_height < bc_height + BLOCK_QUEUE_FORCE_DOWNLOAD_NEAR_BLOCKS);
|
||||||
bool stripe_proceed_secondary = tools::has_unpruned_block(next_block_height, context.m_remote_blockchain_height, context.m_pruning_seed);
|
bool stripe_proceed_secondary = tools::has_unpruned_block(next_block_height, context.m_remote_blockchain_height, context.m_pruning_seed);
|
||||||
bool proceed = stripe_proceed_main || (queue_proceed && stripe_proceed_secondary);
|
bool proceed = stripe_proceed_main || (queue_proceed && stripe_proceed_secondary);
|
||||||
if (!stripe_proceed_main && !stripe_proceed_secondary && should_drop_connection(context, tools::get_pruning_stripe(next_block_height, context.m_remote_blockchain_height, CRYPTONOTE_PRUNING_LOG_STRIPES)))
|
if (!stripe_proceed_main && !stripe_proceed_secondary && should_drop_connection(context, tools::get_pruning_stripe(next_block_height, context.m_remote_blockchain_height, CRYPTONOTE_PRUNING_LOG_STRIPES)))
|
||||||
|
@ -2043,7 +2043,7 @@ skip:
|
||||||
const uint32_t peer_stripe = tools::get_pruning_stripe(context.m_pruning_seed);
|
const uint32_t peer_stripe = tools::get_pruning_stripe(context.m_pruning_seed);
|
||||||
const uint32_t first_stripe = tools::get_pruning_stripe(span.first, context.m_remote_blockchain_height, CRYPTONOTE_PRUNING_LOG_STRIPES);
|
const uint32_t first_stripe = tools::get_pruning_stripe(span.first, context.m_remote_blockchain_height, CRYPTONOTE_PRUNING_LOG_STRIPES);
|
||||||
const uint32_t last_stripe = tools::get_pruning_stripe(span.first + span.second - 1, context.m_remote_blockchain_height, CRYPTONOTE_PRUNING_LOG_STRIPES);
|
const uint32_t last_stripe = tools::get_pruning_stripe(span.first + span.second - 1, context.m_remote_blockchain_height, CRYPTONOTE_PRUNING_LOG_STRIPES);
|
||||||
if ((first_stripe && peer_stripe != first_stripe) || (last_stripe && peer_stripe != last_stripe))
|
if ((((first_stripe && peer_stripe != first_stripe) || (last_stripe && peer_stripe != last_stripe)) && !m_sync_pruned_blocks) || (m_sync_pruned_blocks && req.prune))
|
||||||
{
|
{
|
||||||
MDEBUG(context << "We need full data, but the peer does not have it, dropping peer");
|
MDEBUG(context << "We need full data, but the peer does not have it, dropping peer");
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in New Issue