Skip to content

Commit 6a0e784

Browse files
refactor(retrofit2): replace retrofit client with retrofit2 client (#1466)
* refactor(retrofit2): upgrade KeelService retrofit API interface to retrofit2 * refactor(retrofit2): upgrade CDEventsSenderClient retrofit API interface to retrofit2 * refactor(retrofit2): upgrade BearychatService retrofit API interface to retrofit2 * refactor(retrofit2): upgrade JiraService retrofit API interface to retrofit2 * refactor(retrofit2): upgrade GoogleChatClient retrofit API interface to retrofit2 * refactor(retrofit2): upgrade GithubService retrofit API interface to retrofit2 * refactor(retrofit2): upgrade SlackClient retrofit API interface to retrofit2 * refactor(retrofit2): upgrade PagerDutyService retrofit API interface to retrofit2 * refactor(retrofit2): upgrade MicrosoftTeamsClient retrofit API interface to retrofit2 * refactor(retrofit2): upgrade TelemetryService retrofit API interface to retrofit2 * refactor(retrofit2): move Retrofit2TestConfig from echo-notification/src/test/.. to echo-test/src/main/.. so that other modules can utilize * refactor(retrofit2): upgrade RestService retrofit API interface to retrofit2 * refactor(retrofit2): upgrade TwilioService retrofit API interface to retrofit2 * refactor(retrofit2): upgrade OrcaService retrofit API interface to retrofit2 * refactor(retrofit2): upgrade IgorService retrofit API interface to retrofit2 * refactor(retrofit2): upgrade SlackHookService retrofit API interface to retrofit2 * refactor(retrofit2): upgrade SpinnakerService retrofit API interface to retrofit2 * refactor(retrofit2): upgrade Front50Service retrofit API interface to retrofit2 * refactor(retrofit2): Remove RetrofitError from JiraNotificationService * refactor(retrofit2): remove remaining references to retrofit1 * refactor(retrofit2): Convert Retrofit2TestConfig to java * refactor(retrofit2): move java classes from main/groovy/.. to main/java/.. in echo-notifications * refactor(retrofit2): replaced retrofit1's encode=false flag to retrofit2's encoded=true * refactor(retrofit2): addressed review comments
1 parent 469d50f commit 6a0e784

File tree

120 files changed

+1635
-1346
lines changed

Some content is hidden

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

120 files changed

+1635
-1346
lines changed

echo-artifacts/echo-artifacts.gradle

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
dependencies {
1818
implementation project(':echo-core')
1919
implementation project(':echo-model')
20-
implementation "com.squareup.retrofit:retrofit"
21-
implementation "com.squareup.retrofit:converter-jackson"
22-
implementation "com.jakewharton.retrofit:retrofit1-okhttp3-client:1.1.0"
20+
implementation "com.squareup.retrofit2:retrofit"
21+
implementation "com.squareup.retrofit2:converter-jackson"
2322
implementation "io.spinnaker.kork:kork-web"
2423
implementation "io.spinnaker.kork:kork-artifacts"
24+
implementation "io.spinnaker.kork:kork-retrofit"
2525
implementation "org.springframework.boot:spring-boot-starter-web"
2626
}

echo-artifacts/src/main/java/com/netflix/spinnaker/echo/artifacts/ArtifactEmitter.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.netflix.spinnaker.echo.config.ArtifactEmitterProperties;
2121
import com.netflix.spinnaker.echo.model.ArtifactEvent;
2222
import com.netflix.spinnaker.echo.services.KeelService;
23+
import com.netflix.spinnaker.kork.retrofit.Retrofit2SyncCall;
2324
import java.util.HashMap;
2425
import java.util.Map;
2526
import org.slf4j.Logger;
@@ -64,7 +65,7 @@ public void processEvent(ArtifactEvent event) {
6465
sentEvent.put(
6566
artifactEmitterProperties.getFieldName(), objectMapper.convertValue(event, Map.class));
6667
log.debug("Sending artifacts to Keel: {}", event.getArtifacts());
67-
keelService.sendArtifactEvent(sentEvent);
68+
Retrofit2SyncCall.execute(keelService.sendArtifactEvent(sentEvent));
6869
} catch (Exception e) {
6970
log.error("Could not send event {} to Keel", event, e);
7071
}

echo-artifacts/src/main/java/com/netflix/spinnaker/echo/config/KeelConfig.java

+12-28
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,31 @@
11
package com.netflix.spinnaker.echo.config;
22

3-
import com.jakewharton.retrofit.Ok3Client;
4-
import com.netflix.spinnaker.config.DefaultServiceEndpoint;
5-
import com.netflix.spinnaker.config.okhttp3.OkHttpClientProvider;
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import com.netflix.spinnaker.config.OkHttp3ClientConfiguration;
65
import com.netflix.spinnaker.echo.services.KeelService;
7-
import com.netflix.spinnaker.retrofit.Slf4jRetrofitLogger;
6+
import com.netflix.spinnaker.kork.retrofit.ErrorHandlingExecutorCallAdapterFactory;
87
import lombok.extern.slf4j.Slf4j;
98
import org.springframework.beans.factory.annotation.Value;
109
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
1110
import org.springframework.context.annotation.Bean;
1211
import org.springframework.context.annotation.Configuration;
13-
import retrofit.Endpoint;
14-
import retrofit.Endpoints;
15-
import retrofit.RestAdapter;
16-
import retrofit.RestAdapter.LogLevel;
17-
import retrofit.converter.JacksonConverter;
12+
import retrofit2.Retrofit;
13+
import retrofit2.converter.jackson.JacksonConverterFactory;
1814

1915
@Configuration
2016
@Slf4j
2117
@ConditionalOnExpression("${keel.enabled:false}")
2218
public class KeelConfig {
23-
@Bean
24-
public LogLevel retrofitLogLevel(@Value("${retrofit.log-level:BASIC}") String retrofitLogLevel) {
25-
return LogLevel.valueOf(retrofitLogLevel);
26-
}
27-
28-
@Bean
29-
public Endpoint keelEndpoint(@Value("${keel.base-url}") String keelBaseUrl) {
30-
return Endpoints.newFixedEndpoint(keelBaseUrl);
31-
}
3219

3320
@Bean
3421
public KeelService keelService(
35-
Endpoint keelEndpoint, OkHttpClientProvider clientProvider, LogLevel retrofitLogLevel) {
36-
return new RestAdapter.Builder()
37-
.setEndpoint(keelEndpoint)
38-
.setConverter(new JacksonConverter())
39-
.setClient(
40-
new Ok3Client(
41-
clientProvider.getClient(
42-
new DefaultServiceEndpoint("keel", keelEndpoint.getUrl()))))
43-
.setLogLevel(retrofitLogLevel)
44-
.setLog(new Slf4jRetrofitLogger(KeelService.class))
22+
@Value("${keel.base-url}") String keelBaseUrl,
23+
OkHttp3ClientConfiguration okHttpClientConfig) {
24+
return new Retrofit.Builder()
25+
.baseUrl(keelBaseUrl)
26+
.client(okHttpClientConfig.createForRetrofit2().build())
27+
.addCallAdapterFactory(ErrorHandlingExecutorCallAdapterFactory.getInstance())
28+
.addConverterFactory(JacksonConverterFactory.create(new ObjectMapper()))
4529
.build()
4630
.create(KeelService.class);
4731
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package com.netflix.spinnaker.echo.services;
22

33
import java.util.Map;
4-
import retrofit.http.Body;
5-
import retrofit.http.POST;
4+
import retrofit2.Call;
5+
import retrofit2.http.Body;
6+
import retrofit2.http.POST;
67

78
public interface KeelService {
89
@POST("/artifacts/events")
9-
Void sendArtifactEvent(@Body Map event);
10+
Call<Void> sendArtifactEvent(@Body Map event);
1011
}

echo-core/echo-core.gradle

+4-3
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ dependencies {
2020

2121
api "io.spinnaker.kork:kork-plugins"
2222

23-
implementation "com.squareup.retrofit:retrofit"
24-
implementation "com.squareup.retrofit:converter-jackson"
25-
implementation "com.jakewharton.retrofit:retrofit1-okhttp3-client:1.1.0"
23+
implementation "com.squareup.retrofit2:retrofit"
24+
implementation "com.squareup.retrofit2:converter-jackson"
2625
implementation "io.spinnaker.kork:kork-web"
2726
implementation "io.spinnaker.kork:kork-artifacts"
2827

2928
implementation "io.spinnaker.kork:kork-core"
3029
implementation "io.spinnaker.kork:kork-exceptions"
3130
implementation "io.spinnaker.kork:kork-security"
31+
implementation "io.spinnaker.kork:kork-retrofit"
3232

3333
implementation "org.springframework.boot:spring-boot-starter-web"
3434
implementation "org.apache.commons:commons-lang3"
@@ -42,4 +42,5 @@ dependencies {
4242
testImplementation "org.spockframework:spock-spring"
4343
testImplementation "org.springframework:spring-test"
4444
testImplementation "org.apache.groovy:groovy-json"
45+
testImplementation "com.github.tomakehurst:wiremock-jre8"
4546
}

echo-core/src/main/java/com/netflix/spinnaker/echo/artifacts/ArtifactInfoService.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import com.netflix.spinnaker.echo.services.IgorService;
2121
import com.netflix.spinnaker.kork.artifacts.model.Artifact;
22+
import com.netflix.spinnaker.kork.retrofit.Retrofit2SyncCall;
2223
import java.util.List;
2324

2425
/** Given an artifact, fetch the details from an artifact provider */
@@ -31,10 +32,11 @@ public ArtifactInfoService(IgorService igorService) {
3132
}
3233

3334
public List<String> getVersions(String provider, String packageName) {
34-
return igorService.getVersions(provider, packageName);
35+
return Retrofit2SyncCall.execute(igorService.getVersions(provider, packageName));
3536
}
3637

3738
public Artifact getArtifactByVersion(String provider, String packageName, String version) {
38-
return igorService.getArtifactByVersion(provider, packageName, version);
39+
return Retrofit2SyncCall.execute(
40+
igorService.getArtifactByVersion(provider, packageName, version));
3941
}
4042
}

echo-core/src/main/java/com/netflix/spinnaker/echo/build/BuildInfoService.java

+18-10
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.netflix.spinnaker.echo.services.IgorService;
2626
import com.netflix.spinnaker.kork.artifacts.model.Artifact;
2727
import com.netflix.spinnaker.kork.core.RetrySupport;
28+
import com.netflix.spinnaker.kork.retrofit.Retrofit2SyncCall;
2829
import java.util.ArrayList;
2930
import java.util.Collections;
3031
import java.util.List;
@@ -58,8 +59,10 @@ public BuildEvent getBuildEvent(String master, String job, int buildNumber) {
5859
Map<String, Object> rawBuild =
5960
retry(
6061
igorConfigurationProperties.isJobNameAsQueryParameter()
61-
? () -> igorService.getBuildStatusWithJobQueryParameter(buildNumber, master, job)
62-
: () -> igorService.getBuild(buildNumber, master, job));
62+
? () ->
63+
Retrofit2SyncCall.execute(
64+
igorService.getBuildStatusWithJobQueryParameter(buildNumber, master, job))
65+
: () -> Retrofit2SyncCall.execute(igorService.getBuild(buildNumber, master, job)));
6366
BuildEvent.Build build = objectMapper.convertValue(rawBuild, BuildEvent.Build.class);
6467
BuildEvent.Project project = new BuildEvent.Project(job, build);
6568
BuildEvent.Content content = new BuildEvent.Content(project, master);
@@ -77,8 +80,9 @@ public Map<String, Object> getBuildInfo(BuildEvent event) {
7780
return retry(
7881
() ->
7982
igorConfigurationProperties.isJobNameAsQueryParameter()
80-
? igorService.getBuildStatusWithJobQueryParameter(buildNumber, master, job)
81-
: igorService.getBuild(buildNumber, master, job));
83+
? Retrofit2SyncCall.execute(
84+
igorService.getBuildStatusWithJobQueryParameter(buildNumber, master, job))
85+
: Retrofit2SyncCall.execute(igorService.getBuild(buildNumber, master, job)));
8286
}
8387
return Collections.emptyMap();
8488
}
@@ -96,9 +100,11 @@ public Map<String, Object> getProperties(BuildEvent event, String propertyFile)
96100
return retry(
97101
() ->
98102
igorConfigurationProperties.isJobNameAsQueryParameter()
99-
? igorService.getPropertyFileWithJobQueryParameter(
100-
buildNumber, propertyFileFinal, master, job)
101-
: igorService.getPropertyFile(buildNumber, propertyFileFinal, master, job));
103+
? Retrofit2SyncCall.execute(
104+
igorService.getPropertyFileWithJobQueryParameter(
105+
buildNumber, propertyFileFinal, master, job))
106+
: Retrofit2SyncCall.execute(
107+
igorService.getPropertyFile(buildNumber, propertyFileFinal, master, job)));
102108
}
103109
return Collections.emptyMap();
104110
}
@@ -111,9 +117,11 @@ private List<Artifact> getArtifactsFromPropertyFile(BuildEvent event, String pro
111117
return retry(
112118
() ->
113119
igorConfigurationProperties.isJobNameAsQueryParameter()
114-
? igorService.getArtifactsWithJobQueryParameter(
115-
buildNumber, propertyFile, master, job)
116-
: igorService.getArtifacts(buildNumber, propertyFile, master, job));
120+
? Retrofit2SyncCall.execute(
121+
igorService.getArtifactsWithJobQueryParameter(
122+
buildNumber, propertyFile, master, job))
123+
: Retrofit2SyncCall.execute(
124+
igorService.getArtifacts(buildNumber, propertyFile, master, job)));
117125
}
118126
return Collections.emptyList();
119127
}

echo-core/src/main/java/com/netflix/spinnaker/echo/services/Front50Service.java

+13-7
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,40 @@
33
import com.netflix.spinnaker.echo.model.Pipeline;
44
import java.util.List;
55
import java.util.Map;
6-
import retrofit.http.*;
6+
import retrofit2.Call;
7+
import retrofit2.http.Body;
8+
import retrofit2.http.GET;
9+
import retrofit2.http.Headers;
10+
import retrofit2.http.POST;
11+
import retrofit2.http.Path;
12+
import retrofit2.http.Query;
713

814
public interface Front50Service {
915
@GET("/pipelines?restricted=false")
1016
@Headers("Accept: application/json")
11-
List<Map<String, Object>>
17+
Call<List<Map<String, Object>>>
1218
getPipelines(); // Return Map here so we don't throw away MPT attributes.
1319

1420
@GET("/pipelines?restricted=false")
1521
@Headers("Accept: application/json")
16-
List<Map<String, Object>> getPipelines(
22+
Call<List<Map<String, Object>>> getPipelines(
1723
@Query("enabledPipelines") Boolean enabledPipelines,
1824
@Query("enabledTriggers") Boolean enabledTriggers,
1925
@Query("triggerTypes")
2026
String triggerTypes); // Return Map here so we don't throw away MPT attributes.
2127

2228
@GET("/pipelines/{application}?refresh=false")
2329
@Headers("Accept: application/json")
24-
List<Pipeline> getPipelines(@Path("application") String application);
30+
Call<List<Pipeline>> getPipelines(@Path("application") String application);
2531

2632
@GET("/pipelines/{pipelineId}/get")
27-
Map<String, Object> getPipeline(@Path("pipelineId") String pipelineId);
33+
Call<Map<String, Object>> getPipeline(@Path("pipelineId") String pipelineId);
2834

2935
@GET("/pipelines/{application}/name/{name}?refresh=true")
30-
Map<String, Object> getPipelineByName(
36+
Call<Map<String, Object>> getPipelineByName(
3137
@Path("application") String application, @Path("name") String name);
3238

3339
@POST("/graphql")
3440
@Headers("Accept: application/json")
35-
GraphQLQueryResponse query(@Body GraphQLQuery body);
41+
Call<GraphQLQueryResponse> query(@Body GraphQLQuery body);
3642
}

echo-core/src/main/java/com/netflix/spinnaker/echo/services/IgorService.java

+20-15
Original file line numberDiff line numberDiff line change
@@ -19,70 +19,75 @@
1919
import com.netflix.spinnaker.kork.artifacts.model.Artifact;
2020
import java.util.List;
2121
import java.util.Map;
22+
import okhttp3.ResponseBody;
2223
import org.jetbrains.annotations.NotNull;
23-
import retrofit.client.Response;
24-
import retrofit.http.*;
2524
import retrofit.mime.TypedInput;
25+
import retrofit2.Call;
26+
import retrofit2.http.Body;
27+
import retrofit2.http.GET;
28+
import retrofit2.http.PUT;
29+
import retrofit2.http.Path;
30+
import retrofit2.http.Query;
2631

2732
public interface IgorService {
2833
@GET("/builds/status/{buildNumber}/{master}/{job}")
29-
Map<String, Object> getBuild(
34+
Call<Map<String, Object>> getBuild(
3035
@Path("buildNumber") Integer buildNumber,
3136
@Path("master") String master,
32-
@Path(value = "job", encode = false) String job);
37+
@Path(value = "job", encoded = true) String job);
3338

3439
@GET("/builds/status/{buildNumber}/{master}")
35-
Map<String, Object> getBuildStatusWithJobQueryParameter(
40+
Call<Map<String, Object>> getBuildStatusWithJobQueryParameter(
3641
@NotNull @Path("buildNumber") Integer buildNumber,
3742
@NotNull @Path("master") String master,
3843
@NotNull @Query(value = "job") String job);
3944

4045
@GET("/builds/properties/{buildNumber}/{fileName}/{master}/{job}")
41-
Map<String, Object> getPropertyFile(
46+
Call<Map<String, Object>> getPropertyFile(
4247
@Path("buildNumber") Integer buildNumber,
4348
@Path("fileName") String fileName,
4449
@Path("master") String master,
45-
@Path(value = "job", encode = false) String job);
50+
@Path(value = "job", encoded = true) String job);
4651

4752
@GET("/builds/properties/{buildNumber}/{fileName}/{master}")
48-
Map<String, Object> getPropertyFileWithJobQueryParameter(
53+
Call<Map<String, Object>> getPropertyFileWithJobQueryParameter(
4954
@Path("buildNumber") Integer buildNumber,
5055
@Path("fileName") String fileName,
5156
@Path("master") String master,
5257
@Query(value = "job") String job);
5358

5459
@GET("/builds/artifacts/{buildNumber}/{master}/{job}")
55-
List<Artifact> getArtifacts(
60+
Call<List<Artifact>> getArtifacts(
5661
@Path("buildNumber") Integer buildNumber,
5762
@Query("propertyFile") String propertyFile,
5863
@Path("master") String master,
59-
@Path(value = "job", encode = false) String job);
64+
@Path(value = "job", encoded = true) String job);
6065

6166
@GET("/builds/artifacts/{buildNumber}/{master}")
62-
List<Artifact> getArtifactsWithJobQueryParameter(
67+
Call<List<Artifact>> getArtifactsWithJobQueryParameter(
6368
@Path("buildNumber") Integer buildNumber,
6469
@Query("propertyFile") String propertyFile,
6570
@Path("master") String master,
6671
@Query(value = "job") String job);
6772

6873
@GET("/artifacts/{provider}/{packageName}")
69-
List<String> getVersions(
74+
Call<List<String>> getVersions(
7075
@Path("provider") String provider, @Path("packageName") String packageName);
7176

7277
@GET("/artifacts/{provider}/{packageName}/{version}")
73-
Artifact getArtifactByVersion(
78+
Call<Artifact> getArtifactByVersion(
7479
@Path("provider") String provider,
7580
@Path("packageName") String packageName,
7681
@Path("version") String version);
7782

7883
@PUT("/gcb/builds/{account}/{buildId}")
79-
Response updateBuildStatus(
84+
Call<ResponseBody> updateBuildStatus(
8085
@Path("account") String account,
8186
@Path("buildId") String buildId,
8287
@Query("status") String status,
8388
@Body TypedInput build);
8489

8590
@PUT("/gcb/artifacts/extract/{account}")
86-
List<Artifact> extractGoogleCloudBuildArtifacts(
91+
Call<List<Artifact>> extractGoogleCloudBuildArtifacts(
8792
@Path("account") String account, @Body TypedInput build);
8893
}

0 commit comments

Comments
 (0)