mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-19 14:41:02 +00:00
move AssignmentKind and CoreAssigment to scheduler (#1571)
This commit is contained in:
@@ -33,7 +33,7 @@ use polkadot_node_primitives::{
|
|||||||
use polkadot_primitives::v1::{
|
use polkadot_primitives::v1::{
|
||||||
AvailableData, BackedCandidate, BlockNumber, CandidateDescriptor, CandidateEvent,
|
AvailableData, BackedCandidate, BlockNumber, CandidateDescriptor, CandidateEvent,
|
||||||
CandidateReceipt, CollatorId, CommittedCandidateReceipt,
|
CandidateReceipt, CollatorId, CommittedCandidateReceipt,
|
||||||
CoreAssignment, CoreOccupied, CoreState, ErasureChunk, GlobalValidationData, GroupRotationInfo,
|
CoreState, ErasureChunk, GlobalValidationData, GroupRotationInfo,
|
||||||
Hash, Id as ParaId, LocalValidationData, OccupiedCoreAssumption, OmittedValidationData, PoV,
|
Hash, Id as ParaId, LocalValidationData, OccupiedCoreAssumption, OmittedValidationData, PoV,
|
||||||
SessionIndex, SignedAvailabilityBitfield, ValidationCode, ValidatorId, ValidatorIndex,
|
SessionIndex, SignedAvailabilityBitfield, ValidationCode, ValidatorId, ValidatorIndex,
|
||||||
ValidatorSignature,
|
ValidatorSignature,
|
||||||
@@ -345,19 +345,6 @@ impl ChainApiMessage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The information on scheduler assignments that some somesystems may be querying.
|
|
||||||
#[derive(Debug, Clone)]
|
|
||||||
pub struct SchedulerRoster {
|
|
||||||
/// Validator-to-groups assignments.
|
|
||||||
pub validator_groups: Vec<Vec<ValidatorIndex>>,
|
|
||||||
/// All scheduled paras.
|
|
||||||
pub scheduled: Vec<CoreAssignment>,
|
|
||||||
/// Upcoming paras (chains and threads).
|
|
||||||
pub upcoming: Vec<ParaId>,
|
|
||||||
/// Occupied cores.
|
|
||||||
pub availability_cores: Vec<Option<CoreOccupied>>,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// A sender for the result of a runtime API request.
|
/// A sender for the result of a runtime API request.
|
||||||
pub type RuntimeApiSender<T> = oneshot::Sender<Result<T, crate::errors::RuntimeApiError>>;
|
pub type RuntimeApiSender<T> = oneshot::Sender<Result<T, crate::errors::RuntimeApiError>>;
|
||||||
|
|
||||||
|
|||||||
@@ -434,53 +434,6 @@ pub enum CoreOccupied {
|
|||||||
Parachain,
|
Parachain,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The assignment type.
|
|
||||||
#[derive(Clone, Encode, Decode)]
|
|
||||||
#[cfg_attr(feature = "std", derive(PartialEq, Debug))]
|
|
||||||
pub enum AssignmentKind {
|
|
||||||
/// A parachain.
|
|
||||||
Parachain,
|
|
||||||
/// A parathread.
|
|
||||||
Parathread(CollatorId, u32),
|
|
||||||
}
|
|
||||||
|
|
||||||
/// How a free core is scheduled to be assigned.
|
|
||||||
#[derive(Clone, Encode, Decode)]
|
|
||||||
#[cfg_attr(feature = "std", derive(PartialEq, Debug))]
|
|
||||||
pub struct CoreAssignment {
|
|
||||||
/// The core that is assigned.
|
|
||||||
pub core: CoreIndex,
|
|
||||||
/// The unique ID of the para that is assigned to the core.
|
|
||||||
pub para_id: Id,
|
|
||||||
/// The kind of the assignment.
|
|
||||||
pub kind: AssignmentKind,
|
|
||||||
/// The index of the validator group assigned to the core.
|
|
||||||
pub group_idx: GroupIndex,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl CoreAssignment {
|
|
||||||
/// Get the ID of a collator who is required to collate this block.
|
|
||||||
pub fn required_collator(&self) -> Option<&CollatorId> {
|
|
||||||
match self.kind {
|
|
||||||
AssignmentKind::Parachain => None,
|
|
||||||
AssignmentKind::Parathread(ref id, _) => Some(id),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Get the `CoreOccupied` from this.
|
|
||||||
pub fn to_core_occupied(&self) -> CoreOccupied {
|
|
||||||
match self.kind {
|
|
||||||
AssignmentKind::Parachain => CoreOccupied::Parachain,
|
|
||||||
AssignmentKind::Parathread(ref collator, retries) => CoreOccupied::Parathread(
|
|
||||||
ParathreadEntry {
|
|
||||||
claim: ParathreadClaim(self.para_id, collator.clone()),
|
|
||||||
retries,
|
|
||||||
}
|
|
||||||
),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Validation data omitted from most candidate descriptor structs, as it can be derived from the
|
/// Validation data omitted from most candidate descriptor structs, as it can be derived from the
|
||||||
/// relay-parent.
|
/// relay-parent.
|
||||||
#[derive(Clone, Encode, Decode)]
|
#[derive(Clone, Encode, Decode)]
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ use primitives::v1::{
|
|||||||
validation_data_hash,
|
validation_data_hash,
|
||||||
ValidatorId, CandidateCommitments, CandidateDescriptor, ValidatorIndex, Id as ParaId,
|
ValidatorId, CandidateCommitments, CandidateDescriptor, ValidatorIndex, Id as ParaId,
|
||||||
AvailabilityBitfield as AvailabilityBitfield, SignedAvailabilityBitfields, SigningContext,
|
AvailabilityBitfield as AvailabilityBitfield, SignedAvailabilityBitfields, SigningContext,
|
||||||
BackedCandidate, CoreIndex, GroupIndex, CoreAssignment, CommittedCandidateReceipt,
|
BackedCandidate, CoreIndex, GroupIndex, CommittedCandidateReceipt,
|
||||||
CandidateReceipt, HeadData,
|
CandidateReceipt, HeadData,
|
||||||
};
|
};
|
||||||
use frame_support::{
|
use frame_support::{
|
||||||
@@ -37,7 +37,7 @@ use bitvec::{order::Lsb0 as BitOrderLsb0, vec::BitVec};
|
|||||||
use sp_staking::SessionIndex;
|
use sp_staking::SessionIndex;
|
||||||
use sp_runtime::{DispatchError, traits::{One, Saturating}};
|
use sp_runtime::{DispatchError, traits::{One, Saturating}};
|
||||||
|
|
||||||
use crate::{configuration, paras};
|
use crate::{configuration, paras, scheduler::CoreAssignment};
|
||||||
|
|
||||||
/// A bitfield signed by a validator indicating that it is keeping its piece of the erasure-coding
|
/// A bitfield signed by a validator indicating that it is keeping its piece of the erasure-coding
|
||||||
/// for any backed candidates referred to by a `1` bit available.
|
/// for any backed candidates referred to by a `1` bit available.
|
||||||
@@ -668,7 +668,6 @@ mod tests {
|
|||||||
use primitives::v1::{
|
use primitives::v1::{
|
||||||
SignedAvailabilityBitfield, CompactStatement as Statement, ValidityAttestation, CollatorId,
|
SignedAvailabilityBitfield, CompactStatement as Statement, ValidityAttestation, CollatorId,
|
||||||
CandidateCommitments, SignedStatement, CandidateDescriptor, ValidationCode,
|
CandidateCommitments, SignedStatement, CandidateDescriptor, ValidationCode,
|
||||||
AssignmentKind,
|
|
||||||
};
|
};
|
||||||
use frame_support::traits::{OnFinalize, OnInitialize};
|
use frame_support::traits::{OnFinalize, OnInitialize};
|
||||||
use keyring::Sr25519Keyring;
|
use keyring::Sr25519Keyring;
|
||||||
@@ -680,6 +679,7 @@ mod tests {
|
|||||||
use crate::initializer::SessionChangeNotification;
|
use crate::initializer::SessionChangeNotification;
|
||||||
use crate::configuration::HostConfiguration;
|
use crate::configuration::HostConfiguration;
|
||||||
use crate::paras::ParaGenesisArgs;
|
use crate::paras::ParaGenesisArgs;
|
||||||
|
use crate::scheduler::AssignmentKind;
|
||||||
|
|
||||||
fn default_config() -> HostConfiguration<BlockNumber> {
|
fn default_config() -> HostConfiguration<BlockNumber> {
|
||||||
let mut config = HostConfiguration::default();
|
let mut config = HostConfiguration::default();
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
use sp_std::prelude::*;
|
use sp_std::prelude::*;
|
||||||
use sp_std::convert::TryInto;
|
use sp_std::convert::TryInto;
|
||||||
use primitives::v1::{
|
use primitives::v1::{
|
||||||
Id as ParaId, ValidatorIndex, CoreAssignment, CoreOccupied, CoreIndex, AssignmentKind,
|
Id as ParaId, ValidatorIndex, CoreOccupied, CoreIndex, CollatorId,
|
||||||
GroupIndex, ParathreadClaim, ParathreadEntry, GroupRotationInfo, ScheduledCore,
|
GroupIndex, ParathreadClaim, ParathreadEntry, GroupRotationInfo, ScheduledCore,
|
||||||
};
|
};
|
||||||
use frame_support::{
|
use frame_support::{
|
||||||
@@ -105,6 +105,54 @@ pub enum FreedReason {
|
|||||||
TimedOut,
|
TimedOut,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// The assignment type.
|
||||||
|
#[derive(Clone, Encode, Decode)]
|
||||||
|
#[cfg_attr(feature = "std", derive(PartialEq, Debug))]
|
||||||
|
pub enum AssignmentKind {
|
||||||
|
/// A parachain.
|
||||||
|
Parachain,
|
||||||
|
/// A parathread.
|
||||||
|
Parathread(CollatorId, u32),
|
||||||
|
}
|
||||||
|
|
||||||
|
/// How a free core is scheduled to be assigned.
|
||||||
|
#[derive(Clone, Encode, Decode)]
|
||||||
|
#[cfg_attr(feature = "std", derive(PartialEq, Debug))]
|
||||||
|
pub struct CoreAssignment {
|
||||||
|
/// The core that is assigned.
|
||||||
|
pub core: CoreIndex,
|
||||||
|
/// The unique ID of the para that is assigned to the core.
|
||||||
|
pub para_id: ParaId,
|
||||||
|
/// The kind of the assignment.
|
||||||
|
pub kind: AssignmentKind,
|
||||||
|
/// The index of the validator group assigned to the core.
|
||||||
|
pub group_idx: GroupIndex,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl CoreAssignment {
|
||||||
|
/// Get the ID of a collator who is required to collate this block.
|
||||||
|
pub fn required_collator(&self) -> Option<&CollatorId> {
|
||||||
|
match self.kind {
|
||||||
|
AssignmentKind::Parachain => None,
|
||||||
|
AssignmentKind::Parathread(ref id, _) => Some(id),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get the `CoreOccupied` from this.
|
||||||
|
pub fn to_core_occupied(&self) -> CoreOccupied {
|
||||||
|
match self.kind {
|
||||||
|
AssignmentKind::Parachain => CoreOccupied::Parachain,
|
||||||
|
AssignmentKind::Parathread(ref collator, retries) => CoreOccupied::Parathread(
|
||||||
|
ParathreadEntry {
|
||||||
|
claim: ParathreadClaim(self.para_id, collator.clone()),
|
||||||
|
retries,
|
||||||
|
}
|
||||||
|
),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub trait Trait: frame_system::Trait + configuration::Trait + paras::Trait { }
|
pub trait Trait: frame_system::Trait + configuration::Trait + paras::Trait { }
|
||||||
|
|
||||||
decl_storage! {
|
decl_storage! {
|
||||||
|
|||||||
Reference in New Issue
Block a user