summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Klishin <mklishin@pivotal.io>2019-10-27 20:35:04 +0300
committerMichael Klishin <mklishin@pivotal.io>2019-10-27 20:35:04 +0300
commit352ffc9a24918c43a259ea9c68d775b81ad4b6d5 (patch)
tree6d124c99fdb4a8360e05bd6b7a0c441aaee3d350
parentc7c23e6bacf25b08e910dfa6a889e6d0aeb7feb8 (diff)
downloadrabbitmq-server-git-352ffc9a24918c43a259ea9c68d775b81ad4b6d5.tar.gz
Make a bunch of Ra settings configurable rabbitmq.conf
raft.segment_max_entries = 65535 raft.wal_max_size_bytes = 1048576 raft.wal_max_batch_size = 32768 raft.snapshot_chunk_size = 1000000 Closes #2140.
-rw-r--r--docs/rabbitmq.conf.example12
-rw-r--r--priv/schema/rabbit.schema61
-rw-r--r--src/rabbit.erl7
-rw-r--r--test/config_schema_SUITE_data/rabbit.snippets35
4 files changed, 113 insertions, 2 deletions
diff --git a/docs/rabbitmq.conf.example b/docs/rabbitmq.conf.example
index 3f66404a8f..c87a49d36b 100644
--- a/docs/rabbitmq.conf.example
+++ b/docs/rabbitmq.conf.example
@@ -442,6 +442,18 @@
# collect_statistics_interval = 5000
##
+## Ra Settings
+## =====================
+##
+## NB: changing these on a node with existing data directory
+## can lead to DATA LOSS.
+##
+# raft.segment_max_entries = 65535
+# raft.wal_max_size_bytes = 1048576
+# raft.wal_max_batch_size = 32768
+# raft.snapshot_chunk_size = 1000000
+
+##
## Misc/Advanced Options
## =====================
##
diff --git a/priv/schema/rabbit.schema b/priv/schema/rabbit.schema
index 8c951cbecb..8db2ebf3ff 100644
--- a/priv/schema/rabbit.schema
+++ b/priv/schema/rabbit.schema
@@ -1522,6 +1522,67 @@ end}.
end
}.
+%%
+%% Ra
+%%
+
+{mapping, "raft.segment_max_entries", "ra.segment_max_entries", [
+ {datatype, integer},
+ {validators, ["non_zero_positive_integer"]}
+]}.
+
+{translation, "ra.segment_max_entries",
+ fun(Conf) ->
+ case cuttlefish:conf_get("raft.segment_max_entries", Conf, undefined) of
+ undefined -> cuttlefish:unset();
+ Val -> Val
+ end
+ end
+}.
+
+{mapping, "raft.wal_max_size_bytes", "ra.wal_max_size_bytes", [
+ {datatype, integer},
+ {validators, ["non_zero_positive_integer"]}
+]}.
+
+{translation, "ra.wal_max_size_bytes",
+ fun(Conf) ->
+ case cuttlefish:conf_get("raft.wal_max_size_bytes", Conf, undefined) of
+ undefined -> cuttlefish:unset();
+ Val -> Val
+ end
+ end
+}.
+
+{mapping, "raft.wal_max_batch_size", "ra.wal_max_batch_size", [
+ {datatype, integer},
+ {validators, ["non_zero_positive_integer"]}
+]}.
+
+{translation, "ra.wal_max_batch_size",
+ fun(Conf) ->
+ case cuttlefish:conf_get("raft.wal_max_batch_size", Conf, undefined) of
+ undefined -> cuttlefish:unset();
+ Val -> Val
+ end
+ end
+}.
+
+{mapping, "raft.snapshot_chunk_size", "ra.snapshot_chunk_size", [
+ {datatype, integer},
+ {validators, ["non_zero_positive_integer"]}
+]}.
+
+{translation, "ra.snapshot_chunk_size",
+ fun(Conf) ->
+ case cuttlefish:conf_get("raft.snapshot_chunk_size", Conf, undefined) of
+ undefined -> cuttlefish:unset();
+ Val -> Val
+ end
+ end
+}.
+
+
% ===============================
% Validators
% ===============================
diff --git a/src/rabbit.erl b/src/rabbit.erl
index 6d4ff8b8c9..da721bed88 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -541,7 +541,12 @@ start_loaded_apps(Apps, RestartTypes) ->
%% default OTP logger
application:set_env(ra, logger_module, rabbit_log_ra_shim),
%% use a larger segments size for queues
- application:set_env(ra, segment_max_entries, 32768),
+ case application:get_env(ra, segment_max_entries) of
+ undefined ->
+ application:set_env(ra, segment_max_entries, 32768);
+ _ ->
+ ok
+ end,
case application:get_env(ra, wal_max_size_bytes) of
undefined ->
application:set_env(ra, wal_max_size_bytes, 536870912); %% 5 * 2 ^ 20
diff --git a/test/config_schema_SUITE_data/rabbit.snippets b/test/config_schema_SUITE_data/rabbit.snippets
index 4e34738a60..060edda8a2 100644
--- a/test/config_schema_SUITE_data/rabbit.snippets
+++ b/test/config_schema_SUITE_data/rabbit.snippets
@@ -638,5 +638,38 @@ credential_validator.regexp = ^abc\\d+",
{cacertfile,"test/config_schema_SUITE_data/certs/cacert.pem"},
{certfile,"test/config_schema_SUITE_data/certs/cert.pem"},
{keyfile,"test/config_schema_SUITE_data/certs/key.pem"}]}}]}],
- []}
+ []},
+
+ %%
+ %% Raft
+ %%
+
+ {raft_segment_max_entries,
+ "raft.segment_max_entries = 65535",
+ [{ra, [
+ {segment_max_entries, 65535}
+ ]}],
+ []},
+
+ {raft_wal_max_size_bytes,
+ "raft.wal_max_size_bytes = 1048576",
+ [{ra, [
+ {wal_max_size_bytes, 1048576}
+ ]}],
+ []},
+
+ {raft_wal_max_batch_size,
+ "raft.wal_max_batch_size = 32768",
+ [{ra, [
+ {wal_max_batch_size, 32768}
+ ]}],
+ []},
+
+ {raft_snapshot_chunk_size,
+ "raft.snapshot_chunk_size = 1000000",
+ [{ra, [
+ {snapshot_chunk_size, 1000000}
+ ]}],
+ []}
+
].