Skip to content

Commit 67a05a3

Browse files
refactor(retrofit2): replace retrofit client with retrofit2 client (#6340)
* refactor(retrofit2): Upgrade EddaApi client from retrofit to retrofit2 * refactor(retrofit2): Upgrade MetadataService client from retrofit to retrofit2 * refactor(retrofit2): Upgrade Front50Service client from retrofit to retrofit2 * refactor(retrofit2): Upgrade AgentApi, KeyValueApi and CatalogApi clients from retrofit to retrofit2 * refactor(retrofit2): Upgrade Eureka, EurekaApi clients from retrofit to retrofit2 * refactor(retrofit2): Upgrade TokenService client from retrofit to retrofit2 * refactor(retrofit2): Upgrade DockerRegistryService client from retrofit to retrofit2 * refactor(retrofit2): remove all retrofit1 references * refactor(retrofit2): cleaned up unused comments, imports etc
1 parent ebba3ba commit 67a05a3

File tree

100 files changed

+933
-733
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

100 files changed

+933
-733
lines changed

clouddriver-appengine/clouddriver-appengine.gradle

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,8 @@ dependencies {
2020
implementation "io.spinnaker.kork:kork-cloud-config-server"
2121
implementation "io.spinnaker.kork:kork-moniker"
2222
implementation "io.spinnaker.kork:kork-retrofit"
23-
implementation "com.jakewharton.retrofit:retrofit1-okhttp3-client"
23+
implementation "io.spinnaker.kork:kork-web"
2424
implementation "com.netflix.spectator:spectator-api"
25-
implementation "com.squareup.retrofit:converter-jackson"
26-
implementation "com.squareup.retrofit:retrofit"
2725
implementation "commons-io:commons-io"
2826
implementation "org.apache.commons:commons-compress:1.21"
2927
implementation "org.apache.groovy:groovy"

clouddriver-appengine/src/main/java/com/netflix/spinnaker/clouddriver/appengine/artifacts/config/StorageConfigurationProperties.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222
import java.util.NoSuchElementException;
2323
import lombok.Data;
2424
import org.springframework.boot.context.properties.ConfigurationProperties;
25-
import retrofit.client.Response;
26-
import retrofit.mime.TypedByteArray;
2725

2826
@Data
2927
@ConfigurationProperties("artifacts.gcs")
@@ -33,10 +31,6 @@ public class StorageConfigurationProperties {
3331
public static class ManagedAccount {
3432
String name;
3533
String jsonPath;
36-
37-
public static String responseToString(Response response) {
38-
return new String(((TypedByteArray) response.getBody()).getBytes());
39-
}
4034
}
4135

4236
ManagedAccount getAccount(String name) {

clouddriver-appengine/src/main/java/com/netflix/spinnaker/clouddriver/appengine/config/AppengineConfigurationProperties.java

Lines changed: 20 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,21 @@
1818

1919
import com.fasterxml.jackson.databind.JsonNode;
2020
import com.fasterxml.jackson.databind.ObjectMapper;
21-
import com.jakewharton.retrofit.Ok3Client;
2221
import com.netflix.spinnaker.clouddriver.appengine.AppengineJobExecutor;
2322
import com.netflix.spinnaker.clouddriver.googlecommon.config.GoogleCommonManagedAccount;
24-
import com.netflix.spinnaker.kork.retrofit.exceptions.SpinnakerRetrofitErrorHandler;
23+
import com.netflix.spinnaker.config.DefaultServiceEndpoint;
24+
import com.netflix.spinnaker.kork.client.ServiceClientProvider;
25+
import com.netflix.spinnaker.kork.retrofit.Retrofit2SyncCall;
2526
import java.io.File;
2627
import java.util.ArrayList;
2728
import java.util.List;
2829
import lombok.Data;
2930
import lombok.EqualsAndHashCode;
30-
import okhttp3.OkHttpClient;
31+
import okhttp3.ResponseBody;
3132
import org.springframework.util.StringUtils;
32-
import retrofit.RestAdapter;
33-
import retrofit.client.Response;
34-
import retrofit.converter.JacksonConverter;
35-
import retrofit.http.GET;
36-
import retrofit.http.Headers;
37-
import retrofit.mime.TypedByteArray;
33+
import retrofit2.Call;
34+
import retrofit2.http.GET;
35+
import retrofit2.http.Headers;
3836

3937
@Data
4038
public class AppengineConfigurationProperties {
@@ -63,7 +61,10 @@ public static class ManagedAccount extends GoogleCommonManagedAccount {
6361
private List<String> omitVersions;
6462
private Long cachingIntervalSeconds;
6563

66-
public void initialize(AppengineJobExecutor jobExecutor, String gcloudPath) {
64+
public void initialize(
65+
AppengineJobExecutor jobExecutor,
66+
String gcloudPath,
67+
ServiceClientProvider serviceClientProvider) {
6768
if (!StringUtils.isEmpty(getJsonPath())) {
6869
jobExecutor.runCommand(
6970
List.of(gcloudPath, "auth", "activate-service-account", "--key-file", getJsonPath()));
@@ -83,45 +84,35 @@ public void initialize(AppengineJobExecutor jobExecutor, String gcloudPath) {
8384
throw new RuntimeException("Could not find read JSON configuration file.", e);
8485
}
8586
} else {
86-
MetadataService metadataService = createMetadataService();
87+
MetadataService metadataService = createMetadataService(serviceClientProvider);
8788

8889
try {
8990
if (StringUtils.isEmpty(getProject())) {
90-
setProject(responseToString(metadataService.getProject()));
91+
setProject(Retrofit2SyncCall.execute(metadataService.getProject()).string());
9192
}
9293
this.computedServiceAccountEmail =
93-
responseToString(metadataService.getApplicationDefaultServiceAccountEmail());
94+
Retrofit2SyncCall.execute(metadataService.getApplicationDefaultServiceAccountEmail())
95+
.string();
9496
} catch (Exception e) {
9597
throw new RuntimeException(
9698
"Could not find application default credentials for App Engine.", e);
9799
}
98100
}
99101
}
100102

101-
static MetadataService createMetadataService() {
102-
OkHttpClient okHttpClient = new OkHttpClient.Builder().retryOnConnectionFailure(true).build();
103-
RestAdapter restAdapter =
104-
new RestAdapter.Builder()
105-
.setEndpoint(metadataUrl)
106-
.setConverter(new JacksonConverter())
107-
.setClient(new Ok3Client(okHttpClient))
108-
.setErrorHandler(SpinnakerRetrofitErrorHandler.getInstance())
109-
.build();
110-
return restAdapter.create(MetadataService.class);
103+
static MetadataService createMetadataService(ServiceClientProvider serviceClientProvider) {
104+
return serviceClientProvider.getService(
105+
MetadataService.class, new DefaultServiceEndpoint("metadata", metadataUrl));
111106
}
112107

113108
interface MetadataService {
114109
@Headers("Metadata-Flavor: Google")
115110
@GET("/project/project-id")
116-
Response getProject();
111+
Call<ResponseBody> getProject();
117112

118113
@Headers("Metadata-Flavor: Google")
119114
@GET("/instance/service-accounts/default/email")
120-
Response getApplicationDefaultServiceAccountEmail();
121-
}
122-
123-
static String responseToString(Response response) {
124-
return new String(((TypedByteArray) response.getBody()).getBytes());
115+
Call<ResponseBody> getApplicationDefaultServiceAccountEmail();
125116
}
126117

127118
public enum GcloudReleaseTrack {

clouddriver-appengine/src/main/java/com/netflix/spinnaker/clouddriver/appengine/config/AppengineCredentialsConfiguration.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.netflix.spinnaker.credentials.MapBackedCredentialsRepository;
2828
import com.netflix.spinnaker.credentials.definition.AbstractCredentialsLoader;
2929
import com.netflix.spinnaker.credentials.poller.Poller;
30+
import com.netflix.spinnaker.kork.client.ServiceClientProvider;
3031
import com.netflix.spinnaker.kork.configserver.ConfigFileService;
3132
import org.apache.commons.lang3.StringUtils;
3233
import org.slf4j.Logger;
@@ -58,7 +59,8 @@ public CredentialsRepository<AppengineNamedAccountCredentials> appengineCredenti
5859
AppengineConfigurationProperties configurationProperties,
5960
AppengineJobExecutor jobExecutor,
6061
ConfigFileService configFileService,
61-
String clouddriverUserAgentApplicationName) {
62+
String clouddriverUserAgentApplicationName,
63+
ServiceClientProvider serviceClientProvider) {
6264
return new CredentialsTypeBaseConfiguration(
6365
applicationContext,
6466
CredentialsTypeProperties
@@ -74,7 +76,7 @@ public CredentialsRepository<AppengineNamedAccountCredentials> appengineCredenti
7476
if (StringUtils.isEmpty(gcloudPath)) {
7577
gcloudPath = "gcloud";
7678
}
77-
a.initialize(jobExecutor, gcloudPath);
79+
a.initialize(jobExecutor, gcloudPath, serviceClientProvider);
7880

7981
String jsonKey = configFileService.getContents(a.getJsonPath());
8082
return new AppengineNamedAccountCredentials.Builder()

clouddriver-appengine/src/test/java/com/netflix/spinnaker/clouddriver/appengine/config/AppEngineAccountCredentialsRepoTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.netflix.spinnaker.clouddriver.names.NamerRegistry;
1111
import com.netflix.spinnaker.credentials.CredentialsLifecycleHandler;
1212
import com.netflix.spinnaker.credentials.CredentialsRepository;
13+
import com.netflix.spinnaker.kork.client.ServiceClientProvider;
1314
import com.netflix.spinnaker.kork.configserver.ConfigFileService;
1415
import org.junit.jupiter.api.Test;
1516
import org.springframework.boot.context.annotation.UserConfigurations;
@@ -75,5 +76,10 @@ Registry getRegistry() {
7576
String getClouddriverUserAgentApplicationName() {
7677
return "clouddriverUserAgentApplicationName";
7778
}
79+
80+
@Bean
81+
ServiceClientProvider getServiceClientProvider() {
82+
return mock(ServiceClientProvider.class);
83+
}
7884
}
7985
}

clouddriver-artifacts/clouddriver-artifacts.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ dependencies {
3232
implementation "io.spinnaker.kork:kork-credentials"
3333
implementation "io.spinnaker.kork:kork-annotations"
3434
implementation "io.spinnaker.kork:kork-exceptions"
35+
implementation "io.spinnaker.kork:kork-retrofit"
3536
implementation "io.spinnaker.kork:kork-security"
3637
implementation "com.netflix.spectator:spectator-api"
3738
implementation("com.netflix.spectator:spectator-ext-aws") {

clouddriver-artifacts/src/main/java/com/netflix/spinnaker/clouddriver/artifacts/front50/Front50ArtifactCredentials.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.netflix.spinnaker.clouddriver.core.services.Front50Service;
2525
import com.netflix.spinnaker.kork.annotations.NonnullByDefault;
2626
import com.netflix.spinnaker.kork.artifacts.model.Artifact;
27+
import com.netflix.spinnaker.kork.retrofit.Retrofit2SyncCall;
2728
import com.netflix.spinnaker.security.AuthenticatedRequest;
2829
import java.io.ByteArrayInputStream;
2930
import java.io.IOException;
@@ -73,27 +74,33 @@ public InputStream download(Artifact artifact) throws IOException {
7374
pipelineTemplate =
7475
AuthenticatedRequest.allowAnonymous(
7576
() ->
76-
front50Service.getV2PipelineTemplate(
77-
result.pipelineTemplateId, "", result.version));
77+
Retrofit2SyncCall.execute(
78+
front50Service.getV2PipelineTemplate(
79+
result.pipelineTemplateId, "", result.version)));
7880
} else if (artifactId.contains(":")) {
7981
SplitResult result = splitReferenceOnToken(artifactId, ":");
8082
pipelineTemplate =
8183
AuthenticatedRequest.allowAnonymous(
8284
() ->
83-
front50Service.getV2PipelineTemplate(
84-
result.pipelineTemplateId, result.version, ""));
85+
Retrofit2SyncCall.execute(
86+
front50Service.getV2PipelineTemplate(
87+
result.pipelineTemplateId, result.version, "")));
8588
} else {
8689
pipelineTemplate =
8790
AuthenticatedRequest.allowAnonymous(
88-
() -> front50Service.getV2PipelineTemplate(artifactId, "", ""));
91+
() ->
92+
Retrofit2SyncCall.execute(
93+
front50Service.getV2PipelineTemplate(artifactId, "", "")));
8994
}
9095

9196
return new ByteArrayInputStream(objectMapper.writeValueAsBytes(pipelineTemplate));
9297
}
9398

9499
@Override
95100
public List<String> getArtifactNames() {
96-
return front50Service.listV2PipelineTemplates(Collections.singletonList("global")).stream()
101+
return Retrofit2SyncCall.execute(
102+
front50Service.listV2PipelineTemplates(Collections.singletonList("global")))
103+
.stream()
97104
.map(t -> (String) t.get("id"))
98105
.distinct()
99106
.collect(Collectors.toList());

clouddriver-aws/clouddriver-aws.gradle

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ dependencies {
4040
implementation "io.spinnaker.kork:kork-credentials"
4141
implementation "io.spinnaker.kork:kork-moniker"
4242
implementation "io.spinnaker.kork:kork-retrofit"
43-
implementation "com.squareup.retrofit:converter-jackson"
44-
implementation "com.squareup.retrofit:retrofit"
43+
implementation "io.spinnaker.kork:kork-web"
44+
implementation "com.squareup.retrofit2:converter-jackson"
4545
implementation "io.reactivex:rxjava"
4646
implementation "org.apache.httpcomponents:httpclient"
4747
implementation "org.apache.httpcomponents:httpcore"
@@ -63,6 +63,7 @@ dependencies {
6363
testImplementation "org.spockframework:spock-spring"
6464
testImplementation "org.springframework.boot:spring-boot-starter-test"
6565
testImplementation "org.springframework:spring-test"
66+
testImplementation "com.squareup.retrofit2:retrofit-mock"
6667

6768
integrationImplementation project(":clouddriver-web")
6869
integrationImplementation "org.springframework:spring-test"

clouddriver-aws/src/integration/java/com/netflix/spinnaker/clouddriver/aws/test/ModifyServerGroupLaunchTemplateSpec.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
import org.springframework.beans.factory.annotation.Autowired;
8282
import org.springframework.context.ApplicationContext;
8383
import org.springframework.test.context.ActiveProfiles;
84+
import retrofit2.mock.Calls;
8485

8586
/**
8687
* Test class for general test cases related to CreateServerGroup operation. Note: launch template
@@ -178,7 +179,7 @@ public void setup() {
178179
Map applicationMap = new HashMap();
179180
applicationMap.put("application", "myAwsApp");
180181
applicationMap.put("legacyUdf", null);
181-
when(mockFront50Service.getApplication(ASG_NAME)).thenReturn(applicationMap);
182+
when(mockFront50Service.getApplication(ASG_NAME)).thenReturn(Calls.response(applicationMap));
182183

183184
// mock EC2 responses
184185
when(mockRegionScopedProvider.getAmazonEC2()).thenReturn(mockEc2);

clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/deploy/userdata/LocalFileUserDataProvider.groovy

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import com.netflix.spinnaker.clouddriver.core.services.Front50Service
2222
import com.netflix.spinnaker.kork.annotations.VisibleForTesting
2323
import com.netflix.spinnaker.kork.core.RetrySupport
2424
import com.netflix.spinnaker.kork.exceptions.SpinnakerException
25+
import com.netflix.spinnaker.kork.retrofit.Retrofit2SyncCall
2526
import com.netflix.spinnaker.kork.retrofit.exceptions.SpinnakerHttpException
2627
import com.netflix.spinnaker.kork.retrofit.exceptions.SpinnakerNetworkException
2728
import com.netflix.spinnaker.kork.retrofit.exceptions.SpinnakerServerException
@@ -52,7 +53,7 @@ class LocalFileUserDataProvider implements UserDataProvider {
5253
boolean isLegacyUdf(String account, String applicationName) {
5354
Closure<Boolean> result = {
5455
try {
55-
Map application = front50Service.getApplication(applicationName)
56+
Map application = Retrofit2SyncCall.execute(front50Service.getApplication(applicationName))
5657
if (application.legacyUdf == null) {
5758
return localFileUserDataProperties.defaultLegacyUdf
5859
}

clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/edda/EddaApi.groovy

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,13 @@ import com.netflix.spinnaker.clouddriver.aws.model.edda.EddaRule
2323
import com.netflix.spinnaker.clouddriver.aws.model.edda.LoadBalancerInstanceState
2424
import com.netflix.spinnaker.clouddriver.aws.model.edda.TargetGroupAttributes
2525
import com.netflix.spinnaker.clouddriver.aws.model.edda.TargetGroupHealth
26-
import retrofit.http.GET
27-
import retrofit.http.Path
26+
import retrofit2.Call
27+
import retrofit2.http.GET
28+
import retrofit2.http.Path
2829

2930
interface EddaApi {
3031
@GET('/REST/v2/view/loadBalancerInstances;_expand')
31-
List<LoadBalancerInstanceState> loadBalancerInstances()
32+
Call<List<LoadBalancerInstanceState>> loadBalancerInstances()
3233

3334
@GET('/REST/v2/view/targetGroupHealth;_expand')
3435
List<TargetGroupHealth> targetGroupHealth()

clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/edda/EddaApiFactory.groovy

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,21 @@
1616

1717
package com.netflix.spinnaker.clouddriver.aws.edda
1818

19-
import com.netflix.spinnaker.kork.retrofit.exceptions.SpinnakerRetrofitErrorHandler
20-
import retrofit.RestAdapter
21-
import retrofit.converter.Converter
19+
import com.netflix.spinnaker.config.DefaultServiceEndpoint
20+
import com.netflix.spinnaker.kork.client.ServiceClientProvider
2221

2322
import java.util.regex.Pattern
2423

2524
class EddaApiFactory {
26-
private Converter eddaConverter
25+
private ServiceClientProvider serviceClientProvider
2726

28-
EddaApiFactory(Converter eddaConverter) {
29-
this.eddaConverter = eddaConverter
27+
EddaApiFactory(ServiceClientProvider serviceClientProvider) {
28+
this.serviceClientProvider = serviceClientProvider
3029
}
3130

3231
public EddaApi createApi(String endpointTemplate, String region) {
3332
if (endpointTemplate) {
34-
return new RestAdapter.Builder()
35-
.setConverter(eddaConverter)
36-
.setEndpoint(endpointTemplate.replaceAll(Pattern.quote('{{region}}'), region))
37-
.setErrorHandler(SpinnakerRetrofitErrorHandler.getInstance())
38-
.build()
39-
.create(EddaApi)
33+
return serviceClientProvider.getService(EddaApi, new DefaultServiceEndpoint("eddaapi", endpointTemplate.replaceAll(Pattern.quote('{{region}}'), region)))
4034
}
4135
return null
4236
}

clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/edda/EddaConfiguration.groovy

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,16 @@
1616

1717
package com.netflix.spinnaker.clouddriver.aws.edda
1818

19-
import com.fasterxml.jackson.databind.DeserializationFeature
20-
import com.fasterxml.jackson.databind.ObjectMapper
21-
import com.netflix.awsobjectmapper.AmazonObjectMapper
22-
import com.netflix.awsobjectmapper.AmazonObjectMapperConfigurer
19+
import com.netflix.spinnaker.kork.client.ServiceClientProvider
2320
import org.springframework.context.annotation.Bean
2421
import org.springframework.context.annotation.Configuration
25-
import retrofit.converter.Converter
26-
import retrofit.converter.JacksonConverter
2722

2823
@Configuration
2924
class EddaConfiguration {
30-
@Bean
31-
Converter eddaConverter() {
32-
new JacksonConverter(AmazonObjectMapperConfigurer.createConfigured()
33-
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES))
34-
}
3525

3626
@Bean
37-
EddaApiFactory eddaApiFactory(Converter eddaConverter) {
38-
new EddaApiFactory(eddaConverter)
27+
EddaApiFactory eddaApiFactory(ServiceClientProvider serviceClientProvider) {
28+
new EddaApiFactory(serviceClientProvider)
3929
}
4030

4131
}

0 commit comments

Comments
 (0)