Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(532)

Unified Diff: net/quic/chromium/quic_stream_factory.h

Issue 2320313003: Revert of Remove obsolete QUIC disabling code. (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/chromium/quic_chromium_client_session.cc ('k') | net/quic/chromium/quic_stream_factory.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/chromium/quic_stream_factory.h
diff --git a/net/quic/chromium/quic_stream_factory.h b/net/quic/chromium/quic_stream_factory.h
index ef0cf91442a622e6324a16c486ccc86a50062249..c955bcae0ed1fe42c81d91b9f8c3cb6278e821c0 100644
--- a/net/quic/chromium/quic_stream_factory.h
+++ b/net/quic/chromium/quic_stream_factory.h
@@ -179,6 +179,11 @@
bool enable_non_blocking_io,
bool disable_disk_cache,
bool prefer_aes,
+ int max_number_of_lossy_connections,
+ float packet_loss_threshold,
+ int max_recent_disabled_reasons,
+ int threshold_timeouts_with_streams_open,
+ int threshold_public_resets_post_handshake,
int socket_receive_buffer_size,
bool delay_tcp_race,
int max_server_configs_stored_in_properties,
@@ -216,16 +221,30 @@
const BoundNetLog& net_log,
QuicStreamRequest* request);
- // Called when the handshake for |session| is confirmed. If QUIC is disabled
- // currently disabled, then it closes the connection and returns true.
- bool OnHandshakeConfirmed(QuicChromiumClientSession* session);
+ // If |packet_loss_rate| is greater than or equal to |packet_loss_threshold_|
+ // it marks QUIC as recently broken for the port of the session. Increments
+ // |number_of_lossy_connections_| by port. If |number_of_lossy_connections_|
+ // is greater than or equal to |max_number_of_lossy_connections_| then it
+ // disables QUIC. If QUIC is disabled then it closes the connection.
+ //
+ // Returns true if QUIC is disabled for the port of the session.
+ bool OnHandshakeConfirmed(QuicChromiumClientSession* session,
+ float packet_loss_rate);
// Called when a TCP job completes for an origin that QUIC potentially
// could be used for.
void OnTcpJobCompleted(bool succeeded);
- // Returns true if QUIC is disabled.
- bool IsQuicDisabled() const;
+ // Returns true if QUIC is disabled for this port.
+ bool IsQuicDisabled(uint16_t port) const;
+
+ // Returns reason QUIC is disabled for this port, or QUIC_DISABLED_NOT if not.
+ QuicChromiumClientSession::QuicDisabledReason QuicDisabledReason(
+ uint16_t port) const;
+
+ // Returns reason QUIC is disabled as string for net-internals, or
+ // returns empty string if QUIC is not disabled.
+ const char* QuicDisabledReasonString() const;
// Called by a session when it becomes idle.
void OnIdleSession(QuicChromiumClientSession* session);
@@ -368,6 +387,7 @@
class Job;
class CertVerifierJob;
friend class test::QuicStreamFactoryPeer;
+ FRIEND_TEST_ALL_PREFIXES(HttpStreamFactoryTest, QuicLossyProxyMarkedAsBad);
typedef std::map<QuicServerId, QuicChromiumClientSession*> SessionMap;
typedef std::map<QuicChromiumClientSession*, QuicSessionKey> SessionIdMap;
@@ -381,6 +401,8 @@
typedef std::map<QuicStreamRequest*, QuicServerId> RequestMap;
typedef std::set<QuicStreamRequest*> RequestSet;
typedef std::map<QuicServerId, RequestSet> ServerIDRequestsMap;
+ typedef std::deque<enum QuicChromiumClientSession::QuicDisabledReason>
+ DisabledReasonsQueue;
typedef std::map<QuicServerId, std::unique_ptr<CertVerifierJob>>
CertVerifierJobMap;
@@ -452,6 +474,11 @@
const QuicServerId& server_id,
bool was_session_active);
+ // Collect stats from recent connections, possibly disabling Quic.
+ void MaybeDisableQuic(QuicChromiumClientSession* session);
+
+ void MaybeDisableQuic(uint16_t port);
+
// Internal method that migrates |session| over to using
// |peer_address| and |network|. If |network| is kInvalidNetworkHandle,
// default network is used. If |packet| is not null, it is sent
@@ -545,9 +572,30 @@
// Set if AES-GCM should be preferred, even if there is no hardware support.
bool prefer_aes_;
- // True if QUIC should be disabled when there are timeouts with open
- // streams.
- bool disable_quic_on_timeout_with_open_streams_;
+ // Set if we want to disable QUIC when there is high packet loss rate.
+ // Specifies the maximum number of connections with high packet loss in a row
+ // after which QUIC will be disabled.
+ int max_number_of_lossy_connections_;
+ // Specifies packet loss rate in fraction after which a connection is closed
+ // and is considered as a lossy connection.
+ float packet_loss_threshold_;
+ // Count number of lossy connections by port.
+ std::map<uint16_t, int> number_of_lossy_connections_;
+
+ // Keep track of stats for recently closed connections, using a
+ // bounded queue.
+ int max_disabled_reasons_;
+ DisabledReasonsQueue disabled_reasons_;
+ // Events that can trigger disabling QUIC
+ int num_public_resets_post_handshake_;
+ int num_timeouts_with_open_streams_;
+ // Keep track the largest values for UMA histograms, that will help
+ // determine good threshold values.
+ int max_public_resets_post_handshake_;
+ int max_timeouts_with_open_streams_;
+ // Thresholds if greater than zero, determine when to
+ int threshold_timeouts_with_open_streams_;
+ int threshold_public_resets_post_handshake_;
// Size of the UDP receive buffer.
int socket_receive_buffer_size_;
« no previous file with comments | « net/quic/chromium/quic_chromium_client_session.cc ('k') | net/quic/chromium/quic_stream_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698