Move retry delay calculation into wakeup, since it's only used there.

This commit is contained in:
Ian Gulliver
2016-02-22 16:33:00 -08:00
parent d6a629fa7e
commit 21536eee33
6 changed files with 16 additions and 23 deletions

View File

@@ -11,7 +11,6 @@
#include <errno.h>
#include "common.h"
#include "rand.h"
#include "uuid.h"
#include "wakeup.h"
@@ -229,16 +228,3 @@ void hex_from_int_upper(char *out, uint64_t in, size_t bytes) {
void hex_from_int_lower(char *out, uint64_t in, size_t bytes) {
hex_from_int(out, in, bytes, hex_lower_table);
}
#define RETRY_MIN_MS 2000
#define RETRY_MAX_MS 60000
uint32_t retry_get_delay_ms(uint32_t attempt) {
uint32_t max_delay = RETRY_MIN_MS * (1 << attempt);
max_delay = max_delay > RETRY_MAX_MS ? RETRY_MAX_MS : max_delay;
uint32_t jitter;
rand_fill(&jitter, sizeof(jitter));
return jitter % max_delay;
}

View File

@@ -87,10 +87,3 @@ void hex_from_bin_upper(char *, const uint8_t *, size_t);
void hex_from_bin_lower(char *, const uint8_t *, size_t);
void hex_from_int_upper(char *, uint64_t, size_t);
void hex_from_int_lower(char *, uint64_t, size_t);
///////// retry timing
void retry_init();
void retry_cleanup();
uint32_t retry_get_delay_ms(uint32_t);

View File

@@ -32,7 +32,7 @@ static struct incoming *incoming_head = NULL;
static void incoming_resolve_wrapper(struct peer *);
static void incoming_retry(struct incoming *incoming) {
uint32_t delay = retry_get_delay_ms(incoming->attempt++);
uint32_t delay = wakeup_get_retry_delay_ms(incoming->attempt++);
fprintf(stderr, "I %s: Will retry in %ds\n", incoming->id, delay / 1000);
incoming->peer.event_handler = incoming_resolve_wrapper;
wakeup_add((struct peer *) incoming, delay);

View File

@@ -34,7 +34,7 @@ static void outgoing_resolve(struct outgoing *);
static void outgoing_resolve_wrapper(struct peer *);
static void outgoing_retry(struct outgoing *outgoing) {
uint32_t delay = retry_get_delay_ms(outgoing->attempt++);
uint32_t delay = wakeup_get_retry_delay_ms(outgoing->attempt++);
fprintf(stderr, "O %s: Will retry in %ds\n", outgoing->id, delay / 1000);
outgoing->peer.event_handler = outgoing_resolve_wrapper;
wakeup_add((struct peer *) outgoing, delay);

View File

@@ -11,6 +11,7 @@
#include <sys/epoll.h>
#include "common.h"
#include "rand.h"
#include "wakeup.h"
@@ -83,3 +84,15 @@ void wakeup_add(struct peer *peer, uint32_t delay_ms) {
head = entry;
}
}
#define RETRY_MIN_MS 2000
#define RETRY_MAX_MS 60000
uint32_t wakeup_get_retry_delay_ms(uint32_t attempt) {
uint32_t max_delay = RETRY_MIN_MS * (1 << attempt);
max_delay = max_delay > RETRY_MAX_MS ? RETRY_MAX_MS : max_delay;
uint32_t jitter;
rand_fill(&jitter, sizeof(jitter));
return jitter % max_delay;
}

View File

@@ -7,3 +7,4 @@ void wakeup_cleanup();
int wakeup_get_delay();
void wakeup_dispatch();
void wakeup_add(struct peer *, uint32_t);
uint32_t wakeup_get_retry_delay_ms(uint32_t);