From 119d217846278028f50b66754a375f83d9c6aedb Mon Sep 17 00:00:00 2001 From: nityanandagohain <nityanandagohain@gmail.com> Date: Fri, 22 Nov 2024 21:04:04 +0530 Subject: [PATCH 1/3] fix: add settings to allow distributed_product_mode for trace panel --- pkg/query-service/app/traces/v4/query_builder.go | 2 ++ pkg/query-service/app/traces/v4/query_builder_test.go | 2 +- pkg/query-service/constants/constants.go | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/query-service/app/traces/v4/query_builder.go b/pkg/query-service/app/traces/v4/query_builder.go index 4a0f8f3ef9..9d88a8b67e 100644 --- a/pkg/query-service/app/traces/v4/query_builder.go +++ b/pkg/query-service/app/traces/v4/query_builder.go @@ -255,6 +255,8 @@ func buildTracesQuery(start, end, step int64, mq *v3.BuilderQuery, panelType v3. withSubQuery = tracesV3.AddOffsetToQuery(withSubQuery, mq.Offset) } query = fmt.Sprintf(constants.TracesExplorerViewSQLSelectBeforeSubQuery, constants.SIGNOZ_TRACE_DBNAME, constants.SIGNOZ_SPAN_INDEX_V3) + withSubQuery + ") " + fmt.Sprintf(constants.TracesExplorerViewSQLSelectAfterSubQuery, constants.SIGNOZ_TRACE_DBNAME, constants.SIGNOZ_SPAN_INDEX_V3, timeFilter) + // adding this to avoid the distributed product mode error which doesn't allow global in + query += " settings distributed_product_mode='allow'" } else if panelType == v3.PanelTypeList { if len(mq.SelectColumns) == 0 { return "", fmt.Errorf("select columns cannot be empty for panelType %s", panelType) diff --git a/pkg/query-service/app/traces/v4/query_builder_test.go b/pkg/query-service/app/traces/v4/query_builder_test.go index 76c9874409..b6139d58f0 100644 --- a/pkg/query-service/app/traces/v4/query_builder_test.go +++ b/pkg/query-service/app/traces/v4/query_builder_test.go @@ -531,7 +531,7 @@ func Test_buildTracesQuery(t *testing.T) { "WHERE (seen_at_ts_bucket_start >= 1680064560) AND (seen_at_ts_bucket_start <= 1680066458) AND simpleJSONExtractString(labels, 'service.name') = 'myService' AND labels like '%service.name%myService%')) " + "ORDER BY durationNano DESC LIMIT 1 BY traceID LIMIT 100) AS inner_subquery ) AS subQuery ON signoz_traces.distributed_signoz_index_v3.traceID = subQuery.traceID WHERE (timestamp >= '1680066360726210000' AND " + "timestamp <= '1680066458000000000') AND (ts_bucket_start >= 1680064560 AND ts_bucket_start <= 1680066458) GROUP BY subQuery.traceID, subQuery.durationNano, subQuery.name, subQuery.serviceName ORDER BY " + - "subQuery.durationNano desc LIMIT 1 BY subQuery.traceID;", + "subQuery.durationNano desc LIMIT 1 BY subQuery.traceID settings distributed_product_mode='allow'", }, { name: "Test order by value with having", diff --git a/pkg/query-service/constants/constants.go b/pkg/query-service/constants/constants.go index b66f60dfa9..c4ea1fbff2 100644 --- a/pkg/query-service/constants/constants.go +++ b/pkg/query-service/constants/constants.go @@ -348,7 +348,7 @@ const ( TracesExplorerViewSQLSelectBeforeSubQuery = "SELECT subQuery.serviceName, subQuery.name, count() AS " + "span_count, subQuery.durationNano, subQuery.traceID AS traceID FROM %s.%s INNER JOIN ( SELECT * FROM " TracesExplorerViewSQLSelectAfterSubQuery = "AS inner_subquery ) AS subQuery ON %s.%s.traceID = subQuery.traceID WHERE %s " + - "GROUP BY subQuery.traceID, subQuery.durationNano, subQuery.name, subQuery.serviceName ORDER BY subQuery.durationNano desc LIMIT 1 BY subQuery.traceID;" + "GROUP BY subQuery.traceID, subQuery.durationNano, subQuery.name, subQuery.serviceName ORDER BY subQuery.durationNano desc LIMIT 1 BY subQuery.traceID" TracesExplorerViewSQLSelectQuery = "SELECT subQuery.serviceName, subQuery.name, count() AS " + "span_count, subQuery.durationNano, traceID FROM %s.%s GLOBAL INNER JOIN subQuery ON %s.traceID = subQuery.traceID GROUP " + "BY traceID, subQuery.durationNano, subQuery.name, subQuery.serviceName ORDER BY subQuery.durationNano desc;" From 8eab87479d79dfc0dccf7e81b3d5d242ea41836c Mon Sep 17 00:00:00 2001 From: nityanandagohain <nityanandagohain@gmail.com> Date: Fri, 22 Nov 2024 21:06:54 +0530 Subject: [PATCH 2/3] fix: tests fixed --- pkg/query-service/app/traces/v3/query_builder_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/query-service/app/traces/v3/query_builder_test.go b/pkg/query-service/app/traces/v3/query_builder_test.go index 23b73a134d..ed9f74e6ba 100644 --- a/pkg/query-service/app/traces/v3/query_builder_test.go +++ b/pkg/query-service/app/traces/v3/query_builder_test.go @@ -1169,7 +1169,7 @@ var testBuildTracesQueryData = []struct { "AND stringTagMap['method'] = 'GET' ORDER BY durationNano DESC LIMIT 1 BY traceID LIMIT 100)" + " AS inner_subquery ) AS subQuery " + "ON signoz_traces.distributed_signoz_index_v2.traceID = subQuery.traceID WHERE (timestamp >= '1680066360726210000' AND timestamp <= '1680066458000000000') " + - "GROUP BY subQuery.traceID, subQuery.durationNano, subQuery.name, subQuery.serviceName ORDER BY subQuery.durationNano desc LIMIT 1 BY subQuery.traceID;", + "GROUP BY subQuery.traceID, subQuery.durationNano, subQuery.name, subQuery.serviceName ORDER BY subQuery.durationNano desc LIMIT 1 BY subQuery.traceID", PanelType: v3.PanelTypeTrace, }, } From 60d663e32a993c29df287986d278bd61a82900fa Mon Sep 17 00:00:00 2001 From: nityanandagohain <nityanandagohain@gmail.com> Date: Fri, 22 Nov 2024 22:24:53 +0530 Subject: [PATCH 3/3] fix: add 10gb memory limit --- pkg/query-service/app/traces/v4/query_builder.go | 2 +- pkg/query-service/app/traces/v4/query_builder_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/query-service/app/traces/v4/query_builder.go b/pkg/query-service/app/traces/v4/query_builder.go index 9d88a8b67e..366f3f6ee4 100644 --- a/pkg/query-service/app/traces/v4/query_builder.go +++ b/pkg/query-service/app/traces/v4/query_builder.go @@ -256,7 +256,7 @@ func buildTracesQuery(start, end, step int64, mq *v3.BuilderQuery, panelType v3. } query = fmt.Sprintf(constants.TracesExplorerViewSQLSelectBeforeSubQuery, constants.SIGNOZ_TRACE_DBNAME, constants.SIGNOZ_SPAN_INDEX_V3) + withSubQuery + ") " + fmt.Sprintf(constants.TracesExplorerViewSQLSelectAfterSubQuery, constants.SIGNOZ_TRACE_DBNAME, constants.SIGNOZ_SPAN_INDEX_V3, timeFilter) // adding this to avoid the distributed product mode error which doesn't allow global in - query += " settings distributed_product_mode='allow'" + query += " settings distributed_product_mode='allow', max_memory_usage=10000000000" } else if panelType == v3.PanelTypeList { if len(mq.SelectColumns) == 0 { return "", fmt.Errorf("select columns cannot be empty for panelType %s", panelType) diff --git a/pkg/query-service/app/traces/v4/query_builder_test.go b/pkg/query-service/app/traces/v4/query_builder_test.go index b6139d58f0..d29f77a74b 100644 --- a/pkg/query-service/app/traces/v4/query_builder_test.go +++ b/pkg/query-service/app/traces/v4/query_builder_test.go @@ -531,7 +531,7 @@ func Test_buildTracesQuery(t *testing.T) { "WHERE (seen_at_ts_bucket_start >= 1680064560) AND (seen_at_ts_bucket_start <= 1680066458) AND simpleJSONExtractString(labels, 'service.name') = 'myService' AND labels like '%service.name%myService%')) " + "ORDER BY durationNano DESC LIMIT 1 BY traceID LIMIT 100) AS inner_subquery ) AS subQuery ON signoz_traces.distributed_signoz_index_v3.traceID = subQuery.traceID WHERE (timestamp >= '1680066360726210000' AND " + "timestamp <= '1680066458000000000') AND (ts_bucket_start >= 1680064560 AND ts_bucket_start <= 1680066458) GROUP BY subQuery.traceID, subQuery.durationNano, subQuery.name, subQuery.serviceName ORDER BY " + - "subQuery.durationNano desc LIMIT 1 BY subQuery.traceID settings distributed_product_mode='allow'", + "subQuery.durationNano desc LIMIT 1 BY subQuery.traceID settings distributed_product_mode='allow', max_memory_usage=10000000000", }, { name: "Test order by value with having",