This is an automated email from the ASF dual-hosted git repository. rnewson pushed a commit to branch replicator-ibrowse-options in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 477123eb3c8aacb00788c4989fd3e64410cd7bbd Author: Robert Newson <[email protected]> AuthorDate: Mon Jul 10 16:06:44 2023 +0100 allow setting of some ibrowse options --- .../src/couch_replicator_parse.erl | 26 +++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/couch_replicator/src/couch_replicator_parse.erl b/src/couch_replicator/src/couch_replicator_parse.erl index 8184c30ff..18663386f 100644 --- a/src/couch_replicator/src/couch_replicator_parse.erl +++ b/src/couch_replicator/src/couch_replicator_parse.erl @@ -34,6 +34,10 @@ recbuf, sndbuf ]). +-define(DEFAULT_IBROWSE_OPTS, []). +-define(VALID_IBROWSE_OPTS, [ + prefer_ipv6 +]). -define(VALID_PROTOCOLS, #{ endpoint => [http, https], proxy => [http, https, socks5] @@ -50,6 +54,7 @@ default_options() -> {checkpoint_interval, cfg_int("checkpoint_interval", 30000)}, {use_checkpoints, cfg_boolean("use_checkpoints", true)}, {use_bulk_get, cfg_boolean("use_bulk_get", true)}, + {ibrowse_options, cfg_ibrowse_opts()}, {socket_options, cfg_sock_opts()} ]. @@ -196,6 +201,7 @@ parse_rep_db({Props}, Proxy, Options) -> {BinHeaders} = get_value(<<"headers">>, Props, {[]}), Headers = lists:ukeysort(1, [{?b2l(K), ?b2l(V)} || {K, V} <- BinHeaders]), DefaultHeaders = (#httpdb{})#httpdb.headers, + IbrowseOptions = get_value(ibrowse_options, Options), HttpDb = #httpdb{ url = Url, auth_props = AuthProps, @@ -204,7 +210,7 @@ parse_rep_db({Props}, Proxy, Options) -> 1, [ {socket_options, get_value(socket_options, Options)} - | ProxyParams ++ ssl_params(Url) + | ProxyParams ++ ssl_params(Url) ++ IbrowseOptions ] ), timeout = get_value(connection_timeout, Options), @@ -288,14 +294,18 @@ cfg_atoms(Cfg, Default) -> cfg_sock_opts() -> CfgTerm = cfg("socket_options"), - parse_sock_opts(CfgTerm, ?DEFAULT_SOCK_OPTS, ?VALID_SOCK_OPTS). + parse_opts(CfgTerm, ?DEFAULT_SOCK_OPTS, ?VALID_SOCK_OPTS). + +cfg_ibrowse_opts() -> + CfgTerm = cfg("ibrowse_options"), + parse_opts(CfgTerm, ?DEFAULT_IBROWSE_OPTS, ?VALID_IBROWSE_OPTS). cfg(Var) -> config:get("replicator", Var). -parse_sock_opts(undefined, Defaults, _) -> +parse_opts(undefined, Defaults, _) -> Defaults; -parse_sock_opts(Term, _Defaults, ValidOpts) -> +parse_opts(Term, _Defaults, ValidOpts) -> SocketOptions = case couch_util:parse_term(Term) of {ok, Opts} -> Opts; @@ -306,7 +316,11 @@ parse_sock_opts(Term, _Defaults, ValidOpts) -> sock_opts(CfgTerm) -> ValidOpts = cfg_atoms("valid_socket_options", ?VALID_SOCK_OPTS), - parse_sock_opts(CfgTerm, ?DEFAULT_SOCK_OPTS, ValidOpts). + parse_opts(CfgTerm, ?DEFAULT_SOCK_OPTS, ValidOpts). + +ibrowse_opts(CfgTerm) -> + ValidOpts = cfg_atoms("valid_ibrowse_options", ?VALID_IBROWSE_OPTS), + parse_opts(CfgTerm, ?DEFAULT_IBROWSE_OPTS, ValidOpts). -spec convert_options([_]) -> [_]. convert_options([]) -> @@ -368,6 +382,8 @@ convert_options([{<<"retries_per_request">>, V} | R]) -> [{retries, couch_util:to_integer(V)} | convert_options(R)]; convert_options([{<<"socket_options">>, V} | R]) -> [{socket_options, sock_opts(V)} | convert_options(R)]; +convert_options([{<<"ibrowse_options">>, V} | R]) -> + [{ibrowse_options, ibrowse_opts(V)} | convert_options(R)]; convert_options([{<<"since_seq">>, V} | R]) -> [{since_seq, V} | convert_options(R)]; convert_options([{<<"use_checkpoints">>, V} | R]) ->
