risingwavelabs/risingwave · error · StorageError

Hummock error: {0}

Error message

Hummock error: {0}

What it means

A StorageError variant wrapping a HummockError via #[from]. Hummock is RisingWave's state-store layer; any failure inside it (S3/GCS I/O, checksum mismatch, compaction, version errors) surfaces through this display wrapper when propagated to storage-level callers.

Source

Thrown at src/storage/src/error.rs:24

//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

use risingwave_common::util::value_encoding::error::ValueEncodingError;
use thiserror::Error;

use crate::hummock::HummockError;
use crate::mem_table::MemTableError;

#[derive(Error, thiserror_ext::ReportDebug, thiserror_ext::Box)]
#[thiserror_ext(newtype(name = StorageError, backtrace))]
pub enum ErrorKind {
    #[error("Hummock error: {0}")]
    Hummock(
        #[backtrace]
        #[from]
        HummockError,
    ),

    #[error("Deserialize row error: {0}")]
    DeserializeRow(
        #[from]
        #[backtrace]
        ValueEncodingError,
    ),

    #[error("Serialize/deserialize error: {0}")]
    SerdeError(
        #[from]
        #[backtrace]
        memcomparable::Error,

View on GitHub (pinned to 6469eb736d)

Solutions

  1. Inspect the inner HummockError source (ReportDebug/backtrace) for the root cause
  2. Fix the underlying cause: restore cloud credentials, retry transient network failures, or re-ingest corrupted data
  3. If it stems from a stale hummock version, retry the operation after the version sync advances
Defensive patterns

Strategy: retry

Try / catch

match op().await {
    Err(e) if matches!(e.kind(), StorageErrorKind::Hummock(_)) => {
        // inspect inner HummockError; retry only if transient (network/throttle)
        if is_transient(&e) { retry_with_backoff(op) } else { propagate(e) }
    }
    other => other,
}

Prevention

When it happens

Trigger: Any storage operation that internally returns a HummockResult::Err — e.g. get/put to object store failures, hummock version not found, checksum mismatches during read, compaction executor errors (see error 1969) — converted automatically into StorageError by the ? operator.

Common situations: Object store outages or expired cloud credentials, network partitions to S3, corrupt SST files, concurrent version bumps causing stale-version reads.

Understand the failure class

Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.

Related errors


AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11). Data as JSON: /api/errors/8636083000dcb885. Report an issue: GitHub.