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

Unified Diff: net/tools/quic/quic_time_wait_list_manager.cc

Issue 862133002: Update from https://crrev.com/312398 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 11 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
Index: net/tools/quic/quic_time_wait_list_manager.cc
diff --git a/net/tools/quic/quic_time_wait_list_manager.cc b/net/tools/quic/quic_time_wait_list_manager.cc
index ed6addc4c8644238b7dbc1b8e5132031b610d3e1..1cb86a584a2db19b64ab1b1873ea47b6f0636b32 100644
--- a/net/tools/quic/quic_time_wait_list_manager.cc
+++ b/net/tools/quic/quic_time_wait_list_manager.cc
@@ -14,6 +14,7 @@
#include "net/quic/crypto/quic_decrypter.h"
#include "net/quic/crypto/quic_encrypter.h"
#include "net/quic/quic_clock.h"
+#include "net/quic/quic_flags.h"
#include "net/quic/quic_framer.h"
#include "net/quic/quic_protocol.h"
#include "net/quic/quic_utils.h"
@@ -26,13 +27,8 @@ using std::make_pair;
namespace net {
namespace tools {
-namespace {
-
-// Time period for which a given connection_id should live in the time-wait
-// state.
-int64 FLAGS_quic_time_wait_list_seconds = 5;
-
-} // namespace
+// TODO(rtenneti): Remove the duplicated code in this file. Share code with
+// "net/quic/quic_time_wait_list_manager.cc"
// A very simple alarm that just informs the QuicTimeWaitListManager to clean
// up old connection_ids. This alarm should be unregistered and deleted before
@@ -122,6 +118,11 @@ void QuicTimeWaitListManager::AddConnectionIdToTimeWait(
delete it->second.close_packet;
connection_id_map_.erase(it);
}
+ TrimTimeWaitListIfNeeded();
+ if (FLAGS_quic_limit_time_wait_list_size) {
+ DCHECK_LT(num_connections(),
+ static_cast<size_t>(FLAGS_quic_time_wait_list_max_connections));
+ }
ConnectionIdData data(num_packets,
version,
clock_.ApproximateNow(),
@@ -278,22 +279,60 @@ void QuicTimeWaitListManager::SetConnectionIdCleanUpAlarm() {
next_alarm_interval, connection_id_clean_up_alarm_.get());
}
+bool QuicTimeWaitListManager::MaybeExpireOldestConnection(
+ QuicTime expiration_time) {
+ if (connection_id_map_.empty()) {
+ return false;
+ }
+ ConnectionIdMap::iterator it = connection_id_map_.begin();
+ QuicTime oldest_connection_id_time = it->second.time_added;
+ if (oldest_connection_id_time > expiration_time) {
+ // Too recent, don't retire.
+ return false;
+ }
+ // This connection_id has lived its age, retire it now.
+ const QuicConnectionId connection_id = it->first;
+ delete it->second.close_packet;
+ connection_id_map_.erase(it);
+ visitor_->OnConnectionRemovedFromTimeWaitList(connection_id);
+ return true;
+}
+
void QuicTimeWaitListManager::CleanUpOldConnectionIds() {
QuicTime now = clock_.ApproximateNow();
- while (!connection_id_map_.empty()) {
- ConnectionIdMap::iterator it = connection_id_map_.begin();
- QuicTime oldest_connection_id = it->second.time_added;
- if (now.Subtract(oldest_connection_id) < kTimeWaitPeriod_) {
- break;
+ QuicTime expiration = now.Subtract(kTimeWaitPeriod_);
+ if (FLAGS_quic_limit_time_wait_list_size) {
+ while (MaybeExpireOldestConnection(expiration)) {
+ }
+ } else {
+ while (!connection_id_map_.empty()) {
+ ConnectionIdMap::iterator it = connection_id_map_.begin();
+ QuicTime oldest_connection_id = it->second.time_added;
+ if (now.Subtract(oldest_connection_id) < kTimeWaitPeriod_) {
+ break;
+ }
+ const QuicConnectionId connection_id = it->first;
+ // This connection_id has lived its age, retire it now.
+ delete it->second.close_packet;
+ connection_id_map_.erase(it);
+ visitor_->OnConnectionRemovedFromTimeWaitList(connection_id);
}
- const QuicConnectionId connection_id = it->first;
- // This connection_id has lived its age, retire it now.
- delete it->second.close_packet;
- connection_id_map_.erase(it);
- visitor_->OnConnectionRemovedFromTimeWaitList(connection_id);
}
+
SetConnectionIdCleanUpAlarm();
}
+void QuicTimeWaitListManager::TrimTimeWaitListIfNeeded() {
+ if (FLAGS_quic_limit_time_wait_list_size) {
+ if (FLAGS_quic_time_wait_list_max_connections < 0) {
+ return;
+ }
+ while (num_connections() >=
+ static_cast<size_t>(FLAGS_quic_time_wait_list_max_connections)) {
+ MaybeExpireOldestConnection(QuicTime::Infinite());
+ }
+ }
+}
+
} // namespace tools
} // namespace net

Powered by Google App Engine
This is Rietveld 408576698