Commit 3043b31c authored by Robert Speicher's avatar Robert Speicher

Merge branch 'feature/redis-sentinel' into 'master'

Sentinel Support

Sentinel connection parameters in `config.yml` file.

Fixes #29

See merge request !85
parents 4f8e91fa ee684a09
v3.4.0
- Redis Sentinel support
v3.3.3 v3.3.3
- Print URL for new or existing merge request after push - Print URL for new or existing merge request after push
......
...@@ -38,8 +38,16 @@ redis: ...@@ -38,8 +38,16 @@ redis:
# port: 6379 # port: 6379
# pass: redispass # Allows you to specify the password for Redis # pass: redispass # Allows you to specify the password for Redis
database: 0 database: 0
socket: /var/run/redis/redis.sock # Comment out this line if you want to use TCP socket: /var/run/redis/redis.sock # Comment out this line if you want to use TCP or Sentinel
namespace: resque:gitlab namespace: resque:gitlab
# sentinels:
# -
# host: 127.0.0.1
# port: 26380
# -
# host: 127.0.0.1
# port: 26381
# Log file. # Log file.
# Default is gitlab-shell.log in the root directory. # Default is gitlab-shell.log in the root directory.
......
...@@ -81,6 +81,12 @@ class GitlabNet ...@@ -81,6 +81,12 @@ class GitlabNet
db: database db: database
} }
if redis_config.has_key?('sentinels')
params[:sentinels] = redis_config['sentinels']
.select { |s| s['host'] && s['port'] }
.map { |s| { host: s['host'], port: s['port'] } }
end
if redis_config.has_key?("socket") if redis_config.has_key?("socket")
params = { path: redis_config['socket'], db: database } params = { path: redis_config['socket'], db: database }
elsif redis_config.has_key?("pass") elsif redis_config.has_key?("pass")
......
redis:
bin: /usr/bin/redis-cli
host: 127.0.1.1
port: 6378
pass: secure
database: 1
socket: /var/run/redis/redis.sock
namespace: my:gitlab
sentinels:
-
host: 127.0.0.1
port: 26380
...@@ -6,17 +6,8 @@ describe GitlabConfig do ...@@ -6,17 +6,8 @@ describe GitlabConfig do
describe :redis do describe :redis do
before do before do
config.instance_variable_set(:@config, YAML.load(<<eos config_file = File.read('spec/fixtures/gitlab_config_redis.yml')
redis: config.instance_variable_set(:@config, YAML.load(config_file))
bin: /usr/bin/redis-cli
host: 127.0.1.1
port: 6378
pass: secure
database: 1
socket: /var/run/redis/redis.sock
namespace: my:gitlab
eos
))
end end
it { config.redis['bin'].should eq('/usr/bin/redis-cli') } it { config.redis['bin'].should eq('/usr/bin/redis-cli') }
...@@ -26,6 +17,7 @@ eos ...@@ -26,6 +17,7 @@ eos
it { config.redis['namespace'].should eq('my:gitlab') } it { config.redis['namespace'].should eq('my:gitlab') }
it { config.redis['socket'].should eq('/var/run/redis/redis.sock') } it { config.redis['socket'].should eq('/var/run/redis/redis.sock') }
it { config.redis['pass'].should eq('secure') } it { config.redis['pass'].should eq('secure') }
it { config.redis['sentinels'].should eq([{ 'host' => '127.0.0.1', 'port' => 26380 }]) }
end end
describe :gitlab_url do describe :gitlab_url do
......
...@@ -276,32 +276,34 @@ describe GitlabNet, vcr: true do ...@@ -276,32 +276,34 @@ describe GitlabNet, vcr: true do
expect_any_instance_of(Redis).to receive(:initialize).with({ host: '127.0.0.1', expect_any_instance_of(Redis).to receive(:initialize).with({ host: '127.0.0.1',
port: 6379, port: 6379,
db: 0 }).and_call_original db: 0 })
gitlab_net.redis_client gitlab_net.redis_client
end end
end end
context "with host and port" do context "with password" do
it 'uses the specified host and port' do it 'uses the specified host, port, and password' do
allow(gitlab_net).to receive(:config).and_return(config) allow(gitlab_net).to receive(:config).and_return(config)
allow(config).to receive(:redis).and_return( { 'host' => 'localhost', 'port' => 1123 } ) allow(config).to receive(:redis).and_return( { 'host' => 'localhost', 'port' => 1123, 'pass' => 'secret' } )
expect_any_instance_of(Redis).to receive(:initialize).with({ host: 'localhost', expect_any_instance_of(Redis).to receive(:initialize).with({ host: 'localhost',
port: 1123, port: 1123,
db: 0 }).and_call_original db: 0,
password: 'secret'})
gitlab_net.redis_client gitlab_net.redis_client
end end
end end
context "with password" do context "with sentinels" do
it 'uses the specified host, port, and password' do it 'uses the specified sentinels' do
allow(gitlab_net).to receive(:config).and_return(config) allow(gitlab_net).to receive(:config).and_return(config)
allow(config).to receive(:redis).and_return( { 'host' => 'localhost', 'port' => 1123, 'pass' => 'secret' } ) allow(config).to receive(:redis).and_return({ 'host' => 'localhost', 'port' => 1123,
'sentinels' => [{'host' => '127.0.0.1', 'port' => 26380}] })
expect_any_instance_of(Redis).to receive(:initialize).with({ host: 'localhost', expect_any_instance_of(Redis).to receive(:initialize).with({ host: 'localhost',
port: 1123, port: 1123,
db: 0, db: 0,
password: 'secret'}).and_call_original sentinels: [{host: '127.0.0.1', port: 26380}] })
gitlab_net.redis_client gitlab_net.redis_client
end end
end end
...@@ -314,7 +316,7 @@ describe GitlabNet, vcr: true do ...@@ -314,7 +316,7 @@ describe GitlabNet, vcr: true do
allow(gitlab_net).to receive(:config).and_return(config) allow(gitlab_net).to receive(:config).and_return(config)
allow(config).to receive(:redis).and_return( { 'socket' => socket }) allow(config).to receive(:redis).and_return( { 'socket' => socket })
expect_any_instance_of(Redis).to receive(:initialize).with({ path: socket, db: 0 }).and_call_original expect_any_instance_of(Redis).to receive(:initialize).with({ path: socket, db: 0 })
gitlab_net.redis_client gitlab_net.redis_client
end end
end end
......
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