Skip to content

Instantly share code, notes, and snippets.

@eric
Created August 13, 2012 05:27
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eric/3337165 to your computer and use it in GitHub Desktop.
Save eric/3337165 to your computer and use it in GitHub Desktop.
namespace :redis_failover do
task :monitor_client do
require 'redis_failover'
zookeepers = ENV['ZOOKEEPERS']
if !zookeepers && zookeepers_file = ENV['ZOOKEEPERS_FILE']
if File.exists?(zookeepers_file)
zookeepers = File.read(zookeepers_file).chomp
end
end
zookeepers ||= '127.0.0.1:2181'
unless redis_master_file = ENV['REDIS_MASTER_FILE']
abort "No REDIS_MASTER_FILE= provided"
end
callback = proc do |master, slaves|
puts "master: #{master.inspect} slaves: #{slaves.inspect}"
if master && (!File.exists?(redis_master_file) || File.read(redis_master_file) != master)
File.open(redis_master_file, 'w') do |io|
io << master
end
elsif !master && File.exists?(redis_master_file)
File.unlink(redis_master_file)
end
end
RedisFailover::Client.new(:zkservers => zookeepers, :safe_mode => false, :master_only => true) do |client|
client.on_node_change(&callback)
end
while true
sleep 1
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment