Files
greptimedb/tests-integration/tests/main.rs
T
jeremyhi f9ab3c296b feat(log-store): skip corrupted object store WAL segments per region (#9425)
* feat(log-store): skip corrupted object store WAL segments per region

A segment that does not decode, because its checksum does not match or
its content disagrees with its footer entry, is fetched once more. If it
still does not decode, the read follows `on_corrupted_segment`: `skip`
records a WAL hole for the region with the object key, sequence and the
footer's entry id range, increments
`greptime_logstore_object_store_wal_skipped_segments_total`, logs a
warning and continues with the next object; `fail` fails the read. A
failed fetch fails the read in both modes. Holes are kept in memory per
region and can be listed from the store.

The standalone test builder allocates WAL options through
`build_standalone_wal_provider`, and integration tests run a standalone
instance on the object store WAL across restarts, on S3 when the
`GT_S3_*` variables are set. The standalone shutdown runs every step and
returns the first error.

Signed-off-by: jeremyhi <fengjiachun@gmail.com>

* test(cmd): cover the best-effort standalone stop

Build a standalone instance whose leader services fail to stop and whose
datanode servers fail afterwards, and check that `Instance::stop` still
stops the object store WAL and returns the leader services error.

Rename `skip_segment` to `record_skipped_segment` and the file store
integration test to `test_standalone_object_store_wal_survives_restarts_on_file`.

Signed-off-by: jeremyhi <fengjiachun@gmail.com>

---------

Signed-off-by: jeremyhi <fengjiachun@gmail.com>
2026-10-08 06:33:40 +00:00

86 lines
2.1 KiB
Rust

// Copyright 2023 Greptime Team
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// 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.
#![recursion_limit = "256"]
mod admin_function_event;
mod build_series_index;
mod database_ddl_event;
mod dict_groupby_sst;
mod event_recorder_test_util;
#[macro_use]
mod grpc;
#[macro_use]
mod http;
mod flow_ddl_event;
mod gc_event;
mod json2;
mod jsonbench;
#[macro_use]
mod sql;
#[macro_use]
mod region_migration;
mod table_ddl_event;
#[macro_use]
mod repartition;
mod repartition_event;
#[macro_use]
mod repartition_expr_version;
mod export_logical_tables;
mod mysql;
mod object_store_wal;
mod reconciliation_event;
mod view_ddl_event;
mod wal_prune_event;
#[rstest_reuse::template]
#[rstest::rstest]
#[case::standalone(false)]
#[case::distributed(true)]
#[tokio::test(flavor = "multi_thread")]
fn both_deployment_cases(#[case] distributed: bool) {}
grpc_tests!(File, S3, S3WithCache, Oss, Azblob, Gcs);
http_tests!(File, S3, S3WithCache, Oss, Azblob, Gcs);
http_local_tests!(
test_health_api,
test_status_api,
test_metrics_api,
test_splunk_health,
test_splunk_health_is_public,
test_dynamic_tracer_toggle,
test_dashboard_path,
test_test_pipeline_api,
);
#[tokio::test(flavor = "multi_thread")]
async fn test_http_auth_from_standalone_user_provider_config() {
http::test_http_auth_from_standalone_user_provider_config().await;
}
sql_tests!(File);
region_migration_tests!(File);
repartition_tests!(File);
repartition_tests!(S3, S3WithCache, Oss, Azblob, Gcs);
repartition_expr_version_tests!(File);
repartition_expr_version_tests!(S3, S3WithCache, Oss, Azblob, Gcs);
// TODO(niebayes): add integration tests for remote wal.