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
After the upgrade, found the following errors while building the code:
kayenta/kayenta-core/src/main/java/com/netflix/kayenta/events/CanaryExecutionCompletedEvent.java:19: error: package javax.validation.constraints does not exist
import javax.validation.constraints.NotNull;
^
kayenta/kayenta-core/src/main/java/com/netflix/kayenta/canary/CanaryExecutionStatusResponse.java:20: error: package javax.validation.constraints does not exist
import javax.validation.constraints.NotNull;
^
kayenta/kayenta-core/src/main/java/com/netflix/kayenta/canary/CanaryConfig.java:22: error: package javax.validation.constraints does not exist
import javax.validation.constraints.NotNull;
^
kayenta/kayenta-core/src/main/java/com/netflix/kayenta/canary/CanaryExecutionRequest.java:23: error: package javax.validation.constraints does not exist
import javax.validation.constraints.NotNull;
^
kayenta/kayenta-core/src/main/java/com/netflix/kayenta/canary/CanaryScopePair.java:18: error: package javax.validation.constraints does not exist
import javax.validation.constraints.NotNull;
^
* What went wrong:
Execution failed for task ':kayenta-core:compileJava'.
> Could not resolve all files for configuration ':kayenta-core:compileClasspath'.
> Could not find javax.validation:validation-api:.
Required by:
project :kayenta-core
This issue arises as Spring Boot 3 now relies on Jakarta packages instead of javax. Addressed build failure by replacing jakarta with javax. Reference Links: https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide#jakarta-ee
===========================================================================
> Task :kayenta-sql:compileJava
kayenta/kayenta-sql/src/main/java/com/netflix/kayenta/sql/storage/SqlStorageService.java:69: error: cannot find symbol
.findById(objectKey)
^
symbol: method findById(String)
location: variable sqlCanaryArchiveRepo of type SqlCanaryArchiveRepo
kayenta/kayenta-sql/src/main/java/com/netflix/kayenta/sql/storage/SqlStorageService.java:78: error: cannot find symbol
.findById(objectKey)
^
symbol: method findById(String)
location: variable sqlCanaryConfigRepo of type SqlCanaryConfigRepo
kayenta/kayenta-sql/src/main/java/com/netflix/kayenta/sql/storage/SqlStorageService.java:87: error: cannot find symbol
.findById(objectKey)
^
symbol: method findById(String)
location: variable sqlMetricSetPairsRepo of type SqlMetricSetPairsRepo
kayenta/kayenta-sql/src/main/java/com/netflix/kayenta/sql/storage/SqlStorageService.java:96: error: cannot find symbol
.findById(objectKey)
^
symbol: method findById(String)
location: variable sqlMetricSetsRepo of type SqlMetricSetsRepo
kayenta/kayenta-sql/src/main/java/com/netflix/kayenta/sql/storage/SqlStorageService.java:119: error: cannot find symbol
sqlCanaryArchiveRepo.save(draftRecord);
^
symbol: method save(SqlCanaryArchive)
location: variable sqlCanaryArchiveRepo of type SqlCanaryArchiveRepo
kayenta/kayenta-sql/src/main/java/com/netflix/kayenta/sql/storage/SqlStorageService.java:129: error: cannot find symbol
sqlCanaryConfigRepo.save(draftRecord);
^
symbol: method save(SqlCanaryConfig)
location: variable sqlCanaryConfigRepo of type SqlCanaryConfigRepo
kayenta/kayenta-sql/src/main/java/com/netflix/kayenta/sql/storage/SqlStorageService.java:139: error: cannot find symbol
sqlMetricSetPairsRepo.save(draftRecord);
^
symbol: method save(SqlMetricSetPairs)
location: variable sqlMetricSetPairsRepo of type SqlMetricSetPairsRepo
kayenta/kayenta-sql/src/main/java/com/netflix/kayenta/sql/storage/SqlStorageService.java:149: error: cannot find symbol
sqlMetricSetsRepo.save(draftRecord);
^
symbol: method save(SqlMetricSets)
location: variable sqlMetricSetsRepo of type SqlMetricSetsRepo
kayenta/kayenta-sql/src/main/java/com/netflix/kayenta/sql/storage/SqlStorageService.java:159: error: cannot find symbol
sqlCanaryArchiveRepo.deleteById(objectKey);
^
symbol: method deleteById(String)
location: variable sqlCanaryArchiveRepo of type SqlCanaryArchiveRepo
kayenta/kayenta-sql/src/main/java/com/netflix/kayenta/sql/storage/SqlStorageService.java:164: error: cannot find symbol
sqlCanaryConfigRepo.deleteById(objectKey);
^
symbol: method deleteById(String)
location: variable sqlCanaryConfigRepo of type SqlCanaryConfigRepo
kayenta/kayenta-sql/src/main/java/com/netflix/kayenta/sql/storage/SqlStorageService.java:169: error: cannot find symbol
sqlMetricSetPairsRepo.deleteById(objectKey);
^
symbol: method deleteById(String)
location: variable sqlMetricSetPairsRepo of type SqlMetricSetPairsRepo
kayenta/kayenta-sql/src/main/java/com/netflix/kayenta/sql/storage/SqlStorageService.java:174: error: cannot find symbol
sqlMetricSetsRepo.deleteById(objectKey);
^
symbol: method deleteById(String)
location: variable sqlMetricSetsRepo of type SqlMetricSetsRepo
kayenta/kayenta-sql/src/main/java/com/netflix/kayenta/sql/storage/SqlStorageService.java:185: error: no suitable method found for findAll(no arguments)
return StreamSupport.stream(sqlCanaryArchiveRepo.findAll().spliterator(), false)
^
method PagingAndSortingRepository.findAll(Sort) is not applicable
(actual and formal argument lists differ in length)
method PagingAndSortingRepository.findAll(Pageable) is not applicable
(actual and formal argument lists differ in length)
kayenta/kayenta-sql/src/main/java/com/netflix/kayenta/sql/storage/SqlStorageService.java:191: error: no suitable method found for findAll(no arguments)
return StreamSupport.stream(sqlCanaryConfigRepo.findAll().spliterator(), false)
^
method PagingAndSortingRepository.findAll(Sort) is not applicable
(actual and formal argument lists differ in length)
method PagingAndSortingRepository.findAll(Pageable) is not applicable
(actual and formal argument lists differ in length)
kayenta/kayenta-sql/src/main/java/com/netflix/kayenta/sql/storage/SqlStorageService.java:197: error: no suitable method found for findAll(no arguments)
return StreamSupport.stream(sqlMetricSetPairsRepo.findAll().spliterator(), false)
^
method PagingAndSortingRepository.findAll(Sort) is not applicable
(actual and formal argument lists differ in length)
method PagingAndSortingRepository.findAll(Pageable) is not applicable
(actual and formal argument lists differ in length)
kayenta/kayenta-sql/src/main/java/com/netflix/kayenta/sql/storage/SqlStorageService.java:203: error: no suitable method found for findAll(no arguments)
return StreamSupport.stream(sqlMetricSetsRepo.findAll().spliterator(), false)
^
method PagingAndSortingRepository.findAll(Sort) is not applicable
(actual and formal argument lists differ in length)
method PagingAndSortingRepository.findAll(Pageable) is not applicable
(actual and formal argument lists differ in length)
Note: kayenta/kayenta-sql/src/main/java/com/netflix/kayenta/sql/storage/SqlStorageService.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
16 errors
Spring Data 3.0 removed the inheritance of PagingAndSortingRepository from CrudRepository, causing missing method errors for findById(), save(), deleteById(), and findAll(). Updating repository interfaces to extend CrudRepository to restore CRUD functionality.
Ref: Spring Data 2022.0 (Turing) Release Notes https://github.com/spring-projects/spring-data-commons/wiki/Spring-Data-2022.0-%28Turing%29-Release-Notes#sorting-repositories-no-longer-inherit-from-crud-repositories
====================================================================
kayenta/kayenta-web/src/main/java/com/netflix/kayenta/config/WebSecurityConfig.java:23: 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
kayenta/kayenta-web/src/main/java/com/netflix/kayenta/config/WebSecurityConfig.java:35: error: cannot find symbol
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
^
symbol: class WebSecurityConfigurerAdapter
The error occurs because WebSecurityConfigurerAdapter has been deprecated and removed in Spring Security 6.x, which is used by Spring Boot 3.x. Replaced the use of WebSecurityConfigurerAdapter with a configuration that defines SecurityFilterChain bean.
Reference Link: https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter
========================================================================
> Task :kayenta-web:compileJava FAILED
kayenta/kayenta-web/src/main/java/com/netflix/kayenta/controllers/CanaryController.java:225: error: cannot find symbol
.toBlocking()
^
symbol: method toBlocking()
location: class Single<List<PipelineExecution>>
1 error
In Spring Boot 2, RxJava was included as a transitive dependency. As part of the upgrade to Spring Boot 3, RxJava was removed, and RxJava3 has been adopted to ensure compatibility with the updated framework. Updated the code to use RxJava3 instead of RxJava.
References: https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide#rxjava
=========================================================================