Skip to content

Add integration tests for Refreshable Materialized Views (mv4)#68154

Merged
fm4v merged 7 commits intomasterfrom
mv4-test
Dec 10, 2024
Merged

Add integration tests for Refreshable Materialized Views (mv4)#68154
fm4v merged 7 commits intomasterfrom
mv4-test

Conversation

@fm4v
Copy link
Member

@fm4v fm4v commented Aug 11, 2024

This test suite covers #58934 with tests. Some bugs were found, they are described in comments to this PR.

Changelog category (leave one):

  • Not for changelog (changelog entry is not required)

Changelog entry (a user-readable short description of the changes that goes to CHANGELOG.md):

...

Documentation entry for user-facing changes

  • Documentation is written (mandatory for new features)

Information about CI checks: https://clickhouse.com/docs/en/development/continuous-integration/

CI Settings (Only check the boxes if you know what you are doing):

  • Allow: All Required Checks
  • Allow: Stateless tests
  • Allow: Stateful tests
  • Allow: Integration Tests
  • Allow: Performance tests
  • Allow: All Builds
  • Allow: batch 1, 2 for multi-batch jobs
  • Allow: batch 3, 4, 5, 6 for multi-batch jobs

  • Exclude: Style check
  • Exclude: Fast test
  • Exclude: All with ASAN
  • Exclude: All with TSAN, MSAN, UBSAN, Coverage
  • Exclude: All with aarch64, release, debug

  • Do not test
  • Woolen Wolfdog
  • Upload binaries for special builds
  • Disable merge-commit
  • Disable CI cache

@fm4v
Copy link
Member Author

fm4v commented Aug 11, 2024

RMV with APPEND and AS SELECT query which doesn't read data from table SELECT now() AS a, number AS b FROM numbers(2) throws error There is no query or query context has expired. (THERE_IS_NO_QUERY)

test_refreshable_mat_view/test.py::test_simple_append

CREATE MATERIALIZED VIEW default.test_rmv_schedule
REFRESH AFTER 30 SECOND APPEND
(
    `a` DateTime,
    `b` UInt64
)
ENGINE = Memory
AS SELECT
    now() AS a,
    number AS b
FROM numbers(2);

SELECT *
FROM system.view_refreshes \G


Row 1:
──────
database:               default
view:                   test_rmv_schedule
status:                 Scheduled
last_refresh_result:    Error
last_refresh_time:      2024-08-08 22:06:58
last_success_time:      ᴺᵁᴸᴸ
duration_ms:            8
next_refresh_time:      2024-08-08 22:07:28
remaining_dependencies: []
exception:              Code: 393. DB::Exception: There is no query or query context has expired. (THERE_IS_NO_QUERY), Stack trace (when copying this message, always include the lines below):

