@@ -1879,11 +1879,7 @@ func (cmd *XInfoStreamFullCmd) readReply(rd *proto.Reader) error {
1879
1879
case "entries" :
1880
1880
cmd .val .Entries , err = readXMessageSlice (rd )
1881
1881
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 )
1887
1883
default :
1888
1884
return fmt .Errorf ("redis: unexpected content %s " +
1889
1885
"in XINFO STREAM reply" , key )
@@ -1895,9 +1891,13 @@ func (cmd *XInfoStreamFullCmd) readReply(rd *proto.Reader) error {
1895
1891
return nil
1896
1892
}
1897
1893
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
+ }
1899
1899
groups := make ([]XInfoStreamGroup , 0 , n )
1900
- for i := int64 ( 0 ) ; i < n ; i ++ {
1900
+ for i := 0 ; i < n ; i ++ {
1901
1901
nn , err := rd .ReadArrayLen ()
1902
1902
if err != nil {
1903
1903
return nil , err
@@ -1906,31 +1906,34 @@ func readStreamGroups(rd *proto.Reader, n int64) (interface{}, error) {
1906
1906
return nil , fmt .Errorf ("redis: got %d elements in XINFO STREAM FULL reply," +
1907
1907
"wanted 10" , nn )
1908
1908
}
1909
- key , err := rd .ReadString ()
1910
- if err != nil {
1911
- return nil , err
1912
- }
1913
1909
1914
1910
group := XInfoStreamGroup {}
1915
1911
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
+ }
1931
1917
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
+ }
1934
1937
}
1935
1938
1936
1939
groups = append (groups , group )
@@ -2004,71 +2007,71 @@ func readXInfoStreamConsumers(rd *proto.Reader) ([]XInfoStreamConsumer, error) {
2004
2007
"wanted 8" , nn )
2005
2008
}
2006
2009
2007
- cKey , err := rd .ReadString ()
2008
- if err != nil {
2009
- return nil , err
2010
- }
2011
-
2012
2010
c := XInfoStreamConsumer {}
2013
2011
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 ()
2027
2014
if err != nil {
2028
2015
return nil , err
2029
2016
}
2030
2017
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 ()
2035
2023
if err != nil {
2036
2024
return nil , err
2037
2025
}
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 ()
2046
2031
if err != nil {
2047
2032
return nil , err
2048
2033
}
2049
2034
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 )
2055
2036
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
+ }
2060
2046
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 {}
2067
2048
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
+ }
2071
2064
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
+ }
2072
2075
consumers = append (consumers , c )
2073
2076
}
2074
2077
0 commit comments