Skip to content

Commit fc0d53d

Browse files
committed
- add [Experimental]
- add docs
1 parent 547f254 commit fc0d53d

File tree

14 files changed

+130
-49
lines changed

14 files changed

+130
-49
lines changed

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
1111
<CodeAnalysisRuleset>$(MSBuildThisFileDirectory)Shared.ruleset</CodeAnalysisRuleset>
1212
<MSBuildWarningsAsMessages>NETSDK1069</MSBuildWarningsAsMessages>
13-
<NoWarn>$(NoWarn);NU5105;NU1507;SER001;SER002</NoWarn>
13+
<NoWarn>$(NoWarn);NU5105;NU1507;SER001;SER002;SER003</NoWarn>
1414
<PackageReleaseNotes>https://stackexchange.github.io/StackExchange.Redis/ReleaseNotes</PackageReleaseNotes>
1515
<PackageProjectUrl>https://stackexchange.github.io/StackExchange.Redis/</PackageProjectUrl>
1616
<PackageLicenseExpression>MIT</PackageLicenseExpression>

docs/ReleaseNotes.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ Current package versions:
88

99
## unreleased
1010

11-
- Implement idempotent stream entry (IDMP) support
11+
- Implement idempotent stream entry (IDMP) support ([#3006 by mgravell](https://github.com/StackExchange/StackExchange.Redis/pull/3006))
1212

1313
## 2.10.14
1414

docs/Streams.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,24 @@ You also have the option to override the auto-generated message ID by passing yo
3737
db.StreamAdd("events_stream", "foo_name", "bar_value", messageId: "0-1", maxLength: 100);
3838
```
3939

40+
Idempotent write-at-most-once production
41+
===
42+
43+
From Redis 8.6, streams support idempotent write-at-most-once production. This is achieved by passing a `StreamIdempotentId` to the `StreamAdd` method. Using idempotent ids avoids
44+
duplicate entries in the stream, even in the event of a failure and retry.
45+
46+
The `StreamIdempotentId` contains a producer id and an optional idempotent id. The producer id should be unique for a given data generator and should be stable and consistent between runs.
47+
The optional idempotent id should be unique for a given data item. If the idempotent id is not provided, the server will generate it from the content of the data item.
48+
49+
```csharp
50+
// int someUniqueExternalSourceId = ... // optional
51+
var idempotentId = new StreamIdempotentId("ticket_generator");
52+
// optionally, new StreamIdempotentId("ticket_generator", someUniqueExternalSourceId)
53+
var messageId = db.StreamAdd("events_stream", "foo_name", "bar_value", idempotentId);
54+
```
55+
56+
~~~~The `StreamConfigure` method can be used to configure the stream, in particular the IDMP map. The `StreamConfiguration` class has properties for the idempotent producer (IDMP) duration and max-size.
57+
4058
Reading from Streams
4159
===
4260

docs/exp/SER003.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
Redis 8.6 is currently in preview and may be subject to change.
2+
3+
New features in Redis 8.6 include:
4+
5+
- `HOTKEYS` for profiling CPU and network hot-spots by key
6+
- `XADD IDMP[AUTP]` for idempotent (write-at-most-once) stream addition
7+
8+
The corresponding library feature must also be considered subject to change:
9+
10+
1. Existing bindings may cease working correctly if the underlying server API changes.
11+
2. Changes to the server API may require changes to the library API, manifesting in either/both of build-time
12+
or run-time breaks.
13+
14+
While this seems *unlikely*, it must be considered a possibility. If you acknowledge this, you can suppress
15+
this warning by adding the following to your `csproj` file:
16+
17+
```xml
18+
<NoWarn>$(NoWarn);SER003</NoWarn>
19+
```
20+
21+
or more granularly / locally in C#:
22+
23+
``` c#
24+
#pragma warning disable SER003
25+
```

src/StackExchange.Redis/APITypes/StreamInfo.cs

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
namespace StackExchange.Redis;
1+
using System.Diagnostics.CodeAnalysis;
2+
3+
namespace StackExchange.Redis;
24

35
/// <summary>
46
/// Describes stream information retrieved using the XINFO STREAM command. <see cref="IDatabase.StreamInfo"/>.
@@ -19,7 +21,7 @@ internal StreamInfo(
1921
long entriesAdded,
2022
RedisValue recordedFirstEntryId,
2123
long idmpDuration,
22-
long idmpMaxsize,
24+
long idmpMaxSize,
2325
long pidsTracked,
2426
long iidsTracked,
2527
long iidsAdded,
@@ -40,7 +42,7 @@ internal StreamInfo(
4042

4143
// 8.6
4244
IdmpDuration = idmpDuration;
43-
IdmpMaxsize = idmpMaxsize;
45+
IdmpMaxSize = idmpMaxSize;
4446
PidsTracked = pidsTracked;
4547
IidsTracked = iidsTracked;
4648
IidsAdded = iidsAdded;
@@ -100,33 +102,57 @@ internal StreamInfo(
100102
/// <summary>
101103
/// The duration value configured for the stream’s IDMP map (seconds), or <c>-1</c> if unavailable.
102104
/// </summary>
103-
public long IdmpDuration { get; }
105+
public long IdmpDuration
106+
{
107+
[Experimental(Experiments.Server_8_6, UrlFormat = Experiments.UrlFormat)]
108+
get;
109+
}
104110

105111
/// <summary>
106112
/// The maxsize value configured for the stream’s IDMP map, or <c>-1</c> if unavailable.
107113
/// </summary>
108-
public long IdmpMaxsize { get; }
114+
public long IdmpMaxSize
115+
{
116+
[Experimental(Experiments.Server_8_6, UrlFormat = Experiments.UrlFormat)]
117+
get;
118+
}
109119

110120
/// <summary>
111121
/// The number of idempotent pids currently tracked in the stream, or <c>-1</c> if unavailable.
112122
/// </summary>
113-
public long PidsTracked { get; }
123+
public long PidsTracked
124+
{
125+
[Experimental(Experiments.Server_8_6, UrlFormat = Experiments.UrlFormat)]
126+
get;
127+
}
114128

115129
/// <summary>
116130
/// The number of idempotent ids currently tracked in the stream, or <c>-1</c> if unavailable.
117131
/// This count reflects active iids that haven't expired or been evicted yet.
118132
/// </summary>
119-
public long IidsTracked { get; }
133+
public long IidsTracked
134+
{
135+
[Experimental(Experiments.Server_8_6, UrlFormat = Experiments.UrlFormat)]
136+
get;
137+
}
120138

121139
/// <summary>
122140
/// The count of all entries with an idempotent iid added to the stream during its lifetime, or <c>-1</c> if unavailable.
123141
/// This is a cumulative counter that increases with each idempotent entry added.
124142
/// </summary>
125-
public long IidsAdded { get; }
143+
public long IidsAdded
144+
{
145+
[Experimental(Experiments.Server_8_6, UrlFormat = Experiments.UrlFormat)]
146+
get;
147+
}
126148

127149
/// <summary>
128150
/// The count of all duplicate iids (for all pids) detected during the stream's lifetime, or <c>-1</c> if unavailable.
129151
/// This is a cumulative counter that increases with each duplicate iid.
130152
/// </summary>
131-
public long IidsDuplicates { get; }
153+
public long IidsDuplicates
154+
{
155+
[Experimental(Experiments.Server_8_6, UrlFormat = Experiments.UrlFormat)]
156+
get;
157+
}
132158
}

src/StackExchange.Redis/Experiments.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ internal static class Experiments
1212
public const string VectorSets = "SER001";
1313
// ReSharper disable once InconsistentNaming
1414
public const string Server_8_4 = "SER002";
15+
// ReSharper disable once InconsistentNaming
16+
public const string Server_8_6 = "SER003";
1517
}
1618
}
1719

src/StackExchange.Redis/Interfaces/IDatabase.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2681,6 +2681,7 @@ IEnumerable<SortedSetEntry> SortedSetScan(
26812681
/// <param name="flags">The flags to use for this operation.</param>
26822682
/// <returns>The ID of the newly created message.</returns>
26832683
/// <remarks><seealso href="https://redis.io/commands/xadd"/></remarks>
2684+
[Experimental(Experiments.Server_8_6, UrlFormat = Experiments.UrlFormat)]
26842685
RedisValue StreamAdd(RedisKey key, RedisValue streamField, RedisValue streamValue, StreamIdempotentId idempotentId, long? maxLength = null, bool useApproximateMaxLength = false, long? limit = null, StreamTrimMode trimMode = StreamTrimMode.KeepReferences, CommandFlags flags = CommandFlags.None);
26852686

26862687
/// <summary>
@@ -2717,6 +2718,7 @@ IEnumerable<SortedSetEntry> SortedSetScan(
27172718
/// <param name="flags">The flags to use for this operation.</param>
27182719
/// <returns>The ID of the newly created message.</returns>
27192720
/// <remarks><seealso href="https://redis.io/commands/xadd"/></remarks>
2721+
[Experimental(Experiments.Server_8_6, UrlFormat = Experiments.UrlFormat)]
27202722
RedisValue StreamAdd(RedisKey key, NameValueEntry[] streamPairs, StreamIdempotentId idempotentId, long? maxLength = null, bool useApproximateMaxLength = false, long? limit = null, StreamTrimMode trimMode = StreamTrimMode.KeepReferences, CommandFlags flags = CommandFlags.None);
27212723
#pragma warning restore RS0026
27222724

@@ -2726,6 +2728,7 @@ IEnumerable<SortedSetEntry> SortedSetScan(
27262728
/// <param name="key">The key of the stream.</param>
27272729
/// <param name="configuration">The configuration to apply.</param>
27282730
/// <param name="flags">The flags to use for this operation.</param>
2731+
[Experimental(Experiments.Server_8_6, UrlFormat = Experiments.UrlFormat)]
27292732
void StreamConfigure(RedisKey key, StreamConfiguration configuration, CommandFlags flags = CommandFlags.None);
27302733

27312734
/// <summary>

src/StackExchange.Redis/Interfaces/IDatabaseAsync.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -658,13 +658,16 @@ IAsyncEnumerable<SortedSetEntry> SortedSetScanAsync(
658658
Task<RedisValue> StreamAddAsync(RedisKey key, NameValueEntry[] streamPairs, RedisValue? messageId = null, long? maxLength = null, bool useApproximateMaxLength = false, long? limit = null, StreamTrimMode trimMode = StreamTrimMode.KeepReferences, CommandFlags flags = CommandFlags.None);
659659

660660
/// <inheritdoc cref="IDatabase.StreamAdd(RedisKey, RedisValue, RedisValue, StreamIdempotentId, long?, bool, long?, StreamTrimMode, CommandFlags)"/>
661+
[Experimental(Experiments.Server_8_6, UrlFormat = Experiments.UrlFormat)]
661662
Task<RedisValue> StreamAddAsync(RedisKey key, RedisValue streamField, RedisValue streamValue, StreamIdempotentId idempotentId, long? maxLength = null, bool useApproximateMaxLength = false, long? limit = null, StreamTrimMode trimMode = StreamTrimMode.KeepReferences, CommandFlags flags = CommandFlags.None);
662663

663664
/// <inheritdoc cref="IDatabase.StreamAdd(RedisKey, NameValueEntry[], StreamIdempotentId, long?, bool, long?, StreamTrimMode, CommandFlags)"/>
665+
[Experimental(Experiments.Server_8_6, UrlFormat = Experiments.UrlFormat)]
664666
Task<RedisValue> StreamAddAsync(RedisKey key, NameValueEntry[] streamPairs, StreamIdempotentId idempotentId, long? maxLength = null, bool useApproximateMaxLength = false, long? limit = null, StreamTrimMode trimMode = StreamTrimMode.KeepReferences, CommandFlags flags = CommandFlags.None);
665667
#pragma warning restore RS0026
666668

667669
/// <inheritdoc cref="IDatabase.StreamConfigure(RedisKey, StreamConfiguration, CommandFlags)"/>
670+
[Experimental(Experiments.Server_8_6, UrlFormat = Experiments.UrlFormat)]
668671
Task StreamConfigureAsync(RedisKey key, StreamConfiguration configuration, CommandFlags flags = CommandFlags.None);
669672

670673
/// <inheritdoc cref="IDatabase.StreamAutoClaim(RedisKey, RedisValue, RedisValue, long, RedisValue, int?, CommandFlags)"/>
Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,31 @@
11
#nullable enable
2-
override StackExchange.Redis.StreamIdempotentId.Equals(object? obj) -> bool
3-
override StackExchange.Redis.StreamIdempotentId.GetHashCode() -> int
4-
override StackExchange.Redis.StreamIdempotentId.ToString() -> string!
5-
StackExchange.Redis.IDatabase.StreamAdd(StackExchange.Redis.RedisKey key, StackExchange.Redis.NameValueEntry[]! streamPairs, StackExchange.Redis.StreamIdempotentId idempotentId, long? maxLength = null, bool useApproximateMaxLength = false, long? limit = null, StackExchange.Redis.StreamTrimMode trimMode = StackExchange.Redis.StreamTrimMode.KeepReferences, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> StackExchange.Redis.RedisValue
6-
StackExchange.Redis.IDatabase.StreamAdd(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue streamField, StackExchange.Redis.RedisValue streamValue, StackExchange.Redis.StreamIdempotentId idempotentId, long? maxLength = null, bool useApproximateMaxLength = false, long? limit = null, StackExchange.Redis.StreamTrimMode trimMode = StackExchange.Redis.StreamTrimMode.KeepReferences, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> StackExchange.Redis.RedisValue
7-
StackExchange.Redis.IDatabase.StreamConfigure(StackExchange.Redis.RedisKey key, StackExchange.Redis.StreamConfiguration! configuration, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> void
8-
StackExchange.Redis.IDatabaseAsync.StreamAddAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.NameValueEntry[]! streamPairs, StackExchange.Redis.StreamIdempotentId idempotentId, long? maxLength = null, bool useApproximateMaxLength = false, long? limit = null, StackExchange.Redis.StreamTrimMode trimMode = StackExchange.Redis.StreamTrimMode.KeepReferences, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> System.Threading.Tasks.Task<StackExchange.Redis.RedisValue>!
9-
StackExchange.Redis.IDatabaseAsync.StreamAddAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue streamField, StackExchange.Redis.RedisValue streamValue, StackExchange.Redis.StreamIdempotentId idempotentId, long? maxLength = null, bool useApproximateMaxLength = false, long? limit = null, StackExchange.Redis.StreamTrimMode trimMode = StackExchange.Redis.StreamTrimMode.KeepReferences, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> System.Threading.Tasks.Task<StackExchange.Redis.RedisValue>!
10-
StackExchange.Redis.IDatabaseAsync.StreamConfigureAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.StreamConfiguration! configuration, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> System.Threading.Tasks.Task!
11-
StackExchange.Redis.StreamConfiguration
12-
StackExchange.Redis.StreamConfiguration.IdmpDuration.get -> long?
13-
StackExchange.Redis.StreamConfiguration.IdmpDuration.set -> void
14-
StackExchange.Redis.StreamConfiguration.IdmpMaxsize.get -> long?
15-
StackExchange.Redis.StreamConfiguration.IdmpMaxsize.set -> void
16-
StackExchange.Redis.StreamConfiguration.StreamConfiguration() -> void
17-
StackExchange.Redis.StreamIdempotentId
18-
StackExchange.Redis.StreamIdempotentId.IdempotentId.get -> StackExchange.Redis.RedisValue
19-
StackExchange.Redis.StreamIdempotentId.ProducerId.get -> StackExchange.Redis.RedisValue
20-
StackExchange.Redis.StreamIdempotentId.StreamIdempotentId() -> void
21-
StackExchange.Redis.StreamIdempotentId.StreamIdempotentId(StackExchange.Redis.RedisValue producerId) -> void
22-
StackExchange.Redis.StreamIdempotentId.StreamIdempotentId(StackExchange.Redis.RedisValue producerId, StackExchange.Redis.RedisValue idempotentId) -> void
2+
[SER003]override StackExchange.Redis.StreamIdempotentId.Equals(object? obj) -> bool
3+
[SER003]override StackExchange.Redis.StreamIdempotentId.GetHashCode() -> int
4+
[SER003]override StackExchange.Redis.StreamIdempotentId.ToString() -> string!
5+
[SER003]StackExchange.Redis.IDatabase.StreamAdd(StackExchange.Redis.RedisKey key, StackExchange.Redis.NameValueEntry[]! streamPairs, StackExchange.Redis.StreamIdempotentId idempotentId, long? maxLength = null, bool useApproximateMaxLength = false, long? limit = null, StackExchange.Redis.StreamTrimMode trimMode = StackExchange.Redis.StreamTrimMode.KeepReferences, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> StackExchange.Redis.RedisValue
6+
[SER003]StackExchange.Redis.IDatabase.StreamAdd(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue streamField, StackExchange.Redis.RedisValue streamValue, StackExchange.Redis.StreamIdempotentId idempotentId, long? maxLength = null, bool useApproximateMaxLength = false, long? limit = null, StackExchange.Redis.StreamTrimMode trimMode = StackExchange.Redis.StreamTrimMode.KeepReferences, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> StackExchange.Redis.RedisValue
7+
[SER003]StackExchange.Redis.IDatabase.StreamConfigure(StackExchange.Redis.RedisKey key, StackExchange.Redis.StreamConfiguration! configuration, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> void
8+
[SER003]StackExchange.Redis.IDatabaseAsync.StreamAddAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.NameValueEntry[]! streamPairs, StackExchange.Redis.StreamIdempotentId idempotentId, long? maxLength = null, bool useApproximateMaxLength = false, long? limit = null, StackExchange.Redis.StreamTrimMode trimMode = StackExchange.Redis.StreamTrimMode.KeepReferences, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> System.Threading.Tasks.Task<StackExchange.Redis.RedisValue>!
9+
[SER003]StackExchange.Redis.IDatabaseAsync.StreamAddAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue streamField, StackExchange.Redis.RedisValue streamValue, StackExchange.Redis.StreamIdempotentId idempotentId, long? maxLength = null, bool useApproximateMaxLength = false, long? limit = null, StackExchange.Redis.StreamTrimMode trimMode = StackExchange.Redis.StreamTrimMode.KeepReferences, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> System.Threading.Tasks.Task<StackExchange.Redis.RedisValue>!
10+
[SER003]StackExchange.Redis.IDatabaseAsync.StreamConfigureAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.StreamConfiguration! configuration, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> System.Threading.Tasks.Task!
11+
[SER003]StackExchange.Redis.StreamConfiguration
12+
[SER003]StackExchange.Redis.StreamConfiguration.IdmpDuration.get -> long?
13+
[SER003]StackExchange.Redis.StreamConfiguration.IdmpDuration.set -> void
14+
[SER003]StackExchange.Redis.StreamConfiguration.IdmpMaxSize.get -> long?
15+
[SER003]StackExchange.Redis.StreamConfiguration.IdmpMaxSize.set -> void
16+
[SER003]StackExchange.Redis.StreamConfiguration.StreamConfiguration() -> void
17+
[SER003]StackExchange.Redis.StreamIdempotentId
18+
[SER003]StackExchange.Redis.StreamIdempotentId.IdempotentId.get -> StackExchange.Redis.RedisValue
19+
[SER003]StackExchange.Redis.StreamIdempotentId.ProducerId.get -> StackExchange.Redis.RedisValue
20+
[SER003]StackExchange.Redis.StreamIdempotentId.StreamIdempotentId() -> void
21+
[SER003]StackExchange.Redis.StreamIdempotentId.StreamIdempotentId(StackExchange.Redis.RedisValue producerId) -> void
22+
[SER003]StackExchange.Redis.StreamIdempotentId.StreamIdempotentId(StackExchange.Redis.RedisValue producerId, StackExchange.Redis.RedisValue idempotentId) -> void
23+
[SER003]StackExchange.Redis.StreamInfo.IdmpDuration.get -> long
24+
[SER003]StackExchange.Redis.StreamInfo.IdmpMaxSize.get -> long
25+
[SER003]StackExchange.Redis.StreamInfo.IidsAdded.get -> long
26+
[SER003]StackExchange.Redis.StreamInfo.IidsDuplicates.get -> long
27+
[SER003]StackExchange.Redis.StreamInfo.IidsTracked.get -> long
28+
[SER003]StackExchange.Redis.StreamInfo.PidsTracked.get -> long
2329
StackExchange.Redis.StreamInfo.EntriesAdded.get -> long
24-
StackExchange.Redis.StreamInfo.IdmpDuration.get -> long
25-
StackExchange.Redis.StreamInfo.IdmpMaxsize.get -> long
26-
StackExchange.Redis.StreamInfo.IidsAdded.get -> long
27-
StackExchange.Redis.StreamInfo.IidsDuplicates.get -> long
28-
StackExchange.Redis.StreamInfo.IidsTracked.get -> long
2930
StackExchange.Redis.StreamInfo.MaxDeletedEntryId.get -> StackExchange.Redis.RedisValue
30-
StackExchange.Redis.StreamInfo.PidsTracked.get -> long
3131
StackExchange.Redis.StreamInfo.RecordedFirstEntryId.get -> StackExchange.Redis.RedisValue

src/StackExchange.Redis/RedisDatabase.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2930,7 +2930,7 @@ private Message GetStreamConfigureMessage(RedisKey key, StreamConfiguration conf
29302930
{
29312931
if (key.IsNull) throw new ArgumentNullException(nameof(key));
29322932
if (configuration == null) throw new ArgumentNullException(nameof(configuration));
2933-
if (configuration.IdmpMaxsize.HasValue)
2933+
if (configuration.IdmpMaxSize.HasValue)
29342934
{
29352935
if (configuration.IdmpDuration.HasValue)
29362936
{
@@ -2943,7 +2943,7 @@ private Message GetStreamConfigureMessage(RedisKey key, StreamConfiguration conf
29432943
RedisLiterals.IDMP_DURATION,
29442944
configuration.IdmpDuration.Value,
29452945
RedisLiterals.IDMP_MAXSIZE,
2946-
configuration.IdmpMaxsize.Value);
2946+
configuration.IdmpMaxSize.Value);
29472947
}
29482948
// just maxsize
29492949
return Message.Create(
@@ -2952,7 +2952,7 @@ private Message GetStreamConfigureMessage(RedisKey key, StreamConfiguration conf
29522952
RedisCommand.XCFGSET,
29532953
key,
29542954
RedisLiterals.IDMP_MAXSIZE,
2955-
configuration.IdmpMaxsize.Value);
2955+
configuration.IdmpMaxSize.Value);
29562956
}
29572957

29582958
if (configuration.IdmpDuration.HasValue)

0 commit comments

Comments
 (0)