0. ./build_docker/./src/Common/Exception.cpp:111: DB::Exception::Exception(DB::Exception::MessageMasked&&, int, bool) @ 0x000000000d7b761b
1. DB::Exception::Exception(PreformattedMessage&&, int) @ 0x0000000007b68c0c
2. DB::Exception::Exception<>(int, FormatStringHelperImpl<>) @ 0x0000000007b8030b
3. ./build_docker/./src/Interpreters/Context.cpp:2620: DB::Context::getQueryContext() const @ 0x000000001113cbc9
4. ./build_docker/./src/Analyzer/Resolve/QueryAnalyzer.cpp:4813: DB::QueryAnalyzer::resolveTableFunction(std::shared_ptr<DB::IQueryTreeNode>&, DB::IdentifierResolveScope&, DB::QueryExpressionsAliasVisitor&, bool) @ 0x00000000115a8ee1
5. ./build_docker/./src/Analyzer/Resolve/QueryAnalyzer.cpp:5154: DB::QueryAnalyzer::resolveQueryJoinTreeNode(std::shared_ptr<DB::IQueryTreeNode>&, DB::IdentifierResolveScope&, DB::QueryExpressionsAliasVisitor&) @ 0x00000000115d4d5c
6. ./build_docker/./src/Analyzer/Resolve/QueryAnalyzer.cpp:5407: DB::QueryAnalyzer::resolveQuery(std::shared_ptr<DB::IQueryTreeNode> const&, DB::IdentifierResolveScope&) @ 0x0000000011598aff
7. ./build_docker/./src/Analyzer/Resolve/QueryAnalyzer.cpp:0: DB::QueryAnalyzer::resolve(std::shared_ptr<DB::IQueryTreeNode>&, std::shared_ptr<DB::IQueryTreeNode> const&, std::shared_ptr<DB::Context const>) @ 0x0000000011596eac
8. ./build_docker/./src/Analyzer/Resolve/QueryAnalysisPass.cpp:0: DB::QueryAnalysisPass::run(std::shared_ptr<DB::IQueryTreeNode>&, std::shared_ptr<DB::Context const>) @ 0x0000000011596705
9. ./build_docker/./src/Analyzer/QueryTreePassManager.cpp:183: DB::QueryTreePassManager::run(std::shared_ptr<DB::IQueryTreeNode>) @ 0x00000000115953b6
10. ./build_docker/./src/Interpreters/InterpreterSelectQueryAnalyzer.cpp:0: DB::(anonymous namespace)::buildQueryTreeAndRunPasses(std::shared_ptr<DB::IAST> const&, DB::SelectQueryOptions const&, std::shared_ptr<DB::Context const> const&, std::shared_ptr<DB::IStorage> const&) (.llvm.1500208036845295065) @ 0x00000000116d031d
11. ./build_docker/./src/Interpreters/InterpreterSelectQueryAnalyzer.cpp:160: DB::InterpreterSelectQueryAnalyzer::InterpreterSelectQueryAnalyzer(std::shared_ptr<DB::IAST> const&, std::shared_ptr<DB::Context const> const&, DB::SelectQueryOptions const&, std::vector<String, std::allocator<String>> const&) @ 0x00000000116ce2fc
12. ./build_docker/./src/Interpreters/InterpreterSelectQueryAnalyzer.cpp:0: DB::InterpreterSelectQueryAnalyzer::getSampleBlock(std::shared_ptr<DB::IAST> const&, std::shared_ptr<DB::Context const> const&, DB::SelectQueryOptions const&) @ 0x00000000116d0eb9
13. ./build_docker/./src/Storages/StorageMaterializedView.cpp:0: DB::StorageMaterializedView::prepareRefresh(bool, std::shared_ptr<DB::Context>, std::optional<DB::StorageID>&) const @ 0x000000001226668a
14. ./build_docker/./src/Storages/MaterializedView/RefreshTask.cpp:381: DB::RefreshTask::refreshTask() @ 0x0000000012c6cc7e
15. ./src/Common/Stopwatch.h:72: DB::BackgroundSchedulePool::threadFunction() @ 0x0000000010a19420
16. ./build_docker/./src/Core/BackgroundSchedulePool.cpp:0: void std::__function::__policy_invoker<void ()>::__call_impl<std::__function::__default_alloc_func<ThreadFromGlobalPoolImpl<false, true>::ThreadFromGlobalPoolImpl<DB::BackgroundSchedulePool::BackgroundSchedulePool(unsigned long, StrongTypedef<unsigned long, CurrentMetrics::MetricTag>, StrongTypedef<unsigned long, CurrentMetrics::MetricTag>, char const*)::$_0>(DB::BackgroundSchedulePool::BackgroundSchedulePool(unsigned long, StrongTypedef<unsigned long, CurrentMetrics::MetricTag>, StrongTypedef<unsigned long, CurrentMetrics::MetricTag>, char const*)::$_0&&)::'lambda'(), void ()>>(std::__function::__policy_storage const*) @ 0x0000000010a1a4c7
17. ./base/base/../base/wide_integer_impl.h:817: void* std::__thread_proxy[abi:v15007]<std::tuple<std::unique_ptr<std::__thread_struct, std::default_delete<std::__thread_struct>>, void ThreadPoolImpl<std::thread>::scheduleImpl<void>(std::function<void ()>, Priority, std::optional<unsigned long>, bool)::'lambda0'()>>(void*) @ 0x000000000d878349
18. ? @ 0x00007ff335f2eac3
19. ? @ 0x00007ff335fc0850
 (version 24.8.1.1554)
