() {
+ @Override
+ public void onNext(Commands downstream) {
+ }
+
+ @Override
+ public void onError(Throwable throwable) {
+ }
+
+ @Override
+ public void onCompleted() {
+ IS_COMPLETED = true;
+ }
+ });
+ }
+}
diff --git a/test/e2e-v2/java-test-service/trace-mocker/src/main/java/org/apache/skywalking/mock/Component.java b/test/e2e-v2/java-test-service/trace-mocker/src/main/java/org/apache/skywalking/mock/Component.java
new file mode 100644
index 0000000000..8ccaa7024e
--- /dev/null
+++ b/test/e2e-v2/java-test-service/trace-mocker/src/main/java/org/apache/skywalking/mock/Component.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.mock;
+
+/**
+ * The Component represents component library, which has been supported by skywalking sniffer.
+ *
+ * The supported list is in {@link ComponentsDefine}.
+ */
+public interface Component {
+ int getId();
+
+ String getName();
+}
diff --git a/test/e2e-v2/java-test-service/trace-mocker/src/main/java/org/apache/skywalking/mock/ComponentsDefine.java b/test/e2e-v2/java-test-service/trace-mocker/src/main/java/org/apache/skywalking/mock/ComponentsDefine.java
new file mode 100755
index 0000000000..4f3f69b4d9
--- /dev/null
+++ b/test/e2e-v2/java-test-service/trace-mocker/src/main/java/org/apache/skywalking/mock/ComponentsDefine.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.mock;
+
+/**
+ * The supported list of skywalking java sniffer.
+ */
+public class ComponentsDefine {
+
+ public static final OfficialComponent TOMCAT = new OfficialComponent(1, "Tomcat");
+
+ public static final OfficialComponent DUBBO = new OfficialComponent(3, "Dubbo");
+
+ public static final OfficialComponent ROCKET_MQ_PRODUCER = new OfficialComponent(38, "rocketMQ-producer");
+
+ public static final OfficialComponent ROCKET_MQ_CONSUMER = new OfficialComponent(39, "rocketMQ-consumer");
+
+ public static final OfficialComponent MONGO_DRIVER = new OfficialComponent(42, "mongodb-driver");
+}
diff --git a/test/e2e-v2/java-test-service/trace-mocker/src/main/java/org/apache/skywalking/mock/OfficialComponent.java b/test/e2e-v2/java-test-service/trace-mocker/src/main/java/org/apache/skywalking/mock/OfficialComponent.java
new file mode 100644
index 0000000000..74f6499289
--- /dev/null
+++ b/test/e2e-v2/java-test-service/trace-mocker/src/main/java/org/apache/skywalking/mock/OfficialComponent.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.mock;
+
+public class OfficialComponent implements Component {
+ private int id;
+ private String name;
+
+ public OfficialComponent(int id, String name) {
+ this.id = id;
+ this.name = name;
+ }
+
+ @Override
+ public int getId() {
+ return id;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+}
diff --git a/test/e2e-v2/java-test-service/trace-mocker/src/main/java/org/apache/skywalking/mock/ServiceAMock.java b/test/e2e-v2/java-test-service/trace-mocker/src/main/java/org/apache/skywalking/mock/ServiceAMock.java
new file mode 100644
index 0000000000..7d1ecfd7f3
--- /dev/null
+++ b/test/e2e-v2/java-test-service/trace-mocker/src/main/java/org/apache/skywalking/mock/ServiceAMock.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.mock;
+
+import io.grpc.stub.StreamObserver;
+import org.apache.skywalking.apm.network.common.v3.KeyStringValuePair;
+import org.apache.skywalking.apm.network.language.agent.v3.SegmentObject;
+import org.apache.skywalking.apm.network.language.agent.v3.SpanLayer;
+import org.apache.skywalking.apm.network.language.agent.v3.SpanObject;
+import org.apache.skywalking.apm.network.language.agent.v3.SpanType;
+
+class ServiceAMock {
+ public static String SERVICE_NAME = "mock_a_service";
+ public static String SERVICE_INSTANCE_NAME = "mock_a_service_instance";
+
+ static String REST_ENDPOINT = "/dubbox-case/case/dubbox-rest/404-test";
+ static String DUBBO_ENDPOINT = "org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()";
+ static String DUBBO_ADDRESS = "DubboIPAddress:1000";
+
+ void mock(StreamObserver streamObserver, String traceId,
+ String segmentId, long startTimestamp) {
+ streamObserver.onNext(createSegment(startTimestamp, traceId, segmentId).build());
+ }
+
+ private SegmentObject.Builder createSegment(long startTimestamp, String traceId, String segmentId) {
+ SegmentObject.Builder segment = SegmentObject.newBuilder();
+ segment.setTraceId(traceId);
+ segment.setTraceSegmentId(segmentId);
+ segment.setService(SERVICE_NAME);
+ segment.setServiceInstance(SERVICE_INSTANCE_NAME);
+ segment.addSpans(createEntrySpan(startTimestamp));
+ segment.addSpans(createLocalSpan(startTimestamp));
+ segment.addSpans(createExitSpan(startTimestamp));
+
+ return segment;
+ }
+
+ private SpanObject.Builder createEntrySpan(long startTimestamp) {
+ SpanObject.Builder span = SpanObject.newBuilder();
+ span.setSpanId(0);
+ span.setSpanType(SpanType.Entry);
+ span.setSpanLayer(SpanLayer.Http);
+ span.setParentSpanId(-1);
+ span.setStartTime(startTimestamp);
+ span.setEndTime(startTimestamp + 6000);
+ span.setComponentId(ComponentsDefine.TOMCAT.getId());
+ span.setOperationName(REST_ENDPOINT);
+ span.setIsError(false);
+ span.addTags(KeyStringValuePair.newBuilder().setKey("http.method").setValue("get").build());
+ span.addTags(KeyStringValuePair.newBuilder().setKey("http.status_code").setValue("404").build());
+ span.addTags(KeyStringValuePair.newBuilder().setKey("http.status_code").setValue("200").build());
+ return span;
+ }
+
+ private SpanObject.Builder createLocalSpan(long startTimestamp) {
+ SpanObject.Builder span = SpanObject.newBuilder();
+ span.setSpanId(1);
+ span.setSpanType(SpanType.Local);
+ span.setParentSpanId(0);
+ span.setStartTime(startTimestamp + 100);
+ span.setEndTime(startTimestamp + 500);
+ span.setOperationName("org.apache.skywalking.Local.do");
+ span.setIsError(false);
+ return span;
+ }
+
+ private SpanObject.Builder createExitSpan(long startTimestamp) {
+ SpanObject.Builder span = SpanObject.newBuilder();
+ span.setSpanId(2);
+ span.setSpanType(SpanType.Exit);
+ span.setSpanLayer(SpanLayer.RPCFramework);
+ span.setParentSpanId(1);
+ span.setStartTime(startTimestamp + 120);
+ span.setEndTime(startTimestamp + 5800);
+ span.setComponentId(ComponentsDefine.DUBBO.getId());
+ span.setOperationName(DUBBO_ENDPOINT);
+ span.setPeer(DUBBO_ADDRESS);
+ span.setIsError(false);
+ return span;
+ }
+}
diff --git a/test/e2e-v2/java-test-service/trace-mocker/src/main/java/org/apache/skywalking/mock/ServiceBMock.java b/test/e2e-v2/java-test-service/trace-mocker/src/main/java/org/apache/skywalking/mock/ServiceBMock.java
new file mode 100644
index 0000000000..6c7d6d6d3a
--- /dev/null
+++ b/test/e2e-v2/java-test-service/trace-mocker/src/main/java/org/apache/skywalking/mock/ServiceBMock.java
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.mock;
+
+import io.grpc.stub.StreamObserver;
+import org.apache.skywalking.apm.network.common.v3.KeyStringValuePair;
+import org.apache.skywalking.apm.network.language.agent.v3.RefType;
+import org.apache.skywalking.apm.network.language.agent.v3.SegmentObject;
+import org.apache.skywalking.apm.network.language.agent.v3.SegmentReference;
+import org.apache.skywalking.apm.network.language.agent.v3.SpanLayer;
+import org.apache.skywalking.apm.network.language.agent.v3.SpanObject;
+import org.apache.skywalking.apm.network.language.agent.v3.SpanType;
+
+class ServiceBMock {
+ public static String SERVICE_NAME = "mock_b_service";
+ public static String SERVICE_INSTANCE_NAME = "mock_b_service_instance";
+
+ static String DUBBO_PROVIDER_ENDPOINT = "org.skywaking.apm.testcase.dubbo.services.GreetServiceImpl.doBusiness()";
+ static String ROCKET_MQ_ENDPOINT = "org.apache.skywalking.RocketMQ";
+ static String ROCKET_MQ_ADDRESS = "RocketMQAddress:2000";
+
+ void mock(StreamObserver streamObserver, String traceId,
+ String segmentId, String parentSegmentId, long startTimestamp) {
+ streamObserver.onNext(createSegment(startTimestamp, traceId, segmentId, parentSegmentId).build());
+ }
+
+ private SegmentObject.Builder createSegment(long startTimestamp,
+ String traceId,
+ String segmentId,
+ String parentSegmentId) {
+ SegmentObject.Builder segment = SegmentObject.newBuilder();
+ segment.setTraceId(traceId);
+ segment.setTraceSegmentId(segmentId);
+ segment.setService(SERVICE_NAME);
+ segment.setServiceInstance(SERVICE_INSTANCE_NAME);
+ segment.addSpans(createEntrySpan(startTimestamp, traceId, parentSegmentId));
+ segment.addSpans(createExitSpan(startTimestamp));
+ segment.addSpans(createMQExitSpan(startTimestamp));
+
+ return segment;
+ }
+
+ private SegmentReference.Builder createReference(String traceId, String parentTraceSegmentId) {
+ SegmentReference.Builder reference = SegmentReference.newBuilder();
+ reference.setTraceId(traceId);
+ reference.setParentTraceSegmentId(parentTraceSegmentId);
+ reference.setParentService(ServiceAMock.SERVICE_NAME);
+ reference.setParentServiceInstance(ServiceAMock.SERVICE_INSTANCE_NAME);
+ reference.setParentSpanId(2);
+ reference.setParentEndpoint(ServiceAMock.REST_ENDPOINT);
+ reference.setRefType(RefType.CrossProcess);
+ reference.setNetworkAddressUsedAtPeer(ServiceAMock.DUBBO_ADDRESS);
+
+ return reference;
+ }
+
+ private SpanObject.Builder createEntrySpan(long startTimestamp, String traceId, String parentSegmentId) {
+ SpanObject.Builder span = SpanObject.newBuilder();
+ span.setSpanId(0);
+ span.setSpanType(SpanType.Entry);
+ span.setSpanLayer(SpanLayer.RPCFramework);
+ span.setParentSpanId(-1);
+ span.setStartTime(startTimestamp + 500);
+ span.setEndTime(startTimestamp + 5000);
+ span.setComponentId(ComponentsDefine.DUBBO.getId());
+ span.setIsError(false);
+ span.addRefs(createReference(traceId, parentSegmentId));
+
+ span.setOperationName(ServiceBMock.DUBBO_PROVIDER_ENDPOINT);
+ return span;
+ }
+
+ private SpanObject.Builder createExitSpan(long startTimestamp) {
+ SpanObject.Builder span = SpanObject.newBuilder();
+ span.setSpanId(1);
+ span.setSpanType(SpanType.Exit);
+ span.setSpanLayer(SpanLayer.Database);
+ span.setParentSpanId(0);
+ span.setStartTime(startTimestamp + 550);
+ span.setEndTime(startTimestamp + 1500);
+ span.setComponentId(ComponentsDefine.MONGO_DRIVER.getId());
+ span.setIsError(true);
+ span.addTags(KeyStringValuePair.newBuilder()
+ .setKey("db.statement")
+ .setValue("select * from database where complex = 1;")
+ .build());
+ span.addTags(KeyStringValuePair.newBuilder().setKey("db.type").setValue("mongodb").build());
+
+ span.setOperationName(
+ "mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]");
+ span.setPeer("localhost:27017");
+ return span;
+ }
+
+ private SpanObject.Builder createMQExitSpan(long startTimestamp) {
+ SpanObject.Builder span = SpanObject.newBuilder();
+ span.setSpanId(2);
+ span.setSpanType(SpanType.Exit);
+ span.setSpanLayer(SpanLayer.MQ);
+ span.setParentSpanId(1);
+ span.setStartTime(startTimestamp + 1100);
+ span.setEndTime(startTimestamp + 1500);
+ span.setComponentId(ComponentsDefine.ROCKET_MQ_PRODUCER.getId());
+ span.setIsError(false);
+
+ span.setOperationName(ROCKET_MQ_ENDPOINT);
+ span.setPeer(ROCKET_MQ_ADDRESS);
+ return span;
+ }
+}
diff --git a/test/e2e-v2/java-test-service/trace-mocker/src/main/java/org/apache/skywalking/mock/ServiceCMock.java b/test/e2e-v2/java-test-service/trace-mocker/src/main/java/org/apache/skywalking/mock/ServiceCMock.java
new file mode 100644
index 0000000000..885bb2f317
--- /dev/null
+++ b/test/e2e-v2/java-test-service/trace-mocker/src/main/java/org/apache/skywalking/mock/ServiceCMock.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.mock;
+
+import io.grpc.stub.StreamObserver;
+import org.apache.skywalking.apm.network.common.v3.KeyStringValuePair;
+import org.apache.skywalking.apm.network.language.agent.v3.RefType;
+import org.apache.skywalking.apm.network.language.agent.v3.SegmentObject;
+import org.apache.skywalking.apm.network.language.agent.v3.SegmentReference;
+import org.apache.skywalking.apm.network.language.agent.v3.SpanLayer;
+import org.apache.skywalking.apm.network.language.agent.v3.SpanObject;
+import org.apache.skywalking.apm.network.language.agent.v3.SpanType;
+
+class ServiceCMock {
+ public static String SERVICE_NAME = "mock_c_service";
+ public static String SERVICE_INSTANCE_NAME = "mock_c_service_instance";
+
+ void mock(StreamObserver streamObserver, String traceId,
+ String segmentId, String parentSegmentId, long startTimestamp) {
+ streamObserver.onNext(createSegment(startTimestamp, traceId, segmentId, parentSegmentId).build());
+ }
+
+ private SegmentObject.Builder createSegment(long startTimestamp,
+ String traceId,
+ String segmentId,
+ String parentSegmentId) {
+ SegmentObject.Builder segment = SegmentObject.newBuilder();
+ segment.setTraceId(traceId);
+ segment.setTraceSegmentId(segmentId);
+ segment.setService(SERVICE_NAME);
+ segment.setServiceInstance(SERVICE_INSTANCE_NAME);
+ segment.addSpans(createEntrySpan(startTimestamp, traceId, parentSegmentId));
+
+ return segment;
+ }
+
+ private SpanObject.Builder createEntrySpan(long startTimestamp, String traceId, String parentSegmentId) {
+ SpanObject.Builder span = SpanObject.newBuilder();
+ span.setSpanId(0);
+ span.setSpanType(SpanType.Entry);
+ span.setSpanLayer(SpanLayer.MQ);
+ span.setParentSpanId(-1);
+ span.setStartTime(startTimestamp + 3000);
+ span.setEndTime(startTimestamp + 5000);
+ span.setComponentId(ComponentsDefine.ROCKET_MQ_CONSUMER.getId());
+ span.setIsError(false);
+ span.addRefs(createReference(traceId, parentSegmentId));
+ span.setOperationName(ServiceBMock.ROCKET_MQ_ENDPOINT);
+ span.addTags(KeyStringValuePair.newBuilder().setKey("transmission.latency").setValue("100").build());
+ return span;
+ }
+
+ private SegmentReference.Builder createReference(String traceId, String parentTraceSegmentId) {
+ SegmentReference.Builder reference = SegmentReference.newBuilder();
+ reference.setTraceId(traceId);
+ reference.setParentTraceSegmentId(parentTraceSegmentId);
+ reference.setParentService(ServiceBMock.SERVICE_NAME);
+ reference.setParentServiceInstance(ServiceBMock.SERVICE_INSTANCE_NAME);
+ reference.setParentSpanId(2);
+ reference.setRefType(RefType.CrossProcess);
+ reference.setNetworkAddressUsedAtPeer(ServiceBMock.ROCKET_MQ_ADDRESS);
+ reference.setParentEndpoint(ServiceBMock.DUBBO_PROVIDER_ENDPOINT);
+ return reference;
+ }
+}
diff --git a/test/e2e-v2/script/docker-compose/base-compose.yml b/test/e2e-v2/script/docker-compose/base-compose.yml
index 7d045ae9dc..b4a1a1af44 100644
--- a/test/e2e-v2/script/docker-compose/base-compose.yml
+++ b/test/e2e-v2/script/docker-compose/base-compose.yml
@@ -56,8 +56,9 @@ services:
image: "ghcr.io/apache/skywalking-banyandb:${SW_BANYANDB_COMMIT}"
networks:
- e2e
- expose:
- - 17912
+ ports:
+ - 17912:17912
+ - 17913:17913
command: standalone --stream-root-path /tmp/stream-data --measure-root-path /tmp/measure-data
healthcheck:
test: [ "CMD", "sh", "-c", "nc -nz 127.0.0.1 17912" ]
@@ -65,6 +66,48 @@ services:
timeout: 60s
retries: 120
+ banyandb-data:
+ image: "ghcr.io/apache/skywalking-banyandb:${SW_BANYANDB_COMMIT}-testing"
+ hostname: data
+ expose:
+ - 17912
+ - 2121
+ - 6060
+ command: data --etcd-endpoints=http://etcd:2379
+ healthcheck:
+ test: [ "CMD", "./bydbctl", "health", "--addr=http://127.0.0.1:17913" ]
+ interval: 5s
+ timeout: 120s
+ retries: 120
+
+ liaison:
+ image: "ghcr.io/apache/skywalking-banyandb:${SW_BANYANDB_COMMIT}-testing"
+ hostname: liaison
+ ports:
+ - 17913:17913
+ - 17912:17912
+ expose:
+ - 2121
+ - 6060
+ command: liaison --etcd-endpoints=http://etcd:2379
+ healthcheck:
+ test: [ "CMD", "./bydbctl", "health", "--addr=http://liaison:17913" ]
+ interval: 5s
+ timeout: 120s
+ retries: 120
+
+ etcd:
+ image: gcr.io/etcd-development/etcd:v3.5.9
+ ports:
+ - "2379:2379"
+ command: etcd --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://etcd:2379 --max-request-bytes 10485760 --backend-batch-limit 10000
+ healthcheck:
+ test: [ "CMD", "etcdctl", "endpoint", "health" ]
+ interval: 1m30s
+ timeout: 10s
+ retries: 3
+ start_period: 40s
+
provider:
image: "ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java${SW_AGENT_JDK_VERSION}"
volumes:
diff --git a/test/e2e-v2/script/env b/test/e2e-v2/script/env
index 91fa59b005..ef63dca6e4 100644
--- a/test/e2e-v2/script/env
+++ b/test/e2e-v2/script/env
@@ -23,8 +23,8 @@ SW_AGENT_CLIENT_JS_COMMIT=af0565a67d382b683c1dbd94c379b7080db61449
SW_AGENT_CLIENT_JS_TEST_COMMIT=4f1eb1dcdbde3ec4a38534bf01dded4ab5d2f016
SW_KUBERNETES_COMMIT_SHA=6fe5e6f0d3b7686c6be0457733e825ee68cb9b35
SW_ROVER_COMMIT=738b1a42fe4941e0b4e6f5816403437cf572708f
-SW_BANYANDB_COMMIT=458041a561b0acc1f2ed37690df2ce753b791283
+SW_BANYANDB_COMMIT=c4b4384f3083f44ca6067257f5fa59030427ad6b
SW_AGENT_PHP_COMMIT=3192c553002707d344bd6774cfab5bc61f67a1d3
SW_PREDICTOR_COMMIT=54a0197654a3781a6f73ce35146c712af297c994
-SW_CTL_COMMIT=67cbc89dd7b214d5791321a7ca992f940cb586ba
+SW_CTL_COMMIT=7bbac156e74e8fdc0c5bd6f377be9f0b30420176
diff --git a/test/e2e-v2/script/prepare/setup-e2e-shell/install-swctl.sh b/test/e2e-v2/script/prepare/setup-e2e-shell/install-swctl.sh
index f9bcf34807..d435f5ad92 100644
--- a/test/e2e-v2/script/prepare/setup-e2e-shell/install-swctl.sh
+++ b/test/e2e-v2/script/prepare/setup-e2e-shell/install-swctl.sh
@@ -32,7 +32,7 @@ install_swctl() {
if ! command -v swctl &> /dev/null; then
echo "swctl is not installed"
install_swctl
-elif ! swctl --version | grep -q "${SW_CTL_COMMIT}"; then
+elif ! swctl --version | grep -q "${SW_CTL_COMMIT::7}"; then
# Check if the installed version is correct
echo "swctl is already installed, but version is not ${SW_CTL_COMMIT}, will re-install it"
install_swctl