Skip to content

Commit a21bdc3

Browse files
authored
Merge branch 'v6' into feature/new_event_parsing
2 parents a8c53db + 7ad0cda commit a21bdc3

2 files changed

Lines changed: 26 additions & 2 deletions

File tree

  • stream-chat-android-state/src

stream-chat-android-state/src/main/java/io/getstream/chat/android/state/sync/internal/SyncManager.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ import java.util.concurrent.atomic.AtomicBoolean
7878
import java.util.concurrent.atomic.AtomicReference
7979

8080
private const val QUERIES_TO_RETRY = 3
81+
private const val SYNC_MAX_CIDS = 100
8182

8283
/**
8384
* This class is responsible to sync messages, reactions and channel data. It tries to sync then, if necessary,
@@ -303,10 +304,11 @@ internal class SyncManager(
303304
val lastSyncAt = syncState?.lastSyncedAt ?: Date(now())
304305
val rawLastSyncAt = syncState?.rawLastSyncedAt
305306
logger.v { "[performSync] lastSyncAt: $lastSyncAt, rawLastSyncAt: $rawLastSyncAt" }
307+
val cappedCids = cids.take(SYNC_MAX_CIDS)
306308
val result = if (rawLastSyncAt != null) {
307-
chatClient.getSyncHistory(cids, rawLastSyncAt).await()
309+
chatClient.getSyncHistory(cappedCids, rawLastSyncAt).await()
308310
} else {
309-
chatClient.getSyncHistory(cids, lastSyncAt).await()
311+
chatClient.getSyncHistory(cappedCids, lastSyncAt).await()
310312
}
311313
if (result.isTooManyEventsToSyncError()) {
312314
logger.e { "[performSync] failed (too many events to sync): $result" }

stream-chat-android-state/src/test/java/io/getstream/chat/android/state/internal/SyncManagerTest.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ import org.junit.jupiter.api.Test
7070
import org.junit.jupiter.api.TestInstance
7171
import org.mockito.kotlin.any
7272
import org.mockito.kotlin.doReturn
73+
import org.mockito.kotlin.eq
7374
import org.mockito.kotlin.mock
7475
import org.mockito.kotlin.never
7576
import org.mockito.kotlin.times
@@ -223,6 +224,27 @@ internal class SyncManagerTest {
223224
}
224225
}
225226

227+
@Test
228+
fun `performSync caps channel_cids at 100`() = runTest(testDispatcher) {
229+
/* Given */
230+
_syncState.value = null
231+
whenever(repositoryFacade.selectSyncState(any())) doReturn null
232+
val cids = (1..150).map { "messaging:channel-$it" }
233+
val expectedCids = cids.take(100)
234+
235+
whenever(chatClient.getSyncHistory(any(), any<Date>())) doReturn TestCall(
236+
Result.Success(emptyList()),
237+
)
238+
239+
val syncManager = buildSyncManager()
240+
241+
/* When */
242+
syncManager.performSync(cids = cids)
243+
244+
/* Then */
245+
verify(chatClient).getSyncHistory(eq(expectedCids), any<Date>())
246+
}
247+
226248
@Test
227249
fun `test sync max threshold for messages`() = runTest(testDispatcher) {
228250
/* Given */

0 commit comments

Comments
 (0)