retry:                  0
refresh_count:          0
progress:               nan
elapsed:                0
read_rows:              0
read_bytes:             0
total_rows:             0
total_bytes:            0
written_rows:           0
written_bytes:          0
result_rows:            0
result_bytes:           0

As example, reading from table in AS SELECT query works correctly:
test_refreshable_mat_view/test.py::test_simple_append_from_table

@fm4v
Copy link
Member Author

fm4v commented Aug 11, 2024

SYSTEM TEST VIEW test_rmv SET FAKE TIME doesn't work when OFFSET or RANDOMIZE is used in the RMV interval, so I can't test scheduling correctness when they are used.

@fm4v
Copy link
Member Author

fm4v commented Aug 11, 2024

Test test_refreshable_mat_view/test.py::test_long_query verify that progress in system.view_refreshes works correctly for long running queries.
It works correctly for query SELECT toDateTime(1) a, 1 b FROM numbers(1000000000), but always inf when reading from the table: SELECT * FROM src1

@fm4v
Copy link
Member Author

fm4v commented Aug 11, 2024

Test test_refreshable_mat_view/test.py::test_query_retry checks setting refresh_retries=10 which should retry failed query 10 times and seems that retries doesn't work.
Repro:

CREATE TABLE tgt1 (a DateTime, b UInt64) ENGINE = MergeTree ORDER BY tuple();
CREATE MATERIALIZED VIEW
test_rmv
REFRESH
EVERY 1 HOUR
SETTINGS refresh_retries=10
TO tgt1
EMPTY
AS SELECT throwIf(1, '111') a;

SYSTEM TEST VIEW test_rmv SET FAKE TIME {next_refresh_time};

Retry count isn't changed:

database:               default
view:                   test_rmv
status:                 Scheduled
last_refresh_result:    Error
last_refresh_time:      2024-08-09 19:00:00
last_success_time:      ᴺᵁᴸᴸ
duration_ms:            35
next_refresh_time:      2024-08-09 19:00:00
remaining_dependencies: []
exception:              Code: 395. DB::Exception: 111: while executing 'FUNCTION throwIf(1_UInt8 :: 1, '111'_String :: 2) -> throwIf(1_UInt8, '111'_String) UInt8 : 3'. (FUNCTION_THROW_IF_VALUE_IS_NON_ZERO), Stack trace (when copying this message, always include the lines below):

