You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by cm...@apache.org on 2012/12/13 22:45:02 UTC
svn commit: r1421559 - in /subversion/trunk/subversion: include/svn_config.h
libsvn_ra_serf/ra_serf.h libsvn_ra_serf/serf.c libsvn_ra_serf/update.c
libsvn_subr/config_file.c
Author: cmpilato
Date: Thu Dec 13 21:44:56 2012
New Revision: 1421559
URL: http://svn.apache.org/viewvc?rev=1421559&view=rev
Log:
Implement a new runtime configuration option ('http-max-connections')
for controlling the maximum number of parallel connections Serf uses
for a given operation. Leave the default set to 4 (as was previously
hardcoded), and maintain a hard-coded limit for the value (currently
set to 8).
* subversion/include/svn_config.h
(SVN_CONFIG_OPTION_HTTP_MAX_CONNECTIONS): New #define.
(SVN_CONFIG_DEFAULT_OPTION_HTTP_MAX_CONNECTIONS): New #define.
* subversion/libsvn_subr/config_file.c
(svn_config_ensure): Describe new 'http-max-connections'
configuration item.
* subversion/libsvn_ra_serf/ra_serf.h
(SVN_RA_SERF__MAX_CONNECTIONS_LIMIT): New #define.
(MAX_NR_OF_CONNS): Removed.
(svn_ra_serf__session_t): Add 'max_connections' member.
* subversion/libsvn_ra_serf/serf.c
(load_config): Read the 'http-max-connections' option from the
runtime configuration, storing its (capped) valued in the RA session
structure.
* subversion/libsvn_ra_serf/update.c
(finish_report): Now use the session-stored max connections value as
the limit when opening new connections.
Modified:
subversion/trunk/subversion/include/svn_config.h
subversion/trunk/subversion/libsvn_ra_serf/ra_serf.h
subversion/trunk/subversion/libsvn_ra_serf/serf.c
subversion/trunk/subversion/libsvn_ra_serf/update.c
subversion/trunk/subversion/libsvn_subr/config_file.c
Modified: subversion/trunk/subversion/include/svn_config.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_config.h?rev=1421559&r1=1421558&r2=1421559&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_config.h (original)
+++ subversion/trunk/subversion/include/svn_config.h Thu Dec 13 21:44:56 2012
@@ -88,6 +88,8 @@ typedef struct svn_config_t svn_config_t
#define SVN_CONFIG_OPTION_USERNAME "username"
/** @since New in 1.8. */
#define SVN_CONFIG_OPTION_HTTP_BULK_UPDATES "http-bulk-updates"
+/** @since New in 1.8. */
+#define SVN_CONFIG_OPTION_HTTP_MAX_CONNECTIONS "http-max-connections"
#define SVN_CONFIG_CATEGORY_CONFIG "config"
#define SVN_CONFIG_SECTION_AUTH "auth"
@@ -179,6 +181,7 @@ typedef struct svn_config_t svn_config_t
#define SVN_CONFIG_DEFAULT_OPTION_STORE_SSL_CLIENT_CERT_PP TRUE
#define SVN_CONFIG_DEFAULT_OPTION_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT \
SVN_CONFIG_ASK
+#define SVN_CONFIG_DEFAULT_OPTION_HTTP_MAX_CONNECTIONS 4
/** Read configuration information from the standard sources and merge it
* into the hash @a *cfg_hash. If @a config_dir is not NULL it specifies a
Modified: subversion/trunk/subversion/libsvn_ra_serf/ra_serf.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/ra_serf.h?rev=1421559&r1=1421558&r2=1421559&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_serf/ra_serf.h (original)
+++ subversion/trunk/subversion/libsvn_ra_serf/ra_serf.h Thu Dec 13 21:44:56 2012
@@ -94,10 +94,12 @@ typedef struct svn_ra_serf__connection_t
} svn_ra_serf__connection_t;
-/** Max. number of connctions we'll open to the server.
- * Note: minimum 2 connections are required for ra_serf to function correctly!
+/** Maximum value we'll allow for the http-max-connections config option.
+ *
+ * Note: minimum 2 connections are required for ra_serf to function
+ * correctly!
*/
-#define MAX_NR_OF_CONNS 4
+#define SVN_RA_SERF__MAX_CONNECTIONS_LIMIT 8
/*
* The master serf RA session.
@@ -111,6 +113,10 @@ struct svn_ra_serf__session_t {
/* The current context */
serf_context_t *context;
+ /* The maximum number of connections we'll use for parallelized
+ fetch operations (updates, etc.) */
+ apr_int64_t max_connections;
+
/* Are we using ssl */
svn_boolean_t using_ssl;
@@ -121,7 +127,7 @@ struct svn_ra_serf__session_t {
const char *useragent;
/* The current connection */
- svn_ra_serf__connection_t *conns[MAX_NR_OF_CONNS];
+ svn_ra_serf__connection_t *conns[SVN_RA_SERF__MAX_CONNECTIONS_LIMIT];
int num_conns;
int cur_conn;
Modified: subversion/trunk/subversion/libsvn_ra_serf/serf.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/serf.c?rev=1421559&r1=1421558&r2=1421559&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_serf/serf.c (original)
+++ subversion/trunk/subversion/libsvn_ra_serf/serf.c Thu Dec 13 21:44:56 2012
@@ -222,6 +222,12 @@ load_config(svn_ra_serf__session_t *sess
SVN_CONFIG_OPTION_HTTP_BULK_UPDATES,
FALSE));
+ /* Load the maximum number of parallel session connections. */
+ svn_config_get_int64(config, &session->max_connections,
+ SVN_CONFIG_SECTION_GLOBAL,
+ SVN_CONFIG_OPTION_HTTP_MAX_CONNECTIONS,
+ SVN_CONFIG_DEFAULT_OPTION_HTTP_MAX_CONNECTIONS);
+
if (config)
server_group = svn_config_find_group(config,
session->session_url.hostname,
@@ -270,8 +276,22 @@ load_config(svn_ra_serf__session_t *sess
server_group,
SVN_CONFIG_OPTION_HTTP_BULK_UPDATES,
session->bulk_updates));
+
+ /* Load the maximum number of parallel session connections,
+ overriding global values. */
+ svn_config_get_int64(config, &session->max_connections,
+ server_group, SVN_CONFIG_OPTION_HTTP_MAX_CONNECTIONS,
+ session->max_connections);
}
+ /* Don't allow the http-max-connections value to be larger than our
+ compiled-in limit, or to be too small to operate. Broken
+ functionality and angry administrators are equally undesirable. */
+ if (session->max_connections > SVN_RA_SERF__MAX_CONNECTIONS_LIMIT)
+ session->max_connections = SVN_RA_SERF__MAX_CONNECTIONS_LIMIT;
+ if (session->max_connections < 2)
+ session->max_connections = 2;
+
/* Parse the connection timeout value, if any. */
session->timeout = apr_time_from_sec(DEFAULT_HTTP_TIMEOUT);
if (timeout_str)
Modified: subversion/trunk/subversion/libsvn_ra_serf/update.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/update.c?rev=1421559&r1=1421558&r2=1421559&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_serf/update.c (original)
+++ subversion/trunk/subversion/libsvn_ra_serf/update.c Thu Dec 13 21:44:56 2012
@@ -2858,7 +2858,7 @@ finish_report(void *report_baton,
}
/* Open extra connections if we have enough requests to send. */
- if (sess->num_conns < MAX_NR_OF_CONNS)
+ if (sess->num_conns < sess->max_connections)
SVN_ERR(open_connection_if_needed(sess, report->num_active_fetches +
report->num_active_propfinds));
Modified: subversion/trunk/subversion/libsvn_subr/config_file.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/config_file.c?rev=1421559&r1=1421558&r2=1421559&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/config_file.c (original)
+++ subversion/trunk/subversion/libsvn_subr/config_file.c Thu Dec 13 21:44:56 2012
@@ -796,6 +796,9 @@ svn_config_ensure(const char *config_dir
"### http-timeout Timeout for HTTP requests in seconds"
NL
"### http-compression Whether to compress HTTP requests" NL
+ "### http-max-connections Maximum number of parallel server" NL
+ "### connections to use for any given" NL
+ "### HTTP operation." NL
"### neon-debug-mask Debug mask for Neon HTTP library" NL
"### ssl-authority-files List of files, each of a trusted CA"
NL