Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/ReleaseNotes.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ Current package versions:
- Add `Condition.SortedSet[Not]ContainsStarting` condition for transactions ([#2638 by ArnoKoll](https://github.com/StackExchange/StackExchange.Redis/pull/2638))
- Add support for XPENDING Idle time filter ([#2822 by david-brink-talogy](https://github.com/StackExchange/StackExchange.Redis/pull/2822))
- Improve `double` formatting performance on net8+ ([#2928 by mgravell](https://github.com/StackExchange/StackExchange.Redis/pull/2928))
- Fix error constructing `StreamAdd` message ([#2941 by mgravell](https://github.com/StackExchange/StackExchange.Redis/pull/2941))

## 2.8.58

Expand Down
11 changes: 5 additions & 6 deletions src/StackExchange.Redis/RedisDatabase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4598,13 +4598,12 @@ private Message GetStreamAddMessage(RedisKey key, RedisValue entryId, long? maxL
throw new ArgumentOutOfRangeException(nameof(maxLength), "maxLength must be greater than 0.");
}

var includeMaxLen = maxLength.HasValue ? 2 : 0;
var includeApproxLen = maxLength.HasValue && useApproximateMaxLength ? 1 : 0;

var totalLength = (streamPairs.Length * 2) // Room for the name/value pairs
+ 1 // The stream entry ID
+ includeMaxLen // 2 or 0 (MAXLEN keyword & the count)
+ includeApproxLen; // 1 or 0
+ 1 // The stream entry ID
+ (maxLength.HasValue ? 2 : 0) // MAXLEN N
+ (maxLength.HasValue && useApproximateMaxLength ? 1 : 0) // ~
+ (mode == StreamTrimMode.KeepReferences ? 0 : 1) // relevant trim-mode keyword
+ (limit.HasValue ? 2 : 0); // LIMIT N

var values = new RedisValue[totalLength];

Expand Down
2 changes: 1 addition & 1 deletion tests/RedisConfigs/.docker/Redis/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM redis:7.4.2
FROM redis:8.2.0

COPY --from=configs ./Basic /data/Basic/
COPY --from=configs ./Failover /data/Failover/
Expand Down
4 changes: 2 additions & 2 deletions tests/StackExchange.Redis.Tests/KeyTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -182,8 +182,8 @@ public async Task KeyEncoding()
db.KeyDelete(key, CommandFlags.FireAndForget);
db.StringSet(key, "new value", flags: CommandFlags.FireAndForget);

Assert.Equal("embstr", db.KeyEncoding(key));
Assert.Equal("embstr", await db.KeyEncodingAsync(key));
Assert.True(db.KeyEncoding(key) is "embstr" or "raw"); // server-version dependent
Assert.True(await db.KeyEncodingAsync(key) is "embstr" or "raw");

db.KeyDelete(key, CommandFlags.FireAndForget);
db.ListLeftPush(key, "new value", flags: CommandFlags.FireAndForget);
Expand Down
22 changes: 22 additions & 0 deletions tests/StackExchange.Redis.Tests/StreamTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2155,6 +2155,28 @@ public async Task AddWithApproxCount(StreamTrimMode mode)
db.StreamAdd(key, "field", "value", maxLength: 10, useApproximateMaxLength: true, trimMode: mode, flags: CommandFlags.None);
}

[Theory]
[InlineData(StreamTrimMode.KeepReferences, 1)]
[InlineData(StreamTrimMode.DeleteReferences, 1)]
[InlineData(StreamTrimMode.Acknowledged, 1)]
[InlineData(StreamTrimMode.KeepReferences, 2)]
[InlineData(StreamTrimMode.DeleteReferences, 2)]
[InlineData(StreamTrimMode.Acknowledged, 2)]
public async Task AddWithMultipleApproxCount(StreamTrimMode mode, int count)
{
await using var conn = Create(require: ForMode(mode));

var db = conn.GetDatabase();
var key = Me() + ":" + mode;

var pairs = new NameValueEntry[count];
for (var i = 0; i < count; i++)
{
pairs[i] = new NameValueEntry($"field{i}", $"value{i}");
}
db.StreamAdd(key, maxLength: 10, useApproximateMaxLength: true, trimMode: mode, flags: CommandFlags.None, streamPairs: pairs);
}

[Fact]
public async Task StreamReadGroupWithNoAckShowsNoPendingMessages()
{
Expand Down
Loading