Repository: vanus-labs/vanus
Pull request #595 (2023-04-14 11:55:54)

chore: bump version to v0.8.0
<!--

Thank you for contributing to Vanus!

PR Title Format: 

feat/fix/refactor/docs/...: what's changed

Note: see https://github.com/vanus-labs/vanus/blob/main/CONTRIBUTING.md to know details about title format

-->

### What problem does this PR solve?

<!--

Please create an issue first to describe the problem

There MUST be one line starting with "Issue Number:  ".

-->

Issue Number: None

### Problem Summary

### What is changed and how does it work?

### Check List

<!-- At least one of them must be included. -->

#### Tests

- [ ] Unit test
- [ ] Integration test
- [ ] Manual test (add detailed scripts or steps below)
- [x] No code



Patch:
diff --git a/Makefile b/Makefile
index 7219db8..2ed5ca2 100644
--- a/Makefile
+++ b/Makefile
@@ -32,14 +32,14 @@ docker-push-store:
 docker-build-store:
 	docker build -t ${DOCKER_REPO}/store:${IMAGE_TAG} $(DOCKER_BUILD_ARG) -f build/images/store/Dockerfile .
 build-store:
-	$(GO_BUILD)  -o bin/store cmd/store/main.go
+	$(GO_BUILD) -o bin/store cmd/store/main.go
 
 docker-push-gateway:
 	docker buildx build --platform ${DOCKER_PLATFORM} -t ${DOCKER_REPO}/gateway:${IMAGE_TAG} -f build/images/gateway/Dockerfile . --push
 docker-build-gateway:
 	docker build -t ${DOCKER_REPO}/gateway:${IMAGE_TAG} $(DOCKER_BUILD_ARG) -f build/images/gateway/Dockerfile .
 build-gateway:
-	$(GO_BUILD)  -o bin/gateway cmd/gateway/main.go
+	$(GO_BUILD) -o bin/gateway cmd/gateway/main.go
 
 docker-push-test-infra:
 	docker build -t ${DOCKER_REPO}/test-infra:${IMAGE_TAG} -f test/infra/Dockerfile .
@@ -59,7 +59,7 @@ docker-push-toolbox:
 	docker buildx build --no-cache --platform ${DOCKER_PLATFORM} -t ${DOCKER_REPO}/toolbox:${IMAGE_TAG} -f build/toolbox/Dockerfile . --push
 
 build-cmd:
-	$(GO_BUILD)  -ldflags "${LD_FLAGS}" -o bin/vsctl ./vsctl/
+	$(GO_BUILD) -ldflags "${LD_FLAGS}" -o bin/vsctl ./vsctl/
 
 docker-push-root:
 	docker buildx build --platform ${DOCKER_PLATFORM} -t ${DOCKER_REPO}/root-controller:${IMAGE_TAG} -f build/images/root-controller/Dockerfile . --push
@@ -80,7 +80,7 @@ docker-push-trigger:
 docker-build-trigger:
 	docker build -t ${DOCKER_REPO}/trigger:${IMAGE_TAG} $(DOCKER_BUILD_ARG) -f build/images/trigger/Dockerfile .
 build-trigger:
-	$(GO_BUILD)  -o bin/trigger cmd/trigger/main.go
+	$(GO_BUILD) -o bin/trigger cmd/trigger/main.go
 
 docker-push-timer:
 	docker buildx build --platform ${DOCKER_PLATFORM} -t ${DOCKER_REPO}/timer:${IMAGE_TAG} -f build/images/timer/Dockerfile . --push
@@ -90,4 +90,4 @@ build-timer:
 	$(GO_BUILD)  -o bin/timer cmd/timer/main.go
 
 docker-push-aio:
-	docker buildx build --platform ${DOCKER_PLATFORM} -t ${DOCKER_REPO}/all-in-one:${IMAGE_TAG} -f build/all-in-one/Dockerfile . --push
\ No newline at end of file
+	docker buildx build --platform ${DOCKER_PLATFORM} -t ${DOCKER_REPO}/all-in-one:${IMAGE_TAG} -f build/all-in-one/Dockerfile . --push
diff --git a/README.md b/README.md
index f80e802..c8afa9b 100644
--- a/README.md
+++ b/README.md
@@ -73,11 +73,9 @@ Vanus helps users build event pipelines between SaaS, cloud services, and cloud
 You can install Vanus with a single command within 1 minute. Check out our [website](https://vanus.ai) for detailed information.
 
 ```shell
-kubectl apply -f https://dl.vanus.ai/all-in-one/v0.5.4.yml
+kubectl apply -f https://dl.vanus.ai/all-in-one/v0.8.0.yml
 ```
 
-We also provide an [interactive Kubernetes environment](https://play.linkall.com) to simply deploy and try Vanus in your browser.
-
 ## Community
 
 We have a few channels for contact:
diff --git a/client/go.mod b/client/go.mod
index dd05c95..7a6ad60 100644
--- a/client/go.mod
+++ b/client/go.mod
@@ -6,9 +6,9 @@ require (
 	github.com/cloudevents/sdk-go/v2 v2.13.0
 	github.com/golang/mock v1.6.0
 	github.com/scylladb/go-set v1.0.2
-	github.com/vanus-labs/vanus/observability v0.5.7
-	github.com/vanus-labs/vanus/pkg v0.5.7
-	github.com/vanus-labs/vanus/proto v0.7.1-0.20230307065123-722eac99dbf9
+	github.com/vanus-labs/vanus/observability v0.8.0
+	github.com/vanus-labs/vanus/pkg v0.8.0
+	github.com/vanus-labs/vanus/proto v0.8.0
 	go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.4
 	go.opentelemetry.io/otel/trace v1.11.2
 	go.uber.org/atomic v1.9.0
@@ -26,7 +26,7 @@ require (
 	github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
 	github.com/mattn/go-colorable v0.1.12 // indirect
-	github.com/mattn/go-isatty v0.0.14 // indirect
+	github.com/mattn/go-isatty v0.0.16 // indirect
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 	github.com/modern-go/reflect2 v1.0.2 // indirect
 	github.com/pkg/errors v0.9.1 // indirect
@@ -39,9 +39,9 @@ require (
 	go.opentelemetry.io/proto/otlp v0.19.0 // indirect
 	go.uber.org/multierr v1.7.0 // indirect
 	go.uber.org/zap v1.17.0 // indirect
-	golang.org/x/net v0.4.0 // indirect
-	golang.org/x/sys v0.3.0 // indirect
-	golang.org/x/text v0.5.0 // indirect
+	golang.org/x/net v0.8.0 // indirect
+	golang.org/x/sys v0.6.0 // indirect
+	golang.org/x/text v0.8.0 // indirect
 	golang.org/x/time v0.1.0 // indirect
 	google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect
@@ -54,4 +54,4 @@ replace (
 	github.com/vanus-labs/vanus/raft => ../raft
 )
 
-replace github.com/vanus-labs/vanus => ./FORBIDDEN_DEPENDENCY
+replace github.com/vanus-labs/vanus => ../FORBIDDEN_DEPENDENCY
diff --git a/client/go.sum b/client/go.sum
index 3b963b9..ecff9ae 100644
--- a/client/go.sum
+++ b/client/go.sum
@@ -158,8 +158,9 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40=
 github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
-github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
 github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
+github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
+github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -286,15 +287,15 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R
 golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
-golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU=
-golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
+golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
+golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 h1:nt+Q6cXKz4MosCSpnbMtqiQ8Oz0pxTef2B4Vca2lvfk=
+golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -334,8 +335,9 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ=
-golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
+golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -343,8 +345,8 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM=
-golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
+golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
diff --git a/deploy/aws-eks/aws-eks.yml b/deploy/aws-eks/aws-eks.yml
index 9c4d412..7f82793 100644
--- a/deploy/aws-eks/aws-eks.yml
+++ b/deploy/aws-eks/aws-eks.yml
@@ -217,20 +217,20 @@ metadata:
 spec:
   clusterIP: None
   clusterIPs:
-  - None
+    - None
   internalTrafficPolicy: Cluster
   ipFamilies:
-  - IPv4
+    - IPv4
   ipFamilyPolicy: SingleStack
   ports:
-  - name: client
-    port: 2379
-    protocol: TCP
-    targetPort: client
-  - name: peer
-    port: 2380
-    protocol: TCP
-    targetPort: peer
+    - name: client
+      port: 2379
+      protocol: TCP
+      targetPort: client
+    - name: peer
+      port: 2380
+      protocol: TCP
+      targetPort: peer
   publishNotReadyAddresses: true
   selector:
     app: vanus-etcd
@@ -245,8 +245,8 @@ metadata:
 spec:
   clusterIP: None
   ports:
-  - name: vanus-controller
-    port: 2048
+    - name: vanus-controller
+      port: 2048
   selector:
     app: vanus-controller
 ---
@@ -257,12 +257,12 @@ metadata:
   namespace: vanus
 spec:
   ports:
-  - name: proxy
-    port: 8080
-    targetPort: 8080
-  - name: cloudevents
-    port: 8081
-    targetPort: 8081
+    - name: proxy
+      port: 8080
+      targetPort: 8080
+    - name: cloudevents
+      port: 8081
+      targetPort: 8081
   selector:
     app: vanus-gateway
   type: NodePort
@@ -287,51 +287,51 @@ spec:
         app: vanus-gateway
     spec:
       containers:
-      - image: public.ecr.aws/vanus/gateway:3ebbdfe
-        imagePullPolicy: IfNotPresent
-        name: gateway
-        ports:
-        - containerPort: 8080
-          name: proxy
-        - containerPort: 8081
-          name: cloudevents
-        - containerPort: 2112
-          name: metrics
-          protocol: TCP
-        resources:
-          limits:
-            cpu: 2000m
-            memory: 2000Mi
-          requests:
-            cpu: 2000m
-            memory: 2000Mi
-        volumeMounts:
-        - mountPath: /vanus/config
-          name: config-gateway
-      - args:
-        - --no-collector.wifi
-        - --no-collector.hwmon
-        - --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/pods/.+)($|/)
-        - --collector.netclass.ignored-devices=^(veth.*)$
-        image: prom/node-exporter
-        name: node-exporter
-        ports:
-        - containerPort: 9100
-          name: metrics
-          protocol: TCP
-        resources:
-          limits:
-            cpu: 250m
-            memory: 180Mi
-          requests:
-            cpu: 102m
-            memory: 180Mi
+        - image: public.ecr.aws/vanus/gateway:v0.8.0
+          imagePullPolicy: IfNotPresent
+          name: gateway
+          ports:
+            - containerPort: 8080
+              name: proxy
+            - containerPort: 8081
+              name: cloudevents
+            - containerPort: 2112
+              name: metrics
+              protocol: TCP
+          resources:
+            limits:
+              cpu: 2000m
+              memory: 2000Mi
+            requests:
+              cpu: 2000m
+              memory: 2000Mi
+          volumeMounts:
+            - mountPath: /vanus/config
+              name: config-gateway
+        - args:
+            - --no-collector.wifi
+            - --no-collector.hwmon
+            - --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/pods/.+)($|/)
+            - --collector.netclass.ignored-devices=^(veth.*)$
+          image: prom/node-exporter
+          name: node-exporter
+          ports:
+            - containerPort: 9100
+              name: metrics
+              protocol: TCP
+          resources:
+            limits:
+              cpu: 250m
+              memory: 180Mi
+            requests:
+              cpu: 102m
+              memory: 180Mi
       nodeSelector:
         type: calculation
       volumes:
-      - configMap:
+        - configMap:
+            name: config-gateway
           name: config-gateway
-        name: config-gateway
 ---
 apiVersion: apps/v1
 kind: Deployment
@@ -353,54 +353,54 @@ spec:
         app: vanus-timer
     spec:
       containers:
-      - env:
-        - name: VANUS_LOG_LEVEL
-          value: DEBUG
-        - name: POD_IP
-          valueFrom:
-            fieldRef:
-              fieldPath: status.podIP
-        image: public.ecr.aws/vanus/timer:3ebbdfe
-        imagePullPolicy: IfNotPresent
-        name: timer
-        ports:
-        - containerPort: 2112
-          name: metrics
-          protocol: TCP
-        resources:
-          limits:
-            cpu: 2000m
-            memory: 4000Mi
-          requests:
-            cpu: 2000m
-            memory: 4000Mi
-        volumeMounts:
-        - mountPath: /vanus/config
-          name: config-timer
-      - args:
-        - --no-collector.wifi
-        - --no-collector.hwmon
-        - --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/pods/.+)($|/)
-        - --collector.netclass.ignored-devices=^(veth.*)$
-        image: prom/node-exporter
-        name: node-exporter
-        ports:
-        - containerPort: 9100
-          name: metrics
-          protocol: TCP
-        resources:
-          limits:
-            cpu: 250m
-            memory: 180Mi
-          requests:
-            cpu: 102m
-            memory: 180Mi
+        - env:
+            - name: VANUS_LOG_LEVEL
+              value: DEBUG
+            - name: POD_IP
+              valueFrom:
+                fieldRef:
+                  fieldPath: status.podIP
+          image: public.ecr.aws/vanus/timer:v0.8.0
+          imagePullPolicy: IfNotPresent
+          name: timer
+          ports:
+            - containerPort: 2112
+              name: metrics
+              protocol: TCP
+          resources:
+            limits:
+              cpu: 2000m
+              memory: 4000Mi
+            requests:
+              cpu: 2000m
+              memory: 4000Mi
+          volumeMounts:
+            - mountPath: /vanus/config
+              name: config-timer
+        - args:
+            - --no-collector.wifi
+            - --no-collector.hwmon
+            - --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/pods/.+)($|/)
+            - --collector.netclass.ignored-devices=^(veth.*)$
+          image: prom/node-exporter
+          name: node-exporter
+          ports:
+            - containerPort: 9100
+              name: metrics
+              protocol: TCP
+          resources:
+            limits:
+              cpu: 250m
+              memory: 180Mi
+            requests:
+              cpu: 102m
+              memory: 180Mi
       nodeSelector:
         type: calculation
       volumes:
-      - configMap:
+        - configMap:
+            name: config-timer
           name: config-timer
-        name: config-timer
 ---
 apiVersion: apps/v1
 kind: Deployment
@@ -422,67 +422,67 @@ spec:
         app: vanus-trigger
     spec:
       containers:
-      - env:
-        - name: VANUS_LOG_LEVEL
-          value: INFO
-        - name: POD_IP
-          valueFrom:
-            fieldRef:
-              fieldPath: status.podIP
-        image: public.ecr.aws/vanus/trigger:3ebbdfe
-        imagePullPolicy: IfNotPresent
-        name: trigger
-        ports:
-        - containerPort: 2148
-          name: grpc
-        - containerPort: 2112
-          name: metrics
-          protocol: TCP
-        resources:
-          limits:
-            cpu: 2000m
-            memory: 2000Mi
-          requests:
-            cpu: 2000m
-            memory: 2000Mi
-        volumeMounts:
-        - mountPath: /vanus/config
-          name: config-trigger
-      - args:
-        - --no-collector.wifi
-        - --no-collector.hwmon
-        - --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/pods/.+)($|/)
-        - --collector.netclass.ignored-devices=^(veth.*)$
-        image: prom/node-exporter
-        name: node-exporter
-        ports:
-        - containerPort: 9100
-          name: metrics
-          protocol: TCP
-        resources:
-          limits:
-            cpu: 250m
-            memory: 180Mi
-          requests:
-            cpu: 102m
-            memory: 180Mi
+        - env:
+            - name: VANUS_LOG_LEVEL
+              value: INFO
+            - name: POD_IP
+              valueFrom:
+                fieldRef:
+                  fieldPath: status.podIP
+          image: public.ecr.aws/vanus/trigger:v0.8.0
+          imagePullPolicy: IfNotPresent
+          name: trigger
+          ports:
+            - containerPort: 2148
+              name: grpc
+            - containerPort: 2112
+              name: metrics
+              protocol: TCP
+          resources:
+            limits:
+              cpu: 2000m
+              memory: 2000Mi
+            requests:
+              cpu: 2000m
+              memory: 2000Mi
+          volumeMounts:
+            - mountPath: /vanus/config
+              name: config-trigger
+        - args:
+            - --no-collector.wifi
+            - --no-collector.hwmon
+            - --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/pods/.+)($|/)
+            - --collector.netclass.ignored-devices=^(veth.*)$
+          image: prom/node-exporter
+          name: node-exporter
+          ports:
+            - containerPort: 9100
+              name: metrics
+              protocol: TCP
+          resources:
+            limits:
+              cpu: 250m
+              memory: 180Mi
+            requests:
+              cpu: 102m
+              memory: 180Mi
       initContainers:
-      - command:
-        - /bin/sh
-        - -c
-        - sysctl -w net.ipv4.tcp_tw_reuse=1 && sysctl -w net.ipv4.tcp_fin_timeout=10
-          && sysctl -w net.ipv4.ip_local_port_range='4096 65000' && sysctl -p
-        image: busybox
-        name: set-system-parameters
-        securityContext:
-          capabilities: {}
-          privileged: true
+        - command:
+            - /bin/sh
+            - -c
+            - sysctl -w net.ipv4.tcp_tw_reuse=1 && sysctl -w net.ipv4.tcp_fin_timeout=10
+              && sysctl -w net.ipv4.ip_local_port_range='4096 65000' && sysctl -p
+          image: busybox
+          name: set-system-parameters
+          securityContext:
+            capabilities: {}
+            privileged: true
       nodeSelector:
         type: storage
       volumes:
-      - configMap:
+        - configMap:
+            name: config-trigger
           name: config-trigger
-        name: config-trigger
 ---
 apiVersion: apps/v1
 kind: StatefulSet
@@ -505,96 +505,96 @@ spec:
         app: vanus-etcd
     spec:
       containers:
-      - env:
-        - name: BITNAMI_DEBUG
-          value: "false"
-        - name: MY_POD_IP
-          valueFrom:
-            fieldRef:
-              apiVersion: v1
-              fieldPath: status.podIP
-        - name: MY_POD_NAME
-          valueFrom:
-            fieldRef:
-              apiVersion: v1
-              fieldPath: metadata.name
-        - name: MY_STS_NAME
-          value: vanus-etcd
-        - name: ETCDCTL_API
-          value: "3"
-        - name: ETCD_ON_K8S
-          value: "yes"
-        - name: ETCD_START_FROM_SNAPSHOT
-          value: "no"
-        - name: ETCD_INIT_SNAPSHOT_FILENAME
-          value: "snapshotdb"
-        - name: ETCD_DISASTER_RECOVERY
-          value: "no"
-        - name: ETCD_NAME
-          value: $(MY_POD_NAME)
-        - name: ETCD_DATA_DIR
-          value: /bitnami/etcd/data
-        - name: ETCD_LOG_LEVEL
-          value: info
-        - name: ALLOW_NONE_AUTHENTICATION
-          value: "yes"
-        - name: ETCD_ADVERTISE_CLIENT_URLS
-          value: http://$(MY_POD_NAME).vanus-etcd.vanus.svc.cluster.local:2379,http://vanus-etcd.vanus.svc.cluster.local:2379
-        - name: ETCD_LISTEN_CLIENT_URLS
-          value: http://0.0.0.0:2379
-        - name: ETCD_INITIAL_ADVERTISE_PEER_URLS
-          value: http://$(MY_POD_NAME).vanus-etcd.vanus.svc.cluster.local:2380
-        - name: ETCD_LISTEN_PEER_URLS
-          value: http://0.0.0.0:2380
-        - name: ETCD_INITIAL_CLUSTER_STATE
-          value: new
-        - name: ETCD_INITIAL_CLUSTER
-          value: vanus-etcd-0=http://vanus-etcd-0.vanus-etcd.vanus.svc.cluster.local:2380,vanus-etcd-1=http://vanus-etcd-1.vanus-etcd.vanus.svc.cluster.local:2380,vanus-etcd-2=http://vanus-etcd-2.vanus-etcd.vanus.svc.cluster.local:2380
-        - name: ETCD_CLUSTER_DOMAIN
-          value: vanus-etcd.vanus.svc.cluster.local
-        image: public.ecr.aws/vanus/etcd:v3.5.7
-        imagePullPolicy: IfNotPresent
-        lifecycle:
-          preStop:
+        - env:
+            - name: BITNAMI_DEBUG
+              value: "false"
+            - name: MY_POD_IP
+              valueFrom:
+                fieldRef:
+                  apiVersion: v1
+                  fieldPath: status.podIP
+            - name: MY_POD_NAME
+              valueFrom:
+                fieldRef:
+                  apiVersion: v1
+                  fieldPath: metadata.name
+            - name: MY_STS_NAME
+              value: vanus-etcd
+            - name: ETCDCTL_API
+              value: "3"
+            - name: ETCD_ON_K8S
+              value: "yes"
+            - name: ETCD_START_FROM_SNAPSHOT
+              value: "no"
+            - name: ETCD_INIT_SNAPSHOT_FILENAME
+              value: "snapshotdb"
+            - name: ETCD_DISASTER_RECOVERY
+              value: "no"
+            - name: ETCD_NAME
+              value: $(MY_POD_NAME)
+            - name: ETCD_DATA_DIR
+              value: /bitnami/etcd/data
+            - name: ETCD_LOG_LEVEL
+              value: info
+            - name: ALLOW_NONE_AUTHENTICATION
+              value: "yes"
+            - name: ETCD_ADVERTISE_CLIENT_URLS
+              value: http://$(MY_POD_NAME).vanus-etcd.vanus.svc.cluster.local:2379,http://vanus-etcd.vanus.svc.cluster.local:2379
+            - name: ETCD_LISTEN_CLIENT_URLS
+              value: http://0.0.0.0:2379
+            - name: ETCD_INITIAL_ADVERTISE_PEER_URLS
+              value: http://$(MY_POD_NAME).vanus-etcd.vanus.svc.cluster.local:2380
+            - name: ETCD_LISTEN_PEER_URLS
+              value: http://0.0.0.0:2380
+            - name: ETCD_INITIAL_CLUSTER_STATE
+              value: new
+            - name: ETCD_INITIAL_CLUSTER
+              value: vanus-etcd-0=http://vanus-etcd-0.vanus-etcd.vanus.svc.cluster.local:2380,vanus-etcd-1=http://vanus-etcd-1.vanus-etcd.vanus.svc.cluster.local:2380,vanus-etcd-2=http://vanus-etcd-2.vanus-etcd.vanus.svc.cluster.local:2380
+            - name: ETCD_CLUSTER_DOMAIN
+              value: vanus-etcd.vanus.svc.cluster.local
+          image: public.ecr.aws/vanus/etcd:v3.5.7
+          imagePullPolicy: IfNotPresent
+          lifecycle:
+            preStop:
+              exec:
+                command:
+                  - /opt/bitnami/scripts/etcd/prestop.sh
+          livenessProbe:
+            exec:
+              command:
+                - /opt/bitnami/scripts/etcd/healthcheck.sh
+            failureThreshold: 5
+            initialDelaySeconds: 60
+            periodSeconds: 30
+            successThreshold: 1
+            timeoutSeconds: 5
+          name: etcd
+          ports:
+            - containerPort: 2379
+              name: client
+              protocol: TCP
+            - containerPort: 2380
+              name: peer
+              protocol: TCP
+          readinessProbe:
             exec:
               command:
-              - /opt/bitnami/scripts/etcd/prestop.sh
-        livenessProbe:
-          exec:
-            command:
-            - /opt/bitnami/scripts/etcd/healthcheck.sh
-          failureThreshold: 5
-          initialDelaySeconds: 60
-          periodSeconds: 30
-          successThreshold: 1
-          timeoutSeconds: 5
-        name: etcd
-        ports:
-        - containerPort: 2379
-          name: client
-          protocol: TCP
-        - containerPort: 2380
-          name: peer
-          protocol: TCP
-        readinessProbe:
-          exec:
-            command:
-            - /opt/bitnami/scripts/etcd/healthcheck.sh
-          failureThreshold: 5
-          initialDelaySeconds: 60
-          periodSeconds: 10
-          successThreshold: 1
-          timeoutSeconds: 5
-        resources: {}
-        securityContext:
-          allowPrivilegeEscalation: false
-          runAsNonRoot: true
-          runAsUser: 1001
-        terminationMessagePath: /dev/termination-log
-        terminationMessagePolicy: File
-        volumeMounts:
-        - name: data
-          mountPath: /bitnami/etcd
+                - /opt/bitnami/scripts/etcd/healthcheck.sh
+            failureThreshold: 5
+            initialDelaySeconds: 60
+            periodSeconds: 10
+            successThreshold: 1
+            timeoutSeconds: 5
+          resources: {}
+          securityContext:
+            allowPrivilegeEscalation: false
+            runAsNonRoot: true
+            runAsUser: 1001
+          terminationMessagePath: /dev/termination-log
+          terminationMessagePolicy: File
+          volumeMounts:
+            - name: data
+              mountPath: /bitnami/etcd
       dnsPolicy: ClusterFirst
       restartPolicy: Always
       schedulerName: default-scheduler
@@ -606,20 +606,20 @@ spec:
   updateStrategy:
     type: RollingUpdate
   volumeClaimTemplates:
-  - apiVersion: v1
-    kind: PersistentVolumeClaim
-    metadata:
-      creationTimestamp: null
-      labels:
-        app: vanus-etcd
-      name: data
-    spec:
-      accessModes:
-      - ReadWriteOnce
-      resources:
-        requests:
-          storage: 10Gi
-      volumeMode: Filesystem
+    - apiVersion: v1
+      kind: PersistentVolumeClaim
+      metadata:
+        creationTimestamp: null
+        labels:
+          app: vanus-etcd
+        name: data
+      spec:
+        accessModes:
+          - ReadWriteOnce
+        resources:
+          requests:
+            storage: 10Gi
+        volumeMode: Filesystem
 ---
 apiVersion: apps/v1
 kind: StatefulSet
@@ -642,82 +642,82 @@ spec:
         app: vanus-controller
     spec:
       containers:
-      - command:
-        - /bin/sh
-        - -c
-        - NODE_ID=${HOSTNAME##*-} /vanus/bin/controller
-        env:
-        - name: VANUS_LOG_LEVEL
-          value: DEBUG
-        - name: POD_NAME
-          valueFrom:
-            fieldRef:
-              fieldPath: metadata.name
-        - name: POD_IP
-          valueFrom:
-            fieldRef:
-              fieldPath: status.podIP
-        image: public.ecr.aws/vanus/controller:3ebbdfe
-        imagePullPolicy: IfNotPresent
-        name: controller
-        ports:
-        - containerPort: 2048
-          name: grpc
-        - containerPort: 2379
-          name: etcd-client
-        - containerPort: 2380
-          name: etcd-peer
-        - containerPort: 2112
-          name: metrics
-          protocol: TCP
-        resources:
-          limits:
-            cpu: 1000m
-            memory: 4000Mi
-          requests:
-            cpu: 1000m
-            memory: 4000Mi
-        volumeMounts:
-        - mountPath: /vanus/config
-          name: config-controller
-        - mountPath: /data
-          name: data
-      - args:
-        - --no-collector.wifi
-        - --no-collector.hwmon
-        - --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/pods/.+)($|/)
-        - --collector.netclass.ignored-devices=^(veth.*)$
-        image: prom/node-exporter
-        name: node-exporter
-        ports:
-        - containerPort: 9100
-          name: metrics
-          protocol: TCP
-        resources:
-          limits:
-            cpu: 250m
-            memory: 180Mi
-          requests:
-            cpu: 102m
-            memory: 180Mi
+        - command:
+            - /bin/sh
+            - -c
+            - NODE_ID=${HOSTNAME##*-} /vanus/bin/controller
+          env:
+            - name: VANUS_LOG_LEVEL
+              value: DEBUG
+            - name: POD_NAME
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.name
+            - name: POD_IP
+              valueFrom:
+                fieldRef:
+                  fieldPath: status.podIP
+          image: public.ecr.aws/vanus/controller:v0.8.0
+          imagePullPolicy: IfNotPresent
+          name: controller
+          ports:
+            - containerPort: 2048
+              name: grpc
+            - containerPort: 2379
+              name: etcd-client
+            - containerPort: 2380
+              name: etcd-peer
+            - containerPort: 2112
+              name: metrics
+              protocol: TCP
+          resources:
+            limits:
+              cpu: 1000m
+              memory: 4000Mi
+            requests:
+              cpu: 1000m
+              memory: 4000Mi
+          volumeMounts:
+            - mountPath: /vanus/config
+              name: config-controller
+            - mountPath: /data
+              name: data
+        - args:
+            - --no-collector.wifi
+            - --no-collector.hwmon
+            - --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/pods/.+)($|/)
+            - --collector.netclass.ignored-devices=^(veth.*)$
+          image: prom/node-exporter
+          name: node-exporter
+          ports:
+            - containerPort: 9100
+              name: metrics
+              protocol: TCP
+          resources:
+            limits:
+              cpu: 250m
+              memory: 180Mi
+            requests:
+              cpu: 102m
+              memory: 180Mi
       nodeSelector:
         type: storage
       volumes:
-      - configMap:
+        - configMap:
+            name: config-controller
           name: config-controller
-        name: config-controller
   volumeClaimTemplates:
-  - metadata:
-      labels:
-        app: vanus-controller
-      name: data
-    spec:
-      accessModes:
-      - ReadWriteOnce
-      resources:
-        requests:
-          storage: 20Gi
-      storageClassName: gp3
+    - metadata:
+        labels:
+          app: vanus-controller
+        name: data
+      spec:
+        accessModes:
+          - ReadWriteOnce
+        resources:
+          requests:
+            storage: 20Gi
+        storageClassName: gp3
 ---
 apiVersion: apps/v1
 kind: StatefulSet
@@ -740,74 +740,74 @@ spec:
         app: vanus-store
     spec:
       containers:
-      - command:
-        - /bin/sh
-        - -c
-        - VOLUME_ID=${HOSTNAME##*-} /vanus/bin/store
-        env:
-        - name: VANUS_LOG_LEVEL
-          value: INFO
-        - name: POD_IP
-          valueFrom:
-            fieldRef:
-              fieldPath: status.podIP
-        image: public.ecr.aws/vanus/store:3ebbdfe
-        imagePullPolicy: IfNotPresent
-        name: store
-        ports:
-        - containerPort: 11811
-          name: grpc
-        - containerPort: 2112
-          name: metrics
-          protocol: TCP
-        resources:
-          limits:
-            cpu: 2000m
-            memory: 8000Mi
-          requests:
-            cpu: 2000m
-            memory: 8000Mi
-        volumeMounts:
-        - mountPath: /vanus/config
-          name: config-store
-        - mountPath: /data
-          name: data
-      - args:
-        - --no-collector.wifi
-        - --no-collector.hwmon
-        - --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/pods/.+)($|/)
-        - --collector.netclass.ignored-devices=^(veth.*)$
-        image: prom/node-exporter
-        name: node-exporter
-        ports:
-        - containerPort: 9100
-          name: metrics
-          protocol: TCP
-        resources:
-          limits:
-            cpu: 250m
-            memory: 180Mi
-          requests:
-            cpu: 102m
-            memory: 180Mi
+        - command:
+            - /bin/sh
+            - -c
+            - VOLUME_ID=${HOSTNAME##*-} /vanus/bin/store
+          env:
+            - name: VANUS_LOG_LEVEL
+              value: INFO
+            - name: POD_IP
+              valueFrom:
+                fieldRef:
+                  fieldPath: status.podIP
+          image: public.ecr.aws/vanus/store:v0.8.0
+          imagePullPolicy: IfNotPresent
+          name: store
+          ports:
+            - containerPort: 11811
+              name: grpc
+            - containerPort: 2112
+              name: metrics
+              protocol: TCP
+          resources:
+            limits:
+              cpu: 2000m
+              memory: 8000Mi
+            requests:
+              cpu: 2000m
+              memory: 8000Mi
+          volumeMounts:
+            - mountPath: /vanus/config
+              name: config-store
+            - mountPath: /data
+              name: data
+        - args:
+            - --no-collector.wifi
+            - --no-collector.hwmon
+            - --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/pods/.+)($|/)
+            - --collector.netclass.ignored-devices=^(veth.*)$
+          image: prom/node-exporter
+          name: node-exporter
+          ports:
+            - containerPort: 9100
+              name: metrics
+              protocol: TCP
+          resources:
+            limits:
+              cpu: 250m
+              memory: 180Mi
+            requests:
+              cpu: 102m
+              memory: 180Mi
       nodeSelector:
         type: storage
       volumes:
-      - configMap:
+        - configMap:
+            name: config-store
           name: config-store
-        name: config-store
   volumeClaimTemplates:
-  - metadata:
-      labels:
-        app: vanus-store
-      name: data
-    spec:
-      accessModes:
-      - ReadWriteOnce
-      resources:
-        requests:
-          storage: 200Gi
-      storageClassName: gp3
+    - metadata:
+        labels:
+          app: vanus-store
+        name: data
+      spec:
+        accessModes:
+          - ReadWriteOnce
+        resources:
+          requests:
+            storage: 200Gi
+        storageClassName: gp3
 ---
 apiVersion: apps/v1
 kind: StatefulSet
@@ -831,10 +831,14 @@ spec:
     spec:
       containers:
         - name: controller
-          image: public.ecr.aws/vanus/root-controller:v0.7.0
+          image: public.ecr.aws/vanus/root-controller:v0.8.0
           imagePullPolicy: IfNotPresent
           command:
-            [ "/bin/sh", "-c", "NODE_ID=${HOSTNAME##*-} /vanus/bin/root-controller" ]
+            [
+              "/bin/sh",
+              "-c",
+              "NODE_ID=${HOSTNAME##*-} /vanus/bin/root-controller",
+            ]
           ports:
             - name: grpc
               containerPort: 2021
diff --git a/deploy/aws-eks/yaml/controller.yaml b/deploy/aws-eks/yaml/controller.yaml
index 0fa43ff..68e312c 100644
--- a/deploy/aws-eks/yaml/controller.yaml
+++ b/deploy/aws-eks/yaml/controller.yaml
@@ -64,7 +64,7 @@ spec:
   template:
     metadata:
       annotations:
-        prometheus.io/scrape: 'true'
+        prometheus.io/scrape: "true"
       labels:
         app: vanus-controller
     spec:
@@ -86,7 +86,7 @@ spec:
               valueFrom:
                 fieldRef:
                   fieldPath: status.podIP
-          image: public.ecr.aws/vanus/controller:6b23e5a
+          image: public.ecr.aws/vanus/controller:v0.8.0
           imagePullPolicy: IfNotPresent
           name: controller
           resources:
@@ -144,4 +144,4 @@ spec:
         storageClassName: gp3
         resources:
           requests:
-            storage: 20Gi
\ No newline at end of file
+            storage: 20Gi
diff --git a/deploy/aws-eks/yaml/gateway.yaml b/deploy/aws-eks/yaml/gateway.yaml
index ee1df01..01ced34 100644
--- a/deploy/aws-eks/yaml/gateway.yaml
+++ b/deploy/aws-eks/yaml/gateway.yaml
@@ -56,7 +56,7 @@ spec:
       nodeSelector:
         type: calculation
       containers:
-        - image: public.ecr.aws/vanus/gateway:6b23e5a
+        - image: public.ecr.aws/vanus/gateway:v0.8.0
           imagePullPolicy: IfNotPresent
           name: gateway
           resources:
@@ -73,9 +73,9 @@ spec:
               name: cloudevents
             - containerPort: 8082
               name: sinkproxy
-#            - containerPort: 2112
-#              protocol: TCP
-#              name: metrics
+          #            - containerPort: 2112
+          #              protocol: TCP
+          #              name: metrics
           volumeMounts:
             - mountPath: /vanus/config
               name: config-gateway
diff --git a/deploy/aws-eks/yaml/root-controller.yaml b/deploy/aws-eks/yaml/root-controller.yaml
index 43656e5..a4eb9f4 100644
--- a/deploy/aws-eks/yaml/root-controller.yaml
+++ b/deploy/aws-eks/yaml/root-controller.yaml
@@ -62,10 +62,14 @@ spec:
     spec:
       containers:
         - name: controller
-          image: public.ecr.aws/vanus/root-controller:v0.7.0
+          image: public.ecr.aws/vanus/root-controller:v0.8.0
           imagePullPolicy: IfNotPresent
           command:
-            [ "/bin/sh", "-c", "NODE_ID=${HOSTNAME##*-} /vanus/bin/root-controller" ]
+            [
+              "/bin/sh",
+              "-c",
+              "NODE_ID=${HOSTNAME##*-} /vanus/bin/root-controller",
+            ]
           ports:
             - name: grpc
               containerPort: 2021
diff --git a/deploy/aws-eks/yaml/store.yaml b/deploy/aws-eks/yaml/store.yaml
index 56429e7..0e30f61 100644
--- a/deploy/aws-eks/yaml/store.yaml
+++ b/deploy/aws-eks/yaml/store.yaml
@@ -56,7 +56,7 @@ spec:
   template:
     metadata:
       annotations:
-        prometheus.io/scrape: 'true'
+        prometheus.io/scrape: "true"
       labels:
         app: vanus-store
     spec:
@@ -74,7 +74,7 @@ spec:
               valueFrom:
                 fieldRef:
                   fieldPath: status.podIP
-          image: public.ecr.aws/vanus/store:6b23e5a
+          image: public.ecr.aws/vanus/store:v0.8.0
           imagePullPolicy: IfNotPresent
           name: store
           resources:
diff --git a/deploy/aws-eks/yaml/timer.yaml b/deploy/aws-eks/yaml/timer.yaml
index 456c64a..563a6a3 100644
--- a/deploy/aws-eks/yaml/timer.yaml
+++ b/deploy/aws-eks/yaml/timer.yaml
@@ -42,7 +42,7 @@ spec:
   template:
     metadata:
       annotations:
-        prometheus.io/scrape: 'true'
+        prometheus.io/scrape: "true"
       labels:
         app: vanus-timer
     spec:
@@ -56,7 +56,7 @@ spec:
               valueFrom:
                 fieldRef:
                   fieldPath: status.podIP
-          image: public.ecr.aws/vanus/timer:6b23e5a
+          image: public.ecr.aws/vanus/timer:v0.8.0
           imagePullPolicy: IfNotPresent
           name: timer
           volumeMounts:
@@ -94,4 +94,4 @@ spec:
       volumes:
         - configMap:
             name: config-timer
-          name: config-timer
\ No newline at end of file
+          name: config-timer
diff --git a/deploy/aws-eks/yaml/trigger.yaml b/deploy/aws-eks/yaml/trigger.yaml
index c91f677..391fa32 100644
--- a/deploy/aws-eks/yaml/trigger.yaml
+++ b/deploy/aws-eks/yaml/trigger.yaml
@@ -36,7 +36,7 @@ spec:
   template:
     metadata:
       annotations:
-        prometheus.io/scrape: 'true'
+        prometheus.io/scrape: "true"
       labels:
         app: vanus-trigger
     spec:
@@ -44,9 +44,14 @@ spec:
         - name: set-system-parameters
           image: busybox
           securityContext:
-            capabilities: { }
+            capabilities: {}
             privileged: true
-          command: ["/bin/sh", "-c", "sysctl -w net.ipv4.tcp_tw_reuse=1 && sysctl -w net.ipv4.tcp_fin_timeout=10 && sysctl -w net.ipv4.ip_local_port_range='4096 65000' && sysctl -p"]
+          command:
+            [
+              "/bin/sh",
+              "-c",
+              "sysctl -w net.ipv4.tcp_tw_reuse=1 && sysctl -w net.ipv4.tcp_fin_timeout=10 && sysctl -w net.ipv4.ip_local_port_range='4096 65000' && sysctl -p",
+            ]
       nodeSelector:
         type: storage
       containers:
@@ -57,7 +62,7 @@ spec:
               valueFrom:
                 fieldRef:
                   fieldPath: status.podIP
-          image: public.ecr.aws/vanus/trigger:6b23e5a
+          image: public.ecr.aws/vanus/trigger:v0.8.0
           imagePullPolicy: IfNotPresent
           name: trigger
           resources:
@@ -97,4 +102,4 @@ spec:
       volumes:
         - configMap:
             name: config-trigger
-          name: config-trigger
\ No newline at end of file
+          name: config-trigger
diff --git a/deploy/bare-metal/vanus.yml b/deploy/bare-metal/vanus.yml
index 3bcebfa..9317212 100644
--- a/deploy/bare-metal/vanus.yml
+++ b/deploy/bare-metal/vanus.yml
@@ -253,7 +253,7 @@ spec:
           valueFrom:
             fieldRef:
               fieldPath: status.podIP
-        image: public.ecr.aws/vanus/gateway:v0.7.0
+        image: public.ecr.aws/vanus/gateway:v0.8.0
         imagePullPolicy: IfNotPresent
         name: gateway
         ports:
@@ -298,7 +298,7 @@ spec:
           valueFrom:
             fieldRef:
               fieldPath: status.podIP
-        image: public.ecr.aws/vanus/timer:v0.7.0
+        image: public.ecr.aws/vanus/timer:v0.8.0
         imagePullPolicy: IfNotPresent
         name: timer
         volumeMounts:
@@ -336,7 +336,7 @@ spec:
           valueFrom:
             fieldRef:
               fieldPath: status.podIP
-        image: public.ecr.aws/vanus/trigger:v0.7.0
+        image: public.ecr.aws/vanus/trigger:v0.8.0
         imagePullPolicy: IfNotPresent
         name: trigger
         ports:
@@ -386,7 +386,7 @@ spec:
           valueFrom:
             fieldRef:
               fieldPath: status.podIP
-        image: public.ecr.aws/vanus/controller:v0.7.0
+        image: public.ecr.aws/vanus/controller:v0.8.0
         imagePullPolicy: IfNotPresent
         name: controller
         ports:
@@ -575,7 +575,7 @@ spec:
           valueFrom:
             fieldRef:
               fieldPath: status.podIP
-        image: public.ecr.aws/vanus/root-controller:v0.7.0
+        image: public.ecr.aws/vanus/root-controller:v0.8.0
         imagePullPolicy: IfNotPresent
         name: controller
         ports:
@@ -623,7 +623,7 @@ spec:
           valueFrom:
             fieldRef:
               fieldPath: status.podIP
-        image: public.ecr.aws/vanus/store:v0.7.0
+        image: public.ecr.aws/vanus/store:v0.8.0
         imagePullPolicy: IfNotPresent
         name: store
         ports:
diff --git a/deploy/basic/controller.yaml b/deploy/basic/controller.yaml
index 26f9bdb..bccce7e 100644
--- a/deploy/basic/controller.yaml
+++ b/deploy/basic/controller.yaml
@@ -70,7 +70,7 @@ spec:
     spec:
       containers:
         - name: controller
-          image: public.ecr.aws/vanus/controller:v0.7.0
+          image: public.ecr.aws/vanus/controller:v0.8.0
           imagePullPolicy: IfNotPresent
           command:
             [ "/bin/sh", "-c", "NODE_ID=${HOSTNAME##*-} /vanus/bin/controller" ]
