This is an automated email from the ASF dual-hosted git repository.
kxiao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new fcc4cfb9009 [Fix](Variant) add more info before crash in serialization
(#29344)
fcc4cfb9009 is described below
commit fcc4cfb9009ba146de23b75a58475469c563befc
Author: lihangyu <[email protected]>
AuthorDate: Sun Dec 31 11:17:36 2023 +0800
[Fix](Variant) add more info before crash in serialization (#29344)
---
be/src/vec/columns/column_object.cpp | 8 ++++++++
regression-test/suites/variant_p0/desc.groovy | 2 +-
regression-test/suites/variant_p0/load.groovy | 2 +-
regression-test/suites/variant_p0/with_index/load.groovy | 2 +-
regression-test/suites/variant_p2/load.groovy | 2 +-
5 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/be/src/vec/columns/column_object.cpp
b/be/src/vec/columns/column_object.cpp
index 782a2967f03..fb2bf8c9072 100644
--- a/be/src/vec/columns/column_object.cpp
+++ b/be/src/vec/columns/column_object.cpp
@@ -1079,6 +1079,14 @@ bool ColumnObject::serialize_one_row_to_json_format(int
row, rapidjson::StringBu
VLOG_DEBUG << "dump structure " <<
JsonFunctions::print_json_value(*doc_structure);
#endif
for (const auto& subcolumn : subcolumns) {
+ if (subcolumn->data.data.empty() ||
subcolumn->data.get_finalized_column_ptr() == nullptr) {
+ // TODO this is a tmp defensive code to prevent from crash and
+ // print more info about crash info
+ LOG(WARNING) << "Dump crash debug info"
+ << ", structure:" <<
JsonFunctions::print_json_value(*doc_structure)
+ << ", num_rows: " << num_rows << ", row_position: "
<< row;
+ return false;
+ }
find_and_set_leave_value(subcolumn->data.get_finalized_column_ptr(),
subcolumn->path,
subcolumn->data.get_least_common_type_serde(), root,
doc_structure->GetAllocator(), row);
diff --git a/regression-test/suites/variant_p0/desc.groovy
b/regression-test/suites/variant_p0/desc.groovy
index 1ccbaecb6c6..281893dd428 100644
--- a/regression-test/suites/variant_p0/desc.groovy
+++ b/regression-test/suites/variant_p0/desc.groovy
@@ -107,7 +107,7 @@ suite("regression_test_variant_desc", "nonConcurrent"){
table_name = "no_sparse_columns"
create_table.call(table_name, "4")
sql "set enable_two_phase_read_opt = false;"
- set_be_config.call("variant_ratio_of_defaults_as_sparse_column", "1")
+ set_be_config.call("variant_ratio_of_defaults_as_sparse_column", "1.0")
sql """insert into ${table_name} select 0, '{"a": 11245, "b" : [123,
{"xx" : 1}], "c" : {"c" : 456, "d" : null, "e" : 7.111}}' as json_str
union all select 0, '{"a": 1123}' as json_str union all select 0,
'{"a" : 1234, "xxxx" : "kaana"}' as json_str from numbers("number" = "4096")
limit 4096 ;"""
qt_sql_3 """desc ${table_name}"""
diff --git a/regression-test/suites/variant_p0/load.groovy
b/regression-test/suites/variant_p0/load.groovy
index b23ae19d12f..a8793bddec1 100644
--- a/regression-test/suites/variant_p0/load.groovy
+++ b/regression-test/suites/variant_p0/load.groovy
@@ -289,7 +289,7 @@ suite("regression_test_variant", "variant_type"){
create_table.call(table_name, "4")
// sql "set enable_two_phase_read_opt = false;"
// no sparse columns
- set_be_config.call("variant_ratio_of_defaults_as_sparse_column", "1")
+ set_be_config.call("variant_ratio_of_defaults_as_sparse_column", "1.0")
load_json_data.call(table_name, """${getS3Url() +
'/load/logdata.json'}""")
qt_sql_32 """ select json_extract(v, "\$.json.parseFailed") from
logdata where json_extract(v, "\$.json.parseFailed") != 'null' order by k
limit 1;"""
qt_sql_32_1 """select cast(v:json.parseFailed as string) from logdata
where cast(v:json.parseFailed as string) is not null and k = 162 limit 1;"""
diff --git a/regression-test/suites/variant_p0/with_index/load.groovy
b/regression-test/suites/variant_p0/with_index/load.groovy
index e124629169e..f4bda1216eb 100644
--- a/regression-test/suites/variant_p0/with_index/load.groovy
+++ b/regression-test/suites/variant_p0/with_index/load.groovy
@@ -43,7 +43,7 @@ suite("regression_test_variant_with_index", "nonConcurrent"){
}
assertTrue(useTime <= OpTimeout, "wait_for_latest_op_on_table_finish
timeout")
}
- set_be_config.call("variant_ratio_of_defaults_as_sparse_column", "0")
+ set_be_config.call("variant_ratio_of_defaults_as_sparse_column", "1.0")
set_be_config.call("variant_threshold_rows_to_estimate_sparse_column", "0")
def table_name = "var_with_index"
sql "DROP TABLE IF EXISTS var_with_index"
diff --git a/regression-test/suites/variant_p2/load.groovy
b/regression-test/suites/variant_p2/load.groovy
index 5813d02fb63..2d232e1e255 100644
--- a/regression-test/suites/variant_p2/load.groovy
+++ b/regression-test/suites/variant_p2/load.groovy
@@ -88,7 +88,7 @@ suite("github_event_advance_p2", "variant_type,p2"){
try {
def table_name = "github_events"
- set_be_config.call("variant_ratio_of_defaults_as_sparse_column", "1")
+ set_be_config.call("variant_ratio_of_defaults_as_sparse_column", "1.0")
def s3load_paral_wait = {tbl, fmt, path, paral ->
String ak = getS3AK()
String sk = getS3SK()
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]