Skip to content

Commit f2337bf

Browse files
committed
feature: support for tracking in Lettuce versions 6.5 and above
1 parent 7f9287f commit f2337bf

38 files changed

Lines changed: 1057 additions & 35 deletions

File tree

.github/workflows/plugins-test.1.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ jobs:
7272
- kafka-scenario
7373
- kotlin-coroutine-scenario
7474
- lettuce-scenario
75+
- lettuce-6.5.x-scenario
7576
- mongodb-3.x-scenario
7677
- mongodb-4.x-scenario
7778
- netty-socketio-scenario

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ Release Notes.
1414
* Fix retransform failure when enhancing both parent and child classes.
1515
* Add support for `dameng(DM)` JDBC url format in `URLParser`.
1616
* Fix RabbitMQ Consumer could not receive handleCancelOk callback.
17+
* Support for tracking in lettuce versions 6.5.x and above.
1718

1819
All issues and pull requests are [here](https://github.com/apache/skywalking/milestone/236?closed=1)
1920

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
~ Licensed to the Apache Software Foundation (ASF) under one or more
4+
~ contributor license agreements. See the NOTICE file distributed with
5+
~ this work for additional information regarding copyright ownership.
6+
~ The ASF licenses this file to You under the Apache License, Version 2.0
7+
~ (the "License"); you may not use this file except in compliance with
8+
~ the License. You may obtain a copy of the License at
9+
~
10+
~ http://www.apache.org/licenses/LICENSE-2.0
11+
~
12+
~ Unless required by applicable law or agreed to in writing, software
13+
~ distributed under the License is distributed on an "AS IS" BASIS,
14+
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
~ See the License for the specific language governing permissions and
16+
~ limitations under the License.
17+
~
18+
-->
19+
20+
<project xmlns="http://maven.apache.org/POM/4.0.0"
21+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
22+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
23+
<modelVersion>4.0.0</modelVersion>
24+
<parent>
25+
<artifactId>lettuce-plugins</artifactId>
26+
<groupId>org.apache.skywalking</groupId>
27+
<version>9.5.0-SNAPSHOT</version>
28+
</parent>
29+
30+
<artifactId>apm-lettuce-5.x-plugin</artifactId>
31+
<packaging>jar</packaging>
32+
33+
<name>lettuce-5.x-plugin</name>
34+
35+
<properties>
36+
<lettuce-core.version>5.0.0.RELEASE</lettuce-core.version>
37+
</properties>
38+
39+
<dependencies>
40+
<dependency>
41+
<groupId>org.apache.skywalking</groupId>
42+
<artifactId>apm-lettuce-common</artifactId>
43+
<version>${project.version}</version>
44+
<scope>provided</scope>
45+
</dependency>
46+
47+
<dependency>
48+
<groupId>io.lettuce</groupId>
49+
<artifactId>lettuce-core</artifactId>
50+
<version>${lettuce-core.version}</version>
51+
<scope>provided</scope>
52+
</dependency>
53+
</dependencies>
54+
55+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*
17+
*/
18+
19+
package org.apache.skywalking.apm.plugin.lettuce.v5;
20+
21+
import io.lettuce.core.protocol.ProtocolKeyword;
22+
import org.apache.skywalking.apm.plugin.lettuce.common.RedisChannelWriterInterceptor;
23+
24+
public class RedisChannelWriterInterceptorV5 extends RedisChannelWriterInterceptor {
25+
@Override
26+
protected String getCommandName(final ProtocolKeyword protocol) {
27+
return protocol.name();
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*
17+
*/
18+
19+
package org.apache.skywalking.apm.plugin.lettuce.v5.constant;
20+
21+
import net.bytebuddy.matcher.ElementMatchers;
22+
import org.apache.skywalking.apm.agent.core.plugin.WitnessMethod;
23+
24+
/**
25+
* Lettuce 5.x plugin constants
26+
*/
27+
28+
public class Constants {
29+
30+
public static final WitnessMethod WITNESS_LETTUCE_5X_METHOD = new WitnessMethod(
31+
"io.lettuce.core.protocol.ProtocolKeyword",
32+
ElementMatchers.named("name")
33+
);
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*
17+
*/
18+
19+
package org.apache.skywalking.apm.plugin.lettuce.v5.define;
20+
21+
import java.util.Collections;
22+
import java.util.List;
23+
import org.apache.skywalking.apm.agent.core.plugin.WitnessMethod;
24+
import org.apache.skywalking.apm.plugin.lettuce.common.define.DefaultEndpointInstrumentation;
25+
import org.apache.skywalking.apm.plugin.lettuce.v5.constant.Constants;
26+
27+
public class DefaultEndpointInstrumentationV5 extends DefaultEndpointInstrumentation {
28+
29+
@Override
30+
protected List<WitnessMethod> witnessMethods() {
31+
return Collections.singletonList(Constants.WITNESS_LETTUCE_5X_METHOD);
32+
}
33+
}

apm-sniffer/apm-sdk-plugin/lettuce-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/lettuce/v5/define/RedisChannelWriterInstrumentation.java renamed to apm-sniffer/apm-sdk-plugin/lettuce-plugins/lettuce-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/lettuce/v5/define/RedisChannelWriterInstrumentationV5.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,27 +18,27 @@
1818

1919
package org.apache.skywalking.apm.plugin.lettuce.v5.define;
2020

21+
import java.util.Collections;
22+
import java.util.List;
2123
import net.bytebuddy.description.method.MethodDescription;
2224
import net.bytebuddy.matcher.ElementMatcher;
25+
import org.apache.skywalking.apm.agent.core.plugin.WitnessMethod;
2326
import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
2427
import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
2528
import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
2629
import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
27-
28-
import java.util.List;
30+
import org.apache.skywalking.apm.plugin.lettuce.v5.RedisChannelWriterInterceptorV5;
31+
import org.apache.skywalking.apm.plugin.lettuce.v5.constant.Constants;
2932

3033
import static net.bytebuddy.matcher.ElementMatchers.named;
3134
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
3235
import static org.apache.skywalking.apm.agent.core.plugin.match.HierarchyMatch.byHierarchyMatch;
3336

34-
/**
35-
* The writeAndFlush method is used in versions lower than 5.0.2.RELEASE
36-
*/
37-
public class RedisChannelWriterInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
37+
public class RedisChannelWriterInstrumentationV5 extends ClassInstanceMethodsEnhancePluginDefine {
3838

3939
private static final String ENHANCE_CLASS = "io.lettuce.core.RedisChannelWriter";
4040

41-
private static final String REDIS_CHANNEL_WRITER_INTERCEPTOR_CLASS = "org.apache.skywalking.apm.plugin.lettuce.v5.RedisChannelWriterInterceptor";
41+
private static final String REDIS_CHANNEL_WRITER_INTERCEPTOR_CLASS = RedisChannelWriterInterceptorV5.class.getName();
4242

4343
@Override
4444
public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
@@ -47,12 +47,12 @@ public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
4747

4848
@Override
4949
public InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {
50-
return new InstanceMethodsInterceptPoint[]{
50+
return new InstanceMethodsInterceptPoint[] {
5151
new InstanceMethodsInterceptPoint() {
5252
@Override
5353
public ElementMatcher<MethodDescription> getMethodsMatcher() {
5454
return named("write").and(takesArgument(0, named("io.lettuce.core.protocol.RedisCommand")).or(
55-
takesArgument(0, List.class)));
55+
takesArgument(0, List.class)));
5656
}
5757

5858
@Override
@@ -65,11 +65,16 @@ public boolean isOverrideArgs() {
6565
return false;
6666
}
6767
},
68-
};
68+
};
6969
}
7070

7171
@Override
7272
public ClassMatch enhanceClass() {
7373
return byHierarchyMatch(ENHANCE_CLASS);
7474
}
75+
76+
@Override
77+
protected List<WitnessMethod> witnessMethods() {
78+
return Collections.singletonList(Constants.WITNESS_LETTUCE_5X_METHOD);
79+
}
7580
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*
17+
*/
18+
19+
package org.apache.skywalking.apm.plugin.lettuce.v5.define;
20+
21+
import java.util.Collections;
22+
import java.util.List;
23+
import org.apache.skywalking.apm.agent.core.plugin.WitnessMethod;
24+
import org.apache.skywalking.apm.plugin.lettuce.common.define.RedisCommandInstrumentation;
25+
import org.apache.skywalking.apm.plugin.lettuce.v5.constant.Constants;
26+
27+
public class RedisCommandInstrumentationV5 extends RedisCommandInstrumentation {
28+
29+
@Override
30+
protected List<WitnessMethod> witnessMethods() {
31+
return Collections.singletonList(Constants.WITNESS_LETTUCE_5X_METHOD);
32+
}
33+
}

apm-sniffer/apm-sdk-plugin/lettuce-5.x-plugin/src/main/resources/skywalking-plugin.def renamed to apm-sniffer/apm-sdk-plugin/lettuce-plugins/lettuce-5.x-plugin/src/main/resources/skywalking-plugin.def

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@
1414
# See the License for the specific language governing permissions and
1515
# limitations under the License.
1616

17-
lettuce-5.x=org.apache.skywalking.apm.plugin.lettuce.v5.define.DefaultEndpointInstrumentation
18-
lettuce-5.x=org.apache.skywalking.apm.plugin.lettuce.v5.define.RedisChannelWriterInstrumentation
19-
lettuce-5.x=org.apache.skywalking.apm.plugin.lettuce.v5.define.RedisCommandInstrumentation
17+
lettuce-5.x=org.apache.skywalking.apm.plugin.lettuce.v5.define.DefaultEndpointInstrumentationV5
18+
lettuce-5.x=org.apache.skywalking.apm.plugin.lettuce.v5.define.RedisChannelWriterInstrumentationV5
19+
lettuce-5.x=org.apache.skywalking.apm.plugin.lettuce.v5.define.RedisCommandInstrumentationV5
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
~ Licensed to the Apache Software Foundation (ASF) under one or more
4+
~ contributor license agreements. See the NOTICE file distributed with
5+
~ this work for additional information regarding copyright ownership.
6+
~ The ASF licenses this file to You under the Apache License, Version 2.0
7+
~ (the "License"); you may not use this file except in compliance with
8+
~ the License. You may obtain a copy of the License at
9+
~
10+
~ http://www.apache.org/licenses/LICENSE-2.0
11+
~
12+
~ Unless required by applicable law or agreed to in writing, software
13+
~ distributed under the License is distributed on an "AS IS" BASIS,
14+
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
~ See the License for the specific language governing permissions and
16+
~ limitations under the License.
17+
~
18+
-->
19+
20+
<project xmlns="http://maven.apache.org/POM/4.0.0"
21+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
22+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
23+
<modelVersion>4.0.0</modelVersion>
24+
<parent>
25+
<artifactId>lettuce-plugins</artifactId>
26+
<groupId>org.apache.skywalking</groupId>
27+
<version>9.5.0-SNAPSHOT</version>
28+
</parent>
29+
<artifactId>apm-lettuce-6.5.x-plugin</artifactId>
30+
31+
<packaging>jar</packaging>
32+
33+
<name>lettuce-6.5.x-plugin</name>
34+
35+
<properties>
36+
<lettuce-core.version>6.5.0.RELEASE</lettuce-core.version>
37+
</properties>
38+
39+
<dependencies>
40+
<dependency>
41+
<groupId>org.apache.skywalking</groupId>
42+
<artifactId>apm-lettuce-common</artifactId>
43+
<version>${project.version}</version>
44+
<scope>provided</scope>
45+
</dependency>
46+
47+
<dependency>
48+
<groupId>io.lettuce</groupId>
49+
<artifactId>lettuce-core</artifactId>
50+
<version>${lettuce-core.version}</version>
51+
<scope>provided</scope>
52+
</dependency>
53+
</dependencies>
54+
55+
</project>

0 commit comments

Comments
 (0)