Skip to content
Open
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
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed

- `XREADGROUP` returning only the first field-value pair per stream entry (#430)
- Incorrect default routes:
- `SELECT` routed to Random instead of AllNodes in cluster mode (#491)
- `CONFIG SET` routed to AllPrimaries instead of AllNodes in cluster mode (#492)
- `CONFIG REWRITE` routed to Random instead of AllNodes in cluster mode (#493)
- `CONFIG RESETSTAT` routed to AllPrimaries instead of AllNodes in cluster mode (#493)
- `FUNCTION KILL` routed to AllPrimaries instead of AllNodes in cluster mode (#494)

### Added

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,40 +5,49 @@

namespace Valkey.Glide;

// TODO #462: Consolidate no-route overloads into BaseClient (glide-core default routing matches).
public abstract partial class BaseClient
{
/// <inheritdoc cref="IBaseClient.ClientGetNameAsync()"/>
public abstract Task<ValkeyValue> ClientGetNameAsync();
public async Task<ValkeyValue> ClientGetNameAsync()
=> await Command(Request.ClientGetName());

/// <inheritdoc cref="IBaseClient.ClientIdAsync()"/>
public abstract Task<long> ClientIdAsync();
public async Task<long> ClientIdAsync()
=> await Command(Request.ClientId());

/// <inheritdoc cref="IBaseClient.ClientPauseAsync(TimeSpan)"/>
public abstract Task ClientPauseAsync(TimeSpan timeout);
public async Task ClientPauseAsync(TimeSpan timeout)
=> _ = await Command(Request.ClientPause(timeout));

/// <inheritdoc cref="IBaseClient.ClientPauseWriteAsync(TimeSpan)"/>
public abstract Task ClientPauseWriteAsync(TimeSpan timeout);
public async Task ClientPauseWriteAsync(TimeSpan timeout)
=> _ = await Command(Request.ClientPauseWrite(timeout));

/// <inheritdoc cref="IBaseClient.ClientTrackingInfoAsync()"/>
public abstract Task<ClientTrackingInfo> ClientTrackingInfoAsync();
public async Task<ClientTrackingInfo> ClientTrackingInfoAsync()
=> await Command(Request.ClientTrackingInfo());

/// <inheritdoc cref="IBaseClient.ClientUnpauseAsync()"/>
public abstract Task ClientUnpauseAsync();
public async Task ClientUnpauseAsync()
=> _ = await Command(Request.ClientUnpause());

/// <inheritdoc cref="IBaseClient.EchoAsync(ValkeyValue)"/>
public abstract Task<ValkeyValue> EchoAsync(ValkeyValue message);
public async Task<ValkeyValue> EchoAsync(ValkeyValue message)
=> await Command(Request.Echo(message));

/// <inheritdoc cref="IBaseClient.PingAsync()"/>
public abstract Task<ValkeyValue> PingAsync();
public async Task<ValkeyValue> PingAsync()
=> await Command(Request.Ping());

/// <inheritdoc cref="IBaseClient.PingAsync(ValkeyValue)"/>
public abstract Task<ValkeyValue> PingAsync(ValkeyValue message);
public async Task<ValkeyValue> PingAsync(ValkeyValue message)
=> await Command(Request.Ping(message));

/// <inheritdoc cref="IBaseClient.ResetAsync()"/>
public async Task ResetAsync()
=> _ = await Command(Request.Reset());

/// <inheritdoc cref="IConnectionManagementBaseCommands.SelectAsync(long)"/>
public abstract Task SelectAsync(long index);
public async Task SelectAsync(long index)
=> _ = await Command(Request.Select(index));
}
31 changes: 19 additions & 12 deletions sources/Valkey.Glide/Client/BaseClient.ServerManagementCommands.cs
Original file line number Diff line number Diff line change
@@ -1,38 +1,45 @@
// Copyright Valkey GLIDE Project Contributors - SPDX Identifier: Apache-2.0

using Valkey.Glide.Commands.Options;
using Valkey.Glide.Internals;

namespace Valkey.Glide;

// TODO #462: Consolidate no-route overloads into BaseClient (glide-core default routing matches).
public abstract partial class BaseClient
{
/// <inheritdoc cref="IBaseClient.ConfigGetAsync(IEnumerable{ValkeyValue})"/>
public abstract Task<KeyValuePair<string, string>[]> ConfigGetAsync(IEnumerable<ValkeyValue> patterns);
public async Task<KeyValuePair<string, string>[]> ConfigGetAsync(IEnumerable<ValkeyValue> patterns)
=> await Command(Request.ConfigGetAsync(patterns));

/// <inheritdoc cref="IBaseClient.ConfigSetAsync(IDictionary{ValkeyValue, ValkeyValue})"/>
public abstract Task ConfigSetAsync(IDictionary<ValkeyValue, ValkeyValue> parameters);
public async Task ConfigSetAsync(IDictionary<ValkeyValue, ValkeyValue> parameters)
=> _ = await Command(Request.ConfigSetAsync(parameters));

/// <inheritdoc cref="IBaseClient.FlushAllDatabasesAsync(FlushMode)"/>
public abstract Task FlushAllDatabasesAsync(FlushMode mode);
public async Task FlushAllDatabasesAsync(FlushMode mode)
=> _ = await Command(Request.FlushAllDatabasesAsync(mode));

/// <inheritdoc cref="IBaseClient.FlushDatabaseAsync(FlushMode)"/>
public abstract Task FlushDatabaseAsync(FlushMode mode);
public async Task FlushDatabaseAsync(FlushMode mode)
=> _ = await Command(Request.FlushDatabaseAsync(mode));

/// <inheritdoc cref="IBaseClient.LatencyResetAsync()"/>
public abstract Task<long> LatencyResetAsync();
public async Task<long> LatencyResetAsync()
=> await Command(Request.LatencyResetAsync([]));

/// <inheritdoc cref="IBaseClient.LatencyResetAsync(ValkeyValue)"/>
public abstract Task<long> LatencyResetAsync(ValkeyValue @event);
public async Task<long> LatencyResetAsync(ValkeyValue @event)
=> await Command(Request.LatencyResetAsync([@event]));

/// <inheritdoc cref="IBaseClient.LatencyResetAsync(IEnumerable{ValkeyValue})"/>
public abstract Task<long> LatencyResetAsync(IEnumerable<ValkeyValue> events);

// TODO #475: Add parameterless LolwutAsync() here
public async Task<long> LatencyResetAsync(IEnumerable<ValkeyValue> events)
=> await Command(Request.LatencyResetAsync(events));

/// <inheritdoc cref="IBaseClient.LolwutAsync(LolwutOptions)"/>
public abstract Task<string> LolwutAsync(LolwutOptions options);
public async Task<string> LolwutAsync(LolwutOptions options)
=> await Command(Request.LolwutAsync(options));

/// <inheritdoc cref="IBaseClient.SaveAsync()"/>
public abstract Task SaveAsync();
public async Task SaveAsync()
=> _ = await Command(Request.SaveAsync());
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

namespace Valkey.Glide;

// TODO #462: Consolidate no-route overloads into BaseClient (glide-core default routing matches).
public partial class GlideClient
{
/// <inheritdoc cref="IGlideClient.BackgroundSaveAsync()"/>
Expand All @@ -28,10 +27,6 @@ public async Task<string> BgRewriteAofAsync()
public async Task<KeyValuePair<string, string>[]> ConfigGetAsync(ValkeyValue pattern = default)
=> await Command(Request.ConfigGetAsync(pattern));

/// <inheritdoc cref="IBaseClient.ConfigGetAsync(IEnumerable{ValkeyValue})"/>
public override async Task<KeyValuePair<string, string>[]> ConfigGetAsync(IEnumerable<ValkeyValue> patterns)
=> await Command(Request.ConfigGetAsync(patterns));

/// <inheritdoc cref="IGlideClient.ConfigResetStatisticsAsync()"/>
public async Task ConfigResetStatisticsAsync()
=> _ = await Command(Request.ConfigResetStatisticsAsync());
Expand All @@ -44,10 +39,6 @@ public async Task ConfigRewriteAsync()
public async Task ConfigSetAsync(ValkeyValue setting, ValkeyValue value)
=> _ = await Command(Request.ConfigSetAsync(setting, value));

/// <inheritdoc cref="IBaseClient.ConfigSetAsync(IDictionary{ValkeyValue, ValkeyValue})"/>
public override async Task ConfigSetAsync(IDictionary<ValkeyValue, ValkeyValue> parameters)
=> _ = await Command(Request.ConfigSetAsync(parameters));

/// <inheritdoc cref="IGlideClient.DatabaseSizeAsync()"/>
public async Task<long> DatabaseSizeAsync()
=> await Command(Request.DatabaseSizeAsync());
Expand All @@ -64,18 +55,10 @@ public async Task FailoverAsync(FailoverOptions options)
public async Task FlushAllDatabasesAsync()
=> _ = await Command(Request.FlushAllDatabasesAsync());

/// <inheritdoc cref="IBaseClient.FlushAllDatabasesAsync(FlushMode)"/>
public override async Task FlushAllDatabasesAsync(FlushMode mode)
=> _ = await Command(Request.FlushAllDatabasesAsync(mode));

/// <inheritdoc cref="IGlideClient.FlushDatabaseAsync()"/>
public async Task FlushDatabaseAsync()
=> _ = await Command(Request.FlushDatabaseAsync());

/// <inheritdoc cref="IBaseClient.FlushDatabaseAsync(FlushMode)"/>
public override async Task FlushDatabaseAsync(FlushMode mode)
=> _ = await Command(Request.FlushDatabaseAsync(mode));

/// <inheritdoc cref="IGlideClient.InfoAsync()"/>
public async Task<string> InfoAsync() => await InfoAsync([]);

Expand All @@ -95,27 +78,10 @@ public async Task<LatencyEntry[]> LatencyHistoryAsync(ValkeyValue @event)
public async Task<LatencyEventInfo[]> LatencyLatestAsync()
=> await Command(Request.LatencyLatestAsync());

/// <inheritdoc cref="IBaseClient.LatencyResetAsync()"/>
public override async Task<long> LatencyResetAsync()
=> await Command(Request.LatencyResetAsync([]));

/// <inheritdoc cref="IBaseClient.LatencyResetAsync(ValkeyValue)"/>
public override async Task<long> LatencyResetAsync(ValkeyValue @event)
=> await Command(Request.LatencyResetAsync([@event]));

/// <inheritdoc cref="IBaseClient.LatencyResetAsync(IEnumerable{ValkeyValue})"/>
public override async Task<long> LatencyResetAsync(IEnumerable<ValkeyValue> events)
=> await Command(Request.LatencyResetAsync(events));

/// <inheritdoc cref="IGlideClient.LolwutAsync()"/>
// TODO #475: Move to BaseClient.
public async Task<string> LolwutAsync()
=> await Command(Request.LolwutAsync());

/// <inheritdoc cref="IBaseClient.LolwutAsync(LolwutOptions)"/>
public override async Task<string> LolwutAsync(LolwutOptions options)
=> await Command(Request.LolwutAsync(options));

/// <inheritdoc cref="IGlideClient.MemoryDoctorAsync()"/>
public async Task<string> MemoryDoctorAsync()
=> await Command(Request.MemoryDoctorAsync());
Expand All @@ -140,10 +106,6 @@ public async Task ReplicaOfAsync(string host, int port)
public async Task ReplicaOfNoOneAsync()
=> _ = await Command(Request.ReplicaOfNoOneAsync());

/// <inheritdoc cref="IBaseClient.SaveAsync()"/>
public override async Task SaveAsync()
=> _ = await Command(Request.SaveAsync());

/// <inheritdoc cref="IGlideClient.TimeAsync()"/>
public Task<DateTimeOffset> TimeAsync()
=> Command(Request.TimeAsync());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,66 +1,27 @@
// Copyright Valkey GLIDE Project Contributors - SPDX Identifier: Apache-2.0

using Valkey.Glide.Commands;
using Valkey.Glide.Internals;

using static Valkey.Glide.Route;

namespace Valkey.Glide;

// TODO #462: Consolidate no-route overloads into BaseClient (glide-core default routing matches).
public partial class GlideClusterClient
{
/// <inheritdoc cref="IBaseClient.ClientGetNameAsync()"/>
public override async Task<ValkeyValue> ClientGetNameAsync()
=> await Command(Request.ClientGetName(), Route.Random);

/// <inheritdoc cref="IGlideClusterClient.ClientGetNameAsync(Route)"/>
public async Task<ClusterValue<ValkeyValue>> ClientGetNameAsync(Route route)
=> await Command(Request.ClientGetName(route), route);

/// <inheritdoc cref="IBaseClient.ClientIdAsync()"/>
public override async Task<long> ClientIdAsync()
=> await Command(Request.ClientId(), Route.Random);
=> await Command(Request.ClientGetName().ToClusterValue(route), route);

/// <inheritdoc cref="IGlideClusterClient.ClientIdAsync(Route)"/>
public async Task<ClusterValue<long>> ClientIdAsync(Route route)
=> await Command(Request.ClientId().ToClusterValue(route is SingleNodeRoute), route);

/// <inheritdoc cref="IBaseClient.ClientPauseAsync(TimeSpan)"/>
public override async Task ClientPauseAsync(TimeSpan timeout)
=> _ = await Command(Request.ClientPause(timeout), AllPrimaries);

/// <inheritdoc cref="IBaseClient.ClientPauseWriteAsync(TimeSpan)"/>
public override async Task ClientPauseWriteAsync(TimeSpan timeout)
=> _ = await Command(Request.ClientPauseWrite(timeout), AllPrimaries);

/// <inheritdoc cref="IBaseClient.ClientTrackingInfoAsync()"/>
public override async Task<ClientTrackingInfo> ClientTrackingInfoAsync()
=> await Command(Request.ClientTrackingInfo(), Route.Random);
=> await Command(Request.ClientId().ToClusterValue(route), route);

/// <inheritdoc cref="IGlideClusterClient.ClientTrackingInfoAsync(Route)"/>
public async Task<ClusterValue<ClientTrackingInfo>> ClientTrackingInfoAsync(Route route)
=> await Command(Request.ClientTrackingInfo().ToClusterValue(route is SingleNodeRoute), route);

/// <inheritdoc cref="IBaseClient.ClientUnpauseAsync()"/>
public override async Task ClientUnpauseAsync()
=> _ = await Command(Request.ClientUnpause(), AllPrimaries);

/// <inheritdoc cref="IBaseClient.EchoAsync(ValkeyValue)"/>
public override async Task<ValkeyValue> EchoAsync(ValkeyValue message)
=> await Command(Request.Echo(message), Route.Random);
=> await Command(Request.ClientTrackingInfo().ToClusterValue(route), route);

/// <inheritdoc cref="IGlideClusterClient.EchoAsync(ValkeyValue, Route)"/>
public async Task<ClusterValue<ValkeyValue>> EchoAsync(ValkeyValue message, Route route)
=> await Command(Request.Echo(message).ToClusterValue(route is SingleNodeRoute), route);

/// <inheritdoc cref="IBaseClient.PingAsync()"/>
public override async Task<ValkeyValue> PingAsync()
=> await Command(Request.Ping(), AllPrimaries);

/// <inheritdoc cref="IBaseClient.PingAsync(ValkeyValue)"/>
public override async Task<ValkeyValue> PingAsync(ValkeyValue message)
=> await Command(Request.Ping(message), AllPrimaries);
=> await Command(Request.Echo(message).ToClusterValue(route), route);

/// <inheritdoc cref="IGlideClusterClient.PingAsync(Route)"/>
public async Task<ValkeyValue> PingAsync(Route route)
Expand All @@ -69,8 +30,4 @@ public async Task<ValkeyValue> PingAsync(Route route)
/// <inheritdoc cref="IGlideClusterClient.PingAsync(ValkeyValue, Route)"/>
public async Task<ValkeyValue> PingAsync(ValkeyValue message, Route route)
=> await Command(Request.Ping(message), route);

/// <inheritdoc cref="IConnectionManagementBaseCommands.SelectAsync(long)"/>
public override async Task SelectAsync(long index)
=> _ = await Command(Request.Select(index), Route.Random);
}
Loading
Loading