strategy.js

- Jump To … +
  index.js backoff.js function_call.js exponential.js fibonacci.js strategy.js

- # strategy.js

- ¶

       Copyright (c) 2012 Mathieu Turcotte
       Licensed under the MIT license.

      var events = require('events');
      var util = require('util');

      function isDef(value) {
          return value !== undefined && value !== null;
      }

- ¶

  Abstract class defining the skeleton for the backoff strategies. Accepts an object holding the options for the backoff strategy:

  - `randomisationFactor`: The randomisation factor which must be between 0 and 1 where 1 equates to a randomization factor of 100% and 0 to no randomization.
  - `initialDelay`: The backoff initial delay in milliseconds.
  - `maxDelay`: The backoff maximal delay in milliseconds.

      function BackoffStrategy(options) {
          options = options || {};

          if (isDef(options.initialDelay) && options.initialDelay < 1) {
              throw new Error('The initial timeout must be greater than 0.');
          } else if (isDef(options.maxDelay) && options.maxDelay < 1) {
              throw new Error('The maximal timeout must be greater than 0.');
          }

          this.initialDelay_ = options.initialDelay || 100;
          this.maxDelay_ = options.maxDelay || 10000;

          if (this.maxDelay_ <= this.initialDelay_) {
              throw new Error('The maximal backoff delay must be ' +
                              'greater than the initial backoff delay.');
          }

          if (isDef(options.randomisationFactor) &&
              (options.randomisationFactor < 0 || options.randomisationFactor > 1)) {
              throw new Error('The randomisation factor must be between 0 and 1.');
          }

          this.randomisationFactor_ = options.randomisationFactor || 0;
      }

- ¶

  Gets the maximal backoff delay.

      BackoffStrategy.prototype.getMaxDelay = function() {
          return this.maxDelay_;
      };

- ¶

  Gets the initial backoff delay.

      BackoffStrategy.prototype.getInitialDelay = function() {
          return this.initialDelay_;
      };

- ¶

  Template method that computes and returns the next backoff delay in milliseconds.

      BackoffStrategy.prototype.next = function() {
          var backoffDelay = this.next_();
          var randomisationMultiple = 1 + Math.random() * this.randomisationFactor_;
          var randomizedDelay = Math.round(backoffDelay * randomisationMultiple);
          return randomizedDelay;
      };

- ¶

  Computes and returns the next backoff delay. Intended to be overridden by subclasses.

      BackoffStrategy.prototype.next_ = function() {
          throw new Error('BackoffStrategy.next_() unimplemented.');
      };

- ¶

  Template method that resets the backoff delay to its initial value.

      BackoffStrategy.prototype.reset = function() {
          this.reset_();
      };

- ¶

  Resets the backoff delay to its initial value. Intended to be overridden by subclasses.

      BackoffStrategy.prototype.reset_ = function() {
          throw new Error('BackoffStrategy.reset_() unimplemented.');
      };

      module.exports = BackoffStrategy;