0. ./build_docker/./src/Common/Exception.cpp:111: DB::Exception::Exception(DB::Exception::MessageMasked&&, int, bool) @ 0x000000000d7b761b
1. DB::Exception::createRuntime(int, String const&) @ 0x000000000cb6c48c
2. DB::(anonymous namespace)::FunctionThrowIf::executeImpl(std::vector<DB::ColumnWithTypeAndName, std::allocator<DB::ColumnWithTypeAndName>> const&, std::shared_ptr<DB::IDataType const> const&, unsigned long) const (.4455c76ef1992ddf3aecef7e9eb7f880) @ 0x000000000cb6b216
3. DB::FunctionToExecutableFunctionAdaptor::executeImpl(std::vector<DB::ColumnWithTypeAndName, std::allocator<DB::ColumnWithTypeAndName>> const&, std::shared_ptr<DB::IDataType const> const&, unsigned long) const @ 0x0000000007b8073a
4. DB::IExecutableFunction::executeWithoutLowCardinalityColumns(std::vector<DB::ColumnWithTypeAndName, std::allocator<DB::ColumnWithTypeAndName>> const&, std::shared_ptr<DB::IDataType const> const&, unsigned long, bool) const @ 0x00000000087dd5c7
5. DB::IExecutableFunction::executeWithoutSparseColumns(std::vector<DB::ColumnWithTypeAndName, std::allocator<DB::ColumnWithTypeAndName>> const&, std::shared_ptr<DB::IDataType const> const&, unsigned long, bool) const @ 0x00000000087ddede
6. DB::IExecutableFunction::execute(std::vector<DB::ColumnWithTypeAndName, std::allocator<DB::ColumnWithTypeAndName>> const&, std::shared_ptr<DB::IDataType const> const&, unsigned long, bool) const @ 0x00000000087df25d
7. ./contrib/boost/boost/smart_ptr/intrusive_ptr.hpp:117: DB::ExpressionActions::execute(DB::Block&, unsigned long&, bool, bool) const @ 0x000000001120cc19
8. ./build_docker/./src/Processors/Transforms/ExpressionTransform.cpp:0: DB::ExpressionTransform::transform(DB::Chunk&) @ 0x000000001308d756
9. ./contrib/llvm-project/libcxx/include/__utility/swap.h:35: DB::ISimpleTransform::transform(DB::Chunk&, DB::Chunk&) @ 0x000000000dac2a13
10. ./build_docker/./src/Processors/ISimpleTransform.cpp:99: DB::ISimpleTransform::work() @ 0x0000000012e24a12
11. ./build_docker/./src/Processors/Executors/ExecutionThreadContext.cpp:0: DB::ExecutionThreadContext::executeTask() @ 0x0000000012e40107
12. ./build_docker/./src/Processors/Executors/PipelineExecutor.cpp:273: DB::PipelineExecutor::executeStepImpl(unsigned long, std::atomic<bool>*) @ 0x0000000012e34870
13. ./contrib/llvm-project/libcxx/include/__memory/shared_ptr.h:701: DB::PipelineExecutor::execute(unsigned long, bool) @ 0x0000000012e33d02
14. ./build_docker/./src/Storages/MaterializedView/RefreshTask.cpp:0: DB::RefreshTask::refreshTask() @ 0x0000000012c6d231
15. ./src/Common/Stopwatch.h:72: DB::BackgroundSchedulePool::threadFunction() @ 0x0000000010a19420
16. ./build_docker/./src/Core/BackgroundSchedulePool.cpp:0: void std::__function::__policy_invoker<void ()>::__call_impl<std::__function::__default_alloc_func<ThreadFromGlobalPoolImpl<false, true>::ThreadFromGlobalPoolImpl<DB::BackgroundSchedulePool::BackgroundSchedulePool(unsigned long, StrongTypedef<unsigned long, CurrentMetrics::MetricTag>, StrongTypedef<unsigned long, CurrentMetrics::MetricTag>, char const*)::$_0>(DB::BackgroundSchedulePool::BackgroundSchedulePool(unsigned long, StrongTypedef<unsigned long, CurrentMetrics::MetricTag>, StrongTypedef<unsigned long, CurrentMetrics::MetricTag>, char const*)::$_0&&)::'lambda'(), void ()>>(std::__function::__policy_storage const*) @ 0x0000000010a1a4c7
17. ./base/base/../base/wide_integer_impl.h:817: void* std::__thread_proxy[abi:v15007]<std::tuple<std::unique_ptr<std::__thread_struct, std::default_delete<std::__thread_struct>>, void ThreadPoolImpl<std::thread>::scheduleImpl<void>(std::function<void ()>, Priority, std::optional<unsigned long>, bool)::'lambda0'()>>(void*) @ 0x000000000d878349
18. ? @ 0x00007fb95cb55ac3
19. ? @ 0x00007fb95cbe7850
 (version 24.8.1.1554)
retry:                  1
refresh_count:          0
progress:               inf
elapsed:                0
read_rows:              1
read_bytes:             1
total_rows:             0
total_bytes:            0
written_rows:           0
written_bytes:          0
result_rows:            0
result_bytes:           0

Only one error in logs:

2024.08.09 18:09:32.324213 [ 66 ] {} <Error> RefreshTask: Refresh view default.test_rmv failed (attempt 1/11): Code: 395. DB::Exception: 111: while executing 'FUNCTION throwIf(1_UInt8 :: 1, '111'_String :: 2) -> throwIf(1_UInt8, '111'_String) UInt8 : 3'. (FUNCTION_THROW_IF_VALUE_IS_NON_ZERO), Stack trace (when copying this message, always include the lines below):

