Commit 4b3691a9 authored by Marc Gravell's avatar Marc Gravell

slave-of should help us out by a: not preserving a known-bad "master" value,...

slave-of should help us out by a: not preserving a known-bad "master" value, and b: telling anyone listening about the pending change
parent 3aebb0df
...@@ -563,11 +563,34 @@ internal override RedisFeatures GetFeatures(int db, RedisKey key, CommandFlags f ...@@ -563,11 +563,34 @@ internal override RedisFeatures GetFeatures(int db, RedisKey key, CommandFlags f
public void SlaveOf(EndPoint endpoint, CommandFlags flags = CommandFlags.None) public void SlaveOf(EndPoint endpoint, CommandFlags flags = CommandFlags.None)
{ {
var msg = CreateSlaveOfMessage(endpoint, flags);
if (endpoint == server.EndPoint) if (endpoint == server.EndPoint)
{ {
throw new ArgumentException("Cannot slave to self"); throw new ArgumentException("Cannot slave to self");
} }
// prepare the actual slaveof message (not sent yet)
var msg = CreateSlaveOfMessage(endpoint, flags);
var configuration = this.multiplexer.RawConfig;
// attempt to cease having an opinion on the master; will resume that when replication completes
// (note that this may fail; we aren't depending on it)
if (!string.IsNullOrWhiteSpace(configuration.TieBreaker)
&& this.multiplexer.CommandMap.IsAvailable(RedisCommand.DEL))
{
var del = Message.Create(0, CommandFlags.FireAndForget | CommandFlags.NoRedirect, RedisCommand.DEL, (RedisKey)configuration.TieBreaker);
del.SetInternalCall();
server.QueueDirectFireAndForget(del, ResultProcessor.Boolean);
}
// attempt to broadcast a reconfigure message to anybody listening to this server
var channel = this.multiplexer.ConfigurationChangedChannel;
if(channel != null && this.multiplexer.CommandMap.IsAvailable(RedisCommand.PUBLISH))
{
var pub = Message.Create(-1, CommandFlags.FireAndForget | CommandFlags.NoRedirect, RedisCommand.PUBLISH, (RedisValue)channel, RedisLiterals.Wildcard);
pub.SetInternalCall();
server.QueueDirectFireAndForget(msg, ResultProcessor.Int64);
}
ExecuteSync(msg, ResultProcessor.DemandOK); ExecuteSync(msg, ResultProcessor.DemandOK);
} }
......
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