mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-10-29 23:16:57 +00:00
fix: preserve datanode write batches when retrying (#9720)
* fix: preserve datanode write batches when retrying Signed-off-by: WenyXu <wenymedia@gmail.com> * fix: isolate invalid entries in metric write batches Signed-off-by: WenyXu <wenymedia@gmail.com> * refactor: adapt batch writes to the unified metric API Signed-off-by: WenyXu <wenymedia@gmail.com> * fix: explicitly accept partial results for batched retries Signed-off-by: WenyXu <wenymedia@gmail.com> * test: assert terminal retry hint instead of masked error text Signed-off-by: WenyXu <wenymedia@gmail.com> * test: preserve application status in region failure fixtures Signed-off-by: WenyXu <wenymedia@gmail.com> * fix: refresh routes after region close Signed-off-by: WenyXu <wenymedia@gmail.com> --------- Signed-off-by: WenyXu <wenymedia@gmail.com>
This commit is contained in:
@@ -41,6 +41,9 @@ pub use retry_hint::{retry_hint_from_postgres_error, retry_hint_from_postgres_po
|
||||
#[snafu(visibility(pub))]
|
||||
#[stack_trace_debug]
|
||||
pub enum Error {
|
||||
#[snafu(display("Failed to execute batch request"))]
|
||||
BatchRequest { source: Arc<Error> },
|
||||
|
||||
#[snafu(display(
|
||||
"Region request has {} failed entries; {}",
|
||||
response.failures.len(),
|
||||
@@ -1216,6 +1219,7 @@ impl ErrorExt for Error {
|
||||
Error::PartialRegion { response } => response
|
||||
.first_failure()
|
||||
.map_or(StatusCode::Internal, |(_, error)| error.status_code()),
|
||||
Error::BatchRequest { source } => source.status_code(),
|
||||
IllegalServerState { .. }
|
||||
| EtcdTxnOpResponse { .. }
|
||||
| EtcdFailed { .. }
|
||||
@@ -1386,6 +1390,7 @@ impl ErrorExt for Error {
|
||||
|
||||
match self {
|
||||
Error::PartialRegion { .. } => RetryHint::Retryable,
|
||||
Error::BatchRequest { source } => source.retry_hint(),
|
||||
RetryLater { source, .. } => match source.retry_hint() {
|
||||
RetryHint::RetryAfterRouteRefresh => RetryHint::RetryAfterRouteRefresh,
|
||||
RetryHint::Retryable | RetryHint::NonRetryable => RetryHint::Retryable,
|
||||
|
||||
Reference in New Issue
Block a user