mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-13 08:22:55 +00:00
## Problem Background node operations take a long time for loaded nodes. ## Summary of changes Increase number of concurrent reconciles an operation is allowed to spawn. This should make drain and fill operations faster and the new value is still well below the total limit of concurrent reconciles.
60 lines
1.4 KiB
Rust
60 lines
1.4 KiB
Rust
use std::{borrow::Cow, fmt::Debug, fmt::Display};
|
|
|
|
use tokio_util::sync::CancellationToken;
|
|
use utils::id::NodeId;
|
|
|
|
pub(crate) const MAX_RECONCILES_PER_OPERATION: usize = 32;
|
|
|
|
#[derive(Copy, Clone)]
|
|
pub(crate) struct Drain {
|
|
pub(crate) node_id: NodeId,
|
|
}
|
|
|
|
#[derive(Copy, Clone)]
|
|
pub(crate) struct Fill {
|
|
pub(crate) node_id: NodeId,
|
|
}
|
|
|
|
#[derive(Copy, Clone)]
|
|
pub(crate) enum Operation {
|
|
Drain(Drain),
|
|
Fill(Fill),
|
|
}
|
|
|
|
#[derive(Debug, thiserror::Error)]
|
|
pub(crate) enum OperationError {
|
|
#[error("Node state changed during operation: {0}")]
|
|
NodeStateChanged(Cow<'static, str>),
|
|
#[error("Operation finalize error: {0}")]
|
|
FinalizeError(Cow<'static, str>),
|
|
#[error("Operation cancelled")]
|
|
Cancelled,
|
|
}
|
|
|
|
pub(crate) struct OperationHandler {
|
|
pub(crate) operation: Operation,
|
|
#[allow(unused)]
|
|
pub(crate) cancel: CancellationToken,
|
|
}
|
|
|
|
impl Display for Drain {
|
|
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
|
write!(f, "drain {}", self.node_id)
|
|
}
|
|
}
|
|
|
|
impl Display for Fill {
|
|
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
|
write!(f, "fill {}", self.node_id)
|
|
}
|
|
}
|
|
|
|
impl Display for Operation {
|
|
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
|
match self {
|
|
Operation::Drain(op) => write!(f, "{op}"),
|
|
Operation::Fill(op) => write!(f, "{op}"),
|
|
}
|
|
}
|
|
}
|