Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xindoo
redis
提交
f0a26144
R
redis
项目概览
xindoo
/
redis
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
redis
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
f0a26144
编写于
4月 21, 2020
作者:
V
Valentino Geron
提交者:
antirez
4月 24, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
XREADGROUP with NOACK should propagate only one XGROUP SETID command
上级
fbdef6a9
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
13 addition
and
7 deletion
+13
-7
src/t_stream.c
src/t_stream.c
+13
-7
未找到文件。
src/t_stream.c
浏览文件 @
f0a26144
...
...
@@ -935,6 +935,8 @@ size_t streamReplyWithRange(client *c, stream *s, streamID *start, streamID *end
streamIterator
si
;
int64_t
numfields
;
streamID
id
;
int
propagate_last_id
=
0
;
int
noack
=
flags
&
STREAM_RWR_NOACK
;
/* If the client is asking for some history, we serve it using a
* different function, so that we return entries *solely* from its
...
...
@@ -950,12 +952,14 @@ size_t streamReplyWithRange(client *c, stream *s, streamID *start, streamID *end
arraylen_ptr
=
addReplyDeferredLen
(
c
);
streamIteratorStart
(
&
si
,
s
,
start
,
end
,
rev
);
while
(
streamIteratorGetID
(
&
si
,
&
id
,
&
numfields
))
{
int
propagate_last_id
=
0
;
/* Update the group last_id if needed. */
if
(
group
&&
streamCompareID
(
&
id
,
&
group
->
last_id
)
>
0
)
{
group
->
last_id
=
id
;
propagate_last_id
=
1
;
/* Group last id should be propagated only if NOACK was
* specified, otherwise the last id would be included
* in XCLAIM. */
if
(
noack
)
propagate_last_id
=
1
;
}
/* Emit a two elements array for each item. The first is
...
...
@@ -983,7 +987,7 @@ size_t streamReplyWithRange(client *c, stream *s, streamID *start, streamID *end
* XGROUP SETID command. So if we find that there is already
* a NACK for the entry, we need to associate it to the new
* consumer. */
if
(
group
&&
!
(
flags
&
STREAM_RWR_NOACK
)
)
{
if
(
group
&&
!
noack
)
{
unsigned
char
buf
[
sizeof
(
streamID
)];
streamEncodeID
(
buf
,
&
id
);
...
...
@@ -1020,14 +1024,16 @@ size_t streamReplyWithRange(client *c, stream *s, streamID *start, streamID *end
streamPropagateXCLAIM
(
c
,
spi
->
keyname
,
group
,
spi
->
groupname
,
idarg
,
nack
);
decrRefCount
(
idarg
);
}
}
else
{
if
(
propagate_last_id
)
streamPropagateGroupID
(
c
,
spi
->
keyname
,
group
,
spi
->
groupname
);
}
arraylen
++
;
if
(
count
&&
count
==
arraylen
)
break
;
}
if
(
spi
&&
propagate_last_id
)
{
streamPropagateGroupID
(
c
,
spi
->
keyname
,
group
,
spi
->
groupname
);
}
streamIteratorStop
(
&
si
);
if
(
arraylen_ptr
)
setDeferredArrayLen
(
c
,
arraylen_ptr
,
arraylen
);
return
arraylen
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录