Home | History | Annotate | Download | only in sync
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_SYNC_RETRY_VERIFIER_H_
      6 #define CHROME_BROWSER_SYNC_RETRY_VERIFIER_H_
      7 
      8 #include "base/time/time.h"
      9 
     10 // TODO(akalin): Move this to somewhere in sync/ and make
     11 // sync/engine/polling_constants.h private.
     12 
     13 namespace syncer {
     14 namespace sessions {
     15 class SyncSessionSnapshot;
     16 }  // namespace sessions
     17 }  // namespace syncer
     18 
     19 namespace browser_sync {
     20 
     21 // The minimum and maximum wait times for a retry. The actual retry would take
     22 // place somewhere in this range. The algorithm that calculates the retry wait
     23 // time uses rand functions.
     24 struct DelayInfo {
     25   int64 min_delay;
     26   int64 max_delay;
     27 };
     28 
     29 // Class to verify retries take place using the exponential backoff algorithm.
     30 class RetryVerifier {
     31  public:
     32   static const int kMaxRetry = 3;
     33   RetryVerifier();
     34   ~RetryVerifier();
     35   int retry_count() const { return retry_count_; }
     36 
     37   // Initialize with the current sync session snapshot. Using the snapshot
     38   // we will figure out when the first retry sync happened.
     39   void Initialize(const syncer::sessions::SyncSessionSnapshot& snap);
     40   void VerifyRetryInterval(
     41       const syncer::sessions::SyncSessionSnapshot& snap);
     42   bool done() const { return done_; }
     43   bool Succeeded() const { return done() && success_; }
     44 
     45  private:
     46   int retry_count_;
     47   base::Time last_sync_time_;
     48   DelayInfo delay_table_[kMaxRetry];
     49   bool success_;
     50   bool done_;
     51   DISALLOW_COPY_AND_ASSIGN(RetryVerifier);
     52 };
     53 
     54 }  // namespace browser_sync
     55 
     56 #endif  // CHROME_BROWSER_SYNC_RETRY_VERIFIER_H_
     57