mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-13 16:32:56 +00:00
## Problem We saw the drain/fill operations not drain fast enough in ap-southeast. ## Summary of changes These are some quick changes to speed it up: * double reconcile concurrency - this is now half of the available reconcile bandwidth * reduce the waiter polling timeout - this way we can spawn new reconciliations faster
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 = 64;
|
|
|
|
#[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}"),
|
|
}
|
|
}
|
|
}
|