Skip to main content

BulkInterrupted

Struct BulkInterrupted 

Source
pub struct BulkInterrupted {
    pub written: usize,
    pub cause: DbError,
}
Expand description

A chunked bulk write that stopped partway, and how much of it landed (0.13.8, W7.6, D-181).

The four chunked paths — crate::Database::bulk_import, write_concepts, upsert_embeddings and write_analytics_annotations — are atomic per chunk and not overall, so a failure at row 19,000 of 20,000 leaves the first 18,000-odd rows committed. Until 0.13.8 they returned a bare DbError and the caller was told only that it failed: the count was computed, used to size the next chunk, and dropped on the floor at the ?. A caller who then retried the whole batch re-wrote everything that had already landed, and one who skipped it lost the tail.

This is why those four return Result<usize, BulkInterrupted> rather than Result. From<BulkInterrupted> for DbError exists so ? still works in a function returning Result — that conversion is how a caller says the count does not interest them, and it says so at the call site instead of silently.

Fields§

§written: usize

Rows the chunks that finished before the stop committed, and which are still committed. Zero is an ordinary value: the first chunk can fail.

§cause: DbError

Why it stopped. DbError::BulkCancelled if the caller asked; otherwise whatever the failing chunk raised, unchanged — this is not a new error, it is the same one with the count attached.

Implementations§

Source§

impl BulkInterrupted

Source

pub fn was_cancelled(&self) -> bool

Whether the stop was the caller’s own cancellation rather than a fault.

Trait Implementations§

Source§

impl Debug for BulkInterrupted

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for BulkInterrupted

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for BulkInterrupted

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0:

use the Display impl or to_string()

1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<BulkInterrupted> for DbError

Source§

fn from(e: BulkInterrupted) -> Self

Discards written. That is the point: a caller writing ? into a function returning Result has decided the partial count is not something they will act on, and this puts that decision at the place it is taken rather than inside the crate.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more