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

Unified Diff: chrome/browser/url_fetcher_protect.h

Issue 18305: Move url_* to net subdir (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 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
« no previous file with comments | « chrome/browser/url_fetcher.cc ('k') | chrome/browser/url_fetcher_protect.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/url_fetcher_protect.h
===================================================================
--- chrome/browser/url_fetcher_protect.h (revision 8164)
+++ chrome/browser/url_fetcher_protect.h (working copy)
@@ -1,145 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// This file implements backoff in the suggest system so that we don't
-// DOS the Suggest servers when using URLFetcher.
-
-#ifndef CHROME_BROWSER_URL_FETCHER_PROTECT_H__
-#define CHROME_BROWSER_URL_FETCHER_PROTECT_H__
-
-#include <map>
-#include <queue>
-#include <string>
-
-#include "base/lock.h"
-#include "base/logging.h"
-#include "base/scoped_ptr.h"
-#include "base/time.h"
-
-
-// This class is used to manage one service's rate protection. It maintains
-// a queue of connection successes and failures and analyzes the requests
-// over some period of time, in order to deduce the backoff time of every
-// request.
-// The backoff algorithm consists of two parts. Firstly, avoid too many
-// send events in a sliding window. That will prevent traffic overload.
-// Secondly, exponential backoff is used when receiving an error message
-// from server. Exponential backoff period is calculated using the following
-// formula:
-//
-// initial backoff time (the first time to receive error)
-// backoff = k * current_backoff + c (the second, third, ... error)
-// maximum backoff time (when backoff > maximum backoff time)
-//
-// where |k| is the multiplier, and |c| is the constant factor.
-class URLFetcherProtectEntry {
- public:
- enum EventType {
- SEND, // request will be sent out
- SUCCESS, // successful response
- FAILURE // no response or error
- };
-
- URLFetcherProtectEntry();
- URLFetcherProtectEntry(int sliding_window_period, int max_send_threshold,
- int max_retries, int initial_timeout,
- double multiplier, int constant_factor,
- int maximum_timeout);
-
-
- virtual ~URLFetcherProtectEntry() { }
-
- // When a connection event happens, log it to the queue, and recalculate
- // the timeout period. It returns the backoff time, in milliseconds, that
- // indicates to the sender how long should it wait before sending the request.
- // If the request is allowed to be sent immediately, the backoff time is 0.
- int UpdateBackoff(EventType event_type);
-
- // Returns the max retries allowed.
- int max_retries() const {
- return max_retries_;
- }
-
- private:
- // When a request comes, calculate the release time for it.
- // Returns the backoff time before sending.
- base::TimeDelta AntiOverload();
- // Resets backoff when service is ok.
- // Returns the backoff time before sending.
- base::TimeDelta ResetBackoff();
- // Calculates new backoff when encountering a failure.
- // Returns the backoff time before sending.
- base::TimeDelta IncreaseBackoff();
-
- // Default parameters. Time is in milliseconds.
- static const int kDefaultSlidingWindowPeriod;
- static const int kDefaultMaxSendThreshold;
- static const int kDefaultMaxRetries;
- static const int kDefaultInitialTimeout;
- static const double kDefaultMultiplier;
- static const int kDefaultConstantFactor;
- static const int kDefaultMaximumTimeout;
-
- // time to consider events when checking backoff
- int sliding_window_period_;
-
- // maximum number of requests allowed in sliding window period
- int max_send_threshold_;
- // maximum retris allowed
- int max_retries_;
-
- // initial timeout on first failure
- int initial_timeout_;
- // factor by which to multiply on exponential backoff (e.g., 2.0)
- double multiplier_;
- // constant time term to add to each attempt
- int constant_factor_;
- // maximum amount of time between requests
- int maximum_timeout_;
-
- // current exponential backoff period
- int timeout_period_;
- // time that protection is scheduled to end
- base::TimeTicks release_time_;
-
- // Sets up a lock to ensure thread safe.
- Lock lock_;
-
- // A list of the recent send events. We ues them to decide whether
- // there are too many requests sent in sliding window.
- std::queue<base::TimeTicks> send_log_;
-
- DISALLOW_COPY_AND_ASSIGN(URLFetcherProtectEntry);
-};
-
-
-// This singleton class is used to manage all protect entries.
-// Now we use the host name as service id.
-class URLFetcherProtectManager {
- public:
- ~URLFetcherProtectManager();
-
- // Returns the global instance of this class.
- static URLFetcherProtectManager* GetInstance();
-
- // Registers a new entry in this service. If the entry already exists,
- // just returns it.
- URLFetcherProtectEntry* Register(std::string id);
- // Always registers the entry even when it exists.
- URLFetcherProtectEntry* Register(std::string id,
- URLFetcherProtectEntry* entry);
-
- private:
- URLFetcherProtectManager() { }
-
- typedef std::map<const std::string, URLFetcherProtectEntry*> ProtectService;
-
- static Lock lock_;
- static scoped_ptr<URLFetcherProtectManager> protect_manager_;
- ProtectService services_;
-
- DISALLOW_COPY_AND_ASSIGN(URLFetcherProtectManager);
-};
-
-#endif // CHROME_BROWSER_URL_FETCHER_PROTECT_H__
« no previous file with comments | « chrome/browser/url_fetcher.cc ('k') | chrome/browser/url_fetcher_protect.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698