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/05/13 23:56:30 UTC
(skywalking-banyandb) 01/01: Fix topn query nil and add more context to err
This is an automated email from the ASF dual-hosted git repository.
hanahmily pushed a commit to branch topn-entity
in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb.git
commit a3464aff95e673a89bf0af4a48843b76094ec15c
Author: Gao Hongtao <ha...@gmail.com>
AuthorDate: Tue May 14 07:55:44 2024 +0800
Fix topn query nil and add more context to err
Signed-off-by: Gao Hongtao <ha...@gmail.com>
---
banyand/internal/storage/index.go | 6 ++-
banyand/query/processor_topn.go | 1 +
pkg/index/index.go | 18 +++++++++
test/stress/vm/Makefile | 38 ++++++++++++++++++
test/stress/vm/docker-compose.yaml | 80 ++++++++++++++++++++++++++++++++++++++
5 files changed, 142 insertions(+), 1 deletion(-)
diff --git a/banyand/internal/storage/index.go b/banyand/internal/storage/index.go
index ce67627e..950d1640 100644
--- a/banyand/internal/storage/index.go
+++ b/banyand/internal/storage/index.go
@@ -101,7 +101,11 @@ func (s *seriesIndex) searchPrimary(ctx context.Context, series []*pbv1.Series)
if err != nil {
return nil, err
}
- return convertIndexSeriesToSeriesList(ss)
+ result, err := convertIndexSeriesToSeriesList(ss)
+ if err != nil {
+ return nil, errors.WithMessagef(err, "failed to convert index series to series list, matchers: %v, result:%v", seriesMatchers, ss)
+ }
+ return result, nil
}
var emptySeriesMatcher = index.SeriesMatcher{}
diff --git a/banyand/query/processor_topn.go b/banyand/query/processor_topn.go
index 8e64169f..99dc8b42 100644
--- a/banyand/query/processor_topn.go
+++ b/banyand/query/processor_topn.go
@@ -121,6 +121,7 @@ func (t *topNQueryProcessor) Rev(message bus.Message) (resp bus.Message) {
if err != nil {
ml.Error().Err(err).RawJSON("req", logger.Proto(request)).Msg("fail to close the topn plan")
resp = bus.NewMessage(bus.MessageID(now), common.NewError("fail to execute the topn plan for measure %s: %v", topNMetadata.GetName(), err))
+ return
}
defer func() {
if err = mIterator.Close(); err != nil {
diff --git a/pkg/index/index.go b/pkg/index/index.go
index 106ccaa4..92b5efa3 100644
--- a/pkg/index/index.go
+++ b/pkg/index/index.go
@@ -237,6 +237,10 @@ type Series struct {
ID common.SeriesID
}
+func (s Series) String() string {
+ return fmt.Sprintf("%s:%d", s.EntityValues, s.ID)
+}
+
// SeriesStore is an abstract of a series repository.
type SeriesStore interface {
Store
@@ -262,6 +266,20 @@ type SeriesMatcher struct {
Type SeriesMatcherType
}
+// String returns a string representation of the series matcher.
+func (s SeriesMatcher) String() string {
+ switch s.Type {
+ case SeriesMatcherTypeExact:
+ return fmt.Sprintf("exact:%s", s.Match)
+ case SeriesMatcherTypePrefix:
+ return fmt.Sprintf("prefix:%s", s.Match)
+ case SeriesMatcherTypeWildcard:
+ return fmt.Sprintf("wildcard:%s", s.Match)
+ default:
+ return fmt.Sprintf("unknown:%s", s.Match)
+ }
+}
+
// GetSearcher returns a searcher associated with input index rule type.
type GetSearcher func(location databasev1.IndexRule_Type) (Searcher, error)
diff --git a/test/stress/vm/Makefile b/test/stress/vm/Makefile
new file mode 100644
index 00000000..43eb4a21
--- /dev/null
+++ b/test/stress/vm/Makefile
@@ -0,0 +1,38 @@
+# Licensed to Apache Software Foundation (ASF) under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Apache Software Foundation (ASF) licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+NAME := vm
+
+CLI_ARGS :=
+
+ifdef PROFILE
+ CLI_ARGS := $(CLI_ARGS) --profile $(PROFILE)
+endif
+
+cli_env := DOCKER_BUILDKIT=1 USER_ID=$(shell id -u) GROUP_ID=$(shell id -g)
+
+.PHONY: clean
+clean:
+ rm -rf /tmp/banyandb-stress-vm
+
+up: clean
+ $(cli_env) docker compose -f docker-compose.yaml $(CLI_ARGS) up --build
+
+down:
+ docker compose -f docker-compose.yaml down
+
\ No newline at end of file
diff --git a/test/stress/vm/docker-compose.yaml b/test/stress/vm/docker-compose.yaml
new file mode 100644
index 00000000..b7e79cd6
--- /dev/null
+++ b/test/stress/vm/docker-compose.yaml
@@ -0,0 +1,80 @@
+version: '3.8'
+services:
+ change-vol-ownership:
+ image: ubuntu
+ user: "root"
+ group_add:
+ - '${GROUP_ID}'
+ volumes:
+ - /tmp/banyandb-stress-vm:/tmp/change-ownership
+ command: chown -R ${USER_ID}:${GROUP_ID} /tmp/change-ownership
+
+ banyandb:
+ user: "${USER_ID}:${GROUP_ID}"
+ extends:
+ file: ../../docker/base-compose.yml
+ service: banyandb
+ build:
+ dockerfile: ./docker/Dockerfile
+ context: ../../..
+ volumes:
+ - /tmp/banyandb-stress-vm:/tmp:rw,delgated
+ ports:
+ - 17913:17913
+ - 6060:6060
+ - 2121:2121
+ networks:
+ - skywalking
+ depends_on:
+ change-vol-ownership:
+ condition: service_completed_successfully
+
+ oap:
+ container_name: skywalking-server-bdb
+ image: ${OAP_IMAGE:-ghcr.io/apache/skywalking/oap:latest}
+ ports:
+ - "11800:11800"
+ - "12800:12800"
+ - "9099:9090"
+ - "3100:3100"
+ networks:
+ - skywalking
+ healthcheck:
+ test: [ "CMD-SHELL", "curl http://localhost:12800/internal/l7check" ]
+ interval: 30s
+ timeout: 10s
+ retries: 3
+ start_period: 10s
+# restart: always
+ environment: &oap-env
+ TZ: Europe/Moscow
+ SW_HEALTH_CHECKER: default
+ SW_OTEL_RECEIVER: default
+ SW_OTEL_RECEIVER_ENABLED_OC_RULES: vm
+ SW_OTEL_RECEIVER_ENABLED_OTEL_METRICS_RULES: vm
+ SW_TELEMETRY: prometheus
+ JAVA_OPTS: "-Xms2048m -Xmx2048m"
+ SW_STORAGE: banyandb
+ SW_STORAGE_BANYANDB_TARGETS: banyandb:17912
+ SW_CORE_RECORD_DATA_TTL: 14 # https://skywalking.apache.org/docs/main/next/en/setup/backend/ttl/
+ SW_CORE_METRICS_DATA_TTL: 14
+ SW_DCS_MAX_INBOUND_MESSAGE_SIZE: 5000000000
+ depends_on:
+ banyandb:
+ condition: service_healthy
+
+ ui:
+ image: ${UI_IMAGE:-ghcr.io/apache/skywalking/ui:latest}
+ container_name: skywalking-ui
+ ports:
+ - "1010:8080"
+ networks:
+ - skywalking
+ restart: always
+ environment:
+ <<: *oap-env
+ SW_OAP_ADDRESS: http://skywalking-server-bdb:12800
+ SW_ZIPKIN_ADDRESS: http://skywalking-server-bdb:9412
+
+networks:
+ skywalking:
\ No newline at end of file