mirror of
https://github.com/hanzoai/traces.git
synced 2026-10-30 18:20:41 +00:00
* Copy vparquet3 to vparquet4 folder * Create initial vParquet4 encoding * vParquet4: handle unsupported / dropped attributes (#3123) * Count dropped attributes and store them in separate column * Remove current support for arrays and kv-lists * Store per-trace service statistics in vparquet4 blocks (#2941) * Add support for attributes with array values (#3221) * Implement single values as arrays and introduce type column * Add support for array attributes * Tests more array values and fix attribute conversion * Use a combination of snappy and delta for ValueType * Vendor module google/go-cmp/cmp/cmpopts * Use all types of array attributes in TestTraceToParquet * Improve TestFieldsAreCleared * links and events schema changes (#3163) * Add attributes to instrumentation scope (#3322) * Fix typo in vParquet4 event name enconding (#3336) * Precalculate and reuse the vParquet4 schema before opening blocks * Convert block in vparquet4/test-data directory * CHANGELOG.md * Update test cases in BenchmarkBackendBlockTraceQL * Unsupported attribute values are no longer dropped * Replace ValueType column with IsArray column * Skip service stats map allocation when none are present --------- Signed-off-by: Andreas Gerstmayr <[email protected]> Co-authored-by: Andreas Gerstmayr <[email protected]> Co-authored-by: Jennie Pham <[email protected]> Co-authored-by: Andreas Gerstmayr <[email protected]>
129 lines
5.9 KiB
Go
129 lines
5.9 KiB
Go
package vparquet4
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/grafana/tempo/pkg/traceql"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestCoalesceConditions(t *testing.T) {
|
|
tcs := []struct {
|
|
f *traceql.FetchSpansRequest
|
|
expected *traceql.FetchSpansRequest
|
|
}{
|
|
{
|
|
f: &traceql.FetchSpansRequest{},
|
|
expected: &traceql.FetchSpansRequest{},
|
|
},
|
|
{
|
|
f: &traceql.FetchSpansRequest{
|
|
AllConditions: true,
|
|
Conditions: []traceql.Condition{
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpEqual, Operands: []traceql.Static{traceql.NewStaticString("foo")}},
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpEqual, Operands: []traceql.Static{traceql.NewStaticString("foo")}},
|
|
},
|
|
},
|
|
expected: &traceql.FetchSpansRequest{
|
|
AllConditions: true,
|
|
Conditions: []traceql.Condition{
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpEqual, Operands: []traceql.Static{traceql.NewStaticString("foo")}},
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpEqual, Operands: []traceql.Static{traceql.NewStaticString("foo")}},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
f: &traceql.FetchSpansRequest{
|
|
Conditions: []traceql.Condition{
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpEqual, Operands: []traceql.Static{traceql.NewStaticString("foo")}},
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpNotEqual, Operands: []traceql.Static{traceql.NewStaticString("foo")}},
|
|
},
|
|
},
|
|
expected: &traceql.FetchSpansRequest{
|
|
Conditions: []traceql.Condition{
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpNone, Operands: nil},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
f: &traceql.FetchSpansRequest{
|
|
Conditions: []traceql.Condition{
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpEqual, Operands: []traceql.Static{traceql.NewStaticString("foo")}},
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpNotEqual, Operands: []traceql.Static{traceql.NewStaticString("bar")}},
|
|
},
|
|
},
|
|
expected: &traceql.FetchSpansRequest{
|
|
Conditions: []traceql.Condition{
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpEqual, Operands: []traceql.Static{traceql.NewStaticString("foo")}},
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpNotEqual, Operands: []traceql.Static{traceql.NewStaticString("bar")}},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
f: &traceql.FetchSpansRequest{
|
|
Conditions: []traceql.Condition{
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicKind), Op: traceql.OpEqual, Operands: []traceql.Static{traceql.NewStaticString("foo")}},
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpNotEqual, Operands: []traceql.Static{traceql.NewStaticString("foo")}},
|
|
},
|
|
},
|
|
expected: &traceql.FetchSpansRequest{
|
|
Conditions: []traceql.Condition{
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicKind), Op: traceql.OpEqual, Operands: []traceql.Static{traceql.NewStaticString("foo")}},
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpNotEqual, Operands: []traceql.Static{traceql.NewStaticString("foo")}},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
f: &traceql.FetchSpansRequest{
|
|
Conditions: []traceql.Condition{
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpEqual, Operands: []traceql.Static{traceql.NewStaticString("foo")}},
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpNotEqual, Operands: []traceql.Static{traceql.NewStaticString("foo")}},
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpGreater, Operands: []traceql.Static{traceql.NewStaticString("foo")}},
|
|
},
|
|
},
|
|
expected: &traceql.FetchSpansRequest{
|
|
Conditions: []traceql.Condition{
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpNone, Operands: nil},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
f: &traceql.FetchSpansRequest{
|
|
Conditions: []traceql.Condition{
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpGreater, Operands: []traceql.Static{traceql.NewStaticString("foo")}},
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpEqual, Operands: []traceql.Static{traceql.NewStaticString("foo")}},
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpNotEqual, Operands: []traceql.Static{traceql.NewStaticString("foo")}},
|
|
},
|
|
},
|
|
expected: &traceql.FetchSpansRequest{
|
|
Conditions: []traceql.Condition{
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpNone, Operands: nil},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
f: &traceql.FetchSpansRequest{
|
|
Conditions: []traceql.Condition{
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpEqual, Operands: []traceql.Static{traceql.NewStaticString("foo")}},
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicChildCount), Op: traceql.OpEqual, Operands: []traceql.Static{traceql.NewStaticString("bar")}},
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpNotEqual, Operands: []traceql.Static{traceql.NewStaticString("foo")}},
|
|
},
|
|
},
|
|
expected: &traceql.FetchSpansRequest{
|
|
Conditions: []traceql.Condition{
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicTraceRootService), Op: traceql.OpNone, Operands: nil},
|
|
{Attribute: traceql.NewIntrinsic(traceql.IntrinsicChildCount), Op: traceql.OpEqual, Operands: []traceql.Static{traceql.NewStaticString("bar")}},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
for i, tc := range tcs {
|
|
t.Run(fmt.Sprintf("test-%d", i), func(t *testing.T) {
|
|
coalesceConditions(tc.f)
|
|
require.Equal(t, tc.expected, tc.f)
|
|
})
|
|
}
|
|
}
|