forked from mystiq/hydrogen-web
Store more events from backfill
This commit is contained in:
parent
b2b5690739
commit
df273c5e2c
1 changed files with 16 additions and 14 deletions
|
@ -47,28 +47,30 @@ export class GapWriter {
|
||||||
}
|
}
|
||||||
nonOverlappingEvents.push(...remainingEvents.slice(0, duplicateEventIndex));
|
nonOverlappingEvents.push(...remainingEvents.slice(0, duplicateEventIndex));
|
||||||
if (!expectedOverlappingEventId || duplicateEventId === expectedOverlappingEventId) {
|
if (!expectedOverlappingEventId || duplicateEventId === expectedOverlappingEventId) {
|
||||||
|
// Only link fragment if this is the first overlapping fragment we discover.
|
||||||
|
// TODO is this sufficient? Might we get "out of order" fragments from events?
|
||||||
|
if (!neighbourFragmentEntry) {
|
||||||
// TODO: check here that the neighbourEvent is at the correct edge of it's fragment
|
// TODO: check here that the neighbourEvent is at the correct edge of it's fragment
|
||||||
// get neighbour fragment to link it up later on
|
// get neighbour fragment to link it up later on
|
||||||
const neighbourEvent = await txn.timelineEvents.getByEventId(this._roomId, duplicateEventId);
|
const neighbourEvent = await txn.timelineEvents.getByEventId(this._roomId, duplicateEventId);
|
||||||
if (neighbourEvent.fragmentId === fragmentEntry.fragmentId) {
|
|
||||||
log.log("hit #160, prevent fragment linking to itself", log.level.Warn);
|
|
||||||
} else {
|
|
||||||
const neighbourFragment = await txn.timelineFragments.get(this._roomId, neighbourEvent.fragmentId);
|
const neighbourFragment = await txn.timelineFragments.get(this._roomId, neighbourEvent.fragmentId);
|
||||||
neighbourFragmentEntry = fragmentEntry.createNeighbourEntry(neighbourFragment);
|
neighbourFragmentEntry = fragmentEntry.createNeighbourEntry(neighbourFragment);
|
||||||
}
|
}
|
||||||
// trim overlapping events
|
}
|
||||||
remainingEvents = null;
|
// If more events remain, or if this wasn't the expected overlapping event,
|
||||||
} else {
|
|
||||||
// we've hit https://github.com/matrix-org/synapse/issues/7164,
|
// we've hit https://github.com/matrix-org/synapse/issues/7164,
|
||||||
// e.g. the event id we found is already in our store but it is not
|
// e.g. the event id we found is already in our store but it is not
|
||||||
// the adjacent fragment id. Ignore the event, but keep processing the ones after.
|
// the adjacent fragment id. Ignore the event, but keep processing the ones after.
|
||||||
remainingEvents = remainingEvents.slice(duplicateEventIndex + 1);
|
remainingEvents = remainingEvents.slice(duplicateEventIndex + 1);
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
nonOverlappingEvents.push(...remainingEvents);
|
nonOverlappingEvents.push(...remainingEvents);
|
||||||
remainingEvents = null;
|
remainingEvents = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (neighbourFragmentEntry?.fragmentId === fragmentEntry.fragmentId) {
|
||||||
|
log.log("hit #160, prevent fragment linking to itself", log.level.Warn);
|
||||||
|
neighbourFragmentEntry = null;
|
||||||
|
}
|
||||||
return {nonOverlappingEvents, neighbourFragmentEntry};
|
return {nonOverlappingEvents, neighbourFragmentEntry};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue