Skip to content

Commit

Permalink
fix jedis 2.x plugin bug and add test for redis cluster (apache#580)
Browse files Browse the repository at this point in the history
* fix bug and add test for redist cluster

* add test to flow

---------

Co-authored-by: litexu <[email protected]>
  • Loading branch information
xu1009 and litexu committed Jul 10, 2023
1 parent 457f7ae commit 5f669e0
Show file tree
Hide file tree
Showing 15 changed files with 773 additions and 0 deletions.
1 change: 1 addition & 0 deletions .github/workflows/plugins-test.1.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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());
}
}
Original file line number Diff line number Diff line change
@@ -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 &
Original file line number Diff line number Diff line change
@@ -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'}
Original file line number Diff line number Diff line change
@@ -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

Loading

0 comments on commit 5f669e0

Please sign in to comment.