0. ./build_docker/./src/Common/Exception.cpp:111: DB::Exception::Exception(DB::Exception::MessageMasked&&, int, bool) @ 0x000000000d7b761b
1. DB::Exception::createRuntime(int, String const&) @ 0x000000000cb6c48c
2. DB::(anonymous namespace)::FunctionThrowIf::executeImpl(std::vector<DB::ColumnWithTypeAndName, std::allocator<DB::ColumnWithTypeAndName>> const&, std::shared_ptr<DB::IDataType const> const&, unsigned long) const (.4455c76ef1992ddf3aecef7e9eb7f880) @ 0x000000000cb6b216
3. DB::FunctionToExecutableFunctionAdaptor::executeImpl(std::vector<DB::ColumnWithTypeAndName, std::allocator<DB::ColumnWithTypeAndName>> const&, std::shared_ptr<DB::IDataType const> const&, unsigned long) const @ 0x0000000007b8073a
4. DB::IExecutableFunction::executeWithoutLowCardinalityColumns(std::vector<DB::ColumnWithTypeAndName, std::allocator<DB::ColumnWithTypeAndName>> const&, std::shared_ptr<DB::IDataType const> const&, unsigned long, bool) const @ 0x00000000087dd5c7
5. DB::IExecutableFunction::executeWithoutSparseColumns(std::vector<DB::ColumnWithTypeAndName, std::allocator<DB::ColumnWithTypeAndName>> const&, std::shared_ptr<DB::IDataType const> const&, unsigned long, bool) const @ 0x00000000087ddede
6. DB::IExecutableFunction::execute(std::vector<DB::ColumnWithTypeAndName, std::allocator<DB::ColumnWithTypeAndName>> const&, std::shared_ptr<DB::IDataType const> const&, unsigned long, bool) const @ 0x00000000087df25d
7. ./contrib/boost/boost/smart_ptr/intrusive_ptr.hpp:117: DB::ExpressionActions::execute(DB::Block&, unsigned long&, bool, bool) const @ 0x000000001120cc19
8. ./build_docker/./src/Processors/Transforms/ExpressionTransform.cpp:0: DB::ExpressionTransform::transform(DB::Chunk&) @ 0x000000001308d756
9. ./contrib/llvm-project/libcxx/include/__utility/swap.h:35: DB::ISimpleTransform::transform(DB::Chunk&, DB::Chunk&) @ 0x000000000dac2a13
10. ./build_docker/./src/Processors/ISimpleTransform.cpp:99: DB::ISimpleTransform::work() @ 0x0000000012e24a12
11. ./build_docker/./src/Processors/Executors/ExecutionThreadContext.cpp:0: DB::ExecutionThreadContext::executeTask() @ 0x0000000012e40107
12. ./build_docker/./src/Processors/Executors/PipelineExecutor.cpp:273: DB::PipelineExecutor::executeStepImpl(unsigned long, std::atomic<bool>*) @ 0x0000000012e34870
13. ./contrib/llvm-project/libcxx/include/__memory/shared_ptr.h:701: DB::PipelineExecutor::execute(unsigned long, bool) @ 0x0000000012e33d02
14. ./build_docker/./src/Storages/MaterializedView/RefreshTask.cpp:0: DB::RefreshTask::refreshTask() @ 0x0000000012c6d231
15. ./src/Common/Stopwatch.h:72: DB::BackgroundSchedulePool::threadFunction() @ 0x0000000010a19420
16. ./build_docker/./src/Core/BackgroundSchedulePool.cpp:0: void std::__function::__policy_invoker<void ()>::__call_impl<std::__function::__default_alloc_func<ThreadFromGlobalPoolImpl<false, true>::ThreadFromGlobalPoolImpl<DB::BackgroundSchedulePool::BackgroundSchedulePool(unsigned long, StrongTypedef<unsigned long, CurrentMetrics::MetricTag>, StrongTypedef<unsigned long, CurrentMetrics::MetricTag>, char const*)::$_0>(DB::BackgroundSchedulePool::BackgroundSchedulePool(unsigned long, StrongTypedef<unsigned long, CurrentMetrics::MetricTag>, StrongTypedef<unsigned long, CurrentMetrics::MetricTag>, char const*)::$_0&&)::'lambda'(), void ()>>(std::__function::__policy_storage const*) @ 0x0000000010a1a4c7
17. ./base/base/../base/wide_integer_impl.h:817: void* std::__thread_proxy[abi:v15007]<std::tuple<std::unique_ptr<std::__thread_struct, std::default_delete<std::__thread_struct>>, void ThreadPoolImpl<std::thread>::scheduleImpl<void>(std::function<void ()>, Priority, std::optional<unsigned long>, bool)::'lambda0'()>>(void*) @ 0x000000000d878349
18. ? @ 0x00007fb95cb55ac3
19. ? @ 0x00007fb95cbe7850
 (version 24.8.1.1554)

