kayenta icon indicating copy to clipboard operation
kayenta copied to clipboard

chore(dependency): upgrade spring boot from 2.7.x to 3.0.x and spring cloud from 2021.0.x to 2022.0.x

Open rahul-chekuri opened this issue 11 months ago • 0 comments

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

=========================================================================

rahul-chekuri avatar Apr 04 '25 14:04 rahul-chekuri