You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ha...@apache.org on 2024/09/11 15:05:20 UTC

(skywalking-banyandb) 01/01: Test query trace

This is an automated email from the ASF dual-hosted git repository.

hanahmily pushed a commit to branch trace
in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb.git

commit 683d181f02b883577ce35abd6a7692204444b328
Author: Gao Hongtao <ha...@gmail.com>
AuthorDate: Wed Sep 11 15:03:57 2024 +0000

    Test query trace
    
    Signed-off-by: Gao Hongtao <ha...@gmail.com>
---
 pkg/index/inverted/inverted_series.go      |  4 ++--
 pkg/index/inverted/inverted_series_test.go |  3 +++
 pkg/index/inverted/query.go                | 34 ++++++++++++------------------
 test/cases/measure/data/data.go            | 16 +++++++++++---
 test/cases/stream/data/data.go             | 16 +++++++++++---
 test/cases/topn/data/data.go               | 16 +++++++++++---
 6 files changed, 58 insertions(+), 31 deletions(-)

diff --git a/pkg/index/inverted/inverted_series.go b/pkg/index/inverted/inverted_series.go
index 7c3e31f2..074e30c2 100644
--- a/pkg/index/inverted/inverted_series.go
+++ b/pkg/index/inverted/inverted_series.go
@@ -54,13 +54,13 @@ func (s *store) BuildQuery(seriesMatchers []index.SeriesMatcher, secondaryQuery
 			q := bluge.NewPrefixQuery(match)
 			q.SetField(entityField)
 			qs[i] = q
-			primaryNode.Append(newPrefixNode(match, nil))
+			primaryNode.Append(newPrefixNode(match))
 		case index.SeriesMatcherTypeWildcard:
 			match := convert.BytesToString(seriesMatchers[i].Match)
 			q := bluge.NewWildcardQuery(match)
 			q.SetField(entityField)
 			qs[i] = q
-			primaryNode.Append(newWildcardNode(match, nil))
+			primaryNode.Append(newWildcardNode(match))
 		default:
 			return nil, errors.Errorf("unsupported series matcher type: %v", seriesMatchers[i].Type)
 		}
diff --git a/pkg/index/inverted/inverted_series_test.go b/pkg/index/inverted/inverted_series_test.go
index 647189d9..44fe9671 100644
--- a/pkg/index/inverted/inverted_series_test.go
+++ b/pkg/index/inverted/inverted_series_test.go
@@ -192,6 +192,7 @@ func TestStore_Search(t *testing.T) {
 		}
 		t.Run(name, func(t *testing.T) {
 			query, err := s.BuildQuery(matchers, nil)
+			require.NotEmpty(t, query.String())
 			require.NoError(t, err)
 			got, err := s.Search(context.Background(), tt.projection, query)
 			require.NoError(t, err)
@@ -282,6 +283,7 @@ func TestStore_SearchWildcard(t *testing.T) {
 				},
 			}, nil)
 			require.NoError(t, err)
+			require.NotEmpty(t, query.String())
 			got, err := s.Search(context.Background(), tt.projection, query)
 			require.NoError(t, err)
 			assert.ElementsMatch(t, tt.want, got)
@@ -349,6 +351,7 @@ func TestStore_SearchPrefix(t *testing.T) {
 				},
 			}, nil)
 			require.NoError(t, err)
+			require.NotEmpty(t, query.String())
 			got, err := s.Search(context.Background(), tt.projection, query)
 			require.NoError(t, err)
 			assert.ElementsMatch(t, tt.want, got)
diff --git a/pkg/index/inverted/query.go b/pkg/index/inverted/query.go
index b34fd719..fc110bc7 100644
--- a/pkg/index/inverted/query.go
+++ b/pkg/index/inverted/query.go
@@ -361,7 +361,9 @@ func (t *termRangeInclusiveNode) MarshalJSON() ([]byte, error) {
 		builder.WriteString(")")
 	}
 	inner["range"] = builder.String()
