On 7/22/13 12:43 AM, Yongming Zhao wrote: > I'd like to include TS-1967, this is a better throttling than the net > throttling, which will not work well in most of the situation, it may case > either OOM or killed by heart beat from cop. we will provide another patch > for TS-1967, will fix the bug James point out. > > then we can remove the net throttling, due to this s feature change, if we > don't include it in v3.3.5, we'd delay to the V3.5-3.6 circle.
So i generally agree with splitting out the connection throttling in to "client" (_in) vs "server" (_out) limits and counters. What I dislike with this patch is that it feels incomplete. I'm also very concerned that this is a significant change, at a very late stage. I'm very torn on it, delaying this change until after v3.4.0 means keeping the configuration mess for another ~1 year to stay compatible within the major relase. In any case, IF we decide to incorporate this into v3.3.5, I'd like to see the following changes to the patch: 1. A patch that applies cleanly to current master. 2. It needs to either add another configuration, which is the number of file descriptors we need to use, or, it needs to calculate this based on something other than proxy.config.net.connections_throttle. 3. I'd like for proxy.config.net.connections_throttle to go away entirely. 4. It looks like *maybe* fds_accept was intended to replace / solve issue 2) and 3) above, but as far as I can tell, it's never used. 5. I'd like to have consistent namings of the configuration options. I find the two config names, and internal variables, very confusing. 6. I'd like to get a better understanding how this correlates to e.g. proxy.config.http.server_max_connections. For example, should the max FDs be the sum of max-client connections and proxy.config.http.server_max_connections ? (I think it might be, at least as a default). What gets complicated is that we also have proxy.config.http.origin_max_connections, which can yield basically unlimited number of connections unless throttled otherwise. E.g. should the sum of all origin_max_connections (which is per origin) always be less than proxy.config.http.server_max_connections as an invariant? As for 4), what's really confusing is that the patch actually has two features: the first is to limit the number of concurrently accepted connections (this is what the patch implies). The second is a throttle on the max number of active connections, the difference being that active connections have an HttpSM that's doing stuff. A suggestion for better variable names, which correlate better with existing "server" configs, would be proxy.config.net.client_max_connections proxy.config.net.client_max_active_connections Alternatively, we could rename them all to stick to the _in and _out prefixes, to avoid the confusion of what "server" refers to (we randomly choose "server" to mean the proxy server or the origin server in our configs, thanks James for making me look, I'm now blind). E.g. proxy.config.net.max_connections_in proxy.config.net.max_active_connections_in proxy.config.net.max_connections_out proxy.config.net.max_active_connections_out (this is new, no such feature today) proxy.config.net.max_per_origin_connections_out (replaces proxy.config.http.origin_max_connections) Looking at it, I definitely like this last format the best. It's clear, consistent with other configs, and more important, is completely unambiguous. We would with this config setup the number of FDs with a default of (proxy.config.net.max_connections_in + proxy.config.net.max_connections_out + padding), but it still needs an overridable configuration to deal with the case of someone using proxy.config.net.max_per_origin_connections_out. So, perhaps also a new config proxy.config.net.file_descriptors I'm definitely pro these changes, but I think they need some work for sure. Thoughts? -- Leif