element-hq / element-hq/hydrogen-web

App doesn't detect beginning of timeline and keeps trying to paginate back

Open
#754 0 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
TypeScript
Stars
714
Forks
131
PR merge metrics
No merged PRs in 30d

Description

When scrolling to the top of a room, I often see errors like this popping up, seemingly in a loop:
I have a feeling this might be happening more recently than it was in the past, so perhaps there was a change in synapse that helped provoke this behavior in Hydrogen,
```
room.fillGap(): Invalid end token in response:
writeFragmentFill@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/matrix/room/timeline/persistence/GapWriter.js:167:19
fillGap/<@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/matrix/room/BaseRoom.js:314:45
async*run@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/logging/LogItem.ts:118:30
_run@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/logging/BaseLogger.ts:57:25
run@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/logging/BaseLogger.ts:34:17
wrapOrRun@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/logging/BaseLogger.ts:18:19
fillGap@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/matrix/room/BaseRoom.js:273:38
fill@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js:34:34
notifyVisible@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js:58:38
_setVisibleTileRange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:76:22
setVisibleTileRange/<@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:60:22
promise callback*setVisibleTileRange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:59:31
updateVisibleRange@http://localhost:3000/ui/session/room/TimelineView.ts:113:16
restoreScrollPosition@http://localhost:3000/ui/session/room/TimelineView.ts:73:12
render/this.tilesView<@http://localhost:3000/ui/session/room/TimelineView.ts:26:61
onUpdate@http://localhost:3000/ui/session/room/TimelineView.ts:142:10
emitUpdate@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/observable/list/BaseObservableList.ts:30:9
_emitSpontanousUpdate@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TilesCollection.js:45:14
emitChange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/SimpleTile.js:82:18
fill@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js:44:22
async*notifyVisible@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js:58:38
_setVisibleTileRange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:76:22
setVisibleTileRange/<@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:60:22
promise callback*setVisibleTileRange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:59:31
updateVisibleRange@http://localhost:3000/ui/session/room/TimelineView.ts:113:16
restoreScrollPosition@http://localhost:3000/ui/session/room/TimelineView.ts:73:12
render/this.tilesView<@http://localhost:3000/ui/session/room/TimelineView.ts:26:61
onUpdate@http://localhost:3000/ui/session/room/TimelineView.ts:142:10
emitUpdate@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/observable/list/BaseObservableList.ts:30:9
_emitSpontanousUpdate@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TilesCollection.js:45:14
emitChange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/SimpleTile.js:82:18
fill@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js:44:22
async*notifyVisible@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js:58:38
_setVisibleTileRange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:76:22
setVisibleTileRange/<@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:60:22
promise callback*setVisibleTileRange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:59:31
updateVisibleRange@http://localhost:3000/ui/session/room/TimelineView.ts:113:16
restoreScrollPosition@http://localhost:3000/ui/session/room/TimelineView.ts:73:12
render/this.tilesView<@http://localhost:3000/ui/session/room/TimelineView.ts:26:61
onUpdate@http://localhost:3000/ui/session/room/TimelineView.ts:142:10
emitUpdate@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/observable/list/BaseObservableList.ts:30:9
_emitSpontanousUpdate@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TilesCollection.js:45:14
emitChange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/SimpleTile.js:82:18
fill@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js:44:22
async*notifyVisible@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js:58:38
_setVisibleTileRange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:76:22
setVisibleTileRange/<@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:60:22
promise callback*setVisibleTileRange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:59:31
updateVisibleRange@http://localhost:3000/ui/session/room/TimelineView.ts:113:16
restoreScrollPosition@http://localhost:3000/ui/session/room/TimelineView.ts:73:12
render/this.tilesView<@http://localhost:3000/ui/session/room/TimelineView.ts:26:61
onUpdate@http://localhost:3000/ui/session/room/TimelineView.ts:142:10
emitUpdate@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/observable/list/BaseObservableList.ts:30:9
_emitSpontanousUpdate@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TilesCollection.js:45:14
emitChange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/SimpleTile.js:82:18
fill@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js:44:22
async*notifyVisible@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js:58:38
_setVisibleTileRange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:76:22
setVisibleTileRange/<@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:60:22
promise callback*setVisibleTileRange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:59:31
updateVisibleRange@http://localhost:3000/ui/session/room/TimelineView.ts:113:16
[GapTile.js:36:25](http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js)

Contributor guide

Open the contributing guide

Research direction

Reproduce the loop by scrolling to the top of a room, then trace the gap-loading flow from src/domain/session/room/timeline/tiles/GapTile.js through src/matrix/room/BaseRoom.js to src/matrix/room/timeline/persistence/GapWriter.js, especially the reported line 167. Check how the invalid end token is handled and how the beginning of the timeline is represented; done means reaching the start no longer triggers repeated pagination attempts.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, typescript
Domain
frontend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.