Skip to content

Commit

Permalink
Merge pull request #486 from rabbitmq/chef-cookbook-459
Browse files Browse the repository at this point in the history
Make TCP buffer size configurable
  • Loading branch information
lukebakken authored Feb 21, 2018
2 parents dc67051 + 8073b87 commit 3418e04
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 14 deletions.
6 changes: 5 additions & 1 deletion attributes/default.rb
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,8 @@
# Add an ability to set web console listen ip.
default['rabbitmq']['web_console_interface'] = nil

# tcp listen options
# TCP listener options, see
# https://www.rabbitmq.com/networking.html for details.
default['rabbitmq']['tcp_listen'] = true
default['rabbitmq']['tcp_listen_packet'] = 'raw'
default['rabbitmq']['tcp_listen_reuseaddr'] = true
Expand All @@ -156,6 +157,9 @@
default['rabbitmq']['tcp_listen_keepalive'] = false
default['rabbitmq']['tcp_listen_linger'] = true
default['rabbitmq']['tcp_listen_linger_timeout'] = 0
default['rabbitmq']['tcp_listen_buffer'] = nil
default['rabbitmq']['tcp_listen_sndbuf'] = nil
default['rabbitmq']['tcp_listen_recbuf'] = nil

# virtualhosts
default['rabbitmq']['virtualhosts'] = []
Expand Down
33 changes: 29 additions & 4 deletions spec/default_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -177,22 +177,47 @@
end
end

describe 'tcp_listen_linger' do
it 'default linger option' do
describe 'TCP listener options' do
it 'enables socket lingering by default' do
expect(chef_run).to render_file('/etc/rabbitmq/rabbitmq.config').with_content('{linger, {true,0}}')
end

it 'false linger option' do
it 'supports disabling lingering' do
node.normal['rabbitmq']['tcp_listen_linger'] = false
expect(chef_run).to render_file('/etc/rabbitmq/rabbitmq.config').with_content('{linger, {false,0}}')
end

it 'linger option variable timeout' do
it 'supports setting lingering timeout' do
node.normal['rabbitmq']['tcp_listen_linger_timeout'] = 5
expect(chef_run).to render_file('/etc/rabbitmq/rabbitmq.config').with_content('{linger, {true,5}}')
end

it 'supports explicit setting of TCP socket buffer' do
node.normal['rabbitmq']['tcp_listen_buffer'] = 16384
expect(chef_run).to render_file('/etc/rabbitmq/rabbitmq.config').with_content('{buffer, 16384}')
end

it 'supports explicit setting of TCP socket send buffer' do
node.normal['rabbitmq']['tcp_listen_sndbuf'] = 8192
expect(chef_run).to render_file('/etc/rabbitmq/rabbitmq.config').with_content('{sndbuf, 8192}')
end

it 'supports explicit setting of TCP socket receive buffer' do
node.normal['rabbitmq']['tcp_listen_recbuf'] = 8192
expect(chef_run).to render_file('/etc/rabbitmq/rabbitmq.config').with_content('{recbuf, 8192}')
end
end

describe 'credit flow' do
it 'can configure defaults' do
node.normal['rabbitmq']['credit_flow_defaults']['initial'] = 500
node.normal['rabbitmq']['credit_flow_defaults']['more_credit_after'] = 250
expect(chef_run).to render_file('/etc/rabbitmq/rabbitmq.config').with_content('{credit_flow_default_credit, {500, 250}}')
end
end



describe 'suse' do
let(:runner) { ChefSpec::ServerRunner.new(SUSE_OPTS) }
let(:node) { runner.node }
Expand Down
35 changes: 26 additions & 9 deletions templates/default/rabbitmq.config.erb
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
{rabbitmq_management, [
<% if node['rabbitmq']['management']['load_definitions'] %>
{load_definitions, "<%= node['rabbitmq']['management']['definitions_file'] %>"},
<% end -%>
<% end -%>
{listener, [
{port, <%= node['rabbitmq']['web_console_port'] %>}
<% if node['rabbitmq']['web_console_interface'] -%>
Expand Down Expand Up @@ -66,15 +66,28 @@
]},
<% end %>
<% if node['rabbitmq']['tcp_listen'] -%>
{tcp_listen_options, [binary, {packet,<%= node['rabbitmq']['tcp_listen_packet'] %>},

This comment has been minimized.

Copy link
@michaelklishin

michaelklishin Mar 1, 2018

Member

binary is the default in Ranch, the TCP listener library adopted over 2 years ago in 3.6.0.

{reuseaddr,<%= node['rabbitmq']['tcp_listen_reuseaddr'] %>},
{backlog,<%= node['rabbitmq']['tcp_listen_backlog'] %>},
{nodelay,<%= node['rabbitmq']['tcp_listen_nodelay'] %>},
{exit_on_close,<%= node['rabbitmq']['tcp_listen_exit_on_close'] %>},
{keepalive,<%= node['rabbitmq']['tcp_listen_keepalive'] %>},
{linger, {<%= node['rabbitmq']['tcp_listen_linger'] %>,<%= node['rabbitmq']['tcp_listen_linger_timeout'] %>}}]},
{tcp_listen_options, [{packet, <%= node['rabbitmq']['tcp_listen_packet'] %>},
{reuseaddr, <%= node['rabbitmq']['tcp_listen_reuseaddr'] %>},
{backlog, <%= node['rabbitmq']['tcp_listen_backlog'] %>},
{nodelay, <%= node['rabbitmq']['tcp_listen_nodelay'] %>},
{exit_on_close, <%= node['rabbitmq']['tcp_listen_exit_on_close'] %>},
{keepalive, <%= node['rabbitmq']['tcp_listen_keepalive'] %>},

<% if node['rabbitmq']['tcp_listen_buffer'] -%>
{buffer, <%= node['rabbitmq']['tcp_listen_buffer'] %>},
<% end -%>

<% if node['rabbitmq']['tcp_listen_sndbuf'] -%>
{sndbuf, <%= node['rabbitmq']['tcp_listen_sndbuf'] %>},
<% end -%>

<% if node['rabbitmq']['tcp_listen_recbuf'] -%>
{recbuf, <%= node['rabbitmq']['tcp_listen_recbuf'] %>},
<% end -%>

{linger, {<%= node['rabbitmq']['tcp_listen_linger'] %>,<%= node['rabbitmq']['tcp_listen_linger_timeout'] %>}}]},
<% else -%>
{tcp_listeners, []},
{tcp_listen_options, []},
<% end %>

<% if node['rabbitmq']['log_levels'] -%>
Expand All @@ -101,6 +114,10 @@
{default_pass, <<"<%= node['rabbitmq']['default_pass'] %>">>},
{heartbeat, <%= node['rabbitmq']['heartbeat'] %>}

<% if node['rabbitmq']['credit_flow_defaults'] -%>
{credit_flow_default_credit, {<%= node['rabbitmq']['credit_flow_defaults']['initial'] %>, <%= node['rabbitmq']['credit_flow_defaults']['more_credit_after'] %>}},
<% end %>

<% node['rabbitmq']['additional_rabbit_configs'].each do |key,value| -%>
,{<%= key %>, <%= value %>}
<% end -%>
Expand Down

0 comments on commit 3418e04

Please sign in to comment.