-	inner["index"] = t.indexRule.Metadata.Name + ":" + t.indexRule.Metadata.Group
+	if t.indexRule != nil {
+		inner["index"] = t.indexRule.Metadata.Name + ":" + t.indexRule.Metadata.Group
+	}
 	data := make(map[string]interface{}, 1)
 	data["termRangeInclusive"] = inner
 	return json.Marshal(data)
@@ -385,7 +387,9 @@ func newTermNode(term string, indexRule *databasev1.IndexRule) *termNode {
 
 func (t *termNode) MarshalJSON() ([]byte, error) {
 	inner := make(map[string]interface{}, 1)
-	inner["index"] = t.indexRule.Metadata.Name + ":" + t.indexRule.Metadata.Group
+	if t.indexRule != nil {
+		inner["index"] = t.indexRule.Metadata.Name + ":" + t.indexRule.Metadata.Group
+	}
 	inner["value"] = t.term
 	data := make(map[string]interface{}, 1)
 	data["term"] = inner
@@ -423,23 +427,18 @@ func (m *matchNode) String() string {
 }
 
 type prefixNode struct {
-	indexRule *databasev1.IndexRule
-	prefix    string
+	prefix string
 }
 
-func newPrefixNode(prefix string, indexRule *databasev1.IndexRule) *prefixNode {
+func newPrefixNode(prefix string) *prefixNode {
 	return &prefixNode{
-		indexRule: indexRule,
-		prefix:    prefix,
+		prefix: prefix,
 	}
 }
 
 func (m *prefixNode) MarshalJSON() ([]byte, error) {
-	inner := make(map[string]interface{}, 1)
-	inner["index"] = m.indexRule.Metadata.Name + ":" + m.indexRule.Metadata.Group
-	inner["value"] = m.prefix
 	data := make(map[string]interface{}, 1)
-	data["prefix"] = inner
+	data["prefix"] = m.prefix
 	return json.Marshal(data)
 }
 
@@ -448,23 +447,18 @@ func (m *prefixNode) String() string {
 }
 
 type wildcardNode struct {
-	indexRule *databasev1.IndexRule
-	wildcard  string
+	wildcard string
 }
 
-func newWildcardNode(wildcard string, indexRule *databasev1.IndexRule) *wildcardNode {
+func newWildcardNode(wildcard string) *wildcardNode {
 	return &wildcardNode{
-		indexRule: indexRule,
-		wildcard:  wildcard,
+		wildcard: wildcard,
 	}
 }
 
 func (m *wildcardNode) MarshalJSON() ([]byte, error) {
-	inner := make(map[string]interface{}, 1)
-	inner["index"] = m.indexRule.Metadata.Name + ":" + m.indexRule.Metadata.Group
-	inner["value"] = m.wildcard
 	data := make(map[string]interface{}, 1)
-	data["wildcard"] = inner
+	data["wildcard"] = m.wildcard
 	return json.Marshal(data)
 }
 
diff --git a/test/cases/measure/data/data.go b/test/cases/measure/data/data.go
index 3077c510..8bd664f2 100644
--- a/test/cases/measure/data/data.go
+++ b/test/cases/measure/data/data.go
@@ -81,23 +81,33 @@ var VerifyFn = func(innerGm gm.Gomega, sharedContext helpers.SharedContext, args
 			innerGm.Expect(resp.DataPoints[i].Sid).Should(gm.BeNumerically(">", 0))
 		}
 	}
-	innerGm.Expect(cmp.Equal(resp, want,
+	success := innerGm.Expect(cmp.Equal(resp, want,
 		protocmp.IgnoreUnknown(),
 		protocmp.IgnoreFields(&measurev1.DataPoint{}, "timestamp"),
 		protocmp.IgnoreFields(&measurev1.DataPoint{}, "version"),
 		protocmp.IgnoreFields(&measurev1.DataPoint{}, "sid"),
 		protocmp.Transform())).
 		To(gm.BeTrue(), func() string {
-			j, err := protojson.Marshal(resp)
+			var j []byte
+			j, err = protojson.Marshal(resp)
 			if err != nil {
 				return err.Error()
 			}
-			y, err := yaml.JSONToYAML(j)
+			var y []byte
+			y, err = yaml.JSONToYAML(j)
 			if err != nil {
 				return err.Error()
 			}
 			return string(y)
 		})
+	if !success {
+		return
+	}
+	query.Trace = true
+	resp, err = c.Query(ctx, query)
+	innerGm.Expect(err).NotTo(gm.HaveOccurred())
+	innerGm.Expect(resp.Trace).NotTo(gm.BeNil())
+	innerGm.Expect(resp.Trace.GetSpans()).NotTo(gm.BeEmpty())
 }
 
 //go:embed testdata/*.json
diff --git a/test/cases/stream/data/data.go b/test/cases/stream/data/data.go
index 822d35b3..6701e166 100644
--- a/test/cases/stream/data/data.go
+++ b/test/cases/stream/data/data.go
@@ -97,21 +97,31 @@ var VerifyFn = func(innerGm gm.Gomega, sharedContext helpers.SharedContext, args
 			return strings.Compare(a.ElementId, b.ElementId)
 		})
 	}
-	innerGm.Expect(cmp.Equal(resp, want,
+	success := innerGm.Expect(cmp.Equal(resp, want,
 		protocmp.IgnoreUnknown(),
 		protocmp.IgnoreFields(&streamv1.Element{}, "timestamp"),
 		protocmp.Transform())).
 		To(gm.BeTrue(), func() string {
-			j, err := protojson.Marshal(resp)
+			var j []byte
+			j, err = protojson.Marshal(resp)
 			if err != nil {
 				return err.Error()
 			}
-			y, err := yaml.JSONToYAML(j)
+			var y []byte
+			y, err = yaml.JSONToYAML(j)
 			if err != nil {
 				return err.Error()
 			}
 			return string(y)
 		})
+	if !success {
+		return
+	}
+	query.Trace = true
+	resp, err = c.Query(ctx, query)
+	innerGm.Expect(err).NotTo(gm.HaveOccurred())
+	innerGm.Expect(resp.Trace).NotTo(gm.BeNil())
+	innerGm.Expect(resp.Trace.GetSpans()).NotTo(gm.BeEmpty())
 }
 
 func loadData(stream streamv1.StreamService_WriteClient, metadata *commonv1.Metadata, dataFile string, baseTime time.Time, interval time.Duration) {
diff --git a/test/cases/topn/data/data.go b/test/cases/topn/data/data.go
index 1eb7fbb5..983be9c4 100644
--- a/test/cases/topn/data/data.go
+++ b/test/cases/topn/data/data.go
@@ -67,19 +67,29 @@ var VerifyFn = func(innerGm gm.Gomega, sharedContext helpers.SharedContext, args
 	innerGm.Expect(err).NotTo(gm.HaveOccurred())
 	want := &measurev1.TopNResponse{}
 	helpers.UnmarshalYAML(ww, want)
-	innerGm.Expect(cmp.Equal(resp, want,
+	success := innerGm.Expect(cmp.Equal(resp, want,
 		protocmp.IgnoreUnknown(),
 		protocmp.IgnoreFields(&measurev1.TopNList{}, "timestamp"),
 		protocmp.Transform())).
 		To(gm.BeTrue(), func() string {
-			j, err := protojson.Marshal(resp)
+			var j []byte
+			j, err = protojson.Marshal(resp)
 			if err != nil {
 				return err.Error()
 			}
-			y, err := yaml.JSONToYAML(j)
+			var y []byte
+			y, err = yaml.JSONToYAML(j)
 			if err != nil {
 				return err.Error()
 			}
 			return string(y)
 		})
+	if !success {
+		return
+	}
+	query.Trace = true
+	resp, err = c.TopN(ctx, query)
+	innerGm.Expect(err).NotTo(gm.HaveOccurred())
+	innerGm.Expect(resp.Trace).NotTo(gm.BeNil())
+	innerGm.Expect(resp.Trace.GetSpans()).NotTo(gm.BeEmpty())
 }