Skip to content

Commit f78a355

Browse files
committed
renamed provider to task and refactor
1 parent f3d0ddb commit f78a355

19 files changed

+333
-422
lines changed

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
import io.split.client.dtos.Event;
66
import io.split.client.impressions.Impression;
77
import io.split.client.impressions.ImpressionsManager;
8+
import io.split.engine.cache.SplitCache;
89
import io.split.engine.evaluator.Evaluator;
910
import io.split.engine.SDKReadinessGates;
1011
import io.split.engine.evaluator.EvaluatorImp;
11-
import io.split.engine.experiments.SplitFetcher;
1212
import io.split.engine.metrics.Metrics;
1313
import io.split.grammar.Treatments;
1414
import org.slf4j.Logger;
@@ -36,7 +36,7 @@ public final class SplitClientImpl implements SplitClient {
3636
private static final Logger _log = LoggerFactory.getLogger(SplitClientImpl.class);
3737

3838
private final SplitFactory _container;
39-
private final SplitFetcher _splitFetcher;
39+
private final SplitCache _splitCache;
4040
private final ImpressionsManager _impressionManager;
4141
private final Metrics _metrics;
4242
private final SplitClientConfig _config;
@@ -45,15 +45,15 @@ public final class SplitClientImpl implements SplitClient {
4545
private final Evaluator _evaluator;
4646

4747
public SplitClientImpl(SplitFactory container,
48-
SplitFetcher splitFetcher,
48+
SplitCache splitCache,
4949
ImpressionsManager impressionManager,
5050
Metrics metrics,
5151
EventClient eventClient,
5252
SplitClientConfig config,
5353
SDKReadinessGates gates,
5454
Evaluator evaluator) {
5555
_container = container;
56-
_splitFetcher = checkNotNull(splitFetcher);
56+
_splitCache = checkNotNull(splitCache);
5757
_impressionManager = checkNotNull(impressionManager);
5858
_metrics = metrics;
5959
_eventClient = eventClient;
@@ -192,7 +192,7 @@ private boolean track(Event event) {
192192
event.trafficTypeName = event.trafficTypeName.toLowerCase();
193193
}
194194

195-
if (!_splitFetcher.trafficTypeExists(event.trafficTypeName)) {
195+
if (!_splitCache.trafficTypeExists(event.trafficTypeName)) {
196196
_log.warn("track: Traffic Type " + event.trafficTypeName + " does not have any corresponding Splits in this environment, " +
197197
"make sure you’re tracking your events to a valid traffic type defined in the Split console.");
198198
}

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
import io.split.engine.SDKReadinessGates;
1919
import io.split.engine.common.SyncManager;
2020
import io.split.engine.common.SyncManagerImp;
21-
import io.split.engine.experiments.RefreshableSplitFetcherProvider;
21+
import io.split.engine.experiments.RefreshableSplitFetcher;
22+
import io.split.engine.experiments.RefreshableSplitFetcherTask;
2223
import io.split.engine.experiments.SplitChangeFetcher;
23-
import io.split.engine.experiments.SplitFetcher;
2424
import io.split.engine.experiments.SplitParser;
2525
import io.split.engine.segments.RefreshableSegmentFetcher;
2626
import io.split.engine.segments.SegmentChangeFetcher;
@@ -203,7 +203,9 @@ public SplitFactoryImpl(String apiToken, SplitClientConfig config) throws URISyn
203203
SplitChangeFetcher splitChangeFetcher = HttpSplitChangeFetcher.create(httpclient, rootTarget, uncachedFireAndForget);
204204

205205
final SplitCache cache = new InMemoryCacheImp();
206-
final RefreshableSplitFetcherProvider splitFetcherProvider = new RefreshableSplitFetcherProvider(splitChangeFetcher, splitParser, findPollingPeriod(RANDOM, config.featuresRefreshRate()), gates, cache);
206+
final SplitCache splitCache = new InMemoryCacheImp(-1);
207+
final RefreshableSplitFetcher splitFetcher = new RefreshableSplitFetcher(splitChangeFetcher, splitParser, gates, splitCache);
208+
final RefreshableSplitFetcherTask splitFetcherTask = new RefreshableSplitFetcherTask(splitFetcher, splitCache, findPollingPeriod(RANDOM, config.featuresRefreshRate()));
207209

208210

209211
List<ImpressionListener> impressionListeners = new ArrayList<>();
@@ -227,7 +229,7 @@ public SplitFactoryImpl(String apiToken, SplitClientConfig config) throws URISyn
227229
final EventClient eventClient = EventClientImpl.create(httpclient, eventsRootTarget, config.eventsQueueSize(), config.eventFlushIntervalInMillis(), config.waitBeforeShutdown());
228230

229231
// SyncManager
230-
final SyncManager syncManager = SyncManagerImp.build(config.streamingEnabled(), splitFetcherProvider, segmentFetcher, config.authServiceURL(), httpclient, config.streamingServiceURL(), config.authRetryBackoffBase(), buildSSEdHttpClient(config));
232+
final SyncManager syncManager = SyncManagerImp.build(config.streamingEnabled(), splitFetcherTask, splitFetcher, segmentFetcher, splitCache, config.authServiceURL(), httpclient, config.streamingServiceURL(), config.authRetryBackoffBase(), buildSSEdHttpClient(config));
231233
syncManager.start();
232234

233235
destroyer = new Runnable() {
@@ -236,7 +238,7 @@ public void run() {
236238
try {
237239
segmentFetcher.close();
238240
_log.info("Successful shutdown of segment fetchers");
239-
splitFetcherProvider.close();
241+
splitFetcherTask.close();
240242
_log.info("Successful shutdown of splits");
241243
impressionsManager.close();
242244
_log.info("Successful shutdown of impressions manager");
@@ -266,19 +268,17 @@ public void run() {
266268
});
267269
}
268270

269-
270-
SplitFetcher splitFetcher = splitFetcherProvider.getFetcher();
271-
Evaluator evaluator = new EvaluatorImp(gates, splitFetcher);
271+
final Evaluator evaluator = new EvaluatorImp(gates, splitCache);
272272

273273
_client = new SplitClientImpl(this,
274-
splitFetcher,
274+
splitCache,
275275
impressionsManager,
276276
cachedFireAndForgetMetrics,
277277
eventClient,
278278
config,
279279
gates,
280280
evaluator);
281-
_manager = new SplitManagerImpl(splitFetcherProvider.getFetcher(), config, gates);
281+
_manager = new SplitManagerImpl(splitCache, config, gates);
282282
}
283283

284284
private static int findPollingPeriod(Random rand, int max) {

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

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,13 @@
44
import io.split.client.api.SplitView;
55
import io.split.client.dtos.Partition;
66
import io.split.engine.SDKReadinessGates;
7+
import io.split.engine.cache.SplitCache;
78
import io.split.engine.experiments.ParsedCondition;
89
import io.split.engine.experiments.ParsedSplit;
9-
import io.split.engine.experiments.SplitFetcher;
1010
import org.slf4j.Logger;
1111
import org.slf4j.LoggerFactory;
1212

13-
import java.util.ArrayList;
14-
import java.util.Collections;
15-
import java.util.HashSet;
16-
import java.util.List;
17-
import java.util.Set;
13+
import java.util.*;
1814
import java.util.concurrent.TimeoutException;
1915

2016
/**
@@ -24,23 +20,23 @@ public class SplitManagerImpl implements SplitManager {
2420

2521
private static final Logger _log = LoggerFactory.getLogger(SplitManagerImpl.class);
2622

27-
private final SplitFetcher _splitFetcher;
23+
private final SplitCache _splitCache;
2824
private final SplitClientConfig _config;
2925
private final SDKReadinessGates _gates;
3026

3127

32-
public SplitManagerImpl(SplitFetcher splitFetcher,
28+
public SplitManagerImpl(SplitCache splitCache,
3329
SplitClientConfig config,
3430
SDKReadinessGates gates) {
3531
_config = Preconditions.checkNotNull(config);
36-
_splitFetcher = Preconditions.checkNotNull(splitFetcher);
32+
_splitCache = Preconditions.checkNotNull(splitCache);
3733
_gates = Preconditions.checkNotNull(gates);
3834
}
3935

4036
@Override
4137
public List<SplitView> splits() {
4238
List<SplitView> result = new ArrayList<>();
43-
List<ParsedSplit> parsedSplits = _splitFetcher.fetchAll();
39+
Collection<ParsedSplit> parsedSplits = _splitCache.getAll();
4440
for (ParsedSplit split : parsedSplits) {
4541
result.add(toSplitView(split));
4642
}
@@ -57,7 +53,7 @@ public SplitView split(String featureName) {
5753
_log.error("split: you passed an empty split name, split name must be a non-empty string");
5854
return null;
5955
}
60-
ParsedSplit parsedSplit = _splitFetcher.fetch(featureName);
56+
ParsedSplit parsedSplit = _splitCache.get(featureName);
6157
if (parsedSplit == null) {
6258
if (_gates.isSDKReadyNow()) {
6359
_log.warn("split: you passed \"" + featureName + "\" that does not exist in this environment, " +
@@ -71,7 +67,7 @@ public SplitView split(String featureName) {
7167
@Override
7268
public List<String> splitNames() {
7369
List<String> result = new ArrayList<>();
74-
List<ParsedSplit> parsedSplits = _splitFetcher.fetchAll();
70+
Collection<ParsedSplit> parsedSplits = _splitCache.getAll();
7571
for (ParsedSplit split : parsedSplits) {
7672
result.add(split.feature());
7773
}

client/src/main/java/io/split/client/jmx/SplitJmxMonitor.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package io.split.client.jmx;
22

33
import io.split.client.SplitClient;
4+
import io.split.engine.cache.SplitCache;
45
import io.split.engine.experiments.SplitFetcher;
56
import io.split.engine.segments.SegmentFetcher;
67
import org.slf4j.Logger;
78
import org.slf4j.LoggerFactory;
89

10+
import static com.google.common.base.Preconditions.checkNotNull;
11+
912
/**
1013
* Created by patricioe on 1/18/16.
1114
*/
@@ -15,12 +18,14 @@ public class SplitJmxMonitor implements SplitJmxMonitorMBean {
1518

1619
private final SplitClient _client;
1720
private final SplitFetcher _featureFetcher;
21+
private final SplitCache _splitCache;
1822
private final SegmentFetcher _segmentFetcher;
1923

20-
public SplitJmxMonitor(SplitClient splitClient, SplitFetcher fetcher, SegmentFetcher segmentFetcher) {
21-
_client = splitClient;
22-
_featureFetcher = fetcher;
23-
_segmentFetcher = segmentFetcher;
24+
public SplitJmxMonitor(SplitClient splitClient, SplitFetcher featureFetcher, SplitCache splitCache, SegmentFetcher segmentFetcher) {
25+
_client = checkNotNull(splitClient);
26+
_featureFetcher = checkNotNull(featureFetcher);
27+
_splitCache = checkNotNull(splitCache);
28+
_segmentFetcher = checkNotNull(segmentFetcher);
2429
}
2530

2631
@Override
@@ -44,7 +49,7 @@ public String getTreatment(String key, String featureName) {
4449

4550
@Override
4651
public String fetchDefinition(String featureName) {
47-
return _featureFetcher.fetch(featureName).toString();
52+
return _splitCache.get(featureName).toString();
4853
}
4954

5055
@Override

client/src/main/java/io/split/engine/cache/InMemoryCacheImp.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import java.util.ArrayList;
1212
import java.util.Collection;
1313
import java.util.List;
14-
import java.util.Set;
1514
import java.util.concurrent.ConcurrentMap;
1615
import java.util.concurrent.atomic.AtomicLong;
1716

@@ -100,6 +99,25 @@ public boolean trafficTypeExists(String trafficTypeName) {
10099
return Sets.newHashSet(_concurrentTrafficTypeNameSet.elementSet()).contains(trafficTypeName);
101100
}
102101

102+
@Override
103+
public void kill(String splitName, String defaultTreatment, long changeNumber) {
104+
ParsedSplit parsedSplit = _concurrentMap.get(splitName);
105+
106+
ParsedSplit updatedSplit = new ParsedSplit(parsedSplit.feature(),
107+
parsedSplit.seed(),
108+
true,
109+
defaultTreatment,
110+
parsedSplit.parsedConditions(),
111+
parsedSplit.trafficTypeName(),
112+
changeNumber,
113+
parsedSplit.trafficAllocation(),
114+
parsedSplit.trafficAllocationSeed(),
115+
parsedSplit.algo(),
116+
parsedSplit.configurations());
117+
118+
_concurrentMap.put(splitName, updatedSplit);
119+
}
120+
103121
@Override
104122
public void clear() {
105123
_concurrentMap.clear();

client/src/main/java/io/split/engine/cache/SplitCache.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import java.util.Collection;
66
import java.util.List;
7-
import java.util.Set;
87

98
public interface SplitCache {
109
void put(ParsedSplit split);
@@ -15,5 +14,6 @@ public interface SplitCache {
1514
long getChangeNumber();
1615
void setChangeNumber(long changeNumber);
1716
boolean trafficTypeExists(String trafficTypeName);
17+
void kill(String splitName, String defaultTreatment, long changeNumber);
1818
void clear();
1919
}

client/src/main/java/io/split/engine/common/SyncManagerImp.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import com.google.common.annotations.VisibleForTesting;
44
import com.google.common.util.concurrent.ThreadFactoryBuilder;
5-
import io.split.engine.experiments.RefreshableSplitFetcherProvider;
5+
import io.split.engine.cache.SplitCache;
6+
import io.split.engine.experiments.RefreshableSplitFetcher;
7+
import io.split.engine.experiments.RefreshableSplitFetcherTask;
68
import io.split.engine.segments.RefreshableSegmentFetcher;
79
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
810
import org.slf4j.Logger;
@@ -44,15 +46,17 @@ public class SyncManagerImp implements SyncManager {
4446
}
4547

4648
public static SyncManagerImp build(boolean streamingEnabledConfig,
47-
RefreshableSplitFetcherProvider refreshableSplitFetcherProvider,
49+
RefreshableSplitFetcherTask refreshableSplitFetcherTask,
50+
RefreshableSplitFetcher splitFetcher,
4851
RefreshableSegmentFetcher segmentFetcher,
52+
SplitCache splitCache,
4953
String authUrl,
5054
CloseableHttpClient httpClient,
5155
String streamingServiceUrl,
5256
int authRetryBackOffBase,
5357
CloseableHttpClient sseHttpClient) {
5458
LinkedBlockingQueue<PushManager.Status> pushMessages = new LinkedBlockingQueue<>();
55-
Synchronizer synchronizer = new SynchronizerImp(refreshableSplitFetcherProvider, segmentFetcher);
59+
Synchronizer synchronizer = new SynchronizerImp(refreshableSplitFetcherTask, splitFetcher, segmentFetcher, splitCache);
5660
PushManager pushManager = PushManagerImp.build(synchronizer, streamingServiceUrl, authUrl, httpClient, authRetryBackOffBase, pushMessages, sseHttpClient);
5761
return new SyncManagerImp(streamingEnabledConfig, synchronizer, pushManager, pushMessages);
5862
}

client/src/main/java/io/split/engine/common/SynchronizerImp.java

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package io.split.engine.common;
22

33
import com.google.common.util.concurrent.ThreadFactoryBuilder;
4+
5+
import io.split.engine.cache.SplitCache;
46
import io.split.engine.experiments.RefreshableSplitFetcher;
5-
import io.split.engine.experiments.RefreshableSplitFetcherProvider;
7+
import io.split.engine.experiments.RefreshableSplitFetcherTask;
68
import io.split.engine.segments.RefreshableSegmentFetcher;
79
import org.slf4j.Logger;
810
import org.slf4j.LoggerFactory;
@@ -17,16 +19,20 @@
1719
public class SynchronizerImp implements Synchronizer {
1820
private static final Logger _log = LoggerFactory.getLogger(Synchronizer.class);
1921

20-
private final RefreshableSplitFetcherProvider _refreshableSplitFetcherProvider;
22+
private final RefreshableSplitFetcherTask _refreshableSplitFetcherTask;
2123
private final RefreshableSplitFetcher _splitFetcher;
2224
private final RefreshableSegmentFetcher _segmentFetcher;
2325
private final ScheduledExecutorService _syncAllScheduledExecutorService;
26+
private final SplitCache _splitCache;
2427

25-
public SynchronizerImp(RefreshableSplitFetcherProvider refreshableSplitFetcherProvider,
26-
RefreshableSegmentFetcher segmentFetcher) {
27-
_refreshableSplitFetcherProvider = checkNotNull(refreshableSplitFetcherProvider);
28-
_splitFetcher = checkNotNull(_refreshableSplitFetcherProvider.getFetcher());
28+
public SynchronizerImp(RefreshableSplitFetcherTask refreshableSplitTask,
29+
RefreshableSplitFetcher splitFetcher,
30+
RefreshableSegmentFetcher segmentFetcher,
31+
SplitCache splitCache) {
32+
_refreshableSplitFetcherTask = checkNotNull(refreshableSplitTask);
33+
_splitFetcher = checkNotNull(splitFetcher);
2934
_segmentFetcher = checkNotNull(segmentFetcher);
35+
_splitCache = checkNotNull(splitCache);
3036

3137
ThreadFactory splitsThreadFactory = new ThreadFactoryBuilder()
3238
.setDaemon(true)
@@ -46,28 +52,28 @@ public void syncAll() {
4652
@Override
4753
public void startPeriodicFetching() {
4854
_log.debug("Starting Periodic Fetching ...");
49-
_refreshableSplitFetcherProvider.startPeriodicFetching();
55+
_refreshableSplitFetcherTask.startPeriodicFetching();
5056
_segmentFetcher.startPeriodicFetching();
5157
}
5258

5359
@Override
5460
public void stopPeriodicFetching() {
5561
_log.debug("Stop Periodic Fetching ...");
56-
_refreshableSplitFetcherProvider.stop();
62+
_refreshableSplitFetcherTask.stop();
5763
_segmentFetcher.stop();
5864
}
5965

6066
@Override
6167
public void refreshSplits(long targetChangeNumber) {
62-
if (targetChangeNumber > _splitFetcher.changeNumber()) {
68+
if (targetChangeNumber > _splitCache.getChangeNumber()) {
6369
_splitFetcher.forceRefresh();
6470
}
6571
}
6672

6773
@Override
6874
public void localKillSplit(String splitName, String defaultTreatment, long newChangeNumber) {
69-
if (newChangeNumber > _splitFetcher.changeNumber()) {
70-
_splitFetcher.killSplit(splitName, defaultTreatment, newChangeNumber);
75+
if (newChangeNumber > _splitCache.getChangeNumber()) {
76+
_splitCache.kill(splitName, defaultTreatment, newChangeNumber);
7177
refreshSplits(newChangeNumber);
7278
}
7379
}

0 commit comments

Comments
 (0)