Thanks to visit codestin.com
Credit goes to github.com

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 @@ -14,6 +14,7 @@
- Adds: Support for `ZDIFF`, `ZDIFFSTORE`, `ZINTER`, `ZINTERCARD`, and `ZUNION` with `.SortedSetCombine()`/`.SortedSetCombineAsync()`, `.SortedSetCombineWithScores()`/`.SortedSetCombineWithScoresAsync()`, and `.SortedSetIntersectionLength()`/`.SortedSetIntersectionLengthAsync()` ([#2075 by Avital-Fine](https://github.com/StackExchange/StackExchange.Redis/pull/2075))
- Adds: Support for `SINTERCARD` with `.SetIntersectionLength()`/`.SetIntersectionLengthAsync()` ([#2078 by Avital-Fine](https://github.com/StackExchange/StackExchange.Redis/pull/2078))
- Adds: Support for `LPOS` with `.ListPosition()`/`.ListPositionAsync()` and `.ListPositions()`/`.ListPositionsAsync()` ([#2080 by slorello89](https://github.com/StackExchange/StackExchange.Redis/pull/2080))
- Fix: For streams, properly hash `XACK`, `XCLAIM`, and `XPENDING` in cluster scenarios to eliminate `MOVED` retries ([#2085 by nielsderdaele](https://github.com/StackExchange/StackExchange.Redis/pull/2085))

## 2.5.61

Expand Down
27 changes: 12 additions & 15 deletions src/StackExchange.Redis/RedisDatabase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3423,32 +3423,30 @@ private Message GetStreamAcknowledgeMessage(RedisKey key, RedisValue groupName,
{
var values = new RedisValue[]
{
key.AsRedisValue(),
groupName,
messageId
};

return Message.Create(Database, flags, RedisCommand.XACK, values);
return Message.Create(Database, flags, RedisCommand.XACK, key, values);
}

private Message GetStreamAcknowledgeMessage(RedisKey key, RedisValue groupName, RedisValue[] messageIds, CommandFlags flags)
{
if (messageIds == null) throw new ArgumentNullException(nameof(messageIds));
if (messageIds.Length == 0) throw new ArgumentOutOfRangeException(nameof(messageIds), "messageIds must contain at least one item.");

var values = new RedisValue[messageIds.Length + 2];
var values = new RedisValue[messageIds.Length + 1];

var offset = 0;

values[offset++] = key.AsRedisValue();
values[offset++] = groupName;

for (var i = 0; i < messageIds.Length; i++)
{
values[offset++] = messageIds[i];
}

return Message.Create(Database, flags, RedisCommand.XACK, values);
return Message.Create(Database, flags, RedisCommand.XACK, key, values);
}

private Message GetStreamAddMessage(RedisKey key, RedisValue messageId, int? maxLength, bool useApproximateMaxLength, NameValueEntry streamPair, CommandFlags flags)
Expand Down Expand Up @@ -3539,11 +3537,10 @@ private Message GetStreamClaimMessage(RedisKey key, RedisValue consumerGroup, Re
if (messageIds.Length == 0) throw new ArgumentOutOfRangeException(nameof(messageIds), "messageIds must contain at least one item.");

// XCLAIM <key> <group> <consumer> <min-idle-time> <ID-1> <ID-2> ... <ID-N>
var values = new RedisValue[4 + messageIds.Length + (returnJustIds ? 1 : 0)];
var values = new RedisValue[3 + messageIds.Length + (returnJustIds ? 1 : 0)];

var offset = 0;

values[offset++] = key.AsRedisValue();
values[offset++] = consumerGroup;
values[offset++] = assignToConsumer;
values[offset++] = minIdleTimeInMs;
Expand All @@ -3558,7 +3555,7 @@ private Message GetStreamClaimMessage(RedisKey key, RedisValue consumerGroup, Re
values[offset] = StreamConstants.JustId;
}

return Message.Create(Database, flags, RedisCommand.XCLAIM, values);
return Message.Create(Database, flags, RedisCommand.XCLAIM, key, values);
}

private Message GetStreamCreateConsumerGroupMessage(RedisKey key, RedisValue groupName, RedisValue? position = null, bool createStream = true, CommandFlags flags = CommandFlags.None)
Expand Down Expand Up @@ -3602,22 +3599,22 @@ private Message GetStreamPendingMessagesMessage(RedisKey key, RedisValue groupNa
throw new ArgumentOutOfRangeException(nameof(count), "count must be greater than 0.");
}

var values = new RedisValue[consumerName == RedisValue.Null ? 5 : 6];
var values = new RedisValue[consumerName == RedisValue.Null ? 4 : 5];

values[0] = key.AsRedisValue();
values[1] = groupName;
values[2] = minId ?? StreamConstants.ReadMinValue;
values[3] = maxId ?? StreamConstants.ReadMaxValue;
values[4] = count;
values[0] = groupName;
values[1] = minId ?? StreamConstants.ReadMinValue;
values[2] = maxId ?? StreamConstants.ReadMaxValue;
values[3] = count;

if (consumerName != RedisValue.Null)
{
values[5] = consumerName;
values[4] = consumerName;
}

return Message.Create(Database,
flags,
RedisCommand.XPENDING,
key,
values);
}

Expand Down