コード例 #1
0
ファイル: backoff.c プロジェクト: 201528013359030/grpc
gpr_timespec gpr_backoff_step(gpr_backoff *backoff, gpr_timespec now) {
  double new_timeout_millis =
      backoff->multiplier * (double)backoff->current_timeout_millis;
  double jitter_range = backoff->jitter * new_timeout_millis;
  double jitter =
      (2 * generate_uniform_random_number(&backoff->rng_state) - 1) *
      jitter_range;
  backoff->current_timeout_millis =
      GPR_CLAMP((int64_t)(new_timeout_millis + jitter),
                backoff->min_timeout_millis, backoff->max_timeout_millis);
  return gpr_time_add(
      now, gpr_time_from_millis(backoff->current_timeout_millis, GPR_TIMESPAN));
}
コード例 #2
0
ファイル: backoff.c プロジェクト: Indifer/grpc
gpr_timespec gpr_backoff_step(gpr_backoff *backoff, gpr_timespec now) {
  const double new_timeout_millis =
      backoff->multiplier * (double)backoff->current_timeout_millis;
  backoff->current_timeout_millis =
      GPR_MIN((int64_t)new_timeout_millis, backoff->max_timeout_millis);

  const double jitter_range_width = backoff->jitter * new_timeout_millis;
  const double jitter =
      (2 * generate_uniform_random_number(&backoff->rng_state) - 1) *
      jitter_range_width;

  backoff->current_timeout_millis =
      (int64_t)((double)(backoff->current_timeout_millis) + jitter);

  const gpr_timespec current_deadline = gpr_time_add(
      now, gpr_time_from_millis(backoff->current_timeout_millis, GPR_TIMESPAN));

  const gpr_timespec min_deadline = gpr_time_add(
      now, gpr_time_from_millis(backoff->min_timeout_millis, GPR_TIMESPAN));

  return gpr_time_max(current_deadline, min_deadline);
}