diff --git a/deploy/basic/gateway.yaml b/deploy/basic/gateway.yaml
index 55908e9..a1d8a86 100644
--- a/deploy/basic/gateway.yaml
+++ b/deploy/basic/gateway.yaml
@@ -52,7 +52,7 @@ spec:
     spec:
       containers:
         - name: gateway
-          image: public.ecr.aws/vanus/gateway:v0.7.0
+          image: public.ecr.aws/vanus/gateway:v0.8.0
           imagePullPolicy: IfNotPresent
           ports:
             - name: proxy
diff --git a/deploy/basic/root-controller.yaml b/deploy/basic/root-controller.yaml
index 43656e5..0528b2d 100644
--- a/deploy/basic/root-controller.yaml
+++ b/deploy/basic/root-controller.yaml
@@ -62,7 +62,7 @@ spec:
     spec:
       containers:
         - name: controller
-          image: public.ecr.aws/vanus/root-controller:v0.7.0
+          image: public.ecr.aws/vanus/root-controller:v0.8.0
           imagePullPolicy: IfNotPresent
           command:
             [ "/bin/sh", "-c", "NODE_ID=${HOSTNAME##*-} /vanus/bin/root-controller" ]
diff --git a/deploy/basic/store.yaml b/deploy/basic/store.yaml
index c6b4179..5eb724e 100644
--- a/deploy/basic/store.yaml
+++ b/deploy/basic/store.yaml
@@ -61,7 +61,7 @@ spec:
     spec:
       containers:
         - name: store
-          image: public.ecr.aws/vanus/store:v0.7.0
+          image: public.ecr.aws/vanus/store:v0.8.0
           imagePullPolicy: IfNotPresent
           command:
             ["/bin/sh", "-c", "VOLUME_ID=${HOSTNAME##*-} /vanus/bin/store"]
diff --git a/deploy/basic/timer.yaml b/deploy/basic/timer.yaml
index b13c463..0cbeba6 100644
--- a/deploy/basic/timer.yaml
+++ b/deploy/basic/timer.yaml
@@ -43,7 +43,7 @@ spec:
     spec:
       containers:
         - name: timer
-          image: public.ecr.aws/vanus/timer:v0.7.0
+          image: public.ecr.aws/vanus/timer:v0.8.0
           imagePullPolicy: IfNotPresent
           env:
             - name: VANUS_LOG_LEVEL
diff --git a/deploy/basic/trigger.yaml b/deploy/basic/trigger.yaml
index d84f3e0..4da25a4 100644
--- a/deploy/basic/trigger.yaml
+++ b/deploy/basic/trigger.yaml
@@ -33,7 +33,7 @@ spec:
     spec:
       containers:
         - name: trigger
-          image: public.ecr.aws/vanus/trigger:v0.7.0
+          image: public.ecr.aws/vanus/trigger:v0.8.0
           imagePullPolicy: IfNotPresent
           ports:
             - name: grpc
diff --git a/deploy/docker-compose/docker-compose.yml b/deploy/docker-compose/docker-compose.yml
index a3b903b..382736e 100644
--- a/deploy/docker-compose/docker-compose.yml
+++ b/deploy/docker-compose/docker-compose.yml
@@ -27,7 +27,7 @@ services:
     networks:
       - vanus
   root-controller:
-    image: public.ecr.aws/vanus/root-controller:v0.7.0
+    image: public.ecr.aws/vanus/root-controller:v0.8.0
     pull_policy: missing
     container_name: root-controller
     volumes:
@@ -40,7 +40,7 @@ services:
     networks:
       - vanus
   controller:
-    image: public.ecr.aws/vanus/controller:v0.7.0
+    image: public.ecr.aws/vanus/controller:v0.8.0
     pull_policy: missing
     container_name: controller
     volumes:
@@ -56,7 +56,7 @@ services:
       - root-controller
   store:
     container_name: store
-    image: public.ecr.aws/vanus/store:v0.7.0
+    image: public.ecr.aws/vanus/store:v0.8.0
     pull_policy: missing
     volumes:
       - ./config/store.yaml:/vanus/config/store.yaml
@@ -72,7 +72,7 @@ services:
       - controller
   timer:
     container_name: timer
-    image: public.ecr.aws/vanus/timer:v0.7.0
+    image: public.ecr.aws/vanus/timer:v0.8.0
     pull_policy: missing
     volumes:
       - ./config/timer.yaml:/vanus/config/timer.yaml
@@ -85,7 +85,7 @@ services:
       - store
   trigger:
     container_name: trigger
-    image: public.ecr.aws/vanus/trigger:v0.7.0
+    image: public.ecr.aws/vanus/trigger:v0.8.0
     pull_policy: missing
     volumes:
       - ./config/trigger.yaml:/vanus/config/trigger.yaml
@@ -97,7 +97,7 @@ services:
       - controller
   gateway:
     container_name: gateway
-    image: public.ecr.aws/vanus/gateway:v0.7.0
+    image: public.ecr.aws/vanus/gateway:v0.8.0
     pull_policy: missing
     ports:
       - "8080:8080"
@@ -138,4 +138,4 @@ services:
       - vanus
 networks:
   vanus:
-    driver: bridge
\ No newline at end of file
+    driver: bridge
diff --git a/deploy/vanus.cn.yaml b/deploy/vanus.cn.yaml
index cbf34dd..84402a9 100644
--- a/deploy/vanus.cn.yaml
+++ b/deploy/vanus.cn.yaml
@@ -249,7 +249,7 @@ spec:
               valueFrom:
                 fieldRef:
                   fieldPath: status.podIP
-          image: linkall.tencentcloudcr.com/vanus/gateway:v0.7.0
+          image: linkall.tencentcloudcr.com/vanus/gateway:v0.8.0
           imagePullPolicy: IfNotPresent
           name: gateway
           ports:
@@ -294,7 +294,7 @@ spec:
               valueFrom:
                 fieldRef:
                   fieldPath: status.podIP
-          image: linkall.tencentcloudcr.com/vanus/timer:v0.7.0
+          image: linkall.tencentcloudcr.com/vanus/timer:v0.8.0
           imagePullPolicy: IfNotPresent
           name: timer
           volumeMounts:
@@ -332,7 +332,7 @@ spec:
               valueFrom:
                 fieldRef:
                   fieldPath: status.podIP
-          image: linkall.tencentcloudcr.com/vanus/trigger:v0.7.0
+          image: linkall.tencentcloudcr.com/vanus/trigger:v0.8.0
           imagePullPolicy: IfNotPresent
           name: trigger
           ports:
@@ -382,7 +382,7 @@ spec:
               valueFrom:
                 fieldRef:
                   fieldPath: status.podIP
-          image: linkall.tencentcloudcr.com/vanus/controller:v0.7.0
+          image: linkall.tencentcloudcr.com/vanus/controller:v0.8.0
           imagePullPolicy: IfNotPresent
           name: controller
           ports:
@@ -571,7 +571,7 @@ spec:
               valueFrom:
                 fieldRef:
                   fieldPath: status.podIP
-          image: linkall.tencentcloudcr.com/vanus/root-controller:v0.7.0
+          image: linkall.tencentcloudcr.com/vanus/root-controller:v0.8.0
           imagePullPolicy: IfNotPresent
           name: controller
           ports:
@@ -619,7 +619,7 @@ spec:
               valueFrom:
                 fieldRef:
                   fieldPath: status.podIP
-          image: linkall.tencentcloudcr.com/vanus/store:v0.7.0
+          image: linkall.tencentcloudcr.com/vanus/store:v0.8.0
           imagePullPolicy: IfNotPresent
           name: store
           ports:
diff --git a/deploy/vanus.yaml b/deploy/vanus.yaml
index 3bcebfa..9317212 100644
--- a/deploy/vanus.yaml
+++ b/deploy/vanus.yaml
@@ -253,7 +253,7 @@ spec:
           valueFrom:
             fieldRef:
               fieldPath: status.podIP
-        image: public.ecr.aws/vanus/gateway:v0.7.0
+        image: public.ecr.aws/vanus/gateway:v0.8.0
         imagePullPolicy: IfNotPresent
         name: gateway
         ports:
@@ -298,7 +298,7 @@ spec:
           valueFrom:
             fieldRef:
               fieldPath: status.podIP
-        image: public.ecr.aws/vanus/timer:v0.7.0
+        image: public.ecr.aws/vanus/timer:v0.8.0
         imagePullPolicy: IfNotPresent
         name: timer
         volumeMounts:
@@ -336,7 +336,7 @@ spec:
           valueFrom:
             fieldRef:
               fieldPath: status.podIP
-        image: public.ecr.aws/vanus/trigger:v0.7.0
+        image: public.ecr.aws/vanus/trigger:v0.8.0
         imagePullPolicy: IfNotPresent
         name: trigger
         ports:
@@ -386,7 +386,7 @@ spec:
           valueFrom:
             fieldRef:
               fieldPath: status.podIP
-        image: public.ecr.aws/vanus/controller:v0.7.0
+        image: public.ecr.aws/vanus/controller:v0.8.0
         imagePullPolicy: IfNotPresent
         name: controller
         ports:
@@ -575,7 +575,7 @@ spec:
           valueFrom:
             fieldRef:
               fieldPath: status.podIP
-        image: public.ecr.aws/vanus/root-controller:v0.7.0
+        image: public.ecr.aws/vanus/root-controller:v0.8.0
         imagePullPolicy: IfNotPresent
         name: controller
         ports:
@@ -623,7 +623,7 @@ spec:
           valueFrom:
             fieldRef:
               fieldPath: status.podIP
-        image: public.ecr.aws/vanus/store:v0.7.0
+        image: public.ecr.aws/vanus/store:v0.8.0
         imagePullPolicy: IfNotPresent
         name: store
         ports:
diff --git a/go.mod b/go.mod
index caa5d74..dcb4f9e 100644
--- a/go.mod
+++ b/go.mod
@@ -3,15 +3,12 @@ module github.com/vanus-labs/vanus
 go 1.18
 
 require (
-	github.com/HdrHistogram/hdrhistogram-go v1.1.2
 	github.com/aws/aws-sdk-go-v2 v1.16.11
 	github.com/aws/aws-sdk-go-v2/credentials v1.12.13
 	github.com/aws/aws-sdk-go-v2/service/lambda v1.23.8
 	github.com/cloudevents/sdk-go/sql/v2 v2.13.0
 	github.com/cloudevents/sdk-go/v2 v2.13.0
 	github.com/fatih/color v1.13.0
-	github.com/go-redis/redis/v8 v8.11.5
-	github.com/go-resty/resty/v2 v2.7.0
 	github.com/gogo/protobuf v1.3.2
 	github.com/golang/mock v1.6.0
 	github.com/google/cel-go v0.13.0
@@ -25,19 +22,16 @@ require (
 	github.com/panjf2000/ants/v2 v2.7.1
 	github.com/pkg/errors v0.9.1
 	github.com/prashantv/gostub v1.1.0
-	github.com/prometheus/client_golang v1.14.0
 	github.com/smartystreets/goconvey v1.7.2
 	github.com/sony/sonyflake v1.1.0
 	github.com/spf13/cobra v1.4.0
 	github.com/tidwall/gjson v1.14.1
-	github.com/vanus-labs/sdk/golang v0.2.1-0.20230308125440-1f823fdeae5b
-	github.com/vanus-labs/vanus/client v0.5.7
-	github.com/vanus-labs/vanus/observability v0.5.7
-	github.com/vanus-labs/vanus/pkg v0.5.7
-	github.com/vanus-labs/vanus/proto v0.7.1-0.20230307065123-722eac99dbf9
-	github.com/vanus-labs/vanus/raft v0.5.7
+	github.com/vanus-labs/vanus/client v0.8.0
+	github.com/vanus-labs/vanus/observability v0.8.0
+	github.com/vanus-labs/vanus/pkg v0.8.0
+	github.com/vanus-labs/vanus/proto v0.8.0
+	github.com/vanus-labs/vanus/raft v0.8.0
 	go.etcd.io/etcd/client/v3 v3.5.7
-	go.mongodb.org/mongo-driver v1.11.0
 	go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.4
 	go.opentelemetry.io/otel v1.11.2
 	go.opentelemetry.io/otel/trace v1.11.2
@@ -51,7 +45,6 @@ require (
 	gopkg.in/yaml.v3 v3.0.1
 	k8s.io/apimachinery v0.25.0
 	k8s.io/client-go v0.25.0
-	k8s.io/klog/v2 v2.80.0
 	k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed
 )
 
@@ -69,12 +62,10 @@ require (
 	github.com/coreos/go-semver v0.3.0 // indirect
 	github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534 // indirect
 	github.com/davecgh/go-spew v1.1.1 // indirect
-	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
 	github.com/go-logr/logr v1.2.3 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
 	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
 	github.com/golang/protobuf v1.5.2 // indirect
-	github.com/golang/snappy v0.0.3 // indirect
 	github.com/google/go-cmp v0.5.9 // indirect
 	github.com/googleapis/enterprise-certificate-proxy v0.2.0 // indirect
 	github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 // indirect
@@ -82,16 +73,15 @@ require (
 	github.com/inconshreveable/mousetrap v1.0.0 // indirect
 	github.com/jmespath/go-jmespath v0.4.0 // indirect
 	github.com/jtolds/gls v4.20.0+incompatible // indirect
-	github.com/klauspost/compress v1.13.6 // indirect
 	github.com/mattn/go-colorable v0.1.12 // indirect
 	github.com/mattn/go-isatty v0.0.16 // indirect
 	github.com/mattn/go-runewidth v0.0.13 // indirect
 	github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 	github.com/modern-go/reflect2 v1.0.2 // indirect
-	github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect
 	github.com/ohler55/ojg v1.18.1 // indirect
 	github.com/pmezard/go-difflib v1.0.0 // indirect
+	github.com/prometheus/client_golang v1.14.0 // indirect
 	github.com/prometheus/client_model v0.3.0 // indirect
 	github.com/prometheus/common v0.37.0 // indirect
 	github.com/prometheus/procfs v0.8.0 // indirect
@@ -104,10 +94,6 @@ require (
 	github.com/stretchr/testify v1.8.1 // indirect
 	github.com/tidwall/match v1.1.1 // indirect
 	github.com/tidwall/pretty v1.2.0 // indirect
-	github.com/xdg-go/pbkdf2 v1.0.0 // indirect
-	github.com/xdg-go/scram v1.1.1 // indirect
-	github.com/xdg-go/stringprep v1.0.3 // indirect
-	github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
 	go.etcd.io/etcd/api/v3 v3.5.7 // indirect
 	go.etcd.io/etcd/client/pkg/v3 v3.5.7 // indirect
 	go.opencensus.io v0.24.0 // indirect
@@ -118,13 +104,12 @@ require (
 	go.opentelemetry.io/proto/otlp v0.19.0 // indirect
 	go.uber.org/multierr v1.7.0 // indirect
 	go.uber.org/zap v1.17.0 // indirect
-	golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d // indirect
 	golang.org/x/net v0.8.0 // indirect
 	golang.org/x/oauth2 v0.6.0 // indirect
-	golang.org/x/sync v0.1.0 // indirect
 	golang.org/x/sys v0.6.0 // indirect
 	golang.org/x/text v0.8.0 // indirect
 	google.golang.org/appengine v1.6.7 // indirect
+	k8s.io/klog/v2 v2.80.0 // indirect
 )
 
 replace (
@@ -135,3 +120,5 @@ replace (
 	github.com/vanus-labs/vanus/proto => ./proto
 	github.com/vanus-labs/vanus/raft => ./raft
 )
+
+replace github.com/vanus-labs/sdk/golang => ./FORBIDDEN_DEPENDENCY
diff --git a/go.sum b/go.sum
index 0abaea0..791b78d 100644
--- a/go.sum
+++ b/go.sum
@@ -37,10 +37,7 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9
 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
-github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM=
-github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
-github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
@@ -102,12 +99,9 @@ github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee
 github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534 h1:rtAn27wIbmOGUs7RIbVgPEjb31ehTVniDwPGXyMxm5U=
 github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
 github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
-github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
 github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
@@ -119,8 +113,6 @@ github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
 github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
 github.com/fatih/set v0.2.1 h1:nn2CaJyknWE/6txyUDGwysr3G5QC6xWB/PtVjPBbeaA=
 github.com/fatih/set v0.2.1/go.mod h1:+RKtMCH+favT2+3YecHGxcc0b4KyVWA1QWWJUs4E0CI=
-github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
-github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
 github.com/getsentry/raven-go v0.2.0 h1:no+xWJRb5ZI7eE8TWgIq1jLulQiIoLG0IfYxv5JYMGs=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
@@ -141,16 +133,11 @@ github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
 github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
 github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
-github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
-github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
-github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY=
-github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
 github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ=
 github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
@@ -185,9 +172,6 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
 github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
 github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
 github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA=
-github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/cel-go v0.13.0 h1:z+8OBOcmh7IeKyqwT/6IlnMvy621fYUqnTVPEdegGlU=
@@ -199,7 +183,6 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
 github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
@@ -261,20 +244,15 @@ github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7
 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
 github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
-github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
 github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
-github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
 github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40=
 github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
@@ -293,19 +271,13 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
 github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0=
-github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/ncw/directio v1.0.5 h1:JSUBhdjEvVaJvOoyPAbcW0fnd0tvRXD76wEfZ1KcQz4=
 github.com/ncw/directio v1.0.5/go.mod h1:rX/pKEYkOXBGOggmcyJeJGloCkleSvphPx2eV3t6ROk=
 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
-github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
-github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
 github.com/ohler55/ojg v1.18.1 h1:kNJHB1qIp9ev/I/+3E3ObImjsAlAGRR+2VMCuq9lQCY=
 github.com/ohler55/ojg v1.18.1/go.mod h1:uHcD1ErbErC27Zhb5Df2jUjbseLLcmOCo6oxSr3jZxo=
-github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
-github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
 github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
 github.com/panjf2000/ants/v2 v2.7.1 h1:qBy5lfSdbxvrR0yUnZfaEDjf0FlCw4ufsbcsxmE7r+M=
 github.com/panjf2000/ants/v2 v2.7.1/go.mod h1:KIBmYG9QQX5U2qzFP/yQJaq/nSb6rahS9iEHkrCMgM8=
@@ -348,7 +320,6 @@ github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
 github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
 github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
 github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
 github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
 github.com/rs/zerolog v1.29.0 h1:Zes4hju04hjbvkVkOhdl2HpZa+0PmVwigmo8XoORE5w=
 github.com/rs/zerolog v1.29.0/go.mod h1:NILgTygv/Uej1ra5XxGf82ZFSLk58MFGAUS2o6usyD0=
@@ -390,20 +361,9 @@ github.com/tidwall/gjson v1.14.1 h1:iymTbGkQBhveq21bEvAQ81I0LEBork8BFe1CUZXdyuo=
 github.com/tidwall/gjson v1.14.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
 github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
 github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
-github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
 github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
 github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
 github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
-github.com/vanus-labs/sdk/golang v0.2.1-0.20230308125440-1f823fdeae5b h1:Xr615fIhorEmaxmlJ36HxigUYtzDEiwL0tz1bUiDhOg=
-github.com/vanus-labs/sdk/golang v0.2.1-0.20230308125440-1f823fdeae5b/go.mod h1:WudcIH7IGCK6Bx6P3R6VMtzu25uoufopfXF0KgdKd8Q=
-github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
-github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
-github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E=
-github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g=
-github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs=
-github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8=
-github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA=
-github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
 github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -415,8 +375,6 @@ go.etcd.io/etcd/client/pkg/v3 v3.5.7 h1:y3kf5Gbp4e4q7egZdn5T7W9TSHUvkClN6u+Rq9mE
 go.etcd.io/etcd/client/pkg/v3 v3.5.7/go.mod h1:o0Abi1MK86iad3YrWhgUsbGx1pmTS+hrORWc2CamuhY=
 go.etcd.io/etcd/client/v3 v3.5.7 h1:u/OhpiuCgYY8awOHlhIhmGIGpxfBU/GZBUP3m/3/Iz4=
 go.etcd.io/etcd/client/v3 v3.5.7/go.mod h1:sOWmj9DZUMyAngS7QQwCyAXXAL6WhgTOPLNS/NabQgw=
-go.mongodb.org/mongo-driver v1.11.0 h1:FZKhBSTydeuffHj9CBjXlR8vQLee1cQyTWYPA6/tqiE=
-go.mongodb.org/mongo-driver v1.11.0/go.mod h1:s7p5vEtfbeR1gYi6pnj3c3/urpbLv2T5Sfd6Rp2HBB8=
 go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
 go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
@@ -461,12 +419,7 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
 golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d h1:sK3txAijHtOK88l68nt020reeT1ZdKLIYetKl95FzVY=
-golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
@@ -475,9 +428,7 @@ golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u0
 golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
-golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6 h1:QE6XYQK6naiK1EPAe1g/ILLxN5RBoH5xkJk3CqlMI/Y=
 golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
-golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
 golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
 golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -531,8 +482,6 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY
 golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
 golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
 golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
 golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
@@ -626,10 +575,8 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb
 golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA=
 golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
@@ -676,11 +623,6 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
-gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM=
-gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0=
-gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
-gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
 google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
 google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
 google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
@@ -780,9 +722,7 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
-gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
@@ -813,6 +753,5 @@ k8s.io/klog/v2 v2.80.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
 k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed h1:jAne/RjBTyawwAy0utX5eqigAwz/lQhTmy+Hr/Cpue4=
 k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
-rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
 rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
 rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
diff --git a/observability/go.mod b/observability/go.mod
index d1b0015..48fd73f 100644
--- a/observability/go.mod
+++ b/observability/go.mod
@@ -21,7 +21,7 @@ require (
 	github.com/golang/protobuf v1.5.2 // indirect
 	github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect
 	github.com/mattn/go-colorable v0.1.12 // indirect
-	github.com/mattn/go-isatty v0.0.14 // indirect
+	github.com/mattn/go-isatty v0.0.16 // indirect
 	github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
 	github.com/prometheus/client_model v0.3.0 // indirect
 	github.com/prometheus/common v0.37.0 // indirect
@@ -29,9 +29,11 @@ require (
 	go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.2 // indirect
 	go.opentelemetry.io/proto/otlp v0.19.0 // indirect
-	golang.org/x/net v0.4.0 // indirect
-	golang.org/x/sys v0.3.0 // indirect
-	golang.org/x/text v0.5.0 // indirect
+	golang.org/x/net v0.8.0 // indirect
+	golang.org/x/sys v0.6.0 // indirect
+	golang.org/x/text v0.8.0 // indirect
 	google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd // indirect
 	google.golang.org/protobuf v1.28.1 // indirect
 )
+
+replace github.com/vanus-labs/vanus => ../FORBIDDEN_DEPENDENCY
diff --git a/observability/go.sum b/observability/go.sum
index b4b3db2..6e35a8c 100644
--- a/observability/go.sum
+++ b/observability/go.sum
@@ -174,8 +174,9 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40=
 github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
-github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
 github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
+github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
+github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
 github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -325,8 +326,8 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b
 golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
 golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU=
-golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
+golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
+golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -386,8 +387,9 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ=
-golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
+golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -398,8 +400,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM=
-golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
+golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
diff --git a/observability/tracing/tracing.go b/observability/tracing/tracing.go
index 356c578..a38e263 100644
--- a/observability/tracing/tracing.go
+++ b/observability/tracing/tracing.go
@@ -20,7 +20,6 @@ import (
 	"strings"
 	"time"
 
-	"github.com/vanus-labs/vanus/observability/log"
 	"go.opentelemetry.io/otel"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
@@ -31,10 +30,12 @@ import (
 	oteltrace "go.opentelemetry.io/otel/trace"
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/credentials/insecure"
+
+	"github.com/vanus-labs/vanus/observability/log"
 )
 
 const (
-	vanusVersion     = "v0.5.0"
+	vanusVersion     = "v0.8.0"
 	environmentKey   = "environment"
 	environmentValue = "local"
 )
@@ -62,7 +63,8 @@ func Init(cfg Config) {
 				panic("init tracer error: " + err.Error())
 			}
 			p.p = provider
-			log.Info().Str("otel_collector", cfg.OtelCollector).Msg("tracing module started, OpenTelemetry is enable")
+			log.Info().Str("otel_collector", cfg.OtelCollector).
+				Msg("tracing module started, OpenTelemetry is enable")
 		} else {
 			// if otel_collector is empty, switch to noop tracer
 			log.Warn().Str("otel_collector", cfg.OtelCollector).Msg("tracing module is enabled," +
@@ -75,9 +77,8 @@ func Init(cfg Config) {
 	tp = p
 }
 
-// Test input two num, return sum
+// Test input two num, return sum.
 func Test() {
-
 }
 
 func Start(ctx context.Context, pkgName, methodName string) (context.Context, oteltrace.Span) {
diff --git a/pkg/go.mod b/pkg/go.mod
index 62b7877..eaaf432 100644
--- a/pkg/go.mod
+++ b/pkg/go.mod
@@ -7,8 +7,8 @@ require (
 	github.com/ohler55/ojg v1.18.1
 	github.com/pkg/errors v0.9.1
 	github.com/smartystreets/goconvey v1.7.2
-	github.com/vanus-labs/vanus/observability v0.5.7
-	github.com/vanus-labs/vanus/proto v0.5.7
+	github.com/vanus-labs/vanus/observability v0.8.0
+	github.com/vanus-labs/vanus/proto v0.8.0
 	golang.org/x/oauth2 v0.6.0
 	google.golang.org/grpc v1.51.0
 	google.golang.org/protobuf v1.28.1
@@ -19,7 +19,7 @@ require (
 	github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 // indirect
 	github.com/jtolds/gls v4.20.0+incompatible // indirect
 	github.com/mattn/go-colorable v0.1.12 // indirect
-	github.com/mattn/go-isatty v0.0.14 // indirect
+	github.com/mattn/go-isatty v0.0.16 // indirect
 	github.com/rs/zerolog v1.29.0 // indirect
 	github.com/smartystreets/assertions v1.2.0 // indirect
 	golang.org/x/net v0.8.0 // indirect
@@ -34,3 +34,5 @@ replace (
 	github.com/vanus-labs/vanus/proto => ../proto
 	github.com/vanus-labs/vanus/raft => ../raft
 )
+
+replace github.com/vanus-labs/vanus => ../FORBIDDEN_DEPENDENCY
diff --git a/pkg/go.sum b/pkg/go.sum
index 9b4c88e..f214510 100644
--- a/pkg/go.sum
+++ b/pkg/go.sum
@@ -14,8 +14,9 @@ github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7
 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
 github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40=
 github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
-github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
 github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
+github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
+github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
 github.com/ohler55/ojg v1.18.1 h1:kNJHB1qIp9ev/I/+3E3ObImjsAlAGRR+2VMCuq9lQCY=
 github.com/ohler55/ojg v1.18.1/go.mod h1:uHcD1ErbErC27Zhb5Df2jUjbseLLcmOCo6oxSr3jZxo=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
@@ -49,6 +50,7 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
diff --git a/proto/go.mod b/proto/go.mod
index 696bfa3..f77202c 100644
--- a/proto/go.mod
+++ b/proto/go.mod
@@ -5,7 +5,7 @@ go 1.18
 require (
 	github.com/cloudevents/sdk-go/v2 v2.13.0
 	github.com/golang/mock v1.6.0
-	github.com/vanus-labs/vanus/raft v0.5.7
+	github.com/vanus-labs/vanus/raft v0.8.0
 	google.golang.org/grpc v1.51.0
 	google.golang.org/protobuf v1.28.1
 )
@@ -18,9 +18,9 @@ require (
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 	github.com/modern-go/reflect2 v1.0.2 // indirect
 	github.com/stretchr/testify v1.8.1 // indirect
-	golang.org/x/net v0.4.0 // indirect
-	golang.org/x/sys v0.3.0 // indirect
-	golang.org/x/text v0.5.0 // indirect
+	golang.org/x/net v0.8.0 // indirect
+	golang.org/x/sys v0.6.0 // indirect
+	golang.org/x/text v0.8.0 // indirect
 	google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd // indirect
 )
 
@@ -28,3 +28,5 @@ replace (
 	github.com/vanus-labs/vanus/observability => ../observability
 	github.com/vanus-labs/vanus/raft => ../raft
 )
+
+replace github.com/vanus-labs/vanus => ../FORBIDDEN_DEPENDENCY
diff --git a/proto/go.sum b/proto/go.sum
index f889412..baceed5 100644
--- a/proto/go.sum
+++ b/proto/go.sum
@@ -47,8 +47,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
-golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU=
-golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
+golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
+golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -59,13 +59,13 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ=
-golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
+golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM=
-golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
+golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
diff --git a/raft/go.mod b/raft/go.mod
index b9a5734..2fd457b 100644
--- a/raft/go.mod
+++ b/raft/go.mod
@@ -23,10 +23,12 @@ require (
 	google.golang.org/protobuf v1.28.1 // indirect
 )
 
+replace github.com/vanus-labs/vanus/observability => ../observability
+
 // Bad imports are sometimes causing attempts to pull that code.
 // This makes the error more explicit.
-replace go.etcd.io/etcd => ./FORBIDDEN_DEPENDENCY
-
-replace go.etcd.io/etcd/v3 => ./FORBIDDEN_DEPENDENCY
-
-replace github.com/vanus-labs/vanus/observability => ../observability
+replace (
+	github.com/vanus-labs/vanus => ../FORBIDDEN_DEPENDENCY
+	go.etcd.io/etcd => ./FORBIDDEN_DEPENDENCY
+	go.etcd.io/etcd/v3 => ./FORBIDDEN_DEPENDENCY
+)
diff --git a/vsctl/command/cluster.go b/vsctl/command/cluster.go
index d1484a0..311ddd9 100644
--- a/vsctl/command/cluster.go
+++ b/vsctl/command/cluster.go
@@ -33,7 +33,7 @@ import (
 )
 
 const (
-	DefaultInitialVersion    = "v0.7.0"
+	DefaultInitialVersion    = "v0.8.0"
 	DefaultImagePullPolicy   = "Always"
 	DefaultResourceLimitsCpu = "500m"
 	DefaultResourceLimitsMem = "1Gi"


Test patch:
diff --git a/test/benchmark/command/common.go b/test/benchmark/command/common.go
deleted file mode 100644
index c5fc1d4..0000000
--- a/test/benchmark/command/common.go
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2022 Linkall Inc.
-//
-// Licensed 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.
-
-package command
-
-import (
-	"time"
-
-	"go.mongodb.org/mongo-driver/bson/primitive"
-)
-
-type Record struct {
-	ID         string
-	BornAt     time.Time
-	SentAt     time.Time
-	ReceivedAt time.Time
-}
-
-type BlockRecord struct {
-	LeaderID   uint64
-	LeaderAddr string
-	Replicas   map[uint64]string
-}
-
-type ResultType string
-
-const (
-	ResultLatency    = ResultType("latency")
-	ResultThroughput = ResultType("throughput")
-)
-
-type Task struct {
-	ID          primitive.ObjectID `bson:"_id"`
-	Running     bool               `bson:"running"`
-	CreateAt    time.Time          `bson:"create_at"`
-	CompletedAt time.Time          `bson:"completed_at"`
-}
-
-type BenchmarkResult struct {
-	ID       primitive.ObjectID                `bson:"_id"`
-	TaskID   primitive.ObjectID                `bson:"task_id"`
-	CaseName string                            `bson:"case_name"`
-	RType    ResultType                        `bson:"result_type"`
-	Args     []string                          `bson:"args"`
-	Values   map[string]map[string]interface{} `bson:"values"`
-	Mean     float64                           `bson:"mean"`
-	Stdev    float64                           `bson:"stdev"`
-	CreateAt time.Time                         `bson:"createAt"`
-}
diff --git a/test/benchmark/command/component.go b/test/benchmark/command/component.go
deleted file mode 100644
index 9980a21..0000000
--- a/test/benchmark/command/component.go
+++ /dev/null
@@ -1,380 +0,0 @@
-// Copyright 2022 Linkall Inc.
-//
-// Licensed 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.
-
-package command
-
-import (
-	"context"
-	"encoding/json"
-	"fmt"
-	"math/rand"
-	"net"
-	"net/http"
-	_ "net/http/pprof"
-	"os"
-	"sync"
-	"sync/atomic"
-	"time"
-
-	"github.com/go-redis/redis/v8"
-	"github.com/google/uuid"
-	"github.com/prometheus/client_golang/prometheus/promhttp"
-	"github.com/spf13/cobra"
-	"google.golang.org/grpc"
-	"google.golang.org/grpc/credentials/insecure"
-	"google.golang.org/protobuf/types/known/timestamppb"
-
-	"github.com/vanus-labs/vanus/observability/log"
-	v1 "github.com/vanus-labs/vanus/proto/pkg/cloudevents"
-	segpb "github.com/vanus-labs/vanus/proto/pkg/segment"
-
-	"github.com/vanus-labs/vanus/internal/primitive/vanus"
-	"github.com/vanus-labs/vanus/internal/store"
-	"github.com/vanus-labs/vanus/internal/store/config"
-	"github.com/vanus-labs/vanus/internal/store/segment"
-)
-
-const (
-	blockInfoKeyInRedis = "/vanus/test/store/block_records"
-)
-
-var (
-	volumeID       int64
-	segmentNumbers int
-	storeAddrs     []string
-	totalSent      int64
-	noCleanCache   bool
-	replicaNum     int
-	blockSize      int64
-	batchSize      int
-)
-
-func ComponentCommand() *cobra.Command {
-	cmd := &cobra.Command{
-		Use:   "component",
-		Short: "start component test",
-	}
-	cmd.AddCommand(storeCommand())
-	return cmd
-}
-
-func storeCommand() *cobra.Command {
-	cmd := &cobra.Command{
-		Use:   "store",
-		Short: "start local store",
-	}
-	cmd.AddCommand(runStoreCommand())
-	cmd.AddCommand(createBlockCommand())
-	cmd.AddCommand(sendCommand())
-	return cmd
-}
-
-func runStoreCommand() *cobra.Command {
-	cmd := &cobra.Command{
-		Use:   "run",
-		Short: "start local store",
-		Run: func(cmd *cobra.Command, args []string) {
-			vanus.InitFakeSnowflake()
-			_ = os.Setenv("SEGMENT_SERVER_DEBUG_MODE", "true")
-			go func() {
-				_ = http.ListenAndServe("0.0.0.0:8080", nil)
-			}()
-			cfg := store.Config{
-				IP:   "127.0.0.1",
-				Port: 2148 + int(volumeID),
-				Volume: store.VolumeInfo{
-					ID:       uint16(volumeID),
-					Dir:      fmt.Sprintf("/Users/wenfeng/tmp/data/test/vanus/store-%d", uint16(volumeID)),
-					Capacity: 1073741824,
-				},
-				MetaStore: config.SyncStore{
-					WAL: config.WAL{
-						IO: config.IO{
-							Engine: "psync",
-						},
-					},
-				},
-				OffsetStore: config.AsyncStore{
-					WAL: config.WAL{
-						IO: config.IO{
-							Engine: "psync",
-						},
-					},
-				},
-				Raft: config.Raft{
-					WAL: config.WAL{
-						BlockSize: 32 * 1024,
-						IO: config.IO{
-							Engine: "psync",
-						},
-					},
-				},
-			}
-			runStore(cfg)
-		},
-	}
-	cmd.Flags().Int64Var(&volumeID, "volume-id", 1, "")
-	return cmd
-}
-
-func createBlockCommand() *cobra.Command {
-	cmd := &cobra.Command{
-		Use:   "create-block",
-		Short: "create blocks",
-		Run: func(cmd *cobra.Command, args []string) {
-			addrs := make(map[string]*grpc.ClientConn)
-			clis := make([]segpb.SegmentServerClient, len(storeAddrs))
-			for idx, addr := range storeAddrs {
-				var opts []grpc.DialOption
-				opts = append(opts, grpc.WithTransportCredentials(insecure.NewCredentials()))
-				conn, err := grpc.Dial(addr, opts...)
-				if err != nil {
-					panic("failed to dial to: " + err.Error())
-				}
-				defer conn.Close()
-				addrs[addr] = conn
-
-				clis[idx] = segpb.NewSegmentServerClient(conn)
-			}
-
-			cnt := 0
-			leaderCnt := 0
-			for idx := 0; idx < segmentNumbers; idx++ {
-				replicas := map[uint64]string{}
-				for j := 0; j < replicaNum; j++ {
-					id := vanus.NewTestID()
-					cli := clis[cnt%len(clis)]
-					_, err := cli.CreateBlock(context.Background(), &segpb.CreateBlockRequest{
-						Id:   id.Uint64(),
-						Size: blockSize * 1024 * 1024,
-					})
-					if err != nil {
-						panic("failed to create block to: " + err.Error())
-					}
-					replicas[id.Uint64()] = storeAddrs[cnt%len(clis)]
-					cnt++
-					if len(replicas) >= replicaNum {
-						break
-					}
-				}
-				req := &segpb.ActivateSegmentRequest{
-					EventlogId:     vanus.NewTestID().Uint64(),
-					ReplicaGroupId: vanus.NewTestID().Uint64(),
-					Replicas:       replicas,
-				}
-				leaderAddr := leaderCnt % len(clis)
-				_, err := clis[leaderAddr].ActivateSegment(context.Background(), req)
-				if err != nil {
-					panic("failed to activate segment to: " + err.Error())
-				}
-				br := &BlockRecord{
-					LeaderID:   0,
-					LeaderAddr: storeAddrs[leaderAddr],
-					Replicas:   replicas,
-				}
-				for id, addr := range br.Replicas {
-					if addr == br.LeaderAddr {
-						br.LeaderID = id
-						break
-					}
-				}
-				data, _ := json.Marshal(br)
-				rCmd := rdb.LPush(context.Background(), blockInfoKeyInRedis, data)
-				if rCmd.Err() != nil {
-					fmt.Printf("failed to save block info to redis: %s\n", err)
-				}
-				fmt.Printf("the segment: %d activated to %s\n", req.ReplicaGroupId, storeAddrs[leaderAddr])
-				leaderCnt++
-			}
-
-			return
-		},
-	}
-	cmd.Flags().Int64Var(&blockSize, "block-size", 64, "MB")
-	cmd.Flags().IntVar(&segmentNumbers, "number", 1, "")
-	cmd.Flags().IntVar(&replicaNum, "replicas", 3, "")
-	cmd.Flags().StringArrayVar(&storeAddrs, "store-address", []string{
-		"127.0.0.1:2149", "127.0.0.1:2150", "127.0.0.1:2151",
-	}, "")
-	return cmd
-}
-
-func sendCommand() *cobra.Command {
-	cmd := &cobra.Command{
-		Use:   "send",
-		Short: "send events to block",
-		Run: func(cmd *cobra.Command, args []string) {
-			rCmd := rdb.LLen(context.Background(), blockInfoKeyInRedis)
-			if rCmd.Err() != nil {
-				panic("failed to read block records from redis: " + rCmd.Err().Error())
-			}
-
-			le := int(rCmd.Val())
-			brs := make([]BlockRecord, le)
-			for i := 0; i < le; i++ {
-				var sCmd *redis.StringCmd
-				if noCleanCache {
-					sCmd = rdb.LIndex(context.Background(), blockInfoKeyInRedis, int64(i))
-				} else {
-					sCmd = rdb.LPop(context.Background(), blockInfoKeyInRedis)
-				}
-				if rCmd.Err() != nil {
-					panic("failed to read block records from redis: " + rCmd.Err().Error())
-				}
-				br := BlockRecord{}
-				_ = json.Unmarshal([]byte(sCmd.Val()), &br)
-				brs[i] = br
-				fmt.Printf("found a block, ID: %s, addr: %s\n",
-					vanus.ID(br.LeaderID).String(), br.LeaderAddr)
-			}
-
-			conns := make(map[string]*grpc.ClientConn, 0)
-			clis := make(map[string]segpb.SegmentServerClient, 0)
-			for _, v := range brs {
-				_, exist := conns[v.LeaderAddr]
-				if exist {
-					continue
-				}
-				var opts []grpc.DialOption
-				opts = append(opts, grpc.WithTransportCredentials(insecure.NewCredentials()))
-				conn, err := grpc.Dial(v.LeaderAddr, opts...)
-				if err != nil {
-					panic("failed to dial to: " + err.Error())
-				}
-
-				conns[v.LeaderAddr] = conn
-				clis[v.LeaderAddr] = segpb.NewSegmentServerClient(conn)
-			}
-			defer func() {
-				for _, v := range conns {
-					_ = v.Close()
-				}
-			}()
-
-			count := int64(0)
-			failed := int64(0)
-			for _, abr := range brs {
-				cli := clis[abr.LeaderAddr]
-				for idx := 0; idx < parallelism; idx++ {
-					go func(br BlockRecord, c segpb.SegmentServerClient) {
-						for atomic.LoadInt64(&count)+atomic.LoadInt64(&failed) < totalSent {
-							events := generateEvents()
-							_, err := c.AppendToBlock(context.Background(), &segpb.AppendToBlockRequest{
-								BlockId: br.LeaderID,
-								Events:  &v1.CloudEventBatch{Events: events},
-							})
-							if err != nil {
-								atomic.AddInt64(&failed, 1)
-								time.Sleep(time.Second)
-								fmt.Printf("failed to append events to %s, block [%s], error: [%s]\n",
-									br.LeaderAddr, vanus.ID(br.LeaderID).String(), err.Error())
-							} else {
-								atomic.AddInt64(&count, int64(len(events)))
-							}
-						}
-					}(abr, cli)
-				}
-			}
-			pre := int64(0)
-			for atomic.LoadInt64(&count)+atomic.LoadInt64(&failed) < totalSent {
-				cur := atomic.LoadInt64(&count)
-				fmt.Printf("success: %d, failed: %d, TPS: %d\n",
-					cur, atomic.LoadInt64(&failed), cur-pre)
-				pre = cur
-				time.Sleep(time.Second)
-			}
-			fmt.Printf("success: %d, failed: %d, TPS: %d\n",
-				count, atomic.LoadInt64(&failed), count-pre)
-		},
-	}
-	cmd.Flags().BoolVar(&noCleanCache, "no-clean-cache", false, "")
-	cmd.Flags().Int64Var(&totalSent, "total-number", 100000, "")
-	cmd.Flags().IntVar(&parallelism, "parallelism", 4, "")
-	cmd.Flags().IntVar(&payloadSize, "payload-size", 1024, "")
-	cmd.Flags().IntVar(&batchSize, "batch-size", 1, "")
-	return cmd
-}
-
-func runStore(cfg store.Config) {
-	listener, err := net.Listen("tcp", fmt.Sprintf(":%d", cfg.Port))
-	if err != nil {
-		log.Error().Err(err).Int("port", cfg.Port).Msg("Listen tcp port failed.")
-		os.Exit(-1)
-	}
-
-	ctx := context.Background()
-	srv := segment.NewServer(cfg)
-
-	if err = srv.Initialize(ctx); err != nil {
-		log.Error().Err(err).Msg("The SegmentServer has initialized failed.")
-		os.Exit(-2)
-	}
-
-	log.Info().
-		Str("listen_ip", cfg.IP).
-		Int("listen_port", cfg.Port).Msg("The SegmentServer ready to work.")
-
-	if err = srv.Serve(listener); err != nil {
-		log.Error().Err(err).Msg("The SegmentServer occurred an error.")
-		return
-	}
-
-	log.Info().Msg("The SegmentServer has been shutdown.")
-}
-
-var (
-	rd      = rand.New(rand.NewSource(time.Now().UnixNano()))
-	payload string
-	mutex   sync.RWMutex
-)
-
-func generateEvents() []*v1.CloudEvent {
-	mutex.RLock()
-	defer mutex.RUnlock()
-	if payload == "" {
-		mutex.RUnlock()
-		mutex.Lock()
-		if payload == "" {
-			payload = genStr(rd, payloadSize)
-		}
-		mutex.Unlock()
-		mutex.RLock()
-	}
-	var e []*v1.CloudEvent
-	for idx := 0; idx < batchSize; idx++ {
-		e = append(e, &v1.CloudEvent{
-			Id:          uuid.NewString(),
-			Source:      "performance.benchmark.vanus",
-			SpecVersion: "1.0",
-			Type:        "performance.benchmark.vanus",
-			Data:        &v1.CloudEvent_TextData{TextData: payload},
-			Attributes: map[string]*v1.CloudEvent_CloudEventAttributeValue{
-				"time": {
-					Attr: &v1.CloudEvent_CloudEventAttributeValue_CeTimestamp{
-						CeTimestamp: timestamppb.New(time.Now()),
-					},
-				},
-			},
-		})
-	}
-	return e
-}
-
-func startMetrics() {
-	http.Handle("/metrics", promhttp.Handler())
-	err := http.ListenAndServe(":2112", nil)
-	if err != nil {
-		log.Error().Err(err).Msg("Metrics listen and serve failed.")
-	}
-}
diff --git a/test/benchmark/command/db.go b/test/benchmark/command/db.go
deleted file mode 100644
index dd5862b..0000000
--- a/test/benchmark/command/db.go
+++ /dev/null
@@ -1,130 +0,0 @@
-// Copyright 2022 Linkall Inc.
-//
-// Licensed 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.
-
-package command
-
-import (
-	"context"
-	"fmt"
-	"time"
-
-	"github.com/go-redis/redis/v8"
-	"go.mongodb.org/mongo-driver/bson"
-	"go.mongodb.org/mongo-driver/bson/primitive"
-	"go.mongodb.org/mongo-driver/mongo"
-	"go.mongodb.org/mongo-driver/mongo/options"
-
-	"github.com/vanus-labs/vanus/observability/log"
-)
-
-var (
-	rdb        *redis.Client
-	mgo        *mongo.Client
-	taskColl   *mongo.Collection
-	resultColl *mongo.Collection
-	taskID     primitive.ObjectID
-)
-
-const (
-	database = "vanus-benchmark"
-)
-
-func InitDatabase(redisAddr string, mongodb string, begin bool, withoutMongoDB bool) {
-	rdb = redis.NewClient(&redis.Options{
-		Addr: redisAddr,
-	})
-	cmd := rdb.Ping(context.Background())
-	if cmd.Err() != nil {
-		panic("failed to connect redis: " + cmd.Err().Error())
-	}
-	log.Info(nil, "connect to redis success", map[string]interface{}{
-		"addr": redisAddr,
-	})
-
-	if withoutMongoDB {
-		return
-	}
-	cli, err := mongo.Connect(context.Background(), options.Client().ApplyURI(mongodb))
-	if err != nil {
-		panic("failed to connect mongodb: " + err.Error())
-	}
-	log.Info(nil, "connect to mongodb success", nil)
-	mgo = cli
-	taskColl = cli.Database(database).Collection("tasks")
-	resultColl = cli.Database(database).Collection("results")
-	c, err := taskColl.Find(context.Background(), bson.M{
-		"running": true,
-	})
-	if err != nil {
-		panic("failed to count tasks: " + err.Error())
-	}
-	tasks := make([]*Task, 0)
-	for c.Next(context.Background()) {
-		t := &Task{}
-		_ = c.Decode(t)
-		tasks = append(tasks, t)
-	}
-
-	if begin {
-		if len(tasks) != 0 {
-			panic(fmt.Sprintf("invalid taks numbers: %d", len(tasks)))
-		}
-		t := &Task{
-			ID:       primitive.NewObjectID(),
-			CreateAt: time.Now(),
-			Running:  true,
-		}
-		_, err := taskColl.InsertOne(context.Background(), t)
-		if err != nil {
-			panic("failed to create task into mongodb: " + err.Error())
-		}
-		taskID = t.ID
-		log.Info(nil, "create a new task", map[string]interface{}{
-			"task_id": taskID.Hex(),
-		})
-	} else {
-		if len(tasks) != 1 {
-			panic(fmt.Sprintf("invalid taks numbers: %d", len(tasks)))
-		}
-		taskID = tasks[0].ID
-		log.Info(nil, "find a existed task", map[string]interface{}{
-			"task_id": taskID.Hex(),
-		})
-	}
-}
-
-func CloseDatabases(end bool) {
-	if end {
-		res, err := taskColl.UpdateMany(context.Background(), bson.M{
-			"running": true,
-		}, bson.M{
-			"$set": bson.M{
-				"running":      false,
-				"completed_at": time.Now(),
-			},
-		})
-		if err != nil {
-			log.Error(nil, "failed to update task status", map[string]interface{}{
-				Err(err).
-			})
-		}
-		log.Info(nil, "task is completed", map[string]interface{}{
-			"task_id": res.UpsertedID,
-		})
-	}
-	_ = rdb.Close()
-	if mgo != nil {
-		_ = mgo.Disconnect(context.Background())
-	}
-}
diff --git a/test/benchmark/command/performance.go b/test/benchmark/command/performance.go
deleted file mode 100644
index c3f085e..0000000
--- a/test/benchmark/command/performance.go
+++ /dev/null
@@ -1,669 +0,0 @@
-// Copyright 2022 Linkall Inc.
-//
-// Licensed 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.
-
-package command
-
-import (
-	"context"
-	"encoding/json"
-	"errors"
-	"fmt"
-	"github.com/vanus-labs/vanus/observability/log"
-	"math/rand"
-	"net"
-	"net/http"
-	"os"
-	"path"
-	"strings"
-	"sync"
-	"sync/atomic"
-	"time"
-
-	"github.com/HdrHistogram/hdrhistogram-go"
-	ce "github.com/cloudevents/sdk-go/v2"
-	cehttp "github.com/cloudevents/sdk-go/v2/protocol/http"
-	"github.com/fatih/color"
-	"github.com/go-redis/redis/v8"
-	"github.com/google/uuid"
-	"github.com/jedib0t/go-pretty/v6/table"
-	"github.com/jedib0t/go-pretty/v6/text"
-	"github.com/spf13/cobra"
-	"go.mongodb.org/mongo-driver/bson/primitive"
-	"google.golang.org/grpc"
-	"google.golang.org/grpc/credentials/insecure"
-	"google.golang.org/protobuf/types/known/emptypb"
-
-	"github.com/vanus-labs/vanus/observability/log"
-	"github.com/vanus-labs/vanus/proto/pkg/cloudevents"
-)
-
-const (
-	httpPrefix      = "http://"
-	eventReceivedAt = "xreceivedat"
-	eventSentAt     = "xsentat"
-	redisKey        = "/vanus/benchmark/performance"
-)
-
-var (
-	eventbusList []string
-	number       int64
-	parallelism  int
-	payloadSize  int
-
-	port           int
-	benchType      string
-	clientProtocol string
-)
-
-func E2ECommand() *cobra.Command {
-	cmd := &cobra.Command{
-		Use:   "e2e SUB-COMMAND",
-		Short: "run e2e performance test",
-	}
-	cmd.AddCommand(runCommand())
-	cmd.AddCommand(analyseCommand())
-	cmd.AddCommand(receiveCommand())
-	return cmd
-}
-
-func runCommand() *cobra.Command {
-	cmd := &cobra.Command{
-		Use:   "run SUB-COMMAND",
-		Short: "vanus performance benchmark program",
-		Run: func(cmd *cobra.Command, args []string) {
-			if len(eventbusList) == 0 {
-				panic("eventbus list is empty")
-			}
-
-			log.Info(context.Background(), "benchmark", map[string]interface{}{
-				"id": getBenchmarkID(),
-			})
-
-			if clientProtocol == "grpc" {
-				sendWithGRPC(cmd)
-			} else {
-				sendWithHTTP(cmd)
-			}
-		},
-	}
-	cmd.Flags().StringArrayVar(&eventbusList, "eventbus", []string{}, "the eventbus name used to")
-	cmd.Flags().Int64Var(&number, "number", 100000, "the event number")
-	cmd.Flags().IntVar(&parallelism, "parallelism", 1, "")
-	cmd.Flags().IntVar(&payloadSize, "payload-size", 64, "byte")
-	cmd.Flags().StringVar(&clientProtocol, "protocol", "grpc", "")
-	cmd.Flags().IntVar(&batchSize, "batch-size", 1, "")
-	return cmd
-}
-
-func sendWithGRPC(cmd *cobra.Command) {
-	endpoint := mustGetGatewayEndpoint(cmd)
-
-	// start
-	start := time.Now()
-	ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
-	defer cancel()
-
-	opts := []grpc.DialOption{
-		grpc.WithBlock(),
-		grpc.WithTransportCredentials(insecure.NewCredentials()),
-	}
-
-	var success int64
-	wg := sync.WaitGroup{}
-	latency := hdrhistogram.New(1, 1000000, 10000)
-	for _, eb := range eventbusList {
-		for idx := 0; idx < parallelism; idx++ {
-			wg.Add(1)
-			go func() {
-				conn, err := grpc.DialContext(ctx, endpoint, opts...)
-				if err != nil {
-					cmdFailedf(cmd, "failed to connect to gateway")
-				}
-				batchClient := cloudevents.NewCloudEventsClient(conn)
-				for atomic.LoadInt64(&success) < number {
-					s := time.Now()
-					events := generateEvents()
-					_, err := batchClient.Send(context.Background(), &cloudevents.BatchEvent{
-						EventbusName: eb,
-						Events:       &cloudevents.CloudEventBatch{Events: events},
-					})
-					if err != nil {
-						log.Warn(context.Background(), "failed to send events", map[string]interface{}{
-							Err(err).
-						})
-					} else {
-						atomic.AddInt64(&success, int64(len(events)))
-						if err := latency.RecordValue(time.Now().Sub(s).Microseconds()); err != nil {
-							panic(err)
-						}
-					}
-				}
-				wg.Done()
-			}()
-		}
-	}
-
-	ctx, can := context.WithCancel(context.Background())
-	m := make(map[int]int, 0)
-	wg2 := sync.WaitGroup{}
-	wg2.Add(1)
-	go func() {
-		var prev int64
-		tick := time.NewTicker(time.Second)
-		c := 1
-		defer func() {
-			tick.Stop()
-			tps := success - prev
-			log.Info(nil, fmt.Sprintf("Sent: %d, TPS: %d\n", success, tps), nil)
-			m[c] = int(tps)
-			wg2.Done()
-		}()
-		for prev < number {
-			select {
-			case <-tick.C:
-				cur := atomic.LoadInt64(&success)
-				tps := cur - prev
-				m[c] = int(tps)
-				log.Info(nil, fmt.Sprintf("Sent: %d, TPS: %d\n", cur, tps), nil)
-				prev = cur
-				c++
-			case <-ctx.Done():
-				return
-			}
-		}
-	}()
-	wg.Wait()
-	can()
-	wg2.Wait()
-	saveTPS(m, "produce")
-	res := latency.CumulativeDistribution()
-	unit := "us"
-	result := map[string]map[string]interface{}{}
-	for _, v := range res {
-		if v.Count == 0 {
-			continue
-		}
-
-		result[fmt.Sprintf("%.2f", v.Quantile)] = map[string]interface{}{
-			"value": v.ValueAt,
-			"unit":  unit,
-			"count": v.Count,
-		}
-		fmt.Printf("%.2f pct - %d %s\n", v.Quantile, v.ValueAt, unit)
-	}
-
-	fmt.Printf("Total: %d\n", latency.TotalCount())
-	fmt.Printf("Latency Mean: %.2f %s\n", latency.Mean(), unit)
-	fmt.Printf("Latency StdDev: %.2f\n", latency.StdDev())
-	fmt.Printf("Latency Max: %d %s, Latency Min: %d %s\n", latency.Max(), unit, latency.Min(), "ms")
-	fmt.Println()
-	log.Info(nil, "all message were sent", map[string]interface{}{
-		"success": success,
-		"failed":  number - success,
-		"used":    time.Now().Sub(start),
-	})
-	_ = rdb.Close()
-}
-
-func sendWithHTTP(cmd *cobra.Command) {
-	endpoint := mustGetGatewayEndpoint(cmd)
-
-	// start
-	start := time.Now()
-	p, err := ce.NewHTTP()
-	if err != nil {
-		cmdFailedf(cmd, "init ce protocol error: %s\n", err)
-	}
-	c, err := ce.NewClient(p, ce.WithTimeNow(), ce.WithUUIDs())
-	if err != nil {
-		cmdFailedf(cmd, "create ce client error: %s\n", err)
-	}
-
-	var success int64
-	wg := sync.WaitGroup{}
-	for _, eb := range eventbusList {
-		for idx := 0; idx < parallelism; idx++ {
-			wg.Add(1)
-			go func() {
-				for atomic.LoadInt64(&success) < number {
-					var target string
-					if strings.HasPrefix(endpoint, httpPrefix) {
-						target = fmt.Sprintf("%s/gateway/%s", endpoint, eb)
-					} else {
-						target = fmt.Sprintf("%s%s/gateway/%s", httpPrefix, endpoint, eb)
-					}
-					r, e := send(c, target)
-					if e != nil {
-						panic(e)
-					}
-					if r {
-						atomic.AddInt64(&success, 1)
-					}
-				}
-				wg.Done()
-			}()
-		}
-	}
-
-	ctx, can := context.WithCancel(context.Background())
-	m := make(map[int]int, 0)
-	wg2 := sync.WaitGroup{}
-	wg2.Add(1)
-	go func() {
-		var prev int64
-		tick := time.NewTicker(time.Second)
-		c := 1
-		defer func() {
-			tick.Stop()
-			tps := success - prev
-			log.Info(nil, fmt.Sprintf("Sent: %d, TPS: %d\n", success, tps), nil)
-			m[c] = int(tps)
-			wg2.Done()
-		}()
-		for prev < number {
-			select {
-			case <-tick.C:
-				cur := atomic.LoadInt64(&success)
-				tps := cur - prev
-				m[c] = int(tps)
-				log.Info(nil, fmt.Sprintf("Sent: %d, TPS: %d\n", cur, tps), nil)
-				prev = cur
-				c++
-			case <-ctx.Done():
-				return
-			}
-		}
-	}()
-	wg.Wait()
-	can()
-	wg2.Wait()
-	saveTPS(m, "produce")
-	log.Info(nil, "all message were sent", map[string]interface{}{
-		"success": success,
-		"failed":  number - success,
-		"used":    time.Now().Sub(start),
-	})
-	_ = rdb.Close()
-}
-
-func saveTPS(m map[int]int, t string) {
-	d, _ := json.Marshal(m)
-	_ = rdb.Set(context.Background(), getTPSKey(t), d, 0)
-}
-
-func getTPSKey(t string) string {
-	return path.Join(redisKey, fmt.Sprintf("tps-%s", t), getBenchmarkID())
-}
-
-func send(c ce.Client, target string) (bool, error) {
-	ctx := ce.ContextWithTarget(context.Background(), target)
-	r := &Record{
-		BornAt: time.Now(),
-	}
-	event := ce.NewEvent()
-
-	event.SetID(uuid.NewString())
-	event.SetSource("performance.benchmark.vanus")
-	event.SetType("performance.benchmark.vanus")
-	event.SetTime(r.BornAt)
-
-	err := event.SetData(ce.ApplicationJSON, genData())
-	if err != nil {
-		return false, errors.New("failed to set data: " + err.Error())
-	}
-	res := c.Send(ctx, event)
-	if ce.IsUndelivered(res) {
-		return false, errors.New("failed to send: " + res.Error())
-	} else {
-		var httpResult *cehttp.Result
-		ce.ResultAs(res, &httpResult)
-		if httpResult != nil && httpResult.StatusCode == http.StatusOK {
-			r.SentAt = time.Now()
-			event.SetExtension(eventSentAt, time.Now())
-			cache(r, "send")
-		} else {
-			return false, nil
-		}
-	}
-	return true, nil
-}
-
-func receiveCommand() *cobra.Command {
-	cmd := &cobra.Command{
-		Use:   "receive",
-		Short: "vanus performance benchmark program",
-		Run: func(cmd *cobra.Command, args []string) {
-			ls, err := net.Listen("tcp", fmt.Sprintf("0.0.0.0:%d", port))
-			if err != nil {
-				cmdFailedf(cmd, "init network error: %s", err)
-			}
-
-			grpcServer := grpc.NewServer()
-
-			cloudevents.RegisterCloudEventsServer(grpcServer, &testReceiver{})
-
-			log.Info(context.TODO(), fmt.Sprintf("the receiver ready to work at %d", port), map[string]interface{}{
-				"benchmark_id": getBenchmarkID(),
-			})
-			err = grpcServer.Serve(ls)
-			if err != nil {
-				log.Error(nil, "grpc server occurred an error", map[string]interface{}{
-					Err(err).
-				})
-			}
-		},
-	}
-	cmd.Flags().IntVar(&port, "port", 8080, "the port the receive server running")
-	return cmd
-}
-
-type testReceiver struct{}
-
-func (t testReceiver) Send(ctx context.Context, event *cloudevents.BatchEvent) (*emptypb.Empty, error) {
-	for idx := range event.Events.GetEvents() {
-		e := event.Events.GetEvents()[idx]
-		attr := e.GetAttributes()["time"]
-
-		if err := receive(ctx, e.Id, attr.GetCeTimestamp().AsTime()); err != nil {
-			return nil, err
-		}
-	}
-	return &emptypb.Empty{}, nil
-}
-
-func analyseCommand() *cobra.Command {
-	cmd := &cobra.Command{
-		Use:   "analyse",
-		Short: "vanus performance benchmark program",
-		Run: func(cmd *cobra.Command, args []string) {
-			if benchType == "" {
-				cmdFailedf(cmd, "benchmark-type can't be empty")
-			}
-			ch := make(chan *Record, 64)
-			wg := sync.WaitGroup{}
-			wg.Add(1)
-			f := func(his *hdrhistogram.Histogram, unit string) {
-				res := his.CumulativeDistribution()
-				result := map[string]map[string]interface{}{}
-				for _, v := range res {
-					if v.Count == 0 {
-						continue
-					}
-
-					result[fmt.Sprintf("%.2f", v.Quantile)] = map[string]interface{}{
-						"value": v.ValueAt,
-						"unit":  unit,
-						"count": v.Count,
-					}
-					fmt.Printf("%.2f pct - %d %s\n", v.Quantile, v.ValueAt, unit)
-				}
-
-				fmt.Printf("Total: %d\n", his.TotalCount())
-				fmt.Printf("Latency Mean: %.2f %s\n", his.Mean(), unit)
-				fmt.Printf("Latency StdDev: %.2f\n", his.StdDev())
-				fmt.Printf("Latency Max: %d %s, Latency Min: %d %s\n", his.Max(), unit, his.Min(), unit)
-				fmt.Println()
-
-				r := &BenchmarkResult{
-					ID:       primitive.NewObjectID(),
-					TaskID:   taskID,
-					RType:    ResultLatency,
-					Values:   result,
-					Mean:     his.Mean(),
-					Stdev:    his.StdDev(),
-					CreateAt: time.Now(),
-				}
-				_, err := resultColl.InsertOne(context.Background(), r)
-				if err != nil {
-					log.Error(nil, "failed to save latency result to mongodb", map[string]interface{}{
-						Err(err).
-					})
-				}
-
-				tps := hdrhistogram.New(1, 100000, 50)
-
-				cmd := rdb.Get(context.Background(), getTPSKey(benchType))
-				m := make(map[int]int, 0)
-				_ = json.Unmarshal([]byte(cmd.Val()), &m)
-				result = map[string]map[string]interface{}{}
-				for idx, v := range m {
-					result[fmt.Sprintf("%d", idx)] = map[string]interface{}{
-						"value": v,
-					}
-					if err := tps.RecordValue(int64(v)); err != nil {
-						fmt.Println("error: TPS " + err.Error())
-					}
-				}
-				res = tps.CumulativeDistribution()
-				for _, v := range res {
-					if v.Count == 0 {
-						continue
-					}
-
-					fmt.Printf("%3.2f pct - %d\n", v.Quantile, v.ValueAt)
-				}
-				fmt.Printf("Used: %d s\n", tps.TotalCount())
-				fmt.Printf("TPS Mean: %.2f/s\n", tps.Mean())
-				fmt.Printf("TPS StdDev: %.2f\n", tps.StdDev())
-				fmt.Printf("TPS Max: %d, TPS Min: %d\n", tps.Max(), tps.Min())
-
-				r = &BenchmarkResult{
-					ID:       primitive.NewObjectID(),
-					TaskID:   taskID,
-					RType:    ResultThroughput,
-					Values:   result,
-					Mean:     tps.Mean(),
-					Stdev:    tps.StdDev(),
-					CreateAt: time.Now(),
-				}
-				_, err = resultColl.InsertOne(context.Background(), r)
-				if err != nil {
-					log.Error(nil, "failed to save latency result to mongodb", map[string]interface{}{
-						Err(err).
-					})
-				}
-
-				wg.Done()
-			}
-			dataKey := ""
-			if benchType == "produce" {
-				dataKey = path.Join(redisKey, "send", getBenchmarkID())
-				go analyseProduction(ch, f)
-			} else {
-				dataKey = path.Join(redisKey, "receive", getBenchmarkID())
-				go analyseConsumption(ch, f)
-			}
-			ctx := context.Background()
-			num := rdb.LLen(ctx, dataKey).Val()
-			for idx := 0; idx < int(num); idx++ {
-				strCMD := rdb.LPop(ctx, dataKey)
-				if strCMD.Err() != nil {
-					if strCMD.Err() == redis.Nil {
-						break
-					}
-					log.Warn(ctx).Msg("LPop failed")
-						log.KeyError: strCMD.Err(),
-						"key":        dataKey,
-					})
-					break
-				}
-				data, _ := strCMD.Bytes()
-				r := &Record{}
-				if err := json.Unmarshal(data, r); err != nil {
-					log.Warn(ctx).Msg("unmarshall cloud event failed")
-						Err(err).
-						"data":       strCMD.Val(),
-					})
-				}
-				ch <- r
-			}
-			for len(ch) > 0 {
-				time.Sleep(time.Second)
-			}
-			close(ch)
-			wg.Wait()
-			_ = rdb.Close()
-		},
-	}
-	cmd.Flags().StringVar(&benchType, "benchmark-type", "",
-		"the type of benchmark, produce or consume")
-	return cmd
-}
-
-var (
-	receiveOnce  = sync.Once{}
-	consumingCnt = int64(0)
-	totalTime    = int64(0)
-)
-
-func receive(_ context.Context, id string, t time.Time) error {
-	receiveOnce.Do(func() {
-		prev := int64(0)
-		go func() {
-			for {
-				cur := atomic.LoadInt64(&consumingCnt)
-				tps := cur - prev
-				prev = cur
-				log.Info(nil, fmt.Sprintf("Received: %d, TPS: %d, Average Latency: %d us\n", cur, tps,
-					atomic.LoadInt64(&totalTime)/atomic.LoadInt64(&consumingCnt)), nil)
-				time.Sleep(time.Second)
-			}
-		}()
-	})
-	atomic.AddInt64(&totalTime, time.Now().Sub(t).Microseconds())
-	r := &Record{
-		ID:         id,
-		BornAt:     t,
-		ReceivedAt: time.Now(),
-	}
-	cache(r, "receive")
-	atomic.AddInt64(&consumingCnt, 1)
-	return nil
-}
-
-func isOutputFormatJSON(cmd *cobra.Command) bool {
-	v, err := cmd.Flags().GetString("output-format")
-	if err != nil {
-		return false
-	}
-	return strings.ToLower(v) == "json"
-}
-
-func cache(r *Record, key string) {
-	//key = path.Join(redisKey, key, getBenchmarkID())
-	//data, _ := json.Marshal(r)
-	//cmd := rdb.LPush(context.Background(), key, data)
-	//if cmd.Err() != nil {
-	//	log.Warn(context.Background(), "set event to redis failed", map[string]interface{}{
-	//		log.KeyError: cmd.Err(),
-	//	})
-	//}
-}
-
-func analyseProduction(ch <-chan *Record, f func(his *hdrhistogram.Histogram, unit string)) {
-	his := hdrhistogram.New(1, 10000, 50)
-	for r := range ch {
-		latency := r.SentAt.Sub(r.BornAt)
-		if err := his.RecordValue(latency.Milliseconds()); err != nil {
-			fmt.Println(err)
-		}
-	}
-	f(his, "ms")
-}
-
-func analyseConsumption(ch <-chan *Record, f func(his *hdrhistogram.Histogram, unit string)) {
-	his := hdrhistogram.New(1, 1000, 50)
-	cnt := 0
-	for r := range ch {
-		cnt++
-		latency := r.ReceivedAt.Sub(r.BornAt)
-		if err := his.RecordValue(latency.Milliseconds()); err != nil {
-			log.Warn(context.Background(), "histogram error", map[string]interface{}{
-				Err(err).
-				"val":        latency.Milliseconds(),
-			})
-		}
-	}
-	f(his, "ms")
-}
-
-func mustGetGatewayEndpoint(cmd *cobra.Command) string {
-	endpoint, err := cmd.Flags().GetString("endpoint")
-	if err != nil {
-		cmdFailedf(cmd, "get gateway endpoint failed: %s", err)
-	}
-	return endpoint
-}
-
-var (
-	once = sync.Once{}
-	ch   = make(chan map[string]interface{}, 512)
-)
-
-func genData() map[string]interface{} {
-	once.Do(func() {
-		go func() {
-			rd := rand.New(rand.NewSource(time.Now().UnixNano()))
-			for {
-				m := map[string]interface{}{
-					"data": genStr(rd, payloadSize),
-				}
-				ch <- m
-			}
-		}()
-	})
-	return <-ch
-}
-
-func genStr(rd *rand.Rand, size int) string {
-	str := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
-	data := ""
-	for idx := 0; idx < size; idx++ {
-		data = fmt.Sprintf("%s%c", data, str[rd.Int31n(int32(len(str)))])
-	}
-	return data
-}
-
-func cmdFailedf(cmd *cobra.Command, format string, a ...interface{}) {
-	errStr := format
-	if a != nil {
-		errStr = fmt.Sprintf(format, a)
-	}
-	if isOutputFormatJSON(cmd) {
-		m := map[string]string{"ERROR": errStr}
-		data, _ := json.Marshal(m)
-		color.Red(string(data))
-	} else {
-		t := table.NewWriter()
-		t.AppendHeader(table.Row{"ERROR"})
-		t.AppendRow(table.Row{errStr})
-		t.SetColumnConfigs([]table.ColumnConfig{
-			{Number: 1, Align: text.AlignCenter, AlignHeader: text.AlignCenter},
-			{Number: 2, Align: text.AlignCenter, AlignHeader: text.AlignCenter},
-		})
-		t.SetOutputMirror(os.Stdout)
-		t.Render()
-	}
-
-	os.Exit(-1)
-}
-
-var tmpID = uuid.NewString()
-
-func getBenchmarkID() string {
-	if taskID.IsZero() {
-		return tmpID
-	}
-	return taskID.Hex()
-}
diff --git a/test/benchmark/main.go b/test/benchmark/main.go
deleted file mode 100644
index cc1c44e..0000000
--- a/test/benchmark/main.go
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2022 Linkall Inc.
-//
-// Licensed 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.
-
-package main
-
-import (
-	"fmt"
-	"os"
-
-	"github.com/fatih/color"
-	"github.com/spf13/cobra"
-
-	"github.com/vanus-labs/vanus/test/benchmark/command"
-)
-
-var rootCmd = &cobra.Command{
-	Use:        "vanus-bench",
-	Short:      "the benchmark tool of vanus",
-	SuggestFor: []string{"vsctl-bench"},
-}
-
-var (
-	defaultMongoDBURI = "mongodb+srv://vanus:%s@cluster0.ywakulp.mongodb.net/?retryWrites=true&w=majority"
-	caseNames         = map[string]bool{
-		"e2e-1eventbus-1eventlog-1client-1parallelism":   true,
-		"e2e-1eventbus-1eventlog-1client-16parallelism":  true,
-		"e2e-1eventbus-16eventlog-1client-16parallelism": true,
-		"e2e-component-store-1replicas":                  true,
-		"e2e-component-store-3replicas":                  true,
-	}
-
-	name        string
-	endpoint    string
-	redisAddr   string
-	mongodbPass string
-	begin       bool
-	end         bool
-	withMongoDB bool
-)
-
-func main() {
-	rootCmd.AddCommand(command.E2ECommand())
-	rootCmd.AddCommand(command.ComponentCommand())
-	rootCmd.PersistentPreRun = func(_ *cobra.Command, _ []string) {
-		command.InitDatabase(redisAddr, fmt.Sprintf(defaultMongoDBURI, mongodbPass), begin, withMongoDB)
-	}
-	rootCmd.PersistentPostRun = func(_ *cobra.Command, _ []string) {
-		command.CloseDatabases(end)
-	}
-
-	rootCmd.PersistentFlags().StringVar(&endpoint, "endpoint",
-		"127.0.0.1:8080", "the endpoints of vanus controller")
-	rootCmd.PersistentFlags().StringVar(&redisAddr, "redis-addr",
-		"127.0.0.1:6379", "address of redis")
-	rootCmd.PersistentFlags().StringVar(&defaultMongoDBURI, "mongodb-uri",
-		defaultMongoDBURI, "uri of mongo")
-	rootCmd.PersistentFlags().StringVar(&mongodbPass, "mongodb-password",
-		mongodbPass, "password for mongo")
-	rootCmd.PersistentFlags().StringVar(&name, "name", "", "task name")
-
-	rootCmd.PersistentFlags().BoolVar(&begin, "begin", false, "if the begin of a playbook")
-	rootCmd.PersistentFlags().BoolVar(&end, "end", false, "if the end of a playbook")
-	rootCmd.PersistentFlags().BoolVar(&withMongoDB, "without-mongodb", false, "if using mongodb")
-
-	if err := rootCmd.Execute(); err != nil {
-		color.Red("vsctl-bench run error: %s", err)
-		os.Exit(-1)
-	}
-}
diff --git a/test/e2e/append/main.go b/test/e2e/append/main.go
deleted file mode 100644
index c26fd40..0000000
--- a/test/e2e/append/main.go
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2022 Linkall Inc.
-//
-// Licensed 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.
-
-package main
-
-import (
-	"context"
-	"fmt"
-
-	"google.golang.org/grpc"
-	"google.golang.org/grpc/credentials/insecure"
-
-	"github.com/vanus-labs/vanus/proto/pkg/cloudevents"
-	"github.com/vanus-labs/vanus/proto/pkg/segment"
-)
-
-func main() {
-	var opts []grpc.DialOption
-	opts = append(opts, grpc.WithTransportCredentials(insecure.NewCredentials()))
-	conn, err := grpc.Dial("127.0.0.1:11811", opts...)
-	if err != nil {
-		// eventlog.Fatal(err.Error(), nil)
-	}
-	cli := segment.NewSegmentServerClient(conn)
-	TestAppend(cli)
-	conn.Close()
-}
-
-func TestAppend(cli segment.SegmentServerClient) {
-	id := uint64(1646980924864482000)
-	cnt := 0
-	for idx := 0; idx < 100; idx++ {
-		cnt++
-		_, err := cli.AppendToBlock(context.Background(), &segment.AppendToBlockRequest{
-			BlockId: id,
-			Events: &cloudevents.CloudEventBatch{
-				Events: []*cloudevents.CloudEvent{
-					{
-						Id:          "asdsadsadasdsadsadasdsadsad",
-						Source:      "asdsadsadasdsadsadasdsadsad",
-						SpecVersion: "1.0",
-						Type:        "test1",
-						Attributes:  nil,
-						Data: &cloudevents.CloudEvent_TextData{
-							TextData: fmt.Sprintf("Hello DingJie %d", idx),
-						},
-					},
-				},
-			},
-		})
-		if err != nil {
-			//eventlog.Fatal(err.Error(), map[string]interface{}{
-			//	"sent": cnt,
-			//})
-		}
-	}
-}
-
-func TestRead() {
-}
diff --git a/test/e2e/destruct/main.go b/test/e2e/destruct/main.go
deleted file mode 100644
index fb87f3d..0000000
--- a/test/e2e/destruct/main.go
+++ /dev/null
@@ -1,324 +0,0 @@
-// Copyright 2022 Linkall Inc.
-//
-// Licensed 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.
-
-package main
-
-import (
-	"context"
-	"encoding/json"
-	"fmt"
-	"os"
-	"strconv"
-	"strings"
-	"sync"
-	"time"
-
-	ce "github.com/cloudevents/sdk-go/v2"
-	"github.com/fatih/color"
-	"github.com/go-resty/resty/v2"
-	"github.com/google/uuid"
-	"google.golang.org/grpc"
-	"google.golang.org/grpc/credentials/insecure"
-	log "k8s.io/klog/v2"
-
-	ctrlpb "github.com/vanus-labs/vanus/proto/pkg/controller"
-	"github.com/vanus-labs/vanus/proto/pkg/meta"
-
-	"github.com/vanus-labs/vanus/internal/kv"
-	"github.com/vanus-labs/vanus/internal/kv/etcd"
-)
-
-const (
-	VolumeKeyPrefixInKVStore         = "/vanus/internal/resource/volume/metadata"
-	BlockKeyPrefixInKVStore          = "/vanus/internal/resource/volume/block"
-	VolumeInstanceKeyPrefixInKVStore = "/vanus/internal/resource/volume/instance"
-
-	EventbusKeyPrefixInKVStore = "/vanus/internal/resource/eventbus"
-	EventlogKeyPrefixInKVStore = "/vanus/internal/resource/eventlog"
-	// SegmentKeyPrefixInKVStore restrain kv operator in one?
-	SegmentKeyPrefixInKVStore = "/vanus/internal/resource/segment"
-
-	EventlogSegmentsKeyPrefixInKVStore = "/vanus/internal/resource/segs_of_eventlog"
-)
-
-const (
-	// cloudEventDataRowLength = 4
-	HttpPrefix = "http://"
-	Eventbus   = "quick-start"
-)
-
-var (
-	Sink        = "http://quick-display:80"
-	Source      = ""
-	Filters     = ""
-	Transformer = ""
-
-	EventType   = "examples"
-	EventBody   = "Hello Vanus"
-	EventSource = "quick-start"
-
-	HttpClient = resty.New()
-	Endpoint   = os.Getenv("VANUS_GATEWAY")
-	EtcdClient kv.Client
-	err        error
-)
-
-func init() {
-	kvStoreEndpoints := []string{"192.168.49.2:30007"}
-	kvKeyPrefix := "/vanus"
-	EtcdClient, err = etcd.NewEtcdClientV3(kvStoreEndpoints, kvKeyPrefix)
-	if err != nil {
-		log.Fatalf("NewEtcdClientV3 failed, err: %+v\n", err)
-	}
-}
-
-func mustGetControllerProxyConn(ctx context.Context) *grpc.ClientConn {
-	splits := strings.Split(os.Getenv("VANUS_GATEWAY"), ":")
-	port, err := strconv.Atoi(splits[1])
-	if err != nil {
-		log.Error("parsing gateway port failed")
-		return nil
-	}
-	leaderConn := createGRPCConn(ctx, fmt.Sprintf("%s:%d", splits[0], port+2))
-	if leaderConn == nil {
-		log.Error("failed to connect to gateway")
-		return nil
-	}
-	return leaderConn
-}
-
-func createGRPCConn(ctx context.Context, addr string) *grpc.ClientConn {
-	if addr == "" {
-		return nil
-	}
-	addr = strings.TrimPrefix(addr, "http://")
-	var err error
-	var opts []grpc.DialOption
-	opts = append(opts, grpc.WithTransportCredentials(insecure.NewCredentials()))
-	opts = append(opts, grpc.WithBlock())
-	ctx, cancel := context.WithCancel(ctx)
-	timeout := false
-	go func() {
-		ticker := time.Tick(time.Second)
-		select {
-		case <-ctx.Done():
-		case <-ticker:
-			cancel()
-			timeout = true
-		}
-	}()
-	conn, err := grpc.DialContext(ctx, addr, opts...)
-	cancel()
-	if timeout {
-		color.Yellow("dial to controller: %s timeout, try to another controller", addr)
-		return nil
-	} else if err != nil {
-		color.Red("dial to controller: %s failed", addr)
-		return nil
-	}
-	return conn
-}
-
-func createEventbus(eb string) error {
-	ctx := context.Background()
-	grpcConn := mustGetControllerProxyConn(ctx)
-	defer func() {
-		_ = grpcConn.Close()
-	}()
-
-	cli := ctrlpb.NewEventbusControllerClient(grpcConn)
-	res, err := cli.CreateEventbus(ctx, &ctrlpb.CreateEventbusRequest{
-		Name: eb,
-	})
-	if err != nil {
-		log.Errorf("create eventbus failed, err: %s", err)
-		return err
-	}
-	log.Infof("create eventbus[%s] success.", res.Name)
-	return nil
-}
-
-func createSubscription(eventbus, sink, source, filters, transformer string) error {
-	ctx := context.Background()
-	grpcConn := mustGetControllerProxyConn(ctx)
-	defer func() {
-		_ = grpcConn.Close()
-	}()
-	var filter []*meta.Filter
-	if filters != "" {
-		err := json.Unmarshal([]byte(filters), &filter)
-		if err != nil {
-			log.Errorf("the filter invalid, err: %s", err)
-			return err
-		}
-	}
-
-	var trans *meta.Transformer
-	if transformer != "" {
-		err := json.Unmarshal([]byte(transformer), &trans)
-		if err != nil {
-			log.Errorf("the transformer invalid, err: %s", err)
-			return err
-		}
-	}
-
-	cli := ctrlpb.NewTriggerControllerClient(grpcConn)
-	res, err := cli.CreateSubscription(ctx, &ctrlpb.CreateSubscriptionRequest{
-		Subscription: &ctrlpb.SubscriptionRequest{
-			Source:      source,
-			Filters:     filter,
-			Sink:        sink,
-			Eventbus:    eventbus,
-			Transformer: trans,
-		},
-	})
-	if err != nil {
-		log.Errorf("create subscription failed, err: %s", err)
-		return err
-	}
-	log.Infof("create subscription[%d] success.", res.Id)
-	return nil
-}
-
-func putEvent(eventbus, eventID, eventType, eventBody, eventSource string) error {
-	p, err := ce.NewHTTP()
-	if err != nil {
-		log.Errorf("init ce protocol error: %s\n", err)
-		return err
-	}
-	c, err := ce.NewClient(p, ce.WithTimeNow(), ce.WithUUIDs())
-	if err != nil {
-		log.Errorf("create ce client error: %s\n", err)
-		return err
-	}
-
-	if eventID == "" {
-		eventID = uuid.NewString()
-	}
-
-	ceCtx := ce.ContextWithTarget(context.Background(),
-		fmt.Sprintf("%s%s/gateway/%s", HttpPrefix, Endpoint, eventbus))
-	event := ce.NewEvent()
-	event.SetID(eventID)
-	event.SetSource(eventSource)
-	event.SetType(eventType)
-	err = event.SetData(ce.TextPlain, eventBody)
-	if err != nil {
-		log.Errorf("set data failed: %s\n", err)
-		return err
-	}
-	c.Send(ceCtx, event)
-	log.Infof("put event[%s] success.", event.ID())
-	return nil
-}
-
-func putEvents(offset, eventNum, threadNum int64, eventbus, eventBody, eventSource string) error {
-	var (
-		i       int64
-		eventid int64 = offset
-		wg      sync.WaitGroup
-	)
-	for i = 1; i <= threadNum; i++ {
-		first := eventid
-		last := eventid + eventNum/threadNum
-		wg.Add(1)
-		go func(first, last int64) {
-			for n := first; n < last; n++ {
-				putEvent(eventbus, fmt.Sprintf("%d", n), EventType, eventBody, eventSource)
-			}
-			wg.Done()
-		}(first, last)
-		eventid = eventid + eventNum/threadNum
-	}
-	wg.Wait()
-	return nil
-}
-
-func getEvent(eventbus, offset, number string) error {
-	idx := strings.LastIndex(Endpoint, ":")
-	port, err := strconv.Atoi(Endpoint[idx+1:])
-	if err != nil {
-		log.Errorf("parse gateway port failed: %s, endpoint: %s", err, Endpoint)
-		return err
-	}
-	newEndpoint := fmt.Sprintf("%s:%d", Endpoint[:idx], port+1)
-	url := fmt.Sprintf("%s%s/getEvents?eventbus=%s&offset=%s&number=%s", HttpPrefix, newEndpoint, eventbus, offset, number)
-	evevt, err := HttpClient.NewRequest().Get(url)
-	if err != nil {
-		log.Errorf("get event failed, err: %s\n", err)
-		return err
-	}
-	log.Infof("get event success, event: %s\n", evevt.String())
-	return nil
-}
-
-func Test_pre_destructive() {
-	err = createEventbus(Eventbus)
-	if err != nil {
-		return
-	}
-
-	err = createSubscription(Eventbus, Sink, Source, Filters, Transformer)
-	if err != nil {
-		return
-	}
-
-	putEvents(0, 1, 1, Eventbus, EventBody, EventSource)
-
-	err = getEvent(Eventbus, "0", "1")
-	if err != nil {
-		log.Error("Test_pre_destructive get event failed")
-		return
-	}
-	log.Info("Test_pre_destructive get event success")
-}
-
-func Test_post_destructive() {
-	err = getEvent(Eventbus, "0", "1")
-	if err != nil {
-		log.Error("Test_post_destructive get event failed")
-		return
-	}
-	log.Info("Test_post_destructive get event success")
-
-	// Currently, only check metadata of eventbus
-	var path string = fmt.Sprintf("%s/%s", EventbusKeyPrefixInKVStore, Eventbus)
-	ctx := context.Background()
-	meta, err := EtcdClient.Get(ctx, path)
-	if err != nil {
-		log.Errorf("Test_post_destructive get metadata failed, path: %s, err: %s\n", path, err.Error())
-		return
-	}
-	log.Infof("Test_post_destructive get metadata success, path: %s, mata: %s\n", path, string(meta))
-}
-
-func main() {
-	log.Info("start e2e test base case...")
-
-	if len(os.Args) < 2 {
-		log.Error("control parameters required")
-		return
-	}
-
-	switch os.Args[1] {
-	case "pre":
-		Test_pre_destructive()
-	case "post":
-		Test_post_destructive()
-	default:
-		log.Error("only pre and post control parameters are supported")
-	}
-
-	log.Info("finish e2e test base case...")
-}
diff --git a/test/e2e/quick-start/main.go b/test/e2e/quick-start/main.go
deleted file mode 100644
index 9a7f2e8..0000000
--- a/test/e2e/quick-start/main.go
+++ /dev/null
@@ -1,373 +0,0 @@
-// Copyright 2022 Linkall Inc.
-//
-// Licensed 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.
-
-package main
-
-import (
-	"context"
-	"encoding/json"
-	"fmt"
-	"os"
-	"strconv"
-	"strings"
-	"sync"
-	"time"
-
-	ce "github.com/cloudevents/sdk-go/v2"
-	"github.com/fatih/color"
-	"github.com/go-resty/resty/v2"
-	"github.com/google/uuid"
-	"google.golang.org/grpc"
-	"google.golang.org/grpc/credentials/insecure"
-	log "k8s.io/klog/v2"
-
-	ctrlpb "github.com/vanus-labs/vanus/proto/pkg/controller"
-	"github.com/vanus-labs/vanus/proto/pkg/meta"
-
-	"github.com/vanus-labs/vanus/internal/kv"
-	"github.com/vanus-labs/vanus/internal/kv/etcd"
-)
-
-const (
-	VolumeKeyPrefixInKVStore         = "/vanus/internal/resource/volume/metadata"
-	BlockKeyPrefixInKVStore          = "/vanus/internal/resource/volume/block"
-	VolumeInstanceKeyPrefixInKVStore = "/vanus/internal/resource/volume/instance"
-
-	EventbusKeyPrefixInKVStore = "/vanus/internal/resource/eventbus"
-	EventlogKeyPrefixInKVStore = "/vanus/internal/resource/eventlog"
-	SegmentKeyPrefixInKVStore  = "/vanus/internal/resource/segment"
-
-	EventlogSegmentsKeyPrefixInKVStore = "/vanus/internal/resource/segs_of_eventlog"
-)
-
-const (
-	HttpPrefix = "http://"
-	Eventbus   = "quick-start"
-)
-
-var (
-	Sink        = "http://quick-display:80"
-	Source      = ""
-	Filters     = ""
-	Transformer = ""
-
-	EventType   = "examples"
-	EventBody   = "Hello Vanus"
-	EventSource = "quick-start"
-
-	HttpClient = resty.New()
-	Endpoint   = os.Getenv("VANUS_GATEWAY")
-	EtcdClient kv.Client
-	err        error
-)
-
-func init() {
-	kvStoreEndpoints := []string{"192.168.49.2:30007"}
-	kvKeyPrefix := "/vanus"
-	EtcdClient, err = etcd.NewEtcdClientV3(kvStoreEndpoints, kvKeyPrefix)
-	if err != nil {
-		log.Fatalf("NewEtcdClientV3 failed, err: %+v\n", err)
-	}
-}
-
-func mustGetControllerProxyConn(ctx context.Context) *grpc.ClientConn {
-	splits := strings.Split(os.Getenv("VANUS_GATEWAY"), ":")
-	port, err := strconv.Atoi(splits[1])
-	if err != nil {
-		log.Error("parsing gateway port failed")
-		return nil
-	}
-	leaderConn := createGRPCConn(ctx, fmt.Sprintf("%s:%d", splits[0], port+2))
-	if leaderConn == nil {
-		log.Error("failed to connect to gateway")
-		return nil
-	}
-	return leaderConn
-}
-
-func createGRPCConn(ctx context.Context, addr string) *grpc.ClientConn {
-	if addr == "" {
-		return nil
-	}
-	addr = strings.TrimPrefix(addr, "http://")
-	var err error
-	var opts []grpc.DialOption
-	opts = append(opts, grpc.WithTransportCredentials(insecure.NewCredentials()))
-	opts = append(opts, grpc.WithBlock())
-	ctx, cancel := context.WithCancel(ctx)
-	timeout := false
-	go func() {
-		ticker := time.Tick(time.Second)
-		select {
-		case <-ctx.Done():
-		case <-ticker:
-			cancel()
-			timeout = true
-		}
-	}()
-	conn, err := grpc.DialContext(ctx, addr, opts...)
-	cancel()
-	if timeout {
-		color.Yellow("dial to controller: %s timeout, try to another controller", addr)
-		return nil
-	} else if err != nil {
-		color.Red("dial to controller: %s failed", addr)
-		return nil
-	}
-	return conn
-}
-
-func createEventbus(eb string) error {
-	ctx := context.Background()
-	grpcConn := mustGetControllerProxyConn(ctx)
-	defer func() {
-		_ = grpcConn.Close()
-	}()
-
-	cli := ctrlpb.NewEventbusControllerClient(grpcConn)
-	res, err := cli.CreateEventbus(ctx, &ctrlpb.CreateEventbusRequest{
-		Name: eb,
-	})
-	if err != nil {
-		log.Errorf("create eventbus failed, err: %s", err)
-		return err
-	}
-	log.Infof("create eventbus[%s] success.", res.Name)
-	return nil
-}
-
-func createSubscription(eventbus, sink, source, filters, transformer string) error {
-	ctx := context.Background()
-	grpcConn := mustGetControllerProxyConn(ctx)
-	defer func() {
-		_ = grpcConn.Close()
-	}()
-	var filter []*meta.Filter
-	if filters != "" {
-		err := json.Unmarshal([]byte(filters), &filter)
-		if err != nil {
-			log.Errorf("the filter invalid, err: %s", err)
-			return err
-		}
-	}
-
-	var trans *meta.Transformer
-	if transformer != "" {
-		err := json.Unmarshal([]byte(transformer), &trans)
-		if err != nil {
-			log.Errorf("the transformer invalid, err: %s", err)
-			return err
-		}
-	}
-
-	cli := ctrlpb.NewTriggerControllerClient(grpcConn)
-	res, err := cli.CreateSubscription(ctx, &ctrlpb.CreateSubscriptionRequest{
-		Subscription: &ctrlpb.SubscriptionRequest{
-			Source:      source,
-			Filters:     filter,
-			Sink:        sink,
-			Eventbus:    eventbus,
-			Transformer: trans,
-		},
-	})
-	if err != nil {
-		log.Errorf("create subscription failed, err: %s", err)
-		return err
-	}
-	log.Infof("create subscription[%d] success.", res.Id)
-	return nil
-}
-
-func putEvent(eventbus, eventID, eventType, eventBody, eventSource string) error {
-	p, err := ce.NewHTTP()
-	if err != nil {
-		log.Errorf("init ce protocol error: %s\n", err)
-		return err
-	}
-	c, err := ce.NewClient(p, ce.WithTimeNow(), ce.WithUUIDs())
-	if err != nil {
-		log.Errorf("create ce client error: %s\n", err)
-		return err
-	}
-
-	if eventID == "" {
-		eventID = uuid.NewString()
-	}
-
-	ceCtx := ce.ContextWithTarget(context.Background(),
-		fmt.Sprintf("%s%s/gateway/%s", HttpPrefix, Endpoint, eventbus))
-	event := ce.NewEvent()
-	event.SetID(eventID)
-	event.SetSource(eventSource)
-	event.SetType(eventType)
-	err = event.SetData(ce.TextPlain, eventBody)
-	if err != nil {
-		log.Errorf("set data failed: %s\n", err)
-		return err
-	}
-	c.Send(ceCtx, event)
-	log.Infof("put event[%s] success.", event.ID())
-	return nil
-}
-
-func putEvents(offset, eventNum, threadNum int64, eventbus, eventBody, eventSource string) error {
-	var (
-		i       int64
-		eventid int64 = offset
-		wg      sync.WaitGroup
-	)
-	for i = 1; i <= threadNum; i++ {
-		first := eventid
-		last := eventid + eventNum/threadNum
-		wg.Add(1)
-		go func(first, last int64) {
-			for n := first; n < last; n++ {
-				putEvent(eventbus, fmt.Sprintf("%d", n), EventType, eventBody, eventSource)
-			}
-			wg.Done()
-		}(first, last)
-		eventid = eventid + eventNum/threadNum
-	}
-	wg.Wait()
-	return nil
-}
-
-func getEvent(eventbus, offset, number string) error {
-	idx := strings.LastIndex(Endpoint, ":")
-	port, err := strconv.Atoi(Endpoint[idx+1:])
-	if err != nil {
-		log.Errorf("parse gateway port failed: %s, endpoint: %s", err, Endpoint)
-		return err
-	}
-	newEndpoint := fmt.Sprintf("%s:%d", Endpoint[:idx], port+1)
-	url := fmt.Sprintf("%s%s/getEvents?eventbus=%s&offset=%s&number=%s", HttpPrefix, newEndpoint, eventbus, offset, number)
-	event, err := HttpClient.NewRequest().Get(url)
-	if err != nil {
-		log.Errorf("get event from eventbus[%s]&offset[%s]&number[%s] failed, err: %s\n", eventbus, offset, number, err)
-		return err
-	}
-	log.Infof("get event from eventbus[%s]&offset[%s]&number[%s] success, event: %s\n",
-		eventbus, offset, number, event.String())
-	return nil
-}
-
-func Test_e2e_base() {
-	eventbus := "eventbus-base"
-	err = createEventbus(eventbus)
-	if err != nil {
-		return
-	}
-
-	err = createSubscription(eventbus, Sink, Source, Filters, Transformer)
-	if err != nil {
-		return
-	}
-
-	putEvents(0, 10000, 100, eventbus, EventBody, EventSource)
-
-	err = getEvent(eventbus, "0", "10000")
-	if err != nil {
-		log.Error("Test_e2e_base get event failed")
-		return
-	}
-	log.Info("Test_e2e_base get event success")
-}
-
-func Test_e2e_filter() {
-	eventbus := "eventbus-filter"
-	err = createEventbus(eventbus)
-	if err != nil {
-		return
-	}
-
-	filters := "[{\"exact\": {\"source\":\"filter\"}}]"
-	err = createSubscription(eventbus, Sink, Source, filters, Transformer)
-	if err != nil {
-		return
-	}
-
-	filters = "[{\"cel\": \"$key.(string) == \\\"value\\\"\"}]"
-	err = createSubscription(eventbus, Sink, Source, filters, Transformer)
-	if err != nil {
-		return
-	}
-
-	putEvents(0, 2000, 100, eventbus, EventBody, EventSource)
-	eventSource := "filter"
-	putEvents(2000, 4000, 10, eventbus, EventBody, eventSource)
-	eventBody := "{\"key\":\"value\"}"
-	putEvents(4000, 4000, 100, eventbus, eventBody, EventSource)
-
-	err = getEvent(eventbus, "0", "8000")
-	if err != nil {
-		log.Error("Test_e2e_filter get event failed")
-		return
-	}
-	log.Info("Test_e2e_filter get event success")
-}
-
-func Test_e2e_transformation() {
-	eventbus := "eventbus-transformation"
-	err = createEventbus(eventbus)
-	if err != nil {
-		return
-	}
-
-	transformer := "{\"template\": \"{\\\"transKey\\\": \\\"transValue\\\"}\"}"
-	err = createSubscription(eventbus, Sink, Source, Filters, transformer)
-	if err != nil {
-		return
-	}
-
-	putEvents(0, 10000, 100, eventbus, EventBody, EventSource)
-
-	err = getEvent(eventbus, "0", "10000")
-	if err != nil {
-		log.Error("Test_e2e_transformation get event failed")
-		return
-	}
-	log.Info("Test_e2e_filter get event success")
-}
-
-func Test_e2e_metadata() {
-	eventbus := "eventbus-meta"
-	err = createEventbus(eventbus)
-	if err != nil {
-		return
-	}
-
-	// Currently, only check metadata of eventbus
-	var path string = fmt.Sprintf("%s/%s", EventbusKeyPrefixInKVStore, eventbus)
-	ctx := context.Background()
-	meta, err := EtcdClient.Get(ctx, path)
-	if err != nil {
-		log.Errorf("get metadata failed, path: %s, err: %s\n", path, err.Error())
-		return
-	}
-	log.Infof("get metadata success, path: %s, mata: %s\n", path, string(meta))
-}
-
-func main() {
-	log.Info("start e2e test base case...")
-
-	Test_e2e_base()
-
-	Test_e2e_filter()
-
-	Test_e2e_transformation()
-
-	Test_e2e_metadata()
-
-	log.Info("finish e2e test base case...")
-}
diff --git a/test/e2e/read/main.go b/test/e2e/read/main.go
deleted file mode 100644
index f1b6f83..0000000
--- a/test/e2e/read/main.go
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2022 Linkall Inc.
-//
-// Licensed 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.
-
-package main
-
-import (
-	// standard libraries.
-	"context"
-	"fmt"
-
-	// first-party libraris.
-	"github.com/vanus-labs/vanus/client"
-)
-
-func main() {
-	ctx := context.Background()
-	vrn := fmt.Sprintf("vanus://%s/eventlog/%s?namespace=vanus", "127.0.0.1:2048", "df5aff09-9242-4b47-b9df-cf07c5868e3a")
-	r, err := client.OpenLogReader(ctx, vrn)
-	if err != nil {
-		panic(err)
-	}
-	_, _ = r.Seek(ctx, 20, 0)
-	es, er := r.Read(ctx, 100)
-	if err != nil {
-		panic(er)
-	}
-	for i, v := range es {
-		println(i, string(v.Data()))
-	}
-}
diff --git a/test/e2e/sink/main.go b/test/e2e/sink/main.go
deleted file mode 100644
index 55a04ed..0000000
--- a/test/e2e/sink/main.go
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2022 Linkall Inc.
-//
-// Licensed 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.
-
-package main
-
-import (
-	"context"
-	"fmt"
-	"github.com/vanus-labs/vanus/observability/log"
-	"net"
-	"sync/atomic"
-
-	ce "github.com/cloudevents/sdk-go/v2"
-	"github.com/cloudevents/sdk-go/v2/client"
-	cehttp "github.com/cloudevents/sdk-go/v2/protocol/http"
-)
-
-func main() {
-	var total int64
-	ls, err := net.Listen("tcp4", ":18080")
-	if err != nil {
-		panic(err)
-	}
-	c, err := client.NewHTTP(cehttp.WithListener(ls), cehttp.WithRequestDataAtContextMiddleware())
-	if err != nil {
-		panic(err)
-	}
-	log.Info().Msg("start success")
-	c.StartReceiver(context.Background(), func(e ce.Event) {
-		fmt.Println(fmt.Sprintf("---total: %d", atomic.AddInt64(&total, 1)))
-		fmt.Println(e)
-	})
-}
diff --git a/test/infra/Dockerfile b/test/infra/Dockerfile
deleted file mode 100644
index e757a2b..0000000
--- a/test/infra/Dockerfile
+++ /dev/null
@@ -1,20 +0,0 @@
-FROM golang:1.18 as builder
-WORKDIR /workspace
-
-COPY . .
-RUN go mod tidy
-
-RUN GOOS=linux GOARCH=amd64 go build -o bin/vanus-bench ./test/benchmark
-
-FROM ubuntu:latest
-
-COPY ./test/infra /vanus-bench
-COPY --from=builder /workspace/bin/vanus-bench /usr/bin/vanus-bench
-
-WORKDIR /vanus-bench
-
-RUN apt-get update && apt-get install -y curl
-RUN curl -O https://dl.vanus.ai/vsctl/latest/linux-amd64/vsctl && \
-    mv vsctl /usr/bin/vsctl
-RUN chmod a+x /usr/bin/vsctl
-RUN chmod a+x /usr/bin/vanus-bench
diff --git a/test/infra/case1/job-a.yml b/test/infra/case1/job-a.yml
deleted file mode 100644
index 480aacd..0000000
--- a/test/infra/case1/job-a.yml
+++ /dev/null
@@ -1,44 +0,0 @@
-apiVersion: batch/v1
-kind: Job
-metadata:
-  labels:
-    app: vanus-bench-case1-a
-  name: vanus-bench-case1-a
-  namespace: vanus
-spec:
-  parallelism: 1
-  completions: 1
-  backoffLimit: 3
-  activeDeadlineSeconds: 3600
-  template:
-    metadata:
-      labels:
-        app: vanus-bench-case1-a
-    spec:
-      restartPolicy: Never
-      containers:
-        - image: public.ecr.aws/vanus/test-infra:dev
-          imagePullPolicy: Always
-          name: vanus-bench-case1-a
-          env:
-            - name: CASE_NAME
-              value: "case1"
-            - name: JOB_NAME
-              value: "e2e-1eventbus-1eventlog-1client-1parallelism"
-            - name: PAYLOAD_SIZE
-              value: "1024"
-            - name: VANUS_GATEWAY
-              value: "vanus-gateway.vanus:8080"
-            - name: REDIS_ADDR
-              value: "redis.vanus:6379"
-            - name: MONGODB_PASSWORD
-              valueFrom:
-                secretKeyRef:
-                  name: benchmark-credentials
-                  key: mongodb_password
-            - name: EVENTLOG_NUMBER
-              value: "1"
-            - name: PARALLELISM
-              value: "1"
-            - name: TOTAL_NUMBER
-              value: "5000"
\ No newline at end of file
diff --git a/test/infra/case1/job-b.yml b/test/infra/case1/job-b.yml
deleted file mode 100644
index e7e995d..0000000
--- a/test/infra/case1/job-b.yml
+++ /dev/null
@@ -1,44 +0,0 @@
-apiVersion: batch/v1
-kind: Job
-metadata:
-  labels:
-    app: vanus-bench-case1-b
-  name: vanus-bench-case1-b
-  namespace: vanus
-spec:
-  parallelism: 1
-  completions: 1
-  backoffLimit: 3
-  activeDeadlineSeconds: 3600
-  template:
-    metadata:
-      labels:
-        app: vanus-bench-case1-b
-    spec:
-      restartPolicy: Never
-      containers:
-        - image: public.ecr.aws/vanus/test-infra:dev
-          imagePullPolicy: Always
-          name: vanus-bench-case1-b
-          env:
-            - name: CASE_NAME
-              value: "case1"
-            - name: JOB_NAME
-              value: "e2e-1eventbus-1eventlog-1client-16parallelism"
-            - name: PAYLOAD_SIZE
-              value: "1024"
-            - name: VANUS_GATEWAY
-              value: "vanus-gateway.vanus:8080"
-            - name: REDIS_ADDR
-              value: "redis.vanus:6379"
-            - name: MONGODB_PASSWORD
-              valueFrom:
-                secretKeyRef:
-                  name: benchmark-credentials
-                  key: mongodb_password
-            - name: EVENTLOG_NUMBER
-              value: "1"
-            - name: PARALLELISM
-              value: "16"
-            - name: TOTAL_NUMBER
-              value: "50000"
\ No newline at end of file
diff --git a/test/infra/case1/job-c.yml b/test/infra/case1/job-c.yml
deleted file mode 100644
index fcefc0d..0000000
--- a/test/infra/case1/job-c.yml
+++ /dev/null
@@ -1,45 +0,0 @@
-apiVersion: batch/v1
-kind: Job
-metadata:
-  labels:
-    app: vanus-bench-case1-c
-  name: vanus-bench-case1-c
-  namespace: vanus
-spec:
-  parallelism: 1
-  completions: 1
-  backoffLimit: 3
-  activeDeadlineSeconds: 10000
-  template:
-    metadata:
-      labels:
-        app: vanus-bench-case1-c
-    spec:
-      restartPolicy: Never
-      containers:
-        - image: public.ecr.aws/vanus/test-infra:dev
-          imagePullPolicy: Always
-          name: vanus-bench-case1-c
-          command: ["bash", "-c", "sleep 10000"]
-          env:
-            - name: CASE_NAME
-              value: "case1"
-            - name: JOB_NAME
-              value: "e2e-1eventbus-16eventlog-1client-16parallelism"
-            - name: PAYLOAD_SIZE
-              value: "1024"
-            - name: VANUS_GATEWAY
-              value: "vanus-gateway.vanus:8080"
-            - name: REDIS_ADDR
-              value: "redis.vanus:6379"
-            - name: MONGODB_PASSWORD
-              valueFrom:
-                secretKeyRef:
-                  name: benchmark-credentials
-                  key: mongodb_password
-            - name: EVENTLOG_NUMBER
-              value: "16"
-            - name: PARALLELISM
-              value: "16"
-            - name: TOTAL_NUMBER
-              value: "200000"
\ No newline at end of file
diff --git a/test/infra/case1/play.sh b/test/infra/case1/play.sh
deleted file mode 100644
index c0b0fe5..0000000
--- a/test/infra/case1/play.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/bash
-set -ex
-
-vsctl eventbus create --name "${JOB_NAME}" --eventlog "${EVENTLOG_NUMBER}"
-vanus-bench e2e run \
-  --name "${JOB_NAME}" \
-  --eventbus "${JOB_NAME}" \
-  --number "${TOTAL_NUMBER}" \
-  --parallelism "${PARALLELISM}"  \
-  --endpoint "${VANUS_GATEWAY}" \
-  --payload-size "${PAYLOAD_SIZE}" \
-  --redis-addr "${REDIS_ADDR}" \
-  --mongodb-password "${MONGODB_PASSWORD}" \
-  --begin
-
-vanus-bench e2e analyse \
-  --name "${JOB_NAME}" \
-  --benchmark-type produce \
-  --redis-addr "${REDIS_ADDR}" \
-  --mongodb-password "${MONGODB_PASSWORD}" \
-  --end
-
-vsctl eventbus delete --name "${JOB_NAME}"
\ No newline at end of file
diff --git a/test/infra/case2/play.sh b/test/infra/case2/play.sh
deleted file mode 100644
index d5ec116..0000000
--- a/test/infra/case2/play.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/bash
-set -ex
-
-go build -o vanus-bench ../../benchmark
-mv vanus-bench ../../../bin/
-
-nohup vanus-bench component store run --volume-id 1 --name e2e-component-store-3replicas --without-mongodb > node1.log &
-nohup vanus-bench component store run --volume-id 2 --name e2e-component-store-3replicas --without-mongodb > node2.log &
-nohup vanus-bench component store run --volume-id 3 --name e2e-component-store-3replicas --without-mongodb > node3.log &
-
-# The maximum TPS between 12K to 14K with high shake, and TPS isn't sensitive with payload-size [10B, 1024B]
-# BUG: it need to wait a seconds to make sure write successfully after a Segment is activated
-# vanus-bench component store create-block --name e2e-component-store-1replicas --without-mongodb --replicas 1 --block-size 512 --store-address 127.0.0.1:2149 --number 16
-# vanus-bench component store send --name e2e-component-store-1replicas --without-mongodb  --no-clean-cache --total-number 1000000 --parallelism 1 --payload-size 1024
-
-# vanus-bench component store create-block --name e2e-component-store-3replicas --without-mongodb --replicas 3  --block-size 512 --number 16
-# vanus-bench component store send --total-number 1000000 --parallelism 16 --no-clean-cache --payload-size 1024 --name e2e-component-store-3replicas --without-mongodb --batch-size 32
-# ps -ef | grep bench | grep -v "auto" | awk '{print $2}' | xargs kill && rm -rf /Users/wenfeng/tmp/data/test/vanus && rm *.log
-# redis-cli LTRIM /vanus/test/store/block_records 1 0
\ No newline at end of file
diff --git a/test/infra/consumer/consumer.yml b/test/infra/consumer/consumer.yml
deleted file mode 100644
index d9c66a4..0000000
--- a/test/infra/consumer/consumer.yml
+++ /dev/null
@@ -1,51 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
-  name: vanus-benchmark-consumer
-  namespace: vanus
-spec:
-  ports:
-    - name: receiver
-      port: 8080
-      targetPort: 8080
-  selector:
-    app: vanus-benchmark-consumer
-  type: ClusterIP
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  labels:
-    app: vanus-benchmark-consumer
-  name: vanus-benchmark-consumer
-  namespace: vanus
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: vanus-benchmark-consumer
-  template:
-    metadata:
-      annotations:
-        vanus.dev/metrics.port: "2112"
-      labels:
-        app: vanus-benchmark-consumer
-    spec:
-      containers:
-        - image: public.ecr.aws/vanus/test-infra:dev
-          imagePullPolicy: Always
-          name: benchmark-consumer
-#         command: ["sh", "/vanus-bench/consumer/play.sh"]
-          command: ["bash", "-c", "sleep 1000000"]
-          env:
-            - name: JOB_NAME
-              value: "e2e-benchmark-consumer"
-            - name: VANUS_GATEWAY
-              value: "vanus-gateway.vanus:8080"
-            - name: REDIS_ADDR
-              value: "redis.vanus:6379"
-            - name: MONGODB_PASSWORD
-              valueFrom:
-                secretKeyRef:
-                  name: benchmark-credentials
-                  key: mongodb_password
\ No newline at end of file
diff --git a/test/infra/consumer/play.sh b/test/infra/consumer/play.sh
deleted file mode 100644
index 145edd0..0000000
--- a/test/infra/consumer/play.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-set -ex
-
-vanus-bench e2e receive \
-    --name "${JOB_NAME}" \
-    --redis-addr "${REDIS_ADDR}" \
-    --mongodb-password "${MONGODB_PASSWORD}"
\ No newline at end of file
diff --git a/test/infra/start.sh b/test/infra/start.sh
deleted file mode 100644
index c19ca00..0000000
--- a/test/infra/start.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-
-kubectl apply -f benchmark.yml
-kubectl apply -f vanus.yml
-kubectl apply -f secret.yml
-
-# wait to vanus is ready
-kubectl apply -f case1/job.yml
-kubectl apply -f case2/job.yml
-
-kubectl delete -f vanus.yml
-kubectl delete -f case1/job.yml
-kubectl delete -f case2/job.yml
-kubectl delete -f secret.yml
-kubectl delete -f benchmark.yml
\ No newline at end of file
diff --git a/test/regression/Dockerfile b/test/regression/Dockerfile
deleted file mode 100644
index 1bdd5ca..0000000
--- a/test/regression/Dockerfile
+++ /dev/null
@@ -1,19 +0,0 @@
-FROM golang:1.19 as builder
-WORKDIR /workspace
-
-COPY . .
-RUN go mod tidy
-
-RUN GOOS=linux GOARCH=amd64 go build -o bin/pubsub ./test/regression/pubsub
-
-FROM ubuntu:latest
-COPY --from=builder /workspace/test/regression/run.sh /vanus/test/regression/run.sh
-COPY --from=builder /workspace/bin/pubsub /vanus/test/regression/bin/pubsub
-RUN chmod a+x /vanus/test/regression/bin/pubsub
-RUN chmod a+x /vanus/test/regression/run.sh
-
-RUN apt-get update && apt-get install -y curl
-RUN curl -O https://dl.vanus.ai/vsctl/latest/linux-amd64/vsctl
-RUN mv vsctl /usr/bin/vsctl
-RUN chmod a+x /usr/bin/vsctl
-
diff --git a/test/regression/pubsub/main.go b/test/regression/pubsub/main.go
deleted file mode 100644
index c64668d..0000000
--- a/test/regression/pubsub/main.go
+++ /dev/null
@@ -1,173 +0,0 @@
-// Copyright 2023 Linkall Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except 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.
-
-package main
-
-import (
-	"context"
-	"github.com/vanus-labs/vanus/observability/log"
-	"os"
-	"sync"
-	"sync/atomic"
-	"time"
-
-	v2 "github.com/cloudevents/sdk-go/v2"
-
-	vanus "github.com/vanus-labs/sdk/golang"
-	"github.com/vanus-labs/vanus/test/utils"
-)
-
-var (
-	sentSuccess    int64
-	sentFailed     int64
-	receivedNumber int64
-
-	totalNumber        = int64(1 << 20) // 1024*1024
-	parallelism        = 4
-	batchSize          = 8
-	maximumPayloadSize = 4 * 1024
-	receiveEventPort   = 18080
-	waitTimeout        = 30 * time.Second
-	totalLatency       = int64(0)
-	caseName           = "vanus.regression.pubsub"
-
-	eventbus = os.Getenv("EVENTBUS")
-	endpoint = os.Getenv("VANUS_GATEWAY")
-
-	mutex   = sync.Mutex{}
-	cache   = map[string]*v2.Event{}
-	unmatch = map[string]*v2.Event{}
-)
-
-func main() {
-	ctx, cancel := context.WithCancel(context.Background())
-	client, err := vanus.Connect(&vanus.ClientOptions{Endpoint: endpoint})
-	if err != nil {
-		panic(err)
-	}
-
-	go receiveEvents(ctx, client)
-	utils.PrintTotal(ctx, map[string]*int64{
-		"Sending":   &sentSuccess,
-		"Receiving": &receivedNumber,
-	})
-
-	publishEvents(ctx, client)
-	now := time.Now()
-	for time.Since(now) < waitTimeout {
-		mutex.Lock()
-		if len(cache) == 0 {
-			mutex.Unlock()
-			break
-		}
-		for k := range unmatch {
-			delete(cache, k)
-		}
-		mutex.Unlock()
-		time.Sleep(time.Second)
-	}
-	cancel()
-
-	if len(cache) != 0 {
-		log.Error().Str("case", caseName).
-			Int64("success", sentSuccess).
-			Int64("received", receivedNumber).
-			Int("lost", len(cache)).
-			Msg("failed to run pubsub case because of timeout after finished sending")
-
-		log.Info().Msg("lost events are below")
-		for _, v := range cache {
-			println(v.String())
-		}
-		os.Exit(1)
-	}
-	log.Info().Int64("success", sentSuccess).
-		Int64("sent_failed", sentFailed).
-		Int64("received", receivedNumber).
-		Msg("success to run publish and receiveEvents case")
-}
-
-func publishEvents(ctx context.Context, client vanus.Client) {
-	wg := sync.WaitGroup{}
-	start := time.Now()
-
-	for p := 0; p < parallelism; p++ {
-		wg.Add(1)
-		go func() {
-			defer wg.Done()
-			publisher := client.Publisher(vanus.WithEventbus("default", eventbus))
-			ch := utils.CreateEventFactory(ctx, caseName, maximumPayloadSize)
-			for atomic.LoadInt64(&sentSuccess) < totalNumber {
-				events := make([]*v2.Event, batchSize)
-				for n := 0; n < batchSize; n++ {
-					events[n] = <-ch
-				}
-				err := publisher.Publish(context.Background(), events...)
-				if err != nil {
-					log.Warn().Err(err).Msg("failed to send events")
-					atomic.AddInt64(&sentFailed, int64(len(events)))
-				} else {
-					mutex.Lock()
-					for _, e := range events {
-						cache[e.ID()] = e
-					}
-					mutex.Unlock()
-					atomic.AddInt64(&sentSuccess, int64(len(events)))
-				}
-			}
-		}()
-	}
-	wg.Wait()
-
-	log.Info(ctx).
-		Int64("success", sentSuccess).
-		Dur("used", time.Now().Sub(start)).
-		Int64("failed", sentFailed).Msg("finished to sent all events")
-}
-
-func receiveEvents(ctx context.Context, c vanus.Client) {
-	subscriber := c.Subscriber(
-		vanus.WithListenPort(receiveEventPort),
-		vanus.WithParallelism(8),
-		vanus.WithProtocol(vanus.ProtocolGRPC),
-		vanus.WithMaxBatchSize(32),
-	)
-
-	err := subscriber.Listen(func(ctx context.Context, msgs ...vanus.Message) error {
-		mutex.Lock()
-		defer mutex.Unlock()
-		for _, msg := range msgs {
-			e := msg.GetEvent()
-			ce, exist := cache[e.ID()]
-			if !exist {
-				unmatch[e.ID()] = e
-				log.Warn(ctx).Stringer("event", e).
-					Msg("received a event, but which isn't found in cache")
-				continue
-			}
-			if string(ce.Data()) != string(e.Data()) {
-				log.Error().Msg("received a event, but data was corrupted")
-				os.Exit(1)
-			}
-			delete(cache, e.ID())
-			atomic.AddInt64(&totalLatency, ce.Time().UnixMicro())
-			msg.Success()
-		}
-		atomic.AddInt64(&receivedNumber, int64(len(msgs)))
-		return nil
-	})
-	if err != nil {
-		log.Error(ctx).Err(err).Msg("failed to start events listening")
-	}
-}
diff --git a/test/regression/regression.yml b/test/regression/regression.yml
deleted file mode 100644
index 4db4424..0000000
--- a/test/regression/regression.yml
+++ /dev/null
@@ -1,30 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  labels:
-    app: vanus-regression-test
-  name: vanus-regression-test
-  namespace: vanus
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: vanus-regression-test
-  template:
-    metadata:
-      annotations:
-        vanus.dev/metrics.port: "2112"
-      labels:
-        app: vanus-regression-test
-    spec:
-      containers:
-        - image: public.ecr.aws/vanus/test-regression:latest
-          imagePullPolicy: Always
-          name: vanus-regression-test
-          command: ["sh", "/vanus/test/regression/run.sh"]
-#          command: ["bash", "-c", "sleep 1000000"]
-          env:
-            - name: PAYLOAD_SIZE
-              value: "1024"
-            - name: VANUS_GATEWAY
-              value: "vanus-gateway.vanus:8080"
\ No newline at end of file
diff --git a/test/regression/run.sh b/test/regression/run.sh
deleted file mode 100644
index 653dee5..0000000
--- a/test/regression/run.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-set -ex
-
-vsctl eventbus create eventbus --name "regression_pubsub" --eventlog "4"
-vsctl subscription create --name "regression_pubsub" \
-  --eventbus "regression_pubsub" \
-  --sink "grpc://host.docker.internal:18080" \
-  --protocol "grpc"
-
-# start publish and subscribe case
-/vanus/test/regression/bin/pubsub
-
-vsctl eventbus create eventbus --name "regression_time" --eventlog "4"
-vsctl subscription create --name "regression_time" \
-  --eventbus "regression_time" \
-  --sink "grpc://host.docker.internal:18081" \
-  --protocol "grpc"
-
-/vanus/test/regression/bin/timer
-
-# vsctl eventbus delete "${EVENTBUS}"
-# vsctl eventbus delete "${NOTIFICATION_EVENTBUS}"
\ No newline at end of file
diff --git a/test/regression/time/main.go b/test/regression/time/main.go
deleted file mode 100644
index b834182..0000000
--- a/test/regression/time/main.go
+++ /dev/null
@@ -1,181 +0,0 @@
-// Copyright 2023 Linkall Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except 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.
-
-package main
-
-import (
-	"context"
-	"github.com/vanus-labs/vanus/observability/log"
-	"math/rand"
-	"os"
-	"sync"
-	"sync/atomic"
-	"time"
-
-	v2 "github.com/cloudevents/sdk-go/v2"
-
-	vanus "github.com/vanus-labs/sdk/golang"
-	"github.com/vanus-labs/vanus/internal/primitive"
-	"github.com/vanus-labs/vanus/test/utils"
-)
-
-var (
-	sentSuccess    int64
-	sentFailed     int64
-	receivedNumber int64
-
-	totalNumber          = int64(1 << 15) // 1024*1024
-	parallelism          = 4
-	batchSize            = 8
-	maximumPayloadSize   = 4 * 1024
-	receiveEventPort     = 18081
-	waitTimeout          = 30 * time.Second
-	totalLatency         = int64(0)
-	caseName             = "vanus.regression.pubsub"
-	maxDelayTime         = atomic.Value{}
-	maximumDelayInSecond = int32(120)
-
-	eventbus = os.Getenv("EVENTBUS")
-	endpoint = os.Getenv("VANUS_GATEWAY")
-
-	mutex   = sync.Mutex{}
-	cache   = map[string]*v2.Event{}
-	unmatch = map[string]*v2.Event{}
-)
-
-func main() {
-	ctx, cancel := context.WithCancel(context.Background())
-
-	client, err := vanus.Connect(&vanus.ClientOptions{Endpoint: endpoint})
-	if err != nil {
-		panic(err)
-	}
-
-	go receiveEvents(ctx, client)
-	utils.PrintTotal(ctx, map[string]*int64{
-		"Sending":   &sentSuccess,
-		"Receiving": &receivedNumber,
-	})
-
-	publishEvents(ctx, client)
-	maxDelayTime := maxDelayTime.Load().(time.Time)
-	for time.Since(maxDelayTime) < waitTimeout && len(cache) > 0 {
-		for k := range unmatch {
-			delete(cache, k)
-		}
-		time.Sleep(time.Second)
-	}
-	cancel()
-
-	if len(cache) != 0 {
-		log.Error(ctx).Int64("success", sentSuccess).
-			Int64("received", receivedNumber).
-			Int64("lost", int64(len(cache))).
-			Msg("failed to run schedule case because of timeout after finished sending")
-
-		log.Info().Msg("lost events are below")
-		for _, v := range cache {
-			println(v.String())
-		}
-		os.Exit(1)
-	}
-
-	log.Info(ctx).Int64("success", sentSuccess).
-		Int64("sent_failed", sentFailed).
-		Int64("received", receivedNumber).
-		Msg("success to run schedule events case")
-}
-
-func publishEvents(ctx context.Context, client vanus.Client) {
-	wg := sync.WaitGroup{}
-	start := time.Now()
-	rd := rand.New(rand.NewSource(time.Now().UnixNano()))
-	maxDelayTime.Store(time.Now())
-	for p := 0; p < parallelism; p++ {
-		wg.Add(1)
-		go func() {
-			defer wg.Done()
-			publisher := client.Publisher(vanus.WithEventbus("default", eventbus))
-			ch := utils.CreateEventFactory(ctx, caseName, maximumPayloadSize)
-			for atomic.LoadInt64(&sentSuccess) < totalNumber {
-				events := make([]*v2.Event, batchSize)
-				for n := 0; n < batchSize; n++ {
-					events[n] = <-ch
-					delayTime := time.Now().Add(time.Duration(
-						rd.Int31n(maximumDelayInSecond)) * time.Second)
-					events[n].SetExtension(primitive.XVanusDeliveryTime, delayTime.Format(time.RFC3339Nano))
-					max := maxDelayTime.Load().(time.Time)
-					for max.Before(delayTime) && !maxDelayTime.CompareAndSwap(max, delayTime) {
-						max = maxDelayTime.Load().(time.Time)
-					}
-				}
-				err := publisher.Publish(context.Background(), events...)
-				if err != nil {
-					log.Warn().Err(err).Msg("failed to send events")
-					atomic.AddInt64(&sentFailed, int64(len(events)))
-				} else {
-					mutex.Lock()
-					for _, e := range events {
-						cache[e.ID()] = e
-					}
-					mutex.Unlock()
-					atomic.AddInt64(&sentSuccess, int64(len(events)))
-				}
-			}
-		}()
-	}
-	wg.Wait()
-
-	log.Info(ctx).Int64("success", sentSuccess).
-		Int64("failed", sentFailed).
-		Dur("used", time.Now().Sub(start)).
-		Msg("finished to sent all events")
-}
-
-func receiveEvents(ctx context.Context, c vanus.Client) {
-	subscriber := c.Subscriber(
-		vanus.WithListenPort(receiveEventPort),
-		vanus.WithParallelism(8),
-		vanus.WithProtocol(vanus.ProtocolGRPC),
-		vanus.WithMaxBatchSize(32),
-	)
-
-	err := subscriber.Listen(func(ctx context.Context, msgs ...vanus.Message) error {
-		mutex.Lock()
-		defer mutex.Unlock()
-		for _, msg := range msgs {
-			e := msg.GetEvent()
-			ce, exist := cache[e.ID()]
-			if !exist {
-				unmatch[e.ID()] = e
-				log.Warn(ctx).
-					Stringer("event", e).
-					Msg("received a event, but which isn't found in cache")
-				continue
-			}
-			if string(ce.Data()) != string(e.Data()) {
-				log.Error().Msg("received a event, but data was corrupted")
-				os.Exit(1)
-			}
-			delete(cache, e.ID())
-			atomic.AddInt64(&totalLatency, ce.Time().UnixMicro())
-			msg.Success()
-		}
-		atomic.AddInt64(&receivedNumber, int64(len(msgs)))
-		return nil
-	})
-	if err != nil {
-		log.Error().Err(err).Msg("failed to start events listening")
-	}
-}
diff --git a/test/utils/events.go b/test/utils/events.go
deleted file mode 100644
index 1bfc8a2..0000000
--- a/test/utils/events.go
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2023 Linkall Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file exceptreq 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 toreq 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.
-
-package utils
-
-import (
-	"context"
-	"fmt"
-	v2 "github.com/cloudevents/sdk-go/v2"
-	"math/rand"
-	"time"
-
-	"github.com/google/uuid"
-)
-
-func CreateEventFactory(ctx context.Context, source string, maxPayloadSize int) <-chan *v2.Event {
-	ch := make(chan *v2.Event, 1024)
-	go generateEvents(ctx, source, maxPayloadSize, ch)
-	return ch
-}
-
-func generateEvents(ctx context.Context, source string, maxSize int, ch chan *v2.Event) {
-	rd := rand.New(rand.NewSource(time.Now().UnixNano()))
-	for {
-		select {
-		case <-ctx.Done():
-		default:
-			e := v2.NewEvent()
-			e.SetID(uuid.NewString())
-			e.SetSource(source)
-			e.SetSpecVersion(v2.VersionV1)
-			e.SetType(source)
-			_ = e.SetData(v2.TextPlain, genStr(rd, maxSize))
-			e.SetTime(time.Now())
-			ch <- &e
-		}
-	}
-}
-
-func genStr(rd *rand.Rand, maxSize int) string {
-	str := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
-	data := ""
-	size := int(rd.Int31n(int32(maxSize)) + 8)
-	for idx := 0; idx < size; idx++ {
-		data = fmt.Sprintf("%s%c", data, str[rd.Int31n(int32(len(str)))])
-	}
-	return data
-}
diff --git a/test/utils/stat.go b/test/utils/stat.go
deleted file mode 100644
index fad1fe2..0000000
--- a/test/utils/stat.go
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2023 Linkall Inc.
-//
-// Licensed 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.
-
-package utils
-
-import (
-	"context"
-	"sync/atomic"
-	"time"
-
-	"github.com/vanus-labs/vanus/observability/log"
-)
-
-func PrintTPS(ctx context.Context, values map[string]*int64) {
-	go func() {
-		timer := time.NewTicker(time.Second)
-		prev := map[string]int64{}
-		for k := range prev {
-			prev[k] = 0
-		}
-		for {
-			select {
-			case <-ctx.Done():
-				log.Info(ctx).Interface("notice", values).Msg("TPS printer is exit")
-				return
-			case <-timer.C:
-				cur := map[string]int64{}
-				val := map[string]interface{}{}
-				for k, v := range values {
-					cur[k] = atomic.LoadInt64(v)
-					val[k] = cur[k] - prev[k]
-				}
-				log.Info(ctx).Interface("TPS", val).Msg("")
-				prev = cur
-			}
-		}
-	}()
-}
-
-func PrintTotal(ctx context.Context, values map[string]*int64) {
-	go func() {
-		timer := time.NewTicker(time.Second)
-		for {
-			select {
-			case <-ctx.Done():
-				log.Info(ctx).Msg("Total printer is exit")
-				return
-			case <-timer.C:
-				cur := map[string]interface{}{}
-				for k, v := range values {
-					cur[k] = atomic.LoadInt64(v)
-				}
-				log.Info(ctx).Interface("Total", cur).Msg("")
-			}
-		}
-	}()
-}