Base automatically changed from mv4 to master August 16, 2024 18:15
@al13n321 al13n321 changed the base branch from master to mvrere August 29, 2024 23:55
Copy link
Member

@al13n321 al13n321 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi, thanks for testing, sorry I'm taking forever to respond.

Rebased onto #60669 and pushed some small fixes. Bigger fixes are needed if this will run in CI, see inline comments (some tests look flaky; too many parameter combinations; scheduling model doesn't match RMV behavior).


RMV with APPEND and AS SELECT query which doesn't read data from table SELECT now() AS a, number AS b FROM numbers(2) throws error There is no query or query context has expired. (THERE_IS_NO_QUERY)

Fixed by #60669


SYSTEM TEST VIEW test_rmv SET FAKE TIME doesn't work when OFFSET or RANDOMIZE is used in the RMV interval, so I can't test scheduling correctness when they are used.

What were the queries and errors? I tried this and everything worked (with and without #60669):

create materialized view a refresh every 1 minute offset 30 second (x Int64) engine Memory as select number as x from numbers(2);
system test view a set fake time '2025-01-01 00:00:00';
[wait a second]
select * from system.view_refreshes;
drop table a;
create materialized view a refresh every 1 minute randomize for 10 second (x Int64) engine Memory as select number as x from numbers(2);
system test view a set fake time '2025-01-01 00:00:00';
[wait a second]
select * from system.view_refreshes;
select * from a;

Test test_refreshable_mat_view/test.py::test_long_query verify that progress in system.view_refreshes works correctly for long running queries.
It works correctly for query SELECT toDateTime(1) a, 1 b FROM numbers(1000000000), but always inf when reading from the table: SELECT * FROM src1

EDIT: Fix in #69234


Test test_refreshable_mat_view/test.py::test_query_retry checks setting refresh_retries=10 which should retry failed query 10 times and seems that retries doesn't work.
Repro:

That's because the fake time stands still. The first retry gets scheduled for 100ms later, and happens if you advance fake time by a second:

[...already advanced fake time twice...]
:) select retry from system.view_refreshes

SELECT retry
FROM system.view_refreshes

Query id: abdce691-15dc-4e67-ac6f-9138964b2a2b

   ┌─retry─┐
1. │     3 │
   └───────┘

1 row in set. Elapsed: 0.016 sec. 

:) SYSTEM TEST VIEW test_rmv SET FAKE TIME '2025-01-01 00:00:03'

SYSTEM TEST VIEW test_rmv SET FAKE TIME '2025-01-01 00:00:03'

Query id: d3013479-e434-4170-9dba-55e529376aed

Ok.

0 rows in set. Elapsed: 0.005 sec. 

:) select retry from system.view_refreshes

SELECT retry
FROM system.view_refreshes

Query id: 84700a7e-2e8d-4853-82fd-498a56c600c6

   ┌─retry─┐
1. │     4 │
   └───────┘

1 row in set. Elapsed: 0.012 sec. 

:) SYSTEM TEST VIEW test_rmv SET FAKE TIME '2025-01-01 00:00:04'

SYSTEM TEST VIEW test_rmv SET FAKE TIME '2025-01-01 00:00:04'

Query id: 3abf1bed-577d-455e-b7be-1ef17b19f4ed

Ok.

0 rows in set. Elapsed: 0.004 sec. 

:) select retry from system.view_refreshes

SELECT retry
FROM system.view_refreshes

Query id: 43e90ec0-88d1-441c-80e9-078364e3416f

   ┌─retry─┐
1. │     5 │
   └───────┘

1 row in set. Elapsed: 0.015 sec. 

@robot-clickhouse-ci-1 robot-clickhouse-ci-1 added the pr-not-for-changelog This PR should not be mentioned in the changelog label Aug 29, 2024
@robot-ch-test-poll1
Copy link
Contributor

robot-ch-test-poll1 commented Aug 29, 2024

