Skip to content

Commit 643d36c

Browse files
authored
Segment, parser and storage commons (#623)
1 parent 0fdb768 commit 643d36c

56 files changed

Lines changed: 230 additions & 107 deletions

File tree

Some content is hidden

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

client/pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,16 @@
172172
<artifactId>targeting-engine</artifactId>
173173
<version>${project.version}</version>
174174
</dependency>
175+
<dependency>
176+
<groupId>io.split.client</groupId>
177+
<artifactId>parsing-commons</artifactId>
178+
<version>${project.version}</version>
179+
</dependency>
180+
<dependency>
181+
<groupId>io.split.client</groupId>
182+
<artifactId>segment-commons</artifactId>
183+
<version>${project.version}</version>
184+
</dependency>
175185
<dependency>
176186
<groupId>io.split.client</groupId>
177187
<artifactId>pluggable-storage</artifactId>

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

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,10 @@
5757
import io.split.engine.experiments.SplitParser;
5858
import io.split.engine.experiments.SplitSynchronizationTask;
5959
import io.split.engine.experiments.RuleBasedSegmentParser;
60+
import io.split.engine.segments.ExecutorFactory;
6061
import io.split.engine.segments.SegmentChangeFetcher;
6162
import io.split.engine.segments.SegmentSynchronizationTaskImp;
63+
import io.split.engine.segments.TelemetryListener;
6264
import io.split.integrations.IntegrationsConfig;
6365
import io.split.service.SplitHttpClientImpl;
6466
import io.split.service.SplitHttpClient;
@@ -85,6 +87,7 @@
8587
import io.split.storages.pluggable.adapters.UserCustomRuleBasedSegmentAdapterConsumer;
8688
import io.split.storages.pluggable.domain.UserStorageWrapper;
8789
import io.split.storages.pluggable.synchronizer.TelemetryConsumerSubmitter;
90+
import io.split.telemetry.domain.enums.LastSynchronizationRecordsEnum;
8891
import io.split.telemetry.storage.InMemoryTelemetryStorage;
8992
import io.split.telemetry.storage.NoopTelemetryStorage;
9093
import io.split.telemetry.storage.TelemetryStorage;
@@ -129,6 +132,7 @@
129132
import java.util.List;
130133
import java.util.ArrayList;
131134

135+
import io.split.client.utils.SplitExecutorFactory;
132136
import static io.split.client.utils.SplitExecutorFactory.buildExecutorService;
133137

134138
public class SplitFactoryImpl implements SplitFactory {
@@ -427,12 +431,17 @@ protected SplitFactoryImpl(SplitClientConfig config) {
427431
segmentChangeFetcher = new LocalhostSegmentChangeFetcher(config.segmentDirectory());
428432
}
429433

434+
TelemetryListener segmentTelemetryListener =
435+
t -> _telemetryStorageProducer.recordSuccessfulSync(LastSynchronizationRecordsEnum.SEGMENTS, t);
436+
ExecutorFactory segmentExecutorFactory =
437+
(tf, name, n) -> SplitExecutorFactory.buildScheduledExecutorService(tf, name, n);
430438
_segmentSynchronizationTaskImp = new SegmentSynchronizationTaskImp(segmentChangeFetcher,
431439
config.segmentsRefreshRate(),
432440
config.numThreadsForSegmentFetch(),
433441
segmentCache,
434-
_telemetryStorageProducer,
442+
segmentTelemetryListener,
435443
_splitCache,
444+
segmentExecutorFactory,
436445
config.getThreadFactory(),
437446
ruleBasedSegmentCache);
438447

@@ -696,12 +705,17 @@ private SegmentSynchronizationTaskImp buildSegments(SplitClientConfig config,
696705
SegmentChangeFetcher segmentChangeFetcher = HttpSegmentChangeFetcher.create(_splitHttpClient, _rootTarget,
697706
_telemetryStorageProducer);
698707

708+
TelemetryListener segTelemetryListener =
709+
t -> _telemetryStorageProducer.recordSuccessfulSync(LastSynchronizationRecordsEnum.SEGMENTS, t);
710+
ExecutorFactory segExecutorFactory =
711+
(tf, name, n) -> SplitExecutorFactory.buildScheduledExecutorService(tf, name, n);
699712
return new SegmentSynchronizationTaskImp(segmentChangeFetcher,
700713
config.segmentsRefreshRate(),
701714
config.numThreadsForSegmentFetch(),
702715
segmentCacheProducer,
703-
_telemetryStorageProducer,
716+
segTelemetryListener,
704717
splitCacheConsumer,
718+
segExecutorFactory,
705719
config.getThreadFactory(),
706720
ruleBasedSegmentCache);
707721
}
Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package io.split.storages;
22

3-
import java.util.Set;
4-
5-
public interface SplitCacheCommons {
3+
public interface SplitCacheCommons extends SegmentsProvider {
64
long getChangeNumber();
7-
Set<String> getSegments();
85
}

client/src/test/java/io/split/engine/common/LocalhostSynchronizerTest.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77
import io.split.client.utils.FileInputStreamProvider;
88
import io.split.client.utils.InputStreamProvider;
99
import io.split.engine.experiments.*;
10+
import io.split.engine.segments.ExecutorFactory;
1011
import io.split.engine.segments.SegmentChangeFetcher;
1112
import io.split.engine.segments.SegmentSynchronizationTaskImp;
13+
import io.split.engine.segments.TelemetryListener;
1214
import io.split.storages.*;
1315
import io.split.storages.memory.InMemoryCacheImp;
1416
import io.split.storages.memory.RuleBasedSegmentCacheInMemoryImp;
@@ -24,6 +26,8 @@
2426
public class LocalhostSynchronizerTest {
2527

2628
private static final TelemetryStorage TELEMETRY_STORAGE_NOOP = Mockito.mock(NoopTelemetryStorage.class);
29+
private static final TelemetryListener TELEMETRY_LISTENER = t -> {};
30+
private static final ExecutorFactory EXECUTOR_FACTORY = (tf, name, n) -> java.util.concurrent.Executors.newScheduledThreadPool(n);
2731
private static final FlagSetsFilter FLAG_SETS_FILTER = new FlagSetsFilterImpl(new HashSet<>());
2832

2933
@Test
@@ -45,7 +49,7 @@ public void testSyncAll(){
4549
SegmentCacheProducer segmentCacheProducer = new SegmentCacheInMemoryImpl();
4650

4751
SegmentSynchronizationTaskImp segmentSynchronizationTaskImp = new SegmentSynchronizationTaskImp(segmentChangeFetcher, 1000, 1, segmentCacheProducer,
48-
TELEMETRY_STORAGE_NOOP, splitCacheProducer, null, ruleBasedSegmentCache);
52+
TELEMETRY_LISTENER, splitCacheProducer, EXECUTOR_FACTORY, null, ruleBasedSegmentCache);
4953
SplitTasks splitTasks = SplitTasks.build(splitSynchronizationTask, segmentSynchronizationTaskImp, null, null, null, null);
5054

5155
LocalhostSynchronizer localhostSynchronizer = new LocalhostSynchronizer(splitTasks, splitFetcher, false);
@@ -72,7 +76,7 @@ public void testPeriodicFetching() throws InterruptedException {
7276
SegmentCacheProducer segmentCacheProducer = new SegmentCacheInMemoryImpl();
7377

7478
SegmentSynchronizationTaskImp segmentSynchronizationTaskImp = new SegmentSynchronizationTaskImp(segmentChangeFetcher, 1000, 1, segmentCacheProducer,
75-
TELEMETRY_STORAGE_NOOP, splitCacheProducer, null, ruleBasedSegmentCache);
79+
TELEMETRY_LISTENER, splitCacheProducer, EXECUTOR_FACTORY, null, ruleBasedSegmentCache);
7680

7781
SplitTasks splitTasks = SplitTasks.build(splitSynchronizationTask, segmentSynchronizationTaskImp, null, null, null, null);
7882
LocalhostSynchronizer localhostSynchronizer = new LocalhostSynchronizer(splitTasks, splitFetcher, true);

client/src/test/java/io/split/engine/common/SynchronizerTest.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
import io.split.client.impressions.UniqueKeysTracker;
66
import io.split.client.interceptors.FlagSetsFilter;
77
import io.split.client.interceptors.FlagSetsFilterImpl;
8+
import io.split.engine.segments.ExecutorFactory;
89
import io.split.engine.segments.SegmentChangeFetcher;
910
import io.split.engine.segments.SegmentSynchronizationTaskImp;
11+
import io.split.engine.segments.TelemetryListener;
1012
import io.split.storages.*;
1113
import io.split.storages.memory.InMemoryCacheImp;
1214
import io.split.engine.experiments.FetchResult;
@@ -81,9 +83,11 @@ public void syncAll() throws InterruptedException {
8183

8284
@Test
8385
public void testSyncAllSegments() throws InterruptedException, NoSuchFieldException, IllegalAccessException {
86+
ExecutorFactory executorFactory = (tf, name, n) -> java.util.concurrent.Executors.newScheduledThreadPool(n);
87+
TelemetryListener telemetryListener = t -> {};
8488
SegmentSynchronizationTask segmentSynchronizationTask = new SegmentSynchronizationTaskImp(Mockito.mock(SegmentChangeFetcher.class),
85-
20L, 1, _segmentCacheProducer, Mockito.mock(TelemetryRuntimeProducer.class),
86-
Mockito.mock(SplitCacheConsumer.class), null, Mockito.mock(RuleBasedSegmentCache.class));
89+
20L, 1, _segmentCacheProducer, telemetryListener,
90+
Mockito.mock(SplitCacheConsumer.class), executorFactory, null, Mockito.mock(RuleBasedSegmentCache.class));
8791
Field synchronizerSegmentFetcher = SynchronizerImp.class.getDeclaredField("_segmentSynchronizationTaskImp");
8892
synchronizerSegmentFetcher.setAccessible(true);
8993
Field modifiersField = Field.class.getDeclaredField("modifiers");

client/src/test/java/io/split/engine/experiments/SplitFetcherTest.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@
1212
import io.split.engine.common.FetchOptions;
1313
import io.split.rules.matchers.AllKeysMatcher;
1414
import io.split.rules.matchers.CombiningMatcher;
15+
import io.split.engine.segments.ExecutorFactory;
1516
import io.split.engine.segments.SegmentChangeFetcher;
1617
import io.split.engine.segments.SegmentSynchronizationTask;
1718
import io.split.engine.segments.SegmentSynchronizationTaskImp;
19+
import io.split.engine.segments.TelemetryListener;
1820
import io.split.grammar.Treatments;
1921
import io.split.telemetry.storage.InMemoryTelemetryStorage;
2022
import io.split.telemetry.storage.TelemetryRuntimeProducer;
@@ -52,6 +54,8 @@
5254
public class SplitFetcherTest {
5355
private static final Logger _log = LoggerFactory.getLogger(SplitFetcherTest.class);
5456
private static final TelemetryStorage TELEMETRY_STORAGE = Mockito.mock(InMemoryTelemetryStorage.class);
57+
private static final TelemetryListener TELEMETRY_LISTENER = t -> {};
58+
private static final ExecutorFactory EXECUTOR_FACTORY = (tf, name, n) -> java.util.concurrent.Executors.newScheduledThreadPool(n);
5559
private static final FlagSetsFilter FLAG_SETS_FILTER = new FlagSetsFilterImpl(new HashSet<>());
5660

5761
@Test
@@ -159,7 +163,7 @@ public void whenParserFailsWeRemoveTheExperiment() throws InterruptedException {
159163
RuleBasedSegmentParser ruleBasedSegmentParser = new RuleBasedSegmentParser();
160164

161165
SegmentChangeFetcher segmentChangeFetcher = mock(SegmentChangeFetcher.class);
162-
SegmentSynchronizationTask segmentSynchronizationTask = new SegmentSynchronizationTaskImp(segmentChangeFetcher, 1,10, segmentCache, TELEMETRY_STORAGE, cache, null, ruleBasedSegmentCache);
166+
SegmentSynchronizationTask segmentSynchronizationTask = new SegmentSynchronizationTaskImp(segmentChangeFetcher, 1, 10, segmentCache, TELEMETRY_LISTENER, cache, EXECUTOR_FACTORY, null, ruleBasedSegmentCache);
163167
segmentSynchronizationTask.start();
164168
SplitFetcherImp fetcher = new SplitFetcherImp(splitChangeFetcher, new SplitParser(), cache, TELEMETRY_STORAGE, FLAG_SETS_FILTER,
165169
ruleBasedSegmentParser, ruleBasedSegmentCache);
@@ -184,7 +188,7 @@ public void ifThereIsAProblemTalkingToSplitChangeCountDownLatchIsNotDecremented(
184188
RuleBasedSegmentParser ruleBasedSegmentParser = new RuleBasedSegmentParser();
185189

186190
SegmentChangeFetcher segmentChangeFetcher = mock(SegmentChangeFetcher.class);
187-
SegmentSynchronizationTask segmentSynchronizationTask = new SegmentSynchronizationTaskImp(segmentChangeFetcher, 1,10, segmentCache, TELEMETRY_STORAGE, cache, null, ruleBasedSegmentCache);
191+
SegmentSynchronizationTask segmentSynchronizationTask = new SegmentSynchronizationTaskImp(segmentChangeFetcher, 1, 10, segmentCache, TELEMETRY_LISTENER, cache, EXECUTOR_FACTORY, null, ruleBasedSegmentCache);
188192
segmentSynchronizationTask.start();
189193
SplitFetcherImp fetcher = new SplitFetcherImp(splitChangeFetcher, new SplitParser(), cache, TELEMETRY_STORAGE, FLAG_SETS_FILTER,
190194
ruleBasedSegmentParser, ruleBasedSegmentCache);
@@ -286,7 +290,7 @@ public void worksWithUserDefinedSegments() throws Exception {
286290
SegmentChangeFetcher segmentChangeFetcher = mock(SegmentChangeFetcher.class);
287291
SegmentChange segmentChange = getSegmentChange(0L, 0L, segmentName);
288292
when(segmentChangeFetcher.fetch(anyString(), anyLong(), any())).thenReturn(segmentChange);
289-
SegmentSynchronizationTask segmentSynchronizationTask = new SegmentSynchronizationTaskImp(segmentChangeFetcher, 1,10, segmentCache, Mockito.mock(TelemetryStorage.class), cache, null, ruleBasedSegmentCache);
293+
SegmentSynchronizationTask segmentSynchronizationTask = new SegmentSynchronizationTaskImp(segmentChangeFetcher, 1, 10, segmentCache, TELEMETRY_LISTENER, cache, EXECUTOR_FACTORY, null, ruleBasedSegmentCache);
290294
segmentSynchronizationTask.start();
291295
SplitFetcherImp fetcher = new SplitFetcherImp(experimentChangeFetcher, new SplitParser(), cache, TELEMETRY_STORAGE, FLAG_SETS_FILTER,
292296
ruleBasedSegmentParser, ruleBasedSegmentCache);

client/src/test/java/io/split/engine/segments/SegmentSynchronizationTaskImpTest.java

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package io.split.engine.segments;
22

3-
import com.google.common.collect.Maps;
4-
import io.split.Spec;
53
import io.split.client.LocalhostSegmentChangeFetcher;
64
import io.split.client.JsonLocalhostSplitChangeFetcher;
75
import io.split.client.interceptors.FlagSetsFilter;
@@ -11,12 +9,10 @@
119
import io.split.engine.common.FetchOptions;
1210
import io.split.engine.experiments.*;
1311
import io.split.storages.*;
12+
import io.split.telemetry.storage.TelemetryRuntimeProducer;
1413
import io.split.storages.memory.InMemoryCacheImp;
1514
import io.split.storages.memory.RuleBasedSegmentCacheInMemoryImp;
1615
import io.split.storages.memory.SegmentCacheInMemoryImpl;
17-
import io.split.telemetry.storage.InMemoryTelemetryStorage;
18-
import io.split.telemetry.storage.NoopTelemetryStorage;
19-
import io.split.telemetry.storage.TelemetryStorage;
2016
import org.junit.Assert;
2117
import org.junit.Before;
2218
import org.junit.Ignore;
@@ -32,6 +28,7 @@
3228
import java.lang.reflect.Modifier;
3329
import java.util.HashSet;
3430
import java.util.List;
31+
import java.util.concurrent.ConcurrentHashMap;
3532
import java.util.concurrent.ConcurrentMap;
3633
import java.util.concurrent.ExecutorService;
3734
import java.util.concurrent.Executors;
@@ -47,8 +44,9 @@
4744
*/
4845
public class SegmentSynchronizationTaskImpTest {
4946
private static final Logger _log = LoggerFactory.getLogger(SegmentSynchronizationTaskImpTest.class);
50-
private static final TelemetryStorage TELEMETRY_STORAGE = Mockito.mock(InMemoryTelemetryStorage.class);
51-
private static final TelemetryStorage TELEMETRY_STORAGE_NOOP = Mockito.mock(NoopTelemetryStorage.class);
47+
private static final TelemetryListener TELEMETRY_STORAGE = t -> {};
48+
private static final TelemetryListener TELEMETRY_STORAGE_NOOP = t -> {};
49+
private static final ExecutorFactory EXECUTOR_FACTORY = (tf, name, n) -> java.util.concurrent.Executors.newScheduledThreadPool(n);
5250

5351
private AtomicReference<SegmentFetcher> fetcher1 = null;
5452
private AtomicReference<SegmentFetcher> fetcher2 = null;
@@ -65,7 +63,7 @@ public void works() {
6563

6664
SegmentChangeFetcher segmentChangeFetcher = Mockito.mock(SegmentChangeFetcher.class);
6765
final SegmentSynchronizationTaskImp fetchers = new SegmentSynchronizationTaskImp(segmentChangeFetcher, 1L, 1, segmentCacheProducer,
68-
TELEMETRY_STORAGE, Mockito.mock(SplitCacheConsumer.class), null, Mockito.mock(RuleBasedSegmentCache.class));
66+
TELEMETRY_STORAGE, Mockito.mock(SplitCacheConsumer.class), EXECUTOR_FACTORY, null, Mockito.mock(RuleBasedSegmentCache.class));
6967

7068

7169
// create two tasks that will separately call segment and make sure
@@ -104,13 +102,13 @@ public void run() {
104102
@Test
105103
public void testFetchAllAsynchronousAndGetFalse() throws NoSuchFieldException, IllegalAccessException {
106104
SegmentCacheProducer segmentCacheProducer = Mockito.mock(SegmentCacheProducer.class);
107-
ConcurrentMap<String, SegmentFetcher> _segmentFetchers = Maps.newConcurrentMap();
105+
ConcurrentMap<String, SegmentFetcher> _segmentFetchers = new ConcurrentHashMap<>();
108106

109107
SegmentChangeFetcher segmentChangeFetcher = Mockito.mock(SegmentChangeFetcher.class);
110108
SegmentFetcherImp segmentFetcher = Mockito.mock(SegmentFetcherImp.class);
111109
_segmentFetchers.put("SF", segmentFetcher);
112110
final SegmentSynchronizationTaskImp fetchers = new SegmentSynchronizationTaskImp(segmentChangeFetcher, 1L, 1,
113-
segmentCacheProducer, TELEMETRY_STORAGE, Mockito.mock(SplitCacheConsumer.class), null, Mockito.mock(RuleBasedSegmentCache.class));
111+
segmentCacheProducer, TELEMETRY_STORAGE, Mockito.mock(SplitCacheConsumer.class), EXECUTOR_FACTORY, null, Mockito.mock(RuleBasedSegmentCache.class));
114112
Mockito.when(segmentFetcher.runWhitCacheHeader()).thenReturn(false);
115113
Mockito.when(segmentFetcher.fetch(Mockito.anyObject())).thenReturn(false);
116114

@@ -130,11 +128,11 @@ public void testFetchAllAsynchronousAndGetFalse() throws NoSuchFieldException, I
130128
public void testFetchAllAsynchronousAndGetTrue() throws NoSuchFieldException, IllegalAccessException {
131129
SegmentCacheProducer segmentCacheProducer = Mockito.mock(SegmentCacheProducer.class);
132130

133-
ConcurrentMap<String, SegmentFetcher> _segmentFetchers = Maps.newConcurrentMap();
131+
ConcurrentMap<String, SegmentFetcher> _segmentFetchers = new ConcurrentHashMap<>();
134132
SegmentChangeFetcher segmentChangeFetcher = Mockito.mock(SegmentChangeFetcher.class);
135133
SegmentFetcherImp segmentFetcher = Mockito.mock(SegmentFetcherImp.class);
136134
final SegmentSynchronizationTaskImp fetchers = new SegmentSynchronizationTaskImp(segmentChangeFetcher, 1L, 1, segmentCacheProducer,
137-
TELEMETRY_STORAGE, Mockito.mock(SplitCacheConsumer.class), null, Mockito.mock(RuleBasedSegmentCache.class));
135+
TELEMETRY_STORAGE, Mockito.mock(SplitCacheConsumer.class), EXECUTOR_FACTORY, null, Mockito.mock(RuleBasedSegmentCache.class));
138136

139137
// Before executing, we'll update the map of segmentFecthers via reflection.
140138
Field segmentFetchersForced = SegmentSynchronizationTaskImp.class.getDeclaredField("_segmentFetchers");
@@ -162,7 +160,7 @@ public void testLocalhostSegmentChangeFetcher() throws InterruptedException, Fil
162160
RuleBasedSegmentCache ruleBasedSegmentCache = new RuleBasedSegmentCacheInMemoryImp();
163161
RuleBasedSegmentParser ruleBasedSegmentParser = new RuleBasedSegmentParser();
164162

165-
SplitFetcher splitFetcher = new SplitFetcherImp(splitChangeFetcher, splitParser, splitCacheProducer, TELEMETRY_STORAGE_NOOP, flagSetsFilter,
163+
SplitFetcher splitFetcher = new SplitFetcherImp(splitChangeFetcher, splitParser, splitCacheProducer, Mockito.mock(TelemetryRuntimeProducer.class), flagSetsFilter,
166164
ruleBasedSegmentParser, ruleBasedSegmentCache);
167165

168166
SplitSynchronizationTask splitSynchronizationTask = new SplitSynchronizationTask(splitFetcher, splitCacheProducer, 1000, null);
@@ -175,7 +173,7 @@ public void testLocalhostSegmentChangeFetcher() throws InterruptedException, Fil
175173
SegmentCacheProducer segmentCacheProducer = new SegmentCacheInMemoryImpl();
176174

177175
SegmentSynchronizationTaskImp segmentSynchronizationTaskImp = new SegmentSynchronizationTaskImp(segmentChangeFetcher, 1000, 1, segmentCacheProducer,
178-
TELEMETRY_STORAGE_NOOP, splitCacheProducer, null, ruleBasedSegmentCache);
176+
TELEMETRY_STORAGE_NOOP, splitCacheProducer, EXECUTOR_FACTORY, null, ruleBasedSegmentCache);
179177

180178
segmentSynchronizationTaskImp.start();
181179

parsing-commons/pom.xml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?xml version="1.0"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<groupId>io.split.client</groupId>
7+
<artifactId>java-client-parent</artifactId>
8+
<version>4.18.3</version>
9+
</parent>
10+
11+
<version>4.18.3</version>
12+
<artifactId>parsing-commons</artifactId>
13+
<packaging>jar</packaging>
14+
<name>Parsing Commons</name>
15+
<description>DTOs and parsing utilities shared between Split SDK modules</description>
16+
17+
<dependencies>
18+
<dependency>
19+
<groupId>io.split.client</groupId>
20+
<artifactId>targeting-engine</artifactId>
21+
<version>${project.version}</version>
22+
</dependency>
23+
<dependency>
24+
<groupId>junit</groupId>
25+
<artifactId>junit</artifactId>
26+
<version>4.13.1</version>
27+
<scope>test</scope>
28+
</dependency>
29+
<dependency>
30+
<groupId>org.mockito</groupId>
31+
<artifactId>mockito-core</artifactId>
32+
<version>5.14.2</version>
33+
<scope>test</scope>
34+
</dependency>
35+
</dependencies>
36+
</project>

client/src/main/java/io/split/client/dtos/BetweenMatcherData.java renamed to parsing-commons/src/main/java/io/split/client/dtos/BetweenMatcherData.java

File renamed without changes.

client/src/main/java/io/split/client/dtos/BetweenStringMatcherData.java renamed to parsing-commons/src/main/java/io/split/client/dtos/BetweenStringMatcherData.java

File renamed without changes.

0 commit comments

Comments
 (0)