mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-29 09:07:57 +00:00
Extract warp sync strategy from ChainSync (#2467)
Extract `WarpSync` (and `StateSync` as part of warp sync) from `ChainSync` as independent syncing strategy called by `SyncingEngine`. Introduce `SyncingStrategy` enum as a proxy between `SyncingEngine` and specific syncing strategies. ## Limitations Gap sync is kept in `ChainSync` for now because it shares the same set of peers as block syncing implementation in `ChainSync`. Extraction of a common context responsible for peer management in syncing strategies able to run in parallel is planned for a follow-up PR. ## Further improvements A possibility of conversion of `SyncingStartegy` into a trait should be evaluated. The main stopper for this is that different strategies need to communicate different actions to `SyncingEngine` and respond to different events / provide different APIs (e.g., requesting justifications is only possible via `ChainSync` and not through `WarpSync`; `SendWarpProofRequest` action is only relevant to `WarpSync`, etc.) --------- Co-authored-by: Aaro Altonen <48052676+altonen@users.noreply.github.com>
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
use crate::LOG_TARGET;
|
||||
use libp2p::PeerId;
|
||||
use log::trace;
|
||||
use sc_network_common::sync::message;
|
||||
@@ -87,10 +88,10 @@ impl<B: BlockT> BlockCollection<B> {
|
||||
|
||||
match self.blocks.get(&start) {
|
||||
Some(&BlockRangeState::Downloading { .. }) => {
|
||||
trace!(target: "sync", "Inserting block data still marked as being downloaded: {}", start);
|
||||
trace!(target: LOG_TARGET, "Inserting block data still marked as being downloaded: {}", start);
|
||||
},
|
||||
Some(BlockRangeState::Complete(existing)) if existing.len() >= blocks.len() => {
|
||||
trace!(target: "sync", "Ignored block data already downloaded: {}", start);
|
||||
trace!(target: LOG_TARGET, "Ignored block data already downloaded: {}", start);
|
||||
return
|
||||
},
|
||||
_ => (),
|
||||
@@ -162,7 +163,7 @@ impl<B: BlockT> BlockCollection<B> {
|
||||
};
|
||||
// crop to peers best
|
||||
if range.start > peer_best {
|
||||
trace!(target: "sync", "Out of range for peer {} ({} vs {})", who, range.start, peer_best);
|
||||
trace!(target: LOG_TARGET, "Out of range for peer {} ({} vs {})", who, range.start, peer_best);
|
||||
return None
|
||||
}
|
||||
range.end = cmp::min(peer_best + One::one(), range.end);
|
||||
@@ -173,7 +174,7 @@ impl<B: BlockT> BlockCollection<B> {
|
||||
.next()
|
||||
.map_or(false, |(n, _)| range.start > *n + max_ahead.into())
|
||||
{
|
||||
trace!(target: "sync", "Too far ahead for peer {} ({})", who, range.start);
|
||||
trace!(target: LOG_TARGET, "Too far ahead for peer {} ({})", who, range.start);
|
||||
return None
|
||||
}
|
||||
|
||||
@@ -224,7 +225,7 @@ impl<B: BlockT> BlockCollection<B> {
|
||||
};
|
||||
*range_data = BlockRangeState::Queued { len };
|
||||
}
|
||||
trace!(target: "sync", "{} blocks ready for import", ready.len());
|
||||
trace!(target: LOG_TARGET, "{} blocks ready for import", ready.len());
|
||||
ready
|
||||
}
|
||||
|
||||
@@ -235,7 +236,7 @@ impl<B: BlockT> BlockCollection<B> {
|
||||
self.blocks.remove(&block_num);
|
||||
block_num += One::one();
|
||||
}
|
||||
trace!(target: "sync", "Cleared blocks from {:?} to {:?}", from, to);
|
||||
trace!(target: LOG_TARGET, "Cleared blocks from {:?} to {:?}", from, to);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user