diff --git a/.github/workflows/plugins-test.1.yaml b/.github/workflows/plugins-test.1.yaml index 63b50fcb6..dfa98f3dc 100644 --- a/.github/workflows/plugins-test.1.yaml +++ b/.github/workflows/plugins-test.1.yaml @@ -67,6 +67,7 @@ jobs: - jedis-3.1.x-plus-scenario - jedis-4.x-scenario - jedis-3.3.x-plus-scenario + - jedis-2.x-3.x-cluster-scenario - jetty-scenario - kafka-scenario - kotlin-coroutine-scenario diff --git a/CHANGES.md b/CHANGES.md index 40fe33c01..49b142e71 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -12,6 +12,7 @@ Release Notes. access name, method cache value field. All names are under `sw$` name trait. They are predictable and unchanged after re-transform. * Fix witness class in springmvc-annotation-5.x-plugin to avoid falling into v3 use cases. +* Fix Jedis-2.x plugin bug and add test for redis cluster scene ``` * SWAuxiliaryTypeNamingStrategy diff --git a/apm-sniffer/apm-sdk-plugin/jedis-plugins/jedis-2.x-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jedis/v3/JedisClusterConstructorWithHostAndPortArgInterceptor.java b/apm-sniffer/apm-sdk-plugin/jedis-plugins/jedis-2.x-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jedis/v3/JedisClusterConstructorWithHostAndPortArgInterceptor.java new file mode 100644 index 000000000..9d6cebda2 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/jedis-plugins/jedis-2.x-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jedis/v3/JedisClusterConstructorWithHostAndPortArgInterceptor.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.apm.plugin.jedis.v3; + +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor; +import redis.clients.jedis.HostAndPort; + +public class JedisClusterConstructorWithHostAndPortArgInterceptor implements InstanceConstructorInterceptor { + @Override + public void onConstruct(EnhancedInstance objInst, Object[] allArguments) throws Throwable { + HostAndPort hostAndPort = (HostAndPort) allArguments[0]; + objInst.setSkyWalkingDynamicField(hostAndPort.getHost() + ":" + hostAndPort.getPort()); + } +} diff --git a/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/bin/startup.sh b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/bin/startup.sh new file mode 100644 index 000000000..d57be3e5c --- /dev/null +++ b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/bin/startup.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# +# 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. + +home="$(cd "$(dirname $0)"; pwd)" + +java -jar ${agent_opts} -Dredis.cluster=${REDIS_CLUSTER_SERVER} ${home}/../libs/jedis-2.x-3.x-cluster-scenario.jar & \ No newline at end of file diff --git a/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/config/expectedData.yaml b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/config/expectedData.yaml new file mode 100644 index 000000000..e73580df8 --- /dev/null +++ b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/config/expectedData.yaml @@ -0,0 +1,171 @@ +# 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. +segmentItems: + - serviceName: jedis-2.x-3.x-cluster-scenario + segmentSize: ge 1 + segments: + - segmentId: not null + spans: + - operationName: Jedis/echo + operationId: 0 + parentSpanId: 0 + spanId: 1 + spanLayer: Cache + startTime: gt 0 + endTime: gt 0 + componentId: 30 + isError: false + spanType: Exit + peer: redis-server3:6379;redis-server2:6379;redis-server1:6379; + skipAnalysis: false + tags: + - {key: cache.type, value: Redis} + - {key: cache.cmd, value: echo} + - {key: cache.key, value: Test} + - operationName: Jedis/set + operationId: 0 + parentSpanId: 0 + spanId: 2 + spanLayer: Cache + startTime: gt 0 + endTime: gt 0 + componentId: 30 + isError: false + spanType: Exit + peer: redis-server3:6379;redis-server2:6379;redis-server1:6379; + skipAnalysis: false + tags: + - {key: cache.type, value: Redis} + - {key: cache.cmd, value: set} + - {key: cache.key, value: a} + - {key: cache.op, value: write} + - operationName: Jedis/get + operationId: 0 + parentSpanId: 0 + spanId: 3 + spanLayer: Cache + startTime: gt 0 + endTime: gt 0 + componentId: 30 + isError: false + spanType: Exit + peer: redis-server3:6379;redis-server2:6379;redis-server1:6379; + skipAnalysis: false + tags: + - {key: cache.type, value: Redis} + - {key: cache.cmd, value: get} + - {key: cache.key, value: a} + - {key: cache.op, value: read} + - operationName: Jedis/del + operationId: 0 + parentSpanId: 0 + spanId: 4 + spanLayer: Cache + startTime: gt 0 + endTime: gt 0 + componentId: 30 + isError: false + spanType: Exit + peer: redis-server3:6379;redis-server2:6379;redis-server1:6379; + skipAnalysis: false + tags: + - {key: cache.type, value: Redis} + - {key: cache.cmd, value: del} + - {key: cache.key, value: a} + - {key: cache.op, value: write} + - operationName: Jedis/echo + operationId: 0 + parentSpanId: 0 + spanId: 5 + spanLayer: Cache + startTime: gt 0 + endTime: gt 0 + componentId: 30 + isError: false + spanType: Exit + peer: redis-server3:6379 + skipAnalysis: false + tags: + - {key: cache.type, value: Redis} + - {key: cache.cmd, value: echo} + - {key: cache.key, value: Test} + - operationName: Jedis/set + operationId: 0 + parentSpanId: 0 + spanId: 6 + spanLayer: Cache + startTime: gt 0 + endTime: gt 0 + componentId: 30 + isError: false + spanType: Exit + peer: redis-server3:6379 + skipAnalysis: false + tags: + - {key: cache.type, value: Redis} + - {key: cache.cmd, value: set} + - {key: cache.key, value: b} + - {key: cache.op, value: write} + - operationName: Jedis/get + operationId: 0 + parentSpanId: 0 + spanId: 7 + spanLayer: Cache + startTime: gt 0 + endTime: gt 0 + componentId: 30 + isError: false + spanType: Exit + peer: redis-server3:6379 + skipAnalysis: false + tags: + - {key: cache.type, value: Redis} + - {key: cache.cmd, value: get} + - {key: cache.key, value: b} + - {key: cache.op, value: read} + - operationName: Jedis/del + operationId: 0 + parentSpanId: 0 + spanId: 8 + spanLayer: Cache + startTime: gt 0 + endTime: gt 0 + componentId: 30 + isError: false + spanType: Exit + peer: redis-server3:6379 + skipAnalysis: false + tags: + - {key: cache.type, value: Redis} + - {key: cache.cmd, value: del} + - {key: cache.key, value: b} + - {key: cache.op, value: write} + - operationName: GET:/jedis-2.x-3.x-cluster-scenario/case/jedis-2.x-3.x-cluster-scenario + operationId: 0 + parentSpanId: -1 + spanId: 0 + spanLayer: Http + startTime: gt 0 + endTime: gt 0 + componentId: 1 + isError: false + spanType: Entry + peer: '' + skipAnalysis: false + tags: + - {key: url, value: 'http://localhost:8080/jedis-2.x-3.x-cluster-scenario/case/jedis-2.x-3.x-cluster-scenario'} + - {key: http.method, value: GET} + - {key: http.status_code, value: '200'} diff --git a/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/configuration.yml b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/configuration.yml new file mode 100644 index 000000000..e37ee9af2 --- /dev/null +++ b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/configuration.yml @@ -0,0 +1,48 @@ +# 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. + +type: jvm +entryService: http://localhost:8080/jedis-2.x-3.x-cluster-scenario/case/jedis-2.x-3.x-cluster-scenario +healthCheck: http://localhost:8080/jedis-2.x-3.x-cluster-scenario/case/healthCheck +startScript: ./bin/startup.sh +environment: + - REDIS_CLUSTER_SERVER=redis-server1:6379,redis-server2:6379,redis-server3:6379 + - SW_PLUGIN_JEDIS_TRACE_REDIS_PARAMETERS=true +dependencies: + redis-server1: + image: bitnami/redis-cluster:7.0 + hostname: redis-server1 + environment: + - ALLOW_EMPTY_PASSWORD=true + - REDIS_NODES=redis-server1 redis-server2 redis-server3 + redis-server2: + image: bitnami/redis-cluster:7.0 + hostname: redis-server2 + environment: + - ALLOW_EMPTY_PASSWORD=true + - REDIS_NODES=redis-server1 redis-server2 redis-server3 + redis-server3: + image: bitnami/redis-cluster:7.0 + hostname: redis-server3 + depends_on: + - redis-server1 + - redis-server2 + environment: + - ALLOW_EMPTY_PASSWORD=true + - REDIS_CLUSTER_REPLICAS=0 + - REDIS_NODES=redis-server1 redis-server2 redis-server3 + - REDIS_CLUSTER_CREATOR=yes + diff --git a/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/pom.xml b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/pom.xml new file mode 100644 index 000000000..58f4af345 --- /dev/null +++ b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/pom.xml @@ -0,0 +1,169 @@ + + + + + org.apache.skywalking.apm.testcase + jedis-2.x-3.x-cluster-scenario + 1.0.0 + jar + + 4.0.0 + + + UTF-8 + 1.8 + 2.1.6.RELEASE + 3.0.1 + + + jedis-2.x-3.x-cluster-scenario + + + + + org.springframework.boot + spring-boot-dependencies + ${spring.boot.version} + pom + import + + + + + + + redis.clients + jedis + ${test.framework.version} + + + org.springframework.boot + spring-boot-starter-web + + + + + jedis-2.x-3.x-cluster-scenario + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.1.1 + + + com.puppycrawl.tools + checkstyle + 8.38 + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 1.5.9.RELEASE + + + + repackage + + + + + + maven-compiler-plugin + + ${compiler.version} + ${compiler.version} + ${project.build.sourceEncoding} + + + + org.apache.maven.plugins + maven-assembly-plugin + + + assemble + package + + single + + + + src/main/assembly/assembly.xml + + ./target/ + + + + + + maven-checkstyle-plugin + 3.1.1 + + ${maven.multiModuleProjectDirectory}/apm-checkstyle/checkStyle.xml + ${maven.multiModuleProjectDirectory}/apm-checkstyle/CHECKSTYLE_HEAD + UTF-8 + true + true + ${checkstyle.fails.on.error} + + ${project.build.sourceDirectory} + ${project.build.testSourceDirectory} + scenarios/dbcp-2.x-scenario + scenarios/druid-1.x-scenario + scenarios/druid-1.x + + + **/*.properties, + **/*.sh, + **/*.bat, + **/*.yml, + **/*.yaml, + **/*.xml + + + **/target/generated-test-sources/**, + **/target/generated-sources/**, + **/org/apache/skywalking/apm/testcase/baidu.brpc/interfaces/Echo.java, + **/org/apache/skywalking/apm/testcase/grpc/proto/*.java + + + import.control=${maven.multiModuleProjectDirectory}/apm-checkstyle/importControl.xml + + + + + validate + process-sources + + check + + + + + + + + \ No newline at end of file diff --git a/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/src/main/assembly/assembly.xml b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/src/main/assembly/assembly.xml new file mode 100644 index 000000000..095e6a0cb --- /dev/null +++ b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/src/main/assembly/assembly.xml @@ -0,0 +1,41 @@ + + + + + zip + + + + + ./bin + 0775 + + + + + + ${project.build.directory}/jedis-2.x-3.x-cluster-scenario.jar + ./libs + 0775 + + + diff --git a/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/src/main/java/org/apache/skywalking/apm/testcase/jedis/Application.java b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/src/main/java/org/apache/skywalking/apm/testcase/jedis/Application.java new file mode 100644 index 000000000..6cfc49b3a --- /dev/null +++ b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/src/main/java/org/apache/skywalking/apm/testcase/jedis/Application.java @@ -0,0 +1,34 @@ +/* + * 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.apm.testcase.jedis; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + try { + SpringApplication.run(Application.class, args); + } catch (Exception e) { + // Never do this + } + } +} diff --git a/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/src/main/java/org/apache/skywalking/apm/testcase/jedis/controller/CaseController.java b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/src/main/java/org/apache/skywalking/apm/testcase/jedis/controller/CaseController.java new file mode 100644 index 000000000..74da417a5 --- /dev/null +++ b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/src/main/java/org/apache/skywalking/apm/testcase/jedis/controller/CaseController.java @@ -0,0 +1,60 @@ +/* + * 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.apm.testcase.jedis.controller; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/case") +public class CaseController { + + private static final String SUCCESS = "Success"; + + @Value("${redis.cluster:127.0.0.1:6379}") + private String redisCluster; + + @RequestMapping("/jedis-2.x-3.x-cluster-scenario") + @ResponseBody + public String testcase() throws Exception { + try (RedisClusterCommandExecutor command = new RedisClusterCommandExecutor(redisCluster)) { + command.set("a", "a"); + command.get("a"); + command.del("a"); + } + + try (RedisSingleClusterCommandExecutor command = new RedisSingleClusterCommandExecutor(redisCluster)) { + command.set("b", "b"); + command.get("b"); + command.del("b"); + } + return SUCCESS; + } + + @RequestMapping("/healthCheck") + @ResponseBody + public String healthCheck() throws Exception { + try (RedisClusterCommandExecutor command = new RedisClusterCommandExecutor(redisCluster)) { + + } + return SUCCESS; + } +} diff --git a/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/src/main/java/org/apache/skywalking/apm/testcase/jedis/controller/RedisClusterCommandExecutor.java b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/src/main/java/org/apache/skywalking/apm/testcase/jedis/controller/RedisClusterCommandExecutor.java new file mode 100644 index 000000000..8509cca48 --- /dev/null +++ b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/src/main/java/org/apache/skywalking/apm/testcase/jedis/controller/RedisClusterCommandExecutor.java @@ -0,0 +1,58 @@ +/* + * 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.apm.testcase.jedis.controller; + +import redis.clients.jedis.HostAndPort; +import redis.clients.jedis.JedisCluster; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class RedisClusterCommandExecutor implements AutoCloseable { + private JedisCluster jedisCluster; + + public RedisClusterCommandExecutor(String redisCluster) { + List hostAndPortString = Arrays.asList(redisCluster.split(",")); + Set hostAndPorts = new HashSet<>(); + hostAndPortString.forEach(it -> { + String[] hostPort = it.split(":"); + hostAndPorts.add(new HostAndPort(hostPort[0], Integer.parseInt(hostPort[1]))); + }); + jedisCluster = new JedisCluster(hostAndPorts); + jedisCluster.echo("Test"); + } + + public void set(String key, String value) { + jedisCluster.set(key, value); + } + + public void get(String key) { + jedisCluster.get(key); + } + + public void del(String key) { + jedisCluster.del(key); + } + + public void close() throws Exception { + jedisCluster.close(); + } +} diff --git a/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/src/main/java/org/apache/skywalking/apm/testcase/jedis/controller/RedisSingleClusterCommandExecutor.java b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/src/main/java/org/apache/skywalking/apm/testcase/jedis/controller/RedisSingleClusterCommandExecutor.java new file mode 100644 index 000000000..e88d48d69 --- /dev/null +++ b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/src/main/java/org/apache/skywalking/apm/testcase/jedis/controller/RedisSingleClusterCommandExecutor.java @@ -0,0 +1,66 @@ +/* + * 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.apm.testcase.jedis.controller; + +import redis.clients.jedis.HostAndPort; +import redis.clients.jedis.JedisCluster; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class RedisSingleClusterCommandExecutor implements AutoCloseable { + + private JedisCluster jedisCluster; + + public RedisSingleClusterCommandExecutor(String redisCluster) { + + List hostAndPortString = Arrays.asList(redisCluster.split(",")); + Set hostAndPorts = new HashSet<>(); + hostAndPortString.forEach(it -> { + String[] hostPort = it.split(":"); + hostAndPorts.add(new HostAndPort(hostPort[0], Integer.parseInt(hostPort[1]))); + }); + try { + jedisCluster = new JedisCluster(hostAndPorts.iterator().next()); + } catch (Throwable throwable) { + jedisCluster = new JedisCluster(Collections.singleton(hostAndPorts.iterator().next())); + } + jedisCluster.echo("Test"); + } + + public void set(String key, String value) { + jedisCluster.set(key, value); + } + + public void get(String key) { + jedisCluster.get(key); + } + + public void del(String key) { + jedisCluster.del(key); + } + + @Override + public void close() throws Exception { + + } +} diff --git a/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/src/main/resources/application.yaml b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/src/main/resources/application.yaml new file mode 100644 index 000000000..9ae9fbf52 --- /dev/null +++ b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/src/main/resources/application.yaml @@ -0,0 +1,21 @@ +# +# 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. +# +# +server: + port: 8080 + servlet: + context-path: /jedis-2.x-3.x-cluster-scenario \ No newline at end of file diff --git a/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/src/main/resources/log4j2.xml b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/src/main/resources/log4j2.xml new file mode 100644 index 000000000..9849ed5a8 --- /dev/null +++ b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/src/main/resources/log4j2.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/support-version.list b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/support-version.list new file mode 100644 index 000000000..7e31e4f3f --- /dev/null +++ b/test/plugin/scenarios/jedis-2.x-3.x-cluster-scenario/support-version.list @@ -0,0 +1,22 @@ +# 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. + +3.8.0 +3.5.2 +3.0.1 +2.9.0 +2.8.2 +