Commit 15ebc8ab authored by Marc Gravell's avatar Marc Gravell Committed by Nick Craver

skip rather than fail if dedicated database isn't available

parent da0ffb62
...@@ -15,6 +15,7 @@ private void Prep(int db, string key) ...@@ -15,6 +15,7 @@ private void Prep(int db, string key)
var prefix = Me(); var prefix = Me();
using (var muxer = GetUnsecuredConnection(allowAdmin: true)) using (var muxer = GetUnsecuredConnection(allowAdmin: true))
{ {
Skip.IfMissingDatabase(muxer, db);
GetServer(muxer).FlushDatabase(db); GetServer(muxer).FlushDatabase(db);
Task last = null; Task last = null;
var conn = muxer.GetDatabase(db); var conn = muxer.GetDatabase(db);
......
...@@ -15,12 +15,16 @@ public async Task CountKeys() ...@@ -15,12 +15,16 @@ public async Task CountKeys()
var db2Id = TestConfig.GetDedicatedDB(); var db2Id = TestConfig.GetDedicatedDB();
using (var muxer = Create(allowAdmin: true)) using (var muxer = Create(allowAdmin: true))
{ {
Skip.IfMissingDatabase(muxer, db1Id);
Skip.IfMissingDatabase(muxer, db2Id);
var server = GetAnyMaster(muxer); var server = GetAnyMaster(muxer);
server.FlushDatabase(db1Id, CommandFlags.FireAndForget); server.FlushDatabase(db1Id, CommandFlags.FireAndForget);
server.FlushDatabase(db2Id, CommandFlags.FireAndForget); server.FlushDatabase(db2Id, CommandFlags.FireAndForget);
} }
using (var muxer = Create()) using (var muxer = Create())
{ {
Skip.IfMissingDatabase(muxer, db1Id);
Skip.IfMissingDatabase(muxer, db2Id);
RedisKey key = Me(); RedisKey key = Me();
var db61 = muxer.GetDatabase(db1Id); var db61 = muxer.GetDatabase(db1Id);
var db62 = muxer.GetDatabase(db2Id); var db62 = muxer.GetDatabase(db2Id);
...@@ -43,9 +47,9 @@ public void MultiDatabases() ...@@ -43,9 +47,9 @@ public void MultiDatabases()
using (var muxer = Create()) using (var muxer = Create())
{ {
RedisKey key = Me(); RedisKey key = Me();
var db0 = muxer.GetDatabase(TestConfig.GetDedicatedDB()); var db0 = muxer.GetDatabase(TestConfig.GetDedicatedDB(muxer));
var db1 = muxer.GetDatabase(TestConfig.GetDedicatedDB()); var db1 = muxer.GetDatabase(TestConfig.GetDedicatedDB(muxer));
var db2 = muxer.GetDatabase(TestConfig.GetDedicatedDB()); var db2 = muxer.GetDatabase(TestConfig.GetDedicatedDB(muxer));
db0.Ping(); db0.Ping();
db0.KeyDelete(key, CommandFlags.FireAndForget); db0.KeyDelete(key, CommandFlags.FireAndForget);
......
...@@ -34,6 +34,12 @@ public static void IfMissingFeature(ConnectionMultiplexer conn, string feature, ...@@ -34,6 +34,12 @@ public static void IfMissingFeature(ConnectionMultiplexer conn, string feature,
}; };
} }
} }
internal static void IfMissingDatabase(ConnectionMultiplexer conn, int dbId)
{
var dbCount = conn.GetServer(conn.GetEndPoints()[0]).DatabaseCount;
if (dbId >= dbCount) throw new SkipTestException($"Database {dbId} is not supported on this server.");
}
} }
#pragma warning disable RCS1194 // Implement exception constructors. #pragma warning disable RCS1194 // Implement exception constructors.
......
...@@ -12,7 +12,12 @@ public static class TestConfig ...@@ -12,7 +12,12 @@ public static class TestConfig
public static Config Current { get; } public static Config Current { get; }
private static int _db = 17; private static int _db = 17;
public static int GetDedicatedDB() => Interlocked.Increment(ref _db); public static int GetDedicatedDB(ConnectionMultiplexer conn = null)
{
int db = Interlocked.Increment(ref _db);
if (conn != null) Skip.IfMissingDatabase(conn, db);
return db;
}
static TestConfig() static TestConfig()
{ {
......
...@@ -34,7 +34,8 @@ public void FlushFetchRandomKey() ...@@ -34,7 +34,8 @@ public void FlushFetchRandomKey()
{ {
using (var conn = Create(allowAdmin: true)) using (var conn = Create(allowAdmin: true))
{ {
var dbId = TestConfig.GetDedicatedDB(); var dbId = TestConfig.GetDedicatedDB(conn);
Skip.IfMissingDatabase(conn, dbId);
var db = conn.GetDatabase(dbId); var db = conn.GetDatabase(dbId);
var prefix = Me(); var prefix = Me();
conn.GetServer(TestConfig.Current.MasterServerAndPort).FlushDatabase(dbId); conn.GetServer(TestConfig.Current.MasterServerAndPort).FlushDatabase(dbId);
......
...@@ -18,7 +18,7 @@ public void KeysScan(bool supported) ...@@ -18,7 +18,7 @@ public void KeysScan(bool supported)
string[] disabledCommands = supported ? null : new[] { "scan" }; string[] disabledCommands = supported ? null : new[] { "scan" };
using (var conn = Create(disabledCommands: disabledCommands, allowAdmin: true)) using (var conn = Create(disabledCommands: disabledCommands, allowAdmin: true))
{ {
var dbId = TestConfig.GetDedicatedDB(); var dbId = TestConfig.GetDedicatedDB(conn);
var db = conn.GetDatabase(dbId); var db = conn.GetDatabase(dbId);
var prefix = Me() + ":"; var prefix = Me() + ":";
var server = GetServer(conn); var server = GetServer(conn);
...@@ -44,7 +44,7 @@ public void ScansIScanning() ...@@ -44,7 +44,7 @@ public void ScansIScanning()
using (var conn = Create(allowAdmin: true)) using (var conn = Create(allowAdmin: true))
{ {
var prefix = Me() + Guid.NewGuid(); var prefix = Me() + Guid.NewGuid();
var dbId = TestConfig.GetDedicatedDB(); var dbId = TestConfig.GetDedicatedDB(conn);
var db = conn.GetDatabase(dbId); var db = conn.GetDatabase(dbId);
var server = GetServer(conn); var server = GetServer(conn);
server.FlushDatabase(dbId); server.FlushDatabase(dbId);
...@@ -93,7 +93,7 @@ public void ScanResume() ...@@ -93,7 +93,7 @@ public void ScanResume()
{ {
// only goes up to 3.*, so... // only goes up to 3.*, so...
Skip.IfMissingFeature(conn, nameof(RedisFeatures.Scan), x => x.Scan); Skip.IfMissingFeature(conn, nameof(RedisFeatures.Scan), x => x.Scan);
var dbId = TestConfig.GetDedicatedDB(); var dbId = TestConfig.GetDedicatedDB(conn);
var db = conn.GetDatabase(dbId); var db = conn.GetDatabase(dbId);
var prefix = Me(); var prefix = Me();
var server = GetServer(conn); var server = GetServer(conn);
......
...@@ -52,6 +52,11 @@ public partial interface IServer : IRedis ...@@ -52,6 +52,11 @@ public partial interface IServer : IRedis
/// </summary> /// </summary>
Version Version { get; } Version Version { get; }
/// <summary>
/// The number of databases supported on this server
/// </summary>
int DatabaseCount { get; }
/// <summary> /// <summary>
/// The CLIENT KILL command closes a given client connection identified by ip:port. /// The CLIENT KILL command closes a given client connection identified by ip:port.
/// The ip:port should match a line returned by the CLIENT LIST command. /// The ip:port should match a line returned by the CLIENT LIST command.
......
...@@ -18,6 +18,8 @@ internal RedisServer(ConnectionMultiplexer multiplexer, ServerEndPoint server, o ...@@ -18,6 +18,8 @@ internal RedisServer(ConnectionMultiplexer multiplexer, ServerEndPoint server, o
this.server = server ?? throw new ArgumentNullException(nameof(server)); this.server = server ?? throw new ArgumentNullException(nameof(server));
} }
int IServer.DatabaseCount => server.Databases;
public ClusterConfiguration ClusterConfiguration => server.ClusterConfiguration; public ClusterConfiguration ClusterConfiguration => server.ClusterConfiguration;
public EndPoint EndPoint => server.EndPoint; public EndPoint EndPoint => server.EndPoint;
......
...@@ -13,20 +13,15 @@ private static int Main() ...@@ -13,20 +13,15 @@ private static int Main()
var watch = Stopwatch.StartNew(); var watch = Stopwatch.StartNew();
try try
{ {
#if DEBUG
// Pipelines.Sockets.Unofficial.DebugCounters.SetLog(Console.Out);
#endif
var config = new ConfigurationOptions var config = new ConfigurationOptions
{ {
ConnectRetry = 0, ConnectRetry = 0,
EndPoints = { "127.0.0.1:6381" }, EndPoints = { "127.0.0.1:6379" },
Password = "abc",
}; };
using (var conn = ConnectionMultiplexer.Connect(config, log: null)) using (var conn = ConnectionMultiplexer.Connect(config, log: Console.Out))
{ {
//Execute(conn); Execute(conn);
} }
return 0; return 0;
...@@ -46,14 +41,14 @@ private static int Main() ...@@ -46,14 +41,14 @@ private static int Main()
private static void Execute(ConnectionMultiplexer conn) private static void Execute(ConnectionMultiplexer conn)
{ {
Console.WriteLine("Executing...");
var key = "abc"; var key = "abc";
Console.ReadKey();
var db = conn.GetDatabase(0); var db = conn.GetDatabase(0);
var t = db.CreateTransaction(); var t = db.CreateTransaction();
t.HashSetAsync(key, "foo", "bar"); t.HashSetAsync(key, "foo", "bar");
t.KeyExpireAsync(key, TimeSpan.FromSeconds(3600)); t.KeyExpireAsync(key, TimeSpan.FromSeconds(3600));
t.Execute(); t.Execute();
Console.ReadKey(); Console.WriteLine("Done");
} }
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment