This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb.git
The following commit(s) were added to refs/heads/main by this push:
new 63be6e80 Add an e2e case to verify cluster mode (#335)
63be6e80 is described below
commit 63be6e80bef82ea274d7352cc7a461b757d28355
Author: Gao Hongtao <[email protected]>
AuthorDate: Thu Sep 21 15:03:46 2023 +0800
Add an e2e case to verify cluster mode (#335)
---
.github/workflows/e2e.storage.yml | 2 +
banyand/metadata/client.go | 21 ++-
banyand/metadata/schema/etcd.go | 1 +
banyand/tsdb/buffer.go | 2 +-
pkg/run/run.go | 2 +-
test/docker/base-compose.yml | 34 ++++-
.../cluster/docker-compose.yml} | 64 +++++++--
test/e2e-v2/cases/cluster/e2e.yaml | 50 +++++++
test/e2e-v2/cases/cluster/storage-cases.yaml | 154 +++++++++++++++++++++
test/e2e-v2/script/docker-compose/base-compose.yml | 23 +++
10 files changed, 331 insertions(+), 22 deletions(-)
diff --git a/.github/workflows/e2e.storage.yml
b/.github/workflows/e2e.storage.yml
index dec0d6ac..8f35d6d0 100644
--- a/.github/workflows/e2e.storage.yml
+++ b/.github/workflows/e2e.storage.yml
@@ -47,6 +47,8 @@ jobs:
config: test/e2e-v2/cases/profiling/ebpf/oncpu/banyandb/e2e.yaml
- name: Event BanyanDB
config: test/e2e-v2/cases/event/banyandb/e2e.yaml
+ - name: BanyanDB Cluster Mode
+ config: test/e2e-v2/cases/cluster/e2e.yaml
env:
TAG: ${{ github.sha }}
steps:
diff --git a/banyand/metadata/client.go b/banyand/metadata/client.go
index 9a166d38..35ecbcec 100644
--- a/banyand/metadata/client.go
+++ b/banyand/metadata/client.go
@@ -29,6 +29,7 @@ import (
commonv1
"github.com/apache/skywalking-banyandb/api/proto/banyandb/common/v1"
databasev1
"github.com/apache/skywalking-banyandb/api/proto/banyandb/database/v1"
"github.com/apache/skywalking-banyandb/banyand/metadata/schema"
+ "github.com/apache/skywalking-banyandb/pkg/logger"
"github.com/apache/skywalking-banyandb/pkg/run"
)
@@ -87,9 +88,8 @@ func (s *clientService) PreRun(ctx context.Context) error {
return errors.New("node roles is empty")
}
nodeRoles := val.([]databasev1.Role)
- ctxRegister, cancel := context.WithTimeout(ctx, time.Second*5)
- defer cancel()
- return s.schemaRegistry.RegisterNode(ctxRegister, &databasev1.Node{
+ l := logger.GetLogger(s.Name())
+ nodeInfo := &databasev1.Node{
Metadata: &commonv1.Metadata{
Name: node.NodeID,
},
@@ -97,7 +97,20 @@ func (s *clientService) PreRun(ctx context.Context) error {
HttpAddress: node.HTTPAddress,
Roles: nodeRoles,
CreatedAt: timestamppb.Now(),
- })
+ }
+ for {
+ ctxRegister, cancel := context.WithTimeout(ctx, time.Second*10)
+ err = s.schemaRegistry.RegisterNode(ctxRegister, nodeInfo)
+ cancel()
+ if errors.Is(err, context.DeadlineExceeded) {
+ l.Warn().Strs("etcd-endpoints",
s.endpoints).Msg("register node timeout, retrying...")
+ continue
+ }
+ if err == nil {
+ l.Info().Stringer("info", nodeInfo).Msg("register node
successfully")
+ }
+ return err
+ }
}
func (s *clientService) Serve() run.StopNotify {
diff --git a/banyand/metadata/schema/etcd.go b/banyand/metadata/schema/etcd.go
index d06d865e..8b90490e 100644
--- a/banyand/metadata/schema/etcd.go
+++ b/banyand/metadata/schema/etcd.go
@@ -133,6 +133,7 @@ func NewEtcdSchemaRegistry(options ...RegistryOption)
(Registry, error) {
DialTimeout: 5 * time.Second,
DialKeepAliveTime: 30 * time.Second,
DialKeepAliveTimeout: 10 * time.Second,
+ AutoSyncInterval: 5 * time.Minute,
Logger: l,
}
client, err := clientv3.New(config)
diff --git a/banyand/tsdb/buffer.go b/banyand/tsdb/buffer.go
index 2d8764fd..e1fe1c50 100644
--- a/banyand/tsdb/buffer.go
+++ b/banyand/tsdb/buffer.go
@@ -391,6 +391,7 @@ func (bsb *bufferShardBucket) recoveryWorkSegment(segment
wal.Segment) {
elementIndex := 0
for element := values.Front(); element != nil; element =
element.Next() {
timestamp := timestamps[elementIndex]
+ wg.Add(1)
bsb.writeCh <- operation{
key: logEntry.GetSeriesID(),
value: element.Value.([]byte),
@@ -403,7 +404,6 @@ func (bsb *bufferShardBucket) recoveryWorkSegment(segment
wal.Segment) {
}
},
}
- wg.Add(1)
elementIndex++
}
}
diff --git a/pkg/run/run.go b/pkg/run/run.go
index cd4d4f6d..4da2c23c 100644
--- a/pkg/run/run.go
+++ b/pkg/run/run.go
@@ -395,7 +395,7 @@ func (g *Group) Run(ctx context.Context) (err error) {
}
g.log.Debug().Uint32("ran", uint32(idx+1)).Uint32("total",
uint32(len(g.p))).Str("name", g.p[idx].Name()).Msg("pre-run")
if err := g.p[idx].PreRun(context.WithValue(ctx,
common.ContextNodeRolesKey, rr)); err != nil {
- return err
+ return errors.WithMessage(err, fmt.Sprintf("pre-run
module[%s]", g.p[idx].Name()))
}
}
diff --git a/test/docker/base-compose.yml b/test/docker/base-compose.yml
index 98f0a428..44a9bd47 100644
--- a/test/docker/base-compose.yml
+++ b/test/docker/base-compose.yml
@@ -25,6 +25,27 @@ services:
interval: 5s
timeout: 10s
retries: 120
+
+ liaison:
+ hostname: liaison
+ expose:
+ - 17912
+ - 2121
+ - 6060
+ command: liaison --etcd-endpoints=http://etcd:2379
+ healthcheck:
+ test: wget --spider http://localhost:17913 || wget --spider
--no-check-certificate https://localhost:17913 || exit 1
+ interval: 5s
+ timeout: 10s
+ retries: 120
+
+ data:
+ hostname: data
+ expose:
+ - 17912
+ - 2121
+ - 6060
+ command: data --etcd-endpoints=http://etcd:2379
agent:
image:
"ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java8"
@@ -108,7 +129,18 @@ services:
image: grafana/k6:latest
ports:
- "6565:6565"
-
+
+ etcd:
+ image: gcr.io/etcd-development/etcd:v3.5.9
+ ports:
+ - "2379:2379"
+ command: etcd --listen-client-urls http://0.0.0.0:2379
--advertise-client-urls http://etcd:2379 --max-request-bytes 10485760
--backend-batch-limit 10000
+ healthcheck:
+ test: ["CMD", "etcdctl", "endpoint", "health"]
+ interval: 1m30s
+ timeout: 10s
+ retries: 3
+ start_period: 40s
volumes:
sw_agent:
\ No newline at end of file
diff --git a/test/e2e-v2/script/docker-compose/base-compose.yml
b/test/e2e-v2/cases/cluster/docker-compose.yml
similarity index 51%
copy from test/e2e-v2/script/docker-compose/base-compose.yml
copy to test/e2e-v2/cases/cluster/docker-compose.yml
index d44292f1..87956813 100644
--- a/test/e2e-v2/script/docker-compose/base-compose.yml
+++ b/test/e2e-v2/cases/cluster/docker-compose.yml
@@ -16,43 +16,77 @@
version: '2.1'
services:
- banyandb:
+ etcd:
extends:
- file: ../../../docker/base-compose.yml
- service: banyandb
- image: "apache/skywalking-banyandb:${TAG}"
+ file: ../../script/docker-compose/base-compose.yml
+ service: etcd
networks:
- e2e
-
- agent:
+
+ data:
extends:
- file: ../../../docker/base-compose.yml
- service: agent
+ file: ../../script/docker-compose/base-compose.yml
+ service: data
+ networks:
+ - e2e
+
+ liaison:
+ extends:
+ file: ../../script/docker-compose/base-compose.yml
+ service: liaison
networks:
- e2e
oap:
extends:
- file: ../../../docker/base-compose.yml
+ file: ../../script/docker-compose/base-compose.yml
service: oap
+ environment:
+ SW_STORAGE: banyandb
+ SW_STORAGE_BANYANDB_HOST: "liaison"
+ ports:
+ - 12800
+ depends_on:
+ liaison:
+ condition: service_healthy
+
+ agent:
+ extends:
+ file: ../../script/docker-compose/base-compose.yml
+ service: agent
networks:
- e2e
- volumes:
- - ./../prepare/setup-oap/log4j2.xml:/skywalking/config/log4j2.xml
provider:
extends:
- file: ../../../docker/base-compose.yml
+ file: ../../script/docker-compose/base-compose.yml
service: provider
+ ports:
+ - 9090
networks:
- e2e
+ depends_on:
+ oap:
+ condition: service_healthy
+ agent:
+ condition: service_completed_successfully
consumer:
extends:
- file: ../../../docker/base-compose.yml
+ file: ../../script/docker-compose/base-compose.yml
service: consumer
- networks:
- - e2e
+ ports:
+ - 9092
+ depends_on:
+ oap:
+ condition: service_healthy
+ provider:
+ condition: service_healthy
+ agent:
+ condition: service_completed_successfully
networks:
e2e:
+
+volumes:
+ sw_agent:
\ No newline at end of file
diff --git a/test/e2e-v2/cases/cluster/e2e.yaml
b/test/e2e-v2/cases/cluster/e2e.yaml
new file mode 100644
index 00000000..9f321cc6
--- /dev/null
+++ b/test/e2e-v2/cases/cluster/e2e.yaml
@@ -0,0 +1,50 @@
+# Licensed to the 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.
+# The 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.
+
+# This file is used to show how to write configuration files and can be used
to test.
+
+setup:
+ env: compose
+ file: docker-compose.yml
+ timeout: 20m
+ init-system-environment: ../../script/env
+ steps:
+ - name: set PATH
+ command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+ - name: install yq
+ command: bash test/e2e-v2/script/prepare/setup-e2e-shell/install.sh yq
+ - name: install swctl
+ command: bash test/e2e-v2/script/prepare/setup-e2e-shell/install.sh swctl
+
+trigger:
+ action: http
+ interval: 3s
+ times: 10
+ url: http://${consumer_host}:${consumer_9092}/users
+ method: POST
+ body: '{"id":"123","name":"skywalking"}'
+ headers:
+ "Content-Type": "application/json"
+
+verify:
+ # verify with retry strategy
+ retry:
+ # max retry count
+ count: 20
+ # the interval between two retries, in millisecond.
+ interval: 10s
+ cases:
+ - includes:
+ - storage-cases.yaml
\ No newline at end of file
diff --git a/test/e2e-v2/cases/cluster/storage-cases.yaml
b/test/e2e-v2/cases/cluster/storage-cases.yaml
new file mode 100644
index 00000000..0498a582
--- /dev/null
+++ b/test/e2e-v2/cases/cluster/storage-cases.yaml
@@ -0,0 +1,154 @@
+# Licensed to the 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.
+# The 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.
+
+cases:
+ # layer list
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql layer ls
+ expected: ../storage/expected/layer.yml
+ # service list
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql service layer GENERAL
+ expected: ../storage/expected/service.yml
+ # service instance list
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql instance list
--service-name=e2e-service-provider
+ expected: ../storage/expected/service-instance-provider.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql instance list
--service-name=e2e-service-consumer
+ expected: ../storage/expected/service-instance-consumer.yml
+ # service endpoint
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql endpoint list
--keyword=users --service-name=e2e-service-provider
+ expected: ../storage/expected/service-endpoint-provider.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql endpoint list
--keyword=users --service-name=e2e-service-consumer
+ expected: ../storage/expected/service-endpoint-consumer.yml
+ # dependency service
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql dependency service
--service-name=e2e-service-provider
+ expected: ../storage/expected/dependency-services-provider.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql dependency service
--service-name=e2e-service-consumer
+ expected: ../storage/expected/dependency-services-consumer.yml
+ # dependency instance
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql dependency instance
--service-name=e2e-service-consumer --dest-service-name=e2e-service-provider
+ expected: ../storage/expected/dependency-instance.yml
+ # dependency endpoint
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql dependency endpoint
--service-name=e2e-service-provider --endpoint-name=POST:/users
+ expected: ../storage/expected/dependency-endpoint-provider.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql dependency endpoint
--service-name=e2e-service-consumer --endpoint-name=POST:/users
+ expected: ../storage/expected/dependency-endpoint-consumer.yml
+ # trace segment list
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql trace ls
+ expected: ../storage/expected/traces-list.yml
+ # negative tags search: relationship should be logical AND instead of
logical OR
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql trace ls --tags
http.method=POST,http.status_code=201
+ expected: ../storage/expected/empty-traces-list.yml
+ # trace detail
+ - query: |
+ swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql
trace $( \
+ swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql trace ls \
+ | yq e '.traces | select(.[].endpointnames[0]=="POST:/users") |
.[0].traceids[0]' -
+ )
+ expected: ../storage/expected/trace-users-detail.yml
+ # service metrics
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics sorted --name
service_apdex 5
+ expected: ../storage/expected/metrics-top-service.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics top --name
service_sla 5
+ expected: ../storage/expected/metrics-top-service.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=service_sla --service-name=e2e-service-provider |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=service_cpm --service-name=e2e-service-provider |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=service_resp_time --service-name=e2e-service-provider |yq e 'to_entries'
-
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=service_apdex --service-name=e2e-service-provider |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=service_sla --service-name=e2e-service-consumer |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=service_cpm --service-name=e2e-service-consumer |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=service_resp_time --service-name=e2e-service-consumer |yq e 'to_entries'
-
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=service_apdex --service-name=e2e-service-consumer |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ # service instance metrics
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=service_instance_resp_time --instance-name=consumer1
--service-name=e2e-service-consumer |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=service_instance_cpm --instance-name=consumer1
--service-name=e2e-service-consumer |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=service_instance_sla --instance-name=consumer1
--service-name=e2e-service-consumer |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ # service instance JVM metrics
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=instance_jvm_memory_heap --instance-name=consumer1
--service-name=e2e-service-consumer |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=instance_jvm_memory_heap_max --instance-name=consumer1
--service-name=e2e-service-consumer |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=instance_jvm_memory_noheap --instance-name=consumer1
--service-name=e2e-service-consumer |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=instance_jvm_thread_live_count --instance-name=consumer1
--service-name=e2e-service-consumer |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=instance_jvm_thread_daemon_count --instance-name=consumer1
--service-name=e2e-service-consumer |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=instance_jvm_thread_peak_count --instance-name=consumer1
--service-name=e2e-service-consumer |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=instance_jvm_thread_runnable_state_thread_count
--instance-name=consumer1 --service-name=e2e-service-consumer |yq e
'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=instance_jvm_class_loaded_class_count --instance-name=consumer1
--service-name=e2e-service-consumer |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=instance_jvm_class_total_loaded_class_count --instance-name=consumer1
--service-name=e2e-service-consumer |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=instance_jvm_memory_heap --instance-name=provider1
--service-name=e2e-service-provider |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=instance_jvm_memory_heap_max --instance-name=provider1
--service-name=e2e-service-provider |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=instance_jvm_memory_noheap --instance-name=provider1
--service-name=e2e-service-provider |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=instance_jvm_thread_live_count --instance-name=provider1
--service-name=e2e-service-provider |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=instance_jvm_thread_daemon_count --instance-name=provider1
--service-name=e2e-service-provider |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=instance_jvm_thread_peak_count --instance-name=provider1
--service-name=e2e-service-provider |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=instance_jvm_thread_runnable_state_thread_count
--instance-name=provider1 --service-name=e2e-service-provider |yq e
'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=instance_jvm_class_loaded_class_count --instance-name=provider1
--service-name=e2e-service-provider |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=instance_jvm_class_total_loaded_class_count --instance-name=provider1
--service-name=e2e-service-provider |yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ # service endpoint metrics
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=endpoint_cpm --endpoint-name=POST:/users
--service-name=e2e-service-provider | yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=endpoint_resp_time --endpoint-name=POST:/users
--service-name=e2e-service-provider | yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=endpoint_sla --endpoint-name=POST:/users
--service-name=e2e-service-provider | yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=endpoint_cpm --endpoint-name=POST:/users
--service-name=e2e-service-consumer | yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=endpoint_resp_time --endpoint-name=POST:/users
--service-name=e2e-service-consumer | yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear
--name=endpoint_sla --endpoint-name=POST:/users
--service-name=e2e-service-consumer | yq e 'to_entries' -
+ expected: ../storage/expected/metrics-has-value.yml
+ # service endpoint metrics percentile
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear
--name=endpoint_percentile --endpoint-name=POST:/users
--service-name=e2e-service-consumer |yq e 'to_entries | with(.[] ;
.value=(.value | to_entries))' -
+ expected: ../storage/expected/metrics-has-value-percentile.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear
--name=endpoint_percentile --endpoint-name=POST:/users
--service-name=e2e-service-consumer |yq e 'to_entries | with(.[] ;
.value=(.value | to_entries))' -
+ expected: ../storage/expected/metrics-has-value-percentile.yml
+
+ # native event: event list
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql event list
+ expected: ../storage/expected/event-list.yml
+
+ - query: |
+ curl -s -XPOST http://${provider_host}:${provider_9090}/users -d
'{"id":"123","name":"SinglesBar"}' -H "Content-Type: application/json" >
/dev/null;
+ sleep 5;
+ swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql
trace $( \
+ swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql trace ls --order startTime
--service-name "e2e-service-provider" --endpoint-name "POST:/users" \
+ | yq e '.traces[0].traceids[0]' - \
+ )
+ expected: ../storage/expected/trace-users-detail.yml
diff --git a/test/e2e-v2/script/docker-compose/base-compose.yml
b/test/e2e-v2/script/docker-compose/base-compose.yml
index d44292f1..0a7354d6 100644
--- a/test/e2e-v2/script/docker-compose/base-compose.yml
+++ b/test/e2e-v2/script/docker-compose/base-compose.yml
@@ -23,6 +23,22 @@ services:
image: "apache/skywalking-banyandb:${TAG}"
networks:
- e2e
+
+ liaison:
+ extends:
+ file: ../../../docker/base-compose.yml
+ service: liaison
+ image: "apache/skywalking-banyandb:${TAG}"
+ networks:
+ - e2e
+
+ data:
+ extends:
+ file: ../../../docker/base-compose.yml
+ service: data
+ image: "apache/skywalking-banyandb:${TAG}"
+ networks:
+ - e2e
agent:
extends:
@@ -54,5 +70,12 @@ services:
networks:
- e2e
+ etcd:
+ extends:
+ file: ../../../docker/base-compose.yml
+ service: etcd
+ networks:
+ - e2e
+
networks:
e2e: