Skip to content

Commit 86da87d

Browse files
committed
TryRead for nullable long, tests on null value for StreamConsumerGroupInfo.Lag
1 parent 2cb97af commit 86da87d

File tree

2 files changed

+54
-1
lines changed

2 files changed

+54
-1
lines changed

src/StackExchange.Redis/ResultProcessor.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2286,6 +2286,19 @@ internal static bool TryRead(Sequence<RawResult> pairs, in CommandBytes key, ref
22862286
}
22872287
return false;
22882288
}
2289+
internal static bool TryRead(Sequence<RawResult> pairs, in CommandBytes key, ref long? value)
2290+
{
2291+
var len = pairs.Length / 2;
2292+
for (int i = 0; i < len; i++)
2293+
{
2294+
if (pairs[i * 2].IsEqual(key) && pairs[(i * 2) + 1].TryGetInt64(out var tmp))
2295+
{
2296+
value = tmp;
2297+
return true;
2298+
}
2299+
}
2300+
return false;
2301+
}
22892302

22902303
internal static bool TryRead(Sequence<RawResult> pairs, in CommandBytes key, ref int value)
22912304
{
@@ -2348,7 +2361,8 @@ protected override StreamGroupInfo ParseItem(in RawResult result)
23482361
var arr = result.GetItems();
23492362
string? name = default, lastDeliveredId = default;
23502363
int consumerCount = default, pendingMessageCount = default;
2351-
long entriesRead = default, lag = default;
2364+
long entriesRead = default;
2365+
long? lag = default;
23522366

23532367
KeyValuePairParser.TryRead(arr, KeyValuePairParser.Name, ref name);
23542368
KeyValuePairParser.TryRead(arr, KeyValuePairParser.Consumers, ref consumerCount);

tests/StackExchange.Redis.Tests/StreamTests.cs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2042,4 +2042,43 @@ await db.StreamAddAsync(
20422042
Assert.Equal(123, (int)obj!.id);
20432043
Assert.Equal("test", (string)obj.name);
20442044
}
2045+
2046+
[Fact]
2047+
public void StreamConsumerGroupInfoLagIsNull()
2048+
{
2049+
using var conn = Create(require: RedisFeatures.v5_0_0);
2050+
2051+
var db = conn.GetDatabase();
2052+
var key = Me();
2053+
const string groupName = "test_group",
2054+
consumer = "consumer";
2055+
2056+
db.StreamCreateConsumerGroup(key, groupName);
2057+
db.StreamReadGroup(key, groupName, consumer, "0-0", 1);
2058+
db.StreamAdd(key, "field1", "value1");
2059+
db.StreamAdd(key, "field1", "value1");
2060+
2061+
var streamInfo = db.StreamInfo(key);
2062+
db.StreamDelete(key, new[] { streamInfo.LastEntry.Id });
2063+
2064+
Assert.Null(db.StreamGroupInfo(key)[0].Lag);
2065+
}
2066+
2067+
[Fact]
2068+
public void StreamConsumerGroupInfoLagIsTwo()
2069+
{
2070+
using var conn = Create(require: RedisFeatures.v5_0_0);
2071+
2072+
var db = conn.GetDatabase();
2073+
var key = Me();
2074+
const string groupName = "test_group",
2075+
consumer = "consumer";
2076+
2077+
db.StreamCreateConsumerGroup(key, groupName);
2078+
db.StreamReadGroup(key, groupName, consumer, "0-0", 1);
2079+
db.StreamAdd(key, "field1", "value1");
2080+
db.StreamAdd(key, "field1", "value1");
2081+
2082+
Assert.Equal(2, db.StreamGroupInfo(key)[0].Lag);
2083+
}
20452084
}

0 commit comments

Comments
 (0)