Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
FinClip
ligase
提交
fad7e954
ligase
项目概览
FinClip
/
ligase
通知
33
Star
8
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
ligase
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
fad7e954
编写于
4月 20, 2017
作者:
K
Kegsay
提交者:
GitHub
4月 20, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
/sync: Handle missing state events and return events in the correct order (#72)
上级
92a03252
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
38 addition
and
11 deletion
+38
-11
src/github.com/matrix-org/dendrite/syncserver/storage/output_room_events_table.go
...g/dendrite/syncserver/storage/output_room_events_table.go
+38
-11
未找到文件。
src/github.com/matrix-org/dendrite/syncserver/storage/output_room_events_table.go
浏览文件 @
fad7e954
...
...
@@ -146,19 +146,15 @@ func (s *outputRoomEventsStatements) StateBetween(txn *sql.Tx, oldPos, newPos ty
eventIDToEvent
[
ev
.
EventID
()]
=
ev
}
stateBetween
,
missingEvents
:=
mapEventIDsToEvents
(
eventIDToEvent
,
stateNeeded
)
if
len
(
missingEvents
)
>
0
{
return
nil
,
fmt
.
Errorf
(
"error StateBetween: TODO missing events"
)
}
return
stateBetween
,
nil
return
s
.
fetchStateEvents
(
txn
,
stateNeeded
,
eventIDToEvent
)
}
// convert the set of event IDs into a set of events. Mark any which are missing.
func
mapEventIDsToEvents
(
eventIDToEvent
map
[
string
]
gomatrixserverlib
.
Event
,
stateNeeded
map
[
string
]
map
[
string
]
bool
)
(
map
[
string
][]
gomatrixserverlib
.
Event
,
map
[
string
][]
string
)
{
// fetchStateEvents converts the set of event IDs into a set of events. It will fetch any which are missing from the database.
// Returns a map of room ID to list of events.
func
(
s
*
outputRoomEventsStatements
)
fetchStateEvents
(
txn
*
sql
.
Tx
,
roomIDToEventIDSet
map
[
string
]
map
[
string
]
bool
,
eventIDToEvent
map
[
string
]
gomatrixserverlib
.
Event
)
(
map
[
string
][]
gomatrixserverlib
.
Event
,
error
)
{
stateBetween
:=
make
(
map
[
string
][]
gomatrixserverlib
.
Event
)
missingEvents
:=
make
(
map
[
string
][]
string
)
for
roomID
,
ids
:=
range
stateNeeded
{
for
roomID
,
ids
:=
range
roomIDToEventIDSet
{
events
:=
stateBetween
[
roomID
]
for
id
,
need
:=
range
ids
{
if
!
need
{
...
...
@@ -175,7 +171,25 @@ func mapEventIDsToEvents(eventIDToEvent map[string]gomatrixserverlib.Event, stat
}
stateBetween
[
roomID
]
=
events
}
return
stateBetween
,
missingEvents
if
len
(
missingEvents
)
>
0
{
// This happens when add_state_ids has an event ID which is not in the provided range.
// We need to explicitly fetch them.
allMissingEventIDs
:=
[]
string
{}
for
_
,
missingEvIDs
:=
range
missingEvents
{
allMissingEventIDs
=
append
(
allMissingEventIDs
,
missingEvIDs
...
)
}
evs
,
err
:=
s
.
Events
(
txn
,
allMissingEventIDs
)
if
err
!=
nil
{
return
nil
,
err
}
// we know we got them all otherwise an error would've been returned, so just loop the events
for
_
,
ev
:=
range
evs
{
roomID
:=
ev
.
RoomID
()
stateBetween
[
roomID
]
=
append
(
stateBetween
[
roomID
],
ev
)
}
}
return
stateBetween
,
nil
}
// MaxID returns the ID of the last inserted event in this table. 'txn' is optional. If it is not supplied,
...
...
@@ -210,7 +224,13 @@ func (s *outputRoomEventsStatements) RecentEventsInRoom(txn *sql.Tx, roomID stri
return
nil
,
err
}
defer
rows
.
Close
()
return
rowsToEvents
(
rows
)
events
,
err
:=
rowsToEvents
(
rows
)
if
err
!=
nil
{
return
nil
,
err
}
// reverse the order because [0] is the newest event due to the ORDER BY in SQL-land. The reverse order makes [0] the oldest event,
// which is correct for /sync responses.
return
reverseEvents
(
events
),
nil
}
// Events returns the events for the given event IDs. Returns an error if any one of the event IDs given are missing
...
...
@@ -248,3 +268,10 @@ func rowsToEvents(rows *sql.Rows) ([]gomatrixserverlib.Event, error) {
}
return
result
,
nil
}
func
reverseEvents
(
input
[]
gomatrixserverlib
.
Event
)
(
output
[]
gomatrixserverlib
.
Event
)
{
for
i
:=
len
(
input
)
-
1
;
i
>=
0
;
i
--
{
output
=
append
(
output
,
input
[
i
])
}
return
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录