apache / doris

Apache Doris is an easy-to-use, high performance and unified analytics database.
https://doris.apache.org
Apache License 2.0
12.31k stars 3.21k forks source link

Query with JDBC catalog with too many rows or taking too long will throw error :jdbc get block address: CAUSED BY: IndexOutOfBoundsException: Index: 0, Size: 0 #33966

Open windylcx opened 4 months ago

windylcx commented 4 months ago

Search before asking

Version

2.1.1

What's Wrong?

when query jdbc(clickhouse) catalog ,it will throw erros:

mory_overcommit = true, version = 0, cpu_hard_limit = -1, scan_thread_num = 80, max_remote_scan_thread_num = 80, min_remote_scan_thread_num = 80, spill_low_watermark=50, spill_high_watermark=80], is pipeline: 1, enable cgroup soft limit: 1 I20240422 14:12:20.979311 2356409 fragment_mgr.cpp:674] Register query/load memory tracker, query/load id: d1c7f9d6b2c842e7-ae7b1c45220f0855 limit: 0 I20240422 14:12:20.979353 2356409 pipeline_x_fragment_context.cpp:176] PipelineXFragmentContext::prepare|query_id=d1c7f9d6b2c842e7-ae7b1c45220f0855|fragment_id=1|pthread_id=140428812564224 I20240422 14:12:20.979698 2356409 pipeline_x_fragment_context.cpp:176] PipelineXFragmentContext::prepare|query_id=d1c7f9d6b2c842e7-ae7b1c45220f0855|fragment_id=0|pthread_id=140428812564224 I20240422 14:12:21.641745 2355936 wal_manager.cpp:481] Scheduled(every 10s) WAL info: [/home/app/doris/be/storage/wal: limit 50460326297 Bytes, used 0 Bytes, estimated wal bytes 0 Bytes, available 50460326297 Bytes.]; I20240422 14:12:21.772367 2358913 vjdbc_connector.cpp:246] JdbcConnector::query has exec success: SELECT "log_date", "app_key", "key", "pv", "device_cnt", "uid_cnt", "dashi_uid_cnt" FROM "mail_ads"."countly_appkey_i_d" LIMIT 10000 W20240422 14:12:21.794083 2358913 jni-util.cpp:258] org.apache.doris.common.exception.UdfRuntimeException: jdbc get block address: at org.apache.doris.jdbc.DefaultJdbcExecutor.getBlockAddress(DefaultJdbcExecutor.java:277) Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:657) at java.util.ArrayList.get(ArrayList.java:433) at org.apache.doris.jdbc.DefaultJdbcExecutor.getBlockAddress(DefaultJdbcExecutor.java:255) W20240422 14:12:21.794520 2358913 status.h:380] meet error status: [INTERNAL_ERROR]UdfRuntimeException: jdbc get block address: CAUSED BY: IndexOutOfBoundsException: Index: 0, Size: 0

0#  doris::JniUtil::GetJniExceptionMsg(JNIEnv_*, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) at /home/zcp/repo_center/doris_release/doris/be/src/util/jni-util.h:117
1#  doris::vectorized::JdbcConnector::get_next(bool*, doris::vectorized::Block*, int) at /var/local/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/basic_string.h:187
2#  doris::vectorized::NewJdbcScanner::_get_block_impl(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /home/zcp/repo_center/doris_release/doris/be/src/common/status.h:449
3#  doris::vectorized::VScanner::get_block(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /home/zcp/repo_center/doris_release/doris/be/src/vec/exec/scan/vscanner.cpp:0
4#  doris::vectorized::VScanner::get_block_after_projects(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /home/zcp/repo_center/doris_release/doris/be/src/vec/exec/scan/vscanner.cpp:86
5#  doris::vectorized::ScannerScheduler::_scanner_scan(std::shared_ptr<doris::vectorized::ScannerContext>, std::shared_ptr<doris::vectorized::ScanTask>) at /home/zcp/repo_center/doris_release/doris/be/src/common/status.h:345
6#  std::_Function_handler<void (), doris::vectorized::ScannerScheduler::submit(std::shared_ptr<doris::vectorized::ScannerContext>, std::shared_ptr<doris::vectorized::ScanTask>)::$_3>::_M_invoke(std::_Any_data const&) at /var/local/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/shared_ptr_base.h:701
7#  doris::ThreadPool::dispatch_thread() at /home/zcp/repo_center/doris_release/doris/be/src/util/threadpool.cpp:0
8#  doris::Thread::supervise_thread(void*) at /var/local/ldb_toolchain/bin/../usr/include/pthread.h:562
9#  start_thread
10# clone

W20240422 14:12:21.794576 2358913 scanner_scheduler.cpp:270] Scan thread read VScanner failed: [INTERNAL_ERROR]UdfRuntimeException: jdbc get block address: CAUSED BY: IndexOutOfBoundsException: Index: 0, Size: 0

0#  doris::JniUtil::GetJniExceptionMsg(JNIEnv_*, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) at /home/zcp/repo_center/doris_release/doris/be/src/util/jni-util.h:117
1#  doris::vectorized::JdbcConnector::get_next(bool*, doris::vectorized::Block*, int) at /var/local/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/basic_string.h:187
2#  doris::vectorized::NewJdbcScanner::_get_block_impl(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /home/zcp/repo_center/doris_release/doris/be/src/common/status.h:449
3#  doris::vectorized::VScanner::get_block(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /home/zcp/repo_center/doris_release/doris/be/src/vec/exec/scan/vscanner.cpp:0
4#  doris::vectorized::VScanner::get_block_after_projects(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /home/zcp/repo_center/doris_release/doris/be/src/vec/exec/scan/vscanner.cpp:86
5#  doris::vectorized::ScannerScheduler::_scanner_scan(std::shared_ptr<doris::vectorized::ScannerContext>, std::shared_ptr<doris::vectorized::ScanTask>) at /home/zcp/repo_center/doris_release/doris/be/src/common/status.h:345
6#  std::_Function_handler<void (), doris::vectorized::ScannerScheduler::submit(std::shared_ptr<doris::vectorized::ScannerContext>, std::shared_ptr<doris::vectorized::ScanTask>)::$_3>::_M_invoke(std::_Any_data const&) at /var/local/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/shared_ptr_base.h:701
7#  doris::ThreadPool::dispatch_thread() at /home/zcp/repo_center/doris_release/doris/be/src/util/threadpool.cpp:0
8#  doris::Thread::supervise_thread(void*) at /var/local/ldb_toolchain/bin/../usr/include/pthread.h:562
9#  start_thread
10# clone

W20240422 14:12:21.794725 2358780 task_scheduler.cpp:353] Pipeline task failed. query_id: 0-0|d1c7f9d6b2c842e7-ae7b1c45220f0855 reason: [INTERNAL_ERROR]UdfRuntimeException: jdbc get block address: CAUSED BY: IndexOutOfBoundsException: Index: 0, Size: 0

0#  doris::JniUtil::GetJniExceptionMsg(JNIEnv_*, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) at /home/zcp/repo_center/doris_release/doris/be/src/util/jni-util.h:117
1#  doris::vectorized::JdbcConnector::get_next(bool*, doris::vectorized::Block*, int) at /var/local/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/basic_string.h:187
2#  doris::vectorized::NewJdbcScanner::_get_block_impl(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /home/zcp/repo_center/doris_release/doris/be/src/common/status.h:449
3#  doris::vectorized::VScanner::get_block(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /home/zcp/repo_center/doris_release/doris/be/src/vec/exec/scan/vscanner.cpp:0
4#  doris::vectorized::VScanner::get_block_after_projects(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /home/zcp/repo_center/doris_release/doris/be/src/vec/exec/scan/vscanner.cpp:86
5#  doris::vectorized::ScannerScheduler::_scanner_scan(std::shared_ptr<doris::vectorized::ScannerContext>, std::shared_ptr<doris::vectorized::ScanTask>) at /home/zcp/repo_center/doris_release/doris/be/src/common/status.h:345
6#  std::_Function_handler<void (), doris::vectorized::ScannerScheduler::submit(std::shared_ptr<doris::vectorized::ScannerContext>, std::shared_ptr<doris::vectorized::ScanTask>)::$_3>::_M_invoke(std::_Any_data const&) at /var/local/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/shared_ptr_base.h:701
7#  doris::ThreadPool::dispatch_thread() at /home/zcp/repo_center/doris_release/doris/be/src/util/threadpool.cpp:0
8#  doris::Thread::supervise_thread(void*) at /var/local/ldb_toolchain/bin/../usr/include/pthread.h:562
9#  start_thread
10# clone

I20240422 14:12:21.794862 2358780 pipeline_x_fragment_context.cpp:130] PipelineXFragmentContext::cancel|query_id=d1c7f9d6b2c842e7-ae7b1c45220f0855|fragment_id=0|reason=3|error message=UdfRuntimeException: jdbc get block address: CAUSED BY: IndexOutOfBoundsException: Index: 0, Size: 0 I20240422 14:12:21.794891 2358780 pipeline_x_fragment_context.cpp:130] PipelineXFragmentContext::cancel|query_id=d1c7f9d6b2c842e7-ae7b1c45220f0855|fragment_id=1|reason=3|error message=UdfRuntimeException: jdbc get block address: CAUSED BY: IndexOutOfBoundsException: Index: 0, Size: 0 W20240422 14:12:21.794920 2358780 pipeline_x_fragment_context.cpp:143] PipelineXFragmentContext cancel instance: d1c7f9d6b2c842e7-ae7b1c45220f0856

What You Expected?

no error

How to Reproduce?

it not about the sql,when query rows >10000 or a query take too long,it will throw the error.

and select * from test.test1 limit 10 is ok.

1.create catalog: CREATE CATALOG test_catalog PROPERTIES ( "type"="jdbc", "user"="test", "password"="test", "jdbc_url" = "jdbc:clickhouse://10.0.0.1:8123", "driver_url"="clickhouse-jdbc-0.4.6.jar", "driver_class" = "com.clickhouse.jdbc.ClickHouseDriver" );

  1. switch test_catalog

    select * from test.test1 limit 10000;

Anything Else?

No response

Are you willing to submit PR?

Code of Conduct

zy-kkk commented 4 months ago

33529 fix