Skip to content

Commit 76393b5

Browse files
committed
fix read data
Signed-off-by: monkey <[email protected]>
1 parent 3871963 commit 76393b5

File tree

1 file changed

+79
-76
lines changed

1 file changed

+79
-76
lines changed

command.go

Lines changed: 79 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1879,11 +1879,7 @@ func (cmd *XInfoStreamFullCmd) readReply(rd *proto.Reader) error {
18791879
case "entries":
18801880
cmd.val.Entries, err = readXMessageSlice(rd)
18811881
case "groups":
1882-
groups, err := rd.ReadReply(readStreamGroups)
1883-
if err != nil {
1884-
return err
1885-
}
1886-
cmd.val.Groups = groups.([]XInfoStreamGroup)
1882+
cmd.val.Groups, err = readStreamGroups(rd)
18871883
default:
18881884
return fmt.Errorf("redis: unexpected content %s "+
18891885
"in XINFO STREAM reply", key)
@@ -1895,9 +1891,13 @@ func (cmd *XInfoStreamFullCmd) readReply(rd *proto.Reader) error {
18951891
return nil
18961892
}
18971893

1898-
func readStreamGroups(rd *proto.Reader, n int64) (interface{}, error) {
1894+
func readStreamGroups(rd *proto.Reader) ([]XInfoStreamGroup, error) {
1895+
n, err := rd.ReadArrayLen()
1896+
if err != nil {
1897+
return nil, err
1898+
}
18991899
groups := make([]XInfoStreamGroup, 0, n)
1900-
for i := int64(0); i < n; i++ {
1900+
for i := 0; i < n; i++ {
19011901
nn, err := rd.ReadArrayLen()
19021902
if err != nil {
19031903
return nil, err
@@ -1906,31 +1906,34 @@ func readStreamGroups(rd *proto.Reader, n int64) (interface{}, error) {
19061906
return nil, fmt.Errorf("redis: got %d elements in XINFO STREAM FULL reply,"+
19071907
"wanted 10", nn)
19081908
}
1909-
key, err := rd.ReadString()
1910-
if err != nil {
1911-
return nil, err
1912-
}
19131909

19141910
group := XInfoStreamGroup{}
19151911

1916-
switch key {
1917-
case "name":
1918-
group.Name, err = rd.ReadString()
1919-
case "last-delivered-id":
1920-
group.LastDeliveredID, err = rd.ReadString()
1921-
case "pel-count":
1922-
group.PelCount, err = rd.ReadIntReply()
1923-
case "pending":
1924-
group.Pending, err = readXInfoStreamGroupPending(rd)
1925-
case "consumers":
1926-
group.Consumers, err = readXInfoStreamConsumers(rd)
1927-
default:
1928-
return nil, fmt.Errorf("redis: unexpected content %s "+
1929-
"in XINFO STREAM reply", key)
1930-
}
1912+
for f := 0; f < 5; f++ {
1913+
key, err := rd.ReadString()
1914+
if err != nil {
1915+
return nil, err
1916+
}
19311917

1932-
if err != nil {
1933-
return nil, err
1918+
switch key {
1919+
case "name":
1920+
group.Name, err = rd.ReadString()
1921+
case "last-delivered-id":
1922+
group.LastDeliveredID, err = rd.ReadString()
1923+
case "pel-count":
1924+
group.PelCount, err = rd.ReadIntReply()
1925+
case "pending":
1926+
group.Pending, err = readXInfoStreamGroupPending(rd)
1927+
case "consumers":
1928+
group.Consumers, err = readXInfoStreamConsumers(rd)
1929+
default:
1930+
return nil, fmt.Errorf("redis: unexpected content %s "+
1931+
"in XINFO STREAM reply", key)
1932+
}
1933+
1934+
if err != nil {
1935+
return nil, err
1936+
}
19341937
}
19351938

19361939
groups = append(groups, group)
@@ -2004,71 +2007,71 @@ func readXInfoStreamConsumers(rd *proto.Reader) ([]XInfoStreamConsumer, error) {
20042007
"wanted 8", nn)
20052008
}
20062009

2007-
cKey, err := rd.ReadString()
2008-
if err != nil {
2009-
return nil, err
2010-
}
2011-
20122010
c := XInfoStreamConsumer{}
20132011

2014-
switch cKey {
2015-
case "name":
2016-
c.Name, err = rd.ReadString()
2017-
case "seen-time":
2018-
seen, err := rd.ReadIntReply()
2019-
if err != nil {
2020-
return nil, err
2021-
}
2022-
c.SeenTime = time.Unix(seen/1000, seen%1000*int64(time.Millisecond))
2023-
case "pel-count":
2024-
c.PelCount, err = rd.ReadIntReply()
2025-
case "pending":
2026-
pendingNumber, err := rd.ReadArrayLen()
2012+
for f := 0; f < 4; f++ {
2013+
cKey, err := rd.ReadString()
20272014
if err != nil {
20282015
return nil, err
20292016
}
20302017

2031-
c.Pending = make([]XInfoStreamConsumerPending, 0, pendingNumber)
2032-
2033-
for f := 0; f < pendingNumber; f++ {
2034-
nn, err := rd.ReadArrayLen()
2018+
switch cKey {
2019+
case "name":
2020+
c.Name, err = rd.ReadString()
2021+
case "seen-time":
2022+
seen, err := rd.ReadIntReply()
20352023
if err != nil {
20362024
return nil, err
20372025
}
2038-
if nn != 3 {
2039-
return nil, fmt.Errorf("redis: got %d elements in XINFO STREAM reply,"+
2040-
"wanted 3", nn)
2041-
}
2042-
2043-
p := XInfoStreamConsumerPending{}
2044-
2045-
p.ID, err = rd.ReadString()
2026+
c.SeenTime = time.Unix(seen/1000, seen%1000*int64(time.Millisecond))
2027+
case "pel-count":
2028+
c.PelCount, err = rd.ReadIntReply()
2029+
case "pending":
2030+
pendingNumber, err := rd.ReadArrayLen()
20462031
if err != nil {
20472032
return nil, err
20482033
}
20492034

2050-
delivery, err := rd.ReadIntReply()
2051-
if err != nil {
2052-
return nil, err
2053-
}
2054-
p.DeliveryTime = time.Unix(delivery/1000, delivery%1000*int64(time.Millisecond))
2035+
c.Pending = make([]XInfoStreamConsumerPending, 0, pendingNumber)
20552036

2056-
p.DeliveryCount, err = rd.ReadIntReply()
2057-
if err != nil {
2058-
return nil, err
2059-
}
2037+
for f := 0; f < pendingNumber; f++ {
2038+
nn, err := rd.ReadArrayLen()
2039+
if err != nil {
2040+
return nil, err
2041+
}
2042+
if nn != 3 {
2043+
return nil, fmt.Errorf("redis: got %d elements in XINFO STREAM reply,"+
2044+
"wanted 3", nn)
2045+
}
20602046

2061-
c.Pending = append(c.Pending, p)
2062-
}
2063-
default:
2064-
return nil, fmt.Errorf("redis: unexpected content %s "+
2065-
"in XINFO STREAM reply", cKey)
2066-
}
2047+
p := XInfoStreamConsumerPending{}
20672048

2068-
if err != nil {
2069-
return nil, err
2070-
}
2049+
p.ID, err = rd.ReadString()
2050+
if err != nil {
2051+
return nil, err
2052+
}
2053+
2054+
delivery, err := rd.ReadIntReply()
2055+
if err != nil {
2056+
return nil, err
2057+
}
2058+
p.DeliveryTime = time.Unix(delivery/1000, delivery%1000*int64(time.Millisecond))
2059+
2060+
p.DeliveryCount, err = rd.ReadIntReply()
2061+
if err != nil {
2062+
return nil, err
2063+
}
20712064

2065+
c.Pending = append(c.Pending, p)
2066+
}
2067+
default:
2068+
return nil, fmt.Errorf("redis: unexpected content %s "+
2069+
"in XINFO STREAM reply", cKey)
2070+
}
2071+
if err != nil {
2072+
return nil, err
2073+
}
2074+
}
20722075
consumers = append(consumers, c)
20732076
}
20742077

0 commit comments

Comments
 (0)