From 5ef911c6ffb691108f12f441cede8869a2345a77 Mon Sep 17 00:00:00 2001 From: j-sandy <30489233+j-sandy@users.noreply.github.com> Date: Tue, 3 Dec 2024 17:27:11 +0530 Subject: [PATCH 01/13] chore(dependency): upgrade spring boot from 2.7.x to 3.0.x and spring cloud from 2021.0.x to 2022.0.x Upgrading spring boot 2.7.18 to 3.0.13 and spring cloud 2021.0.8 to 2022.0.5. Spring cloud release 2022.0.x is compatible with spring boot 3.0.x. https://github.com/spring-cloud/spring-cloud-release/wiki/Supported-Versions#supported-releases Unpinning okhttp and rest-assured, as spring boot [3.0.13](https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-dependencies/3.0.13/spring-boot-dependencies-3.0.13.pom) brings okhttp 4.10.0 and rest-assured 5.2.1. While upgrading the spring boot and spring cloud, encountered the below errors during build process of kork-jedis module: ``` > Task :kork-jedis:compileJava FAILED /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisClientDelegate.java:23: error: cannot find symbol import redis.clients.jedis.ScanParams; ^ symbol: class ScanParams location: package redis.clients.jedis /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisClientDelegate.java:24: error: cannot find symbol import redis.clients.jedis.ScanResult; ^ symbol: class ScanResult location: package redis.clients.jedis /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisClientDelegate.java:26: error: cannot find symbol import redis.clients.jedis.commands.BinaryJedisCommands; ^ symbol: class BinaryJedisCommands location: package redis.clients.jedis.commands /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisClientDelegate.java:28: error: cannot find symbol import redis.clients.jedis.commands.MultiKeyCommands; ^ symbol: class MultiKeyCommands location: package redis.clients.jedis.commands /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisClientDelegate.java:29: error: cannot find symbol import redis.clients.jedis.commands.RedisPipeline; ^ symbol: class RedisPipeline location: package redis.clients.jedis.commands /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisClientDelegate.java:30: error: cannot find symbol import redis.clients.jedis.commands.ScriptingCommands; ^ symbol: class ScriptingCommands location: package redis.clients.jedis.commands /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/RedisClientDelegate.java:22: error: cannot find symbol import redis.clients.jedis.commands.BinaryJedisCommands; ^ symbol: class BinaryJedisCommands location: package redis.clients.jedis.commands /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/RedisClientDelegate.java:24: error: cannot find symbol import redis.clients.jedis.commands.MultiKeyCommands; ^ symbol: class MultiKeyCommands location: package redis.clients.jedis.commands /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/RedisClientDelegate.java:25: error: cannot find symbol import redis.clients.jedis.commands.RedisPipeline; ^ symbol: class RedisPipeline location: package redis.clients.jedis.commands /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/RedisClientDelegate.java:26: error: cannot find symbol import redis.clients.jedis.commands.ScriptingCommands; ^ symbol: class ScriptingCommands location: package redis.clients.jedis.commands /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisClientDelegate.java:67: error: cannot find symbol public R withMultiClient(Function f) { ^ symbol: class MultiKeyCommands location: class JedisClientDelegate /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisClientDelegate.java:74: error: cannot find symbol public void withMultiClient(Consumer f) { ^ symbol: class MultiKeyCommands location: class JedisClientDelegate /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisClientDelegate.java:81: error: cannot find symbol public R withBinaryClient(Function f) { ^ symbol: class BinaryJedisCommands location: class JedisClientDelegate /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisClientDelegate.java:88: error: cannot find symbol public void withBinaryClient(Consumer f) { ^ symbol: class BinaryJedisCommands location: class JedisClientDelegate /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisClientDelegate.java:95: error: cannot find symbol public void withPipeline(Consumer f) { ^ symbol: class RedisPipeline location: class JedisClientDelegate /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisClientDelegate.java:102: error: cannot find symbol public R withPipeline(Function f) { ^ symbol: class RedisPipeline location: class JedisClientDelegate /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisClientDelegate.java:109: error: cannot find symbol public void syncPipeline(RedisPipeline p) { ^ symbol: class RedisPipeline location: class JedisClientDelegate /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisClientDelegate.java:162: error: cannot find symbol public void withScriptingClient(Consumer f) { ^ symbol: class ScriptingCommands location: class JedisClientDelegate /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisClientDelegate.java:169: error: cannot find symbol public R withScriptingClient(Function f) { ^ symbol: class ScriptingCommands location: class JedisClientDelegate /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/RedisClientDelegate.java:41: error: cannot find symbol R withMultiClient(Function f); ^ symbol: class MultiKeyCommands location: interface RedisClientDelegate /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/RedisClientDelegate.java:43: error: cannot find symbol void withMultiClient(Consumer f); ^ symbol: class MultiKeyCommands location: interface RedisClientDelegate /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/RedisClientDelegate.java:45: error: cannot find symbol R withBinaryClient(Function f); ^ symbol: class BinaryJedisCommands location: interface RedisClientDelegate /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/RedisClientDelegate.java:47: error: cannot find symbol void withBinaryClient(Consumer f); ^ symbol: class BinaryJedisCommands location: interface RedisClientDelegate /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/RedisClientDelegate.java:49: error: cannot find symbol void withPipeline(Consumer f); ^ symbol: class RedisPipeline location: interface RedisClientDelegate /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/RedisClientDelegate.java:51: error: cannot find symbol R withPipeline(Function f); ^ symbol: class RedisPipeline location: interface RedisClientDelegate /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/RedisClientDelegate.java:53: error: cannot find symbol void syncPipeline(RedisPipeline p); ^ symbol: class RedisPipeline location: interface RedisClientDelegate /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/RedisClientDelegate.java:69: error: cannot find symbol void withScriptingClient(Consumer f); ^ symbol: class ScriptingCommands location: interface RedisClientDelegate /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/RedisClientDelegate.java:71: error: cannot find symbol R withScriptingClient(Function f); ^ symbol: class ScriptingCommands location: interface RedisClientDelegate /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:107: error: cannot find symbol public void setClient(Client client) { ^ symbol: class Client location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:386: error: cannot find symbol public Response sort(String key, SortingParams sortingParameters, String dstkey) { ^ symbol: class SortingParams location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:392: error: cannot find symbol public Response sort(byte[] key, SortingParams sortingParameters, byte[] dstkey) { ^ symbol: class SortingParams location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:458: error: cannot find symbol public Response zinterstore(String dstkey, ZParams params, String... sets) { ^ symbol: class ZParams location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:464: error: cannot find symbol public Response zinterstore(byte[] dstkey, ZParams params, byte[]... sets) { ^ symbol: class ZParams location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:482: error: cannot find symbol public Response zunionstore(String dstkey, ZParams params, String... sets) { ^ symbol: class ZParams location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:488: error: cannot find symbol public Response zunionstore(byte[] dstkey, ZParams params, byte[]... sets) { ^ symbol: class ZParams location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:626: error: cannot find symbol public Response bitop(BitOP op, byte[] destKey, byte[]... srcKeys) { ^ symbol: class BitOP location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:632: error: cannot find symbol public Response bitop(BitOP op, String destKey, String... srcKeys) { ^ symbol: class BitOP location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:916: error: cannot find symbol public Response bitpos(String key, boolean value, BitPosParams params) { ^ symbol: class BitPosParams location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:928: error: cannot find symbol public Response bitpos(byte[] key, boolean value, BitPosParams params) { ^ symbol: class BitPosParams location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1414: error: cannot find symbol public Response> sort(String key, SortingParams sortingParameters) { ^ symbol: class SortingParams location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1420: error: cannot find symbol public Response> sort(byte[] key, SortingParams sortingParameters) { ^ symbol: class SortingParams location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1708: error: cannot find symbol public Response> zrangeByScoreWithScores(String key, double min, double max) { ^ symbol: class Tuple location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1714: error: cannot find symbol public Response> zrangeByScoreWithScores(String key, String min, String max) { ^ symbol: class Tuple location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1720: error: cannot find symbol public Response> zrangeByScoreWithScores(byte[] key, double min, double max) { ^ symbol: class Tuple location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1726: error: cannot find symbol public Response> zrangeByScoreWithScores(byte[] key, byte[] min, byte[] max) { ^ symbol: class Tuple location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1732: error: cannot find symbol public Response> zrangeByScoreWithScores( ^ symbol: class Tuple location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1740: error: cannot find symbol public Response> zrangeByScoreWithScores( ^ symbol: class Tuple location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1748: error: cannot find symbol public Response> zrangeByScoreWithScores( ^ symbol: class Tuple location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1756: error: cannot find symbol public Response> zrangeByScoreWithScores( ^ symbol: class Tuple location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1816: error: cannot find symbol public Response> zrevrangeByScoreWithScores(String key, double max, double min) { ^ symbol: class Tuple location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1822: error: cannot find symbol public Response> zrevrangeByScoreWithScores(String key, String max, String min) { ^ symbol: class Tuple location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1828: error: cannot find symbol public Response> zrevrangeByScoreWithScores(byte[] key, double max, double min) { ^ symbol: class Tuple location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1834: error: cannot find symbol public Response> zrevrangeByScoreWithScores(byte[] key, byte[] max, byte[] min) { ^ symbol: class Tuple location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1840: error: cannot find symbol public Response> zrevrangeByScoreWithScores( ^ symbol: class Tuple location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1848: error: cannot find symbol public Response> zrevrangeByScoreWithScores( ^ symbol: class Tuple location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1856: error: cannot find symbol public Response> zrevrangeByScoreWithScores( ^ symbol: class Tuple location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1864: error: cannot find symbol public Response> zrevrangeByScoreWithScores( ^ symbol: class Tuple location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1872: error: cannot find symbol public Response> zrangeWithScores(String key, long start, long end) { ^ symbol: class Tuple location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1878: error: cannot find symbol public Response> zrangeWithScores(byte[] key, long start, long end) { ^ symbol: class Tuple location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1956: error: cannot find symbol public Response> zrevrangeWithScores(String key, long start, long end) { ^ symbol: class Tuple location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:1962: error: cannot find symbol public Response> zrevrangeWithScores(byte[] key, long start, long end) { ^ symbol: class Tuple location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:2346: error: cannot find symbol public Response geodist(byte[] key, byte[] member1, byte[] member2, GeoUnit unit) { ^ symbol: class GeoUnit location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:2358: error: cannot find symbol public Response geodist(String key, String member1, String member2, GeoUnit unit) { ^ symbol: class GeoUnit location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:2389: error: cannot find symbol byte[] key, double longitude, double latitude, double radius, GeoUnit unit) { ^ symbol: class GeoUnit location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:2388: error: cannot find symbol public Response> georadius( ^ symbol: class GeoRadiusResponse location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:2400: error: cannot find symbol GeoUnit unit, ^ symbol: class GeoUnit location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:2395: error: cannot find symbol public Response> georadius( ^ symbol: class GeoRadiusResponse location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:2409: error: cannot find symbol String key, double longitude, double latitude, double radius, GeoUnit unit) { ^ symbol: class GeoUnit location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:2408: error: cannot find symbol public Response> georadius( ^ symbol: class GeoRadiusResponse location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:2420: error: cannot find symbol GeoUnit unit, ^ symbol: class GeoUnit location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:2415: error: cannot find symbol public Response> georadius( ^ symbol: class GeoRadiusResponse location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:2429: error: cannot find symbol byte[] key, byte[] member, double radius, GeoUnit unit) { ^ symbol: class GeoUnit location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:2428: error: cannot find symbol public Response> georadiusByMember( ^ symbol: class GeoRadiusResponse location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:2436: error: cannot find symbol byte[] key, byte[] member, double radius, GeoUnit unit, GeoRadiusParam param) { ^ symbol: class GeoUnit location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:2435: error: cannot find symbol public Response> georadiusByMember( ^ symbol: class GeoRadiusResponse location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:2444: error: cannot find symbol String key, String member, double radius, GeoUnit unit) { ^ symbol: class GeoUnit location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:2443: error: cannot find symbol public Response> georadiusByMember( ^ symbol: class GeoRadiusResponse location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:2451: error: cannot find symbol String key, String member, double radius, GeoUnit unit, GeoRadiusParam param) { ^ symbol: class GeoUnit location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java:2450: error: cannot find symbol public Response> georadiusByMember( ^ symbol: class GeoRadiusResponse location: class InstrumentedPipeline /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:33: error: cannot find symbol import redis.clients.jedis.util.Slowlog; ^ symbol: class Slowlog location: package redis.clients.jedis.util /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:599: error: cannot find symbol public Set zrangeWithScores(String key, long start, long end) { ^ symbol: class Tuple location: class InstrumentedJedis /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:605: error: cannot find symbol public Set zrevrangeWithScores(String key, long start, long end) { ^ symbol: class Tuple location: class InstrumentedJedis /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:635: error: cannot find symbol public List sort(String key, SortingParams sortingParameters) { ^ symbol: class SortingParams location: class InstrumentedJedis /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:659: error: cannot find symbol public Long sort(String key, SortingParams sortingParameters, String dstkey) { ^ symbol: class SortingParams location: class InstrumentedJedis /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:713: error: cannot find symbol public Set zrangeByScoreWithScores(String key, double min, double max) { ^ symbol: class Tuple location: class InstrumentedJedis /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:719: error: cannot find symbol public Set zrangeByScoreWithScores(String key, String min, String max) { ^ symbol: class Tuple location: class InstrumentedJedis /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:725: error: cannot find symbol public Set zrangeByScoreWithScores( ^ symbol: class Tuple location: class InstrumentedJedis /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:733: error: cannot find symbol public Set zrangeByScoreWithScores( ^ symbol: class Tuple location: class InstrumentedJedis /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:759: error: cannot find symbol public Set zrevrangeByScoreWithScores(String key, double max, double min) { ^ symbol: class Tuple location: class InstrumentedJedis /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:765: error: cannot find symbol public Set zrevrangeByScoreWithScores( ^ symbol: class Tuple location: class InstrumentedJedis /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:773: error: cannot find symbol public Set zrevrangeByScoreWithScores( ^ symbol: class Tuple location: class InstrumentedJedis /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:787: error: cannot find symbol public Set zrevrangeByScoreWithScores(String key, String max, String min) { ^ symbol: class Tuple location: class InstrumentedJedis /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:817: error: cannot find symbol public Long zunionstore(String dstkey, ZParams params, String... sets) { ^ symbol: class ZParams location: class InstrumentedJedis /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:829: error: cannot find symbol public Long zinterstore(String dstkey, ZParams params, String... sets) { ^ symbol: class ZParams location: class InstrumentedJedis /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:902: error: cannot find symbol final String key, final ListPosition where, final String pivot, final String value) { ^ symbol: class ListPosition location: class InstrumentedJedis /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:951: error: cannot find symbol public Long bitpos(String key, boolean value, BitPosParams params) { ^ symbol: class BitPosParams location: class InstrumentedJedis /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:1044: error: cannot find symbol public List slowlogGet() { ^ symbol: class Slowlog location: class InstrumentedJedis /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:1050: error: cannot find symbol public List slowlogGet(long entries) { ^ symbol: class Slowlog location: class InstrumentedJedis /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:1086: error: cannot find symbol public Long bitop(BitOP op, String destKey, String... srcKeys) { ^ symbol: class BitOP location: class InstrumentedJedis /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:1195: error: cannot find symbol public ScanResult scan(String cursor) { ^ symbol: class ScanResult location: class InstrumentedJedis 100 errors only showing the first 100 errors, of 166 total; use -Xmaxerrs if you would like to see more ``` The root cause of these errors is upgrade of `redis.clients:jedis` from 3.8.0 to 4.3.2 with spring boot upgrade from 2.x to 3.x. In order to fix these issues, migrated jedis from 3.x to 4.x by following the migration [document](https://github.com/redis/jedis/blob/master/docs/3to4.md) And for further changelogs, please refer [here](https://github.com/redis/jedis/releases/tag/v4.0.0) Removed the reflection logic to check the `internalPool` field from `JedisPool` object, as `internalPool` field has been removed from Jedis [4.3.2](https://javadoc.io/static/redis.clients/jedis/4.3.2/redis/clients/jedis/util/Pool.html#internalPool) and `JedisPool` is sub class of `GenericObjectPool` from Jedis [4.0.0](https://github.com/redis/jedis/pull/2521) onwards. So, refactoring the logic to check null value. In Jedis 4.x, default constructor of `Pipeline` class has be removed in lieu of parameterised constructor to obtain `Connection` object either directly passing `Connection` or `Jedis`, as discussed [here](https://github.com/redis/jedis/pull/2693). So, updating the constructor by replacing the `Pipeline` with `Jedis`, and updated its usage in `InstrumentedJedis.pipelined()` method. --- .../kork/jedis/JedisClientDelegate.java | 27 +- .../jedis/JedisHealthIndicatorFactory.java | 52 +- .../kork/jedis/RedisClientDelegate.java | 23 +- .../jedis/telemetry/InstrumentedJedis.java | 514 ++++++++---------- .../telemetry/InstrumentedJedisPool.java | 49 +- .../jedis/telemetry/InstrumentedPipeline.java | 407 +++----------- .../spinnaker-dependencies.gradle | 38 +- 7 files changed, 375 insertions(+), 735 deletions(-) diff --git a/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisClientDelegate.java b/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisClientDelegate.java index 81459cd78..dcd7d7335 100644 --- a/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisClientDelegate.java +++ b/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisClientDelegate.java @@ -20,14 +20,11 @@ import java.util.function.Function; import redis.clients.jedis.Jedis; import redis.clients.jedis.Pipeline; -import redis.clients.jedis.ScanParams; -import redis.clients.jedis.ScanResult; import redis.clients.jedis.Transaction; -import redis.clients.jedis.commands.BinaryJedisCommands; +import redis.clients.jedis.commands.JedisBinaryCommands; import redis.clients.jedis.commands.JedisCommands; -import redis.clients.jedis.commands.MultiKeyCommands; -import redis.clients.jedis.commands.RedisPipeline; -import redis.clients.jedis.commands.ScriptingCommands; +import redis.clients.jedis.params.ScanParams; +import redis.clients.jedis.resps.ScanResult; import redis.clients.jedis.util.Pool; public class JedisClientDelegate implements RedisClientDelegate { @@ -64,49 +61,49 @@ public void withCommandsClient(Consumer f) { } @Override - public R withMultiClient(Function f) { + public R withMultiClient(Function f) { try (Jedis jedis = jedisPool.getResource()) { return f.apply(jedis); } } @Override - public void withMultiClient(Consumer f) { + public void withMultiClient(Consumer f) { try (Jedis jedis = jedisPool.getResource()) { f.accept(jedis); } } @Override - public R withBinaryClient(Function f) { + public R withBinaryClient(Function f) { try (Jedis jedis = jedisPool.getResource()) { return f.apply(jedis); } } @Override - public void withBinaryClient(Consumer f) { + public void withBinaryClient(Consumer f) { try (Jedis jedis = jedisPool.getResource()) { f.accept(jedis); } } @Override - public void withPipeline(Consumer f) { + public void withPipeline(Consumer f) { try (Jedis jedis = jedisPool.getResource()) { f.accept(jedis.pipelined()); } } @Override - public R withPipeline(Function f) { + public R withPipeline(Function f) { try (Jedis jedis = jedisPool.getResource()) { return f.apply(jedis.pipelined()); } } @Override - public void syncPipeline(RedisPipeline p) { + public void syncPipeline(Pipeline p) { if (!(p instanceof Pipeline)) { throw new IllegalArgumentException( "Invalid RedisPipeline implementation: " + p.getClass().getName()); @@ -159,14 +156,14 @@ public boolean supportsScripting() { } @Override - public void withScriptingClient(Consumer f) { + public void withScriptingClient(Consumer f) { try (Jedis jedis = jedisPool.getResource()) { f.accept(jedis); } } @Override - public R withScriptingClient(Function f) { + public R withScriptingClient(Function f) { try (Jedis jedis = jedisPool.getResource()) { return f.apply(jedis); } diff --git a/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisHealthIndicatorFactory.java b/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisHealthIndicatorFactory.java index 1783f30b4..a58ddfada 100644 --- a/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisHealthIndicatorFactory.java +++ b/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/JedisHealthIndicatorFactory.java @@ -16,7 +16,6 @@ package com.netflix.spinnaker.kork.jedis; import java.lang.reflect.Field; -import org.apache.commons.pool2.impl.GenericObjectPool; import org.springframework.beans.factory.BeanCreationException; import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.HealthIndicator; @@ -39,36 +38,29 @@ public static HealthIndicator build(JedisClientDelegate client) { } public static HealthIndicator build(Pool jedisPool) { - try { - final Pool src = jedisPool; - final Field poolAccess = Pool.class.getDeclaredField("internalPool"); - poolAccess.setAccessible(true); - GenericObjectPool internal = (GenericObjectPool) poolAccess.get(jedisPool); - return () -> { - Jedis jedis = null; - Health.Builder health; - try { - jedis = src.getResource(); - if ("PONG".equals(jedis.ping())) { - health = Health.up(); - } else { - health = Health.down(); - } - } catch (Exception ex) { - health = Health.down(ex); - } finally { - if (jedis != null) jedis.close(); + final Pool src = jedisPool; + return () -> { + Jedis jedis = null; + Health.Builder health; + try { + jedis = src.getResource(); + if ("PONG".equals(jedis.ping())) { + health = Health.up(); + } else { + health = Health.down(); } - health.withDetail("maxIdle", internal.getMaxIdle()); - health.withDetail("minIdle", internal.getMinIdle()); - health.withDetail("numActive", internal.getNumActive()); - health.withDetail("numIdle", internal.getNumIdle()); - health.withDetail("numWaiters", internal.getNumWaiters()); + } catch (Exception ex) { + health = Health.down(ex); + } finally { + if (jedis != null) jedis.close(); + } + health.withDetail("maxIdle", jedisPool.getMaxIdle()); + health.withDetail("minIdle", jedisPool.getMinIdle()); + health.withDetail("numActive", jedisPool.getNumActive()); + health.withDetail("numIdle", jedisPool.getNumIdle()); + health.withDetail("numWaiters", jedisPool.getNumWaiters()); - return health.build(); - }; - } catch (IllegalAccessException | NoSuchFieldException e) { - throw new BeanCreationException("Error creating Redis health indicator", e); - } + return health.build(); + }; } } diff --git a/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/RedisClientDelegate.java b/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/RedisClientDelegate.java index 0ff8ae562..c174073d5 100644 --- a/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/RedisClientDelegate.java +++ b/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/RedisClientDelegate.java @@ -19,11 +19,8 @@ import java.util.function.Function; import redis.clients.jedis.Pipeline; import redis.clients.jedis.Transaction; -import redis.clients.jedis.commands.BinaryJedisCommands; +import redis.clients.jedis.commands.JedisBinaryCommands; import redis.clients.jedis.commands.JedisCommands; -import redis.clients.jedis.commands.MultiKeyCommands; -import redis.clients.jedis.commands.RedisPipeline; -import redis.clients.jedis.commands.ScriptingCommands; /** * Offers a functional interface over either a vanilla Jedis or Dynomite client. @@ -38,19 +35,19 @@ public interface RedisClientDelegate { void withCommandsClient(Consumer f); - R withMultiClient(Function f); + R withMultiClient(Function f); - void withMultiClient(Consumer f); + void withMultiClient(Consumer f); - R withBinaryClient(Function f); + R withBinaryClient(Function f); - void withBinaryClient(Consumer f); + void withBinaryClient(Consumer f); - void withPipeline(Consumer f); + void withPipeline(Consumer f); - R withPipeline(Function f); + R withPipeline(Function f); - void syncPipeline(RedisPipeline p); + void syncPipeline(Pipeline p); boolean supportsMultiKeyPipelines(); @@ -66,9 +63,9 @@ public interface RedisClientDelegate { boolean supportsScripting(); - void withScriptingClient(Consumer f); + void withScriptingClient(Consumer f); - R withScriptingClient(Function f); + R withScriptingClient(Function f); void withKeyScan(String pattern, int count, Consumer f); } diff --git a/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java b/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java index 2da98e9f1..9e56ea36c 100644 --- a/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java +++ b/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java @@ -26,11 +26,23 @@ import java.util.Set; import java.util.concurrent.Callable; import redis.clients.jedis.*; +import redis.clients.jedis.args.BitOP; +import redis.clients.jedis.args.ClusterResetType; +import redis.clients.jedis.args.GeoUnit; +import redis.clients.jedis.args.ListPosition; +import redis.clients.jedis.exceptions.JedisException; +import redis.clients.jedis.params.BitPosParams; import redis.clients.jedis.params.GeoRadiusParam; +import redis.clients.jedis.params.ScanParams; import redis.clients.jedis.params.SetParams; +import redis.clients.jedis.params.SortingParams; import redis.clients.jedis.params.ZAddParams; import redis.clients.jedis.params.ZIncrByParams; -import redis.clients.jedis.util.Slowlog; +import redis.clients.jedis.params.ZParams; +import redis.clients.jedis.resps.GeoRadiusResponse; +import redis.clients.jedis.resps.ScanResult; +import redis.clients.jedis.resps.Slowlog; +import redis.clients.jedis.resps.Tuple; /** * Instruments: - Timer for each command - Distribution summary for all payload sizes - Error rates @@ -134,25 +146,25 @@ public String get(String key) { } @Override - public Long exists(String... keys) { + public long exists(String... keys) { String command = "exists"; return instrumented(command, () -> delegated.exists(keys)); } @Override - public Boolean exists(String key) { + public boolean exists(String key) { String command = "exists"; return instrumented(command, () -> delegated.exists(key)); } @Override - public Long del(String... keys) { + public long del(String... keys) { String command = "del"; return instrumented(command, () -> delegated.del(keys)); } @Override - public Long del(String key) { + public long del(String key) { String command = "del"; return instrumented(command, () -> delegated.del(key)); } @@ -182,31 +194,31 @@ public String rename(String oldkey, String newkey) { } @Override - public Long renamenx(String oldkey, String newkey) { + public long renamenx(String oldkey, String newkey) { String command = "renamenx"; return instrumented(command, () -> delegated.renamenx(oldkey, newkey)); } @Override - public Long expire(String key, int seconds) { + public long expire(String key, long seconds) { String command = "expire"; return instrumented(command, () -> delegated.expire(key, seconds)); } @Override - public Long expireAt(String key, long unixTime) { + public long expireAt(String key, long unixTime) { String command = "expireAt"; return instrumented(command, () -> delegated.expireAt(key, unixTime)); } @Override - public Long ttl(String key) { + public long ttl(String key) { String command = "ttl"; return instrumented(command, () -> delegated.ttl(key)); } @Override - public Long move(String key, int dbIndex) { + public long move(String key, int dbIndex) { String command = "move"; return instrumented(command, () -> delegated.move(key, dbIndex)); } @@ -224,13 +236,13 @@ public List mget(String... keys) { } @Override - public Long setnx(String key, String value) { + public long setnx(String key, String value) { String command = "setnx"; return instrumented(command, payloadSize(value), () -> delegated.setnx(key, value)); } @Override - public String setex(String key, int seconds, String value) { + public String setex(String key, long seconds, String value) { String command = "setex"; return instrumented(command, payloadSize(value), () -> delegated.setex(key, seconds, value)); } @@ -242,43 +254,43 @@ public String mset(String... keysvalues) { } @Override - public Long msetnx(String... keysvalues) { + public long msetnx(String... keysvalues) { String command = "msetnx"; return instrumented(command, payloadSize(keysvalues), () -> delegated.msetnx(keysvalues)); } @Override - public Long decrBy(String key, long integer) { + public long decrBy(String key, long integer) { String command = "decrBy"; return instrumented(command, () -> delegated.decrBy(key, integer)); } @Override - public Long decr(String key) { + public long decr(String key) { String command = "decr"; return instrumented(command, () -> delegated.decr(key)); } @Override - public Long incrBy(String key, long integer) { + public long incrBy(String key, long integer) { String command = "incrBy"; return instrumented(command, () -> delegated.incrBy(key, integer)); } @Override - public Double incrByFloat(String key, double value) { + public double incrByFloat(String key, double value) { String command = "incrByFloat"; return instrumented(command, () -> delegated.incrByFloat(key, value)); } @Override - public Long incr(String key) { + public long incr(String key) { String command = "incr"; return instrumented(command, () -> delegated.incr(key)); } @Override - public Long append(String key, String value) { + public long append(String key, String value) { String command = "append"; return instrumented(command, payloadSize(value), () -> delegated.append(key, value)); } @@ -290,7 +302,7 @@ public String substr(String key, int start, int end) { } @Override - public Long hset(String key, String field, String value) { + public long hset(String key, String field, String value) { String command = "hset"; return instrumented(command, payloadSize(value), () -> delegated.hset(key, field, value)); } @@ -302,7 +314,7 @@ public String hget(String key, String field) { } @Override - public Long hsetnx(String key, String field, String value) { + public long hsetnx(String key, String field, String value) { String command = "hsetnx"; return instrumented(command, payloadSize(value), () -> delegated.hsetnx(key, field, value)); } @@ -320,31 +332,31 @@ public List hmget(String key, String... fields) { } @Override - public Long hincrBy(String key, String field, long value) { + public long hincrBy(String key, String field, long value) { String command = "hincrBy"; return instrumented(command, () -> delegated.hincrBy(key, field, value)); } @Override - public Double hincrByFloat(String key, String field, double value) { + public double hincrByFloat(String key, String field, double value) { String command = "hincrByFloat"; return instrumented(command, () -> delegated.hincrByFloat(key, field, value)); } @Override - public Boolean hexists(String key, String field) { + public boolean hexists(String key, String field) { String command = "hexists"; return instrumented(command, () -> delegated.hexists(key, field)); } @Override - public Long hdel(String key, String... fields) { + public long hdel(String key, String... fields) { String command = "hdel"; return instrumented(command, () -> delegated.hdel(key, fields)); } @Override - public Long hlen(String key) { + public long hlen(String key) { String command = "hlen"; return instrumented(command, () -> delegated.hlen(key)); } @@ -368,19 +380,19 @@ public Map hgetAll(String key) { } @Override - public Long rpush(String key, String... strings) { + public long rpush(String key, String... strings) { String command = "rpush"; return instrumented(command, payloadSize(strings), () -> delegated.rpush(key, strings)); } @Override - public Long lpush(String key, String... strings) { + public long lpush(String key, String... strings) { String command = "lpush"; return instrumented(command, payloadSize(strings), () -> delegated.lpush(key, strings)); } @Override - public Long llen(String key) { + public long llen(String key) { String command = "llen"; return instrumented(command, () -> delegated.llen(key)); } @@ -410,7 +422,7 @@ public String lset(String key, long index, String value) { } @Override - public Long lrem(String key, long count, String value) { + public long lrem(String key, long count, String value) { String command = "lrem"; return instrumented(command, payloadSize(value), () -> delegated.lrem(key, count, value)); } @@ -434,7 +446,7 @@ public String rpoplpush(String srckey, String dstkey) { } @Override - public Long sadd(String key, String... members) { + public long sadd(String key, String... members) { String command = "sadd"; return instrumented(command, payloadSize(members), () -> delegated.sadd(key, members)); } @@ -446,7 +458,7 @@ public Set smembers(String key) { } @Override - public Long srem(String key, String... members) { + public long srem(String key, String... members) { String command = "srem"; return instrumented(command, payloadSize(members), () -> delegated.srem(key, members)); } @@ -464,19 +476,19 @@ public Set spop(String key, long count) { } @Override - public Long smove(String srckey, String dstkey, String member) { + public long smove(String srckey, String dstkey, String member) { String command = "smove"; return instrumented(command, () -> delegated.smove(srckey, dstkey, member)); } @Override - public Long scard(String key) { + public long scard(String key) { String command = "scard"; return instrumented(command, () -> delegated.scard(key)); } @Override - public Boolean sismember(String key, String member) { + public boolean sismember(String key, String member) { String command = "sismember"; return instrumented(command, () -> delegated.sismember(key, member)); } @@ -488,7 +500,7 @@ public Set sinter(String... keys) { } @Override - public Long sinterstore(String dstkey, String... keys) { + public long sinterstore(String dstkey, String... keys) { String command = "sinterstore"; return instrumented(command, () -> delegated.sinterstore(dstkey, keys)); } @@ -500,7 +512,7 @@ public Set sunion(String... keys) { } @Override - public Long sunionstore(String dstkey, String... keys) { + public long sunionstore(String dstkey, String... keys) { String command = "sunionstore"; return instrumented(command, () -> delegated.sunionstore(dstkey, keys)); } @@ -512,7 +524,7 @@ public Set sdiff(String... keys) { } @Override - public Long sdiffstore(String dstkey, String... keys) { + public long sdiffstore(String dstkey, String... keys) { String command = "sdiffstore"; return instrumented(command, () -> delegated.sdiffstore(dstkey, keys)); } @@ -530,43 +542,43 @@ public List srandmember(String key, int count) { } @Override - public Long zadd(String key, double score, String member) { + public long zadd(String key, double score, String member) { String command = "zadd"; return instrumented(command, () -> delegated.zadd(key, score, member)); } @Override - public Long zadd(String key, double score, String member, ZAddParams params) { + public long zadd(String key, double score, String member, ZAddParams params) { String command = "zadd"; return instrumented(command, () -> delegated.zadd(key, score, member, params)); } @Override - public Long zadd(String key, Map scoreMembers) { + public long zadd(String key, Map scoreMembers) { String command = "zadd"; return instrumented(command, () -> delegated.zadd(key, scoreMembers)); } @Override - public Long zadd(String key, Map scoreMembers, ZAddParams params) { + public long zadd(String key, Map scoreMembers, ZAddParams params) { String command = "zadd"; return instrumented(command, () -> delegated.zadd(key, scoreMembers, params)); } @Override - public Set zrange(String key, long start, long end) { + public List zrange(String key, long start, long end) { String command = "zrange"; return instrumented(command, () -> delegated.zrange(key, start, end)); } @Override - public Long zrem(String key, String... members) { + public long zrem(String key, String... members) { String command = "zrem"; return instrumented(command, () -> delegated.zrem(key, members)); } @Override - public Double zincrby(String key, double score, String member) { + public double zincrby(String key, double score, String member) { String command = "zincrby"; return instrumented(command, () -> delegated.zincrby(key, score, member)); } @@ -590,25 +602,25 @@ public Long zrevrank(String key, String member) { } @Override - public Set zrevrange(String key, long start, long end) { + public List zrevrange(String key, long start, long end) { String command = "zrevrange"; return instrumented(command, () -> delegated.zrevrange(key, start, end)); } @Override - public Set zrangeWithScores(String key, long start, long end) { + public List zrangeWithScores(String key, long start, long end) { String command = "zrangeWithScores"; return instrumented(command, () -> delegated.zrangeWithScores(key, start, end)); } @Override - public Set zrevrangeWithScores(String key, long start, long end) { + public List zrevrangeWithScores(String key, long start, long end) { String command = "zrevrangeWithScores"; return instrumented(command, () -> delegated.zrevrangeWithScores(key, start, end)); } @Override - public Long zcard(String key) { + public long zcard(String key) { String command = "zcard"; return instrumented(command, () -> delegated.zcard(key)); } @@ -644,25 +656,13 @@ public List blpop(int timeout, String... keys) { } @Override - public List blpop(String... args) { - String command = "blpop"; - return instrumented(command, () -> delegated.blpop(args)); - } - - @Override - public List brpop(String... args) { - String command = "brpop"; - return instrumented(command, () -> delegated.brpop(args)); - } - - @Override - public Long sort(String key, SortingParams sortingParameters, String dstkey) { + public long sort(String key, SortingParams sortingParameters, String dstkey) { String command = "sort"; return instrumented(command, () -> delegated.sort(key, sortingParameters, dstkey)); } @Override - public Long sort(String key, String dstkey) { + public long sort(String key, String dstkey) { String command = "sort"; return instrumented(command, () -> delegated.sort(key, dstkey)); } @@ -674,55 +674,55 @@ public List brpop(int timeout, String... keys) { } @Override - public Long zcount(String key, double min, double max) { + public long zcount(String key, double min, double max) { String command = "zcount"; return instrumented(command, () -> delegated.zcount(key, min, max)); } @Override - public Long zcount(String key, String min, String max) { + public long zcount(String key, String min, String max) { String command = "zcount"; return instrumented(command, () -> delegated.zcount(key, min, max)); } @Override - public Set zrangeByScore(String key, double min, double max) { + public List zrangeByScore(String key, double min, double max) { String command = "zrangeByScore"; return instrumented(command, () -> delegated.zrangeByScore(key, min, max)); } @Override - public Set zrangeByScore(String key, String min, String max) { + public List zrangeByScore(String key, String min, String max) { String command = "zrangeByScore"; return instrumented(command, () -> delegated.zrangeByScore(key, min, max)); } @Override - public Set zrangeByScore(String key, double min, double max, int offset, int count) { + public List zrangeByScore(String key, double min, double max, int offset, int count) { String command = "zrangeByScore"; return instrumented(command, () -> delegated.zrangeByScore(key, min, max, offset, count)); } @Override - public Set zrangeByScore(String key, String min, String max, int offset, int count) { + public List zrangeByScore(String key, String min, String max, int offset, int count) { String command = "zrangeByScore"; return instrumented(command, () -> delegated.zrangeByScore(key, min, max, offset, count)); } @Override - public Set zrangeByScoreWithScores(String key, double min, double max) { + public List zrangeByScoreWithScores(String key, double min, double max) { String command = "zrangeByScoreWithScores"; return instrumented(command, () -> delegated.zrangeByScoreWithScores(key, min, max)); } @Override - public Set zrangeByScoreWithScores(String key, String min, String max) { + public List zrangeByScoreWithScores(String key, String min, String max) { String command = "zrangeByScoreWithScores"; return instrumented(command, () -> delegated.zrangeByScoreWithScores(key, min, max)); } @Override - public Set zrangeByScoreWithScores( + public List zrangeByScoreWithScores( String key, double min, double max, int offset, int count) { String command = "zrangeByScoreWithScores"; return instrumented( @@ -730,7 +730,7 @@ public Set zrangeByScoreWithScores( } @Override - public Set zrangeByScoreWithScores( + public List zrangeByScoreWithScores( String key, String min, String max, int offset, int count) { String command = "zrangeByScoreWithScores"; return instrumented( @@ -738,31 +738,31 @@ public Set zrangeByScoreWithScores( } @Override - public Set zrevrangeByScore(String key, double max, double min) { + public List zrevrangeByScore(String key, double max, double min) { String command = "zrevrangeByScore"; return instrumented(command, () -> delegated.zrevrangeByScore(key, max, min)); } @Override - public Set zrevrangeByScore(String key, String max, String min) { + public List zrevrangeByScore(String key, String max, String min) { String command = "zrevrangeByScore"; return instrumented(command, () -> delegated.zrevrangeByScore(key, max, min)); } @Override - public Set zrevrangeByScore(String key, double max, double min, int offset, int count) { + public List zrevrangeByScore(String key, double max, double min, int offset, int count) { String command = "zrevrangeByScore"; return instrumented(command, () -> delegated.zrevrangeByScore(key, max, min, offset, count)); } @Override - public Set zrevrangeByScoreWithScores(String key, double max, double min) { + public List zrevrangeByScoreWithScores(String key, double max, double min) { String command = "zrevrangeByScoreWithScores"; return instrumented(command, () -> delegated.zrevrangeByScoreWithScores(key, max, min)); } @Override - public Set zrevrangeByScoreWithScores( + public List zrevrangeByScoreWithScores( String key, double max, double min, int offset, int count) { String command = "zrevrangeByScoreWithScores"; return instrumented( @@ -770,7 +770,7 @@ public Set zrevrangeByScoreWithScores( } @Override - public Set zrevrangeByScoreWithScores( + public List zrevrangeByScoreWithScores( String key, String max, String min, int offset, int count) { String command = "zrevrangeByScoreWithScores"; return instrumented( @@ -778,115 +778,115 @@ public Set zrevrangeByScoreWithScores( } @Override - public Set zrevrangeByScore(String key, String max, String min, int offset, int count) { + public List zrevrangeByScore(String key, String max, String min, int offset, int count) { String command = "zrevrangeByScore"; return instrumented(command, () -> delegated.zrevrangeByScore(key, max, min, offset, count)); } @Override - public Set zrevrangeByScoreWithScores(String key, String max, String min) { + public List zrevrangeByScoreWithScores(String key, String max, String min) { String command = "zrevrangeByScoreWithScores"; return instrumented(command, () -> delegated.zrevrangeByScoreWithScores(key, max, min)); } @Override - public Long zremrangeByRank(String key, long start, long end) { + public long zremrangeByRank(String key, long start, long end) { String command = "zremrangeByRank"; return instrumented(command, () -> delegated.zremrangeByRank(key, start, end)); } @Override - public Long zremrangeByScore(String key, double start, double end) { + public long zremrangeByScore(String key, double start, double end) { String command = "zremrangeByScore"; return instrumented(command, () -> delegated.zremrangeByScore(key, start, end)); } @Override - public Long zremrangeByScore(String key, String start, String end) { + public long zremrangeByScore(String key, String start, String end) { String command = "zremrangeByScore"; return instrumented(command, () -> delegated.zremrangeByScore(key, start, end)); } @Override - public Long zunionstore(String dstkey, String... sets) { + public long zunionstore(String dstkey, String... sets) { String command = "zunionstore"; return instrumented(command, () -> delegated.zunionstore(dstkey, sets)); } @Override - public Long zunionstore(String dstkey, ZParams params, String... sets) { + public long zunionstore(String dstkey, ZParams params, String... sets) { String command = "zunionstore"; return instrumented(command, () -> delegated.zunionstore(dstkey, params, sets)); } @Override - public Long zinterstore(String dstkey, String... sets) { + public long zinterstore(String dstkey, String... sets) { String command = "zinterstore"; return instrumented(command, () -> delegated.zinterstore(dstkey, sets)); } @Override - public Long zinterstore(String dstkey, ZParams params, String... sets) { + public long zinterstore(String dstkey, ZParams params, String... sets) { String command = "zinterstore"; return instrumented(command, () -> delegated.zinterstore(dstkey, params, sets)); } @Override - public Long zlexcount(String key, String min, String max) { + public long zlexcount(String key, String min, String max) { String command = "zlexcount"; return instrumented(command, () -> delegated.zlexcount(key, min, max)); } @Override - public Set zrangeByLex(String key, String min, String max) { + public List zrangeByLex(String key, String min, String max) { String command = "zrangeByLex"; return instrumented(command, () -> delegated.zrangeByLex(key, min, max)); } @Override - public Set zrangeByLex(String key, String min, String max, int offset, int count) { + public List zrangeByLex(String key, String min, String max, int offset, int count) { String command = "zrangeByLex"; return instrumented(command, () -> delegated.zrangeByLex(key, min, max, offset, count)); } @Override - public Set zrevrangeByLex(String key, String max, String min) { + public List zrevrangeByLex(String key, String max, String min) { String command = "zrevrangeByLex"; return instrumented(command, () -> delegated.zrevrangeByLex(key, max, min)); } @Override - public Set zrevrangeByLex(String key, String max, String min, int offset, int count) { + public List zrevrangeByLex(String key, String max, String min, int offset, int count) { String command = "zrevrangeByLex"; return instrumented(command, () -> delegated.zrevrangeByLex(key, max, min, offset, count)); } @Override - public Long zremrangeByLex(String key, String min, String max) { + public long zremrangeByLex(String key, String min, String max) { String command = "zremrangeByLex"; return instrumented(command, () -> delegated.zremrangeByLex(key, min, max)); } @Override - public Long strlen(String key) { + public long strlen(String key) { String command = "strlen"; return instrumented(command, () -> delegated.strlen(key)); } @Override - public Long lpushx(String key, String... string) { + public long lpushx(String key, String... string) { String command = "lpushx"; return instrumented(command, payloadSize(string), () -> delegated.lpushx(key, string)); } @Override - public Long persist(String key) { + public long persist(String key) { String command = "persist"; return instrumented(command, () -> delegated.persist(key)); } @Override - public Long rpushx(String key, String... string) { + public long rpushx(String key, String... string) { String command = "rpushx"; return instrumented(command, payloadSize(string), () -> delegated.rpushx(key, string)); } @@ -898,7 +898,7 @@ public String echo(String string) { } @Override - public Long linsert( + public long linsert( final String key, final ListPosition where, final String pivot, final String value) { String command = "linsert"; return instrumented( @@ -912,25 +912,19 @@ public String brpoplpush(String source, String destination, int timeout) { } @Override - public Boolean setbit(String key, long offset, boolean value) { + public boolean setbit(String key, long offset, boolean value) { String command = "setbit"; return instrumented(command, () -> delegated.setbit(key, offset, value)); } @Override - public Boolean setbit(String key, long offset, String value) { - String command = "setbit"; - return instrumented(command, payloadSize(value), () -> delegated.setbit(key, offset, value)); - } - - @Override - public Boolean getbit(String key, long offset) { + public boolean getbit(String key, long offset) { String command = "getbit"; return instrumented(command, () -> delegated.getbit(key, offset)); } @Override - public Long setrange(String key, long offset, String value) { + public long setrange(String key, long offset, String value) { String command = "setrange"; return instrumented(command, payloadSize(value), () -> delegated.setrange(key, offset, value)); } @@ -942,13 +936,13 @@ public String getrange(String key, long startOffset, long endOffset) { } @Override - public Long bitpos(String key, boolean value) { + public long bitpos(String key, boolean value) { String command = "bitpos"; return instrumented(command, () -> delegated.bitpos(key, value)); } @Override - public Long bitpos(String key, boolean value, BitPosParams params) { + public long bitpos(String key, boolean value, BitPosParams params) { String command = "bitpos"; return instrumented(command, () -> delegated.bitpos(key, value, params)); } @@ -980,7 +974,7 @@ public void subscribe(JedisPubSub jedisPubSub, String... channels) { } @Override - public Long publish(String channel, String message) { + public long publish(String channel, String message) { String command = "publish"; return instrumented(command, payloadSize(message), () -> delegated.publish(channel, message)); } @@ -1071,19 +1065,19 @@ public Long objectIdletime(String string) { } @Override - public Long bitcount(String key) { + public long bitcount(String key) { String command = "bitcount"; return instrumented(command, () -> delegated.bitcount(key)); } @Override - public Long bitcount(String key, long start, long end) { + public long bitcount(String key, long start, long end) { String command = "bitcount"; return instrumented(command, () -> delegated.bitcount(key, start, end)); } @Override - public Long bitop(BitOP op, String destKey, String... srcKeys) { + public long bitop(BitOP op, String destKey, String... srcKeys) { String command = "bitop"; return instrumented(command, () -> delegated.bitop(op, destKey, srcKeys)); } @@ -1143,25 +1137,25 @@ public byte[] dump(String key) { } @Override - public String restore(String key, int ttl, byte[] serializedValue) { + public String restore(String key, long ttl, byte[] serializedValue) { String command = "restore"; return instrumented(command, () -> delegated.restore(key, ttl, serializedValue)); } @Override - public Long pexpire(String key, long milliseconds) { + public long pexpire(String key, long milliseconds) { String command = "pexpire"; return instrumented(command, () -> delegated.pexpire(key, milliseconds)); } @Override - public Long pexpireAt(String key, long millisecondsTimestamp) { + public long pexpireAt(String key, long millisecondsTimestamp) { String command = "pexpireAt"; return instrumented(command, () -> delegated.pexpireAt(key, millisecondsTimestamp)); } @Override - public Long pttl(String key) { + public long pttl(String key) { String command = "pttl"; return instrumented(command, () -> delegated.pttl(key)); } @@ -1258,7 +1252,7 @@ public String clusterMeet(String ip, int port) { } @Override - public String clusterReset(final ClusterReset resetType) { + public String clusterReset(final ClusterResetType resetType) { String command = "clusterReset"; return instrumented(command, () -> delegated.clusterReset(resetType)); } @@ -1324,13 +1318,13 @@ public String clusterFlushSlots() { } @Override - public Long clusterKeySlot(String key) { + public long clusterKeySlot(String key) { String command = "clusterKeySlot"; return instrumented(command, () -> delegated.clusterKeySlot(key)); } @Override - public Long clusterCountKeysInSlot(int slot) { + public long clusterCountKeysInSlot(int slot) { String command = "clusterCountKeysInSlot"; return instrumented(command, () -> delegated.clusterCountKeysInSlot(slot)); } @@ -1384,7 +1378,7 @@ public Long pubsubNumPat() { } @Override - public Map pubsubNumSub(String... channels) { + public Map pubsubNumSub(String... channels) { String command = "pubsubNumSub"; return instrumented(command, () -> delegated.pubsubNumSub(channels)); } @@ -1396,12 +1390,7 @@ public void close() { } @Override - public void setDataSource(JedisPoolAbstract jedisPool) { - delegated.setDataSource(jedisPool); - } - - @Override - public Long pfadd(String key, String... elements) { + public long pfadd(String key, String... elements) { String command = "pfadd"; return instrumented(command, payloadSize(elements), () -> delegated.pfadd(key, elements)); } @@ -1437,14 +1426,14 @@ public List brpop(int timeout, String key) { } @Override - public Long geoadd(String key, double longitude, double latitude, String member) { + public long geoadd(String key, double longitude, double latitude, String member) { String command = "geoadd"; return instrumented( command, payloadSize(member), () -> delegated.geoadd(key, longitude, latitude, member)); } @Override - public Long geoadd(String key, Map memberCoordinateMap) { + public long geoadd(String key, Map memberCoordinateMap) { String command = "geoadd"; return instrumented(command, () -> delegated.geoadd(key, memberCoordinateMap)); } @@ -1545,25 +1534,25 @@ public String quit() { } @Override - public Long exists(byte[]... keys) { + public long exists(byte[]... keys) { String command = "exists"; return instrumented(command, () -> delegated.exists(keys)); } @Override - public Boolean exists(byte[] key) { + public boolean exists(byte[] key) { String command = "exists"; return instrumented(command, () -> delegated.exists(key)); } @Override - public Long del(byte[]... keys) { + public long del(byte[]... keys) { String command = "del"; return instrumented(command, () -> delegated.del(keys)); } @Override - public Long del(byte[] key) { + public long del(byte[] key) { String command = "del"; return instrumented(command, () -> delegated.del(key)); } @@ -1599,31 +1588,31 @@ public String rename(byte[] oldkey, byte[] newkey) { } @Override - public Long renamenx(byte[] oldkey, byte[] newkey) { + public long renamenx(byte[] oldkey, byte[] newkey) { String command = "renamenx"; return instrumented(command, () -> delegated.renamenx(oldkey, newkey)); } @Override - public Long dbSize() { + public long dbSize() { String command = "dbSize"; return instrumented(command, () -> delegated.dbSize()); } @Override - public Long expire(byte[] key, int seconds) { + public long expire(byte[] key, long seconds) { String command = "expire"; return instrumented(command, () -> delegated.expire(key, seconds)); } @Override - public Long expireAt(byte[] key, long unixTime) { + public long expireAt(byte[] key, long unixTime) { String command = "expireAt"; return instrumented(command, () -> delegated.expireAt(key, unixTime)); } @Override - public Long ttl(byte[] key) { + public long ttl(byte[] key) { String command = "ttl"; return instrumented(command, () -> delegated.ttl(key)); } @@ -1635,7 +1624,7 @@ public String select(int index) { } @Override - public Long move(byte[] key, int dbIndex) { + public long move(byte[] key, int dbIndex) { String command = "move"; return instrumented(command, () -> delegated.move(key, dbIndex)); } @@ -1659,13 +1648,13 @@ public List mget(byte[]... keys) { } @Override - public Long setnx(byte[] key, byte[] value) { + public long setnx(byte[] key, byte[] value) { String command = "setnx"; return instrumented(command, payloadSize(value), () -> delegated.setnx(key, value)); } @Override - public String setex(byte[] key, int seconds, byte[] value) { + public String setex(byte[] key, long seconds, byte[] value) { String command = "setex"; return instrumented(command, payloadSize(value), () -> delegated.setex(key, seconds, value)); } @@ -1677,43 +1666,43 @@ public String mset(byte[]... keysvalues) { } @Override - public Long msetnx(byte[]... keysvalues) { + public long msetnx(byte[]... keysvalues) { String command = "msetnx"; return instrumented(command, payloadSize(keysvalues), () -> delegated.msetnx(keysvalues)); } @Override - public Long decrBy(byte[] key, long integer) { + public long decrBy(byte[] key, long integer) { String command = "decrBy"; return instrumented(command, () -> delegated.decrBy(key, integer)); } @Override - public Long decr(byte[] key) { + public long decr(byte[] key) { String command = "decr"; return instrumented(command, () -> delegated.decr(key)); } @Override - public Long incrBy(byte[] key, long integer) { + public long incrBy(byte[] key, long integer) { String command = "incrBy"; return instrumented(command, () -> delegated.incrBy(key, integer)); } @Override - public Double incrByFloat(byte[] key, double integer) { + public double incrByFloat(byte[] key, double integer) { String command = "incrByFloat"; return instrumented(command, () -> delegated.incrByFloat(key, integer)); } @Override - public Long incr(byte[] key) { + public long incr(byte[] key) { String command = "incr"; return instrumented(command, () -> delegated.incr(key)); } @Override - public Long append(byte[] key, byte[] value) { + public long append(byte[] key, byte[] value) { String command = "append"; return instrumented(command, payloadSize(value), () -> delegated.append(key, value)); } @@ -1725,7 +1714,7 @@ public byte[] substr(byte[] key, int start, int end) { } @Override - public Long hset(byte[] key, byte[] field, byte[] value) { + public long hset(byte[] key, byte[] field, byte[] value) { String command = "hset"; return instrumented(command, payloadSize(value), () -> delegated.hset(key, field, value)); } @@ -1737,7 +1726,7 @@ public byte[] hget(byte[] key, byte[] field) { } @Override - public Long hsetnx(byte[] key, byte[] field, byte[] value) { + public long hsetnx(byte[] key, byte[] field, byte[] value) { String command = "hsetnx"; return instrumented(command, payloadSize(value), () -> delegated.hsetnx(key, field, value)); } @@ -1755,31 +1744,31 @@ public List hmget(byte[] key, byte[]... fields) { } @Override - public Long hincrBy(byte[] key, byte[] field, long value) { + public long hincrBy(byte[] key, byte[] field, long value) { String command = "hincrBy"; return instrumented(command, () -> delegated.hincrBy(key, field, value)); } @Override - public Double hincrByFloat(byte[] key, byte[] field, double value) { + public double hincrByFloat(byte[] key, byte[] field, double value) { String command = "hincrByFloat"; return instrumented(command, () -> delegated.hincrByFloat(key, field, value)); } @Override - public Boolean hexists(byte[] key, byte[] field) { + public boolean hexists(byte[] key, byte[] field) { String command = "hexists"; return instrumented(command, () -> delegated.hexists(key, field)); } @Override - public Long hdel(byte[] key, byte[]... fields) { + public long hdel(byte[] key, byte[]... fields) { String command = "hdel"; return instrumented(command, () -> delegated.hdel(key, fields)); } @Override - public Long hlen(byte[] key) { + public long hlen(byte[] key) { String command = "hlen"; return instrumented(command, () -> delegated.hlen(key)); } @@ -1803,19 +1792,19 @@ public Map hgetAll(byte[] key) { } @Override - public Long rpush(byte[] key, byte[]... strings) { + public long rpush(byte[] key, byte[]... strings) { String command = "rpush"; return instrumented(command, payloadSize(strings), () -> delegated.rpush(key, strings)); } @Override - public Long lpush(byte[] key, byte[]... strings) { + public long lpush(byte[] key, byte[]... strings) { String command = "lpush"; return instrumented(command, payloadSize(strings), () -> delegated.lpush(key, strings)); } @Override - public Long llen(byte[] key) { + public long llen(byte[] key) { String command = "llen"; return instrumented(command, () -> delegated.llen(key)); } @@ -1845,7 +1834,7 @@ public String lset(byte[] key, long index, byte[] value) { } @Override - public Long lrem(byte[] key, long count, byte[] value) { + public long lrem(byte[] key, long count, byte[] value) { String command = "lrem"; return instrumented(command, payloadSize(value), () -> delegated.lrem(key, count, value)); } @@ -1869,7 +1858,7 @@ public byte[] rpoplpush(byte[] srckey, byte[] dstkey) { } @Override - public Long sadd(byte[] key, byte[]... members) { + public long sadd(byte[] key, byte[]... members) { String command = "sadd"; return instrumented(command, payloadSize(members), () -> delegated.sadd(key, members)); } @@ -1881,7 +1870,7 @@ public Set smembers(byte[] key) { } @Override - public Long srem(byte[] key, byte[]... member) { + public long srem(byte[] key, byte[]... member) { String command = "srem"; return instrumented(command, payloadSize(member), () -> delegated.srem(key, member)); } @@ -1899,19 +1888,19 @@ public Set spop(byte[] key, long count) { } @Override - public Long smove(byte[] srckey, byte[] dstkey, byte[] member) { + public long smove(byte[] srckey, byte[] dstkey, byte[] member) { String command = "smove"; return instrumented(command, () -> delegated.smove(srckey, dstkey, member)); } @Override - public Long scard(byte[] key) { + public long scard(byte[] key) { String command = "scard"; return instrumented(command, () -> delegated.scard(key)); } @Override - public Boolean sismember(byte[] key, byte[] member) { + public boolean sismember(byte[] key, byte[] member) { String command = "sismember"; return instrumented(command, () -> delegated.sismember(key, member)); } @@ -1923,7 +1912,7 @@ public Set sinter(byte[]... keys) { } @Override - public Long sinterstore(byte[] dstkey, byte[]... keys) { + public long sinterstore(byte[] dstkey, byte[]... keys) { String command = "sinterstore"; return instrumented(command, () -> delegated.sinterstore(dstkey, keys)); } @@ -1935,7 +1924,7 @@ public Set sunion(byte[]... keys) { } @Override - public Long sunionstore(byte[] dstkey, byte[]... keys) { + public long sunionstore(byte[] dstkey, byte[]... keys) { String command = "sunionstore"; return instrumented(command, () -> delegated.sunionstore(dstkey, keys)); } @@ -1947,7 +1936,7 @@ public Set sdiff(byte[]... keys) { } @Override - public Long sdiffstore(byte[] dstkey, byte[]... keys) { + public long sdiffstore(byte[] dstkey, byte[]... keys) { String command = "sdiffstore"; return instrumented(command, () -> delegated.sdiffstore(dstkey, keys)); } @@ -1965,43 +1954,43 @@ public List srandmember(byte[] key, int count) { } @Override - public Long zadd(byte[] key, double score, byte[] member) { + public long zadd(byte[] key, double score, byte[] member) { String command = "zadd"; return instrumented(command, () -> delegated.zadd(key, score, member)); } @Override - public Long zadd(byte[] key, double score, byte[] member, ZAddParams params) { + public long zadd(byte[] key, double score, byte[] member, ZAddParams params) { String command = "zadd"; return instrumented(command, () -> delegated.zadd(key, score, member, params)); } @Override - public Long zadd(byte[] key, Map scoreMembers) { + public long zadd(byte[] key, Map scoreMembers) { String command = "zadd"; return instrumented(command, () -> delegated.zadd(key, scoreMembers)); } @Override - public Long zadd(byte[] key, Map scoreMembers, ZAddParams params) { + public long zadd(byte[] key, Map scoreMembers, ZAddParams params) { String command = "zadd"; return instrumented(command, () -> delegated.zadd(key, scoreMembers, params)); } @Override - public Set zrange(byte[] key, long start, long end) { + public List zrange(byte[] key, long start, long end) { String command = "zrange"; return instrumented(command, () -> delegated.zrange(key, start, end)); } @Override - public Long zrem(byte[] key, byte[]... members) { + public long zrem(byte[] key, byte[]... members) { String command = "zrem"; return instrumented(command, () -> delegated.zrem(key, members)); } @Override - public Double zincrby(byte[] key, double score, byte[] member) { + public double zincrby(byte[] key, double score, byte[] member) { String command = "zincrby"; return instrumented(command, () -> delegated.zincrby(key, score, member)); } @@ -2025,25 +2014,25 @@ public Long zrevrank(byte[] key, byte[] member) { } @Override - public Set zrevrange(byte[] key, long start, long end) { + public List zrevrange(byte[] key, long start, long end) { String command = "zrevrange"; return instrumented(command, () -> delegated.zrevrange(key, start, end)); } @Override - public Set zrangeWithScores(byte[] key, long start, long end) { + public List zrangeWithScores(byte[] key, long start, long end) { String command = "zrangeWithScores"; return instrumented(command, () -> delegated.zrangeWithScores(key, start, end)); } @Override - public Set zrevrangeWithScores(byte[] key, long start, long end) { + public List zrevrangeWithScores(byte[] key, long start, long end) { String command = "zrevrangeWithScores"; return instrumented(command, () -> delegated.zrevrangeWithScores(key, start, end)); } @Override - public Long zcard(byte[] key) { + public long zcard(byte[] key) { String command = "zcard"; return instrumented(command, () -> delegated.zcard(key)); } @@ -2106,13 +2095,13 @@ public List blpop(int timeout, byte[]... keys) { } @Override - public Long sort(byte[] key, SortingParams sortingParameters, byte[] dstkey) { + public long sort(byte[] key, SortingParams sortingParameters, byte[] dstkey) { String command = "sort"; return instrumented(command, () -> delegated.sort(key, sortingParameters, dstkey)); } @Override - public Long sort(byte[] key, byte[] dstkey) { + public long sort(byte[] key, byte[] dstkey) { String command = "sort"; return instrumented(command, () -> delegated.sort(key, dstkey)); } @@ -2124,15 +2113,15 @@ public List brpop(int timeout, byte[]... keys) { } @Override - public List blpop(byte[]... args) { + public List blpop(double timeout, byte[]... args) { String command = "blpop"; - return instrumented(command, () -> delegated.blpop(args)); + return instrumented(command, () -> delegated.blpop(timeout, args)); } @Override - public List brpop(byte[]... args) { + public List brpop(double timeout, byte[]... args) { String command = "brpop"; - return instrumented(command, () -> delegated.brpop(args)); + return instrumented(command, () -> delegated.brpop(timeout, args)); } @Override @@ -2144,60 +2133,59 @@ public String auth(String password) { @Override public Pipeline pipelined() { String command = "pipelined"; - return instrumented( - command, () -> new InstrumentedPipeline(registry, delegated.pipelined(), poolName)); + return instrumented(command, () -> new InstrumentedPipeline(registry, delegated, poolName)); } @Override - public Long zcount(byte[] key, double min, double max) { + public long zcount(byte[] key, double min, double max) { String command = "zcount"; return instrumented(command, () -> delegated.zcount(key, min, max)); } @Override - public Long zcount(byte[] key, byte[] min, byte[] max) { + public long zcount(byte[] key, byte[] min, byte[] max) { String command = "zcount"; return instrumented(command, () -> delegated.zcount(key, min, max)); } @Override - public Set zrangeByScore(byte[] key, double min, double max) { + public List zrangeByScore(byte[] key, double min, double max) { String command = "zrangeByScore"; return instrumented(command, () -> delegated.zrangeByScore(key, min, max)); } @Override - public Set zrangeByScore(byte[] key, byte[] min, byte[] max) { + public List zrangeByScore(byte[] key, byte[] min, byte[] max) { String command = "zrangeByScore"; return instrumented(command, () -> delegated.zrangeByScore(key, min, max)); } @Override - public Set zrangeByScore(byte[] key, double min, double max, int offset, int count) { + public List zrangeByScore(byte[] key, double min, double max, int offset, int count) { String command = "zrangeByScore"; return instrumented(command, () -> delegated.zrangeByScore(key, min, max, offset, count)); } @Override - public Set zrangeByScore(byte[] key, byte[] min, byte[] max, int offset, int count) { + public List zrangeByScore(byte[] key, byte[] min, byte[] max, int offset, int count) { String command = "zrangeByScore"; return instrumented(command, () -> delegated.zrangeByScore(key, min, max, offset, count)); } @Override - public Set zrangeByScoreWithScores(byte[] key, double min, double max) { + public List zrangeByScoreWithScores(byte[] key, double min, double max) { String command = "zrangeByScoreWithScores"; return instrumented(command, () -> delegated.zrangeByScoreWithScores(key, min, max)); } @Override - public Set zrangeByScoreWithScores(byte[] key, byte[] min, byte[] max) { + public List zrangeByScoreWithScores(byte[] key, byte[] min, byte[] max) { String command = "zrangeByScoreWithScores"; return instrumented(command, () -> delegated.zrangeByScoreWithScores(key, min, max)); } @Override - public Set zrangeByScoreWithScores( + public List zrangeByScoreWithScores( byte[] key, double min, double max, int offset, int count) { String command = "zrangeByScoreWithScores"; return instrumented( @@ -2205,7 +2193,7 @@ public Set zrangeByScoreWithScores( } @Override - public Set zrangeByScoreWithScores( + public List zrangeByScoreWithScores( byte[] key, byte[] min, byte[] max, int offset, int count) { String command = "zrangeByScoreWithScores"; return instrumented( @@ -2213,37 +2201,37 @@ public Set zrangeByScoreWithScores( } @Override - public Set zrevrangeByScore(byte[] key, double max, double min) { + public List zrevrangeByScore(byte[] key, double max, double min) { String command = "zrevrangeByScore"; return instrumented(command, () -> delegated.zrevrangeByScore(key, max, min)); } @Override - public Set zrevrangeByScore(byte[] key, byte[] max, byte[] min) { + public List zrevrangeByScore(byte[] key, byte[] max, byte[] min) { String command = "zrevrangeByScore"; return instrumented(command, () -> delegated.zrevrangeByScore(key, max, min)); } @Override - public Set zrevrangeByScore(byte[] key, double max, double min, int offset, int count) { + public List zrevrangeByScore(byte[] key, double max, double min, int offset, int count) { String command = "zrevrangeByScore"; return instrumented(command, () -> delegated.zrevrangeByScore(key, max, min, offset, count)); } @Override - public Set zrevrangeByScore(byte[] key, byte[] max, byte[] min, int offset, int count) { + public List zrevrangeByScore(byte[] key, byte[] max, byte[] min, int offset, int count) { String command = "zrevrangeByScore"; return instrumented(command, () -> delegated.zrevrangeByScore(key, max, min, offset, count)); } @Override - public Set zrevrangeByScoreWithScores(byte[] key, double max, double min) { + public List zrevrangeByScoreWithScores(byte[] key, double max, double min) { String command = "zrevrangeByScoreWithScores"; return instrumented(command, () -> delegated.zrevrangeByScoreWithScores(key, max, min)); } @Override - public Set zrevrangeByScoreWithScores( + public List zrevrangeByScoreWithScores( byte[] key, double max, double min, int offset, int count) { String command = "zrevrangeByScoreWithScores"; return instrumented( @@ -2251,13 +2239,13 @@ public Set zrevrangeByScoreWithScores( } @Override - public Set zrevrangeByScoreWithScores(byte[] key, byte[] max, byte[] min) { + public List zrevrangeByScoreWithScores(byte[] key, byte[] max, byte[] min) { String command = "zrevrangeByScoreWithScores"; return instrumented(command, () -> delegated.zrevrangeByScoreWithScores(key, max, min)); } @Override - public Set zrevrangeByScoreWithScores( + public List zrevrangeByScoreWithScores( byte[] key, byte[] max, byte[] min, int offset, int count) { String command = "zrevrangeByScoreWithScores"; return instrumented( @@ -2265,79 +2253,79 @@ public Set zrevrangeByScoreWithScores( } @Override - public Long zremrangeByRank(byte[] key, long start, long end) { + public long zremrangeByRank(byte[] key, long start, long end) { String command = "zremrangeByRank"; return instrumented(command, () -> delegated.zremrangeByRank(key, start, end)); } @Override - public Long zremrangeByScore(byte[] key, double start, double end) { + public long zremrangeByScore(byte[] key, double start, double end) { String command = "zremrangeByScore"; return instrumented(command, () -> delegated.zremrangeByScore(key, start, end)); } @Override - public Long zremrangeByScore(byte[] key, byte[] start, byte[] end) { + public long zremrangeByScore(byte[] key, byte[] start, byte[] end) { String command = "zremrangeByScore"; return instrumented(command, () -> delegated.zremrangeByScore(key, start, end)); } @Override - public Long zunionstore(byte[] dstkey, byte[]... sets) { + public long zunionstore(byte[] dstkey, byte[]... sets) { String command = "zunionstore"; return instrumented(command, () -> delegated.zunionstore(dstkey, sets)); } @Override - public Long zunionstore(byte[] dstkey, ZParams params, byte[]... sets) { + public long zunionstore(byte[] dstkey, ZParams params, byte[]... sets) { String command = "zunionstore"; return instrumented(command, () -> delegated.zunionstore(dstkey, params, sets)); } @Override - public Long zinterstore(byte[] dstkey, byte[]... sets) { + public long zinterstore(byte[] dstkey, byte[]... sets) { String command = "zinterstore"; return instrumented(command, () -> delegated.zinterstore(dstkey, sets)); } @Override - public Long zinterstore(byte[] dstkey, ZParams params, byte[]... sets) { + public long zinterstore(byte[] dstkey, ZParams params, byte[]... sets) { String command = "zinterstore"; return instrumented(command, () -> delegated.zinterstore(dstkey, params, sets)); } @Override - public Long zlexcount(byte[] key, byte[] min, byte[] max) { + public long zlexcount(byte[] key, byte[] min, byte[] max) { String command = "zlexcount"; return instrumented(command, () -> delegated.zlexcount(key, min, max)); } @Override - public Set zrangeByLex(byte[] key, byte[] min, byte[] max) { + public List zrangeByLex(byte[] key, byte[] min, byte[] max) { String command = "zrangeByLex"; return instrumented(command, () -> delegated.zrangeByLex(key, min, max)); } @Override - public Set zrangeByLex(byte[] key, byte[] min, byte[] max, int offset, int count) { + public List zrangeByLex(byte[] key, byte[] min, byte[] max, int offset, int count) { String command = "zrangeByLex"; return instrumented(command, () -> delegated.zrangeByLex(key, min, max, offset, count)); } @Override - public Set zrevrangeByLex(byte[] key, byte[] max, byte[] min) { + public List zrevrangeByLex(byte[] key, byte[] max, byte[] min) { String command = "zrevrangeByLex"; return instrumented(command, () -> delegated.zrevrangeByLex(key, max, min)); } @Override - public Set zrevrangeByLex(byte[] key, byte[] max, byte[] min, int offset, int count) { + public List zrevrangeByLex(byte[] key, byte[] max, byte[] min, int offset, int count) { String command = "zrevrangeByLex"; return instrumented(command, () -> delegated.zrevrangeByLex(key, max, min, offset, count)); } @Override - public Long zremrangeByLex(byte[] key, byte[] min, byte[] max) { + public long zremrangeByLex(byte[] key, byte[] min, byte[] max) { String command = "zremrangeByLex"; return instrumented(command, () -> delegated.zremrangeByLex(key, min, max)); } @@ -2361,15 +2349,15 @@ public String bgrewriteaof() { } @Override - public Long lastsave() { + public long lastsave() { String command = "lastsave"; return instrumented(command, () -> delegated.lastsave()); } @Override - public String shutdown() { + public void shutdown() throws JedisException { String command = "shutdown"; - return instrumented(command, () -> delegated.shutdown()); + instrumented(command, () -> delegated.shutdown()); } @Override @@ -2414,7 +2402,7 @@ public String configResetStat() { } @Override - public byte[] configSet(byte[] parameter, byte[] value) { + public String configSet(byte[] parameter, byte[] value) { String command = "configSet"; return instrumented(command, () -> delegated.configSet(parameter, value)); } @@ -2426,30 +2414,25 @@ public boolean isConnected() { } @Override - public Long strlen(byte[] key) { + public long strlen(byte[] key) { String command = "strlen"; return instrumented(command, () -> delegated.strlen(key)); } @Override - public void sync() { - delegated.sync(); - } - - @Override - public Long lpushx(byte[] key, byte[]... string) { + public long lpushx(byte[] key, byte[]... string) { String command = "lpushx"; return instrumented(command, payloadSize(string), () -> delegated.lpushx(key, string)); } @Override - public Long persist(byte[] key) { + public long persist(byte[] key) { String command = "persist"; return instrumented(command, () -> delegated.persist(key)); } @Override - public Long rpushx(byte[] key, byte[]... string) { + public long rpushx(byte[] key, byte[]... string) { String command = "rpushx"; return instrumented(command, payloadSize(string), () -> delegated.rpushx(key, string)); } @@ -2461,7 +2444,7 @@ public byte[] echo(byte[] string) { } @Override - public Long linsert( + public long linsert( final byte[] key, final ListPosition where, final byte[] pivot, final byte[] value) { String command = "linsert"; return instrumented( @@ -2469,15 +2452,9 @@ public Long linsert( } @Override - public String debug(DebugParams params) { - String command = "debug"; - return instrumented(command, () -> delegated.debug(params)); - } - - @Override - public Client getClient() { + public Connection getClient() { String command = "getClient"; - return instrumented(command, () -> delegated.getClient()); + return instrumented(command, () -> delegated.getConnection()); } @Override @@ -2487,37 +2464,31 @@ public byte[] brpoplpush(byte[] source, byte[] destination, int timeout) { } @Override - public Boolean setbit(byte[] key, long offset, boolean value) { + public boolean setbit(byte[] key, long offset, boolean value) { String command = "setbit"; return instrumented(command, () -> delegated.setbit(key, offset, value)); } @Override - public Boolean setbit(byte[] key, long offset, byte[] value) { - String command = "setbit"; - return instrumented(command, payloadSize(value), () -> delegated.setbit(key, offset, value)); - } - - @Override - public Boolean getbit(byte[] key, long offset) { + public boolean getbit(byte[] key, long offset) { String command = "getbit"; return instrumented(command, () -> delegated.getbit(key, offset)); } @Override - public Long bitpos(byte[] key, boolean value) { + public long bitpos(byte[] key, boolean value) { String command = "bitpos"; return instrumented(command, () -> delegated.bitpos(key, value)); } @Override - public Long bitpos(byte[] key, boolean value, BitPosParams params) { + public long bitpos(byte[] key, boolean value, BitPosParams params) { String command = "bitpos"; return instrumented(command, () -> delegated.bitpos(key, value, params)); } @Override - public Long setrange(byte[] key, long offset, byte[] value) { + public long setrange(byte[] key, long offset, byte[] value) { String command = "setrange"; return instrumented(command, payloadSize(value), () -> delegated.setrange(key, offset, value)); } @@ -2529,7 +2500,7 @@ public byte[] getrange(byte[] key, long startOffset, long endOffset) { } @Override - public Long publish(byte[] channel, byte[] message) { + public long publish(byte[] channel, byte[] message) { String command = "publish"; return instrumented(command, payloadSize(message), () -> delegated.publish(channel, message)); } @@ -2557,15 +2528,6 @@ public Object eval(byte[] script, List keys, List args) { command, payloadSize(script) + payloadSize(args), () -> delegated.eval(script, keys, args)); } - @Override - public Object eval(byte[] script, byte[] keyCount, byte[]... params) { - String command = "eval"; - return instrumented( - command, - payloadSize(script) + payloadSize(params), - () -> delegated.eval(script, keyCount, params)); - } - @Override public Object eval(byte[] script, int keyCount, byte[]... params) { String command = "eval"; @@ -2607,13 +2569,13 @@ public String scriptFlush() { } @Override - public Long scriptExists(byte[] sha1) { + public Boolean scriptExists(byte[] sha1) { String command = "scriptExists"; return instrumented(command, () -> delegated.scriptExists(sha1)); } @Override - public List scriptExists(byte[]... sha1) { + public List scriptExists(byte[]... sha1) { String command = "scriptExists"; return instrumented(command, () -> delegated.scriptExists(sha1)); } @@ -2637,7 +2599,7 @@ public String slowlogReset() { } @Override - public Long slowlogLen() { + public long slowlogLen() { String command = "slowlogLen"; return instrumented(command, () -> delegated.slowlogLen()); } @@ -2673,19 +2635,19 @@ public Long objectIdletime(byte[] key) { } @Override - public Long bitcount(byte[] key) { + public long bitcount(byte[] key) { String command = "bitcount"; return instrumented(command, () -> delegated.bitcount(key)); } @Override - public Long bitcount(byte[] key, long start, long end) { + public long bitcount(byte[] key, long start, long end) { String command = "bitcount"; return instrumented(command, () -> delegated.bitcount(key, start, end)); } @Override - public Long bitop(BitOP op, byte[] destKey, byte[]... srcKeys) { + public long bitop(BitOP op, byte[] destKey, byte[]... srcKeys) { String command = "bitop"; return instrumented(command, () -> delegated.bitop(op, destKey, srcKeys)); } @@ -2697,25 +2659,25 @@ public byte[] dump(byte[] key) { } @Override - public String restore(byte[] key, int ttl, byte[] serializedValue) { + public String restore(byte[] key, long ttl, byte[] serializedValue) { String command = "restore"; return instrumented(command, () -> delegated.restore(key, ttl, serializedValue)); } @Override - public Long pexpire(byte[] key, long milliseconds) { + public long pexpire(byte[] key, long milliseconds) { String command = "pexpire"; return instrumented(command, () -> delegated.pexpire(key, milliseconds)); } @Override - public Long pexpireAt(byte[] key, long millisecondsTimestamp) { + public long pexpireAt(byte[] key, long millisecondsTimestamp) { String command = "pexpireAt"; return instrumented(command, () -> delegated.pexpireAt(key, millisecondsTimestamp)); } @Override - public Long pttl(byte[] key) { + public long pttl(byte[] key) { String command = "pttl"; return instrumented(command, () -> delegated.pttl(key)); } @@ -2758,13 +2720,13 @@ public List time() { } @Override - public Long waitReplicas(int replicas, long timeout) { + public long waitReplicas(int replicas, long timeout) { String command = "waitReplicas"; return instrumented(command, () -> delegated.waitReplicas(replicas, timeout)); } @Override - public Long pfadd(byte[] key, byte[]... elements) { + public long pfadd(byte[] key, byte[]... elements) { String command = "pfadd"; return instrumented(command, payloadSize(elements), () -> delegated.pfadd(key, elements)); } @@ -2782,7 +2744,7 @@ public String pfmerge(byte[] destkey, byte[]... sourcekeys) { } @Override - public Long pfcount(byte[]... keys) { + public long pfcount(byte[]... keys) { String command = "pfcount"; return instrumented(command, () -> delegated.pfcount(keys)); } @@ -2836,13 +2798,13 @@ public ScanResult zscan(byte[] key, byte[] cursor, ScanParams params) { } @Override - public Long geoadd(byte[] key, double longitude, double latitude, byte[] member) { + public long geoadd(byte[] key, double longitude, double latitude, byte[] member) { String command = "geoadd"; return instrumented(command, () -> delegated.geoadd(key, longitude, latitude, member)); } @Override - public Long geoadd(byte[] key, Map memberCoordinateMap) { + public long geoadd(byte[] key, Map memberCoordinateMap) { String command = "geoadd"; return instrumented(command, () -> delegated.geoadd(key, memberCoordinateMap)); } diff --git a/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedisPool.java b/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedisPool.java index 79e27bfb5..72b31c5f3 100644 --- a/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedisPool.java +++ b/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedisPool.java @@ -16,9 +16,6 @@ package com.netflix.spinnaker.kork.jedis.telemetry; import com.netflix.spectator.api.Registry; -import java.lang.reflect.Field; -import java.util.Objects; -import org.apache.commons.lang3.reflect.FieldUtils; import org.apache.commons.pool2.impl.GenericObjectPool; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; @@ -29,8 +26,6 @@ public class InstrumentedJedisPool extends JedisPool { private final JedisPool delegated; private final String poolName; - private GenericObjectPool delegateInternalPool; - public InstrumentedJedisPool(Registry registry, JedisPool delegated) { this(registry, delegated, "unnamed"); } @@ -43,33 +38,25 @@ public InstrumentedJedisPool(Registry registry, JedisPool delegated, String pool @SuppressWarnings("unchecked") public GenericObjectPool getInternalPoolReference() { - if (delegateInternalPool == null) { - try { - Field f = FieldUtils.getField(delegated.getClass(), "internalPool", true); - if (Objects.isNull(f)) { - throw new IllegalStateException("Could not get reference to delegate's internal pool"); - } - delegateInternalPool = (GenericObjectPool) f.get(delegated); - } catch (IllegalAccessException e) { - throw new IllegalStateException("Could not get reference to delegate's internal pool", e); - } + if (delegated == null) { + throw new IllegalStateException("Could not get reference to delegate's internal pool"); } - return delegateInternalPool; + return delegated; } @Override public Jedis getResource() { - return new InstrumentedJedis(registry, delegated.getResource(), poolName); + return new InstrumentedJedis(registry, delegated.getResource(), poolName).unwrap(); } @Override - public void returnResourceObject(Jedis resource) { - super.returnResourceObject(unwrapResource(resource)); + public void returnResource(Jedis resource) { + super.returnResource(unwrapResource(resource)); } @Override - protected void returnBrokenResourceObject(Jedis resource) { - super.returnBrokenResourceObject(unwrapResource(resource)); + public void returnBrokenResource(Jedis resource) { + super.returnBrokenResource(unwrapResource(resource)); } @Override @@ -77,21 +64,11 @@ public void close() { delegated.close(); } - @Override - public boolean isClosed() { - return delegated.isClosed(); - } - @Override public void destroy() { delegated.destroy(); } - @Override - protected void closeInternalPool() { - // Explicitly not calling this; destroy and initPool are the only references to this method - } - @Override public int getNumActive() { return getInternalPoolReference().getNumActive(); @@ -107,16 +84,6 @@ public int getNumWaiters() { return getInternalPoolReference().getNumWaiters(); } - @Override - public long getMeanBorrowWaitTimeMillis() { - return getInternalPoolReference().getMeanBorrowWaitTimeMillis(); - } - - @Override - public long getMaxBorrowWaitTimeMillis() { - return getInternalPoolReference().getMaxBorrowWaitTimeMillis(); - } - @Override public void addObjects(int count) { delegated.addObjects(count); diff --git a/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java b/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java index 4fdcbb457..a451aa1d9 100644 --- a/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java +++ b/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedPipeline.java @@ -26,10 +26,17 @@ import java.util.Set; import java.util.concurrent.Callable; import redis.clients.jedis.*; +import redis.clients.jedis.args.BitOP; +import redis.clients.jedis.args.GeoUnit; +import redis.clients.jedis.params.BitPosParams; import redis.clients.jedis.params.GeoRadiusParam; import redis.clients.jedis.params.SetParams; +import redis.clients.jedis.params.SortingParams; import redis.clients.jedis.params.ZAddParams; import redis.clients.jedis.params.ZIncrByParams; +import redis.clients.jedis.params.ZParams; +import redis.clients.jedis.resps.GeoRadiusResponse; +import redis.clients.jedis.resps.Tuple; public class InstrumentedPipeline extends Pipeline { @@ -37,13 +44,14 @@ public class InstrumentedPipeline extends Pipeline { private final Pipeline delegated; private final String poolName; - public InstrumentedPipeline(Registry registry, Pipeline delegated) { - this(registry, delegated, "unnamed"); + public InstrumentedPipeline(Registry registry, Jedis jedis) { + this(registry, jedis, "unnamed"); } - public InstrumentedPipeline(Registry registry, Pipeline delegated, String poolName) { + public InstrumentedPipeline(Registry registry, Jedis jedis, String poolName) { + super(jedis); this.registry = registry; - this.delegated = delegated; + this.delegated = jedis.pipelined(); this.poolName = poolName; } @@ -103,22 +111,6 @@ registry, payloadSizeId(registry, poolName, command, true)) } } - @Override - public void setClient(Client client) { - delegated.setClient(client); - } - - @Override - public void clear() { - delegated.clear(); - } - - @Override - public boolean isInMulti() { - String command = "isInMulti"; - return instrumented(command, () -> delegated.isInMulti()); - } - @Override public void sync() { delegated.sync(); @@ -127,25 +119,7 @@ public void sync() { @Override public List syncAndReturnAll() { String command = "syncAndReturnAll"; - return instrumented(command, () -> delegated.syncAndReturnAll()); - } - - @Override - public Response discard() { - String command = "discard"; - return instrumented(command, () -> delegated.discard()); - } - - @Override - public Response> exec() { - String command = "exec"; - return instrumented(command, () -> delegated.exec()); - } - - @Override - public Response multi() { - String command = "multi"; - return instrumented(command, () -> delegated.multi()); + return instrumented(command, delegated::syncAndReturnAll); } @Override @@ -154,24 +128,12 @@ public void close() { delegated.close(); } - @Override - public Response> brpop(String... args) { - String command = "brpop"; - return instrumented(command, () -> delegated.brpop(args)); - } - @Override public Response> brpop(int timeout, String... keys) { String command = "brpop"; return instrumented(command, () -> delegated.brpop(timeout, keys)); } - @Override - public Response> blpop(String... args) { - String command = "blpop"; - return instrumented(command, () -> delegated.blpop(args)); - } - @Override public Response> blpop(int timeout, String... keys) { String command = "blpop"; @@ -179,37 +141,25 @@ public Response> blpop(int timeout, String... keys) { } @Override - public Response> blpopMap(int timeout, String... keys) { - String command = "blpopMap"; - return instrumented(command, () -> delegated.blpopMap(timeout, keys)); - } - - @Override - public Response> brpop(byte[]... args) { + public Response> brpop(double timeout, byte[]... args) { String command = "brpop"; - return instrumented(command, () -> delegated.brpop(args)); + return instrumented(command, () -> delegated.brpop(timeout, args)); } @Override - public Response> brpop(int timeout, byte[]... keys) { + public Response> brpop(int timeout, byte[]... keys) { String command = "brpop"; return instrumented(command, () -> delegated.brpop(timeout, keys)); } @Override - public Response> brpopMap(int timeout, String... keys) { - String command = "brpopMap"; - return instrumented(command, () -> delegated.brpopMap(timeout, keys)); - } - - @Override - public Response> blpop(byte[]... args) { + public Response> blpop(double timeout, byte[]... args) { String command = "blpop"; - return instrumented(command, () -> delegated.blpop(args)); + return instrumented(command, () -> delegated.blpop(timeout, args)); } @Override - public Response> blpop(int timeout, byte[]... keys) { + public Response> blpop(int timeout, byte[]... keys) { String command = "blpop"; return instrumented(command, () -> delegated.blpop(timeout, keys)); } @@ -430,18 +380,6 @@ public Response sunionstore(byte[] dstkey, byte[]... keys) { return instrumented(command, () -> delegated.sunionstore(dstkey, keys)); } - @Override - public Response watch(String... keys) { - String command = "watch"; - return instrumented(command, () -> delegated.watch(keys)); - } - - @Override - public Response watch(byte[]... keys) { - String command = "watch"; - return instrumented(command, () -> delegated.watch(keys)); - } - @Override public Response zinterstore(String dstkey, String... sets) { String command = "zinterstore"; @@ -490,30 +428,6 @@ public Response zunionstore(byte[] dstkey, ZParams params, byte[]... sets) return instrumented(command, () -> delegated.zunionstore(dstkey, params, sets)); } - @Override - public Response bgrewriteaof() { - String command = "bgrewriteaof"; - return instrumented(command, () -> delegated.bgrewriteaof()); - } - - @Override - public Response bgsave() { - String command = "bgsave"; - return instrumented(command, () -> delegated.bgsave()); - } - - @Override - public Response> configGet(String pattern) { - String command = "configGet"; - return instrumented(command, () -> delegated.configGet(pattern)); - } - - @Override - public Response configSet(String parameter, String value) { - String command = "configSet"; - return instrumented(command, () -> delegated.configSet(parameter, value)); - } - @Override public Response brpoplpush(String source, String destination, int timeout) { String command = "brpoplpush"; @@ -526,24 +440,6 @@ public Response brpoplpush(byte[] source, byte[] destination, int timeou return instrumented(command, () -> delegated.brpoplpush(source, destination, timeout)); } - @Override - public Response configResetStat() { - String command = "configResetStat"; - return instrumented(command, () -> delegated.configResetStat()); - } - - @Override - public Response save() { - String command = "save"; - return instrumented(command, () -> delegated.save()); - } - - @Override - public Response lastsave() { - String command = "lastsave"; - return instrumented(command, () -> delegated.lastsave()); - } - @Override public Response publish(String channel, String message) { String command = "publish"; @@ -559,61 +455,19 @@ public Response publish(byte[] channel, byte[] message) { @Override public Response randomKey() { String command = "randomKey"; - return instrumented(command, () -> delegated.randomKey()); - } - - @Override - public Response randomKeyBinary() { - String command = "randomKeyBinary"; - return instrumented(command, () -> delegated.randomKeyBinary()); - } - - @Override - public Response flushDB() { - String command = "flushDB"; - return instrumented(command, () -> delegated.flushDB()); - } - - @Override - public Response flushAll() { - String command = "flushAll"; - return instrumented(command, () -> delegated.flushAll()); - } - - @Override - public Response info() { - String command = "info"; - return instrumented(command, () -> delegated.info()); - } - - @Override - public Response info(String section) { - String command = "info"; - return instrumented(command, () -> delegated.info(section)); + return instrumented(command, delegated::randomKey); } @Override public Response> time() { String command = "time"; - return instrumented(command, () -> delegated.time()); + return instrumented(command, delegated::time); } @Override public Response dbSize() { String command = "dbSize"; - return instrumented(command, () -> delegated.dbSize()); - } - - @Override - public Response shutdown() { - String command = "shutdown"; - return instrumented(command, () -> delegated.shutdown()); - } - - @Override - public Response ping() { - String command = "ping"; - return instrumented(command, () -> delegated.ping()); + return instrumented(command, delegated::dbSize); } @Override @@ -634,75 +488,12 @@ public Response bitop(BitOP op, String destKey, String... srcKeys) { return instrumented(command, () -> delegated.bitop(op, destKey, srcKeys)); } - @Override - public Response clusterNodes() { - String command = "clusterNodes"; - return instrumented(command, () -> delegated.clusterNodes()); - } - - @Override - public Response clusterMeet(String ip, int port) { - String command = "clusterMeet"; - return instrumented(command, () -> delegated.clusterMeet(ip, port)); - } - - @Override - public Response clusterAddSlots(int... slots) { - String command = "clusterAddSlots"; - return instrumented(command, () -> delegated.clusterAddSlots(slots)); - } - - @Override - public Response clusterDelSlots(int... slots) { - String command = "clusterDelSlots"; - return instrumented(command, () -> delegated.clusterDelSlots(slots)); - } - - @Override - public Response clusterInfo() { - String command = "clusterInfo"; - return instrumented(command, () -> delegated.clusterInfo()); - } - - @Override - public Response> clusterGetKeysInSlot(int slot, int count) { - String command = "clusterGetKeysInSlot"; - return instrumented(command, () -> delegated.clusterGetKeysInSlot(slot, count)); - } - - @Override - public Response clusterSetSlotNode(int slot, String nodeId) { - String command = "clusterSetSlotNode"; - return instrumented(command, () -> delegated.clusterSetSlotNode(slot, nodeId)); - } - - @Override - public Response clusterSetSlotMigrating(int slot, String nodeId) { - String command = "clusterSetSlotMigrating"; - return instrumented(command, () -> delegated.clusterSetSlotMigrating(slot, nodeId)); - } - - @Override - public Response clusterSetSlotImporting(int slot, String nodeId) { - String command = "clusterSetSlotImporting"; - return instrumented(command, () -> delegated.clusterSetSlotImporting(slot, nodeId)); - } - @Override public Response eval(byte[] script) { String command = "eval"; return instrumented(command, payloadSize(script), () -> delegated.eval(script)); } - @Override - public Response eval(byte[] script, byte[] keyCount, byte[]... params) { - String command = "eval"; - return instrumented( - command, - payloadSize(script) + payloadSize(params), - () -> delegated.eval(script, keyCount, params)); - } - @Override public Response eval(byte[] script, List keys, List args) { String command = "eval"; @@ -774,36 +565,6 @@ public Response append(byte[] key, byte[] value) { return instrumented(command, payloadSize(value), () -> delegated.append(key, value)); } - @Override - public Response> blpop(String key) { - String command = "blpop"; - return instrumented(command, () -> delegated.blpop(key)); - } - - @Override - public Response> brpop(String key) { - String command = "brpop"; - return instrumented(command, () -> delegated.brpop(key)); - } - - @Override - public Response> blpop(byte[] key) { - String command = "blpop"; - return instrumented(command, () -> delegated.blpop(key)); - } - - @Override - public Response> brpop(byte[] key) { - String command = "brpop"; - return instrumented(command, () -> delegated.brpop(key)); - } - - @Override - public Response decr(String key) { - String command = "decr"; - return instrumented(command, () -> delegated.decr(key)); - } - @Override public Response decr(byte[] key) { String command = "decr"; @@ -834,18 +595,6 @@ public Response del(byte[] key) { return instrumented(command, () -> delegated.del(key)); } - @Override - public Response echo(String string) { - String command = "echo"; - return instrumented(command, () -> delegated.echo(string)); - } - - @Override - public Response echo(byte[] string) { - String command = "echo"; - return instrumented(command, () -> delegated.echo(string)); - } - @Override public Response exists(String key) { String command = "exists"; @@ -859,13 +608,13 @@ public Response exists(byte[] key) { } @Override - public Response expire(String key, int seconds) { + public Response expire(String key, long seconds) { String command = "expire"; return instrumented(command, () -> delegated.expire(key, seconds)); } @Override - public Response expire(byte[] key, int seconds) { + public Response expire(byte[] key, long seconds) { String command = "expire"; return instrumented(command, () -> delegated.expire(key, seconds)); } @@ -1333,19 +1082,19 @@ public Response setbit(String key, long offset, boolean value) { } @Override - public Response setbit(byte[] key, long offset, byte[] value) { + public Response setbit(byte[] key, long offset, boolean value) { String command = "setbit"; return instrumented(command, () -> delegated.setbit(key, offset, value)); } @Override - public Response setex(String key, int seconds, String value) { + public Response setex(String key, long seconds, String value) { String command = "setex"; return instrumented(command, payloadSize(value), () -> delegated.setex(key, seconds, value)); } @Override - public Response setex(byte[] key, int seconds, byte[] value) { + public Response setex(byte[] key, long seconds, byte[] value) { String command = "setex"; return instrumented(command, payloadSize(value), () -> delegated.setex(key, seconds, value)); } @@ -1501,7 +1250,7 @@ public Response substr(String key, int start, int end) { } @Override - public Response substr(byte[] key, int start, int end) { + public Response substr(byte[] key, int start, int end) { String command = "substr"; return instrumented(command, () -> delegated.substr(key, start, end)); } @@ -1641,95 +1390,95 @@ public Response zincrby(byte[] key, double score, byte[] member, ZIncrBy } @Override - public Response> zrange(String key, long start, long end) { + public Response> zrange(String key, long start, long end) { String command = "zrange"; return instrumented(command, () -> delegated.zrange(key, start, end)); } @Override - public Response> zrange(byte[] key, long start, long end) { + public Response> zrange(byte[] key, long start, long end) { String command = "zrange"; return instrumented(command, () -> delegated.zrange(key, start, end)); } @Override - public Response> zrangeByScore(String key, double min, double max) { + public Response> zrangeByScore(String key, double min, double max) { String command = "zrangeByScore"; return instrumented(command, () -> delegated.zrangeByScore(key, min, max)); } @Override - public Response> zrangeByScore(byte[] key, double min, double max) { + public Response> zrangeByScore(byte[] key, double min, double max) { String command = "zrangeByScore"; return instrumented(command, () -> delegated.zrangeByScore(key, min, max)); } @Override - public Response> zrangeByScore(String key, String min, String max) { + public Response> zrangeByScore(String key, String min, String max) { String command = "zrangeByScore"; return instrumented(command, () -> delegated.zrangeByScore(key, min, max)); } @Override - public Response> zrangeByScore(byte[] key, byte[] min, byte[] max) { + public Response> zrangeByScore(byte[] key, byte[] min, byte[] max) { String command = "zrangeByScore"; return instrumented(command, () -> delegated.zrangeByScore(key, min, max)); } @Override - public Response> zrangeByScore( + public Response> zrangeByScore( String key, double min, double max, int offset, int count) { String command = "zrangeByScore"; return instrumented(command, () -> delegated.zrangeByScore(key, min, max, offset, count)); } @Override - public Response> zrangeByScore( + public Response> zrangeByScore( String key, String min, String max, int offset, int count) { String command = "zrangeByScore"; return instrumented(command, () -> delegated.zrangeByScore(key, min, max, offset, count)); } @Override - public Response> zrangeByScore( + public Response> zrangeByScore( byte[] key, double min, double max, int offset, int count) { String command = "zrangeByScore"; return instrumented(command, () -> delegated.zrangeByScore(key, min, max, offset, count)); } @Override - public Response> zrangeByScore( + public Response> zrangeByScore( byte[] key, byte[] min, byte[] max, int offset, int count) { String command = "zrangeByScore"; return instrumented(command, () -> delegated.zrangeByScore(key, min, max, offset, count)); } @Override - public Response> zrangeByScoreWithScores(String key, double min, double max) { + public Response> zrangeByScoreWithScores(String key, double min, double max) { String command = "zrangeByScoreWithScores"; return instrumented(command, () -> delegated.zrangeByScoreWithScores(key, min, max)); } @Override - public Response> zrangeByScoreWithScores(String key, String min, String max) { + public Response> zrangeByScoreWithScores(String key, String min, String max) { String command = "zrangeByScoreWithScores"; return instrumented(command, () -> delegated.zrangeByScoreWithScores(key, min, max)); } @Override - public Response> zrangeByScoreWithScores(byte[] key, double min, double max) { + public Response> zrangeByScoreWithScores(byte[] key, double min, double max) { String command = "zrangeByScoreWithScores"; return instrumented(command, () -> delegated.zrangeByScoreWithScores(key, min, max)); } @Override - public Response> zrangeByScoreWithScores(byte[] key, byte[] min, byte[] max) { + public Response> zrangeByScoreWithScores(byte[] key, byte[] min, byte[] max) { String command = "zrangeByScoreWithScores"; return instrumented(command, () -> delegated.zrangeByScoreWithScores(key, min, max)); } @Override - public Response> zrangeByScoreWithScores( + public Response> zrangeByScoreWithScores( String key, double min, double max, int offset, int count) { String command = "zrangeByScoreWithScores"; return instrumented( @@ -1737,7 +1486,7 @@ public Response> zrangeByScoreWithScores( } @Override - public Response> zrangeByScoreWithScores( + public Response> zrangeByScoreWithScores( String key, String min, String max, int offset, int count) { String command = "zrangeByScoreWithScores"; return instrumented( @@ -1745,7 +1494,7 @@ public Response> zrangeByScoreWithScores( } @Override - public Response> zrangeByScoreWithScores( + public Response> zrangeByScoreWithScores( byte[] key, double min, double max, int offset, int count) { String command = "zrangeByScoreWithScores"; return instrumented( @@ -1753,7 +1502,7 @@ public Response> zrangeByScoreWithScores( } @Override - public Response> zrangeByScoreWithScores( + public Response> zrangeByScoreWithScores( byte[] key, byte[] min, byte[] max, int offset, int count) { String command = "zrangeByScoreWithScores"; return instrumented( @@ -1761,83 +1510,83 @@ public Response> zrangeByScoreWithScores( } @Override - public Response> zrevrangeByScore(String key, double max, double min) { + public Response> zrevrangeByScore(String key, double max, double min) { String command = "zrevrangeByScore"; return instrumented(command, () -> delegated.zrevrangeByScore(key, max, min)); } @Override - public Response> zrevrangeByScore(byte[] key, double max, double min) { + public Response> zrevrangeByScore(byte[] key, double max, double min) { String command = "zrevrangeByScore"; return instrumented(command, () -> delegated.zrevrangeByScore(key, max, min)); } @Override - public Response> zrevrangeByScore(String key, String max, String min) { + public Response> zrevrangeByScore(String key, String max, String min) { String command = "zrevrangeByScore"; return instrumented(command, () -> delegated.zrevrangeByScore(key, max, min)); } @Override - public Response> zrevrangeByScore(byte[] key, byte[] max, byte[] min) { + public Response> zrevrangeByScore(byte[] key, byte[] max, byte[] min) { String command = "zrevrangeByScore"; return instrumented(command, () -> delegated.zrevrangeByScore(key, max, min)); } @Override - public Response> zrevrangeByScore( + public Response> zrevrangeByScore( String key, double max, double min, int offset, int count) { String command = "zrevrangeByScore"; return instrumented(command, () -> delegated.zrevrangeByScore(key, max, min, offset, count)); } @Override - public Response> zrevrangeByScore( + public Response> zrevrangeByScore( String key, String max, String min, int offset, int count) { String command = "zrevrangeByScore"; return instrumented(command, () -> delegated.zrevrangeByScore(key, max, min, offset, count)); } @Override - public Response> zrevrangeByScore( + public Response> zrevrangeByScore( byte[] key, double max, double min, int offset, int count) { String command = "zrevrangeByScore"; return instrumented(command, () -> delegated.zrevrangeByScore(key, max, min, offset, count)); } @Override - public Response> zrevrangeByScore( + public Response> zrevrangeByScore( byte[] key, byte[] max, byte[] min, int offset, int count) { String command = "zrevrangeByScore"; return instrumented(command, () -> delegated.zrevrangeByScore(key, max, min, offset, count)); } @Override - public Response> zrevrangeByScoreWithScores(String key, double max, double min) { + public Response> zrevrangeByScoreWithScores(String key, double max, double min) { String command = "zrevrangeByScoreWithScores"; return instrumented(command, () -> delegated.zrevrangeByScoreWithScores(key, max, min)); } @Override - public Response> zrevrangeByScoreWithScores(String key, String max, String min) { + public Response> zrevrangeByScoreWithScores(String key, String max, String min) { String command = "zrevrangeByScoreWithScores"; return instrumented(command, () -> delegated.zrevrangeByScoreWithScores(key, max, min)); } @Override - public Response> zrevrangeByScoreWithScores(byte[] key, double max, double min) { + public Response> zrevrangeByScoreWithScores(byte[] key, double max, double min) { String command = "zrevrangeByScoreWithScores"; return instrumented(command, () -> delegated.zrevrangeByScoreWithScores(key, max, min)); } @Override - public Response> zrevrangeByScoreWithScores(byte[] key, byte[] max, byte[] min) { + public Response> zrevrangeByScoreWithScores(byte[] key, byte[] max, byte[] min) { String command = "zrevrangeByScoreWithScores"; return instrumented(command, () -> delegated.zrevrangeByScoreWithScores(key, max, min)); } @Override - public Response> zrevrangeByScoreWithScores( + public Response> zrevrangeByScoreWithScores( String key, double max, double min, int offset, int count) { String command = "zrevrangeByScoreWithScores"; return instrumented( @@ -1845,7 +1594,7 @@ public Response> zrevrangeByScoreWithScores( } @Override - public Response> zrevrangeByScoreWithScores( + public Response> zrevrangeByScoreWithScores( String key, String max, String min, int offset, int count) { String command = "zrevrangeByScoreWithScores"; return instrumented( @@ -1853,7 +1602,7 @@ public Response> zrevrangeByScoreWithScores( } @Override - public Response> zrevrangeByScoreWithScores( + public Response> zrevrangeByScoreWithScores( byte[] key, double max, double min, int offset, int count) { String command = "zrevrangeByScoreWithScores"; return instrumented( @@ -1861,7 +1610,7 @@ public Response> zrevrangeByScoreWithScores( } @Override - public Response> zrevrangeByScoreWithScores( + public Response> zrevrangeByScoreWithScores( byte[] key, byte[] max, byte[] min, int offset, int count) { String command = "zrevrangeByScoreWithScores"; return instrumented( @@ -1869,13 +1618,13 @@ public Response> zrevrangeByScoreWithScores( } @Override - public Response> zrangeWithScores(String key, long start, long end) { + public Response> zrangeWithScores(String key, long start, long end) { String command = "zrangeWithScores"; return instrumented(command, () -> delegated.zrangeWithScores(key, start, end)); } @Override - public Response> zrangeWithScores(byte[] key, long start, long end) { + public Response> zrangeWithScores(byte[] key, long start, long end) { String command = "zrangeWithScores"; return instrumented(command, () -> delegated.zrangeWithScores(key, start, end)); } @@ -1941,25 +1690,25 @@ public Response zremrangeByScore(byte[] key, byte[] start, byte[] end) { } @Override - public Response> zrevrange(String key, long start, long end) { + public Response> zrevrange(String key, long start, long end) { String command = "zrevrange"; return instrumented(command, () -> delegated.zrevrange(key, start, end)); } @Override - public Response> zrevrange(byte[] key, long start, long end) { + public Response> zrevrange(byte[] key, long start, long end) { String command = "zrevrange"; return instrumented(command, () -> delegated.zrevrange(key, start, end)); } @Override - public Response> zrevrangeWithScores(String key, long start, long end) { + public Response> zrevrangeWithScores(String key, long start, long end) { String command = "zrevrangeWithScores"; return instrumented(command, () -> delegated.zrevrangeWithScores(key, start, end)); } @Override - public Response> zrevrangeWithScores(byte[] key, long start, long end) { + public Response> zrevrangeWithScores(byte[] key, long start, long end) { String command = "zrevrangeWithScores"; return instrumented(command, () -> delegated.zrevrangeWithScores(key, start, end)); } @@ -2001,52 +1750,52 @@ public Response zlexcount(String key, String min, String max) { } @Override - public Response> zrangeByLex(byte[] key, byte[] min, byte[] max) { + public Response> zrangeByLex(byte[] key, byte[] min, byte[] max) { String command = "zrangeByLex"; return instrumented(command, () -> delegated.zrangeByLex(key, min, max)); } @Override - public Response> zrangeByLex(String key, String min, String max) { + public Response> zrangeByLex(String key, String min, String max) { String command = "zrangeByLex"; return instrumented(command, () -> delegated.zrangeByLex(key, min, max)); } @Override - public Response> zrangeByLex( + public Response> zrangeByLex( byte[] key, byte[] min, byte[] max, int offset, int count) { String command = "zrangeByLex"; return instrumented(command, () -> delegated.zrangeByLex(key, min, max, offset, count)); } @Override - public Response> zrangeByLex( + public Response> zrangeByLex( String key, String min, String max, int offset, int count) { String command = "zrangeByLex"; return instrumented(command, () -> delegated.zrangeByLex(key, min, max, offset, count)); } @Override - public Response> zrevrangeByLex(byte[] key, byte[] max, byte[] min) { + public Response> zrevrangeByLex(byte[] key, byte[] max, byte[] min) { String command = "zrevrangeByLex"; return instrumented(command, () -> delegated.zrevrangeByLex(key, max, min)); } @Override - public Response> zrevrangeByLex(String key, String max, String min) { + public Response> zrevrangeByLex(String key, String max, String min) { String command = "zrevrangeByLex"; return instrumented(command, () -> delegated.zrevrangeByLex(key, max, min)); } @Override - public Response> zrevrangeByLex( + public Response> zrevrangeByLex( byte[] key, byte[] max, byte[] min, int offset, int count) { String command = "zrevrangeByLex"; return instrumented(command, () -> delegated.zrevrangeByLex(key, max, min, offset, count)); } @Override - public Response> zrevrangeByLex( + public Response> zrevrangeByLex( String key, String max, String min, int offset, int count) { String command = "zrevrangeByLex"; return instrumented(command, () -> delegated.zrevrangeByLex(key, max, min, offset, count)); @@ -2187,13 +1936,13 @@ public Response pttl(byte[] key) { } @Override - public Response restore(String key, int ttl, byte[] serializedValue) { + public Response restore(String key, long ttl, byte[] serializedValue) { String command = "restore"; return instrumented(command, () -> delegated.restore(key, ttl, serializedValue)); } @Override - public Response restore(byte[] key, int ttl, byte[] serializedValue) { + public Response restore(byte[] key, long ttl, byte[] serializedValue) { String command = "restore"; return instrumented(command, () -> delegated.restore(key, ttl, serializedValue)); } diff --git a/spinnaker-dependencies/spinnaker-dependencies.gradle b/spinnaker-dependencies/spinnaker-dependencies.gradle index eb07ea00d..b8afd7fc7 100644 --- a/spinnaker-dependencies/spinnaker-dependencies.gradle +++ b/spinnaker-dependencies/spinnaker-dependencies.gradle @@ -15,25 +15,23 @@ ext { groovy : "4.0.15", jsch : "0.1.54", jschAgentProxy : "0.0.9", - // spring boot 2.7.18 specifies logback 1.2.12. Pin to 1.2.13 to resolve + // spring boot 3.0.13 specifies logback 1.4.11. Pin to 1.2.13 to resolve // CVE-2023-6378 and CVE-2023-6481 until spring boot 3.1.7 which brings in // 1.4.14. See https://logback.qos.ch/news.html#1.3.12. logback : "1.2.13", protobuf : "3.25.2", - okhttp3 : "4.9.3", openapi : "1.8.0", - restassured : "5.2.1", // spring boot 2.7.18 brings rest-assured 4.5.1. It uses groovy 3. Keep until spring boot >=3.0.13 retrofit : "1.9.0", retrofit2 : "2.8.1", spectator : "1.0.6", spek : "1.1.5", spek2 : "2.0.9", - springBoot : "2.7.18", - springCloud : "2021.0.8", + springBoot : "3.0.13", + springCloud : "2022.0.5", swagger : "2.2.22", - // 2.7.18 brings in 9.0.83, which fixes all CVEs to date (20-feb-24). Continue to pin. - // See https://tomcat.apache.org/security-9.html for latest security fixes. - tomcat : "9.0.83" + // 3.0.13 brings in 10.1.16, which introduce CVEs. Continue to pin till >=3.2.12. + // See https://tomcat.apache.org/security-10.html for latest security fixes. + tomcat : "10.1.33" ] } @@ -54,12 +52,8 @@ dependencies { //kotlinVersion comes from gradle.properties since we have kotlin code in // this project and need to configure gradle plugins etc. api(platform("org.jetbrains.kotlin:kotlin-bom:$kotlinVersion")) - api(platform("org.junit:junit-bom:5.9.0")) // untill spring boot >= 3.0.0 api(platform("io.zipkin.brave:brave-bom:${versions.brave}")) - api(platform("org.apache.groovy:groovy-bom:${versions.groovy}")) // until upgrade of spring boot >= 3.0.13 - api(platform("org.springframework.boot:spring-boot-dependencies:${versions.springBoot}")) { - exclude group: "org.codehaus.groovy", module: "*" // until upgrade of spring boot >= 3.0.13 - } + api(platform("org.springframework.boot:spring-boot-dependencies:${versions.springBoot}")) api(platform("com.amazonaws:aws-java-sdk-bom:${versions.aws}")) api(platform("com.google.protobuf:protobuf-bom:${versions.protobuf}")) api(platform("com.google.cloud:libraries-bom:${versions.gcp}")) @@ -82,18 +76,6 @@ dependencies { api("ch.qos.logback:logback-access:${versions.logback}") { force = true } - api("io.rest-assured:xml-path:${versions.restassured}") { - force = true - } - api("io.rest-assured:json-path:${versions.restassured}") { - force = true - } - api("io.rest-assured:rest-assured:${versions.restassured}") { - force = true - } - api("io.rest-assured:rest-assured-common:${versions.restassured}") { - force = true - } api("com.amazonaws:aws-java-sdk:${versions.aws}") api("com.google.api-client:google-api-client:2.4.1") api("com.google.apis:google-api-services-admin-directory:directory_v1-rev20240429-2.0.0") @@ -132,11 +114,6 @@ dependencies { api("com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0") api("com.nhaarman:mockito-kotlin:1.6.0") api("com.ninja-squad:springmockk:2.0.3") - api("com.squareup.okhttp3:logging-interceptor:${versions.okhttp3}") - api("com.squareup.okhttp3:mockwebserver:${versions.okhttp3}") - api("com.squareup.okhttp3:okhttp-sse:${versions.okhttp3}") - api("com.squareup.okhttp3:okhttp-urlconnection:${versions.okhttp3}") - api("com.squareup.okhttp3:okhttp:${versions.okhttp3}") api("com.squareup.retrofit2:converter-jackson:${versions.retrofit2}") api("com.squareup.retrofit2:retrofit-mock:${versions.retrofit2}") api("com.squareup.retrofit2:retrofit:${versions.retrofit2}") @@ -157,7 +134,6 @@ dependencies { api("io.mockk:mockk:1.10.5") api("io.swagger.core.v3:swagger-annotations:${versions.swagger}") api("io.swagger.core.v3:swagger-core:${versions.swagger}") - api("javax.annotation:javax.annotation-api:1.3.2") api("javax.xml.bind:jaxb-api:2.3.1") api("net.logstash.logback:logstash-logback-encoder:4.11") api("org.apache.commons:commons-exec:1.3") From 828a55d47eeba7746f3d404b4a90c94b6c897e6b Mon Sep 17 00:00:00 2001 From: j-sandy <30489233+j-sandy@users.noreply.github.com> Date: Fri, 6 Dec 2024 21:46:02 +0530 Subject: [PATCH 02/13] refactor(dependency): replace javax with jakarta and HandlerInterceptorAdapter with HandlerInterceptor during upgrade of spring boot 3.0.x Spring Boot 3.0 has migrated from Java EE to Jakarta EE APIs for all dependencies. https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes#third-party-library-upgrades So, replacing the imports with `javax` to `jakarta`. Since `org.springframework.web.servlet.handler.HandlerInterceptorAdapter` has been deprecated in springframework 5.3.0. So, replacing it with `org.springframework.web.servlet.HandlerInterceptor`. https://github.com/spring-projects/spring-framework/pull/25147 https://github.com/terasolunaorg/terasoluna-gfw/issues/991 --- .../autoconfig/RemoteConfigSourceConfigured.java | 2 +- .../kork/metrics/SpectatorConfiguration.java | 2 +- kork-credentials-api/kork-credentials-api.gradle | 2 +- .../definition/AbstractCredentialsLoader.java | 2 +- kork-credentials/kork-credentials.gradle | 2 +- .../kork/archaius/ArchaiusAutoConfiguration.java | 2 +- .../kork/eureka/EurekaStatusSubscriber.java | 2 +- .../kork/jedis/lock/RedisLockManager.java | 4 ++-- kork-plugins-api/kork-plugins-api.gradle | 2 +- .../v2/scenarios/ComplexInjectionScenarioTest.kt | 2 +- .../v2/scenarios/ServiceInjectionScenarioTest.kt | 2 +- kork-pubsub-aws/kork-pubsub-aws.gradle | 2 +- .../kork/pubsub/aws/SNSPublisherProvider.java | 2 +- .../kork/pubsub/aws/SQSSubscriberProvider.java | 2 +- .../kork/pubsub/aws/config/AmazonPubsubConfig.java | 2 +- .../pubsub/aws/config/AmazonPubsubProperties.java | 4 ++-- .../SpinnakerRetrofitExceptionHandlers.java | 4 ++-- kork-sql/kork-sql.gradle | 2 +- .../spinnaker/kork/sql/config/SqlProperties.kt | 6 +++--- .../config/TransactionIsolationValidationTest.java | 8 ++++---- .../config/OkHttpMetricsInterceptorProperties.java | 2 +- .../filters/AuthenticatedRequestFilter.groovy | 14 +++++++------- .../config/AuthenticatedRequestConfiguration.java | 4 ++-- .../kork/web/exceptions/BaseExceptionHandlers.java | 4 ++-- .../web/exceptions/GenericExceptionHandlers.java | 4 ++-- .../kork/web/interceptors/MetricsInterceptor.java | 8 ++++---- .../exceptions/GenericExceptionHandlersSpec.groovy | 4 ++-- .../MetricsInterceptorMicrometerTest.java | 4 ++-- .../web/interceptors/MetricsInterceptorSpec.groovy | 4 ++-- 29 files changed, 52 insertions(+), 52 deletions(-) diff --git a/kork-cloud-config-server/src/main/java/com/netflix/spinnaker/kork/configserver/autoconfig/RemoteConfigSourceConfigured.java b/kork-cloud-config-server/src/main/java/com/netflix/spinnaker/kork/configserver/autoconfig/RemoteConfigSourceConfigured.java index 1238dc5cd..0d445f709 100644 --- a/kork-cloud-config-server/src/main/java/com/netflix/spinnaker/kork/configserver/autoconfig/RemoteConfigSourceConfigured.java +++ b/kork-cloud-config-server/src/main/java/com/netflix/spinnaker/kork/configserver/autoconfig/RemoteConfigSourceConfigured.java @@ -16,7 +16,7 @@ package com.netflix.spinnaker.kork.configserver.autoconfig; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.context.annotation.Condition; diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/metrics/SpectatorConfiguration.java b/kork-core/src/main/java/com/netflix/spinnaker/kork/metrics/SpectatorConfiguration.java index 73e8e342c..670d3e4f4 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/metrics/SpectatorConfiguration.java +++ b/kork-core/src/main/java/com/netflix/spinnaker/kork/metrics/SpectatorConfiguration.java @@ -22,7 +22,7 @@ import com.netflix.spectator.jvm.Jmx; import com.netflix.spectator.micrometer.MicrometerRegistry; import io.micrometer.core.instrument.MeterRegistry; -import javax.annotation.PreDestroy; +import jakarta.annotation.PreDestroy; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; diff --git a/kork-credentials-api/kork-credentials-api.gradle b/kork-credentials-api/kork-credentials-api.gradle index 83478be42..8f40b9d3e 100644 --- a/kork-credentials-api/kork-credentials-api.gradle +++ b/kork-credentials-api/kork-credentials-api.gradle @@ -22,7 +22,7 @@ dependencies { api project(":kork-plugins-api") implementation project(":kork-annotations") implementation project(":kork-exceptions") - implementation 'javax.annotation:javax.annotation-api' + implementation 'jakarta.annotation:jakarta.annotation-api' testRuntimeOnly "cglib:cglib-nodep" testRuntimeOnly "org.objenesis:objenesis" diff --git a/kork-credentials-api/src/main/java/com/netflix/spinnaker/credentials/definition/AbstractCredentialsLoader.java b/kork-credentials-api/src/main/java/com/netflix/spinnaker/credentials/definition/AbstractCredentialsLoader.java index 7d3d87b23..b883179b1 100644 --- a/kork-credentials-api/src/main/java/com/netflix/spinnaker/credentials/definition/AbstractCredentialsLoader.java +++ b/kork-credentials-api/src/main/java/com/netflix/spinnaker/credentials/definition/AbstractCredentialsLoader.java @@ -18,7 +18,7 @@ import com.netflix.spinnaker.credentials.Credentials; import com.netflix.spinnaker.credentials.CredentialsRepository; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; import lombok.Getter; public abstract class AbstractCredentialsLoader diff --git a/kork-credentials/kork-credentials.gradle b/kork-credentials/kork-credentials.gradle index 0e7a3458d..ca28f135a 100644 --- a/kork-credentials/kork-credentials.gradle +++ b/kork-credentials/kork-credentials.gradle @@ -24,7 +24,7 @@ dependencies { implementation 'org.apache.logging.log4j:log4j-api' implementation "org.springframework.boot:spring-boot" implementation 'org.springframework.boot:spring-boot-starter-json' - implementation 'javax.annotation:javax.annotation-api' + implementation 'jakarta.annotation:jakarta.annotation-api' implementation 'org.slf4j:slf4j-api' testRuntimeOnly "cglib:cglib-nodep" diff --git a/kork-eureka/src/main/java/com/netflix/spinnaker/kork/archaius/ArchaiusAutoConfiguration.java b/kork-eureka/src/main/java/com/netflix/spinnaker/kork/archaius/ArchaiusAutoConfiguration.java index 1a427a495..14e703daa 100644 --- a/kork-eureka/src/main/java/com/netflix/spinnaker/kork/archaius/ArchaiusAutoConfiguration.java +++ b/kork-eureka/src/main/java/com/netflix/spinnaker/kork/archaius/ArchaiusAutoConfiguration.java @@ -22,9 +22,9 @@ import com.netflix.config.DynamicConfiguration; import com.netflix.config.FixedDelayPollingScheduler; import com.netflix.spinnaker.kork.eureka.EurekaAutoConfiguration; +import jakarta.annotation.PreDestroy; import java.util.*; import java.util.concurrent.TimeUnit; -import javax.annotation.PreDestroy; import org.apache.commons.configuration.AbstractConfiguration; import org.apache.commons.configuration.CompositeConfiguration; import org.springframework.beans.BeansException; diff --git a/kork-eureka/src/main/java/com/netflix/spinnaker/kork/eureka/EurekaStatusSubscriber.java b/kork-eureka/src/main/java/com/netflix/spinnaker/kork/eureka/EurekaStatusSubscriber.java index 5502d1dac..f2f3f7c1c 100644 --- a/kork-eureka/src/main/java/com/netflix/spinnaker/kork/eureka/EurekaStatusSubscriber.java +++ b/kork-eureka/src/main/java/com/netflix/spinnaker/kork/eureka/EurekaStatusSubscriber.java @@ -28,8 +28,8 @@ import com.netflix.spinnaker.kork.discovery.InstanceStatus; import com.netflix.spinnaker.kork.discovery.RemoteStatusChangedEvent; import com.netflix.spinnaker.kork.exceptions.SystemException; +import jakarta.annotation.PreDestroy; import java.util.Objects; -import javax.annotation.PreDestroy; import org.springframework.context.ApplicationEventPublisher; public class EurekaStatusSubscriber implements DiscoveryStatusPublisher { diff --git a/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/lock/RedisLockManager.java b/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/lock/RedisLockManager.java index bd00586b8..d0fca3d3a 100644 --- a/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/lock/RedisLockManager.java +++ b/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/lock/RedisLockManager.java @@ -25,6 +25,8 @@ import com.netflix.spectator.api.patterns.LongTaskTimer; import com.netflix.spinnaker.kork.jedis.RedisClientDelegate; import com.netflix.spinnaker.kork.lock.RefreshableLockManager; +import jakarta.annotation.Nonnull; +import jakarta.annotation.PreDestroy; import java.io.IOException; import java.time.Clock; import java.time.Duration; @@ -34,8 +36,6 @@ import java.util.Optional; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; -import javax.annotation.Nonnull; -import javax.annotation.PreDestroy; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/kork-plugins-api/kork-plugins-api.gradle b/kork-plugins-api/kork-plugins-api.gradle index d048a871a..9fcfd65fe 100644 --- a/kork-plugins-api/kork-plugins-api.gradle +++ b/kork-plugins-api/kork-plugins-api.gradle @@ -21,7 +21,7 @@ dependencies { api(platform(project(":spinnaker-dependencies"))) api "org.slf4j:slf4j-api" - api "javax.annotation:javax.annotation-api" + api "jakarta.annotation:jakarta.annotation-api" api project(":kork-annotations") api "org.pf4j:pf4j" diff --git a/kork-plugins/src/test/kotlin/com/netflix/spinnaker/kork/plugins/v2/scenarios/ComplexInjectionScenarioTest.kt b/kork-plugins/src/test/kotlin/com/netflix/spinnaker/kork/plugins/v2/scenarios/ComplexInjectionScenarioTest.kt index 62be19eb9..c9c20b285 100644 --- a/kork-plugins/src/test/kotlin/com/netflix/spinnaker/kork/plugins/v2/scenarios/ComplexInjectionScenarioTest.kt +++ b/kork-plugins/src/test/kotlin/com/netflix/spinnaker/kork/plugins/v2/scenarios/ComplexInjectionScenarioTest.kt @@ -35,7 +35,7 @@ import strikt.assertions.isA import strikt.assertions.isEqualTo import strikt.assertions.isNotEmpty import strikt.assertions.isSuccess -import javax.annotation.PostConstruct +import jakarta.annotation.PostConstruct /** * Demonstrates that a plugin that injects a service bean can also be injected into a different service bean. diff --git a/kork-plugins/src/test/kotlin/com/netflix/spinnaker/kork/plugins/v2/scenarios/ServiceInjectionScenarioTest.kt b/kork-plugins/src/test/kotlin/com/netflix/spinnaker/kork/plugins/v2/scenarios/ServiceInjectionScenarioTest.kt index e33739366..1e0441d75 100644 --- a/kork-plugins/src/test/kotlin/com/netflix/spinnaker/kork/plugins/v2/scenarios/ServiceInjectionScenarioTest.kt +++ b/kork-plugins/src/test/kotlin/com/netflix/spinnaker/kork/plugins/v2/scenarios/ServiceInjectionScenarioTest.kt @@ -31,7 +31,7 @@ import org.springframework.context.annotation.Bean import strikt.api.expectCatching import strikt.assertions.isEqualTo import strikt.assertions.isSuccess -import javax.annotation.PostConstruct +import jakarta.annotation.PostConstruct /** * Tests that service beans can inject beans provided by plugins. diff --git a/kork-pubsub-aws/kork-pubsub-aws.gradle b/kork-pubsub-aws/kork-pubsub-aws.gradle index c403e545e..fb3784a35 100644 --- a/kork-pubsub-aws/kork-pubsub-aws.gradle +++ b/kork-pubsub-aws/kork-pubsub-aws.gradle @@ -26,7 +26,7 @@ dependencies { implementation project(':kork-pubsub') implementation 'org.springframework.boot:spring-boot-autoconfigure' - implementation 'javax.validation:validation-api' + implementation 'jakarta.validation:jakarta.validation-api' api 'com.amazonaws:aws-java-sdk-sns' api 'com.amazonaws:aws-java-sdk-sqs' diff --git a/kork-pubsub-aws/src/main/java/com/netflix/spinnaker/kork/pubsub/aws/SNSPublisherProvider.java b/kork-pubsub-aws/src/main/java/com/netflix/spinnaker/kork/pubsub/aws/SNSPublisherProvider.java index 3bded29b4..2352ce249 100644 --- a/kork-pubsub-aws/src/main/java/com/netflix/spinnaker/kork/pubsub/aws/SNSPublisherProvider.java +++ b/kork-pubsub-aws/src/main/java/com/netflix/spinnaker/kork/pubsub/aws/SNSPublisherProvider.java @@ -28,10 +28,10 @@ import com.netflix.spinnaker.kork.pubsub.PubsubPublishers; import com.netflix.spinnaker.kork.pubsub.aws.config.AmazonPubsubProperties; import com.netflix.spinnaker.kork.pubsub.model.PubsubPublisher; +import jakarta.annotation.PostConstruct; import java.util.ArrayList; import java.util.List; import java.util.function.Supplier; -import javax.annotation.PostConstruct; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/kork-pubsub-aws/src/main/java/com/netflix/spinnaker/kork/pubsub/aws/SQSSubscriberProvider.java b/kork-pubsub-aws/src/main/java/com/netflix/spinnaker/kork/pubsub/aws/SQSSubscriberProvider.java index ee0e924ed..aa4515bf2 100644 --- a/kork-pubsub-aws/src/main/java/com/netflix/spinnaker/kork/pubsub/aws/SQSSubscriberProvider.java +++ b/kork-pubsub-aws/src/main/java/com/netflix/spinnaker/kork/pubsub/aws/SQSSubscriberProvider.java @@ -30,12 +30,12 @@ import com.netflix.spinnaker.kork.pubsub.aws.api.AmazonPubsubMessageHandlerFactory; import com.netflix.spinnaker.kork.pubsub.aws.config.AmazonPubsubProperties; import com.netflix.spinnaker.kork.pubsub.model.PubsubSubscriber; +import jakarta.annotation.PostConstruct; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.RejectedExecutionException; -import javax.annotation.PostConstruct; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/kork-pubsub-aws/src/main/java/com/netflix/spinnaker/kork/pubsub/aws/config/AmazonPubsubConfig.java b/kork-pubsub-aws/src/main/java/com/netflix/spinnaker/kork/pubsub/aws/config/AmazonPubsubConfig.java index b3e7bba94..f60818838 100644 --- a/kork-pubsub-aws/src/main/java/com/netflix/spinnaker/kork/pubsub/aws/config/AmazonPubsubConfig.java +++ b/kork-pubsub-aws/src/main/java/com/netflix/spinnaker/kork/pubsub/aws/config/AmazonPubsubConfig.java @@ -29,7 +29,7 @@ import com.netflix.spinnaker.kork.pubsub.aws.SQSSubscriberProvider; import com.netflix.spinnaker.kork.pubsub.aws.api.AmazonMessageAcknowledger; import com.netflix.spinnaker.kork.pubsub.aws.api.AmazonPubsubMessageHandlerFactory; -import javax.validation.Valid; +import jakarta.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; diff --git a/kork-pubsub-aws/src/main/java/com/netflix/spinnaker/kork/pubsub/aws/config/AmazonPubsubProperties.java b/kork-pubsub-aws/src/main/java/com/netflix/spinnaker/kork/pubsub/aws/config/AmazonPubsubProperties.java index 5c77c89a9..156df5121 100644 --- a/kork-pubsub-aws/src/main/java/com/netflix/spinnaker/kork/pubsub/aws/config/AmazonPubsubProperties.java +++ b/kork-pubsub-aws/src/main/java/com/netflix/spinnaker/kork/pubsub/aws/config/AmazonPubsubProperties.java @@ -16,10 +16,10 @@ package com.netflix.spinnaker.kork.pubsub.aws.config; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; import java.util.Collections; import java.util.List; -import javax.validation.Valid; -import javax.validation.constraints.NotEmpty; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/kork-retrofit/src/main/java/com/netflix/spinnaker/kork/retrofit/exceptions/SpinnakerRetrofitExceptionHandlers.java b/kork-retrofit/src/main/java/com/netflix/spinnaker/kork/retrofit/exceptions/SpinnakerRetrofitExceptionHandlers.java index 34c711914..c8157cdaf 100644 --- a/kork-retrofit/src/main/java/com/netflix/spinnaker/kork/retrofit/exceptions/SpinnakerRetrofitExceptionHandlers.java +++ b/kork-retrofit/src/main/java/com/netflix/spinnaker/kork/retrofit/exceptions/SpinnakerRetrofitExceptionHandlers.java @@ -18,9 +18,9 @@ import com.netflix.spinnaker.kork.web.exceptions.BaseExceptionHandlers; import com.netflix.spinnaker.kork.web.exceptions.ExceptionMessageDecorator; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.Ordered; diff --git a/kork-sql/kork-sql.gradle b/kork-sql/kork-sql.gradle index 032ef2e05..96b058139 100644 --- a/kork-sql/kork-sql.gradle +++ b/kork-sql/kork-sql.gradle @@ -13,7 +13,7 @@ dependencies { api "com.zaxxer:HikariCP" implementation 'com.github.blagerweij:liquibase-sessionlock:1.5.0' - implementation "javax.validation:validation-api" + implementation "jakarta.validation:jakarta.validation-api" implementation "org.hibernate.validator:hibernate-validator" testImplementation project(":kork-sql-test") diff --git a/kork-sql/src/main/kotlin/com/netflix/spinnaker/kork/sql/config/SqlProperties.kt b/kork-sql/src/main/kotlin/com/netflix/spinnaker/kork/sql/config/SqlProperties.kt index 73b89b21d..e3b813c32 100644 --- a/kork-sql/src/main/kotlin/com/netflix/spinnaker/kork/sql/config/SqlProperties.kt +++ b/kork-sql/src/main/kotlin/com/netflix/spinnaker/kork/sql/config/SqlProperties.kt @@ -18,9 +18,9 @@ package com.netflix.spinnaker.kork.sql.config import org.springframework.boot.context.properties.ConfigurationProperties import org.springframework.validation.annotation.Validated import java.sql.Connection -import javax.validation.Constraint -import javax.validation.ConstraintValidator -import javax.validation.ConstraintValidatorContext +import jakarta.validation.Constraint +import jakarta.validation.ConstraintValidator +import jakarta.validation.ConstraintValidatorContext import kotlin.reflect.KClass /** diff --git a/kork-sql/src/test/java/com/netflix/spinnaker/kork/sql/config/TransactionIsolationValidationTest.java b/kork-sql/src/test/java/com/netflix/spinnaker/kork/sql/config/TransactionIsolationValidationTest.java index b99682cea..a6fcb24f3 100644 --- a/kork-sql/src/test/java/com/netflix/spinnaker/kork/sql/config/TransactionIsolationValidationTest.java +++ b/kork-sql/src/test/java/com/netflix/spinnaker/kork/sql/config/TransactionIsolationValidationTest.java @@ -18,11 +18,11 @@ import static org.assertj.core.api.Assertions.assertThat; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; import java.util.Set; -import javax.validation.ConstraintViolation; -import javax.validation.Validation; -import javax.validation.Validator; -import javax.validation.ValidatorFactory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInfo; diff --git a/kork-web/src/main/groovy/com/netflix/spinnaker/config/OkHttpMetricsInterceptorProperties.java b/kork-web/src/main/groovy/com/netflix/spinnaker/config/OkHttpMetricsInterceptorProperties.java index cd8951bef..58e941829 100644 --- a/kork-web/src/main/groovy/com/netflix/spinnaker/config/OkHttpMetricsInterceptorProperties.java +++ b/kork-web/src/main/groovy/com/netflix/spinnaker/config/OkHttpMetricsInterceptorProperties.java @@ -15,8 +15,8 @@ */ package com.netflix.spinnaker.config; +import jakarta.annotation.PostConstruct; import java.util.regex.Pattern; -import javax.annotation.PostConstruct; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.util.StringUtils; diff --git a/kork-web/src/main/groovy/com/netflix/spinnaker/filters/AuthenticatedRequestFilter.groovy b/kork-web/src/main/groovy/com/netflix/spinnaker/filters/AuthenticatedRequestFilter.groovy index 53050b8f9..fc65dbf1e 100644 --- a/kork-web/src/main/groovy/com/netflix/spinnaker/filters/AuthenticatedRequestFilter.groovy +++ b/kork-web/src/main/groovy/com/netflix/spinnaker/filters/AuthenticatedRequestFilter.groovy @@ -24,13 +24,13 @@ import org.springframework.security.core.context.SecurityContextHolder import org.springframework.security.core.context.SecurityContextImpl import org.springframework.security.core.userdetails.UserDetails -import javax.servlet.Filter -import javax.servlet.FilterChain -import javax.servlet.FilterConfig -import javax.servlet.ServletException -import javax.servlet.ServletRequest -import javax.servlet.ServletResponse -import javax.servlet.http.HttpServletRequest +import jakarta.servlet.Filter +import jakarta.servlet.FilterChain +import jakarta.servlet.FilterConfig +import jakarta.servlet.ServletException +import jakarta.servlet.ServletRequest +import jakarta.servlet.ServletResponse +import jakarta.servlet.http.HttpServletRequest import java.security.cert.X509Certificate @Slf4j diff --git a/kork-web/src/main/java/com/netflix/spinnaker/config/AuthenticatedRequestConfiguration.java b/kork-web/src/main/java/com/netflix/spinnaker/config/AuthenticatedRequestConfiguration.java index fff05537f..177120e93 100644 --- a/kork-web/src/main/java/com/netflix/spinnaker/config/AuthenticatedRequestConfiguration.java +++ b/kork-web/src/main/java/com/netflix/spinnaker/config/AuthenticatedRequestConfiguration.java @@ -18,10 +18,10 @@ import com.netflix.spinnaker.security.AuthenticatedRequest; import com.netflix.spinnaker.security.AuthenticatedRequestDecorator; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; import java.util.HashMap; import java.util.Map; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; import org.springframework.boot.web.reactive.function.client.WebClientCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/kork-web/src/main/java/com/netflix/spinnaker/kork/web/exceptions/BaseExceptionHandlers.java b/kork-web/src/main/java/com/netflix/spinnaker/kork/web/exceptions/BaseExceptionHandlers.java index ba033df27..202e8fef1 100644 --- a/kork-web/src/main/java/com/netflix/spinnaker/kork/web/exceptions/BaseExceptionHandlers.java +++ b/kork-web/src/main/java/com/netflix/spinnaker/kork/web/exceptions/BaseExceptionHandlers.java @@ -16,8 +16,8 @@ package com.netflix.spinnaker.kork.web.exceptions; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.boot.web.servlet.error.DefaultErrorAttributes; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; diff --git a/kork-web/src/main/java/com/netflix/spinnaker/kork/web/exceptions/GenericExceptionHandlers.java b/kork-web/src/main/java/com/netflix/spinnaker/kork/web/exceptions/GenericExceptionHandlers.java index 1f9a0cefa..e7a4d8438 100644 --- a/kork-web/src/main/java/com/netflix/spinnaker/kork/web/exceptions/GenericExceptionHandlers.java +++ b/kork-web/src/main/java/com/netflix/spinnaker/kork/web/exceptions/GenericExceptionHandlers.java @@ -20,13 +20,13 @@ import com.google.common.io.CharStreams; import com.netflix.spinnaker.kork.exceptions.HasAdditionalAttributes; import com.netflix.spinnaker.kork.exceptions.UserException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStreamReader; import java.util.Collections; import java.util.HashMap; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.annotation.AnnotationUtils; diff --git a/kork-web/src/main/java/com/netflix/spinnaker/kork/web/interceptors/MetricsInterceptor.java b/kork-web/src/main/java/com/netflix/spinnaker/kork/web/interceptors/MetricsInterceptor.java index 4d1536452..d02fd23dd 100644 --- a/kork-web/src/main/java/com/netflix/spinnaker/kork/web/interceptors/MetricsInterceptor.java +++ b/kork-web/src/main/java/com/netflix/spinnaker/kork/web/interceptors/MetricsInterceptor.java @@ -22,16 +22,16 @@ import com.netflix.spectator.api.Registry; import com.netflix.spectator.api.histogram.PercentileDistributionSummary; import com.netflix.spectator.api.histogram.PercentileTimer; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.util.Collection; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.HandlerMapping; -import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; /** * An interceptor that logs Controller metrics to an underlying {@link @@ -43,7 +43,7 @@ * 500, etc.) - success (true/false depending on whether the request resulted in an exception) - * cause (if success == false, the name of the raised exception) */ -public class MetricsInterceptor extends HandlerInterceptorAdapter { +public class MetricsInterceptor implements HandlerInterceptor { static final String TIMER_ATTRIBUTE = "Metrics_startTime"; private final Registry registry; diff --git a/kork-web/src/test/groovy/com/netflix/spinnaker/kork/web/exceptions/GenericExceptionHandlersSpec.groovy b/kork-web/src/test/groovy/com/netflix/spinnaker/kork/web/exceptions/GenericExceptionHandlersSpec.groovy index 07ea3c580..97fc37f3e 100644 --- a/kork-web/src/test/groovy/com/netflix/spinnaker/kork/web/exceptions/GenericExceptionHandlersSpec.groovy +++ b/kork-web/src/test/groovy/com/netflix/spinnaker/kork/web/exceptions/GenericExceptionHandlersSpec.groovy @@ -23,8 +23,8 @@ import spock.lang.Specification import spock.lang.Subject import spock.lang.Unroll -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest +import jakarta.servlet.http.HttpServletResponse; class GenericExceptionHandlersSpec extends Specification { @Shared diff --git a/kork-web/src/test/groovy/com/netflix/spinnaker/kork/web/interceptors/MetricsInterceptorMicrometerTest.java b/kork-web/src/test/groovy/com/netflix/spinnaker/kork/web/interceptors/MetricsInterceptorMicrometerTest.java index 34ca7b644..a73030402 100644 --- a/kork-web/src/test/groovy/com/netflix/spinnaker/kork/web/interceptors/MetricsInterceptorMicrometerTest.java +++ b/kork-web/src/test/groovy/com/netflix/spinnaker/kork/web/interceptors/MetricsInterceptorMicrometerTest.java @@ -23,14 +23,14 @@ import io.micrometer.core.instrument.Tag; import io.micrometer.core.instrument.search.Search; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; diff --git a/kork-web/src/test/groovy/com/netflix/spinnaker/kork/web/interceptors/MetricsInterceptorSpec.groovy b/kork-web/src/test/groovy/com/netflix/spinnaker/kork/web/interceptors/MetricsInterceptorSpec.groovy index 9f5d643f2..d7f0ab9a3 100644 --- a/kork-web/src/test/groovy/com/netflix/spinnaker/kork/web/interceptors/MetricsInterceptorSpec.groovy +++ b/kork-web/src/test/groovy/com/netflix/spinnaker/kork/web/interceptors/MetricsInterceptorSpec.groovy @@ -26,8 +26,8 @@ import org.springframework.web.servlet.HandlerMapping import spock.lang.Specification import spock.lang.Unroll -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse +import jakarta.servlet.http.HttpServletRequest +import jakarta.servlet.http.HttpServletResponse class MetricsInterceptorSpec extends Specification { def "should store current time as request attribute"() { From 0dc68a1fb9f3856c62b93e8b2bbae91e089b002f Mon Sep 17 00:00:00 2001 From: j-sandy <30489233+j-sandy@users.noreply.github.com> Date: Wed, 11 Dec 2024 16:39:02 +0530 Subject: [PATCH 03/13] refactor(exception): replace NestedIOException with IOException during upgrade of spring boot 3.0.x While upgrading the spring boot to 3.0.13 and spring cloud 2022.0.5, encountered the below errors during build process of kork-crypto module: ``` > Task :kork-crypto:compileJava FAILED /kork/kork-crypto/src/main/java/com/netflix/spinnaker/kork/crypto/NestedSecurityIOException.java:20: error: cannot find symbol import org.springframework.core.NestedIOException; ^ symbol: class NestedIOException location: package org.springframework.core /kork/kork-crypto/src/main/java/com/netflix/spinnaker/kork/crypto/NestedSecurityIOException.java:22: error: cannot find symbol public class NestedSecurityIOException extends NestedIOException { ^ symbol: class NestedIOException 2 errors ``` The root cause is the removal of `org.springframework.core.NestedIOException` from springframework 6.0, as mentioned in the below links: https://github.com/spring-projects/spring-framework/issues/28198 https://github.com/spring-projects/spring-framework/issues/28929 So, replacing `org.springframework.core.NestedIOException` with `java.io.IOException`. --- .../spinnaker/kork/crypto/NestedSecurityIOException.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kork-crypto/src/main/java/com/netflix/spinnaker/kork/crypto/NestedSecurityIOException.java b/kork-crypto/src/main/java/com/netflix/spinnaker/kork/crypto/NestedSecurityIOException.java index d88cd760a..6eb8a75d9 100644 --- a/kork-crypto/src/main/java/com/netflix/spinnaker/kork/crypto/NestedSecurityIOException.java +++ b/kork-crypto/src/main/java/com/netflix/spinnaker/kork/crypto/NestedSecurityIOException.java @@ -16,10 +16,10 @@ package com.netflix.spinnaker.kork.crypto; +import java.io.IOException; import java.security.GeneralSecurityException; -import org.springframework.core.NestedIOException; -public class NestedSecurityIOException extends NestedIOException { +public class NestedSecurityIOException extends IOException { public NestedSecurityIOException(GeneralSecurityException e) { super(e.getMessage(), e); } From 3386f7463252ca97569bda72283461bce35e7af9 Mon Sep 17 00:00:00 2001 From: j-sandy <30489233+j-sandy@users.noreply.github.com> Date: Wed, 11 Dec 2024 17:14:01 +0530 Subject: [PATCH 04/13] refactor(eureka): removed deprecated client and refactor constructor code during upgrade of spring boot 3.0.x While upgrading the spring boot to 3.0.13 and spring cloud 2022.0.5, encountered the below errors during build process of kork-eureka module: ``` > Task :kork-eureka:compileJava FAILED /kork/kork-eureka/src/main/java/com/netflix/spinnaker/kork/eureka/EurekaAutoConfiguration.java:55: error: cannot find symbol DiscoveryClient.DiscoveryClientOptionalArgs optionalArgs) { ^ symbol: class DiscoveryClientOptionalArgs location: class DiscoveryClient /kork/kork-eureka/src/main/java/com/netflix/spinnaker/kork/eureka/EurekaAutoConfiguration.java:89: error: cannot find symbol DiscoveryClient.DiscoveryClientOptionalArgs optionalArgs( ^ symbol: class DiscoveryClientOptionalArgs location: class DiscoveryClient 2 errors ``` Spring cloud upgrade from 2021.0.x to 2022.0.x also upgrades the eureka client transitively from [1.10.17](https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies/2021.0.8) to [2.0.1](https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies/2022.0.5) Eureka client 2.0.x is not backward compatible with 1.0.x. The constructor has also introduced new parameter. So, update the code accordingly. https://github.com/Netflix/eureka/releases/tag/v2.0.0 --- kork-eureka/kork-eureka.gradle | 3 ++- .../kork/eureka/EurekaAutoConfiguration.java | 18 +++++++----------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/kork-eureka/kork-eureka.gradle b/kork-eureka/kork-eureka.gradle index b6fce9cdc..bf78168bd 100644 --- a/kork-eureka/kork-eureka.gradle +++ b/kork-eureka/kork-eureka.gradle @@ -29,7 +29,8 @@ dependencies { implementation "com.netflix.archaius:archaius-core" implementation "commons-configuration:commons-configuration" - implementation "com.netflix.eureka:eureka-client" + implementation "com.netflix.eureka:eureka-client-jersey3" + implementation "com.netflix.eureka:eureka-core-jersey3" implementation "com.netflix.netflix-commons:netflix-eventbus" testImplementation "org.springframework.boot:spring-boot-starter-test" diff --git a/kork-eureka/src/main/java/com/netflix/spinnaker/kork/eureka/EurekaAutoConfiguration.java b/kork-eureka/src/main/java/com/netflix/spinnaker/kork/eureka/EurekaAutoConfiguration.java index c05882b10..58715c3e8 100644 --- a/kork-eureka/src/main/java/com/netflix/spinnaker/kork/eureka/EurekaAutoConfiguration.java +++ b/kork-eureka/src/main/java/com/netflix/spinnaker/kork/eureka/EurekaAutoConfiguration.java @@ -21,6 +21,8 @@ import com.netflix.discovery.DiscoveryClient; import com.netflix.discovery.EurekaClient; import com.netflix.discovery.EurekaClientConfig; +import com.netflix.discovery.shared.transport.jersey.TransportClientFactories; +import com.netflix.discovery.shared.transport.jersey3.Jersey3TransportClientFactories; import com.netflix.eventbus.impl.EventBusImpl; import com.netflix.eventbus.spi.EventBus; import com.netflix.spinnaker.kork.discovery.DiscoveryAutoConfiguration; @@ -46,14 +48,13 @@ public EventBus eventBus() { return new EventBusImpl(); } - /** @deprecated use EurekaClient rather than DiscoveryClient */ @Bean - @Deprecated public DiscoveryClient discoveryClient( ApplicationInfoManager applicationInfoManager, EurekaClientConfig eurekaClientConfig, - DiscoveryClient.DiscoveryClientOptionalArgs optionalArgs) { - return new DiscoveryClient(applicationInfoManager, eurekaClientConfig, optionalArgs); + TransportClientFactories transportClientFactories) { + return new DiscoveryClient( + applicationInfoManager, eurekaClientConfig, transportClientFactories); } @Bean @@ -86,13 +87,8 @@ EurekaClientConfig eurekaClientConfig( } @Bean - DiscoveryClient.DiscoveryClientOptionalArgs optionalArgs( - EventBus eventBus, HealthCheckHandler healthCheckHandler) { - DiscoveryClient.DiscoveryClientOptionalArgs args = - new DiscoveryClient.DiscoveryClientOptionalArgs(); - args.setEventBus(eventBus); - args.setHealthCheckHandlerProvider(new StaticProvider<>(healthCheckHandler)); - return args; + TransportClientFactories transportClientFactories() { + return Jersey3TransportClientFactories.getInstance(); } @Bean From 66f2d8c5e4d37d33698692d8a0c09701fa2160f6 Mon Sep 17 00:00:00 2001 From: j-sandy <30489233+j-sandy@users.noreply.github.com> Date: Wed, 11 Dec 2024 21:36:06 +0530 Subject: [PATCH 05/13] refactor(telemetry): replace the deprecated method and constructor during upgrade of spring boot 3.0.x While upgrading the spring boot to 3.0.13 and spring cloud 2022.0.5, encountered the below errors during build process of kork-telemetry module: ``` > Task :kork-telemetry:compileJava FAILED /kork/kork-telemetry/src/main/java/com/netflix/spinnaker/kork/telemetry/caffeine/CaffeineStatsCounter.java:26: error: CaffeineStatsCounter is not abstract and does not override abstract method recordEviction(int,RemovalCause) in StatsCounter public class CaffeineStatsCounter implements StatsCounter { ^ /kork/kork-telemetry/src/main/java/com/netflix/spinnaker/kork/telemetry/caffeine/CaffeineStatsCounter.java:73: error: method does not override or implement a method from a supertype @Override ^ /kork/kork-telemetry/src/main/java/com/netflix/spinnaker/kork/telemetry/caffeine/CaffeineStatsCounter.java:79: error: method does not override or implement a method from a supertype @Override ^ /kork/kork-telemetry/src/main/java/com/netflix/spinnaker/kork/telemetry/caffeine/CaffeineStatsCounter.java:87: error: CacheStats(long,long,long,long,long,long,long) has private access in CacheStats return new CacheStats( ^ 4 errors ``` Spring boot upgrade brings the caffeine 3.1.8 transitively, that was 2.9.3 with spring boot 2.7.x. In caffeine 3.x, `StatsCounter.recordEviction` method variation has been deprecated and `CacheStats` constructor. So, update the both of them. https://github.com/ben-manes/caffeine/releases/tag/v3.0.0 https://javadoc.io/doc/com.github.ben-manes.caffeine/caffeine/latest/com.github.benmanes.caffeine/com/github/benmanes/caffeine/cache/stats/StatsCounter.html https://javadoc.io/doc/com.github.ben-manes.caffeine/caffeine/2.9.3/com/github/benmanes/caffeine/cache/stats/StatsCounter.html --- .../kork/telemetry/caffeine/CaffeineStatsCounter.java | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/kork-telemetry/src/main/java/com/netflix/spinnaker/kork/telemetry/caffeine/CaffeineStatsCounter.java b/kork-telemetry/src/main/java/com/netflix/spinnaker/kork/telemetry/caffeine/CaffeineStatsCounter.java index 93e27c016..21fefa360 100644 --- a/kork-telemetry/src/main/java/com/netflix/spinnaker/kork/telemetry/caffeine/CaffeineStatsCounter.java +++ b/kork-telemetry/src/main/java/com/netflix/spinnaker/kork/telemetry/caffeine/CaffeineStatsCounter.java @@ -16,6 +16,7 @@ package com.netflix.spinnaker.kork.telemetry.caffeine; +import com.github.benmanes.caffeine.cache.RemovalCause; import com.github.benmanes.caffeine.cache.stats.CacheStats; import com.github.benmanes.caffeine.cache.stats.StatsCounter; import com.netflix.spectator.api.Counter; @@ -71,20 +72,14 @@ public void recordLoadFailure(long loadTime) { } @Override - @SuppressWarnings("deprecation") - public void recordEviction() { - recordEviction(1); - } - - @Override - public void recordEviction(int weight) { + public void recordEviction(int weight, RemovalCause cause) { evictionCount.increment(); evictionWeight.increment(weight); } @Override public CacheStats snapshot() { - return new CacheStats( + return CacheStats.of( hitCount.count(), missCount.count(), loadSuccessCount.count(), From ac20f15e2fcbd4b911a9a63e3212edbc3c9433a1 Mon Sep 17 00:00:00 2001 From: j-sandy <30489233+j-sandy@users.noreply.github.com> Date: Wed, 11 Dec 2024 22:03:21 +0530 Subject: [PATCH 06/13] refactor(dependency): replace rxjava with rxjava3 during upgrade of spring boot 3.0.x While upgrading the spring boot to 3.0.13 and spring cloud 2022.0.5, encountered the below errors during build process of kork-stackdriver module: ``` > Task :kork-stackdriver:compileJava FAILED /kork/kork-stackdriver/src/main/java/com/netflix/spinnaker/config/StackdriverConfig.java:41: error: package rx does not exist import rx.Observable; ^ /kork/kork-stackdriver/src/main/java/com/netflix/spinnaker/config/StackdriverConfig.java:42: error: package rx does not exist import rx.Scheduler; ^ /kork/kork-stackdriver/src/main/java/com/netflix/spinnaker/config/StackdriverConfig.java:43: error: package rx.schedulers does not exist import rx.schedulers.Schedulers; ^ 3 errors ``` Spring boot 3.x deprecated and removed rxjava, and rxjava3 has been added. So, update the dependency. https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide#rxjava --- kork-stackdriver/kork-stackdriver.gradle | 2 +- .../com/netflix/spinnaker/config/StackdriverConfig.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/kork-stackdriver/kork-stackdriver.gradle b/kork-stackdriver/kork-stackdriver.gradle index be5035d0b..0abb29465 100644 --- a/kork-stackdriver/kork-stackdriver.gradle +++ b/kork-stackdriver/kork-stackdriver.gradle @@ -18,7 +18,7 @@ apply plugin: "java-library" dependencies { api(platform(project(":spinnaker-dependencies"))) - api "io.reactivex:rxjava" + api "io.reactivex.rxjava3:rxjava" api "com.netflix.spectator:spectator-api" api "com.google.apis:google-api-services-monitoring" diff --git a/kork-stackdriver/src/main/java/com/netflix/spinnaker/config/StackdriverConfig.java b/kork-stackdriver/src/main/java/com/netflix/spinnaker/config/StackdriverConfig.java index 08627a2ba..4cba00dc4 100644 --- a/kork-stackdriver/src/main/java/com/netflix/spinnaker/config/StackdriverConfig.java +++ b/kork-stackdriver/src/main/java/com/netflix/spinnaker/config/StackdriverConfig.java @@ -21,6 +21,9 @@ import com.netflix.spectator.controllers.filter.PrototypeMeasurementFilter; import com.netflix.spectator.stackdriver.ConfigParams; import com.netflix.spectator.stackdriver.StackdriverWriter; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Scheduler; +import io.reactivex.rxjava3.schedulers.Schedulers; import java.io.IOException; import java.net.InetAddress; import java.util.Date; @@ -38,9 +41,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; -import rx.Observable; -import rx.Scheduler; -import rx.schedulers.Schedulers; @Configuration @EnableConfigurationProperties({ From 4d0b66b92e68bc6294a8035d838e5b089ae6063f Mon Sep 17 00:00:00 2001 From: j-sandy <30489233+j-sandy@users.noreply.github.com> Date: Thu, 12 Dec 2024 15:29:29 +0530 Subject: [PATCH 07/13] refactor(spring-security): refactor spring security from 5.x to 6.x with spring boot upgrade to 3.x While upgrading the spring boot to 3.0.13 and spring cloud 2022.0.5, encountered the below errors during build process of kork-actuator module: ``` > Task :kork-actuator:compileJava FAILED /kork/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/ActuatorEndpointsConfiguration.java:26: error: cannot find symbol import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; ^ symbol: class WebSecurityConfigurerAdapter location: package org.springframework.security.config.annotation.web.configuration /kork/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/ActuatorEndpointsConfiguration.java:30: error: cannot find symbol public class ActuatorEndpointsConfiguration extends WebSecurityConfigurerAdapter { ^ symbol: class WebSecurityConfigurerAdapter 2 errors ``` With spring boot upgrade, spring security also upgrades from 5.x to 6.x. As per the migration [steps](https://www.baeldung.com/spring-security-migrate-5-to-6), `WebSecurityConfigurerAdapter` has been removed. So, it is not required to be extended, instead bean can be registered. ``` > Task :kork-actuator:compileJava FAILED /kork/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/endpoint/ResolvedEnvironmentEndpoint.java:45: error: invalid method reference .ifPresent(sanitizer::setKeysToSanitize); ^ cannot find symbol symbol: method setKeysToSanitize(T) location: class Sanitizer where T is a type-variable: T extends Object declared in class Optional /kork/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/endpoint/ResolvedEnvironmentEndpoint.java:56: error: incompatible types: String cannot be converted to SanitizableData return sanitizer.sanitize(property, environment.getProperty(property)); ^ Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output 2 errors ``` In spring boot 3, changes are introduced in sanitization of actuator [endpoints](https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide#actuator-endpoints-sanitization). Default `Sanitizer` implementation has been removed and replaced with `SanitizingFunction`. https://github.com/spring-projects/spring-boot/issues/33448 https://github.com/spring-projects/spring-boot/issues/39243 https://github.com/spring-projects/spring-boot/issues/32156 So, added the `ActuatorSanitizingFunction` class to provide the default implementation of `SanitizingFunction`. --- .../ActuatorEndpointsConfiguration.java | 20 ++- .../actuator/ActuatorSanitizingFunction.java | 135 ++++++++++++++++++ .../endpoint/ResolvedEnvironmentEndpoint.java | 14 +- ...pinnakerRetrofitExceptionHandlersTest.java | 15 +- .../spinnaker/kork/tomcat/CRLFHeaderTest.java | 2 +- .../kork/tomcat/WebEnvironmentTest.java | 2 +- .../config/MetricsEndpointConfiguration.java | 21 +-- .../MetricsEndpointConfigurationTest.java | 2 +- 8 files changed, 184 insertions(+), 27 deletions(-) create mode 100644 kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/ActuatorSanitizingFunction.java diff --git a/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/ActuatorEndpointsConfiguration.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/ActuatorEndpointsConfiguration.java index e116e992a..66531bdab 100644 --- a/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/ActuatorEndpointsConfiguration.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/ActuatorEndpointsConfiguration.java @@ -19,22 +19,28 @@ import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest; import org.springframework.boot.actuate.health.HealthEndpoint; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.web.SecurityFilterChain; @Configuration @Order(Ordered.HIGHEST_PRECEDENCE + 67) -public class ActuatorEndpointsConfiguration extends WebSecurityConfigurerAdapter { +@EnableWebSecurity +public class ActuatorEndpointsConfiguration { - @Override - public void configure(HttpSecurity http) throws Exception { + @Bean + public SecurityFilterChain configure(HttpSecurity http) throws Exception { // The health endpoint should always be exposed without auth. - http.requestMatcher(EndpointRequest.to(HealthEndpoint.class)) - .authorizeRequests() + http.securityMatcher(EndpointRequest.to(HealthEndpoint.class)); + http.authorizeHttpRequests() + .requestMatchers(EndpointRequest.to(HealthEndpoint.class)) + .permitAll() .anyRequest() - .permitAll(); + .authenticated(); + return http.build(); } } diff --git a/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/ActuatorSanitizingFunction.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/ActuatorSanitizingFunction.java new file mode 100644 index 000000000..83e654467 --- /dev/null +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/ActuatorSanitizingFunction.java @@ -0,0 +1,135 @@ +/* + * Copyright 2024 OpsMx, 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 com.netflix.spinnaker.kork.actuator; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import org.springframework.boot.actuate.endpoint.SanitizableData; +import org.springframework.boot.actuate.endpoint.SanitizingFunction; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +@Component +public class ActuatorSanitizingFunction implements SanitizingFunction { + + private static final String[] REGEX_PARTS = {"*", "$", "^", "+"}; + private static final Set DEFAULT_KEYS_TO_SANITIZE = + Set.of( + "password", + "secret", + "key", + "token", + ".*credentials.*", + "vcap_services", + "^vcap\\.services.*$", + "sun.java.command", + "^spring[._]application[._]json$"); + private static final Set URI_USERINFO_KEYS = + Set.of("uri", "uris", "url", "urls", "address", "addresses"); + private static final Pattern URI_USERINFO_PATTERN = + Pattern.compile("^\\[?[A-Za-z][A-Za-z0-9\\+\\.\\-]+://.+:(.*)@.+$"); + private List keysToSanitize = new ArrayList<>(); + + public ActuatorSanitizingFunction(List additionalKeysToSanitize) { + addKeysToSanitize(DEFAULT_KEYS_TO_SANITIZE); + addKeysToSanitize(URI_USERINFO_KEYS); + addKeysToSanitize(additionalKeysToSanitize); + } + + public ActuatorSanitizingFunction() { + addKeysToSanitize(DEFAULT_KEYS_TO_SANITIZE); + addKeysToSanitize(URI_USERINFO_KEYS); + } + + private void addKeysToSanitize(Collection keysToSanitize) { + for (String key : keysToSanitize) { + this.keysToSanitize.add(getPattern(key)); + } + } + + private Pattern getPattern(String value) { + if (isRegex(value)) { + return Pattern.compile(value, Pattern.CASE_INSENSITIVE); + } + return Pattern.compile(".*" + value + "$", Pattern.CASE_INSENSITIVE); + } + + private boolean isRegex(String value) { + for (String part : REGEX_PARTS) { + if (value.contains(part)) { + return true; + } + } + return false; + } + + public void setKeysToSanitize(String... keysToSanitize) { + if (keysToSanitize != null) { + for (String key : keysToSanitize) { + this.keysToSanitize.add(getPattern(key)); // todo: clear oll existing the make the list. + } + } + } + + @Override + public SanitizableData apply(SanitizableData data) { + if (data.getValue() == null) { + return data; + } + + for (Pattern pattern : keysToSanitize) { + if (pattern.matcher(data.getKey()).matches()) { + if (keyIsUriWithUserInfo(pattern)) { + return data.withValue(sanitizeUris(data.getValue().toString())); + } + + return data.withValue(SanitizableData.SANITIZED_VALUE); + } + } + + return data; + } + + private boolean keyIsUriWithUserInfo(Pattern pattern) { + for (String uriKey : URI_USERINFO_KEYS) { + if (pattern.matcher(uriKey).matches()) { + return true; + } + } + return false; + } + + private Object sanitizeUris(String value) { + return Arrays.stream(value.split(",")).map(this::sanitizeUri).collect(Collectors.joining(",")); + } + + private String sanitizeUri(String value) { + Matcher matcher = URI_USERINFO_PATTERN.matcher(value); + String password = matcher.matches() ? matcher.group(1) : null; + if (password != null) { + return StringUtils.replace( + value, ":" + password + "@", ":" + SanitizableData.SANITIZED_VALUE + "@"); + } + return value; + } +} diff --git a/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/endpoint/ResolvedEnvironmentEndpoint.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/endpoint/ResolvedEnvironmentEndpoint.java index ba185a594..35c99bba9 100644 --- a/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/endpoint/ResolvedEnvironmentEndpoint.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/endpoint/ResolvedEnvironmentEndpoint.java @@ -18,13 +18,16 @@ import static java.lang.String.format; +import com.netflix.spinnaker.kork.actuator.ActuatorSanitizingFunction; import java.util.Arrays; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.SortedSet; import java.util.TreeSet; import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.actuate.endpoint.SanitizableData; import org.springframework.boot.actuate.endpoint.Sanitizer; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; @@ -33,7 +36,9 @@ @Endpoint(id = "resolvedEnv") public class ResolvedEnvironmentEndpoint { - private final Sanitizer sanitizer = new Sanitizer(); + private final Sanitizer sanitizer; + private final ActuatorSanitizingFunction actuatorSanitizingFunction = + new ActuatorSanitizingFunction(); private final Environment environment; @Autowired @@ -42,7 +47,8 @@ public ResolvedEnvironmentEndpoint( this.environment = environment; Optional.ofNullable(properties.getKeysToSanitize()) .map(p -> p.toArray(new String[0])) - .ifPresent(sanitizer::setKeysToSanitize); + .ifPresent(actuatorSanitizingFunction::setKeysToSanitize); + sanitizer = new Sanitizer(List.of(actuatorSanitizingFunction)); } @ReadOperation @@ -53,7 +59,9 @@ public Map resolvedEnv() { property -> property, property -> { try { - return sanitizer.sanitize(property, environment.getProperty(property)); + return sanitizer.sanitize( + new SanitizableData(null, property, environment.getProperty(property)), + true); } catch (Exception e) { return format("Exception occurred: %s", e.getMessage()); } diff --git a/kork-retrofit/src/test/java/com/netflix/spinnaker/kork/retrofit/exceptions/SpinnakerRetrofitExceptionHandlersTest.java b/kork-retrofit/src/test/java/com/netflix/spinnaker/kork/retrofit/exceptions/SpinnakerRetrofitExceptionHandlersTest.java index 93bbc2ad5..e7d7b455c 100644 --- a/kork-retrofit/src/test/java/com/netflix/spinnaker/kork/retrofit/exceptions/SpinnakerRetrofitExceptionHandlersTest.java +++ b/kork-retrofit/src/test/java/com/netflix/spinnaker/kork/retrofit/exceptions/SpinnakerRetrofitExceptionHandlersTest.java @@ -36,19 +36,20 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.boot.web.server.LocalServerPort; +import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.web.SecurityFilterChain; import org.springframework.test.context.TestPropertySource; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.util.UriComponentsBuilder; import retrofit.RetrofitError; import retrofit.client.Response; @@ -153,10 +154,12 @@ private URI getUri(String path) { @EnableAutoConfiguration static class TestControllerConfiguration { @EnableWebSecurity - class WebSecurityConfig extends WebSecurityConfigurerAdapter { - @Override - protected void configure(HttpSecurity http) throws Exception { - http.csrf().disable().headers().disable().authorizeRequests().anyRequest().permitAll(); + class WebSecurityConfig implements WebMvcConfigurer { + @Bean + protected SecurityFilterChain configure(HttpSecurity http) throws Exception { + http.csrf().disable().headers().disable(); + http.authorizeRequests().anyRequest().permitAll(); + return http.build(); } } diff --git a/kork-tomcat/src/test/java/com/netflix/spinnaker/kork/tomcat/CRLFHeaderTest.java b/kork-tomcat/src/test/java/com/netflix/spinnaker/kork/tomcat/CRLFHeaderTest.java index ffb2ca47c..854210d6d 100644 --- a/kork-tomcat/src/test/java/com/netflix/spinnaker/kork/tomcat/CRLFHeaderTest.java +++ b/kork-tomcat/src/test/java/com/netflix/spinnaker/kork/tomcat/CRLFHeaderTest.java @@ -11,7 +11,7 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.web.server.LocalServerPort; +import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.context.annotation.Bean; import org.springframework.test.context.TestPropertySource; import org.springframework.web.bind.annotation.GetMapping; diff --git a/kork-tomcat/src/test/java/com/netflix/spinnaker/kork/tomcat/WebEnvironmentTest.java b/kork-tomcat/src/test/java/com/netflix/spinnaker/kork/tomcat/WebEnvironmentTest.java index fd6ba1167..96448d8d6 100644 --- a/kork-tomcat/src/test/java/com/netflix/spinnaker/kork/tomcat/WebEnvironmentTest.java +++ b/kork-tomcat/src/test/java/com/netflix/spinnaker/kork/tomcat/WebEnvironmentTest.java @@ -8,7 +8,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.boot.web.server.LocalServerPort; +import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.context.annotation.Bean; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; diff --git a/kork-web/src/main/groovy/com/netflix/spinnaker/config/MetricsEndpointConfiguration.java b/kork-web/src/main/groovy/com/netflix/spinnaker/config/MetricsEndpointConfiguration.java index d7b45df62..87c1cceda 100644 --- a/kork-web/src/main/groovy/com/netflix/spinnaker/config/MetricsEndpointConfiguration.java +++ b/kork-web/src/main/groovy/com/netflix/spinnaker/config/MetricsEndpointConfiguration.java @@ -17,26 +17,31 @@ import com.netflix.spectator.api.Registry; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.web.util.matcher.AntPathRequestMatcher; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.web.SecurityFilterChain; @Configuration @ConditionalOnClass(Registry.class) @ComponentScan(basePackages = "com.netflix.spectator.controllers") @Order(Ordered.HIGHEST_PRECEDENCE + 101) -public class MetricsEndpointConfiguration extends WebSecurityConfigurerAdapter { +@EnableWebSecurity +public class MetricsEndpointConfiguration { - @Override - protected void configure(HttpSecurity http) throws Exception { + @Bean + public SecurityFilterChain configure(HttpSecurity http) throws Exception { // Allow anyone to access the spectator metrics endpoint. - http.requestMatcher(new AntPathRequestMatcher("/spectator/metrics")) - .authorizeRequests() + http.securityMatcher("/spectator/metrics"); + http.authorizeHttpRequests() + .requestMatchers("/spectator/metrics") + .permitAll() .anyRequest() - .permitAll(); + .authenticated(); + return http.build(); } } diff --git a/kork-web/src/test/groovy/com/netflix/spinnaker/kork/web/config/MetricsEndpointConfigurationTest.java b/kork-web/src/test/groovy/com/netflix/spinnaker/kork/web/config/MetricsEndpointConfigurationTest.java index ea4c1d87f..7d0c29a6b 100644 --- a/kork-web/src/test/groovy/com/netflix/spinnaker/kork/web/config/MetricsEndpointConfigurationTest.java +++ b/kork-web/src/test/groovy/com/netflix/spinnaker/kork/web/config/MetricsEndpointConfigurationTest.java @@ -25,7 +25,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.boot.web.server.LocalServerPort; +import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.test.context.TestPropertySource; From 3230319c803037544cbc9e73651f2fb994ad4012 Mon Sep 17 00:00:00 2001 From: j-sandy <30489233+j-sandy@users.noreply.github.com> Date: Wed, 18 Dec 2024 20:08:01 +0530 Subject: [PATCH 08/13] refactor(dependency): replace javax.inject with jakarta.inject and upgrade wiremock as part of spring boot 3.x upgrade While upgrading the spring boot to 3.0.13 and spring cloud 2022.0.5, encountered the below errors: ``` Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.inject.Provider' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} at app//org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1824) at app//org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1383) at app//org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337) at app//org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:910) at app//org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:788) ... 175 more ``` The root cause is use of `javax.inject` that has been moved from present coordinate to `jakarta.inject`. So, updating the coordinates in kork-eureka, kork-plugins and kork-web modules. https://github.com/google/guice/issues/1463 https://github.com/google/guice/issues/1383 https://docs.openrewrite.org/recipes/java/migrate/jakarta/javaxinjectmigrationtojakartainject ``` javax/servlet/DispatcherType java.lang.NoClassDefFoundError: javax/servlet/DispatcherType at com.github.tomakehurst.wiremock.jetty9.JettyHttpServerFactory.buildHttpServer(JettyHttpServerFactory.java:31) at com.github.tomakehurst.wiremock.WireMockServer.(WireMockServer.java:74) at com.netflix.spinnaker.kork.plugins.sdk.httpclient.Ok3HttpClientIntegrationTest$Fixture.(Ok3HttpClientIntegrationTest.kt:78) at com.netflix.spinnaker.kork.plugins.sdk.httpclient.Ok3HttpClientIntegrationTest$test$1$1.invoke(Ok3HttpClientIntegrationTest.kt:40) at com.netflix.spinnaker.kork.plugins.sdk.httpclient.Ok3HttpClientIntegrationTest$test$1$1.invoke(Ok3HttpClientIntegrationTest.kt:40) at dev.minutest.TestContextBuilder$fixture$1.invoke(ContextBuilder.kt:48) ``` In order to fix this issue, upgrading wiremock dependency to 3.0.4 and updating its coordinates. Wiremock [3.0.0](https://github.com/wiremock/wiremock/releases/tag/3.0.0) onwards 2 major breaking changes are introduced: 1. support for Java 17, dropping Java 8 support 2. Change the Maven repository groupID to org.wiremock https://github.com/wiremock/wiremock/releases?page=3 --- kork-eureka/kork-eureka.gradle | 2 +- .../spinnaker/kork/eureka/EurekaAutoConfiguration.java | 2 +- kork-plugins/kork-plugins.gradle | 4 ++-- .../netflix/spinnaker/config/HttpClientSdkConfiguration.java | 2 +- kork-web/kork-web.gradle | 2 +- .../com/netflix/spinnaker/config/OkHttpClientComponents.java | 2 +- .../java/com/netflix/spinnaker/okhttp/MetricsInterceptor.java | 2 +- .../netflix/spinnaker/okhttp/OkHttp3MetricsInterceptor.java | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/kork-eureka/kork-eureka.gradle b/kork-eureka/kork-eureka.gradle index bf78168bd..c08102ee1 100644 --- a/kork-eureka/kork-eureka.gradle +++ b/kork-eureka/kork-eureka.gradle @@ -23,7 +23,7 @@ dependencies { implementation project(":kork-core") implementation project(":kork-exceptions") - implementation "javax.inject:javax.inject:1" + implementation "jakarta.inject:jakarta.inject-api" // Transitive dependency of com.netflix.eureka:eureka-client-jersey3 implementation "org.springframework.boot:spring-boot-autoconfigure" implementation "org.springframework.boot:spring-boot-starter-actuator" diff --git a/kork-eureka/src/main/java/com/netflix/spinnaker/kork/eureka/EurekaAutoConfiguration.java b/kork-eureka/src/main/java/com/netflix/spinnaker/kork/eureka/EurekaAutoConfiguration.java index 58715c3e8..8c63d2047 100644 --- a/kork-eureka/src/main/java/com/netflix/spinnaker/kork/eureka/EurekaAutoConfiguration.java +++ b/kork-eureka/src/main/java/com/netflix/spinnaker/kork/eureka/EurekaAutoConfiguration.java @@ -26,9 +26,9 @@ import com.netflix.eventbus.impl.EventBusImpl; import com.netflix.eventbus.spi.EventBus; import com.netflix.spinnaker.kork.discovery.DiscoveryAutoConfiguration; +import jakarta.inject.Provider; import java.util.Map; import java.util.Objects; -import javax.inject.Provider; import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.boot.actuate.health.StatusAggregator; import org.springframework.boot.autoconfigure.AutoConfigureBefore; diff --git a/kork-plugins/kork-plugins.gradle b/kork-plugins/kork-plugins.gradle index 2522da796..df95394c9 100644 --- a/kork-plugins/kork-plugins.gradle +++ b/kork-plugins/kork-plugins.gradle @@ -28,7 +28,7 @@ dependencies { implementation "org.springframework.boot:spring-boot-starter-web" implementation "org.springframework.boot:spring-boot-starter-actuator" implementation("com.google.guava:guava") - implementation "javax.inject:javax.inject:1" + implementation "jakarta.inject:jakarta.inject-api:2.0.1" implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml") implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-properties") @@ -39,7 +39,7 @@ dependencies { testImplementation("org.mockito:mockito-core") testImplementation "org.spockframework:spock-core" testImplementation "org.springframework.boot:spring-boot-starter-test" - testImplementation("com.github.tomakehurst:wiremock:2.15.0") + testImplementation("org.wiremock:wiremock:3.0.4") testRuntimeOnly "cglib:cglib-nodep" testRuntimeOnly "org.objenesis:objenesis" diff --git a/kork-plugins/src/main/java/com/netflix/spinnaker/config/HttpClientSdkConfiguration.java b/kork-plugins/src/main/java/com/netflix/spinnaker/config/HttpClientSdkConfiguration.java index fca50463e..80b2017ed 100644 --- a/kork-plugins/src/main/java/com/netflix/spinnaker/config/HttpClientSdkConfiguration.java +++ b/kork-plugins/src/main/java/com/netflix/spinnaker/config/HttpClientSdkConfiguration.java @@ -33,9 +33,9 @@ import com.netflix.spinnaker.kork.plugins.sdk.httpclient.internal.DefaultOkHttp3ClientFactory; import com.netflix.spinnaker.okhttp.OkHttp3MetricsInterceptor; import com.netflix.spinnaker.okhttp.OkHttpClientConfigurationProperties; +import jakarta.inject.Provider; import java.util.ArrayList; import java.util.List; -import javax.inject.Provider; import org.springframework.boot.context.properties.bind.Bindable; import org.springframework.boot.context.properties.bind.Binder; import org.springframework.context.annotation.Bean; diff --git a/kork-web/kork-web.gradle b/kork-web/kork-web.gradle index a187fc9d4..53894c993 100644 --- a/kork-web/kork-web.gradle +++ b/kork-web/kork-web.gradle @@ -28,7 +28,7 @@ dependencies { api "com.squareup.retrofit:retrofit" implementation "com.google.guava:guava" - implementation "javax.inject:javax.inject:1" + implementation "jakarta.inject:jakarta.inject-api:2.0.1" implementation("com.netflix.spectator:spectator-web-spring") { // exclude transitives since this brings in a newer version of spring (boot) // dependencies than we're compatible with (2.2.x for spring boot and 5.2.x diff --git a/kork-web/src/main/java/com/netflix/spinnaker/config/OkHttpClientComponents.java b/kork-web/src/main/java/com/netflix/spinnaker/config/OkHttpClientComponents.java index b91508f82..6e9b5ea24 100644 --- a/kork-web/src/main/java/com/netflix/spinnaker/config/OkHttpClientComponents.java +++ b/kork-web/src/main/java/com/netflix/spinnaker/config/OkHttpClientComponents.java @@ -32,6 +32,7 @@ import com.netflix.spinnaker.okhttp.SpinnakerRequestInterceptor; import com.netflix.spinnaker.retrofit.Retrofit2ConfigurationProperties; import com.netflix.spinnaker.retrofit.RetrofitConfigurationProperties; +import jakarta.inject.Provider; import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -43,7 +44,6 @@ import java.util.List; import java.util.concurrent.TimeUnit; import javax.annotation.Nullable; -import javax.inject.Provider; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; diff --git a/kork-web/src/main/java/com/netflix/spinnaker/okhttp/MetricsInterceptor.java b/kork-web/src/main/java/com/netflix/spinnaker/okhttp/MetricsInterceptor.java index f9232b862..e4ccf2d2c 100644 --- a/kork-web/src/main/java/com/netflix/spinnaker/okhttp/MetricsInterceptor.java +++ b/kork-web/src/main/java/com/netflix/spinnaker/okhttp/MetricsInterceptor.java @@ -3,6 +3,7 @@ import com.netflix.spectator.api.Registry; import com.netflix.spinnaker.config.OkHttpMetricsInterceptorProperties; import com.netflix.spinnaker.kork.common.Header; +import jakarta.inject.Provider; import java.io.IOException; import java.net.URL; import java.util.ArrayList; @@ -11,7 +12,6 @@ import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; import java.util.stream.Collectors; -import javax.inject.Provider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; diff --git a/kork-web/src/main/java/com/netflix/spinnaker/okhttp/OkHttp3MetricsInterceptor.java b/kork-web/src/main/java/com/netflix/spinnaker/okhttp/OkHttp3MetricsInterceptor.java index 1644278cc..66b6b434d 100644 --- a/kork-web/src/main/java/com/netflix/spinnaker/okhttp/OkHttp3MetricsInterceptor.java +++ b/kork-web/src/main/java/com/netflix/spinnaker/okhttp/OkHttp3MetricsInterceptor.java @@ -18,8 +18,8 @@ import com.netflix.spectator.api.Registry; import com.netflix.spinnaker.config.OkHttpMetricsInterceptorProperties; +import jakarta.inject.Provider; import java.io.IOException; -import javax.inject.Provider; import okhttp3.Response; public class OkHttp3MetricsInterceptor extends MetricsInterceptor implements okhttp3.Interceptor { From 6632c0523585c7093b52c95747959643f6a97cc8 Mon Sep 17 00:00:00 2001 From: j-sandy <30489233+j-sandy@users.noreply.github.com> Date: Wed, 18 Dec 2024 20:20:22 +0530 Subject: [PATCH 09/13] refactor(test): replace spring.profiles with spring.config.activate.on-profile as part of spring boot 3.x upgrade While upgrading the spring boot to 3.0.13 and spring cloud 2022.0.5, encountered the below error: ``` Caused by: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property 'spring.profiles' imported from location 'class path resource [application-test.yml]' is invalid and should be replaced with 'spring.config.activate.on-profile' [origin: class path resource [application-test.yml] - 38:13] at app//org.springframework.boot.context.config.InvalidConfigDataPropertyException.lambda$throwIfPropertyFound$0(InvalidConfigDataPropertyException.java:113) at java.base@17.0.2/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) at java.base@17.0.2/java.util.Collections$UnmodifiableMap.forEach(Collections.java:1553) at app//org.springframework.boot.context.config.InvalidConfigDataPropertyException.throwIfPropertyFound(InvalidConfigDataPropertyException.java:109) at app//org.springframework.boot.context.config.ConfigDataEnvironment.checkForInvalidProperties(ConfigDataEnvironment.java:364) ``` In order to fix this issue, replacing spring.profiles with spring.config.activate.on-profile in application-test.yml --- kork-sql/src/test/resources/application-test.yml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/kork-sql/src/test/resources/application-test.yml b/kork-sql/src/test/resources/application-test.yml index 662c6420d..3bd8280a7 100644 --- a/kork-sql/src/test/resources/application-test.yml +++ b/kork-sql/src/test/resources/application-test.yml @@ -1,12 +1,16 @@ spring: - profiles: test + config: + activate: + on-profile: test sql: enabled: false --- spring: - profiles: twodialects + config: + activate: + on-profile: twodialects sql: enabled: true @@ -35,7 +39,9 @@ sql: --- spring: - profiles: singledialect + config: + activate: + on-profile: singledialect sql: enabled: true From a980df258a8b7a45d96e571c503e33a0d2c3b70b Mon Sep 17 00:00:00 2001 From: j-sandy <30489233+j-sandy@users.noreply.github.com> Date: Wed, 18 Dec 2024 20:41:52 +0530 Subject: [PATCH 10/13] refactor(test): refactor the method getType() to getTableType() as part of spring boot 3.x upgrade ``` > Task :kork-sql-test:compileJava FAILED /kork/kork-sql-test/src/main/java/com/netflix/spinnaker/kork/sql/test/SqlTestUtil.java:278: error: cannot find symbol table.getType().isTable() ^ symbol: method isTable() location: class Class where CAP#1 is a fresh type-variable: CAP#1 extends Record from capture of ? 1 error ``` The root cause is the change in method of `org.jooq.Table` class upgrading jooq transitively from 3.14.16 to 3.17.16 while spring boot 2.7.18 to 3.0.13 upgrade. In order to fix this issue refactoring the `getTableType()` method. --- .../java/com/netflix/spinnaker/kork/sql/test/SqlTestUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kork-sql-test/src/main/java/com/netflix/spinnaker/kork/sql/test/SqlTestUtil.java b/kork-sql-test/src/main/java/com/netflix/spinnaker/kork/sql/test/SqlTestUtil.java index 2ee16db68..0688eb32f 100644 --- a/kork-sql-test/src/main/java/com/netflix/spinnaker/kork/sql/test/SqlTestUtil.java +++ b/kork-sql-test/src/main/java/com/netflix/spinnaker/kork/sql/test/SqlTestUtil.java @@ -275,7 +275,7 @@ public static void cleanupDb(DSLContext context) { context.meta().getTables().stream() .filter( table -> - table.getType().isTable() + table.getTableType().isTable() && table.getSchema().getName().equals(schema) && !table.getName().equals(configuration.getDatabaseChangeLogTableName()) && !table.getName().equals(configuration.getDatabaseChangeLogLockTableName())) From 5345b7901e111546020d1bb89216f58588b9ca8e Mon Sep 17 00:00:00 2001 From: j-sandy <30489233+j-sandy@users.noreply.github.com> Date: Wed, 18 Dec 2024 21:13:53 +0530 Subject: [PATCH 11/13] refactor(test): upgrade spockframework to fix issue during upgrade of spring security from 5.x to 6.x and ninja-squad upgrade with spring boot upgrade to 3.x While upgrading spring security from 5.x to 6.x, encountered the below error: ``` Cannot invoke method getForEntity() on null object java.lang.NullPointerException: Cannot invoke method getForEntity() on null object at com.netflix.spinnaker.kork.web.exceptions.GenericExceptionHandlersMvcSpec.ok request(GenericExceptionHandlersMvcSpec.groovy:42) Cannot invoke method getForEntity() on null object java.lang.NullPointerException: Cannot invoke method getForEntity() on null object at com.netflix.spinnaker.kork.web.exceptions.GenericExceptionHandlersMvcSpec.not found(GenericExceptionHandlersMvcSpec.groovy:50) Cannot invoke method postForEntity() on null object java.lang.NullPointerException: Cannot invoke method postForEntity() on null object at com.netflix.spinnaker.kork.web.exceptions.GenericExceptionHandlersMvcSpec.method not supported(GenericExceptionHandlersMvcSpec.groovy:58) Cannot invoke method getForEntity() on null object java.lang.NullPointerException: Cannot invoke method getForEntity() on null object at com.netflix.spinnaker.kork.web.exceptions.GenericExceptionHandlersMvcSpec.missing request param(GenericExceptionHandlersMvcSpec.groovy:66) Cannot invoke method getForEntity() on null object java.lang.NullPointerException: Cannot invoke method getForEntity() on null object at com.netflix.spinnaker.kork.web.exceptions.GenericExceptionHandlersMvcSpec.should map IllegalArgumentException as 400(GenericExceptionHandlersMvcSpec.groovy:74) Cannot invoke method getForEntity() on null object java.lang.NullPointerException: Cannot invoke method getForEntity() on null object at com.netflix.spinnaker.kork.web.exceptions.GenericExceptionHandlersMvcSpec.should handle IllegalStateException(GenericExceptionHandlersMvcSpec.groovy:82) ``` The root cause of this issue is a incompatibility bug in spockframework 2.3-groovy-4.0 version. In order to fix this issue upgraded the spockframe to 2.4-M1-groovy-4.0 https://github.com/spring-projects/spring-boot/issues/33376 https://spockframework.org/spock/docs/2.4-M1/release_notes.html#_2_4_m1_2022_11_30 Also encountered below error during test execution of kork-plugins-tck module: ``` java.lang.NoClassDefFoundError: org/springframework/beans/factory/config/InstantiationAwareBeanPostProcessorAdapter at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012) at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862) at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) at com.ninjasquad.springmockk.MockkContextCustomizer.customizeContext(MockkContextCustomizer.kt:21) at org.springframework.boot.test.context.SpringBootContextLoader$ContextCustomizerAdapter.initialize(SpringBootContextLoader.java:435) at org.springframework.boot.SpringApplication.applyInitializers(SpringApplication.java:606) at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:386) ``` In order to fix this issue, upgraded the ninja-squad dependency from 2.0.3 to 4.0.2 for the compatibility with Spring boot 3.x and Java 17+. https://github.com/Ninja-Squad/springmockk?tab=readme-ov-file#versions-compatibility --- .../GenericExceptionHandlersMvcSpec.groovy | 17 +++++++++-------- .../spinnaker-dependencies.gradle | 4 ++-- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/kork-web/src/test/groovy/com/netflix/spinnaker/kork/web/exceptions/GenericExceptionHandlersMvcSpec.groovy b/kork-web/src/test/groovy/com/netflix/spinnaker/kork/web/exceptions/GenericExceptionHandlersMvcSpec.groovy index b532a15d5..12be23eca 100644 --- a/kork-web/src/test/groovy/com/netflix/spinnaker/kork/web/exceptions/GenericExceptionHandlersMvcSpec.groovy +++ b/kork-web/src/test/groovy/com/netflix/spinnaker/kork/web/exceptions/GenericExceptionHandlersMvcSpec.groovy @@ -7,18 +7,19 @@ import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.autoconfigure.EnableAutoConfiguration import org.springframework.boot.test.context.SpringBootTest import org.springframework.boot.test.web.client.TestRestTemplate -import org.springframework.boot.web.server.LocalServerPort +import org.springframework.boot.test.web.server.LocalServerPort import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.context.annotation.Import import org.springframework.http.HttpStatus import org.springframework.security.config.annotation.web.builders.HttpSecurity import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter +import org.springframework.security.web.SecurityFilterChain import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.RestController +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer import spock.lang.Specification @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = TestControllersConfiguration) @@ -95,12 +96,12 @@ class GenericExceptionHandlersMvcSpec extends Specification { @Configuration @EnableWebSecurity - class WebSecurityConfig extends WebSecurityConfigurerAdapter { - @Override - protected void configure(HttpSecurity http) throws Exception { - http.csrf().disable() - .headers().disable() - .authorizeRequests().anyRequest().permitAll() + class WebSecurityConfig implements WebMvcConfigurer { + @Bean + protected SecurityFilterChain configure(HttpSecurity http) throws Exception { + http.csrf().disable().headers().disable() + http.authorizeHttpRequests().anyRequest().permitAll() + return http.build() } } diff --git a/spinnaker-dependencies/spinnaker-dependencies.gradle b/spinnaker-dependencies/spinnaker-dependencies.gradle index b8afd7fc7..6d39001a4 100644 --- a/spinnaker-dependencies/spinnaker-dependencies.gradle +++ b/spinnaker-dependencies/spinnaker-dependencies.gradle @@ -60,7 +60,7 @@ dependencies { api(platform("software.amazon.awssdk:bom:${versions.awsv2}")) api(platform("org.springframework.cloud:spring-cloud-dependencies:${versions.springCloud}")) api(platform("io.strikt:strikt-bom:0.31.0")) - api(platform("org.spockframework:spock-bom:2.3-groovy-4.0")) + api(platform("org.spockframework:spock-bom:2.4-M1-groovy-4.0")) api(platform("com.oracle.oci.sdk:oci-java-sdk-bom:3.21.0")) api(platform("org.testcontainers:testcontainers-bom:1.19.8")) api(platform("io.arrow-kt:arrow-stack:${versions.arrow}")) @@ -113,7 +113,7 @@ dependencies { api("com.nimbusds:nimbus-jose-jwt:9.37.2") api("com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0") api("com.nhaarman:mockito-kotlin:1.6.0") - api("com.ninja-squad:springmockk:2.0.3") + api("com.ninja-squad:springmockk:4.0.2") //Compatible with Spring boot 3.x and Java 17+ https://github.com/Ninja-Squad/springmockk?tab=readme-ov-file#versions-compatibility api("com.squareup.retrofit2:converter-jackson:${versions.retrofit2}") api("com.squareup.retrofit2:retrofit-mock:${versions.retrofit2}") api("com.squareup.retrofit2:retrofit:${versions.retrofit2}") From 17f10c58c9c1e096d5232a611a9cc42f876cac9c Mon Sep 17 00:00:00 2001 From: j-sandy <30489233+j-sandy@users.noreply.github.com> Date: Tue, 24 Dec 2024 10:20:45 +0530 Subject: [PATCH 12/13] refactor(dependency): unpin snakeyaml and upgrade logback with spring boot upgrade to 3.x Spring boot 3.0.13 brings snakeyaml 1.33 and logback 1.4.11. So, upgrading and pinning logback to 1.4.14, till spring boot >=3.1.7, as more secure version. --- .../spinnaker-dependencies.gradle | 25 ++----------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/spinnaker-dependencies/spinnaker-dependencies.gradle b/spinnaker-dependencies/spinnaker-dependencies.gradle index 6d39001a4..24d41f22c 100644 --- a/spinnaker-dependencies/spinnaker-dependencies.gradle +++ b/spinnaker-dependencies/spinnaker-dependencies.gradle @@ -15,10 +15,10 @@ ext { groovy : "4.0.15", jsch : "0.1.54", jschAgentProxy : "0.0.9", - // spring boot 3.0.13 specifies logback 1.4.11. Pin to 1.2.13 to resolve + // spring boot 3.0.13 specifies logback 1.4.11. Pin to 1.4.14 to resolve // CVE-2023-6378 and CVE-2023-6481 until spring boot 3.1.7 which brings in // 1.4.14. See https://logback.qos.ch/news.html#1.3.12. - logback : "1.2.13", + logback : "1.4.14", protobuf : "3.25.2", openapi : "1.8.0", retrofit : "1.9.0", @@ -160,28 +160,7 @@ dependencies { } api("org.objenesis:objenesis:2.5.1") api("org.pf4j:pf4j:3.10.0") - // pf4j:3.10.0 brings in slf4j-api:2.0.6 which is not compatible with logback 1.2.x. - // And the upgraded logback version(1.3.8) is becoming incompatible with SpringBoot's LogbackLoggingSystem: - // java.lang.NoClassDefFoundError at LogbackLoggingSystem.java:293 - // Hence pinning slf4j-api at 1.7.36 which spring boot 2.7.18 brings in. - api("org.slf4j:slf4j-api"){ - version { - strictly("1.7.36") - } - } api("org.pf4j:pf4j-update:2.3.0") - - // Spring boot 2.7.18 brings in snakeyaml 1.30, which fails to parse yaml (including some - // k8s manifests). See https://github.com/spring-projects/spring-boot/issues/30159#issuecomment-1125969155. - // It's safe to upgrade beyond 1.29 with spring boot >= 2.6.12 (see - // https://github.com/spring-projects/spring-boot/issues/32228#issue-136185850.0). However, - // snakeyaml 1.32 has a feature to restrict the size of incoming data to 3 - // MB by default, and spring boot versions < 3.0.7 are not equipped to - // modify this limit. Use 1.31 in order to avoid file size limitation till - // upgrade >= 3.0.7 and to resolve CVE-2022-25857 and CVE-2022-38749. See - // https://bitbucket.org/snakeyaml/snakeyaml/issues/547/restrict-the-size-of-incoming-data - // and https://bitbucket.org/snakeyaml/snakeyaml/pull-requests/22. - api("org.yaml:snakeyaml:1.31") api("org.springdoc:springdoc-openapi-webmvc-core:${versions.openapi}") api("org.springdoc:springdoc-openapi-kotlin:${versions.openapi}") api("org.springdoc:springdoc-openapi-ui:${versions.openapi}") From 9b0bdd60d913a621130e77fa361b78a4cb22f8ca Mon Sep 17 00:00:00 2001 From: j-sandy <30489233+j-sandy@users.noreply.github.com> Date: Tue, 18 Feb 2025 17:49:33 +0530 Subject: [PATCH 13/13] refactor(dependency): upgrade wiremock as part of spring boot 3.x and spring cloud 2022.0.x upgrade Upgrading wiremock dependency to 3.0.4 and updating its coordinates. Wiremock [3.0.0](https://github.com/wiremock/wiremock/releases/tag/3.0.0) onwards 2 major breaking changes are introduced: 1. support for Java 17, dropping Java 8 support 2. Change the Maven repository groupID to org.wiremock https://github.com/wiremock/wiremock/releases?page=3 3. Change Artifact IDs of wiremock-jre8 and wiremock-jre8-standalone to wiremock and wiremock-standalone --- kork-retrofit2/kork-retrofit2.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kork-retrofit2/kork-retrofit2.gradle b/kork-retrofit2/kork-retrofit2.gradle index e56d6f70f..24134d3cd 100644 --- a/kork-retrofit2/kork-retrofit2.gradle +++ b/kork-retrofit2/kork-retrofit2.gradle @@ -16,6 +16,6 @@ dependencies { testImplementation "com.squareup.okhttp3:mockwebserver" testImplementation "com.squareup.retrofit2:retrofit-mock" - testImplementation "com.github.tomakehurst:wiremock-jre8" + testImplementation "com.github.tomakehurst:wiremock-jre8-standalone" }