Skip to content

Commit 6e576d6

Browse files
Merge pull request #201 from splitio/development
Development
2 parents 3c3a38d + fc1a11a commit 6e576d6

File tree

6 files changed

+35
-6
lines changed

6 files changed

+35
-6
lines changed

client/CHANGES.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
CHANGES
22

3+
4.1.5 (Apr 6, 2021)
4+
-Updated: Streaming retry fix.
5+
36
4.1.4 (Mar 19, 2021)
47
- Updated: Internal cache structure refactor.
58
- Updated: Streaming revamp with several bugfixes and improved log messages.

client/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>io.split.client</groupId>
77
<artifactId>java-client-parent</artifactId>
8-
<version>4.1.4</version>
8+
<version>4.1.5</version>
99
</parent>
1010
<artifactId>java-client</artifactId>
1111
<packaging>jar</packaging>

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
public class SynchronizerImp implements Synchronizer {
2121
private static final Logger _log = LoggerFactory.getLogger(Synchronizer.class);
22+
private static final int RETRIES_NUMBER = 10;
2223

2324
private final SplitSynchronizationTask _splitSynchronizationTask;
2425
private final SplitFetcher _splitFetcher;
@@ -69,8 +70,10 @@ public void stopPeriodicFetching() {
6970

7071
@Override
7172
public void refreshSplits(long targetChangeNumber) {
72-
if (targetChangeNumber > _splitCache.getChangeNumber()) {
73+
int retries = 1;
74+
while(targetChangeNumber > _splitCache.getChangeNumber() && retries <= RETRIES_NUMBER) {
7375
_splitFetcher.forceRefresh(true);
76+
retries++;
7477
}
7578
}
7679

@@ -84,7 +87,8 @@ public void localKillSplit(String splitName, String defaultTreatment, long newCh
8487

8588
@Override
8689
public void refreshSegment(String segmentName, long changeNumber) {
87-
if (changeNumber > _segmentCache.getChangeNumber(segmentName)) {
90+
int retries = 1;
91+
while(changeNumber > _segmentCache.getChangeNumber(segmentName) && retries <= RETRIES_NUMBER) {
8892
SegmentFetcher fetcher = _segmentSynchronizationTaskImp.getFetcher(segmentName);
8993
try{
9094
fetcher.fetch(true);
@@ -93,6 +97,7 @@ public void refreshSegment(String segmentName, long changeNumber) {
9397
catch (NullPointerException np){
9498
throw new NullPointerException();
9599
}
100+
retries++;
96101
}
97102
}
98103
}

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

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.split.cache.SplitCache;
55
import io.split.engine.experiments.SplitFetcherImp;
66
import io.split.engine.experiments.SplitSynchronizationTask;
7+
import io.split.engine.segments.SegmentFetcher;
78
import io.split.engine.segments.SegmentSynchronizationTask;
89
import org.junit.Before;
910
import org.junit.Test;
@@ -15,14 +16,15 @@ public class SynchronizerTest {
1516
private SplitFetcherImp _splitFetcher;
1617
private SplitCache _splitCache;
1718
private Synchronizer _synchronizer;
19+
private SegmentCache _segmentCache;
1820

1921
@Before
2022
public void beforeMethod() {
2123
_refreshableSplitFetcherTask = Mockito.mock(SplitSynchronizationTask.class);
2224
_segmentFetcher = Mockito.mock(SegmentSynchronizationTask.class);
2325
_splitFetcher = Mockito.mock(SplitFetcherImp.class);
2426
_splitCache = Mockito.mock(SplitCache.class);
25-
SegmentCache _segmentCache = Mockito.mock(SegmentCache.class);
27+
_segmentCache = Mockito.mock(SegmentCache.class);
2628

2729
_synchronizer = new SynchronizerImp(_refreshableSplitFetcherTask, _splitFetcher, _segmentFetcher, _splitCache, _segmentCache);
2830
}
@@ -51,4 +53,23 @@ public void stopPeriodicFetching() {
5153
Mockito.verify(_refreshableSplitFetcherTask, Mockito.times(1)).stop();
5254
Mockito.verify(_segmentFetcher, Mockito.times(1)).stop();
5355
}
56+
57+
@Test
58+
public void streamingRetryOnSplit() {
59+
Mockito.when(_splitCache.getChangeNumber()).thenReturn(0l).thenReturn(0l).thenReturn(1l);
60+
_synchronizer.refreshSplits(1l);
61+
62+
Mockito.verify(_splitCache, Mockito.times(3)).getChangeNumber();
63+
}
64+
65+
@Test
66+
public void streamingRetryOnSegment() {
67+
SegmentFetcher fetcher = Mockito.mock(SegmentFetcher.class);
68+
Mockito.when(_segmentFetcher.getFetcher(Mockito.anyString())).thenReturn(fetcher);
69+
Mockito.when(_segmentCache.getChangeNumber(Mockito.anyString())).thenReturn(0l).thenReturn(0l).thenReturn(1l);
70+
_synchronizer.refreshSegment("Segment",1l);
71+
72+
Mockito.verify(_segmentCache, Mockito.times(3)).getChangeNumber(Mockito.anyString());
73+
}
74+
5475
}

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>io.split.client</groupId>
66
<artifactId>java-client-parent</artifactId>
7-
<version>4.1.4</version>
7+
<version>4.1.5</version>
88
<dependencyManagement>
99
<dependencies>
1010
<dependency>

testing/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>io.split.client</groupId>
88
<artifactId>java-client-parent</artifactId>
9-
<version>4.1.4</version>
9+
<version>4.1.5</version>
1010
</parent>
1111

1212
<artifactId>java-client-testing</artifactId>

0 commit comments

Comments
 (0)