Skip to content

Commit 61be0ac

Browse files
Merge pull request #199 from splitio/streaming-retry
Streaming retry
2 parents c0cdc52 + f93ae28 commit 61be0ac

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

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
}

0 commit comments

Comments
 (0)