-
Notifications
You must be signed in to change notification settings - Fork 3.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
SLOWLOG GET for Redis 4.0+ #2084
Conversation
@gkorland @marcosnils Apparently, |
@sazzad16 can you please resolve the conflict? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@gkorland @marcosnils Apparently,
List<byte[]> slowlogGetBinary()
is a bug. But the fixList<Object> slowlogGetBinary()
breaks backward compatibility. So, now, should we consider this PR for 4.0 or 3.2?
Perhaps we should add new methods and deprecate the only one, to maintain backward compatibility
@gkorland done |
@gkorland PING |
… 2.5.14 While upgrading the spring-boot, the compilation of kork-jedis module failed with following error: ``` > Task :kork-jedis:compileJava FAILED /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2652: error: slowlogGetBinary(long) in InstrumentedJedis cannot implement slowlogGetBinary(long) in AdvancedBinaryJedisCommands public List<byte[]> slowlogGetBinary(long entries) { ^ return type List<byte[]> is not compatible with List<Object> /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2646: error: slowlogGetBinary() in InstrumentedJedis cannot implement slowlogGetBinary() in AdvancedBinaryJedisCommands public List<byte[]> slowlogGetBinary() { ^ return type List<byte[]> is not compatible with List<Object> /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2645: error: method does not override or implement a method from a supertype @OverRide ^ /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2648: error: incompatible types: inference variable T has incompatible bounds return instrumented(command, () -> delegated.slowlogGetBinary()); ^ lower bounds: List<byte[]>,Object lower bounds: List<Object> where T is a type-variable: T extends Object declared in method <T>instrumented(String,Callable<T>) /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2651: error: method does not override or implement a method from a supertype @OverRide ^ /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2654: error: incompatible types: inference variable T has incompatible bounds return instrumented(command, () -> delegated.slowlogGetBinary(entries)); ^ lower bounds: List<byte[]>,Object lower bounds: List<Object> where T is a type-variable: T extends Object declared in method <T>instrumented(String,Callable<T>) ``` ``` > Task :kork-jedis:compileJava FAILED /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedisPool.java:84: error: name clash: initPool(GenericObjectPoolConfig,PooledObjectFactory<Jedis>) in InstrumentedJedisPool and initPool(GenericObjectPoolConfig<Jedis>,PooledObjectFactory<Jedis>) in Pool have the same erasure, yet neither overrides the other public void initPool(GenericObjectPoolConfig poolConfig, PooledObjectFactory<Jedis> factory) { ^ /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedisPool.java:83: error: method does not override or implement a method from a supertype @OverRide ``` The root cause is the upgrade of redis.clients:jedis from 3.3.0 to 3.6.3 as transitive dependency of spring-boot, that brings the breaking changes in APIs as mentioned below: redis/jedis#2084 redis/jedis#2361 Fixed the issue with required code changes.
… 2.5.14 While upgrading the spring-boot, the compilation of kork-jedis module failed with following error: ``` > Task :kork-jedis:compileJava FAILED /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2652: error: slowlogGetBinary(long) in InstrumentedJedis cannot implement slowlogGetBinary(long) in AdvancedBinaryJedisCommands public List<byte[]> slowlogGetBinary(long entries) { ^ return type List<byte[]> is not compatible with List<Object> /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2646: error: slowlogGetBinary() in InstrumentedJedis cannot implement slowlogGetBinary() in AdvancedBinaryJedisCommands public List<byte[]> slowlogGetBinary() { ^ return type List<byte[]> is not compatible with List<Object> /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2645: error: method does not override or implement a method from a supertype @OverRide ^ /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2648: error: incompatible types: inference variable T has incompatible bounds return instrumented(command, () -> delegated.slowlogGetBinary()); ^ lower bounds: List<byte[]>,Object lower bounds: List<Object> where T is a type-variable: T extends Object declared in method <T>instrumented(String,Callable<T>) /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2651: error: method does not override or implement a method from a supertype @OverRide ^ /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2654: error: incompatible types: inference variable T has incompatible bounds return instrumented(command, () -> delegated.slowlogGetBinary(entries)); ^ lower bounds: List<byte[]>,Object lower bounds: List<Object> where T is a type-variable: T extends Object declared in method <T>instrumented(String,Callable<T>) ``` ``` > Task :kork-jedis:compileJava FAILED /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedisPool.java:84: error: name clash: initPool(GenericObjectPoolConfig,PooledObjectFactory<Jedis>) in InstrumentedJedisPool and initPool(GenericObjectPoolConfig<Jedis>,PooledObjectFactory<Jedis>) in Pool have the same erasure, yet neither overrides the other public void initPool(GenericObjectPoolConfig poolConfig, PooledObjectFactory<Jedis> factory) { ^ /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedisPool.java:83: error: method does not override or implement a method from a supertype @OverRide ``` The root cause is the upgrade of redis.clients:jedis from 3.3.0 to 3.6.3 as transitive dependency of spring-boot, that brings the breaking changes in APIs as mentioned below: redis/jedis#2084 redis/jedis#2361 Fixed the issue with required code changes.
… 2.5.14 While upgrading the spring-boot, the compilation of kork-jedis module failed with following error: ``` > Task :kork-jedis:compileJava FAILED /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2652: error: slowlogGetBinary(long) in InstrumentedJedis cannot implement slowlogGetBinary(long) in AdvancedBinaryJedisCommands public List<byte[]> slowlogGetBinary(long entries) { ^ return type List<byte[]> is not compatible with List<Object> /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2646: error: slowlogGetBinary() in InstrumentedJedis cannot implement slowlogGetBinary() in AdvancedBinaryJedisCommands public List<byte[]> slowlogGetBinary() { ^ return type List<byte[]> is not compatible with List<Object> /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2645: error: method does not override or implement a method from a supertype @OverRide ^ /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2648: error: incompatible types: inference variable T has incompatible bounds return instrumented(command, () -> delegated.slowlogGetBinary()); ^ lower bounds: List<byte[]>,Object lower bounds: List<Object> where T is a type-variable: T extends Object declared in method <T>instrumented(String,Callable<T>) /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2651: error: method does not override or implement a method from a supertype @OverRide ^ /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2654: error: incompatible types: inference variable T has incompatible bounds return instrumented(command, () -> delegated.slowlogGetBinary(entries)); ^ lower bounds: List<byte[]>,Object lower bounds: List<Object> where T is a type-variable: T extends Object declared in method <T>instrumented(String,Callable<T>) ``` ``` > Task :kork-jedis:compileJava FAILED /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedisPool.java:84: error: name clash: initPool(GenericObjectPoolConfig,PooledObjectFactory<Jedis>) in InstrumentedJedisPool and initPool(GenericObjectPoolConfig<Jedis>,PooledObjectFactory<Jedis>) in Pool have the same erasure, yet neither overrides the other public void initPool(GenericObjectPoolConfig poolConfig, PooledObjectFactory<Jedis> factory) { ^ /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedisPool.java:83: error: method does not override or implement a method from a supertype @OverRide ``` The root cause is the upgrade of redis.clients:jedis from 3.3.0 to 3.6.3 as transitive dependency of spring-boot, that brings the breaking changes in APIs as mentioned below: redis/jedis#2084 redis/jedis#2361 Fixed the issue with required code changes.
… 2.5.14 While upgrading the spring-boot, the compilation of kork-jedis module failed with following error: ``` > Task :kork-jedis:compileJava FAILED /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2652: error: slowlogGetBinary(long) in InstrumentedJedis cannot implement slowlogGetBinary(long) in AdvancedBinaryJedisCommands public List<byte[]> slowlogGetBinary(long entries) { ^ return type List<byte[]> is not compatible with List<Object> /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2646: error: slowlogGetBinary() in InstrumentedJedis cannot implement slowlogGetBinary() in AdvancedBinaryJedisCommands public List<byte[]> slowlogGetBinary() { ^ return type List<byte[]> is not compatible with List<Object> /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2645: error: method does not override or implement a method from a supertype @OverRide ^ /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2648: error: incompatible types: inference variable T has incompatible bounds return instrumented(command, () -> delegated.slowlogGetBinary()); ^ lower bounds: List<byte[]>,Object lower bounds: List<Object> where T is a type-variable: T extends Object declared in method <T>instrumented(String,Callable<T>) /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2651: error: method does not override or implement a method from a supertype @OverRide ^ /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2654: error: incompatible types: inference variable T has incompatible bounds return instrumented(command, () -> delegated.slowlogGetBinary(entries)); ^ lower bounds: List<byte[]>,Object lower bounds: List<Object> where T is a type-variable: T extends Object declared in method <T>instrumented(String,Callable<T>) ``` ``` > Task :kork-jedis:compileJava FAILED /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedisPool.java:84: error: name clash: initPool(GenericObjectPoolConfig,PooledObjectFactory<Jedis>) in InstrumentedJedisPool and initPool(GenericObjectPoolConfig<Jedis>,PooledObjectFactory<Jedis>) in Pool have the same erasure, yet neither overrides the other public void initPool(GenericObjectPoolConfig poolConfig, PooledObjectFactory<Jedis> factory) { ^ /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedisPool.java:83: error: method does not override or implement a method from a supertype @OverRide ``` The root cause is the upgrade of redis.clients:jedis from 3.3.0 to 3.6.3 as transitive dependency of spring-boot, that brings the breaking changes in APIs as mentioned below: redis/jedis#2084 redis/jedis#2361 Fixed the issue with required code changes.
* chore(dependencies): Upgrade Spring Boot to 2.5.14 * fix(dependency): Issue with kork-jedis while upgrading spring-boot to 2.5.14 While upgrading the spring-boot, the compilation of kork-jedis module failed with following error: ``` > Task :kork-jedis:compileJava FAILED /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2652: error: slowlogGetBinary(long) in InstrumentedJedis cannot implement slowlogGetBinary(long) in AdvancedBinaryJedisCommands public List<byte[]> slowlogGetBinary(long entries) { ^ return type List<byte[]> is not compatible with List<Object> /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2646: error: slowlogGetBinary() in InstrumentedJedis cannot implement slowlogGetBinary() in AdvancedBinaryJedisCommands public List<byte[]> slowlogGetBinary() { ^ return type List<byte[]> is not compatible with List<Object> /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2645: error: method does not override or implement a method from a supertype @OverRide ^ /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2648: error: incompatible types: inference variable T has incompatible bounds return instrumented(command, () -> delegated.slowlogGetBinary()); ^ lower bounds: List<byte[]>,Object lower bounds: List<Object> where T is a type-variable: T extends Object declared in method <T>instrumented(String,Callable<T>) /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2651: error: method does not override or implement a method from a supertype @OverRide ^ /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedis.java:2654: error: incompatible types: inference variable T has incompatible bounds return instrumented(command, () -> delegated.slowlogGetBinary(entries)); ^ lower bounds: List<byte[]>,Object lower bounds: List<Object> where T is a type-variable: T extends Object declared in method <T>instrumented(String,Callable<T>) ``` ``` > Task :kork-jedis:compileJava FAILED /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedisPool.java:84: error: name clash: initPool(GenericObjectPoolConfig,PooledObjectFactory<Jedis>) in InstrumentedJedisPool and initPool(GenericObjectPoolConfig<Jedis>,PooledObjectFactory<Jedis>) in Pool have the same erasure, yet neither overrides the other public void initPool(GenericObjectPoolConfig poolConfig, PooledObjectFactory<Jedis> factory) { ^ /kork/kork-jedis/src/main/java/com/netflix/spinnaker/kork/jedis/telemetry/InstrumentedJedisPool.java:83: error: method does not override or implement a method from a supertype @OverRide ``` The root cause is the upgrade of redis.clients:jedis from 3.3.0 to 3.6.3 as transitive dependency of spring-boot, that brings the breaking changes in APIs as mentioned below: redis/jedis#2084 redis/jedis#2361 Fixed the issue with required code changes. * fix(dependency): Issue with kork-web while upgrading spring-boot to 2.5.14 While upgrading the spring-boot, the compilation of kork-web module failed with following error: ``` > Task :kork-web:compileGroovy FAILED /kork/kork-web/src/main/java/com/netflix/spinnaker/kork/web/controllers/GenericErrorController.java:41: error: incompatible types: Boolean cannot be converted to ErrorAttributeOptions errorAttributes.getErrorAttributes(webRequest, includeStackTrace); ^ ``` ``` /kork/kork-web/src/main/java/com/netflix/spinnaker/kork/web/controllers/GenericErrorController.java:51: error: method does not override or implement a method from a supertype @OverRide ^ ``` ``` > Task :kork-web:compileGroovy /kork/kork-web/src/main/java/com/netflix/spinnaker/kork/web/selector/v2/SelectableService.java uses unchecked or unsafe operations. startup failed: /kork/kork-web/src/main/groovy/com/netflix/spinnaker/config/ErrorConfiguration.groovy: 37: Method 'getErrorAttributes' from class 'com.netflix.spinnaker.config.ErrorConfiguration$1' does not override method from its superclass or interfaces but is annotated with @OverRide. @ line 37, column 7. @OverRide ^ ``` The root cause is the deprecation of following methods in Spring boot 2.3.x and now removal of code from spring boot 2.5.x: ErrorAttributes.getErrorAttributes(ServerRequest, boolean) spring-projects/spring-boot@158933c spring-projects/spring-boot#21324 ErrorController.getErrorPath() spring-projects/spring-boot#19844 Fixed the issue with required code changes. * chore (dependency): pinning the io.rest-assured to 4.2.0 Spring boot 2.5.14 upgrade brings io.rest-assured 4.3.3 as transitive dependency. io.rest-assured 4.3.x require groovy 3.0.2. So, pinning the nearest version using groovy 2.x. After upgrading the groovy to 3.x, pin can be removed. [https://github.com/rest-assured/rest-assured/blob/9b683130c93188cabdef850e89d0c9417d847a17/changelog.txt#L200] * chore(dependency): pinning ch.qos.logback to 1.2.10 Spring boot 2.5.14 upgrade brings ch.qos.logback 1.2.11 as transitive dependency. A bug is reported in 1.2.11 [https://jira.qos.ch/browse/LOGBACK-1623] and it is fixed in 1.2.12. However the 1.2.12 package has not been released yet. So, pinning the version to 1.2.10 untill required package is released. * chore(dependency): Pinning groovy to 2.5.15 with spring boot 2.5.x upgrade Spring boot 2.5.x brings groovy 3.x as its transitive dependency. https://docs.spring.io/spring-boot/docs/2.5.14/reference/html/dependency-versions.html#appendix.dependency-versions Currently spinnaker services use gradle 6.x, that does not support groovy 3.x. https://docs.gradle.org/6.8.1/userguide/compatibility.html Restricting groovy to 2.5.x, till upgrade of gradle to 7.x. https://docs.gradle.org/current/userguide/resolution_rules.html#sec:denying_version To avoid transitive upgrade of groovy, pinning it with enforcedPlatform() closure. It forces version for internal submodules of kork as well as for all the consumer spinnaker services. * chore(dependency): pin org.liquibase to 3.10.3 While upgrading spring boot 2.5.x, liquibase version transitively upgrades to 4.3.5. The liquibase version starting from 4.0.0 till 4.12.0 has an [issue](liquibase/liquibase#2818) w.r.t parsing the changelog file, if found at multiple places within the classpath and encounter the below error: ``` Caused by: liquibase.exception.ChangeLogParseException: Error parsing classpath:db/healthcheck.yml at liquibase.parser.core.yaml.YamlChangeLogParser.parse(YamlChangeLogParser.java:89) at liquibase.Liquibase.getDatabaseChangeLog(Liquibase.java:369) at liquibase.Liquibase.lambda$update$1(Liquibase.java:224) at liquibase.Scope.lambda$child$0(Scope.java:180) at liquibase.Scope.child(Scope.java:189) at liquibase.Scope.child(Scope.java:179) at liquibase.Scope.child(Scope.java:158) at liquibase.Liquibase.runInScope(Liquibase.java:2405) at liquibase.Liquibase.update(Liquibase.java:211) at liquibase.Liquibase.update(Liquibase.java:197) at liquibase.integration.spring.SpringLiquibase.performUpdate(SpringLiquibase.java:314) at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:269) at com.netflix.spinnaker.kork.sql.migration.SpringLiquibaseProxy.afterPropertiesSet(SpringLiquibaseProxy.kt:65) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1858) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1795) ... 87 more Caused by: java.io.IOException: Found 2 files that match classpath:db/healthcheck.yml: file:/spinnaker/kork/kork-sql/build/resources/main/db/healthcheck.yml, jar:file:/spinnaker/kork/kork-sql/build/libs/kork-sql.jar!/db/healthcheck.yml at liquibase.resource.AbstractResourceAccessor.openStream(AbstractResourceAccessor.java:25) at liquibase.parser.core.yaml.YamlChangeLogParser.parse(YamlChangeLogParser.java:25) ... 101 more ``` This duplicate changelog issue is fixed in 4.13.0, but identified another issue that gets introduced in 4.13.0. This [issue](liquibase/liquibase#3091) hinders the migration of sql scripts available in [orca](https://github.com/spinnaker/orca/tree/master/orca-sql/src/main/resources/db/changelog), containing `afterColumn`, with a validation error for postgresql. The efforts to resolve the issue are in progress, so pinning the version of org.liquibase:liquibase-core to 3.10.3 (latest of 3.x series).
Resolves #2076