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

Side by Side Diff: net/tools/quic/quic_time_wait_list_manager.cc

Issue 1034573002: Improve QUIC tests. Correct things clang_tidy complains about. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/tools/quic/quic_time_wait_list_manager.h" 5 #include "net/tools/quic/quic_time_wait_list_manager.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 8
9 #include "base/containers/hash_tables.h" 9 #include "base/containers/hash_tables.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 79
80 DISALLOW_COPY_AND_ASSIGN(QueuedPacket); 80 DISALLOW_COPY_AND_ASSIGN(QueuedPacket);
81 }; 81 };
82 82
83 QuicTimeWaitListManager::QuicTimeWaitListManager( 83 QuicTimeWaitListManager::QuicTimeWaitListManager(
84 QuicPacketWriter* writer, 84 QuicPacketWriter* writer,
85 QuicServerSessionVisitor* visitor, 85 QuicServerSessionVisitor* visitor,
86 EpollServer* epoll_server, 86 EpollServer* epoll_server,
87 const QuicVersionVector& supported_versions) 87 const QuicVersionVector& supported_versions)
88 : epoll_server_(epoll_server), 88 : epoll_server_(epoll_server),
89 kTimeWaitPeriod_( 89 time_wait_period_(
90 QuicTime::Delta::FromSeconds(FLAGS_quic_time_wait_list_seconds)), 90 QuicTime::Delta::FromSeconds(FLAGS_quic_time_wait_list_seconds)),
91 connection_id_clean_up_alarm_(new ConnectionIdCleanUpAlarm(this)), 91 connection_id_clean_up_alarm_(new ConnectionIdCleanUpAlarm(this)),
92 clock_(epoll_server_), 92 clock_(epoll_server_),
93 writer_(writer), 93 writer_(writer),
94 visitor_(visitor) { 94 visitor_(visitor) {
95 SetConnectionIdCleanUpAlarm(); 95 SetConnectionIdCleanUpAlarm();
96 } 96 }
97 97
98 QuicTimeWaitListManager::~QuicTimeWaitListManager() { 98 QuicTimeWaitListManager::~QuicTimeWaitListManager() {
99 connection_id_clean_up_alarm_->UnregisterIfRegistered(); 99 connection_id_clean_up_alarm_->UnregisterIfRegistered();
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 return true; 252 return true;
253 } 253 }
254 254
255 void QuicTimeWaitListManager::SetConnectionIdCleanUpAlarm() { 255 void QuicTimeWaitListManager::SetConnectionIdCleanUpAlarm() {
256 connection_id_clean_up_alarm_->UnregisterIfRegistered(); 256 connection_id_clean_up_alarm_->UnregisterIfRegistered();
257 int64 next_alarm_interval; 257 int64 next_alarm_interval;
258 if (!connection_id_map_.empty()) { 258 if (!connection_id_map_.empty()) {
259 QuicTime oldest_connection_id = 259 QuicTime oldest_connection_id =
260 connection_id_map_.begin()->second.time_added; 260 connection_id_map_.begin()->second.time_added;
261 QuicTime now = clock_.ApproximateNow(); 261 QuicTime now = clock_.ApproximateNow();
262 if (now.Subtract(oldest_connection_id) < kTimeWaitPeriod_) { 262 if (now.Subtract(oldest_connection_id) < time_wait_period_) {
263 next_alarm_interval = oldest_connection_id.Add(kTimeWaitPeriod_) 263 next_alarm_interval = oldest_connection_id.Add(time_wait_period_)
264 .Subtract(now) 264 .Subtract(now)
265 .ToMicroseconds(); 265 .ToMicroseconds();
266 } else { 266 } else {
267 LOG(ERROR) << "ConnectionId lingered for longer than kTimeWaitPeriod"; 267 LOG(ERROR) << "ConnectionId lingered for longer than time_wait_period_";
268 next_alarm_interval = 0; 268 next_alarm_interval = 0;
269 } 269 }
270 } else { 270 } else {
271 // No connection_ids added so none will expire before kTimeWaitPeriod_. 271 // No connection_ids added so none will expire before time_wait_period_.
272 next_alarm_interval = kTimeWaitPeriod_.ToMicroseconds(); 272 next_alarm_interval = time_wait_period_.ToMicroseconds();
273 } 273 }
274 274
275 epoll_server_->RegisterAlarmApproximateDelta( 275 epoll_server_->RegisterAlarmApproximateDelta(
276 next_alarm_interval, connection_id_clean_up_alarm_.get()); 276 next_alarm_interval, connection_id_clean_up_alarm_.get());
277 } 277 }
278 278
279 bool QuicTimeWaitListManager::MaybeExpireOldestConnection( 279 bool QuicTimeWaitListManager::MaybeExpireOldestConnection(
280 QuicTime expiration_time) { 280 QuicTime expiration_time) {
281 if (connection_id_map_.empty()) { 281 if (connection_id_map_.empty()) {
282 return false; 282 return false;
283 } 283 }
284 ConnectionIdMap::iterator it = connection_id_map_.begin(); 284 ConnectionIdMap::iterator it = connection_id_map_.begin();
285 QuicTime oldest_connection_id_time = it->second.time_added; 285 QuicTime oldest_connection_id_time = it->second.time_added;
286 if (oldest_connection_id_time > expiration_time) { 286 if (oldest_connection_id_time > expiration_time) {
287 // Too recent, don't retire. 287 // Too recent, don't retire.
288 return false; 288 return false;
289 } 289 }
290 // This connection_id has lived its age, retire it now. 290 // This connection_id has lived its age, retire it now.
291 const QuicConnectionId connection_id = it->first; 291 const QuicConnectionId connection_id = it->first;
292 delete it->second.close_packet; 292 delete it->second.close_packet;
293 connection_id_map_.erase(it); 293 connection_id_map_.erase(it);
294 visitor_->OnConnectionRemovedFromTimeWaitList(connection_id); 294 visitor_->OnConnectionRemovedFromTimeWaitList(connection_id);
295 return true; 295 return true;
296 } 296 }
297 297
298 void QuicTimeWaitListManager::CleanUpOldConnectionIds() { 298 void QuicTimeWaitListManager::CleanUpOldConnectionIds() {
299 QuicTime now = clock_.ApproximateNow(); 299 QuicTime now = clock_.ApproximateNow();
300 QuicTime expiration = now.Subtract(kTimeWaitPeriod_); 300 QuicTime expiration = now.Subtract(time_wait_period_);
301 301
302 while (MaybeExpireOldestConnection(expiration)) { 302 while (MaybeExpireOldestConnection(expiration)) {
303 } 303 }
304 304
305 SetConnectionIdCleanUpAlarm(); 305 SetConnectionIdCleanUpAlarm();
306 } 306 }
307 307
308 void QuicTimeWaitListManager::TrimTimeWaitListIfNeeded() { 308 void QuicTimeWaitListManager::TrimTimeWaitListIfNeeded() {
309 if (FLAGS_quic_time_wait_list_max_connections < 0) { 309 if (FLAGS_quic_time_wait_list_max_connections < 0) {
310 return; 310 return;
311 } 311 }
312 while (num_connections() >= 312 while (num_connections() >=
313 static_cast<size_t>(FLAGS_quic_time_wait_list_max_connections)) { 313 static_cast<size_t>(FLAGS_quic_time_wait_list_max_connections)) {
314 MaybeExpireOldestConnection(QuicTime::Infinite()); 314 MaybeExpireOldestConnection(QuicTime::Infinite());
315 } 315 }
316 } 316 }
317 317
318 } // namespace tools 318 } // namespace tools
319 } // namespace net 319 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/quic_time_wait_list_manager.h ('k') | net/tools/quic/quic_time_wait_list_manager_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698