Skip to content

Commit 2299e38

Browse files
authored
Merge pull request #515 from splitio/remove_apache_from_api
remove apache from module api
2 parents aac8a1b + a50d79a commit 2299e38

File tree

12 files changed

+112
-70
lines changed

12 files changed

+112
-70
lines changed

client/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
<include>io.split.schemas:*</include>
6565
<include>io.codigo.grammar:*</include>
6666
<include>org.apache.httpcomponents.*</include>
67+
<include>org.apache.hc.*</include>
6768
<include>com.google.*</include>
6869
<include>org.yaml:snakeyaml:*</include>
6970

client/src/main/java/io/split/client/SplitFactoryImpl.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@
121121
import static io.split.client.utils.SplitExecutorFactory.buildExecutorService;
122122

123123
public class SplitFactoryImpl implements SplitFactory {
124-
private static final org.slf4j.Logger _log = LoggerFactory.getLogger(SplitFactoryImpl.class);
124+
private static final org.slf4j.Logger _log = LoggerFactory.getLogger(SplitFactoryImpl.class);
125125
private static final String LEGACY_LOG_MESSAGE = "The sdk initialize in localhost mode using Legacy file. The splitFile or "
126126
+
127127
"inputStream doesn't add it to the config.";
@@ -193,7 +193,8 @@ public SplitFactoryImpl(String apiToken, SplitClientConfig config) throws URISyn
193193
if (config.alternativeHTTPModule() == null) {
194194
_splitHttpClient = buildSplitHttpClient(apiToken, config, _sdkMetadata, _requestDecorator);
195195
} else {
196-
_splitHttpClient = config.alternativeHTTPModule().createClient(apiToken, _sdkMetadata, _requestDecorator);
196+
_splitHttpClient = config.alternativeHTTPModule().createClient(apiToken, _sdkMetadata); // ,
197+
// _requestDecorator);
197198
}
198199

199200
// Roots
@@ -240,7 +241,8 @@ public SplitFactoryImpl(String apiToken, SplitClientConfig config) throws URISyn
240241
EventsSender eventsSender = EventsSender.create(_splitHttpClient, _eventsRootTarget, _telemetryStorageProducer);
241242
_eventsTask = EventsTask.create(config.eventSendIntervalInMillis(), eventsStorage, eventsSender,
242243
config.getThreadFactory());
243-
_telemetrySyncTask = new TelemetrySyncTask(config.getTelemetryRefreshRate(), _telemetrySynchronizer, config.getThreadFactory());
244+
_telemetrySyncTask = new TelemetrySyncTask(config.getTelemetryRefreshRate(), _telemetrySynchronizer,
245+
config.getThreadFactory());
244246

245247
// Evaluator
246248
_evaluator = new EvaluatorImp(splitCache, segmentCache);
@@ -263,7 +265,8 @@ public SplitFactoryImpl(String apiToken, SplitClientConfig config) throws URISyn
263265
// SyncManager
264266
SplitTasks splitTasks = SplitTasks.build(_splitSynchronizationTask, _segmentSynchronizationTaskImp,
265267
_impressionsManager, _eventsTask, _telemetrySyncTask, _uniqueKeysTracker);
266-
SplitAPI splitAPI = SplitAPI.build(_splitHttpClient, buildSSEdHttpClient(apiToken, config, _sdkMetadata), _requestDecorator);
268+
SplitAPI splitAPI = SplitAPI.build(_splitHttpClient, buildSSEdHttpClient(apiToken, config, _sdkMetadata),
269+
_requestDecorator);
267270

268271
_syncManager = SyncManagerImp.build(splitTasks, _splitFetcher, splitCache, splitAPI,
269272
segmentCache, _gates, _telemetryStorageProducer, _telemetrySynchronizer, config, splitParser,
@@ -334,8 +337,10 @@ protected SplitFactoryImpl(String apiToken, SplitClientConfig config, CustomStor
334337
_evaluator = new EvaluatorImp(userCustomSplitAdapterConsumer, userCustomSegmentAdapterConsumer);
335338
_impressionsSender = PluggableImpressionSender.create(customStorageWrapper);
336339
_uniqueKeysTracker = createUniqueKeysTracker(config);
337-
_impressionsManager = buildImpressionsManager(config, userCustomImpressionAdapterConsumer, userCustomImpressionAdapterProducer);
338-
_telemetrySyncTask = new TelemetrySyncTask(config.getTelemetryRefreshRate(), _telemetrySynchronizer, config.getThreadFactory());
340+
_impressionsManager = buildImpressionsManager(config, userCustomImpressionAdapterConsumer,
341+
userCustomImpressionAdapterProducer);
342+
_telemetrySyncTask = new TelemetrySyncTask(config.getTelemetryRefreshRate(), _telemetrySynchronizer,
343+
config.getThreadFactory());
339344

340345
SplitTasks splitTasks = SplitTasks.build(null, null,
341346
_impressionsManager, null, _telemetrySyncTask, _uniqueKeysTracker);

client/src/main/java/io/split/client/dtos/SplitHttpResponse.java

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.split.client.dtos;
22

3-
import java.util.Map;
4-
import org.apache.hc.core5.http.Header;
3+
import java.util.List;
4+
55
/**
66
* A structure for returning http call results information
77
*/
@@ -11,15 +11,42 @@ public class SplitHttpResponse {
1111
private final String _body;
1212
private final Header[] _responseHeaders;
1313

14+
public static class Header {
15+
private String _name;
16+
private List<String> _values;
17+
18+
public Header(String name, List<String> values) {
19+
_name = name;
20+
_values = values;
21+
}
22+
23+
public String getName() {
24+
return _name;
25+
}
26+
27+
public List<String> getValues() {
28+
return _values;
29+
}
30+
};
31+
1432
public SplitHttpResponse(Integer statusCode, String statusMessage, String body, Header[] headers) {
1533
_statusCode = statusCode;
1634
_statusMessage = statusMessage;
1735
_body = body;
1836
_responseHeaders = headers;
1937
}
38+
39+
public SplitHttpResponse(Integer statusCode, String statusMessage, String body, List<Header> headers) {
40+
_statusCode = statusCode;
41+
_statusMessage = statusMessage;
42+
_body = body;
43+
_responseHeaders = headers.toArray(new Header[0]);
44+
}
45+
2046
public Integer statusCode() {
2147
return _statusCode;
2248
}
49+
2350
public String statusMessage() {
2451
return _statusMessage;
2552
}

client/src/main/java/io/split/client/impressions/HttpImpressionsSender.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
import io.split.client.dtos.ImpressionCount;
55
import io.split.client.dtos.SplitHttpResponse;
66
import io.split.client.dtos.TestImpressions;
7+
import io.split.client.utils.Json;
78
import io.split.client.utils.Utils;
89

910
import io.split.service.SplitHttpClient;
1011
import io.split.telemetry.domain.enums.HTTPLatenciesEnum;
1112
import io.split.telemetry.domain.enums.LastSynchronizationRecordsEnum;
1213
import io.split.telemetry.domain.enums.ResourceEnum;
1314
import io.split.telemetry.storage.TelemetryRuntimeProducer;
14-
import org.apache.hc.core5.http.HttpEntity;
1515
import org.apache.hc.core5.http.HttpStatus;
1616
import org.slf4j.Logger;
1717
import org.slf4j.LoggerFactory;
@@ -67,10 +67,12 @@ private HttpImpressionsSender(SplitHttpClient client, URI impressionBulkTarget,
6767
public void postImpressionsBulk(List<TestImpressions> impressions) {
6868
long initTime = System.currentTimeMillis();
6969
try {
70-
HttpEntity entity = Utils.toJsonEntity(impressions);
71-
Map<String, List<String>> additionalHeaders = Collections.singletonMap(IMPRESSIONS_MODE_HEADER,
72-
Collections.singletonList(_mode.toString()));
73-
SplitHttpResponse response = _client.post(_impressionBulkTarget, entity, additionalHeaders);
70+
Map<String, List<String>> additionalHeaders = new HashMap<>();
71+
additionalHeaders.put(IMPRESSIONS_MODE_HEADER, Collections.singletonList(_mode.toString()));
72+
additionalHeaders.put("Content-Type", Collections.singletonList("application/json"));
73+
74+
SplitHttpResponse response = _client.post(_impressionBulkTarget, Json.toJson(impressions),
75+
additionalHeaders);
7476

7577
if (response.statusCode() < HttpStatus.SC_OK || response.statusCode() >= HttpStatus.SC_MULTIPLE_CHOICES) {
7678
_telemetryRuntimeProducer.recordSyncError(ResourceEnum.IMPRESSION_SYNC, response.statusCode());
@@ -95,8 +97,12 @@ public void postCounters(HashMap<ImpressionCounter.Key, Integer> raw) {
9597
}
9698

9799
try {
100+
101+
Map<String, List<String>> additionalHeaders = new HashMap<>();
102+
additionalHeaders.put("Content-Type", Collections.singletonList("application/json"));
103+
98104
SplitHttpResponse response = _client.post(_impressionCountTarget,
99-
Utils.toJsonEntity(ImpressionCount.fromImpressionCounterData(raw)),
105+
Json.toJson(ImpressionCount.fromImpressionCounterData(raw)),
100106
null);
101107

102108
if (response.statusCode() < HttpStatus.SC_OK || response.statusCode() >= HttpStatus.SC_MULTIPLE_CHOICES) {

client/src/main/java/io/split/service/CustomHttpModule.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
import java.io.IOException;
77

88
public interface CustomHttpModule {
9-
public SplitHttpClient createClient(String apiToken, SDKMetadata sdkMetadata, RequestDecorator requestDecorator) throws IOException;
9+
public SplitHttpClient createClient(String apiToken, SDKMetadata sdkMetadata) throws IOException;
1010
}

client/src/main/java/io/split/service/HttpPostImp.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
package io.split.service;
22

33
import io.split.client.dtos.SplitHttpResponse;
4-
import io.split.client.utils.Utils;
4+
import io.split.client.utils.Json;
55
import io.split.telemetry.domain.enums.HttpParamsWrapper;
66
import io.split.telemetry.storage.TelemetryRuntimeProducer;
7-
import org.apache.hc.core5.http.HttpEntity;
87
import org.apache.hc.core5.http.HttpStatus;
98
import org.slf4j.Logger;
109
import org.slf4j.LoggerFactory;
1110

1211
import java.net.URI;
12+
import java.util.Collections;
13+
import java.util.HashMap;
14+
import java.util.List;
15+
import java.util.Map;
1316

1417
import static com.google.common.base.Preconditions.checkNotNull;
1518

@@ -25,16 +28,19 @@ public HttpPostImp(SplitHttpClient client, TelemetryRuntimeProducer telemetryRun
2528

2629
public void post(URI uri, Object object, String posted, HttpParamsWrapper httpParamsWrapper) {
2730
long initTime = System.currentTimeMillis();
28-
HttpEntity entity = Utils.toJsonEntity(object);
2931

3032
try {
31-
SplitHttpResponse response = _client.post(uri, entity, null);
33+
Map<String, List<String>> headers = new HashMap<>();
34+
headers.put("Content-Type", Collections.singletonList("application/json"));
35+
SplitHttpResponse response = _client.post(uri, Json.toJson(object), headers);
3236
if (response.statusCode() < HttpStatus.SC_OK || response.statusCode() >= HttpStatus.SC_MULTIPLE_CHOICES) {
3337
_telemetryRuntimeProducer.recordSyncError(httpParamsWrapper.getResourceEnum(), response.statusCode());
3438
return;
3539
}
36-
_telemetryRuntimeProducer.recordSyncLatency(httpParamsWrapper.getHttpLatenciesEnum(), System.currentTimeMillis() - initTime);
37-
_telemetryRuntimeProducer.recordSuccessfulSync(httpParamsWrapper.getLastSynchronizationRecordsEnum(), System.currentTimeMillis());
40+
_telemetryRuntimeProducer.recordSyncLatency(httpParamsWrapper.getHttpLatenciesEnum(),
41+
System.currentTimeMillis() - initTime);
42+
_telemetryRuntimeProducer.recordSuccessfulSync(httpParamsWrapper.getLastSynchronizationRecordsEnum(),
43+
System.currentTimeMillis());
3844
} catch (Throwable t) {
3945
_logger.warn("Exception when posting " + posted + object, t);
4046
}

client/src/main/java/io/split/service/SplitHttpClient.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
import io.split.engine.common.FetchOptions;
44
import io.split.client.dtos.SplitHttpResponse;
55

6-
import org.apache.hc.core5.http.HttpEntity;
7-
86
import java.io.Closeable;
97
import java.io.IOException;
108
import java.net.URI;
@@ -30,6 +28,6 @@ public interface SplitHttpClient extends Closeable {
3028
* @return The response structure SplitHttpResponse
3129
*/
3230
public SplitHttpResponse post(URI uri,
33-
HttpEntity entity,
31+
String entity,
3432
Map<String, List<String>> additionalHeaders) throws IOException;
35-
}
33+
}

client/src/main/java/io/split/service/SplitHttpClientImpl.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,22 @@
99
import org.apache.hc.client5.http.classic.methods.HttpPost;
1010
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
1111
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
12-
import org.apache.hc.core5.http.HttpEntity;
12+
import org.apache.hc.core5.http.ContentType;
1313
import org.apache.hc.core5.http.HttpStatus;
1414
import org.apache.hc.core5.http.io.entity.EntityUtils;
15+
import org.apache.hc.core5.http.io.entity.HttpEntities;
1516
import org.slf4j.Logger;
1617
import org.slf4j.LoggerFactory;
1718
import java.io.IOException;
1819
import java.net.URI;
1920
import java.net.URISyntaxException;
2021
import org.apache.hc.core5.http.HttpRequest;
2122
import java.nio.charset.StandardCharsets;
23+
import java.util.Arrays;
24+
import java.util.Collections;
2225
import java.util.List;
2326
import java.util.Map;
27+
import java.util.stream.Collectors;
2428

2529
public final class SplitHttpClientImpl implements SplitHttpClient {
2630

@@ -87,18 +91,22 @@ public SplitHttpResponse get(URI uri, FetchOptions options, Map<String, List<Str
8791
response.getReasonPhrase()));
8892
statusMessage = response.getReasonPhrase();
8993
}
94+
9095
return new SplitHttpResponse(response.getCode(),
9196
statusMessage,
9297
EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8),
93-
response.getHeaders());
98+
Arrays.stream(response.getHeaders()).map(
99+
h -> new SplitHttpResponse.Header(h.getName(), Collections.singletonList(h.getValue())))
100+
.collect(Collectors.toList()));
101+
// response.getHeaders());
94102
} catch (Exception e) {
95103
throw new IllegalStateException(String.format("Problem in http get operation: %s", e), e);
96104
} finally {
97105
Utils.forceClose(response);
98106
}
99107
}
100108

101-
public SplitHttpResponse post(URI uri, HttpEntity entity, Map<String, List<String>> additionalHeaders)
109+
public SplitHttpResponse post(URI uri, String body, Map<String, List<String>> additionalHeaders)
102110
throws IOException {
103111

104112
CloseableHttpResponse response = null;
@@ -112,7 +120,7 @@ public SplitHttpResponse post(URI uri, HttpEntity entity, Map<String, List<Strin
112120
}
113121
}
114122
}
115-
request.setEntity(entity);
123+
request.setEntity(HttpEntities.create(body, ContentType.APPLICATION_JSON));
116124
request = (HttpPost) _requestDecorator.decorateHeaders(request);
117125

118126
response = _client.execute(request);
@@ -123,7 +131,10 @@ public SplitHttpResponse post(URI uri, HttpEntity entity, Map<String, List<Strin
123131
_log.warn(String.format("Response status was: %s. Reason: %s", response.getCode(),
124132
response.getReasonPhrase()));
125133
}
126-
return new SplitHttpResponse(response.getCode(), statusMessage, "", response.getHeaders());
134+
return new SplitHttpResponse(response.getCode(), statusMessage, "",
135+
Arrays.stream(response.getHeaders()).map(
136+
h -> new SplitHttpResponse.Header(h.getName(), Collections.singletonList(h.getValue())))
137+
.collect(Collectors.toList()));
127138
} catch (Exception e) {
128139
throw new IOException(String.format("Problem in http post operation: %s", e), e);
129140
} finally {

okhttp-modules/pom.xml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,11 @@
4949
<version>4.13.0</version>
5050
<scope>compile</scope>
5151
</dependency>
52-
52+
<dependency>
53+
<groupId>org.apache.httpcomponents.client5</groupId>
54+
<artifactId>httpclient5</artifactId>
55+
<version>5.0.3</version>
56+
</dependency>
5357
<!-- Test deps -->
5458
<dependency>
5559
<groupId>junit</groupId>
@@ -82,4 +86,4 @@
8286
</dependency>
8387

8488
</dependencies>
85-
</project>
89+
</project>

0 commit comments

Comments
 (0)