This is an automated comment for commit eb42bbb with description of existing statuses. It's updated for the latest CI running

❌ Click here to open a full report in a separate page

Check nameDescriptionStatus
Stateless testsRuns stateless functional tests for ClickHouse binaries built in various configurations -- release, debug, with sanitizers, etc❌ failure
Successful checks
Check nameDescriptionStatus
AST fuzzerRuns randomly generated queries to catch program errors. The build type is optionally given in parenthesis. If it fails, ask a maintainer for help✅ success
BuildsThere's no description for the check yet, please add it to tests/ci/ci_config.py:CHECK_DESCRIPTIONS✅ success
ClickBenchRuns [ClickBench](https://github.com/ClickHouse/ClickBench/) with instant-attach table✅ success
Compatibility checkChecks that clickhouse binary runs on distributions with old libc versions. If it fails, ask a maintainer for help✅ success
Docker keeper imageThe check to build and optionally push the mentioned image to docker hub✅ success
Docker server imageThe check to build and optionally push the mentioned image to docker hub✅ success
Docs checkBuilds and tests the documentation✅ success
Fast testNormally this is the first check that is ran for a PR. It builds ClickHouse and runs most of stateless functional tests, omitting some. If it fails, further checks are not started until it is fixed. Look at the report to see which tests fail, then reproduce the failure locally as described here✅ success
Flaky testsChecks if new added or modified tests are flaky by running them repeatedly, in parallel, with more randomization. Functional tests are run 100 times with address sanitizer, and additional randomization of thread scheduling. Integration tests are run up to 10 times. If at least once a new test has failed, or was too long, this check will be red. We don't allow flaky tests, read the doc✅ success
Install packagesChecks that the built packages are installable in a clear environment✅ success
Integration testsThe integration tests report. In parenthesis the package type is given, and in square brackets are the optional part/total tests✅ success
Performance ComparisonMeasure changes in query performance. The performance test report is described in detail here. In square brackets are the optional part/total tests✅ success
Stateful testsRuns stateful functional tests for ClickHouse binaries built in various configurations -- release, debug, with sanitizers, etc✅ success
Stress testRuns stateless functional tests concurrently from several clients to detect concurrency-related errors✅ success
Style checkRuns a set of checks to keep the code style clean. If some of tests failed, see the related log from the report✅ success
Unit testsRuns the unit tests for different release types✅ success
Upgrade checkRuns stress tests on server version from last release and then tries to upgrade it to the version from the PR. It checks if the new server can successfully startup without any errors, crashes or sanitizer asserts✅ success

Base automatically changed from mvrere to master October 5, 2024 19:28
@clickhouse-gh
Copy link
Contributor

clickhouse-gh bot commented Nov 5, 2024

Dear @al13n321, this PR hasn't been updated for a while. You will be unassigned. Will you continue working on it? If so, please feel free to reassign yourself.

@fm4v fm4v force-pushed the mv4-test branch 2 times, most recently from ceb3728 to effc0f0 Compare November 25, 2024 11:58
@fm4v
Copy link
Member Author

fm4v commented Nov 25, 2024

Thanks for review @al13n321
I've made some changes:

  • Added replicated database tests
  • Removed scheduling model since I can't make it to exactly match to scheduling in RMV in reasonable time, leave simpler tests instead

No bugs have found, feature is BULLETPROOF!

@fm4v fm4v force-pushed the mv4-test branch 2 times, most recently from 455a22d to abacd63 Compare November 27, 2024 13:12
@fm4v fm4v force-pushed the mv4-test branch 3 times, most recently from f96e6d4 to 3c40263 Compare December 9, 2024 12:41
@fm4v fm4v added this pull request to the merge queue Dec 10, 2024
Merged via the queue into master with commit 787cf7d Dec 10, 2024
@fm4v fm4v deleted the mv4-test branch December 10, 2024 13:48
@robot-clickhouse robot-clickhouse added the pr-synced-to-cloud The PR is synced to the cloud repo label Dec 10, 2024
@fm4v fm4v self-assigned this Dec 12, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-not-for-changelog This PR should not be mentioned in the changelog pr-synced-to-cloud The PR is synced to the cloud repo

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants